@internetarchive/collection-browser 3.4.1-alpha-webdev7761.2 → 3.4.1-alpha-webdev7761.4
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/dist/src/app-root.js +19 -28
- package/dist/src/app-root.js.map +1 -1
- package/dist/src/collection-browser.d.ts +14 -10
- package/dist/src/collection-browser.js +870 -886
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets/facet-row.js +3 -4
- package/dist/src/collection-facets/facet-row.js.map +1 -1
- package/dist/src/collection-facets/models.js.map +1 -1
- package/dist/src/collection-facets/more-facets-content.js +145 -156
- package/dist/src/collection-facets/more-facets-content.js.map +1 -1
- package/dist/src/collection-facets/more-facets-pagination.js +6 -10
- package/dist/src/collection-facets/more-facets-pagination.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.js +16 -21
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +7 -10
- package/dist/src/collection-facets/smart-facets/smart-facet-bar.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-button.js +3 -2
- package/dist/src/collection-facets/smart-facets/smart-facet-button.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +9 -11
- package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +7 -7
- package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js.map +1 -1
- package/dist/src/collection-facets/toggle-switch.js +4 -6
- package/dist/src/collection-facets/toggle-switch.js.map +1 -1
- package/dist/src/collection-facets.js +34 -50
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/combo-box/caret-closed.js +5 -11
- package/dist/src/combo-box/caret-closed.js.map +1 -1
- package/dist/src/combo-box/caret-open.js +5 -11
- package/dist/src/combo-box/caret-open.js.map +1 -1
- package/dist/src/combo-box/clear.d.ts +2 -0
- package/dist/src/combo-box/clear.js +11 -0
- package/dist/src/combo-box/clear.js.map +1 -0
- package/dist/src/combo-box/ia-combo-box.d.ts +40 -9
- package/dist/src/combo-box/ia-combo-box.js +363 -272
- package/dist/src/combo-box/ia-combo-box.js.map +1 -1
- package/dist/src/combo-box/models.d.ts +14 -0
- package/dist/src/combo-box/models.js +32 -1
- package/dist/src/combo-box/models.js.map +1 -1
- package/dist/src/data-source/collection-browser-data-source.js +35 -47
- package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
- package/dist/src/empty-placeholder.js +19 -18
- package/dist/src/empty-placeholder.js.map +1 -1
- package/dist/src/expanded-date-picker.js +6 -10
- package/dist/src/expanded-date-picker.js.map +1 -1
- package/dist/src/language-code-handler/language-code-handler.js +2 -2
- package/dist/src/language-code-handler/language-code-handler.js.map +1 -1
- package/dist/src/manage/manage-bar.js +86 -92
- package/dist/src/manage/manage-bar.js.map +1 -1
- package/dist/src/manage/remove-items-modal-content.js +2 -2
- package/dist/src/manage/remove-items-modal-content.js.map +1 -1
- package/dist/src/models.js +36 -40
- package/dist/src/models.js.map +1 -1
- package/dist/src/restoration-state-handler.js +9 -10
- package/dist/src/restoration-state-handler.js.map +1 -1
- package/dist/src/sort-filter-bar/alpha-bar.js +9 -14
- package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -1
- package/dist/src/sort-filter-bar/sort-filter-bar.js +14 -24
- package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
- package/dist/src/tiles/base-tile-component.js +1 -2
- package/dist/src/tiles/base-tile-component.js.map +1 -1
- package/dist/src/tiles/grid/account-tile.js +36 -38
- package/dist/src/tiles/grid/account-tile.js.map +1 -1
- package/dist/src/tiles/grid/collection-tile.js +79 -82
- package/dist/src/tiles/grid/collection-tile.js.map +1 -1
- package/dist/src/tiles/grid/item-tile.js +154 -164
- package/dist/src/tiles/grid/item-tile.js.map +1 -1
- package/dist/src/tiles/grid/search-tile.js +42 -43
- package/dist/src/tiles/grid/search-tile.js.map +1 -1
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +119 -119
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js.map +1 -1
- package/dist/src/tiles/grid/tile-stats.js +2 -3
- package/dist/src/tiles/grid/tile-stats.js.map +1 -1
- package/dist/src/tiles/hover/hover-pane-controller.js +42 -49
- package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -1
- package/dist/src/tiles/hover/tile-hover-pane.js +113 -114
- package/dist/src/tiles/hover/tile-hover-pane.js.map +1 -1
- package/dist/src/tiles/image-block.js +5 -8
- package/dist/src/tiles/image-block.js.map +1 -1
- package/dist/src/tiles/item-image.js +12 -19
- package/dist/src/tiles/item-image.js.map +1 -1
- package/dist/src/tiles/list/tile-list-compact.js +114 -122
- package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
- package/dist/src/tiles/list/tile-list.js +326 -347
- package/dist/src/tiles/list/tile-list.js.map +1 -1
- package/dist/src/tiles/overlay/icon-overlay.js +1 -2
- package/dist/src/tiles/overlay/icon-overlay.js.map +1 -1
- package/dist/src/tiles/overlay/text-overlay.js +2 -4
- package/dist/src/tiles/overlay/text-overlay.js.map +1 -1
- package/dist/src/tiles/text-snippet-block.js +2 -4
- package/dist/src/tiles/text-snippet-block.js.map +1 -1
- package/dist/src/tiles/tile-dispatcher.js +233 -241
- package/dist/src/tiles/tile-dispatcher.js.map +1 -1
- package/dist/src/tiles/tile-display-value-provider.js +5 -9
- package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
- package/dist/src/tiles/tile-mediatype-icon.js +12 -19
- package/dist/src/tiles/tile-mediatype-icon.js.map +1 -1
- package/dist/src/utils/collapse-repeated-quotes.js +1 -1
- package/dist/src/utils/collapse-repeated-quotes.js.map +1 -1
- package/dist/src/utils/facet-utils.js +3 -5
- package/dist/src/utils/facet-utils.js.map +1 -1
- package/dist/src/utils/format-count.js +10 -10
- package/dist/src/utils/format-count.js.map +1 -1
- package/dist/src/utils/format-date.js.map +1 -1
- package/dist/src/utils/resolve-mediatype.js +2 -3
- package/dist/src/utils/resolve-mediatype.js.map +1 -1
- package/dist/test/collection-browser.test.js +131 -185
- package/dist/test/collection-browser.test.js.map +1 -1
- package/dist/test/collection-facets/facet-row.test.js +60 -75
- package/dist/test/collection-facets/facet-row.test.js.map +1 -1
- package/dist/test/collection-facets/facets-template.test.js +17 -23
- package/dist/test/collection-facets/facets-template.test.js.map +1 -1
- package/dist/test/collection-facets/more-facets-content.test.js +22 -32
- package/dist/test/collection-facets/more-facets-content.test.js.map +1 -1
- package/dist/test/collection-facets/more-facets-pagination.test.js +16 -22
- package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -1
- package/dist/test/collection-facets/toggle-switch.test.js +22 -19
- package/dist/test/collection-facets/toggle-switch.test.js.map +1 -1
- package/dist/test/collection-facets.test.js +80 -97
- package/dist/test/collection-facets.test.js.map +1 -1
- package/dist/test/empty-placeholder.test.js +11 -17
- package/dist/test/empty-placeholder.test.js.map +1 -1
- package/dist/test/expanded-date-picker.test.js +8 -14
- package/dist/test/expanded-date-picker.test.js.map +1 -1
- package/dist/test/icon-overlay.test.js +7 -6
- package/dist/test/icon-overlay.test.js.map +1 -1
- package/dist/test/image-block.test.js +16 -26
- package/dist/test/image-block.test.js.map +1 -1
- package/dist/test/item-image.test.js +23 -32
- package/dist/test/item-image.test.js.map +1 -1
- package/dist/test/manage/manage-bar.test.js +21 -33
- package/dist/test/manage/manage-bar.test.js.map +1 -1
- package/dist/test/manage/remove-items-modal-content.test.js +10 -15
- package/dist/test/manage/remove-items-modal-content.test.js.map +1 -1
- package/dist/test/mocks/mock-search-service.js +2 -3
- package/dist/test/mocks/mock-search-service.js.map +1 -1
- package/dist/test/restoration-state-handler.test.js +13 -21
- package/dist/test/restoration-state-handler.test.js.map +1 -1
- package/dist/test/review-block.test.js +16 -18
- package/dist/test/review-block.test.js.map +1 -1
- package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +2 -3
- package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js.map +1 -1
- package/dist/test/sort-filter-bar/alpha-bar.test.js +18 -24
- package/dist/test/sort-filter-bar/alpha-bar.test.js.map +1 -1
- package/dist/test/sort-filter-bar/sort-filter-bar.test.js +178 -180
- package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -1
- package/dist/test/text-overlay.test.js +16 -15
- package/dist/test/text-overlay.test.js.map +1 -1
- package/dist/test/text-snippet-block.test.js +14 -19
- package/dist/test/text-snippet-block.test.js.map +1 -1
- package/dist/test/tile-stats.test.js +73 -34
- package/dist/test/tile-stats.test.js.map +1 -1
- package/dist/test/tiles/grid/account-tile.test.js +25 -25
- package/dist/test/tiles/grid/account-tile.test.js.map +1 -1
- package/dist/test/tiles/grid/collection-tile.test.js +13 -19
- package/dist/test/tiles/grid/collection-tile.test.js.map +1 -1
- package/dist/test/tiles/grid/item-tile.test.js +141 -168
- package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
- package/dist/test/tiles/grid/search-tile.test.js +9 -13
- package/dist/test/tiles/grid/search-tile.test.js.map +1 -1
- package/dist/test/tiles/hover/hover-pane-controller.test.js +50 -62
- package/dist/test/tiles/hover/hover-pane-controller.test.js.map +1 -1
- package/dist/test/tiles/hover/tile-hover-pane.test.js +12 -16
- package/dist/test/tiles/hover/tile-hover-pane.test.js.map +1 -1
- package/dist/test/tiles/list/tile-list-compact.test.js +104 -118
- package/dist/test/tiles/list/tile-list-compact.test.js.map +1 -1
- package/dist/test/tiles/list/tile-list.test.js +202 -231
- package/dist/test/tiles/list/tile-list.test.js.map +1 -1
- package/dist/test/tiles/tile-dispatcher.test.js +97 -110
- package/dist/test/tiles/tile-dispatcher.test.js.map +1 -1
- package/dist/test/tiles/tile-mediatype-icon.test.js +12 -24
- package/dist/test/tiles/tile-mediatype-icon.test.js.map +1 -1
- package/dist/test/utils/format-date.test.js.map +1 -1
- package/index.html +1 -1
- package/package.json +5 -3
- package/src/collection-browser.ts +3060 -3030
- package/src/collection-facets/models.ts +10 -10
- package/src/collection-facets/more-facets-content.ts +639 -639
- package/src/collection-facets.ts +1 -1
- package/src/combo-box/caret-closed.ts +5 -11
- package/src/combo-box/caret-open.ts +5 -11
- package/src/combo-box/clear.ts +11 -0
- package/src/combo-box/ia-combo-box.ts +1288 -1180
- package/src/combo-box/models.ts +31 -1
- package/src/manage/manage-bar.ts +247 -247
- package/src/restoration-state-handler.ts +5 -1
- package/src/tiles/base-tile-component.ts +65 -65
- package/src/tiles/grid/account-tile.ts +113 -113
- package/src/tiles/grid/collection-tile.ts +163 -163
- package/src/tiles/grid/item-tile.ts +340 -340
- package/src/tiles/grid/search-tile.ts +90 -90
- package/src/tiles/grid/styles/tile-grid-shared-styles.ts +130 -130
- package/src/tiles/hover/hover-pane-controller.ts +613 -613
- package/src/tiles/hover/tile-hover-pane.ts +184 -184
- package/src/tiles/list/tile-list-compact.ts +239 -239
- package/src/tiles/list/tile-list.ts +700 -700
- package/src/tiles/tile-dispatcher.ts +517 -517
- package/src/utils/format-date.ts +62 -62
- package/test/collection-facets/facet-row.test.ts +375 -375
- package/test/collection-facets.test.ts +928 -928
- package/test/tiles/grid/item-tile.test.ts +520 -520
- package/test/tiles/hover/hover-pane-controller.test.ts +418 -418
- package/test/tiles/list/tile-list-compact.test.ts +282 -282
- package/test/tiles/list/tile-list.test.ts +552 -552
- package/test/tiles/tile-dispatcher.test.ts +283 -283
- package/test/utils/format-date.test.ts +89 -89
- package/tsconfig.json +8 -3
- package/vite.config.ts +29 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-facets.js","sourceRoot":"","sources":["../../src/collection-facets.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n css,\r\n html,\r\n LitElement,\r\n PropertyValues,\r\n nothing,\r\n TemplateResult,\r\n} from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport { map } from 'lit/directives/map.js';\r\nimport { ref } from 'lit/directives/ref.js';\r\nimport { msg } from '@lit/localize';\r\nimport { classMap } from 'lit/directives/class-map.js';\r\nimport {\r\n Aggregation,\r\n AggregationSortType,\r\n Bucket,\r\n FilterMap,\r\n SearchServiceInterface,\r\n SearchType,\r\n} from '@internetarchive/search-service';\r\nimport '@internetarchive/histogram-date-range';\r\nimport '@internetarchive/feature-feedback';\r\nimport {\r\n ModalConfig,\r\n ModalManagerInterface,\r\n} from '@internetarchive/modal-manager';\r\nimport type { FeatureFeedbackServiceInterface } from '@internetarchive/feature-feedback';\r\nimport type { RecaptchaManagerInterface } from '@internetarchive/recaptcha-manager';\r\nimport type { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';\r\nimport type { SharedResizeObserverInterface } from '@internetarchive/shared-resize-observer';\r\nimport type {\r\n BarScalingOption,\r\n BinSnappingInterval,\r\n} from '@internetarchive/histogram-date-range';\r\nimport chevronIcon from './assets/img/icons/chevron';\r\nimport expandIcon from './assets/img/icons/expand';\r\nimport {\r\n FacetOption,\r\n SelectedFacets,\r\n FacetGroup,\r\n FacetBucket,\r\n defaultFacetDisplayOrder,\r\n facetTitles,\r\n lendingFacetDisplayNames,\r\n lendingFacetKeysVisibility,\r\n LendingFacetKey,\r\n suppressedCollections,\r\n defaultFacetSort,\r\n FacetEventDetails,\r\n} from './models';\r\nimport type {\r\n CollectionTitles,\r\n PageSpecifierParams,\r\n TVChannelAliases,\r\n} from './data-source/models';\r\nimport {\r\n analyticsActions,\r\n analyticsCategories,\r\n} from './utils/analytics-events';\r\nimport { srOnlyStyle } from './styles/sr-only';\r\nimport { ExpandedDatePicker } from './expanded-date-picker';\r\nimport {\r\n sortBucketsBySelectionState,\r\n updateSelectedFacetBucket,\r\n} from './utils/facet-utils';\r\n\r\nimport '@internetarchive/histogram-date-range';\r\nimport './collection-facets/more-facets-content';\r\nimport './collection-facets/facets-template';\r\nimport './collection-facets/facet-tombstone-row';\r\nimport './expanded-date-picker';\r\n\r\n@customElement('collection-facets')\r\nexport class CollectionFacets extends LitElement {\r\n @property({ type: Object }) searchService?: SearchServiceInterface;\r\n\r\n @property({ type: Number }) searchType?: SearchType;\r\n\r\n @property({ type: Object }) aggregations?: Record<string, Aggregation>;\r\n\r\n @property({ type: Object }) histogramAggregation?: Aggregation;\r\n\r\n @property({ type: String }) minSelectedDate?: string;\r\n\r\n @property({ type: String }) maxSelectedDate?: string;\r\n\r\n @property({ type: Boolean }) moreLinksVisible = true;\r\n\r\n @property({ type: Boolean }) facetsLoading = false;\r\n\r\n @property({ type: Boolean }) histogramAggregationLoading = false;\r\n\r\n @property({ type: Object }) selectedFacets?: SelectedFacets;\r\n\r\n @property({ type: Boolean }) collapsableFacets = false;\r\n\r\n @property({ type: Number }) contentWidth?: number;\r\n\r\n @property({ type: Boolean }) showHistogramDatePicker = false;\r\n\r\n @property({ type: Boolean }) allowExpandingDatePicker = false;\r\n\r\n @property({ type: Boolean }) suppressMediatypeFacets = false;\r\n\r\n @property({ type: String }) query?: string;\r\n\r\n @property({ type: Array }) identifiers?: string[];\r\n\r\n @property({ type: Object }) pageSpecifierParams?: PageSpecifierParams;\r\n\r\n @property({ type: Array }) parentCollections: string[] = [];\r\n\r\n @property({ type: Object }) filterMap?: FilterMap;\r\n\r\n @property({ type: String }) baseNavigationUrl?: string;\r\n\r\n @property({ type: String }) collectionPagePath: string = '/details/';\r\n\r\n @property({ type: Boolean }) isManageView = false;\r\n\r\n @property({ type: Boolean }) isTvSearch = false;\r\n\r\n @property({ type: Array }) facetDisplayOrder: FacetOption[] =\r\n defaultFacetDisplayOrder;\r\n\r\n @property({ type: Object, attribute: false })\r\n modalManager?: ModalManagerInterface;\r\n\r\n @property({ type: Object, attribute: false })\r\n resizeObserver?: SharedResizeObserverInterface;\r\n\r\n @property({ type: Object, attribute: false })\r\n featureFeedbackService?: FeatureFeedbackServiceInterface;\r\n\r\n @property({ type: Object, attribute: false })\r\n recaptchaManager?: RecaptchaManagerInterface;\r\n\r\n @property({ type: Object, attribute: false })\r\n analyticsHandler?: AnalyticsManagerInterface;\r\n\r\n @property({ type: Object, attribute: false })\r\n collectionTitles?: CollectionTitles;\r\n\r\n @property({ type: Object, attribute: false })\r\n tvChannelAliases?: TVChannelAliases;\r\n\r\n @state() openFacets: Record<FacetOption, boolean> = {\r\n subject: false,\r\n lending: false,\r\n mediatype: false,\r\n language: false,\r\n creator: false,\r\n collection: false,\r\n year: false,\r\n clip_type: false,\r\n program: false,\r\n person: false,\r\n sponsor: false,\r\n };\r\n\r\n /**\r\n * Maximum # of facet buckets to render per facet group\r\n */\r\n private allowedFacetCount = 6;\r\n\r\n render() {\r\n const containerClasses = classMap({\r\n loading: this.facetsLoading,\r\n managing: this.isManageView,\r\n });\r\n\r\n const heading = this.isTvSearch\r\n ? msg('Date Published')\r\n : msg('Year Published');\r\n\r\n // Added data-testid for Playwright testing\r\n // Using facet-group class and aria-labels is not ideal for Playwright locator\r\n const datePickerLabelId = 'date-picker-label';\r\n return html`\r\n <div id=\"container\" class=${containerClasses}>\r\n ${this.showHistogramDatePicker &&\r\n (this.histogramAggregation || this.histogramAggregationLoading)\r\n ? html`\r\n <section\r\n class=\"facet-group\"\r\n aria-labelledby=${datePickerLabelId}\r\n data-testid=\"facet-group-header-label-date-picker\"\r\n >\r\n <h3 id=${datePickerLabelId}>\r\n ${heading} <span class=\"sr-only\">${msg('range filter')}</span>\r\n ${this.expandDatePickerBtnTemplate}\r\n </h3>\r\n ${this.histogramTemplate}\r\n </section>\r\n `\r\n : nothing}\r\n ${this.collectionPartOfTemplate}\r\n <slot name=\"facets-top\"></slot>\r\n ${this.mergedFacets.map(facetGroup =>\r\n this.getFacetGroupTemplate(facetGroup),\r\n )}\r\n </div>\r\n `;\r\n }\r\n\r\n private get collectionPartOfTemplate(): TemplateResult | typeof nothing {\r\n // We only display the \"Part Of\" section on collection pages\r\n if (!this.parentCollections?.length) return nothing;\r\n\r\n // Added data-testid for Playwright testing\r\n // Using className and aria-labels is not ideal for Playwright locator\r\n const headingId = 'partof-heading';\r\n return html`\r\n <section\r\n class=\"facet-group partof-collections\"\r\n aria-labelledby=${headingId}\r\n data-testid=\"facet-group-partof-collections\"\r\n >\r\n <div class=\"facet-group-header\">\r\n <h3 id=${headingId}>${msg('Part Of')}</h3>\r\n </div>\r\n <ul>\r\n ${map(this.parentCollections, collxn => {\r\n const collectionURL = `${this.baseNavigationUrl}${this.collectionPagePath}${collxn}`;\r\n\r\n return html` <li>\r\n <a\r\n href=${collectionURL}\r\n data-id=${collxn}\r\n @click=${this.partOfCollectionClicked}\r\n >\r\n ${this.collectionTitles?.get(collxn) ?? collxn}\r\n </a>\r\n </li>`;\r\n })}\r\n </ul>\r\n </section>\r\n `;\r\n }\r\n\r\n private partOfCollectionClicked(e: Event): void {\r\n this.analyticsHandler?.sendEvent({\r\n category: analyticsCategories.default,\r\n action: analyticsActions.partOfCollectionClicked,\r\n label: (e.target as HTMLElement).dataset.id,\r\n });\r\n }\r\n\r\n /**\r\n * Properties to pass into the date-picker histogram component\r\n */\r\n private get histogramProps() {\r\n const { histogramAggregation: aggregation } = this;\r\n if (!aggregation) return undefined;\r\n\r\n // Normalize some properties from the raw aggregation\r\n const firstYear =\r\n aggregation.first_bucket_year ?? aggregation.first_bucket_key;\r\n const lastYear =\r\n aggregation.last_bucket_year ?? aggregation.last_bucket_key;\r\n if (firstYear == null || lastYear == null) return undefined; // We at least need a start/end year defined\r\n\r\n const firstMonth = aggregation.first_bucket_month ?? 1;\r\n const lastMonth = aggregation.last_bucket_month ?? 12;\r\n\r\n const yearInterval = aggregation.interval ?? 1;\r\n const monthInterval = aggregation.interval_in_months ?? 12;\r\n\r\n const zeroPadMonth = (month: number) => month.toString().padStart(2, '0');\r\n\r\n // The date picker is configured differently for TV search, allowing month-level resolution\r\n if (this.isTvSearch) {\r\n // Whether the bucket interval is less than a year\r\n // (i.e., requires individual months to be handled & labeled)\r\n const mustHandleMonths = monthInterval < 12;\r\n\r\n return {\r\n buckets: aggregation.buckets as number[],\r\n dateFormat: 'YYYY-MM',\r\n tooltipDateFormat: mustHandleMonths ? 'MMM YYYY' : 'YYYY',\r\n tooltipLabel: 'broadcast',\r\n binSnapping: (mustHandleMonths\r\n ? 'month'\r\n : 'year') as BinSnappingInterval,\r\n barScaling: 'linear' as BarScalingOption,\r\n minDate: `${firstYear}-${zeroPadMonth(firstMonth)}`,\r\n maxDate: `${lastYear}-${zeroPadMonth(lastMonth + monthInterval - 1)}`,\r\n };\r\n }\r\n\r\n // All other search types use the same configuration\r\n return {\r\n buckets: aggregation.buckets as number[],\r\n dateFormat: 'YYYY',\r\n tooltipDateFormat: 'YYYY',\r\n tooltipLabel: 'item',\r\n binSnapping: 'year' as BinSnappingInterval,\r\n barScaling: 'logarithmic' as BarScalingOption,\r\n minDate: `${firstYear}`,\r\n maxDate: `${lastYear + yearInterval - 1}`,\r\n };\r\n }\r\n\r\n /**\r\n * Opens a modal dialog containing an enlarged version of the date picker.\r\n */\r\n private showDatePickerModal(): void {\r\n const { histogramProps } = this;\r\n if (!histogramProps) return;\r\n\r\n const {\r\n buckets,\r\n dateFormat,\r\n tooltipDateFormat,\r\n tooltipLabel,\r\n binSnapping,\r\n barScaling,\r\n minDate,\r\n maxDate,\r\n } = histogramProps;\r\n\r\n // Because the modal manager does not clear its DOM content after being closed,\r\n // it may try to render the exact same date picker template when it is reopened.\r\n // And because it isn't actually a descendent of this collection-facets component,\r\n // changes to the template defined here may not trigger a reactive update to the date\r\n // picker, resulting in it displaying a stale date range.\r\n // This ref callback ensures that every time the date picker modal is opened, it will\r\n // always propagate the most recent date range into the date picker regardless of\r\n // whether Lit thinks the update is necessary.\r\n const expandedDatePickerChanged = (elmt?: Element) => {\r\n if (elmt && elmt instanceof ExpandedDatePicker) {\r\n const expandedDatePicker = elmt as ExpandedDatePicker;\r\n expandedDatePicker.minSelectedDate = this.minSelectedDate;\r\n expandedDatePicker.maxSelectedDate = this.maxSelectedDate;\r\n }\r\n };\r\n\r\n const customModalContent = html`\r\n <expanded-date-picker\r\n ${ref(expandedDatePickerChanged)}\r\n .minDate=${minDate}\r\n .maxDate=${maxDate}\r\n .minSelectedDate=${this.minSelectedDate}\r\n .maxSelectedDate=${this.maxSelectedDate}\r\n .customDateFormat=${dateFormat}\r\n .customTooltipDateFormat=${tooltipDateFormat}\r\n .customTooltipLabel=${tooltipLabel}\r\n .binSnapping=${binSnapping}\r\n .barScaling=${barScaling}\r\n .buckets=${buckets}\r\n .modalManager=${this.modalManager}\r\n .analyticsHandler=${this.analyticsHandler}\r\n @histogramDateRangeApplied=${this.histogramDateRangeUpdated}\r\n @modalClosed=${this.handleExpandedDatePickerClosed}\r\n ></expanded-date-picker>\r\n `;\r\n\r\n const config = new ModalConfig({\r\n bodyColor: '#fff',\r\n headerColor: '#194880',\r\n showHeaderLogo: false,\r\n closeOnBackdropClick: true, // TODO: want to fire analytics\r\n title: html`${msg('Select a date range')}`,\r\n });\r\n\r\n this.modalManager?.classList.add('expanded-date-picker');\r\n this.modalManager?.showModal({\r\n config,\r\n customModalContent,\r\n userClosedModalCallback: this.handleExpandedDatePickerClosed,\r\n });\r\n\r\n this.analyticsHandler?.sendEvent({\r\n category: analyticsCategories.default,\r\n action: analyticsActions.histogramExpanded,\r\n label: window.location.href,\r\n });\r\n }\r\n\r\n private handleExpandedDatePickerClosed = (): void => {\r\n this.modalManager?.classList.remove('expanded-date-picker');\r\n };\r\n\r\n updated(changed: PropertyValues) {\r\n if (changed.has('selectedFacets')) {\r\n this.dispatchFacetsChangedEvent();\r\n }\r\n }\r\n\r\n // TODO: want to fire analytics?\r\n private dispatchFacetsChangedEvent() {\r\n const event = new CustomEvent<SelectedFacets>('facetsChanged', {\r\n detail: this.selectedFacets,\r\n });\r\n this.dispatchEvent(event);\r\n }\r\n\r\n /**\r\n * Template for the \"Expand\" button to show the date picker modal, or\r\n * `nothing` if that button should currently not be shown.\r\n */\r\n private get expandDatePickerBtnTemplate(): TemplateResult | typeof nothing {\r\n return this.allowExpandingDatePicker && !this.facetsLoading\r\n ? html`<button\r\n class=\"expand-date-picker-btn\"\r\n aria-haspopup=\"dialog\"\r\n @click=${this.showDatePickerModal}\r\n >\r\n <span class=\"sr-only\">${msg('Expand date histogram')}</span>\r\n <span aria-hidden=\"true\">${expandIcon}</span>\r\n </button>`\r\n : nothing;\r\n }\r\n\r\n private get histogramTemplate(): TemplateResult | typeof nothing {\r\n if (this.histogramAggregationLoading) {\r\n return html` <div class=\"histogram-loading-indicator\">…</div> `;\r\n }\r\n\r\n const { histogramProps } = this;\r\n if (!histogramProps) return nothing;\r\n\r\n const {\r\n buckets,\r\n dateFormat,\r\n tooltipDateFormat,\r\n tooltipLabel,\r\n binSnapping,\r\n barScaling,\r\n minDate,\r\n maxDate,\r\n } = histogramProps;\r\n\r\n return html`\r\n <histogram-date-range\r\n class=${this.isTvSearch ? 'wide-inputs' : ''}\r\n .minDate=${minDate}\r\n .maxDate=${maxDate}\r\n .minSelectedDate=${this.minSelectedDate ?? minDate}\r\n .maxSelectedDate=${this.maxSelectedDate ?? maxDate}\r\n .updateDelay=${100}\r\n .dateFormat=${dateFormat}\r\n .tooltipDateFormat=${tooltipDateFormat}\r\n .tooltipLabel=${tooltipLabel}\r\n .binSnapping=${binSnapping}\r\n .barScaling=${barScaling}\r\n .bins=${buckets}\r\n missingDataMessage=\"...\"\r\n .width=${this.collapsableFacets && this.contentWidth\r\n ? this.contentWidth\r\n : 180}\r\n @histogramDateRangeUpdated=${this.histogramDateRangeUpdated}\r\n ></histogram-date-range>\r\n `;\r\n }\r\n\r\n /**\r\n * Dispatches a `histogramDateRangeUpdated` event with the date range copied from the\r\n * input event.\r\n *\r\n * Arrow function to ensure `this` is always bound to the current component.\r\n */\r\n private histogramDateRangeUpdated = (\r\n e: CustomEvent<{\r\n minDate: string;\r\n maxDate: string;\r\n }>,\r\n ): void => {\r\n const { minDate, maxDate } = e.detail;\r\n const event = new CustomEvent('histogramDateRangeUpdated', {\r\n detail: { minDate, maxDate },\r\n });\r\n this.dispatchEvent(event);\r\n };\r\n\r\n /**\r\n * Combines the selected facets with the aggregations to create a single list of facets\r\n */\r\n private get mergedFacets(): FacetGroup[] {\r\n const facetGroups: FacetGroup[] = [];\r\n\r\n this.facetDisplayOrder.forEach(facetKey => {\r\n if (facetKey === 'mediatype' && this.suppressMediatypeFacets) return;\r\n\r\n const selectedFacetGroup = this.selectedFacetGroups.find(\r\n group => group.key === facetKey,\r\n );\r\n const aggregateFacetGroup = this.aggregationFacetGroups.find(\r\n group => group.key === facetKey,\r\n );\r\n\r\n // if the user selected a facet, but it's not in the aggregation, we add it as-is\r\n if (selectedFacetGroup && !aggregateFacetGroup) {\r\n facetGroups.push(selectedFacetGroup);\r\n return;\r\n }\r\n\r\n // if we don't have an aggregate facet group, don't add this to the list\r\n if (!aggregateFacetGroup) return;\r\n\r\n // start with either the selected group if we have one, or the aggregate group\r\n const facetGroup = selectedFacetGroup ?? aggregateFacetGroup;\r\n\r\n // attach the counts to the selected buckets\r\n let bucketsWithCount =\r\n selectedFacetGroup?.buckets.map(bucket => {\r\n const selectedBucket = aggregateFacetGroup.buckets.find(\r\n b => b.key === bucket.key,\r\n );\r\n return selectedBucket\r\n ? {\r\n ...bucket,\r\n count: selectedBucket.count,\r\n }\r\n : bucket;\r\n }) ?? [];\r\n\r\n // append any additional buckets that were not selected\r\n aggregateFacetGroup.buckets.forEach(bucket => {\r\n const existingBucket = bucketsWithCount.find(b => b.key === bucket.key);\r\n if (existingBucket) return;\r\n bucketsWithCount.push(bucket);\r\n });\r\n\r\n /**\r\n * render limited facet items on page facet area\r\n *\r\n * - by-default we are showing 6 items\r\n * - additionally want to show all items (selected/suppressed) in page facet area\r\n */\r\n let allowedFacetCount = Object.keys(\r\n (selectedFacetGroup?.buckets as []) || [],\r\n )?.length;\r\n if (allowedFacetCount < this.allowedFacetCount) {\r\n allowedFacetCount = this.allowedFacetCount; // splice start index from 0th\r\n }\r\n\r\n // For lending facets, only include a specific subset of buckets\r\n if (facetKey === 'lending') {\r\n bucketsWithCount = bucketsWithCount.filter(\r\n bucket => lendingFacetKeysVisibility[bucket.key as LendingFacetKey],\r\n );\r\n }\r\n\r\n // Sort the FacetBuckets so that selected and hidden buckets come before the rest\r\n sortBucketsBySelectionState(bucketsWithCount, defaultFacetSort[facetKey]);\r\n\r\n // For mediatype facets, ensure the collection bucket is always shown if present\r\n if (facetKey === 'mediatype') {\r\n const collectionIndex = bucketsWithCount.findIndex(\r\n bucket => bucket.key === 'collection',\r\n );\r\n\r\n if (collectionIndex >= allowedFacetCount) {\r\n const [collectionBucket] = bucketsWithCount.splice(\r\n collectionIndex,\r\n 1,\r\n );\r\n\r\n // If we're showing lots of selected facets, ensure we're not cutting off the last one\r\n if (allowedFacetCount > this.allowedFacetCount) {\r\n allowedFacetCount += 1;\r\n }\r\n\r\n bucketsWithCount.splice(allowedFacetCount - 1, 0, collectionBucket);\r\n }\r\n }\r\n\r\n // For TV creator facets, uppercase the display text\r\n if (facetKey === 'creator' && this.isTvSearch) {\r\n bucketsWithCount.forEach(b => {\r\n b.displayText = (b.displayText ?? b.key)?.toLocaleUpperCase();\r\n\r\n const channelLabel = this.tvChannelAliases?.get(b.displayText);\r\n if (channelLabel && channelLabel !== b.displayText) {\r\n b.extraNote = `(${channelLabel})`;\r\n }\r\n });\r\n }\r\n // For TV clip_type facets, capitalize the display text\r\n if (facetKey === 'clip_type') {\r\n bucketsWithCount.forEach(b => {\r\n b.displayText ??= b.key;\r\n b.displayText =\r\n b.displayText.charAt(0).toLocaleUpperCase() +\r\n b.displayText.slice(1);\r\n });\r\n }\r\n\r\n // slice off how many items we want to show in page facet area\r\n facetGroup.buckets = bucketsWithCount.slice(0, allowedFacetCount);\r\n\r\n facetGroups.push(facetGroup);\r\n });\r\n\r\n return facetGroups;\r\n }\r\n\r\n /**\r\n * Converts the selected facets to a `FacetGroup` array,\r\n * which is easier to work with\r\n */\r\n private get selectedFacetGroups(): FacetGroup[] {\r\n if (!this.selectedFacets) return [];\r\n\r\n const facetGroups: FacetGroup[] = Object.entries(this.selectedFacets).map(\r\n ([key, selectedFacets]) => {\r\n const option = key as FacetOption;\r\n const title = facetTitles[option];\r\n\r\n const buckets: FacetBucket[] = Object.entries(selectedFacets).map(\r\n ([value, facetData]) => {\r\n let displayText: string = value;\r\n // for lending facets, convert the key to a readable format\r\n if (option === 'lending') {\r\n displayText =\r\n lendingFacetDisplayNames[value as LendingFacetKey] ?? value;\r\n }\r\n return {\r\n displayText,\r\n key: value,\r\n count: facetData.count,\r\n state: facetData.state,\r\n };\r\n },\r\n );\r\n\r\n return {\r\n title,\r\n key: option,\r\n buckets,\r\n };\r\n },\r\n );\r\n\r\n return facetGroups;\r\n }\r\n\r\n /**\r\n * Converts the raw `aggregations` to `FacetGroups`, which are easier to use\r\n */\r\n private get aggregationFacetGroups(): FacetGroup[] {\r\n const facetGroups: FacetGroup[] = [];\r\n Object.entries(this.aggregations ?? []).forEach(([key, aggregation]) => {\r\n // the year_histogram and date_histogram data is in a different format so can't be handled here\r\n if (['year_histogram', 'date_histogram'].includes(key)) return;\r\n\r\n const option = key as FacetOption;\r\n const title = facetTitles[option];\r\n if (!title) return;\r\n\r\n let castedBuckets = aggregation.getSortedBuckets(\r\n defaultFacetSort[option],\r\n ) as Bucket[];\r\n\r\n if (option === 'collection') {\r\n // we are not showing fav- collections or certain deemphasized collections in facets\r\n castedBuckets = castedBuckets?.filter(bucket => {\r\n const bucketKey = bucket?.key?.toString();\r\n return (\r\n !suppressedCollections[bucketKey] && !bucketKey?.startsWith('fav-')\r\n );\r\n });\r\n }\r\n\r\n const facetBuckets: FacetBucket[] = castedBuckets.map(bucket => {\r\n const bucketKey = bucket.key;\r\n let displayText = `${bucket.key}`;\r\n // for lending facets, convert the bucket key to a readable format\r\n if (option === 'lending') {\r\n displayText =\r\n lendingFacetDisplayNames[bucket.key as LendingFacetKey] ??\r\n `${bucket.key}`;\r\n }\r\n return {\r\n displayText,\r\n key: `${bucketKey}`,\r\n count: bucket.doc_count,\r\n state: 'none',\r\n };\r\n });\r\n const group: FacetGroup = {\r\n title,\r\n key: option,\r\n buckets: facetBuckets,\r\n };\r\n facetGroups.push(group);\r\n });\r\n return facetGroups;\r\n }\r\n\r\n /**\r\n * Generate the template for a facet group with a header and the collapsible\r\n * chevron for the mobile view\r\n */\r\n private getFacetGroupTemplate(\r\n facetGroup: FacetGroup,\r\n ): TemplateResult | typeof nothing {\r\n if (!this.facetsLoading && facetGroup.buckets.length === 0) return nothing;\r\n\r\n const { key } = facetGroup;\r\n const isOpen = this.openFacets[key];\r\n const collapser = html`\r\n <span class=\"collapser ${isOpen ? 'open' : ''}\"> ${chevronIcon} </span>\r\n `;\r\n\r\n const toggleCollapsed = () => {\r\n const newOpenFacets = { ...this.openFacets };\r\n newOpenFacets[key] = !isOpen;\r\n this.openFacets = newOpenFacets;\r\n };\r\n\r\n // Added data-testid for Playwright testing\r\n // Using className and aria-labels is not ideal for Playwright locator\r\n const headerId = `facet-group-header-label-${facetGroup.key}`;\r\n return html`\r\n <section\r\n class=\"facet-group ${this.collapsableFacets ? 'mobile' : ''}\"\r\n aria-labelledby=${headerId}\r\n data-testid=${headerId}\r\n >\r\n <div class=\"facet-group-header\">\r\n <h3\r\n id=${headerId}\r\n @click=${toggleCollapsed}\r\n @keyup=${toggleCollapsed}\r\n >\r\n ${this.collapsableFacets ? collapser : nothing} ${facetGroup.title}\r\n <span class=\"sr-only\">filters</span>\r\n </h3>\r\n </div>\r\n <div\r\n class=\"facet-group-content ${isOpen ? 'open' : ''}\"\r\n data-testid=\"facet-group-content-${facetGroup.key}\"\r\n >\r\n ${this.facetsLoading\r\n ? this.getTombstoneFacetGroupTemplate()\r\n : html`\r\n ${this.getFacetTemplate(facetGroup)}\r\n ${this.searchMoreFacetsLink(facetGroup)}\r\n `}\r\n </div>\r\n </section>\r\n `;\r\n }\r\n\r\n private getTombstoneFacetGroupTemplate(): TemplateResult {\r\n // Render five tombstone rows\r\n return html`\r\n ${map(\r\n Array(5).fill(null),\r\n () => html`<facet-tombstone-row></facet-tombstone-row>`,\r\n )}\r\n `;\r\n }\r\n\r\n /**\r\n * Generate the More... link button just below the facets group\r\n *\r\n * TODO: want to fire analytics?\r\n */\r\n private searchMoreFacetsLink(\r\n facetGroup: FacetGroup,\r\n ): TemplateResult | typeof nothing {\r\n // Don't render More... links for FTS searches\r\n if (!this.moreLinksVisible) {\r\n return nothing;\r\n }\r\n\r\n // Don't render More... links for lending facets\r\n if (facetGroup.key === 'lending') {\r\n return nothing;\r\n }\r\n\r\n // Don't render More... link if the number of facets < this.allowedFacetCount\r\n if (Object.keys(facetGroup.buckets).length < this.allowedFacetCount) {\r\n return nothing;\r\n }\r\n\r\n // We sort years in numeric order by default, rather than bucket count\r\n const facetSort = defaultFacetSort[facetGroup.key];\r\n\r\n // Added data-testid for Playwright testing\r\n // Using the className is not ideal for Playwright locator\r\n return html`<button\r\n class=\"more-link\"\r\n @click=${() => {\r\n this.showMoreFacetsModal(facetGroup, facetSort);\r\n this.analyticsHandler?.sendEvent({\r\n category: analyticsCategories.default,\r\n action: analyticsActions.showMoreFacetsModal,\r\n label: facetGroup.key,\r\n });\r\n this.dispatchEvent(\r\n new CustomEvent('showMoreFacets', { detail: facetGroup.key }),\r\n );\r\n }}\r\n data-testid=\"more-link-btn\"\r\n >\r\n More...\r\n </button>`;\r\n }\r\n\r\n async showMoreFacetsModal(\r\n facetGroup: FacetGroup,\r\n sortedBy: AggregationSortType,\r\n ): Promise<void> {\r\n const customModalContent = html`\r\n <more-facets-content\r\n .analyticsHandler=${this.analyticsHandler}\r\n .facetKey=${facetGroup.key}\r\n .query=${this.query}\r\n .identifiers=${this.identifiers}\r\n .filterMap=${this.filterMap}\r\n .pageSpecifierParams=${this.pageSpecifierParams}\r\n .modalManager=${this.modalManager}\r\n .searchService=${this.searchService}\r\n .searchType=${this.searchType}\r\n .collectionTitles=${this.collectionTitles}\r\n .tvChannelAliases=${this.tvChannelAliases}\r\n .selectedFacets=${this.selectedFacets}\r\n .sortedBy=${sortedBy}\r\n .isTvSearch=${this.isTvSearch}\r\n @facetsChanged=${(e: CustomEvent) => {\r\n const event = new CustomEvent<SelectedFacets>('facetsChanged', {\r\n detail: e.detail,\r\n bubbles: true,\r\n composed: true,\r\n });\r\n this.dispatchEvent(event);\r\n }}\r\n >\r\n </more-facets-content>\r\n `;\r\n\r\n const config = new ModalConfig({\r\n bodyColor: '#fff',\r\n headerColor: '#194880',\r\n showHeaderLogo: false,\r\n closeOnBackdropClick: true, // TODO: want to fire analytics\r\n title: html`Select filters`,\r\n });\r\n this.modalManager?.classList.add('more-search-facets');\r\n this.modalManager?.showModal({\r\n config,\r\n customModalContent,\r\n userClosedModalCallback: () => {\r\n this.modalManager?.classList.remove('more-search-facets');\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Generate the list template for each bucket in a facet group\r\n */\r\n private getFacetTemplate(facetGroup: FacetGroup): TemplateResult {\r\n return html`\r\n <facets-template\r\n .collectionPagePath=${this.collectionPagePath}\r\n .facetGroup=${facetGroup}\r\n .selectedFacets=${this.selectedFacets}\r\n .collectionTitles=${this.collectionTitles}\r\n @facetClick=${(e: CustomEvent<FacetEventDetails>) => {\r\n this.selectedFacets = updateSelectedFacetBucket(\r\n this.selectedFacets,\r\n facetGroup.key,\r\n e.detail.bucket,\r\n true,\r\n );\r\n\r\n const event = new CustomEvent<SelectedFacets>('facetsChanged', {\r\n detail: this.selectedFacets,\r\n bubbles: true,\r\n composed: true,\r\n });\r\n this.dispatchEvent(event);\r\n }}\r\n ></facets-template>\r\n `;\r\n }\r\n\r\n static get styles() {\r\n return [\r\n srOnlyStyle,\r\n css`\r\n a:link {\r\n text-decoration: none;\r\n color: var(--ia-theme-link-color, #4b64ff);\r\n }\r\n a:link:hover {\r\n text-decoration: underline;\r\n }\r\n\r\n #container.loading {\r\n opacity: 0.5;\r\n }\r\n\r\n #container.managing {\r\n opacity: 0.3;\r\n }\r\n\r\n .histogram-loading-indicator {\r\n width: 100%;\r\n height: 2.25rem;\r\n margin-top: 1.75rem;\r\n font-size: 1.4rem;\r\n text-align: center;\r\n }\r\n\r\n .collapser {\r\n display: inline-block;\r\n cursor: pointer;\r\n width: 10px;\r\n height: 10px;\r\n }\r\n\r\n .collapser svg {\r\n transition: transform 0.2s ease-in-out;\r\n }\r\n\r\n .collapser.open svg {\r\n transform: rotate(90deg);\r\n }\r\n\r\n .facet-group {\r\n margin-bottom: 2rem;\r\n }\r\n\r\n .facet-group h3 {\r\n margin-bottom: 0.7rem;\r\n }\r\n\r\n .facet-group.mobile h3 {\r\n cursor: pointer;\r\n }\r\n\r\n .facet-group-header {\r\n display: flex;\r\n margin-bottom: 0.7rem;\r\n justify-content: space-between;\r\n border-bottom: 1px solid rgb(232, 232, 232);\r\n }\r\n\r\n .facet-group-content {\r\n transition: max-height 0.2s ease-in-out;\r\n }\r\n\r\n .facet-group.mobile .facet-group-content {\r\n max-height: 0;\r\n overflow: hidden;\r\n }\r\n\r\n .facet-group.mobile .facet-group-content.open {\r\n max-height: 2000px;\r\n }\r\n\r\n .partof-collections ul {\r\n list-style-type: none;\r\n padding: 0;\r\n font-size: 1.2rem;\r\n }\r\n\r\n h3 {\r\n font-size: 1.4rem;\r\n margin: 0;\r\n }\r\n\r\n .more-link {\r\n font-size: 1.2rem;\r\n text-decoration: none;\r\n padding: 0;\r\n margin-top: 0.25rem;\r\n background: inherit;\r\n border: 0;\r\n color: var(--ia-theme-link-color, #4b64ff);\r\n cursor: pointer;\r\n }\r\n\r\n #date-picker-label {\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n\r\n .expand-date-picker-btn {\r\n margin: 0;\r\n padding: 0;\r\n border: 0;\r\n appearance: none;\r\n background: none;\r\n cursor: pointer;\r\n }\r\n\r\n .expand-date-picker-btn svg {\r\n width: 14px;\r\n height: 14px;\r\n }\r\n\r\n .sorting-icon {\r\n height: 15px;\r\n cursor: pointer;\r\n }\r\n\r\n histogram-date-range.wide-inputs {\r\n --histogramDateRangeInputWidth: 4.8rem;\r\n }\r\n `,\r\n ];\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"collection-facets.js","sourceRoot":"","sources":["../../src/collection-facets.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n css,\r\n html,\r\n LitElement,\r\n PropertyValues,\r\n nothing,\r\n TemplateResult,\r\n} from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport { map } from 'lit/directives/map.js';\r\nimport { ref } from 'lit/directives/ref.js';\r\nimport { msg } from '@lit/localize';\r\nimport { classMap } from 'lit/directives/class-map.js';\r\nimport {\r\n Aggregation,\r\n AggregationSortType,\r\n Bucket,\r\n FilterMap,\r\n SearchServiceInterface,\r\n SearchType,\r\n} from '@internetarchive/search-service';\r\nimport '@internetarchive/histogram-date-range';\r\nimport '@internetarchive/feature-feedback';\r\nimport {\r\n ModalConfig,\r\n ModalManagerInterface,\r\n} from '@internetarchive/modal-manager';\r\nimport type { FeatureFeedbackServiceInterface } from '@internetarchive/feature-feedback';\r\nimport type { RecaptchaManagerInterface } from '@internetarchive/recaptcha-manager';\r\nimport type { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';\r\nimport type { SharedResizeObserverInterface } from '@internetarchive/shared-resize-observer';\r\nimport type {\r\n BarScalingOption,\r\n BinSnappingInterval,\r\n} from '@internetarchive/histogram-date-range';\r\nimport chevronIcon from './assets/img/icons/chevron';\r\nimport expandIcon from './assets/img/icons/expand';\r\nimport {\r\n FacetOption,\r\n SelectedFacets,\r\n FacetGroup,\r\n FacetBucket,\r\n defaultFacetDisplayOrder,\r\n facetTitles,\r\n lendingFacetDisplayNames,\r\n lendingFacetKeysVisibility,\r\n LendingFacetKey,\r\n suppressedCollections,\r\n defaultFacetSort,\r\n FacetEventDetails,\r\n} from './models';\r\nimport type {\r\n CollectionTitles,\r\n PageSpecifierParams,\r\n TVChannelAliases,\r\n} from './data-source/models';\r\nimport {\r\n analyticsActions,\r\n analyticsCategories,\r\n} from './utils/analytics-events';\r\nimport { srOnlyStyle } from './styles/sr-only';\r\nimport { ExpandedDatePicker } from './expanded-date-picker';\r\nimport {\r\n sortBucketsBySelectionState,\r\n updateSelectedFacetBucket,\r\n} from './utils/facet-utils';\r\n\r\nimport '@internetarchive/histogram-date-range';\r\nimport './collection-facets/more-facets-content';\r\nimport './collection-facets/facets-template';\r\nimport './collection-facets/facet-tombstone-row';\r\nimport './expanded-date-picker';\r\n\r\n@customElement('collection-facets')\r\nexport class CollectionFacets extends LitElement {\r\n @property({ type: Object }) searchService?: SearchServiceInterface;\r\n\r\n @property({ type: Number }) searchType?: SearchType;\r\n\r\n @property({ type: Object }) aggregations?: Record<string, Aggregation>;\r\n\r\n @property({ type: Object }) histogramAggregation?: Aggregation;\r\n\r\n @property({ type: String }) minSelectedDate?: string;\r\n\r\n @property({ type: String }) maxSelectedDate?: string;\r\n\r\n @property({ type: Boolean }) moreLinksVisible = true;\r\n\r\n @property({ type: Boolean }) facetsLoading = false;\r\n\r\n @property({ type: Boolean }) histogramAggregationLoading = false;\r\n\r\n @property({ type: Object }) selectedFacets?: SelectedFacets;\r\n\r\n @property({ type: Boolean }) collapsableFacets = false;\r\n\r\n @property({ type: Number }) contentWidth?: number;\r\n\r\n @property({ type: Boolean }) showHistogramDatePicker = false;\r\n\r\n @property({ type: Boolean }) allowExpandingDatePicker = false;\r\n\r\n @property({ type: Boolean }) suppressMediatypeFacets = false;\r\n\r\n @property({ type: String }) query?: string;\r\n\r\n @property({ type: Array }) identifiers?: string[];\r\n\r\n @property({ type: Object }) pageSpecifierParams?: PageSpecifierParams;\r\n\r\n @property({ type: Array }) parentCollections: string[] = [];\r\n\r\n @property({ type: Object }) filterMap?: FilterMap;\r\n\r\n @property({ type: String }) baseNavigationUrl?: string;\r\n\r\n @property({ type: String }) collectionPagePath: string = '/details/';\r\n\r\n @property({ type: Boolean }) isManageView = false;\r\n\r\n @property({ type: Boolean }) isTvSearch = false;\r\n\r\n @property({ type: Array }) facetDisplayOrder: FacetOption[] =\r\n defaultFacetDisplayOrder;\r\n\r\n @property({ type: Object, attribute: false })\r\n modalManager?: ModalManagerInterface;\r\n\r\n @property({ type: Object, attribute: false })\r\n resizeObserver?: SharedResizeObserverInterface;\r\n\r\n @property({ type: Object, attribute: false })\r\n featureFeedbackService?: FeatureFeedbackServiceInterface;\r\n\r\n @property({ type: Object, attribute: false })\r\n recaptchaManager?: RecaptchaManagerInterface;\r\n\r\n @property({ type: Object, attribute: false })\r\n analyticsHandler?: AnalyticsManagerInterface;\r\n\r\n @property({ type: Object, attribute: false })\r\n collectionTitles?: CollectionTitles;\r\n\r\n @property({ type: Object, attribute: false })\r\n tvChannelAliases?: TVChannelAliases;\r\n\r\n @state() openFacets: Record<FacetOption, boolean> = {\r\n subject: false,\r\n lending: false,\r\n mediatype: false,\r\n language: false,\r\n creator: false,\r\n collection: false,\r\n year: false,\r\n clip_type: false,\r\n program: false,\r\n person: false,\r\n sponsor: false,\r\n };\r\n\r\n /**\r\n * Maximum # of facet buckets to render per facet group\r\n */\r\n private allowedFacetCount = 6;\r\n\r\n render() {\r\n const containerClasses = classMap({\r\n loading: this.facetsLoading,\r\n managing: this.isManageView,\r\n });\r\n\r\n const heading = this.isTvSearch\r\n ? msg('Date Published')\r\n : msg('Year Published');\r\n\r\n // Added data-testid for Playwright testing\r\n // Using facet-group class and aria-labels is not ideal for Playwright locator\r\n const datePickerLabelId = 'date-picker-label';\r\n return html`\r\n <div id=\"container\" class=${containerClasses}>\r\n ${this.showHistogramDatePicker &&\r\n (this.histogramAggregation || this.histogramAggregationLoading)\r\n ? html`\r\n <section\r\n class=\"facet-group\"\r\n aria-labelledby=${datePickerLabelId}\r\n data-testid=\"facet-group-header-label-date-picker\"\r\n >\r\n <h3 id=${datePickerLabelId}>\r\n ${heading} <span class=\"sr-only\">${msg('range filter')}</span>\r\n ${this.expandDatePickerBtnTemplate}\r\n </h3>\r\n ${this.histogramTemplate}\r\n </section>\r\n `\r\n : nothing}\r\n ${this.collectionPartOfTemplate}\r\n <slot name=\"facets-top\"></slot>\r\n ${this.mergedFacets.map(facetGroup =>\r\n this.getFacetGroupTemplate(facetGroup),\r\n )}\r\n </div>\r\n `;\r\n }\r\n\r\n private get collectionPartOfTemplate(): TemplateResult | typeof nothing {\r\n // We only display the \"Part Of\" section on collection pages\r\n if (!this.parentCollections?.length) return nothing;\r\n\r\n // Added data-testid for Playwright testing\r\n // Using className and aria-labels is not ideal for Playwright locator\r\n const headingId = 'partof-heading';\r\n return html`\r\n <section\r\n class=\"facet-group partof-collections\"\r\n aria-labelledby=${headingId}\r\n data-testid=\"facet-group-partof-collections\"\r\n >\r\n <div class=\"facet-group-header\">\r\n <h3 id=${headingId}>${msg('Part Of')}</h3>\r\n </div>\r\n <ul>\r\n ${map(this.parentCollections, collxn => {\r\n const collectionURL = `${this.baseNavigationUrl}${this.collectionPagePath}${collxn}`;\r\n\r\n return html` <li>\r\n <a\r\n href=${collectionURL}\r\n data-id=${collxn}\r\n @click=${this.partOfCollectionClicked}\r\n >\r\n ${this.collectionTitles?.get(collxn) ?? collxn}\r\n </a>\r\n </li>`;\r\n })}\r\n </ul>\r\n </section>\r\n `;\r\n }\r\n\r\n private partOfCollectionClicked(e: Event): void {\r\n this.analyticsHandler?.sendEvent({\r\n category: analyticsCategories.default,\r\n action: analyticsActions.partOfCollectionClicked,\r\n label: (e.target as HTMLElement).dataset.id,\r\n });\r\n }\r\n\r\n /**\r\n * Properties to pass into the date-picker histogram component\r\n */\r\n private get histogramProps() {\r\n const { histogramAggregation: aggregation } = this;\r\n if (!aggregation) return undefined;\r\n\r\n // Normalize some properties from the raw aggregation\r\n const firstYear =\r\n aggregation.first_bucket_year ?? aggregation.first_bucket_key;\r\n const lastYear =\r\n aggregation.last_bucket_year ?? aggregation.last_bucket_key;\r\n if (firstYear == null || lastYear == null) return undefined; // We at least need a start/end year defined\r\n\r\n const firstMonth = aggregation.first_bucket_month ?? 1;\r\n const lastMonth = aggregation.last_bucket_month ?? 12;\r\n\r\n const yearInterval = aggregation.interval ?? 1;\r\n const monthInterval = aggregation.interval_in_months ?? 12;\r\n\r\n const zeroPadMonth = (month: number) => month.toString().padStart(2, '0');\r\n\r\n // The date picker is configured differently for TV search, allowing month-level resolution\r\n if (this.isTvSearch) {\r\n // Whether the bucket interval is less than a year\r\n // (i.e., requires individual months to be handled & labeled)\r\n const mustHandleMonths = monthInterval < 12;\r\n\r\n return {\r\n buckets: aggregation.buckets as number[],\r\n dateFormat: 'YYYY-MM',\r\n tooltipDateFormat: mustHandleMonths ? 'MMM YYYY' : 'YYYY',\r\n tooltipLabel: 'broadcast',\r\n binSnapping: (mustHandleMonths\r\n ? 'month'\r\n : 'year') as BinSnappingInterval,\r\n barScaling: 'linear' as BarScalingOption,\r\n minDate: `${firstYear}-${zeroPadMonth(firstMonth)}`,\r\n maxDate: `${lastYear}-${zeroPadMonth(lastMonth + monthInterval - 1)}`,\r\n };\r\n }\r\n\r\n // All other search types use the same configuration\r\n return {\r\n buckets: aggregation.buckets as number[],\r\n dateFormat: 'YYYY',\r\n tooltipDateFormat: 'YYYY',\r\n tooltipLabel: 'item',\r\n binSnapping: 'year' as BinSnappingInterval,\r\n barScaling: 'logarithmic' as BarScalingOption,\r\n minDate: `${firstYear}`,\r\n maxDate: `${lastYear + yearInterval - 1}`,\r\n };\r\n }\r\n\r\n /**\r\n * Opens a modal dialog containing an enlarged version of the date picker.\r\n */\r\n private showDatePickerModal(): void {\r\n const { histogramProps } = this;\r\n if (!histogramProps) return;\r\n\r\n const {\r\n buckets,\r\n dateFormat,\r\n tooltipDateFormat,\r\n tooltipLabel,\r\n binSnapping,\r\n barScaling,\r\n minDate,\r\n maxDate,\r\n } = histogramProps;\r\n\r\n // Because the modal manager does not clear its DOM content after being closed,\r\n // it may try to render the exact same date picker template when it is reopened.\r\n // And because it isn't actually a descendent of this collection-facets component,\r\n // changes to the template defined here may not trigger a reactive update to the date\r\n // picker, resulting in it displaying a stale date range.\r\n // This ref callback ensures that every time the date picker modal is opened, it will\r\n // always propagate the most recent date range into the date picker regardless of\r\n // whether Lit thinks the update is necessary.\r\n const expandedDatePickerChanged = (elmt?: Element) => {\r\n if (elmt && elmt instanceof ExpandedDatePicker) {\r\n const expandedDatePicker = elmt as ExpandedDatePicker;\r\n expandedDatePicker.minSelectedDate = this.minSelectedDate;\r\n expandedDatePicker.maxSelectedDate = this.maxSelectedDate;\r\n }\r\n };\r\n\r\n const customModalContent = html`\r\n <expanded-date-picker\r\n ${ref(expandedDatePickerChanged)}\r\n .minDate=${minDate}\r\n .maxDate=${maxDate}\r\n .minSelectedDate=${this.minSelectedDate}\r\n .maxSelectedDate=${this.maxSelectedDate}\r\n .customDateFormat=${dateFormat}\r\n .customTooltipDateFormat=${tooltipDateFormat}\r\n .customTooltipLabel=${tooltipLabel}\r\n .binSnapping=${binSnapping}\r\n .barScaling=${barScaling}\r\n .buckets=${buckets}\r\n .modalManager=${this.modalManager}\r\n .analyticsHandler=${this.analyticsHandler}\r\n @histogramDateRangeApplied=${this.histogramDateRangeUpdated}\r\n @modalClosed=${this.handleExpandedDatePickerClosed}\r\n ></expanded-date-picker>\r\n `;\r\n\r\n const config = new ModalConfig({\r\n bodyColor: '#fff',\r\n headerColor: '#194880',\r\n showHeaderLogo: false,\r\n closeOnBackdropClick: true, // TODO: want to fire analytics\r\n title: html`${msg('Select a date range')}`,\r\n });\r\n\r\n this.modalManager?.classList.add('expanded-date-picker');\r\n this.modalManager?.showModal({\r\n config,\r\n customModalContent,\r\n userClosedModalCallback: this.handleExpandedDatePickerClosed,\r\n });\r\n\r\n this.analyticsHandler?.sendEvent({\r\n category: analyticsCategories.default,\r\n action: analyticsActions.histogramExpanded,\r\n label: window.location.href,\r\n });\r\n }\r\n\r\n private handleExpandedDatePickerClosed = (): void => {\r\n this.modalManager?.classList.remove('expanded-date-picker');\r\n };\r\n\r\n updated(changed: PropertyValues) {\r\n if (changed.has('selectedFacets')) {\r\n this.dispatchFacetsChangedEvent();\r\n }\r\n }\r\n\r\n // TODO: want to fire analytics?\r\n private dispatchFacetsChangedEvent() {\r\n const event = new CustomEvent<SelectedFacets>('facetsChanged', {\r\n detail: this.selectedFacets,\r\n });\r\n this.dispatchEvent(event);\r\n }\r\n\r\n /**\r\n * Template for the \"Expand\" button to show the date picker modal, or\r\n * `nothing` if that button should currently not be shown.\r\n */\r\n private get expandDatePickerBtnTemplate(): TemplateResult | typeof nothing {\r\n return this.allowExpandingDatePicker && !this.facetsLoading\r\n ? html`<button\r\n class=\"expand-date-picker-btn\"\r\n aria-haspopup=\"dialog\"\r\n @click=${this.showDatePickerModal}\r\n >\r\n <span class=\"sr-only\">${msg('Expand date histogram')}</span>\r\n <span aria-hidden=\"true\">${expandIcon}</span>\r\n </button>`\r\n : nothing;\r\n }\r\n\r\n private get histogramTemplate(): TemplateResult | typeof nothing {\r\n if (this.histogramAggregationLoading) {\r\n return html` <div class=\"histogram-loading-indicator\">…</div> `;\r\n }\r\n\r\n const { histogramProps } = this;\r\n if (!histogramProps) return nothing;\r\n\r\n const {\r\n buckets,\r\n dateFormat,\r\n tooltipDateFormat,\r\n tooltipLabel,\r\n binSnapping,\r\n barScaling,\r\n minDate,\r\n maxDate,\r\n } = histogramProps;\r\n\r\n return html`\r\n <histogram-date-range\r\n class=${this.isTvSearch ? 'wide-inputs' : ''}\r\n .minDate=${minDate}\r\n .maxDate=${maxDate}\r\n .minSelectedDate=${this.minSelectedDate ?? minDate}\r\n .maxSelectedDate=${this.maxSelectedDate ?? maxDate}\r\n .updateDelay=${100}\r\n .dateFormat=${dateFormat}\r\n .tooltipDateFormat=${tooltipDateFormat}\r\n .tooltipLabel=${tooltipLabel}\r\n .binSnapping=${binSnapping}\r\n .barScaling=${barScaling}\r\n .bins=${buckets}\r\n missingDataMessage=\"...\"\r\n .width=${this.collapsableFacets && this.contentWidth\r\n ? this.contentWidth\r\n : 180}\r\n @histogramDateRangeUpdated=${this.histogramDateRangeUpdated}\r\n ></histogram-date-range>\r\n `;\r\n }\r\n\r\n /**\r\n * Dispatches a `histogramDateRangeUpdated` event with the date range copied from the\r\n * input event.\r\n *\r\n * Arrow function to ensure `this` is always bound to the current component.\r\n */\r\n private histogramDateRangeUpdated = (\r\n e: CustomEvent<{\r\n minDate: string;\r\n maxDate: string;\r\n }>,\r\n ): void => {\r\n const { minDate, maxDate } = e.detail;\r\n const event = new CustomEvent('histogramDateRangeUpdated', {\r\n detail: { minDate, maxDate },\r\n });\r\n this.dispatchEvent(event);\r\n };\r\n\r\n /**\r\n * Combines the selected facets with the aggregations to create a single list of facets\r\n */\r\n private get mergedFacets(): FacetGroup[] {\r\n const facetGroups: FacetGroup[] = [];\r\n\r\n this.facetDisplayOrder.forEach(facetKey => {\r\n if (facetKey === 'mediatype' && this.suppressMediatypeFacets) return;\r\n\r\n const selectedFacetGroup = this.selectedFacetGroups.find(\r\n group => group.key === facetKey,\r\n );\r\n const aggregateFacetGroup = this.aggregationFacetGroups.find(\r\n group => group.key === facetKey,\r\n );\r\n\r\n // if the user selected a facet, but it's not in the aggregation, we add it as-is\r\n if (selectedFacetGroup && !aggregateFacetGroup) {\r\n facetGroups.push(selectedFacetGroup);\r\n return;\r\n }\r\n\r\n // if we don't have an aggregate facet group, don't add this to the list\r\n if (!aggregateFacetGroup) return;\r\n\r\n // start with either the selected group if we have one, or the aggregate group\r\n const facetGroup = selectedFacetGroup ?? aggregateFacetGroup;\r\n\r\n // attach the counts to the selected buckets\r\n let bucketsWithCount =\r\n selectedFacetGroup?.buckets.map(bucket => {\r\n const selectedBucket = aggregateFacetGroup.buckets.find(\r\n b => b.key === bucket.key,\r\n );\r\n return selectedBucket\r\n ? {\r\n ...bucket,\r\n count: selectedBucket.count,\r\n }\r\n : bucket;\r\n }) ?? [];\r\n\r\n // append any additional buckets that were not selected\r\n aggregateFacetGroup.buckets.forEach(bucket => {\r\n const existingBucket = bucketsWithCount.find(b => b.key === bucket.key);\r\n if (existingBucket) return;\r\n bucketsWithCount.push(bucket);\r\n });\r\n\r\n /**\r\n * render limited facet items on page facet area\r\n *\r\n * - by-default we are showing 6 items\r\n * - additionally want to show all items (selected/suppressed) in page facet area\r\n */\r\n let allowedFacetCount = Object.keys(\r\n (selectedFacetGroup?.buckets as []) || [],\r\n )?.length;\r\n if (allowedFacetCount < this.allowedFacetCount) {\r\n allowedFacetCount = this.allowedFacetCount; // splice start index from 0th\r\n }\r\n\r\n // For lending facets, only include a specific subset of buckets\r\n if (facetKey === 'lending') {\r\n bucketsWithCount = bucketsWithCount.filter(\r\n bucket => lendingFacetKeysVisibility[bucket.key as LendingFacetKey],\r\n );\r\n }\r\n\r\n // Sort the FacetBuckets so that selected and hidden buckets come before the rest\r\n sortBucketsBySelectionState(bucketsWithCount, defaultFacetSort[facetKey]);\r\n\r\n // For mediatype facets, ensure the collection bucket is always shown if present\r\n if (facetKey === 'mediatype') {\r\n const collectionIndex = bucketsWithCount.findIndex(\r\n bucket => bucket.key === 'collection',\r\n );\r\n\r\n if (collectionIndex >= allowedFacetCount) {\r\n const [collectionBucket] = bucketsWithCount.splice(\r\n collectionIndex,\r\n 1,\r\n );\r\n\r\n // If we're showing lots of selected facets, ensure we're not cutting off the last one\r\n if (allowedFacetCount > this.allowedFacetCount) {\r\n allowedFacetCount += 1;\r\n }\r\n\r\n bucketsWithCount.splice(allowedFacetCount - 1, 0, collectionBucket);\r\n }\r\n }\r\n\r\n // For TV creator facets, uppercase the display text\r\n if (facetKey === 'creator' && this.isTvSearch) {\r\n bucketsWithCount.forEach(b => {\r\n b.displayText = (b.displayText ?? b.key)?.toLocaleUpperCase();\r\n\r\n const channelLabel = this.tvChannelAliases?.get(b.displayText);\r\n if (channelLabel && channelLabel !== b.displayText) {\r\n b.extraNote = `(${channelLabel})`;\r\n }\r\n });\r\n }\r\n // For TV clip_type facets, capitalize the display text\r\n if (facetKey === 'clip_type') {\r\n bucketsWithCount.forEach(b => {\r\n b.displayText ??= b.key;\r\n b.displayText =\r\n b.displayText.charAt(0).toLocaleUpperCase() +\r\n b.displayText.slice(1);\r\n });\r\n }\r\n\r\n // slice off how many items we want to show in page facet area\r\n facetGroup.buckets = bucketsWithCount.slice(0, allowedFacetCount);\r\n\r\n facetGroups.push(facetGroup);\r\n });\r\n\r\n return facetGroups;\r\n }\r\n\r\n /**\r\n * Converts the selected facets to a `FacetGroup` array,\r\n * which is easier to work with\r\n */\r\n private get selectedFacetGroups(): FacetGroup[] {\r\n if (!this.selectedFacets) return [];\r\n\r\n const facetGroups: FacetGroup[] = Object.entries(this.selectedFacets).map(\r\n ([key, selectedFacets]) => {\r\n const option = key as FacetOption;\r\n const title = facetTitles[option];\r\n\r\n const buckets: FacetBucket[] = Object.entries(selectedFacets).map(\r\n ([value, facetData]) => {\r\n let displayText: string = value;\r\n // for lending facets, convert the key to a readable format\r\n if (option === 'lending') {\r\n displayText =\r\n lendingFacetDisplayNames[value as LendingFacetKey] ?? value;\r\n }\r\n return {\r\n displayText,\r\n key: value,\r\n count: facetData.count,\r\n state: facetData.state,\r\n };\r\n },\r\n );\r\n\r\n return {\r\n title,\r\n key: option,\r\n buckets,\r\n };\r\n },\r\n );\r\n\r\n return facetGroups;\r\n }\r\n\r\n /**\r\n * Converts the raw `aggregations` to `FacetGroups`, which are easier to use\r\n */\r\n private get aggregationFacetGroups(): FacetGroup[] {\r\n const facetGroups: FacetGroup[] = [];\r\n Object.entries(this.aggregations ?? []).forEach(([key, aggregation]) => {\r\n // the year_histogram and date_histogram data is in a different format so can't be handled here\r\n if (['year_histogram', 'date_histogram'].includes(key)) return;\r\n\r\n const option = key as FacetOption;\r\n const title = facetTitles[option];\r\n if (!title) return;\r\n\r\n let castedBuckets = aggregation.getSortedBuckets(\r\n defaultFacetSort[option],\r\n ) as Bucket[];\r\n\r\n if (option === 'collection') {\r\n // we are not showing fav- collections or certain deemphasized collections in facets\r\n castedBuckets = castedBuckets?.filter(bucket => {\r\n const bucketKey = bucket?.key?.toString();\r\n return (\r\n !suppressedCollections[bucketKey] && !bucketKey?.startsWith('fav-')\r\n );\r\n });\r\n }\r\n\r\n const facetBuckets: FacetBucket[] = castedBuckets.map(bucket => {\r\n const bucketKey = bucket.key;\r\n let displayText = `${bucket.key}`;\r\n // for lending facets, convert the bucket key to a readable format\r\n if (option === 'lending') {\r\n displayText =\r\n lendingFacetDisplayNames[bucket.key as LendingFacetKey] ??\r\n `${bucket.key}`;\r\n }\r\n return {\r\n displayText,\r\n key: `${bucketKey}`,\r\n count: bucket.doc_count,\r\n state: 'none',\r\n };\r\n });\r\n const group: FacetGroup = {\r\n title,\r\n key: option,\r\n buckets: facetBuckets,\r\n };\r\n facetGroups.push(group);\r\n });\r\n return facetGroups;\r\n }\r\n\r\n /**\r\n * Generate the template for a facet group with a header and the collapsible\r\n * chevron for the mobile view\r\n */\r\n private getFacetGroupTemplate(\r\n facetGroup: FacetGroup,\r\n ): TemplateResult | typeof nothing {\r\n if (!this.facetsLoading && facetGroup.buckets.length === 0) return nothing;\r\n\r\n const { key } = facetGroup;\r\n const isOpen = this.openFacets[key];\r\n const collapser = html`\r\n <span class=\"collapser ${isOpen ? 'open' : ''}\"> ${chevronIcon} </span>\r\n `;\r\n\r\n const toggleCollapsed = () => {\r\n const newOpenFacets = { ...this.openFacets };\r\n newOpenFacets[key] = !isOpen;\r\n this.openFacets = newOpenFacets;\r\n };\r\n\r\n // Added data-testid for Playwright testing\r\n // Using className and aria-labels is not ideal for Playwright locator\r\n const headerId = `facet-group-header-label-${facetGroup.key}`;\r\n return html`\r\n <section\r\n class=\"facet-group ${this.collapsableFacets ? 'mobile' : ''}\"\r\n aria-labelledby=${headerId}\r\n data-testid=${headerId}\r\n >\r\n <div class=\"facet-group-header\">\r\n <h3\r\n id=${headerId}\r\n @click=${toggleCollapsed}\r\n @keyup=${toggleCollapsed}\r\n >\r\n ${this.collapsableFacets ? collapser : nothing} ${facetGroup.title}\r\n <span class=\"sr-only\">filters</span>\r\n </h3>\r\n </div>\r\n <div\r\n class=\"facet-group-content ${isOpen ? 'open' : ''}\"\r\n data-testid=\"facet-group-content-${facetGroup.key}\"\r\n >\r\n ${this.facetsLoading\r\n ? this.getTombstoneFacetGroupTemplate()\r\n : html`\r\n ${this.getFacetTemplate(facetGroup)}\r\n ${this.searchMoreFacetsLink(facetGroup)}\r\n `}\r\n </div>\r\n </section>\r\n `;\r\n }\r\n\r\n private getTombstoneFacetGroupTemplate(): TemplateResult {\r\n // Render five tombstone rows\r\n return html`\r\n ${map(\r\n Array(5).fill(null),\r\n () => html`<facet-tombstone-row></facet-tombstone-row>`,\r\n )}\r\n `;\r\n }\r\n\r\n /**\r\n * Generate the More... link button just below the facets group\r\n *\r\n * TODO: want to fire analytics?\r\n */\r\n private searchMoreFacetsLink(\r\n facetGroup: FacetGroup,\r\n ): TemplateResult | typeof nothing {\r\n // Don't render More... links for FTS searches\r\n if (!this.moreLinksVisible) {\r\n return nothing;\r\n }\r\n\r\n // Don't render More... links for lending facets\r\n if (facetGroup.key === 'lending') {\r\n return nothing;\r\n }\r\n\r\n // Don't render More... link if the number of facets < this.allowedFacetCount\r\n if (Object.keys(facetGroup.buckets).length < this.allowedFacetCount) {\r\n return nothing;\r\n }\r\n\r\n // We sort years in numeric order by default, rather than bucket count\r\n const facetSort = defaultFacetSort[facetGroup.key];\r\n\r\n // Added data-testid for Playwright testing\r\n // Using the className is not ideal for Playwright locator\r\n return html`<button\r\n class=\"more-link\"\r\n @click=${() => {\r\n this.showMoreFacetsModal(facetGroup, facetSort);\r\n this.analyticsHandler?.sendEvent({\r\n category: analyticsCategories.default,\r\n action: analyticsActions.showMoreFacetsModal,\r\n label: facetGroup.key,\r\n });\r\n this.dispatchEvent(\r\n new CustomEvent('showMoreFacets', { detail: facetGroup.key }),\r\n );\r\n }}\r\n data-testid=\"more-link-btn\"\r\n >\r\n More...\r\n </button>`;\r\n }\r\n\r\n async showMoreFacetsModal(\r\n facetGroup: FacetGroup,\r\n sortedBy: AggregationSortType,\r\n ): Promise<void> {\r\n const customModalContent = html`\r\n <more-facets-content\r\n .analyticsHandler=${this.analyticsHandler}\r\n .facetKey=${facetGroup.key}\r\n .query=${this.query}\r\n .identifiers=${this.identifiers}\r\n .filterMap=${this.filterMap}\r\n .pageSpecifierParams=${this.pageSpecifierParams}\r\n .modalManager=${this.modalManager}\r\n .searchService=${this.searchService}\r\n .searchType=${this.searchType}\r\n .collectionTitles=${this.collectionTitles}\r\n .tvChannelAliases=${this.tvChannelAliases}\r\n .selectedFacets=${this.selectedFacets}\r\n .sortedBy=${sortedBy}\r\n .isTvSearch=${this.isTvSearch}\r\n @facetsChanged=${(e: CustomEvent) => {\r\n const event = new CustomEvent<SelectedFacets>('facetsChanged', {\r\n detail: e.detail,\r\n bubbles: true,\r\n composed: true,\r\n });\r\n this.dispatchEvent(event);\r\n }}\r\n >\r\n </more-facets-content>\r\n `;\r\n\r\n const config = new ModalConfig({\r\n bodyColor: '#fff',\r\n headerColor: '#194880',\r\n showHeaderLogo: false,\r\n closeOnBackdropClick: true, // TODO: want to fire analytics\r\n title: html`Select filters`,\r\n });\r\n this.modalManager?.classList.add('more-search-facets');\r\n this.modalManager?.showModal({\r\n config,\r\n customModalContent,\r\n userClosedModalCallback: () => {\r\n this.modalManager?.classList.remove('more-search-facets');\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Generate the list template for each bucket in a facet group\r\n */\r\n private getFacetTemplate(facetGroup: FacetGroup): TemplateResult {\r\n return html`\r\n <facets-template\r\n .collectionPagePath=${this.collectionPagePath}\r\n .facetGroup=${facetGroup}\r\n .selectedFacets=${this.selectedFacets}\r\n .collectionTitles=${this.collectionTitles}\r\n @facetClick=${(e: CustomEvent<FacetEventDetails>) => {\r\n this.selectedFacets = updateSelectedFacetBucket(\r\n this.selectedFacets,\r\n facetGroup.key,\r\n e.detail.bucket,\r\n true,\r\n );\r\n\r\n const event = new CustomEvent<SelectedFacets>('facetsChanged', {\r\n detail: this.selectedFacets,\r\n bubbles: true,\r\n composed: true,\r\n });\r\n this.dispatchEvent(event);\r\n }}\r\n ></facets-template>\r\n `;\r\n }\r\n\r\n static get styles() {\r\n return [\r\n srOnlyStyle,\r\n css`\r\n a:link {\r\n text-decoration: none;\r\n color: var(--ia-theme-link-color, #4b64ff);\r\n }\r\n a:link:hover {\r\n text-decoration: underline;\r\n }\r\n\r\n #container.loading {\r\n opacity: 0.5;\r\n }\r\n\r\n #container.managing {\r\n opacity: 0.3;\r\n }\r\n\r\n .histogram-loading-indicator {\r\n width: 100%;\r\n height: 5.25rem;\r\n margin-top: 1.75rem;\r\n font-size: 1.4rem;\r\n text-align: center;\r\n }\r\n\r\n .collapser {\r\n display: inline-block;\r\n cursor: pointer;\r\n width: 10px;\r\n height: 10px;\r\n }\r\n\r\n .collapser svg {\r\n transition: transform 0.2s ease-in-out;\r\n }\r\n\r\n .collapser.open svg {\r\n transform: rotate(90deg);\r\n }\r\n\r\n .facet-group {\r\n margin-bottom: 2rem;\r\n }\r\n\r\n .facet-group h3 {\r\n margin-bottom: 0.7rem;\r\n }\r\n\r\n .facet-group.mobile h3 {\r\n cursor: pointer;\r\n }\r\n\r\n .facet-group-header {\r\n display: flex;\r\n margin-bottom: 0.7rem;\r\n justify-content: space-between;\r\n border-bottom: 1px solid rgb(232, 232, 232);\r\n }\r\n\r\n .facet-group-content {\r\n transition: max-height 0.2s ease-in-out;\r\n }\r\n\r\n .facet-group.mobile .facet-group-content {\r\n max-height: 0;\r\n overflow: hidden;\r\n }\r\n\r\n .facet-group.mobile .facet-group-content.open {\r\n max-height: 2000px;\r\n }\r\n\r\n .partof-collections ul {\r\n list-style-type: none;\r\n padding: 0;\r\n font-size: 1.2rem;\r\n }\r\n\r\n h3 {\r\n font-size: 1.4rem;\r\n margin: 0;\r\n }\r\n\r\n .more-link {\r\n font-size: 1.2rem;\r\n text-decoration: none;\r\n padding: 0;\r\n margin-top: 0.25rem;\r\n background: inherit;\r\n border: 0;\r\n color: var(--ia-theme-link-color, #4b64ff);\r\n cursor: pointer;\r\n }\r\n\r\n #date-picker-label {\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n\r\n .expand-date-picker-btn {\r\n margin: 0;\r\n padding: 0;\r\n border: 0;\r\n appearance: none;\r\n background: none;\r\n cursor: pointer;\r\n }\r\n\r\n .expand-date-picker-btn svg {\r\n width: 14px;\r\n height: 14px;\r\n }\r\n\r\n .sorting-icon {\r\n height: 15px;\r\n cursor: pointer;\r\n }\r\n\r\n histogram-date-range.wide-inputs {\r\n --histogramDateRangeInputWidth: 4.8rem;\r\n }\r\n `,\r\n ];\r\n }\r\n}\r\n"]}
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { html } from 'lit';
|
|
2
|
-
export default html
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
>
|
|
8
|
-
<path
|
|
9
|
-
d="m6.7226499.58397485c.22976435-.15317623.54019902-.09108929.69337525.13867505.13615665.20423498.10222882.47220947-.06836249.63681849l-.07031256.05655676-3.2773501 2.18490006-3.2773501-2.18490006c-.22976434-.15317623-.29185128-.4636109-.13867505-.69337525.13615665-.20423497.39656688-.27598409.61412572-.18182636l.07924953.04315131 2.7226499 1.81402515z"
|
|
10
|
-
></path>
|
|
11
|
-
</svg>
|
|
12
|
-
`;
|
|
2
|
+
export default html `<svg viewBox="0 0 8 4" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<path
|
|
4
|
+
d="m6.7226499.58397485c.22976435-.15317623.54019902-.09108929.69337525.13867505.13615665.20423498.10222882.47220947-.06836249.63681849l-.07031256.05655676-3.2773501 2.18490006-3.2773501-2.18490006c-.22976434-.15317623-.29185128-.4636109-.13867505-.69337525.13615665-.20423497.39656688-.27598409.61412572-.18182636l.07924953.04315131 2.7226499 1.81402515z"
|
|
5
|
+
></path>
|
|
6
|
+
</svg>`;
|
|
13
7
|
//# sourceMappingURL=caret-closed.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caret-closed.js","sourceRoot":"","sources":["../../../src/combo-box/caret-closed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAE3B,eAAe,IAAI,CAAA
|
|
1
|
+
{"version":3,"file":"caret-closed.js","sourceRoot":"","sources":["../../../src/combo-box/caret-closed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAE3B,eAAe,IAAI,CAAA;;;;OAIZ,CAAC","sourcesContent":["import { html } from 'lit';\n\nexport default html`<svg viewBox=\"0 0 8 4\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"m6.7226499.58397485c.22976435-.15317623.54019902-.09108929.69337525.13867505.13615665.20423498.10222882.47220947-.06836249.63681849l-.07031256.05655676-3.2773501 2.18490006-3.2773501-2.18490006c-.22976434-.15317623-.29185128-.4636109-.13867505-.69337525.13615665-.20423497.39656688-.27598409.61412572-.18182636l.07924953.04315131 2.7226499 1.81402515z\"\n ></path>\n</svg>`;\n"]}
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { html } from 'lit';
|
|
2
|
-
export default html
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
>
|
|
8
|
-
<path
|
|
9
|
-
d="m6.7226499 3.51689722c.22976435.15317623.54019902.0910893.69337525-.13867505.13615665-.20423497.10222882-.47220946-.06836249-.63681849l-.07031256-.05655675-3.2773501-2.18490007-3.2773501 2.18490007c-.22976434.15317623-.29185128.4636109-.13867505.69337524.13615665.20423498.39656688.27598409.61412572.18182636l.07924953-.04315131 2.7226499-1.81402514z"
|
|
10
|
-
></path>
|
|
11
|
-
</svg>
|
|
12
|
-
`;
|
|
2
|
+
export default html `<svg viewBox="0 0 8 4" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<path
|
|
4
|
+
d="m6.7226499 3.51689722c.22976435.15317623.54019902.0910893.69337525-.13867505.13615665-.20423497.10222882-.47220946-.06836249-.63681849l-.07031256-.05655675-3.2773501-2.18490007-3.2773501 2.18490007c-.22976434.15317623-.29185128.4636109-.13867505.69337524.13615665.20423498.39656688.27598409.61412572.18182636l.07924953-.04315131 2.7226499-1.81402514z"
|
|
5
|
+
></path>
|
|
6
|
+
</svg>`;
|
|
13
7
|
//# sourceMappingURL=caret-open.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caret-open.js","sourceRoot":"","sources":["../../../src/combo-box/caret-open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAE3B,eAAe,IAAI,CAAA
|
|
1
|
+
{"version":3,"file":"caret-open.js","sourceRoot":"","sources":["../../../src/combo-box/caret-open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAE3B,eAAe,IAAI,CAAA;;;;OAIZ,CAAC","sourcesContent":["import { html } from 'lit';\n\nexport default html`<svg viewBox=\"0 0 8 4\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"m6.7226499 3.51689722c.22976435.15317623.54019902.0910893.69337525-.13867505.13615665-.20423497.10222882-.47220946-.06836249-.63681849l-.07031256-.05655675-3.2773501-2.18490007-3.2773501 2.18490007c-.22976434.15317623-.29185128.4636109-.13867505.69337524.13615665.20423498.39656688.27598409.61412572.18182636l.07924953-.04315131 2.7226499-1.81402514z\"\n ></path>\n</svg>`;\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { html } from 'lit';
|
|
2
|
+
export default html `<svg
|
|
3
|
+
viewBox="0 0 100 100"
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
>
|
|
6
|
+
<path
|
|
7
|
+
d="m50 0c27.6142375 0 50 22.3857625 50 50s-22.3857625 50-50 50-50-22.3857625-50-50 22.3857625-50 50-50zm23.8159475 26.1840525c-1.4033215-1.4033215-3.5816761-1.5592461-5.1572272-.4677738l-.5598841.4677738-18.0988362 18.0989475-18.0988362-18.0989475-.5598841-.4677738c-1.5755511-1.0914723-3.7539057-.9355477-5.1572272.4677738-1.5787367 1.5787367-1.5787367 4.1383746 0 5.7171113l18.0989475 18.0988362-18.0989475 18.0988362c-1.5787367 1.5787367-1.5787367 4.1383746 0 5.7171113 1.4033215 1.4033215 3.5816761 1.5592461 5.1572272.4677738l.5598841-.4677738 18.0988362-18.0989475 18.0988362 18.0989475.5598841.4677738c1.5755511 1.0914723 3.7539057.9355477 5.1572272-.4677738 1.5787367-1.5787367 1.5787367-4.1383746 0-5.7171113l-18.0989475-18.0988362 18.0989475-18.0988362c1.5787367-1.5787367 1.5787367-4.1383746 0-5.7171113z"
|
|
8
|
+
fill-rule="evenodd"
|
|
9
|
+
></path>
|
|
10
|
+
</svg>`;
|
|
11
|
+
//# sourceMappingURL=clear.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/combo-box/clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAE3B,eAAe,IAAI,CAAA;;;;;;;;OAQZ,CAAC","sourcesContent":["import { html } from 'lit';\n\nexport default html`<svg\n viewBox=\"0 0 100 100\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <path\n d=\"m50 0c27.6142375 0 50 22.3857625 50 50s-22.3857625 50-50 50-50-22.3857625-50-50 22.3857625-50 50-50zm23.8159475 26.1840525c-1.4033215-1.4033215-3.5816761-1.5592461-5.1572272-.4677738l-.5598841.4677738-18.0988362 18.0989475-18.0988362-18.0989475-.5598841-.4677738c-1.5755511-1.0914723-3.7539057-.9355477-5.1572272.4677738-1.5787367 1.5787367-1.5787367 4.1383746 0 5.7171113l18.0989475 18.0988362-18.0989475 18.0988362c-1.5787367 1.5787367-1.5787367 4.1383746 0 5.7171113 1.4033215 1.4033215 3.5816761 1.5592461 5.1572272.4677738l.5598841-.4677738 18.0988362-18.0989475 18.0988362 18.0989475.5598841.4677738c1.5755511 1.0914723 3.7539057.9355477 5.1572272-.4677738 1.5787367-1.5787367 1.5787367-4.1383746 0-5.7171113l-18.0989475-18.0988362 18.0989475-18.0988362c1.5787367-1.5787367 1.5787367-4.1383746 0-5.7171113z\"\n fill-rule=\"evenodd\"\n ></path>\n</svg>`;\n"]}
|
|
@@ -68,7 +68,8 @@ export declare class IAComboBox extends LitElement {
|
|
|
68
68
|
*/
|
|
69
69
|
caseSensitive: boolean;
|
|
70
70
|
/**
|
|
71
|
-
* Whether the filtered options should be listed in lexicographically-sorted order
|
|
71
|
+
* Whether the filtered options should be listed in lexicographically-sorted order,
|
|
72
|
+
* respecting the current `caseSensitive` setting.
|
|
72
73
|
* Default is `false`, displaying them in the same order as the provided options array.
|
|
73
74
|
*/
|
|
74
75
|
sort: boolean;
|
|
@@ -89,6 +90,11 @@ export declare class IAComboBox extends LitElement {
|
|
|
89
90
|
* Default is `false`, closing the options list when a selection is made.
|
|
90
91
|
*/
|
|
91
92
|
stayOpen: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Whether the combo box shows a clear button when a value is selected.
|
|
95
|
+
* Default is `false`.
|
|
96
|
+
*/
|
|
97
|
+
clearable: boolean;
|
|
92
98
|
/**
|
|
93
99
|
* Whether the combo box's option menu is currently expanded. Default is `false`.
|
|
94
100
|
*/
|
|
@@ -133,7 +139,6 @@ export declare class IAComboBox extends LitElement {
|
|
|
133
139
|
private filterText;
|
|
134
140
|
private mainWidgetRow;
|
|
135
141
|
private textInput;
|
|
136
|
-
private caretButton;
|
|
137
142
|
private optionsList;
|
|
138
143
|
static formAssociated: boolean;
|
|
139
144
|
private internals;
|
|
@@ -171,7 +176,7 @@ export declare class IAComboBox extends LitElement {
|
|
|
171
176
|
/**
|
|
172
177
|
* Template for the main label for the combo box.
|
|
173
178
|
*
|
|
174
|
-
* Uses the contents of the
|
|
179
|
+
* Uses the contents of the `label` named slot as the label text.
|
|
175
180
|
*/
|
|
176
181
|
private get labelTemplate();
|
|
177
182
|
/**
|
|
@@ -179,6 +184,11 @@ export declare class IAComboBox extends LitElement {
|
|
|
179
184
|
* options or (if freeform behavior) to enter a custom value.
|
|
180
185
|
*/
|
|
181
186
|
private get textInputTemplate();
|
|
187
|
+
/**
|
|
188
|
+
* Template for the clear button that is shown when the `clearable` property
|
|
189
|
+
* is true.
|
|
190
|
+
*/
|
|
191
|
+
private get clearButtonTemplate();
|
|
182
192
|
/**
|
|
183
193
|
* Template for the caret open/closed icons to show beside the text input.
|
|
184
194
|
* The icons are wrapped in named slots to allow consumers to override them.
|
|
@@ -247,10 +257,22 @@ export declare class IAComboBox extends LitElement {
|
|
|
247
257
|
* Handler for when the Alt + Down Arrow key combo is pressed
|
|
248
258
|
*/
|
|
249
259
|
private handleAltDownArrowPressed;
|
|
260
|
+
/**
|
|
261
|
+
* Handler for when the Tab key is pressed
|
|
262
|
+
*/
|
|
263
|
+
private handleTabPressed;
|
|
264
|
+
/**
|
|
265
|
+
* Handler for when the Space key is pressed
|
|
266
|
+
*/
|
|
267
|
+
private handleSpacePressed;
|
|
250
268
|
/**
|
|
251
269
|
* Handler for clicks on the combo box input field or caret button.
|
|
252
270
|
*/
|
|
253
271
|
private handleComboBoxClick;
|
|
272
|
+
/**
|
|
273
|
+
* Handler for when the clear button is clicked.
|
|
274
|
+
*/
|
|
275
|
+
private handleClearButtonClick;
|
|
254
276
|
/**
|
|
255
277
|
* Handler for when any part of the combo box receives focus.
|
|
256
278
|
*/
|
|
@@ -314,12 +336,27 @@ export declare class IAComboBox extends LitElement {
|
|
|
314
336
|
* Changes the value of the text input box, and updates the filter accordingly.
|
|
315
337
|
*/
|
|
316
338
|
private setTextValue;
|
|
339
|
+
/**
|
|
340
|
+
* Sets the current filter text based on the provided string. The resulting filter
|
|
341
|
+
* text might not exactly match the provided value, depending on the current case
|
|
342
|
+
* sensitivity.
|
|
343
|
+
*/
|
|
344
|
+
private setFilterText;
|
|
317
345
|
openOptionsMenu(): void;
|
|
318
346
|
closeOptionsMenu(): void;
|
|
319
347
|
toggleOptionsMenu(): void;
|
|
320
348
|
private updateFormValidity;
|
|
321
349
|
private emitChangeEvent;
|
|
322
350
|
private emitToggleEvent;
|
|
351
|
+
/**
|
|
352
|
+
* True iff no selection has been made and no text has been entered.
|
|
353
|
+
*/
|
|
354
|
+
private get isEmpty();
|
|
355
|
+
/**
|
|
356
|
+
* We only show the clear button when the `clearable` property is set
|
|
357
|
+
* and the combo box is neither empty nor disabled.
|
|
358
|
+
*/
|
|
359
|
+
private get shouldShowClearButton();
|
|
323
360
|
/**
|
|
324
361
|
* Sets the size and position of the options menu to match the size and position of
|
|
325
362
|
* the combo box widget. Prefers to position below the main widget, but will flip
|
|
@@ -331,12 +368,6 @@ export declare class IAComboBox extends LitElement {
|
|
|
331
368
|
* current case sensitivity.
|
|
332
369
|
*/
|
|
333
370
|
private get caseTransform();
|
|
334
|
-
/**
|
|
335
|
-
* Sets the current filter text based on the provided string. The resulting filter
|
|
336
|
-
* text might not exactly match the provided value, depending on the current case
|
|
337
|
-
* sensitivity.
|
|
338
|
-
*/
|
|
339
|
-
private setFilterText;
|
|
340
371
|
/**
|
|
341
372
|
* Returns the combo box option having the given ID, or null if none exists.
|
|
342
373
|
*/
|