@internetarchive/collection-browser 4.2.0-alpha-webdev8164.3 → 4.2.1-alpha-webdev7004.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/.claude/settings.local.json +11 -0
- package/.editorconfig +29 -29
- package/.github/workflows/ci.yml +27 -27
- package/.github/workflows/gh-pages-main.yml +39 -39
- package/.github/workflows/npm-publish.yml +39 -39
- package/.github/workflows/pr-preview.yml +38 -38
- package/.husky/pre-commit +1 -1
- package/.prettierignore +1 -1
- package/LICENSE +661 -661
- package/README.md +83 -83
- package/dist/src/app-root.js +4 -0
- package/dist/src/app-root.js.map +1 -1
- package/dist/src/collection-browser.js +32 -27
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets/facets-template.js +0 -5
- package/dist/src/collection-facets/facets-template.js.map +1 -1
- package/dist/src/collection-facets/more-facets-content.d.ts +8 -106
- package/dist/src/collection-facets/more-facets-content.js +103 -612
- package/dist/src/collection-facets/more-facets-content.js.map +1 -1
- package/dist/src/collection-facets/more-facets-pagination.d.ts +3 -12
- package/dist/src/collection-facets/more-facets-pagination.js +9 -71
- package/dist/src/collection-facets/more-facets-pagination.js.map +1 -1
- package/dist/src/collection-facets/toggle-switch.js +0 -1
- package/dist/src/collection-facets/toggle-switch.js.map +1 -1
- package/dist/src/collection-facets.js +9 -10
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/data-source/collection-browser-data-source.d.ts +7 -0
- package/dist/src/data-source/collection-browser-data-source.js +27 -10
- package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
- package/dist/src/mediatype/mediatype-config.js +1 -1
- package/dist/src/mediatype/mediatype-config.js.map +1 -1
- package/dist/src/models.d.ts +12 -2
- package/dist/src/models.js +13 -8
- package/dist/src/models.js.map +1 -1
- package/dist/src/restoration-state-handler.js +9 -3
- package/dist/src/restoration-state-handler.js.map +1 -1
- package/dist/src/tiles/hover/hover-pane-controller.js +2 -1
- package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -1
- package/dist/src/tiles/tile-dispatcher.d.ts +6 -0
- package/dist/src/tiles/tile-dispatcher.js +11 -3
- package/dist/src/tiles/tile-dispatcher.js.map +1 -1
- package/dist/test/collection-browser.test.js +72 -0
- package/dist/test/collection-browser.test.js.map +1 -1
- package/dist/test/collection-facets/more-facets-content.test.js +3 -212
- package/dist/test/collection-facets/more-facets-content.test.js.map +1 -1
- package/dist/test/collection-facets/more-facets-pagination.test.js +3 -63
- package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -1
- package/dist/test/data-source/collection-browser-data-source.test.js +52 -0
- package/dist/test/data-source/collection-browser-data-source.test.js.map +1 -1
- package/dist/test/mocks/mock-search-responses.d.ts +0 -5
- package/dist/test/mocks/mock-search-responses.js +0 -44
- package/dist/test/mocks/mock-search-responses.js.map +1 -1
- package/dist/test/mocks/mock-search-service.js +1 -2
- package/dist/test/mocks/mock-search-service.js.map +1 -1
- package/dist/test/tiles/tile-dispatcher.test.js +14 -0
- package/dist/test/tiles/tile-dispatcher.test.js.map +1 -1
- package/dist/test/tiles/tile-mediatype-icon.test.js +4 -4
- package/dist/test/tiles/tile-mediatype-icon.test.js.map +1 -1
- package/eslint.config.mjs +53 -53
- package/index.html +24 -24
- package/local.archive.org.cert +86 -86
- package/local.archive.org.key +27 -27
- package/package.json +120 -121
- package/renovate.json +6 -6
- package/src/app-root.ts +4 -0
- package/src/collection-browser.ts +43 -36
- package/src/collection-facets/facets-template.ts +0 -5
- package/src/collection-facets/more-facets-content.ts +113 -662
- package/src/collection-facets/more-facets-pagination.ts +10 -84
- package/src/collection-facets/toggle-switch.ts +0 -1
- package/src/collection-facets.ts +13 -10
- package/src/data-source/collection-browser-data-source.ts +31 -10
- package/src/mediatype/mediatype-config.ts +1 -1
- package/src/models.ts +30 -8
- package/src/restoration-state-handler.ts +7 -3
- package/src/tiles/hover/hover-pane-controller.ts +2 -1
- package/src/tiles/tile-dispatcher.ts +12 -3
- package/test/collection-browser.test.ts +105 -0
- package/test/collection-facets/more-facets-content.test.ts +4 -326
- package/test/collection-facets/more-facets-pagination.test.ts +3 -87
- package/test/data-source/collection-browser-data-source.test.ts +62 -0
- package/test/mocks/mock-search-responses.ts +0 -48
- package/test/mocks/mock-search-service.ts +0 -2
- package/test/tiles/tile-dispatcher.test.ts +17 -0
- package/test/tiles/tile-mediatype-icon.test.ts +4 -4
- package/tsconfig.json +25 -25
- package/web-dev-server.config.mjs +30 -30
- package/web-test-runner.config.mjs +52 -52
|
@@ -38,15 +38,10 @@ let FacetsTemplate = class FacetsTemplate extends LitElement {
|
|
|
38
38
|
static get styles() {
|
|
39
39
|
const columnCount = css `var(--facetsColumnCount, 1)`;
|
|
40
40
|
const columnGap = css `var(--facetsColumnGap, 15px)`;
|
|
41
|
-
const columnWidth = css `var(--facetsColumnWidth, auto)`;
|
|
42
|
-
const maxHeight = css `var(--facetsMaxHeight, none)`;
|
|
43
41
|
return css `
|
|
44
42
|
.facet-rows {
|
|
45
43
|
column-count: ${columnCount};
|
|
46
44
|
column-gap: ${columnGap};
|
|
47
|
-
column-width: ${columnWidth};
|
|
48
|
-
max-height: ${maxHeight};
|
|
49
|
-
column-fill: auto;
|
|
50
45
|
}
|
|
51
46
|
|
|
52
47
|
a:link,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facets-template.js","sourceRoot":"","sources":["../../../src/collection-facets/facets-template.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,GAAG,EACH,IAAI,EACJ,UAAU,EAGV,OAAO,GACR,MAAM,KAAK,CAAC;AACb,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGlD,OAAO,aAAa,CAAC;AAGd,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,UAAU;IAMpC,YAAY,CAAC,CAAiC;QACpD,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAEO,uBAAuB,CAAC,MAAyB;QACvD,MAAM,KAAK,GAAG,IAAI,WAAW,CAAoB,YAAY,EAAE;YAC7D,MAAM;YACN,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,IAAY,cAAc;QACxB,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,UAAU;YAAE,OAAO,OAAO,CAAC;QAEhC,MAAM,YAAY,GAAG,UAAU,CAAC,OAAwB,CAAC;QAEzD,2CAA2C;QAC3C,sEAAsE;QACtE,OAAO,IAAI,CAAA;uDACwC,UAAU,CAAC,GAAG;UAC3D,MAAM,CACN,YAAY,EACZ,MAAM,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,EAC3C,MAAM,CAAC,EAAE,CACP,IAAI,CAAA;2BACW,UAAU,CAAC,GAAG;wBACjB,MAAM;kCACI,IAAI,CAAC,gBAAgB;4BAC3B,IAAI,CAAC,YAAY;0BACnB,CACjB;;KAEJ,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,KAAK,MAAM;QACf,MAAM,WAAW,GAAG,GAAG,CAAA,6BAA6B,CAAC;QACrD,MAAM,SAAS,GAAG,GAAG,CAAA,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"facets-template.js","sourceRoot":"","sources":["../../../src/collection-facets/facets-template.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,GAAG,EACH,IAAI,EACJ,UAAU,EAGV,OAAO,GACR,MAAM,KAAK,CAAC;AACb,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGlD,OAAO,aAAa,CAAC;AAGd,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,UAAU;IAMpC,YAAY,CAAC,CAAiC;QACpD,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAEO,uBAAuB,CAAC,MAAyB;QACvD,MAAM,KAAK,GAAG,IAAI,WAAW,CAAoB,YAAY,EAAE;YAC7D,MAAM;YACN,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,IAAY,cAAc;QACxB,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,UAAU;YAAE,OAAO,OAAO,CAAC;QAEhC,MAAM,YAAY,GAAG,UAAU,CAAC,OAAwB,CAAC;QAEzD,2CAA2C;QAC3C,sEAAsE;QACtE,OAAO,IAAI,CAAA;uDACwC,UAAU,CAAC,GAAG;UAC3D,MAAM,CACN,YAAY,EACZ,MAAM,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,EAC3C,MAAM,CAAC,EAAE,CACP,IAAI,CAAA;2BACW,UAAU,CAAC,GAAG;wBACjB,MAAM;kCACI,IAAI,CAAC,gBAAgB;4BAC3B,IAAI,CAAC,YAAY;0BACnB,CACjB;;KAEJ,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,KAAK,MAAM;QACf,MAAM,WAAW,GAAG,GAAG,CAAA,6BAA6B,CAAC;QACrD,MAAM,SAAS,GAAG,GAAG,CAAA,8BAA8B,CAAC;QAEpD,OAAO,GAAG,CAAA;;wBAEU,WAAW;sBACb,SAAS;;;;;;;;;;;KAW1B,CAAC;IACJ,CAAC;CACF,CAAA;AAlE6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;kDAAyB;AAGpD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wDACS;AAJzB,cAAc;IAD1B,aAAa,CAAC,iBAAiB,CAAC;GACpB,cAAc,CAmE1B","sourcesContent":["import {\n css,\n html,\n LitElement,\n TemplateResult,\n CSSResultGroup,\n nothing,\n} from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport type { FacetGroup, FacetBucket, FacetEventDetails } from '../models';\nimport type { CollectionTitles } from '../data-source/models';\nimport './facet-row';\n\n@customElement('facets-template')\nexport class FacetsTemplate extends LitElement {\n @property({ type: Object }) facetGroup?: FacetGroup;\n\n @property({ type: Object })\n collectionTitles?: CollectionTitles;\n\n private facetClicked(e: CustomEvent<FacetEventDetails>) {\n this.dispatchFacetClickEvent(e.detail);\n }\n\n private dispatchFacetClickEvent(detail: FacetEventDetails) {\n const event = new CustomEvent<FacetEventDetails>('facetClick', {\n detail,\n composed: true,\n });\n this.dispatchEvent(event);\n }\n\n private get facetsTemplate(): TemplateResult | typeof nothing {\n const { facetGroup } = this;\n if (!facetGroup) return nothing;\n\n const facetBuckets = facetGroup.buckets as FacetBucket[];\n\n // Added data-testid for Playwright testing\n // Using className and aria-labels is not ideal for Playwright locator\n return html`\n <div class=\"facet-rows\" data-testid=\"facets-on-${facetGroup.key}\">\n ${repeat(\n facetBuckets,\n bucket => `${facetGroup.key}:${bucket.key}`,\n bucket =>\n html`<facet-row\n .facetType=${facetGroup.key}\n .bucket=${bucket}\n .collectionTitles=${this.collectionTitles}\n @facetClick=${this.facetClicked}\n ></facet-row>`,\n )}\n </div>\n `;\n }\n\n render() {\n return html`${this.facetsTemplate}`;\n }\n\n static get styles(): CSSResultGroup {\n const columnCount = css`var(--facetsColumnCount, 1)`;\n const columnGap = css`var(--facetsColumnGap, 15px)`;\n\n return css`\n .facet-rows {\n column-count: ${columnCount};\n column-gap: ${columnGap};\n }\n\n a:link,\n a:visited {\n text-decoration: none;\n color: var(--ia-theme-link-color, #4b64ff);\n }\n a:hover {\n text-decoration: underline;\n }\n `;\n }\n}\n"]}
|
|
@@ -5,10 +5,9 @@ import type { AnalyticsManagerInterface } from '@internetarchive/analytics-manag
|
|
|
5
5
|
import { SelectedFacets, FacetOption } from '../models';
|
|
6
6
|
import type { CollectionTitles, PageSpecifierParams, TVChannelAliases } from '../data-source/models';
|
|
7
7
|
import '@internetarchive/elements/ia-status-indicator/ia-status-indicator';
|
|
8
|
+
import './more-facets-pagination';
|
|
8
9
|
import './facets-template';
|
|
9
10
|
import './toggle-switch';
|
|
10
|
-
import './more-facets-pagination';
|
|
11
|
-
import '@internetarchive/ia-clearable-text-input';
|
|
12
11
|
export declare class MoreFacetsContent extends LitElement {
|
|
13
12
|
facetKey?: FacetOption;
|
|
14
13
|
query?: string;
|
|
@@ -52,85 +51,14 @@ export declare class MoreFacetsContent extends LitElement {
|
|
|
52
51
|
*/
|
|
53
52
|
private unappliedFacetChanges;
|
|
54
53
|
/**
|
|
55
|
-
*
|
|
56
|
-
* Applied to bucket.key for case-insensitive matching.
|
|
57
|
-
*/
|
|
58
|
-
private filterText;
|
|
59
|
-
/**
|
|
60
|
-
* Current page number for pagination (when facet count >= PAGINATION_THRESHOLD).
|
|
54
|
+
* Which page of facets we are showing.
|
|
61
55
|
*/
|
|
62
56
|
private pageNumber;
|
|
63
|
-
/**
|
|
64
|
-
* Whether the component is narrow enough to warrant compact pagination.
|
|
65
|
-
* Updated via a ResizeObserver-based container query approach.
|
|
66
|
-
*/
|
|
67
|
-
private isCompactView;
|
|
68
|
-
/** Column gap in px — matches the --facetsColumnGap default (never overridden). */
|
|
69
|
-
private static readonly COLUMN_GAP;
|
|
70
|
-
/** Column count derived from the same breakpoint as the CSS media query. */
|
|
71
|
-
private get columnCount();
|
|
72
|
-
/**
|
|
73
|
-
* Whether the horizontal scroll is at the leftmost position.
|
|
74
|
-
*/
|
|
75
|
-
private atScrollStart;
|
|
76
|
-
/**
|
|
77
|
-
* Whether the horizontal scroll is at the rightmost position.
|
|
78
|
-
*/
|
|
79
|
-
private atScrollEnd;
|
|
80
|
-
private filterInput;
|
|
81
|
-
private facetsContentEl;
|
|
82
57
|
willUpdate(changed: PropertyValues): void;
|
|
83
|
-
updated(changed: PropertyValues): void;
|
|
84
|
-
private resizeObserver?;
|
|
85
58
|
firstUpdated(): void;
|
|
86
|
-
disconnectedCallback(): void;
|
|
87
|
-
private scrollHandler;
|
|
88
|
-
private scrollListenerAttached;
|
|
89
|
-
private scrollListenerTarget?;
|
|
90
|
-
/**
|
|
91
|
-
* Attaches a scroll event listener to the facets content element
|
|
92
|
-
* to track horizontal scroll position for arrow button states.
|
|
93
|
-
*/
|
|
94
|
-
private attachScrollListener;
|
|
95
|
-
private removeScrollListener;
|
|
96
|
-
/**
|
|
97
|
-
* Updates the scroll arrow disabled states based on current scroll position.
|
|
98
|
-
*/
|
|
99
|
-
private updateScrollState;
|
|
100
|
-
/**
|
|
101
|
-
* Calculates the width of one column step (column width + gap) based on
|
|
102
|
-
* the CSS multi-column layout of the scroll container.
|
|
103
|
-
*/
|
|
104
|
-
private getColumnStep;
|
|
105
|
-
/**
|
|
106
|
-
* Snaps a scroll target to the nearest column boundary.
|
|
107
|
-
*/
|
|
108
|
-
private snapToColumn;
|
|
109
|
-
/**
|
|
110
|
-
* Scrolls the facet content left by approximately one page, snapping to
|
|
111
|
-
* the nearest column boundary.
|
|
112
|
-
*/
|
|
113
|
-
private onScrollLeft;
|
|
114
|
-
/**
|
|
115
|
-
* Scrolls the facet content right by approximately one page, snapping to
|
|
116
|
-
* the nearest column boundary.
|
|
117
|
-
*/
|
|
118
|
-
private onScrollRight;
|
|
119
|
-
/**
|
|
120
|
-
* Sets up a ResizeObserver to toggle compact pagination based on component width.
|
|
121
|
-
*/
|
|
122
|
-
private setupCompactViewObserver;
|
|
123
|
-
/**
|
|
124
|
-
* Constrains the section's max-height to fit within the nearest
|
|
125
|
-
* scroll-container ancestor (e.g., the modal's content area).
|
|
126
|
-
* This is a safety net for cases where the CSS max-height calculation
|
|
127
|
-
* doesn't perfectly match the container's available space.
|
|
128
|
-
*/
|
|
129
|
-
private constrainToScrollContainer;
|
|
130
59
|
/**
|
|
131
60
|
* Close more facets modal on Escape click
|
|
132
61
|
*/
|
|
133
|
-
private escapeHandler;
|
|
134
62
|
private setupEscapeListeners;
|
|
135
63
|
/**
|
|
136
64
|
* Whether facet requests are for the search_results page type (either defaulted or explicitly).
|
|
@@ -141,6 +69,10 @@ export declare class MoreFacetsContent extends LitElement {
|
|
|
141
69
|
* - this.aggregations - hold result of search service and being used for further processing.
|
|
142
70
|
*/
|
|
143
71
|
updateSpecificFacets(): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Handler for page number changes from the pagination widget.
|
|
74
|
+
*/
|
|
75
|
+
private pageNumberClicked;
|
|
144
76
|
/**
|
|
145
77
|
* Combines the selected facets with the aggregations to create a single list of facets
|
|
146
78
|
*/
|
|
@@ -156,49 +88,19 @@ export declare class MoreFacetsContent extends LitElement {
|
|
|
156
88
|
*/
|
|
157
89
|
private get aggregationFacetGroup();
|
|
158
90
|
/**
|
|
159
|
-
* Returns
|
|
160
|
-
* Filters are applied to the full bucket list before pagination.
|
|
161
|
-
*/
|
|
162
|
-
private get filteredFacetGroup();
|
|
163
|
-
/**
|
|
164
|
-
* Determines whether to use pagination based on the number of filtered facets.
|
|
165
|
-
* Returns true if facet count >= PAGINATION_THRESHOLD, false otherwise.
|
|
166
|
-
*/
|
|
167
|
-
private get usePagination();
|
|
168
|
-
/**
|
|
169
|
-
* Returns the facet group for the current page.
|
|
170
|
-
* If using pagination (>= 1000 facets), slices to show only the current page.
|
|
171
|
-
* Otherwise, returns all facets for horizontal scrolling.
|
|
91
|
+
* Returns a FacetGroup representing only the current page of facet buckets to show.
|
|
172
92
|
*/
|
|
173
93
|
private get facetGroupForCurrentPage();
|
|
174
94
|
private get moreFacetsTemplate();
|
|
175
95
|
private get loaderTemplate();
|
|
176
|
-
private get emptyFilterResultsTemplate();
|
|
177
96
|
/**
|
|
178
|
-
*
|
|
97
|
+
* How many pages of facets to show in the modal pagination widget
|
|
179
98
|
*/
|
|
180
99
|
private get paginationSize();
|
|
181
|
-
/**
|
|
182
|
-
* Template for pagination component.
|
|
183
|
-
*/
|
|
184
100
|
private get facetsPaginationTemplate();
|
|
185
101
|
private get footerTemplate();
|
|
186
102
|
private sortFacetAggregation;
|
|
187
|
-
/**
|
|
188
|
-
* Handler for filter input changes. Updates the filter text and triggers re-render.
|
|
189
|
-
*/
|
|
190
|
-
private handleFilterInput;
|
|
191
|
-
/**
|
|
192
|
-
* Handler for when the filter input is cleared via the clear button.
|
|
193
|
-
*/
|
|
194
|
-
private handleFilterClear;
|
|
195
|
-
/**
|
|
196
|
-
* Handler for pagination page number clicks.
|
|
197
|
-
* Only used when facet count >= PAGINATION_THRESHOLD.
|
|
198
|
-
*/
|
|
199
|
-
private pageNumberClicked;
|
|
200
103
|
private get modalHeaderTemplate();
|
|
201
|
-
private get horizontalScrollTemplate();
|
|
202
104
|
render(): TemplateResult<1>;
|
|
203
105
|
private applySearchFacetsClicked;
|
|
204
106
|
private cancelClick;
|