@internetarchive/collection-browser 0.1.8 → 0.2.0
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/.github/workflows/gh-pages-main.yml +39 -0
- package/.github/workflows/npm-publish.yml +39 -0
- package/.github/workflows/pr-preview.yml +38 -0
- package/README.md +21 -2
- package/dist/{demo → src}/app-root.d.ts +0 -0
- package/dist/{demo → src}/app-root.js +0 -0
- package/dist/src/app-root.js.map +1 -0
- package/dist/src/collection-browser.d.ts +6 -0
- package/dist/src/collection-browser.js +49 -25
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/styles/{index.d.ts → item-image-styles.d.ts} +0 -0
- package/dist/src/styles/{index.js → item-image-styles.js} +20 -25
- package/dist/src/styles/item-image-styles.js.map +1 -0
- package/dist/src/tiles/grid/account-tile.js +2 -0
- package/dist/src/tiles/grid/account-tile.js.map +1 -1
- package/dist/src/tiles/grid/item-tile.js +13 -11
- package/dist/src/tiles/grid/item-tile.js.map +1 -1
- package/dist/src/tiles/item-image.d.ts +17 -13
- package/dist/src/tiles/item-image.js +63 -244
- package/dist/src/tiles/item-image.js.map +1 -1
- package/dist/src/tiles/list/tile-list-compact.d.ts +1 -0
- package/dist/src/tiles/list/tile-list-compact.js +2 -0
- package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
- package/dist/src/tiles/list/tile-list.d.ts +2 -1
- package/dist/src/tiles/list/tile-list.js +2 -0
- package/dist/src/tiles/list/tile-list.js.map +1 -1
- package/{demo/index.html → index.html} +1 -3
- package/package.json +13 -7
- package/{demo → src}/app-root.ts +0 -0
- package/src/collection-browser.ts +51 -25
- package/src/styles/item-image-styles.ts +97 -0
- package/src/tiles/grid/account-tile.ts +2 -0
- package/src/tiles/grid/item-tile.ts +7 -6
- package/src/tiles/item-image.ts +68 -255
- package/src/tiles/item-tile-image.ts +61 -0
- package/src/tiles/list/tile-list-compact.ts +4 -0
- package/src/tiles/list/tile-list.ts +6 -1
- package/tsconfig.json +1 -1
- package/vite.config.ts +22 -0
- package/web-dev-server.config.mjs +1 -1
- package/dist/.nojekyll +0 -0
- package/dist/app-root.js +0 -816
- package/dist/demo/app-root.js.map +0 -1
- package/dist/index.html +0 -23
- package/dist/src/styles/index.js.map +0 -1
- package/dist/src/tiles/image/item-image.d.ts +0 -18
- package/dist/src/tiles/image/item-image.js +0 -210
- package/dist/src/tiles/image/item-image.js.map +0 -1
- package/dist/src/tiles/image/waveform-image.d.ts +0 -16
- package/dist/src/tiles/image/waveform-image.js +0 -168
- package/dist/src/tiles/image/waveform-image.js.map +0 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# This workflow will generate the static page under `main` subdirectory inside the `gh-pages` branch
|
|
2
|
+
|
|
3
|
+
# This workflow will run every time new changes were pushed to the `main` branch
|
|
4
|
+
|
|
5
|
+
name: App build CI/CD to main branch
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
push:
|
|
9
|
+
branches: [ main ]
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v3
|
|
17
|
+
with:
|
|
18
|
+
persist-credentials: false
|
|
19
|
+
|
|
20
|
+
- uses: actions/setup-node@v3
|
|
21
|
+
with:
|
|
22
|
+
node-version: 16.x
|
|
23
|
+
|
|
24
|
+
- name: Install dependencies
|
|
25
|
+
run: yarn install
|
|
26
|
+
|
|
27
|
+
- name: Create build files for gh-pages deploy
|
|
28
|
+
run: yarn prepare:ghpages
|
|
29
|
+
|
|
30
|
+
# Reference: https://github.com/JamesIves/github-pages-deploy-action
|
|
31
|
+
- name: Deploy 🚀
|
|
32
|
+
uses: JamesIves/github-pages-deploy-action@v4.3.3
|
|
33
|
+
with:
|
|
34
|
+
branch: gh-pages
|
|
35
|
+
folder: ghpages
|
|
36
|
+
clean-exclude: pr/
|
|
37
|
+
force: false
|
|
38
|
+
target-folder: main
|
|
39
|
+
token: ${{ secrets.GH_TOKEN }}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# This workflow will be triggered if there's a new release tag created/pushed in Github repo
|
|
2
|
+
|
|
3
|
+
# This workflow will do the following:
|
|
4
|
+
# - run tests using node
|
|
5
|
+
# - publish a package to GitHub Packages when a release is created
|
|
6
|
+
|
|
7
|
+
# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
|
|
8
|
+
|
|
9
|
+
name: Node.js Package
|
|
10
|
+
|
|
11
|
+
on:
|
|
12
|
+
release:
|
|
13
|
+
types: [created]
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
build:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v3
|
|
20
|
+
- uses: actions/setup-node@v3
|
|
21
|
+
with:
|
|
22
|
+
node-version: 16
|
|
23
|
+
- run: npm ci
|
|
24
|
+
- run: npm prepare
|
|
25
|
+
- run: npm test
|
|
26
|
+
|
|
27
|
+
publish-npm:
|
|
28
|
+
needs: build
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
steps:
|
|
31
|
+
- uses: actions/checkout@v3
|
|
32
|
+
- uses: actions/setup-node@v3
|
|
33
|
+
with:
|
|
34
|
+
node-version: 16
|
|
35
|
+
registry-url: https://registry.npmjs.org/
|
|
36
|
+
- run: npm ci
|
|
37
|
+
- run: npm publish --tag next
|
|
38
|
+
env:
|
|
39
|
+
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# This workflow will generate the static page under `pr` subdirectory inside the `gh-pages` branch
|
|
2
|
+
|
|
3
|
+
# This workflow will run every time there's a PR opened, reopened, synchronize, or closed
|
|
4
|
+
|
|
5
|
+
name: Deploy PR previews
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
pull_request:
|
|
9
|
+
types:
|
|
10
|
+
- opened
|
|
11
|
+
- reopened
|
|
12
|
+
- synchronize
|
|
13
|
+
- closed
|
|
14
|
+
|
|
15
|
+
concurrency: preview-${{ github.ref }}
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
deploy-preview:
|
|
19
|
+
runs-on: ubuntu-20.04
|
|
20
|
+
steps:
|
|
21
|
+
- name: Checkout
|
|
22
|
+
uses: actions/checkout@v3
|
|
23
|
+
|
|
24
|
+
- uses: actions/setup-node@v3
|
|
25
|
+
with:
|
|
26
|
+
node-version: 16.x
|
|
27
|
+
|
|
28
|
+
- name: Install and Build
|
|
29
|
+
run: |
|
|
30
|
+
yarn install
|
|
31
|
+
yarn prepare:ghpages
|
|
32
|
+
|
|
33
|
+
# Reference: https://github.com/rossjrw/pr-preview-action
|
|
34
|
+
- name: Deploy preview
|
|
35
|
+
uses: rossjrw/pr-preview-action@v1
|
|
36
|
+
with:
|
|
37
|
+
source-dir: ./ghpages/
|
|
38
|
+
umbrella-dir: pr
|
package/README.md
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-

|
|
1
|
+
 [](https://codecov.io/gh/internetarchive/iaux-collection-browser)
|
|
2
|
+
|
|
2
3
|
|
|
3
4
|
# Internet Archive Collection Browser
|
|
4
5
|
|
|
5
6
|
This is the main collection browser for the Internet Archive website.
|
|
6
7
|
|
|
8
|
+
[Review app URL](https://internetarchive.github.io/iaux-collection-browser/main)
|
|
7
9
|
## Usage
|
|
8
10
|
|
|
9
11
|
```ts
|
|
@@ -15,9 +17,10 @@ import '@internetarchive/collection-browser';
|
|
|
15
17
|
|
|
16
18
|
## Local Demo with `web-dev-server`
|
|
17
19
|
```bash
|
|
20
|
+
yarn install
|
|
18
21
|
yarn start
|
|
19
22
|
```
|
|
20
|
-
To run a local development server that serves the basic demo located in `
|
|
23
|
+
To run a local development server that serves the basic demo located in `index.html`
|
|
21
24
|
|
|
22
25
|
## Testing with Web Test Runner
|
|
23
26
|
To run the suite of Web Test Runner tests, run
|
|
@@ -63,3 +66,19 @@ yarn run format:prettier
|
|
|
63
66
|
For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.
|
|
64
67
|
|
|
65
68
|
If you customize the configuration a lot, you can consider moving them to individual files.
|
|
69
|
+
|
|
70
|
+
## Manual Deploy using `gh-pages`
|
|
71
|
+
|
|
72
|
+
Live demo app from current main branch: [https://internetarchive.github.io/iaux-collection-browser](https://internetarchive.github.io/iaux-collection-browser)
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
yarn run deploy
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Automatic Deploy of Demo App
|
|
79
|
+
|
|
80
|
+
When you create a Pull Request, if your code passes codecov unit tests, it will be always served live at base url / pull request number. For this demo app, you must create a Pull Request, nothing will be created from a simple branch.
|
|
81
|
+
|
|
82
|
+
This URL will be removed when the Pull Request is merged/closed.
|
|
83
|
+
|
|
84
|
+
Example: `https://internetarchive.github.io/iaux-collection-browser/pr/<pr-number>`
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-root.js","sourceRoot":"","sources":["../../src/app-root.ts"],"names":[],"mappings":"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","sourcesContent":["import { SearchService } from '@internetarchive/search-service';\nimport { LocalCache } from '@internetarchive/local-cache';\nimport { html, css, LitElement, PropertyValues } from 'lit';\nimport { customElement, query, state } from 'lit/decorators.js';\nimport { SharedResizeObserver } from '@internetarchive/shared-resize-observer';\nimport { CollectionNameCache } from '@internetarchive/collection-name-cache';\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 private localCache = new LocalCache();\n\n private collectionNameCache = new CollectionNameCache({\n searchService: this.searchService,\n localCache: this.localCache,\n });\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 @state() private loggedIn: boolean = false;\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 }\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 <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 <label for=\"simulate-login\">Simulate Login:</label>\n <input\n type=\"checkbox\"\n id=\"simulate-login\"\n @click=${this.loginChanged}\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 .baseImageUrl=${'https://archive.org'}\n .searchService=${this.searchService}\n .resizeObserver=${this.resizeObserver}\n .collectionNameCache=${this.collectionNameCache}\n .showHistogramDatePicker=${true}\n .loggedIn=${this.loggedIn}\n @visiblePageChanged=${this.visiblePageChanged}\n @baseQueryChanged=${this.baseQueryChanged}\n >\n </collection-browser>\n </div>\n `;\n }\n\n private baseQueryChanged(e: CustomEvent<{ baseQuery?: string }>) {\n this.searchQuery = e.detail.baseQuery;\n }\n\n private loginChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n this.loggedIn = true;\n } else {\n this.loggedIn = false;\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"]}
|
|
@@ -72,6 +72,11 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
|
|
|
72
72
|
* When we've reached the end of the data, stop trying to fetch more
|
|
73
73
|
*/
|
|
74
74
|
private endOfDataReached;
|
|
75
|
+
/**
|
|
76
|
+
* When page width resizes from desktop to mobile, set true to
|
|
77
|
+
* disable expand/collapse transition when loading.
|
|
78
|
+
*/
|
|
79
|
+
private isResizeToMobile;
|
|
75
80
|
private placeholderCellTemplate;
|
|
76
81
|
private tileModelAtCellIndex;
|
|
77
82
|
private get sortFilterQueries();
|
|
@@ -102,6 +107,7 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
|
|
|
102
107
|
private titleLetterSelected;
|
|
103
108
|
private creatorLetterSelected;
|
|
104
109
|
private get facetDataLoading();
|
|
110
|
+
private get mobileFacetsTemplate();
|
|
105
111
|
private get facetsTemplate();
|
|
106
112
|
private get loadingTemplate();
|
|
107
113
|
private get listHeaderTemplate();
|
|
@@ -61,6 +61,11 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
61
61
|
* When we've reached the end of the data, stop trying to fetch more
|
|
62
62
|
*/
|
|
63
63
|
this.endOfDataReached = false;
|
|
64
|
+
/**
|
|
65
|
+
* When page width resizes from desktop to mobile, set true to
|
|
66
|
+
* disable expand/collapse transition when loading.
|
|
67
|
+
*/
|
|
68
|
+
this.isResizeToMobile = false;
|
|
64
69
|
this.placeholderCellTemplate = html `<collection-browser-loading-tile></collection-browser-loading-tile>`;
|
|
65
70
|
/**
|
|
66
71
|
* The results per page so we can paginate.
|
|
@@ -134,31 +139,12 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
134
139
|
render() {
|
|
135
140
|
return html `
|
|
136
141
|
<div id="content-container" class=${this.mobileView ? 'mobile' : ''}>
|
|
137
|
-
<div
|
|
142
|
+
<div
|
|
143
|
+
id="left-column"
|
|
144
|
+
class="column${this.isResizeToMobile ? ' preload' : ''}"
|
|
145
|
+
>
|
|
138
146
|
<div id="mobile-header-container">
|
|
139
|
-
${this.mobileView
|
|
140
|
-
? html `
|
|
141
|
-
<div id="mobile-filter-collapse">
|
|
142
|
-
<h1
|
|
143
|
-
@click=${() => {
|
|
144
|
-
this.mobileFacetsVisible = !this.mobileFacetsVisible;
|
|
145
|
-
}}
|
|
146
|
-
@keyup=${() => {
|
|
147
|
-
this.mobileFacetsVisible = !this.mobileFacetsVisible;
|
|
148
|
-
}}
|
|
149
|
-
>
|
|
150
|
-
<span
|
|
151
|
-
class="collapser ${this.mobileFacetsVisible
|
|
152
|
-
? 'open'
|
|
153
|
-
: ''}"
|
|
154
|
-
>
|
|
155
|
-
${chevronIcon}
|
|
156
|
-
</span>
|
|
157
|
-
Filters
|
|
158
|
-
</h1>
|
|
159
|
-
</div>
|
|
160
|
-
`
|
|
161
|
-
: nothing}
|
|
147
|
+
${this.mobileView ? this.mobileFacetsTemplate : nothing}
|
|
162
148
|
<div id="results-total">
|
|
163
149
|
<span id="big-results-count"
|
|
164
150
|
>${this.totalResults !== undefined
|
|
@@ -260,6 +246,27 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
260
246
|
get facetDataLoading() {
|
|
261
247
|
return this.facetsLoading || this.fullYearAggregationLoading;
|
|
262
248
|
}
|
|
249
|
+
get mobileFacetsTemplate() {
|
|
250
|
+
return html `
|
|
251
|
+
<div id="mobile-filter-collapse">
|
|
252
|
+
<h1
|
|
253
|
+
@click=${() => {
|
|
254
|
+
this.isResizeToMobile = false;
|
|
255
|
+
this.mobileFacetsVisible = !this.mobileFacetsVisible;
|
|
256
|
+
}}
|
|
257
|
+
@keyup=${() => {
|
|
258
|
+
this.isResizeToMobile = false;
|
|
259
|
+
this.mobileFacetsVisible = !this.mobileFacetsVisible;
|
|
260
|
+
}}
|
|
261
|
+
>
|
|
262
|
+
<span class="collapser ${this.mobileFacetsVisible ? 'open' : ''}">
|
|
263
|
+
${chevronIcon}
|
|
264
|
+
</span>
|
|
265
|
+
Filters
|
|
266
|
+
</h1>
|
|
267
|
+
</div>
|
|
268
|
+
`;
|
|
269
|
+
}
|
|
263
270
|
get facetsTemplate() {
|
|
264
271
|
return html `
|
|
265
272
|
${this.facetsLoading ? this.loadingTemplate : nothing}
|
|
@@ -374,8 +381,13 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
374
381
|
}
|
|
375
382
|
}
|
|
376
383
|
handleResize(entry) {
|
|
384
|
+
const previousView = this.mobileView;
|
|
377
385
|
if (entry.target === this.contentContainer) {
|
|
378
|
-
this.mobileView = entry.contentRect.width <
|
|
386
|
+
this.mobileView = entry.contentRect.width < this.mobileBreakpoint;
|
|
387
|
+
// If changing from desktop to mobile disable transition
|
|
388
|
+
if (this.mobileView && !previousView) {
|
|
389
|
+
this.isResizeToMobile = true;
|
|
390
|
+
}
|
|
379
391
|
}
|
|
380
392
|
}
|
|
381
393
|
emitBaseQueryChanged() {
|
|
@@ -894,6 +906,18 @@ CollectionBrowser.styles = css `
|
|
|
894
906
|
display: block;
|
|
895
907
|
}
|
|
896
908
|
|
|
909
|
+
/**
|
|
910
|
+
* When page width resizes from desktop to mobile, use this class to
|
|
911
|
+
* disable expand/collapse transition when loading.
|
|
912
|
+
*/
|
|
913
|
+
.preload * {
|
|
914
|
+
transition: none !important;
|
|
915
|
+
-webkit-transition: none !important;
|
|
916
|
+
-moz-transition: none !important;
|
|
917
|
+
-ms-transition: none !important;
|
|
918
|
+
-o-transition: none !important;
|
|
919
|
+
}
|
|
920
|
+
|
|
897
921
|
#content-container {
|
|
898
922
|
display: flex;
|
|
899
923
|
}
|