@internetarchive/collection-browser 2.18.2 → 2.18.3-alpha-webdev7768.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/.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 +4 -4
- package/.prettierignore +1 -1
- package/LICENSE +661 -661
- package/README.md +83 -83
- package/dist/src/collection-browser.js +682 -682
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets.js +291 -274
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/expanded-date-picker.d.ts +6 -4
- package/dist/src/expanded-date-picker.js +64 -55
- package/dist/src/expanded-date-picker.js.map +1 -1
- package/dist/src/models.js.map +1 -1
- package/dist/src/sort-filter-bar/sort-filter-bar.js +382 -382
- package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
- package/dist/src/tiles/grid/item-tile.js +139 -139
- package/dist/src/tiles/grid/item-tile.js.map +1 -1
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +118 -118
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js.map +1 -1
- package/dist/src/tiles/list/tile-list.js +289 -289
- package/dist/src/tiles/list/tile-list.js.map +1 -1
- package/dist/src/tiles/tile-dispatcher.js +200 -200
- package/dist/src/tiles/tile-dispatcher.js.map +1 -1
- package/dist/test/sort-filter-bar/sort-filter-bar.test.js +37 -37
- package/dist/test/sort-filter-bar/sort-filter-bar.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 +117 -117
- package/renovate.json +6 -6
- package/src/collection-browser.ts +2712 -2712
- package/src/collection-facets.ts +990 -966
- package/src/expanded-date-picker.ts +191 -175
- package/src/models.ts +822 -822
- package/src/sort-filter-bar/sort-filter-bar.ts +1189 -1189
- package/src/tiles/grid/item-tile.ts +339 -339
- package/src/tiles/grid/styles/tile-grid-shared-styles.ts +129 -129
- package/src/tiles/list/tile-list.ts +688 -688
- package/src/tiles/tile-dispatcher.ts +486 -486
- package/test/sort-filter-bar/sort-filter-bar.test.ts +692 -692
- package/tsconfig.json +20 -20
- package/web-dev-server.config.mjs +30 -30
- package/web-test-runner.config.mjs +41 -41
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tile-dispatcher.js","sourceRoot":"","sources":["../../../src/tiles/tile-dispatcher.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, nothing, PropertyValues } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { msg } from '@lit/localize';\nimport type {\n SharedResizeObserverInterface,\n SharedResizeObserverResizeHandlerInterface,\n} from '@internetarchive/shared-resize-observer';\nimport type { TileDisplayMode } from '../models';\nimport type { CollectionTitles } from '../data-source/models';\nimport './grid/collection-tile';\nimport './grid/item-tile';\nimport './grid/account-tile';\nimport './grid/search-tile';\nimport './hover/tile-hover-pane';\nimport './list/tile-list';\nimport './list/tile-list-compact';\nimport './list/tile-list-compact-header';\nimport type { TileHoverPane } from './hover/tile-hover-pane';\nimport { BaseTileComponent } from './base-tile-component';\nimport { SimpleLayoutType } from './models';\nimport {\n HoverPaneController,\n HoverPaneControllerInterface,\n HoverPaneProperties,\n HoverPaneProviderInterface,\n} from './hover/hover-pane-controller';\n\n@customElement('tile-dispatcher')\nexport class TileDispatcher\n extends BaseTileComponent\n implements\n SharedResizeObserverResizeHandlerInterface,\n HoverPaneProviderInterface\n{\n /*\n * Reactive properties inherited from BaseTileComponent:\n * - model?: TileModel;\n * - currentWidth?: number;\n * - currentHeight?: number;\n * - baseNavigationUrl?: string;\n * - baseImageUrl?: string;\n * - collectionPagePath?: string;\n * - sortParam: SortParam | null = null;\n * - defaultSortParam: SortParam | null = null;\n * - creatorFilter?: string;\n * - mobileBreakpoint?: number;\n * - loggedIn = false;\n * - suppressTileBlurring = false;\n */\n\n @property({ type: String }) tileDisplayMode?: TileDisplayMode;\n\n @property({ type: Boolean }) isManageView = false;\n\n @property({ type: Object }) resizeObserver?: SharedResizeObserverInterface;\n\n @property({ type: Object })\n collectionTitles?: CollectionTitles;\n\n @property({ type: Boolean }) showTvClips = false;\n\n /** What type of simple layout to use in grid mode, if any */\n @property({ type: String }) simpleLayoutType: SimpleLayoutType = 'none';\n\n /** Whether this tile should include a hover pane at all (for applicable tile modes) */\n @property({ type: Boolean }) enableHoverPane = false;\n\n @property({ type: String }) manageCheckTitle = msg(\n 'Remove this item from the list',\n );\n\n private hoverPaneController?: HoverPaneControllerInterface;\n\n @query('#container')\n private container!: HTMLDivElement;\n\n @query('tile-hover-pane')\n private hoverPane?: TileHoverPane;\n\n /** Maps each display mode to whether hover panes should appear in that mode */\n private static readonly HOVER_PANE_DISPLAY_MODES: Record<\n TileDisplayMode,\n boolean\n > = {\n grid: true,\n 'list-compact': true,\n 'list-detail': false,\n 'list-header': false,\n };\n\n render() {\n const isGridMode = this.tileDisplayMode === 'grid';\n const hoverPaneTemplate =\n this.hoverPaneController?.getTemplate() ?? nothing;\n return html`\n <div id=\"container\" class=${isGridMode ? 'hoverable' : nothing}>\n ${this.tileDisplayMode === 'list-header'\n ? this.headerTemplate\n : this.tileTemplate}\n ${this.manageCheckTemplate} ${hoverPaneTemplate}\n </div>\n `;\n }\n\n protected firstUpdated(): void {\n if (this.shouldPrepareHoverPane) {\n this.hoverPaneController = new HoverPaneController(this, {\n mobileBreakpoint: this.mobileBreakpoint,\n enableLongPress: false,\n });\n }\n }\n\n private get headerTemplate() {\n const { currentWidth, sortParam, defaultSortParam, mobileBreakpoint } =\n this;\n return html`\n <tile-list-compact-header\n class=\"header\"\n .currentWidth=${currentWidth}\n .sortParam=${sortParam ?? defaultSortParam}\n .mobileBreakpoint=${mobileBreakpoint}\n >\n </tile-list-compact-header>\n `;\n }\n\n private get tileTemplate() {\n return html`\n ${this.tileDisplayMode === 'list-detail'\n ? this.tile\n : this.linkTileTemplate}\n `;\n }\n\n private get linkTileTemplate() {\n return html`\n <a\n href=${this.linkTileHref}\n aria-label=${this.model?.title ?? 'Untitled item'}\n title=${this.shouldPrepareHoverPane\n ? nothing // Don't show title tooltips when we have the tile info popups\n : ifDefined(this.model?.title)}\n @click=${this.handleLinkClicked}\n @contextmenu=${this.handleLinkContextMenu}\n >\n ${this.tile}\n </a>\n `;\n }\n\n private get linkTileHref(): string | typeof nothing {\n if (!this.model?.identifier || this.baseNavigationUrl == null)\n return nothing;\n\n // Use the server-specified href if available.\n // Otherwise, construct a details page URL from the item identifier.\n if (this.model.href) {\n return `${this.baseNavigationUrl}${this.model.href}`;\n }\n\n return this.displayValueProvider.itemPageUrl(\n this.model.identifier,\n this.model.mediatype === 'collection',\n );\n }\n\n private get manageCheckTemplate() {\n if (!this.isManageView || this.tileDisplayMode !== 'grid') return nothing;\n\n return html`\n <div class=\"manage-check\">\n <input\n type=\"checkbox\"\n title=${this.manageCheckTitle}\n .checked=${this.model?.checked}\n @change=${this.handleLinkClicked}\n />\n </div>\n `;\n }\n\n /**\n * Whether hover pane behavior should be prepared for this tile\n * (e.g., whether mouse listeners should be attached, etc.)\n */\n private get shouldPrepareHoverPane(): boolean {\n return (\n this.enableHoverPane &&\n !!this.tileDisplayMode &&\n TileDispatcher.HOVER_PANE_DISPLAY_MODES[this.tileDisplayMode] &&\n this.model?.mediatype !== 'search' && // don't show hover panes on search tiles\n !this.model?.captureDates // don't show hover panes on web archive tiles\n );\n }\n\n private get isHoverEnabled(): boolean {\n return window.matchMedia('(hover: hover)').matches;\n }\n\n /** @inheritdoc */\n getHoverPane(): TileHoverPane | undefined {\n return this.hoverPane;\n }\n\n /** @inheritdoc */\n getHoverPaneProps(): HoverPaneProperties {\n return this;\n }\n\n handleResize(entry: ResizeObserverEntry): void {\n this.currentWidth = entry.contentRect.width;\n this.currentHeight = entry.contentRect.height;\n }\n\n disconnectedCallback(): void {\n this.stopResizeObservation(this.resizeObserver);\n }\n\n private stopResizeObservation(observer?: SharedResizeObserverInterface) {\n observer?.removeObserver({\n handler: this,\n target: this.container,\n });\n }\n\n private startResizeObservation() {\n this.stopResizeObservation(this.resizeObserver);\n this.resizeObserver?.addObserver({\n handler: this,\n target: this.container,\n });\n }\n\n updated(props: PropertyValues) {\n if (props.has('resizeObserver')) {\n const previousObserver = props.get(\n 'resizeObserver',\n ) as SharedResizeObserverInterface;\n this.stopResizeObservation(previousObserver);\n this.startResizeObservation();\n }\n }\n\n /**\n * Handler for when the tile link is left-clicked. Emits the `resultSelected` event.\n * In manage view, it also checks/unchecks the tile.\n */\n private handleLinkClicked(e: Event): void {\n if (this.isManageView) {\n e.preventDefault();\n if (this.model) this.model.checked = !this.model.checked;\n }\n\n this.dispatchEvent(\n new CustomEvent('resultSelected', { detail: this.model }),\n );\n }\n\n /**\n * Handler for when the tile link is right-clicked.\n * In manage view, it opens the item in a new tab. Otherwise, does nothing.\n */\n private handleLinkContextMenu(e: Event): void {\n if (this.isManageView && this.linkTileHref !== nothing) {\n e.preventDefault();\n window.open(this.linkTileHref, '_blank');\n }\n }\n\n private tileInfoButtonPressed(\n e: CustomEvent<{ x: number; y: number }>,\n ): void {\n this.hoverPaneController?.toggleHoverPane({\n coords: e.detail,\n enableTouchBackdrop: true,\n });\n }\n\n private get tile() {\n const {\n model,\n collectionPagePath,\n baseNavigationUrl,\n currentWidth,\n currentHeight,\n sortParam,\n creatorFilter,\n mobileBreakpoint,\n defaultSortParam,\n } = this;\n\n if (!model) return nothing;\n\n switch (this.tileDisplayMode) {\n case 'grid':\n switch (model.mediatype) {\n case 'collection':\n return html`<collection-tile\n .model=${model}\n .collectionPagePath=${collectionPagePath}\n .baseImageUrl=${this.baseImageUrl}\n .currentWidth=${currentWidth}\n .currentHeight=${currentHeight}\n .creatorFilter=${creatorFilter}\n .suppressBlurring=${this.suppressBlurring}\n .isManageView=${this.isManageView}\n ?showInfoButton=${!this.isHoverEnabled}\n @infoButtonPressed=${this.tileInfoButtonPressed}\n >\n </collection-tile>`;\n case 'account':\n return html`<account-tile\n .model=${model}\n .collectionPagePath=${collectionPagePath}\n .baseImageUrl=${this.baseImageUrl}\n .currentWidth=${currentWidth}\n .currentHeight=${currentHeight}\n .creatorFilter=${creatorFilter}\n .suppressBlurring=${this.suppressBlurring}\n .isManageView=${this.isManageView}\n ?showInfoButton=${!this.isHoverEnabled}\n @infoButtonPressed=${this.tileInfoButtonPressed}\n >\n </account-tile>`;\n case 'search':\n return html`<search-tile\n .model=${model}\n .collectionPagePath=${collectionPagePath}\n .baseImageUrl=${this.baseImageUrl}\n .currentWidth=${currentWidth}\n .currentHeight=${currentHeight}\n .creatorFilter=${creatorFilter}\n .suppressBlurring=${this.suppressBlurring}\n .isManageView=${this.isManageView}\n ?showInfoButton=${false}\n @infoButtonPressed=${this.tileInfoButtonPressed}\n >\n </search-tile>`;\n default:\n return html`<item-tile\n .model=${model}\n .collectionPagePath=${collectionPagePath}\n .currentWidth=${this.currentWidth}\n .currentHeight=${this.currentHeight}\n .baseImageUrl=${this.baseImageUrl}\n .sortParam=${sortParam}\n .defaultSortParam=${defaultSortParam}\n .creatorFilter=${creatorFilter}\n .loggedIn=${this.loggedIn}\n .suppressBlurring=${this.suppressBlurring}\n .isManageView=${this.isManageView}\n .simpleLayoutType=${this.simpleLayoutType}\n ?showTvClips=${this.showTvClips}\n ?showInfoButton=${!this.isHoverEnabled}\n @infoButtonPressed=${this.tileInfoButtonPressed}\n >\n </item-tile>`;\n }\n case 'list-compact':\n return html`<tile-list-compact\n .model=${model}\n .collectionPagePath=${collectionPagePath}\n .currentWidth=${currentWidth}\n .currentHeight=${currentHeight}\n .baseNavigationUrl=${baseNavigationUrl}\n .sortParam=${sortParam}\n .defaultSortParam=${defaultSortParam}\n .creatorFilter=${creatorFilter}\n .mobileBreakpoint=${mobileBreakpoint}\n .baseImageUrl=${this.baseImageUrl}\n .loggedIn=${this.loggedIn}\n .suppressBlurring=${this.suppressBlurring}\n >\n </tile-list-compact>`;\n case 'list-detail':\n return html`<tile-list\n .model=${model}\n .collectionPagePath=${collectionPagePath}\n .collectionTitles=${this.collectionTitles}\n .currentWidth=${currentWidth}\n .currentHeight=${currentHeight}\n .baseNavigationUrl=${baseNavigationUrl}\n .sortParam=${sortParam}\n .defaultSortParam=${defaultSortParam}\n .creatorFilter=${creatorFilter}\n .mobileBreakpoint=${mobileBreakpoint}\n .baseImageUrl=${this.baseImageUrl}\n .loggedIn=${this.loggedIn}\n .suppressBlurring=${this.suppressBlurring}\n >\n </tile-list>`;\n default:\n return nothing;\n }\n }\n\n static get styles() {\n return css`\n :host {\n display: block;\n height: 100%;\n }\n\n collection-tile {\n --tileBorderColor: #555555;\n --tileBackgroundColor: #666666;\n --imageBlockBackgroundColor: #666666;\n }\n\n account-tile {\n --tileBorderColor: #dddddd;\n --imageBlockBackgroundColor: #fcf5e6;\n }\n\n item-tile {\n --tileBorderColor: #dddddd;\n --imageBlockBackgroundColor: #f1f1f4;\n }\n\n search-tile {\n --tileBorderColor: #555555;\n --tileBackgroundColor: #666666;\n --imageBlockBackgroundColor: #666666;\n --iconFillColor: #2c2c2c;\n }\n\n #container {\n position: relative;\n height: 100%;\n border-radius: 4px;\n }\n\n #container.hoverable:hover {\n box-shadow: 0 0 6px 2px rgba(8, 8, 32, 0.8);\n transition: box-shadow 0.1s ease;\n }\n\n a {\n display: block;\n height: 100%;\n color: unset;\n text-decoration: none;\n transition: transform 0.05s ease;\n }\n\n a :first-child {\n display: block;\n height: 100%;\n }\n\n .manage-check {\n position: absolute;\n right: 0;\n top: 0;\n border: 5px solid #2c2c2c;\n border-radius: 3px;\n background-color: #2c2c2c;\n z-index: 1;\n }\n\n .manage-check > input[type='checkbox'] {\n display: block;\n margin: 0;\n }\n\n #touch-backdrop {\n position: fixed;\n width: 100vw;\n height: 100vh;\n top: 0;\n left: 0;\n z-index: 2;\n background: transparent;\n }\n\n tile-hover-pane {\n position: absolute;\n top: 0;\n left: -9999px;\n z-index: 2;\n }\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tile-dispatcher.js","sourceRoot":"","sources":["../../../src/tiles/tile-dispatcher.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, nothing, PropertyValues } from 'lit';\r\nimport { customElement, property, query } from 'lit/decorators.js';\r\nimport { ifDefined } from 'lit/directives/if-defined.js';\r\nimport { msg } from '@lit/localize';\r\nimport type {\r\n SharedResizeObserverInterface,\r\n SharedResizeObserverResizeHandlerInterface,\r\n} from '@internetarchive/shared-resize-observer';\r\nimport type { TileDisplayMode } from '../models';\r\nimport type { CollectionTitles } from '../data-source/models';\r\nimport './grid/collection-tile';\r\nimport './grid/item-tile';\r\nimport './grid/account-tile';\r\nimport './grid/search-tile';\r\nimport './hover/tile-hover-pane';\r\nimport './list/tile-list';\r\nimport './list/tile-list-compact';\r\nimport './list/tile-list-compact-header';\r\nimport type { TileHoverPane } from './hover/tile-hover-pane';\r\nimport { BaseTileComponent } from './base-tile-component';\r\nimport { SimpleLayoutType } from './models';\r\nimport {\r\n HoverPaneController,\r\n HoverPaneControllerInterface,\r\n HoverPaneProperties,\r\n HoverPaneProviderInterface,\r\n} from './hover/hover-pane-controller';\r\n\r\n@customElement('tile-dispatcher')\r\nexport class TileDispatcher\r\n extends BaseTileComponent\r\n implements\r\n SharedResizeObserverResizeHandlerInterface,\r\n HoverPaneProviderInterface\r\n{\r\n /*\r\n * Reactive properties inherited from BaseTileComponent:\r\n * - model?: TileModel;\r\n * - currentWidth?: number;\r\n * - currentHeight?: number;\r\n * - baseNavigationUrl?: string;\r\n * - baseImageUrl?: string;\r\n * - collectionPagePath?: string;\r\n * - sortParam: SortParam | null = null;\r\n * - defaultSortParam: SortParam | null = null;\r\n * - creatorFilter?: string;\r\n * - mobileBreakpoint?: number;\r\n * - loggedIn = false;\r\n * - suppressTileBlurring = false;\r\n */\r\n\r\n @property({ type: String }) tileDisplayMode?: TileDisplayMode;\r\n\r\n @property({ type: Boolean }) isManageView = false;\r\n\r\n @property({ type: Object }) resizeObserver?: SharedResizeObserverInterface;\r\n\r\n @property({ type: Object })\r\n collectionTitles?: CollectionTitles;\r\n\r\n @property({ type: Boolean }) showTvClips = false;\r\n\r\n /** What type of simple layout to use in grid mode, if any */\r\n @property({ type: String }) simpleLayoutType: SimpleLayoutType = 'none';\r\n\r\n /** Whether this tile should include a hover pane at all (for applicable tile modes) */\r\n @property({ type: Boolean }) enableHoverPane = false;\r\n\r\n @property({ type: String }) manageCheckTitle = msg(\r\n 'Remove this item from the list',\r\n );\r\n\r\n private hoverPaneController?: HoverPaneControllerInterface;\r\n\r\n @query('#container')\r\n private container!: HTMLDivElement;\r\n\r\n @query('tile-hover-pane')\r\n private hoverPane?: TileHoverPane;\r\n\r\n /** Maps each display mode to whether hover panes should appear in that mode */\r\n private static readonly HOVER_PANE_DISPLAY_MODES: Record<\r\n TileDisplayMode,\r\n boolean\r\n > = {\r\n grid: true,\r\n 'list-compact': true,\r\n 'list-detail': false,\r\n 'list-header': false,\r\n };\r\n\r\n render() {\r\n const isGridMode = this.tileDisplayMode === 'grid';\r\n const hoverPaneTemplate =\r\n this.hoverPaneController?.getTemplate() ?? nothing;\r\n return html`\r\n <div id=\"container\" class=${isGridMode ? 'hoverable' : nothing}>\r\n ${this.tileDisplayMode === 'list-header'\r\n ? this.headerTemplate\r\n : this.tileTemplate}\r\n ${this.manageCheckTemplate} ${hoverPaneTemplate}\r\n </div>\r\n `;\r\n }\r\n\r\n protected firstUpdated(): void {\r\n if (this.shouldPrepareHoverPane) {\r\n this.hoverPaneController = new HoverPaneController(this, {\r\n mobileBreakpoint: this.mobileBreakpoint,\r\n enableLongPress: false,\r\n });\r\n }\r\n }\r\n\r\n private get headerTemplate() {\r\n const { currentWidth, sortParam, defaultSortParam, mobileBreakpoint } =\r\n this;\r\n return html`\r\n <tile-list-compact-header\r\n class=\"header\"\r\n .currentWidth=${currentWidth}\r\n .sortParam=${sortParam ?? defaultSortParam}\r\n .mobileBreakpoint=${mobileBreakpoint}\r\n >\r\n </tile-list-compact-header>\r\n `;\r\n }\r\n\r\n private get tileTemplate() {\r\n return html`\r\n ${this.tileDisplayMode === 'list-detail'\r\n ? this.tile\r\n : this.linkTileTemplate}\r\n `;\r\n }\r\n\r\n private get linkTileTemplate() {\r\n return html`\r\n <a\r\n href=${this.linkTileHref}\r\n aria-label=${this.model?.title ?? 'Untitled item'}\r\n title=${this.shouldPrepareHoverPane\r\n ? nothing // Don't show title tooltips when we have the tile info popups\r\n : ifDefined(this.model?.title)}\r\n @click=${this.handleLinkClicked}\r\n @contextmenu=${this.handleLinkContextMenu}\r\n >\r\n ${this.tile}\r\n </a>\r\n `;\r\n }\r\n\r\n private get linkTileHref(): string | typeof nothing {\r\n if (!this.model?.identifier || this.baseNavigationUrl == null)\r\n return nothing;\r\n\r\n // Use the server-specified href if available.\r\n // Otherwise, construct a details page URL from the item identifier.\r\n if (this.model.href) {\r\n return `${this.baseNavigationUrl}${this.model.href}`;\r\n }\r\n\r\n return this.displayValueProvider.itemPageUrl(\r\n this.model.identifier,\r\n this.model.mediatype === 'collection',\r\n );\r\n }\r\n\r\n private get manageCheckTemplate() {\r\n if (!this.isManageView || this.tileDisplayMode !== 'grid') return nothing;\r\n\r\n return html`\r\n <div class=\"manage-check\">\r\n <input\r\n type=\"checkbox\"\r\n title=${this.manageCheckTitle}\r\n .checked=${this.model?.checked}\r\n @change=${this.handleLinkClicked}\r\n />\r\n </div>\r\n `;\r\n }\r\n\r\n /**\r\n * Whether hover pane behavior should be prepared for this tile\r\n * (e.g., whether mouse listeners should be attached, etc.)\r\n */\r\n private get shouldPrepareHoverPane(): boolean {\r\n return (\r\n this.enableHoverPane &&\r\n !!this.tileDisplayMode &&\r\n TileDispatcher.HOVER_PANE_DISPLAY_MODES[this.tileDisplayMode] &&\r\n this.model?.mediatype !== 'search' && // don't show hover panes on search tiles\r\n !this.model?.captureDates // don't show hover panes on web archive tiles\r\n );\r\n }\r\n\r\n private get isHoverEnabled(): boolean {\r\n return window.matchMedia('(hover: hover)').matches;\r\n }\r\n\r\n /** @inheritdoc */\r\n getHoverPane(): TileHoverPane | undefined {\r\n return this.hoverPane;\r\n }\r\n\r\n /** @inheritdoc */\r\n getHoverPaneProps(): HoverPaneProperties {\r\n return this;\r\n }\r\n\r\n handleResize(entry: ResizeObserverEntry): void {\r\n this.currentWidth = entry.contentRect.width;\r\n this.currentHeight = entry.contentRect.height;\r\n }\r\n\r\n disconnectedCallback(): void {\r\n this.stopResizeObservation(this.resizeObserver);\r\n }\r\n\r\n private stopResizeObservation(observer?: SharedResizeObserverInterface) {\r\n observer?.removeObserver({\r\n handler: this,\r\n target: this.container,\r\n });\r\n }\r\n\r\n private startResizeObservation() {\r\n this.stopResizeObservation(this.resizeObserver);\r\n this.resizeObserver?.addObserver({\r\n handler: this,\r\n target: this.container,\r\n });\r\n }\r\n\r\n updated(props: PropertyValues) {\r\n if (props.has('resizeObserver')) {\r\n const previousObserver = props.get(\r\n 'resizeObserver',\r\n ) as SharedResizeObserverInterface;\r\n this.stopResizeObservation(previousObserver);\r\n this.startResizeObservation();\r\n }\r\n }\r\n\r\n /**\r\n * Handler for when the tile link is left-clicked. Emits the `resultSelected` event.\r\n * In manage view, it also checks/unchecks the tile.\r\n */\r\n private handleLinkClicked(e: Event): void {\r\n if (this.isManageView) {\r\n e.preventDefault();\r\n if (this.model) this.model.checked = !this.model.checked;\r\n }\r\n\r\n this.dispatchEvent(\r\n new CustomEvent('resultSelected', { detail: this.model }),\r\n );\r\n }\r\n\r\n /**\r\n * Handler for when the tile link is right-clicked.\r\n * In manage view, it opens the item in a new tab. Otherwise, does nothing.\r\n */\r\n private handleLinkContextMenu(e: Event): void {\r\n if (this.isManageView && this.linkTileHref !== nothing) {\r\n e.preventDefault();\r\n window.open(this.linkTileHref, '_blank');\r\n }\r\n }\r\n\r\n private tileInfoButtonPressed(\r\n e: CustomEvent<{ x: number; y: number }>,\r\n ): void {\r\n this.hoverPaneController?.toggleHoverPane({\r\n coords: e.detail,\r\n enableTouchBackdrop: true,\r\n });\r\n }\r\n\r\n private get tile() {\r\n const {\r\n model,\r\n collectionPagePath,\r\n baseNavigationUrl,\r\n currentWidth,\r\n currentHeight,\r\n sortParam,\r\n creatorFilter,\r\n mobileBreakpoint,\r\n defaultSortParam,\r\n } = this;\r\n\r\n if (!model) return nothing;\r\n\r\n switch (this.tileDisplayMode) {\r\n case 'grid':\r\n switch (model.mediatype) {\r\n case 'collection':\r\n return html`<collection-tile\r\n .model=${model}\r\n .collectionPagePath=${collectionPagePath}\r\n .baseImageUrl=${this.baseImageUrl}\r\n .currentWidth=${currentWidth}\r\n .currentHeight=${currentHeight}\r\n .creatorFilter=${creatorFilter}\r\n .suppressBlurring=${this.suppressBlurring}\r\n .isManageView=${this.isManageView}\r\n ?showInfoButton=${!this.isHoverEnabled}\r\n @infoButtonPressed=${this.tileInfoButtonPressed}\r\n >\r\n </collection-tile>`;\r\n case 'account':\r\n return html`<account-tile\r\n .model=${model}\r\n .collectionPagePath=${collectionPagePath}\r\n .baseImageUrl=${this.baseImageUrl}\r\n .currentWidth=${currentWidth}\r\n .currentHeight=${currentHeight}\r\n .creatorFilter=${creatorFilter}\r\n .suppressBlurring=${this.suppressBlurring}\r\n .isManageView=${this.isManageView}\r\n ?showInfoButton=${!this.isHoverEnabled}\r\n @infoButtonPressed=${this.tileInfoButtonPressed}\r\n >\r\n </account-tile>`;\r\n case 'search':\r\n return html`<search-tile\r\n .model=${model}\r\n .collectionPagePath=${collectionPagePath}\r\n .baseImageUrl=${this.baseImageUrl}\r\n .currentWidth=${currentWidth}\r\n .currentHeight=${currentHeight}\r\n .creatorFilter=${creatorFilter}\r\n .suppressBlurring=${this.suppressBlurring}\r\n .isManageView=${this.isManageView}\r\n ?showInfoButton=${false}\r\n @infoButtonPressed=${this.tileInfoButtonPressed}\r\n >\r\n </search-tile>`;\r\n default:\r\n return html`<item-tile\r\n .model=${model}\r\n .collectionPagePath=${collectionPagePath}\r\n .currentWidth=${this.currentWidth}\r\n .currentHeight=${this.currentHeight}\r\n .baseImageUrl=${this.baseImageUrl}\r\n .sortParam=${sortParam}\r\n .defaultSortParam=${defaultSortParam}\r\n .creatorFilter=${creatorFilter}\r\n .loggedIn=${this.loggedIn}\r\n .suppressBlurring=${this.suppressBlurring}\r\n .isManageView=${this.isManageView}\r\n .simpleLayoutType=${this.simpleLayoutType}\r\n ?showTvClips=${this.showTvClips}\r\n ?showInfoButton=${!this.isHoverEnabled}\r\n @infoButtonPressed=${this.tileInfoButtonPressed}\r\n >\r\n </item-tile>`;\r\n }\r\n case 'list-compact':\r\n return html`<tile-list-compact\r\n .model=${model}\r\n .collectionPagePath=${collectionPagePath}\r\n .currentWidth=${currentWidth}\r\n .currentHeight=${currentHeight}\r\n .baseNavigationUrl=${baseNavigationUrl}\r\n .sortParam=${sortParam}\r\n .defaultSortParam=${defaultSortParam}\r\n .creatorFilter=${creatorFilter}\r\n .mobileBreakpoint=${mobileBreakpoint}\r\n .baseImageUrl=${this.baseImageUrl}\r\n .loggedIn=${this.loggedIn}\r\n .suppressBlurring=${this.suppressBlurring}\r\n >\r\n </tile-list-compact>`;\r\n case 'list-detail':\r\n return html`<tile-list\r\n .model=${model}\r\n .collectionPagePath=${collectionPagePath}\r\n .collectionTitles=${this.collectionTitles}\r\n .currentWidth=${currentWidth}\r\n .currentHeight=${currentHeight}\r\n .baseNavigationUrl=${baseNavigationUrl}\r\n .sortParam=${sortParam}\r\n .defaultSortParam=${defaultSortParam}\r\n .creatorFilter=${creatorFilter}\r\n .mobileBreakpoint=${mobileBreakpoint}\r\n .baseImageUrl=${this.baseImageUrl}\r\n .loggedIn=${this.loggedIn}\r\n .suppressBlurring=${this.suppressBlurring}\r\n >\r\n </tile-list>`;\r\n default:\r\n return nothing;\r\n }\r\n }\r\n\r\n static get styles() {\r\n return css`\r\n :host {\r\n display: block;\r\n height: 100%;\r\n }\r\n\r\n collection-tile {\r\n --tileBorderColor: #555555;\r\n --tileBackgroundColor: #666666;\r\n --imageBlockBackgroundColor: #666666;\r\n }\r\n\r\n account-tile {\r\n --tileBorderColor: #dddddd;\r\n --imageBlockBackgroundColor: #fcf5e6;\r\n }\r\n\r\n item-tile {\r\n --tileBorderColor: #dddddd;\r\n --imageBlockBackgroundColor: #f1f1f4;\r\n }\r\n\r\n search-tile {\r\n --tileBorderColor: #555555;\r\n --tileBackgroundColor: #666666;\r\n --imageBlockBackgroundColor: #666666;\r\n --iconFillColor: #2c2c2c;\r\n }\r\n\r\n #container {\r\n position: relative;\r\n height: 100%;\r\n border-radius: 4px;\r\n }\r\n\r\n #container.hoverable:hover {\r\n box-shadow: var(--tileHoverBoxShadow, 0 0 6px 2px rgba(8, 8, 32, 0.8));\r\n transition: box-shadow 0.1s ease;\r\n }\r\n\r\n a {\r\n display: block;\r\n height: 100%;\r\n color: unset;\r\n text-decoration: none;\r\n transition: transform 0.05s ease;\r\n }\r\n\r\n a :first-child {\r\n display: block;\r\n height: 100%;\r\n }\r\n\r\n .manage-check {\r\n position: absolute;\r\n right: 0;\r\n top: 0;\r\n border: 5px solid #2c2c2c;\r\n border-radius: 3px;\r\n background-color: #2c2c2c;\r\n z-index: 1;\r\n }\r\n\r\n .manage-check > input[type='checkbox'] {\r\n display: block;\r\n margin: 0;\r\n }\r\n\r\n #touch-backdrop {\r\n position: fixed;\r\n width: 100vw;\r\n height: 100vh;\r\n top: 0;\r\n left: 0;\r\n z-index: 2;\r\n background: transparent;\r\n }\r\n\r\n tile-hover-pane {\r\n position: absolute;\r\n top: 0;\r\n left: -9999px;\r\n z-index: 2;\r\n }\r\n `;\r\n }\r\n}\r\n"]}
|
|
@@ -9,8 +9,8 @@ describe('Sort selector default buttons', async () => {
|
|
|
9
9
|
let desktopSortSelector;
|
|
10
10
|
beforeEach(async () => {
|
|
11
11
|
var _a;
|
|
12
|
-
el = await fixture(html `
|
|
13
|
-
<sort-filter-bar></sort-filter-bar>
|
|
12
|
+
el = await fixture(html `
|
|
13
|
+
<sort-filter-bar></sort-filter-bar>
|
|
14
14
|
`);
|
|
15
15
|
sortSelectorContainer = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#sort-selector-container');
|
|
16
16
|
desktopSortSelector = sortSelectorContainer === null || sortSelectorContainer === void 0 ? void 0 : sortSelectorContainer.querySelector('#desktop-sort-selector');
|
|
@@ -211,8 +211,8 @@ describe('Sort selector default buttons', async () => {
|
|
|
211
211
|
describe('Sort direction button behavior', () => {
|
|
212
212
|
it('should disable sort direction button when sorting by relevance', async () => {
|
|
213
213
|
var _a;
|
|
214
|
-
const el = await fixture(html `
|
|
215
|
-
<sort-filter-bar> </sort-filter-bar>
|
|
214
|
+
const el = await fixture(html `
|
|
215
|
+
<sort-filter-bar> </sort-filter-bar>
|
|
216
216
|
`);
|
|
217
217
|
el.selectedSort = 'relevance';
|
|
218
218
|
await el.updateComplete;
|
|
@@ -222,8 +222,8 @@ describe('Sort direction button behavior', () => {
|
|
|
222
222
|
});
|
|
223
223
|
it('should enable sort direction button when not sorting by relevance', async () => {
|
|
224
224
|
var _a;
|
|
225
|
-
const el = await fixture(html `
|
|
226
|
-
<sort-filter-bar> </sort-filter-bar>
|
|
225
|
+
const el = await fixture(html `
|
|
226
|
+
<sort-filter-bar> </sort-filter-bar>
|
|
227
227
|
`);
|
|
228
228
|
el.selectedSort = 'title';
|
|
229
229
|
await el.updateComplete;
|
|
@@ -233,8 +233,8 @@ describe('Sort direction button behavior', () => {
|
|
|
233
233
|
});
|
|
234
234
|
it('should toggle sort direction when clicked', async () => {
|
|
235
235
|
var _a;
|
|
236
|
-
const el = await fixture(html `
|
|
237
|
-
<sort-filter-bar> </sort-filter-bar>
|
|
236
|
+
const el = await fixture(html `
|
|
237
|
+
<sort-filter-bar> </sort-filter-bar>
|
|
238
238
|
`);
|
|
239
239
|
el.selectedSort = 'title';
|
|
240
240
|
el.sortDirection = 'asc';
|
|
@@ -251,8 +251,8 @@ describe('Sort direction button behavior', () => {
|
|
|
251
251
|
describe('Display mode/style buttons', () => {
|
|
252
252
|
it('should render all display mode buttons', async () => {
|
|
253
253
|
var _a, _b, _c, _d, _e;
|
|
254
|
-
const el = await fixture(html `
|
|
255
|
-
<sort-filter-bar> </sort-filter-bar>
|
|
254
|
+
const el = await fixture(html `
|
|
255
|
+
<sort-filter-bar> </sort-filter-bar>
|
|
256
256
|
`);
|
|
257
257
|
const displayModeButtonList = (_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#display-style-selector')) === null || _b === void 0 ? void 0 : _b.querySelector('ul');
|
|
258
258
|
const gridButton = (_c = displayModeButtonList === null || displayModeButtonList === void 0 ? void 0 : displayModeButtonList.children.item(0)) === null || _c === void 0 ? void 0 : _c.querySelector('#grid-button');
|
|
@@ -264,16 +264,16 @@ describe('Display mode/style buttons', () => {
|
|
|
264
264
|
});
|
|
265
265
|
it('should not render display mode buttons when suppressed', async () => {
|
|
266
266
|
var _a;
|
|
267
|
-
const el = await fixture(html `
|
|
268
|
-
<sort-filter-bar suppressDisplayModes></sort-filter-bar>
|
|
267
|
+
const el = await fixture(html `
|
|
268
|
+
<sort-filter-bar suppressDisplayModes></sort-filter-bar>
|
|
269
269
|
`);
|
|
270
270
|
const displayModeButtonList = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#display-style-selector');
|
|
271
271
|
expect(displayModeButtonList).not.to.exist;
|
|
272
272
|
});
|
|
273
273
|
it('should active current display mode', async () => {
|
|
274
274
|
var _a, _b, _c;
|
|
275
|
-
const el = await fixture(html `
|
|
276
|
-
<sort-filter-bar> </sort-filter-bar>
|
|
275
|
+
const el = await fixture(html `
|
|
276
|
+
<sort-filter-bar> </sort-filter-bar>
|
|
277
277
|
`);
|
|
278
278
|
el.displayMode = 'grid';
|
|
279
279
|
await el.updateComplete;
|
|
@@ -282,8 +282,8 @@ describe('Display mode/style buttons', () => {
|
|
|
282
282
|
});
|
|
283
283
|
it('should change displayMode prop to the one clicked', async () => {
|
|
284
284
|
var _a, _b, _c;
|
|
285
|
-
const el = await fixture(html `
|
|
286
|
-
<sort-filter-bar> </sort-filter-bar>
|
|
285
|
+
const el = await fixture(html `
|
|
286
|
+
<sort-filter-bar> </sort-filter-bar>
|
|
287
287
|
`);
|
|
288
288
|
el.displayMode = 'grid';
|
|
289
289
|
await el.updateComplete;
|
|
@@ -304,8 +304,8 @@ describe('Display mode/style buttons', () => {
|
|
|
304
304
|
describe('Sort/filter bar letter behavior', () => {
|
|
305
305
|
it('sets the selected title letter when clicked', async () => {
|
|
306
306
|
var _a, _b, _c;
|
|
307
|
-
const el = await fixture(html `
|
|
308
|
-
<sort-filter-bar></sort-filter-bar>
|
|
307
|
+
const el = await fixture(html `
|
|
308
|
+
<sort-filter-bar></sort-filter-bar>
|
|
309
309
|
`);
|
|
310
310
|
el.selectedSort = 'title';
|
|
311
311
|
el.prefixFilterCountMap = { title: { T: 1 }, creator: {} };
|
|
@@ -319,8 +319,8 @@ describe('Sort/filter bar letter behavior', () => {
|
|
|
319
319
|
});
|
|
320
320
|
it('sets the selected creator letter when clicked', async () => {
|
|
321
321
|
var _a, _b, _c;
|
|
322
|
-
const el = await fixture(html `
|
|
323
|
-
<sort-filter-bar></sort-filter-bar>
|
|
322
|
+
const el = await fixture(html `
|
|
323
|
+
<sort-filter-bar></sort-filter-bar>
|
|
324
324
|
`);
|
|
325
325
|
el.selectedSort = 'creator';
|
|
326
326
|
el.prefixFilterCountMap = { title: {}, creator: { C: 1 } };
|
|
@@ -344,8 +344,8 @@ describe('Sort/filter bar mobile view', () => {
|
|
|
344
344
|
});
|
|
345
345
|
it('renders in mobile view', async () => {
|
|
346
346
|
var _a, _b, _c, _d;
|
|
347
|
-
const el = await fixture(html `
|
|
348
|
-
<sort-filter-bar></sort-filter-bar>
|
|
347
|
+
const el = await fixture(html `
|
|
348
|
+
<sort-filter-bar></sort-filter-bar>
|
|
349
349
|
`);
|
|
350
350
|
const mobileSortContainer = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#mobile-sort-container');
|
|
351
351
|
const desktopSortContainer = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#desktop-sort-container');
|
|
@@ -354,8 +354,8 @@ describe('Sort/filter bar mobile view', () => {
|
|
|
354
354
|
});
|
|
355
355
|
it('changes selected sort in mobile view', async () => {
|
|
356
356
|
var _a;
|
|
357
|
-
const el = await fixture(html `
|
|
358
|
-
<sort-filter-bar></sort-filter-bar>
|
|
357
|
+
const el = await fixture(html `
|
|
358
|
+
<sort-filter-bar></sort-filter-bar>
|
|
359
359
|
`);
|
|
360
360
|
const mobileDropdown = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#mobile-dropdown');
|
|
361
361
|
expect(mobileDropdown).to.exist;
|
|
@@ -367,8 +367,8 @@ describe('Sort/filter bar mobile view', () => {
|
|
|
367
367
|
});
|
|
368
368
|
it('clears title filter when sort changed from title in mobile view', async () => {
|
|
369
369
|
var _a;
|
|
370
|
-
const el = await fixture(html `
|
|
371
|
-
<sort-filter-bar></sort-filter-bar>
|
|
370
|
+
const el = await fixture(html `
|
|
371
|
+
<sort-filter-bar></sort-filter-bar>
|
|
372
372
|
`);
|
|
373
373
|
el.selectedSort = 'title';
|
|
374
374
|
el.selectedTitleFilter = 'A';
|
|
@@ -384,8 +384,8 @@ describe('Sort/filter bar mobile view', () => {
|
|
|
384
384
|
});
|
|
385
385
|
it('clears creator filter when sort changed from creator in mobile view', async () => {
|
|
386
386
|
var _a;
|
|
387
|
-
const el = await fixture(html `
|
|
388
|
-
<sort-filter-bar></sort-filter-bar>
|
|
387
|
+
const el = await fixture(html `
|
|
388
|
+
<sort-filter-bar></sort-filter-bar>
|
|
389
389
|
`);
|
|
390
390
|
el.selectedSort = 'creator';
|
|
391
391
|
el.selectedCreatorFilter = 'A';
|
|
@@ -401,8 +401,8 @@ describe('Sort/filter bar mobile view', () => {
|
|
|
401
401
|
});
|
|
402
402
|
it('shows sort selector backdrop when mobile sort open', async () => {
|
|
403
403
|
var _a, _b, _c, _d;
|
|
404
|
-
const el = await fixture(html `
|
|
405
|
-
<sort-filter-bar></sort-filter-bar>
|
|
404
|
+
const el = await fixture(html `
|
|
405
|
+
<sort-filter-bar></sort-filter-bar>
|
|
406
406
|
`);
|
|
407
407
|
const mobileDropdown = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#mobile-dropdown');
|
|
408
408
|
expect(mobileDropdown).to.exist;
|
|
@@ -422,8 +422,8 @@ describe('Sort/filter bar mobile view', () => {
|
|
|
422
422
|
const resizeStub = new SharedResizeObserver();
|
|
423
423
|
const addSpy = sinon.spy(resizeStub, 'addObserver');
|
|
424
424
|
const removeSpy = sinon.spy(resizeStub, 'removeObserver');
|
|
425
|
-
const el = await fixture(html `
|
|
426
|
-
<sort-filter-bar .resizeObserver=${resizeStub}></sort-filter-bar>
|
|
425
|
+
const el = await fixture(html `
|
|
426
|
+
<sort-filter-bar .resizeObserver=${resizeStub}></sort-filter-bar>
|
|
427
427
|
`);
|
|
428
428
|
// this element exists
|
|
429
429
|
expect((_a = el === null || el === void 0 ? void 0 : el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#sort-selector-container')).to.exist;
|
|
@@ -439,11 +439,11 @@ describe('Sort/filter bar mobile view', () => {
|
|
|
439
439
|
const resizeStub = new SharedResizeObserver();
|
|
440
440
|
const addSpy = sinon.spy(resizeStub, 'addObserver');
|
|
441
441
|
const removeSpy = sinon.spy(resizeStub, 'removeObserver');
|
|
442
|
-
const el = await fixture(html `
|
|
443
|
-
<sort-filter-bar
|
|
444
|
-
.resizeObserver=${resizeStub}
|
|
445
|
-
.enableSortOptionsSlot=${true}
|
|
446
|
-
></sort-filter-bar>
|
|
442
|
+
const el = await fixture(html `
|
|
443
|
+
<sort-filter-bar
|
|
444
|
+
.resizeObserver=${resizeStub}
|
|
445
|
+
.enableSortOptionsSlot=${true}
|
|
446
|
+
></sort-filter-bar>
|
|
447
447
|
`);
|
|
448
448
|
await el.updateComplete;
|
|
449
449
|
// slot exists
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort-filter-bar.test.js","sourceRoot":"","sources":["../../../test/sort-filter-bar/sort-filter-bar.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport sinon from 'sinon';\nimport { html } from 'lit';\nimport type { IaDropdown } from '@internetarchive/ia-dropdown';\nimport { SharedResizeObserver } from '@internetarchive/shared-resize-observer';\nimport type { SortFilterBar } from '../../src/sort-filter-bar/sort-filter-bar';\nimport type { SortField } from '../../src/models';\n\nimport '../../src/sort-filter-bar/sort-filter-bar';\n\ndescribe('Sort selector default buttons', async () => {\n let el: SortFilterBar;\n let sortSelectorContainer: HTMLElement | null | undefined;\n let desktopSortSelector: HTMLElement | null | undefined;\n\n beforeEach(async () => {\n el = await fixture<SortFilterBar>(html`\n <sort-filter-bar></sort-filter-bar>\n `);\n sortSelectorContainer = el.shadowRoot?.querySelector(\n '#sort-selector-container',\n );\n desktopSortSelector = sortSelectorContainer?.querySelector(\n '#desktop-sort-selector',\n );\n\n el.resizeObserver = new SharedResizeObserver();\n await el.updateComplete;\n });\n\n it('should render basic component', async () => {\n expect(sortSelectorContainer).to.exist;\n expect(desktopSortSelector).to.exist;\n });\n\n it('should render sort-by label', async () => {\n const sortByLabel = el.shadowRoot?.querySelector('.sort-by-text');\n expect(sortByLabel).to.exist;\n expect(sortByLabel?.textContent?.trim()).to.equal('Sort by:');\n });\n\n it('should render sort direction button', async () => {\n const sortDirections = el.shadowRoot?.querySelector(\n '.sort-direction-container',\n );\n expect(sortDirections).to.exist;\n expect(sortDirections?.querySelector('.sort-direction-icon')).to.exist;\n });\n\n it('should not render relevance-sort selector if showRelevance is false', async () => {\n el.showRelevance = false;\n await el.updateComplete;\n\n const defaultSortSelector =\n desktopSortSelector?.querySelector('button.selected');\n expect(defaultSortSelector?.textContent?.trim()).not.to.equal('Relevance');\n });\n\n it('should render default relevance-sort selector', async () => {\n el.showRelevance = true;\n await el.updateComplete;\n\n const defaultSortSelector =\n desktopSortSelector?.querySelector('button.selected');\n expect(defaultSortSelector?.textContent?.trim()).to.equal('Relevance');\n });\n\n it('should render default view-sort selector', async () => {\n const defaultSortSelector = desktopSortSelector?.children\n .item(1)\n ?.querySelector('ia-dropdown');\n expect(defaultSortSelector?.textContent?.trim()).to.equal('Weekly views');\n });\n\n it('should render active view-sort selectors', async () => {\n el.selectedSort = 'alltimeview' as SortField;\n await el.updateComplete;\n\n const defaultSortSelector = desktopSortSelector?.querySelector(\n 'ia-dropdown.selected',\n );\n expect(defaultSortSelector?.textContent?.trim()).to.equal('All-time views');\n });\n\n it('should render default title-sort selector', async () => {\n const defaultSortSelector = desktopSortSelector?.children\n .item(2)\n ?.querySelector('button');\n expect(defaultSortSelector?.textContent?.trim()).to.equal('Title');\n });\n\n it('should render default date-sort selector', async () => {\n const defaultSortSelector = desktopSortSelector?.children\n .item(3)\n ?.querySelector('ia-dropdown');\n expect(defaultSortSelector?.textContent?.trim()).to.equal('Date published');\n });\n\n it('should render active date-sort selectors', async () => {\n el.selectedSort = 'datereviewed' as SortField;\n await el.updateComplete;\n\n const defaultSortSelector = desktopSortSelector?.querySelector(\n 'ia-dropdown.selected',\n );\n expect(defaultSortSelector?.textContent?.trim()).to.equal('Date reviewed');\n });\n\n it('should render default creator-sort selector', async () => {\n const defaultSortSelector = desktopSortSelector?.children\n .item(4)\n ?.querySelector('button');\n expect(defaultSortSelector?.textContent?.trim()).to.equal('Creator');\n });\n\n it('handles click event on view-sort selector', async () => {\n const defaultSortSelector = desktopSortSelector?.children\n .item(1)\n ?.querySelector('.dropdown-label') as HTMLElement;\n\n defaultSortSelector?.click();\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal('weeklyview');\n });\n\n it('handles click event on title selector', async () => {\n const defaultSortSelector = desktopSortSelector?.children\n .item(2)\n ?.querySelector('button');\n\n defaultSortSelector?.click();\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal('title');\n });\n\n it('handles click event on date-sort selector', async () => {\n const defaultSortSelector = desktopSortSelector?.children\n .item(3)\n ?.querySelector('.dropdown-label') as HTMLElement;\n\n defaultSortSelector?.click();\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal('date');\n });\n\n it('handles click event on creator selector', async () => {\n const defaultSortSelector = desktopSortSelector?.children\n .item(4)\n ?.querySelector('button');\n\n defaultSortSelector?.click();\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal('creator');\n });\n\n it('handles click event on relevance selector', async () => {\n el.showRelevance = true;\n el.selectedSort = 'title' as SortField;\n await el.updateComplete;\n\n const defaultSortSelector = desktopSortSelector?.children\n .item(0)\n ?.querySelector('button');\n\n defaultSortSelector?.click();\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal('relevance');\n });\n\n it('handles return/space key event on view-sort selector', async () => {\n const defaultSortSelector = desktopSortSelector?.children\n .item(1)\n ?.querySelector('.dropdown-label') as HTMLElement;\n\n el.selectedSort = 'relevance' as SortField;\n const enterEvent = new KeyboardEvent('keydown', { key: 'Enter' });\n defaultSortSelector?.dispatchEvent(enterEvent);\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal('weeklyview');\n\n el.selectedSort = 'relevance' as SortField;\n const spaceEvent = new KeyboardEvent('keydown', { key: ' ' });\n defaultSortSelector?.dispatchEvent(spaceEvent);\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal('weeklyview');\n });\n\n it('handles return/space key event on date-sort selector', async () => {\n const defaultSortSelector = desktopSortSelector?.children\n .item(3)\n ?.querySelector('.dropdown-label') as HTMLElement;\n\n el.selectedSort = 'relevance' as SortField;\n const enterEvent = new KeyboardEvent('keydown', { key: 'Enter' });\n defaultSortSelector?.dispatchEvent(enterEvent);\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal('date');\n\n el.selectedSort = 'relevance' as SortField;\n const spaceEvent = new KeyboardEvent('keydown', { key: ' ' });\n defaultSortSelector?.dispatchEvent(spaceEvent);\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal('date');\n });\n\n it('handles click event on view-sort dropdown option', async () => {\n const defaultSortSelector = desktopSortSelector?.children\n .item(1)\n ?.querySelector('ia-dropdown') as IaDropdown;\n\n const firstOption = defaultSortSelector?.shadowRoot?.querySelector(\n 'li > button',\n ) as HTMLButtonElement;\n expect(firstOption).to.exist;\n\n firstOption?.click();\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal('weeklyview');\n });\n\n it('handles click event on date-sort dropdown option', async () => {\n const defaultSortSelector = desktopSortSelector?.children\n .item(3)\n ?.querySelector('ia-dropdown') as IaDropdown;\n\n const firstOption = defaultSortSelector?.shadowRoot?.querySelector(\n 'li > button',\n ) as HTMLButtonElement;\n expect(firstOption).to.exist;\n\n firstOption?.click();\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal('date');\n });\n\n it('shows view sort selector backdrop when view sort open', async () => {\n const defaultSortSelector = desktopSortSelector?.children\n .item(1)\n ?.querySelector('ia-dropdown') as IaDropdown;\n\n const caret = defaultSortSelector?.shadowRoot?.querySelector(\n '.caret',\n ) as HTMLElement;\n expect(caret).to.exist;\n\n caret?.click();\n await el.updateComplete;\n\n let backdrop = el.shadowRoot?.querySelector(\n '#sort-selector-backdrop',\n ) as HTMLElement;\n expect(backdrop).to.exist;\n\n backdrop?.click();\n await el.updateComplete;\n\n backdrop = el.shadowRoot?.querySelector(\n '#sort-selector-backdrop',\n ) as HTMLElement;\n expect(backdrop).not.to.exist;\n });\n\n it('shows date sort selector backdrop when date sort open', async () => {\n const defaultSortSelector = desktopSortSelector?.children\n .item(3)\n ?.querySelector('ia-dropdown') as IaDropdown;\n\n const caret = defaultSortSelector?.shadowRoot?.querySelector(\n '.caret',\n ) as HTMLElement;\n expect(caret).to.exist;\n\n caret?.click();\n await el.updateComplete;\n\n let backdrop = el.shadowRoot?.querySelector(\n '#sort-selector-backdrop',\n ) as HTMLElement;\n expect(backdrop).to.exist;\n\n backdrop?.click();\n await el.updateComplete;\n\n backdrop = el.shadowRoot?.querySelector(\n '#sort-selector-backdrop',\n ) as HTMLElement;\n expect(backdrop).not.to.exist;\n });\n\n it('closes dropdown by hitting escape key', async () => {\n const defaultSortSelector = desktopSortSelector?.children\n .item(3)\n ?.querySelector('ia-dropdown') as IaDropdown;\n\n const caret = defaultSortSelector?.shadowRoot?.querySelector(\n '.caret',\n ) as HTMLElement;\n expect(caret).to.exist;\n\n caret?.click();\n await el.updateComplete;\n\n let backdrop = el.shadowRoot?.querySelector(\n '#sort-selector-backdrop',\n ) as HTMLElement;\n expect(backdrop).to.exist;\n\n document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape' }));\n await el.updateComplete;\n\n backdrop = el.shadowRoot?.querySelector(\n '#sort-selector-backdrop',\n ) as HTMLElement;\n expect(backdrop).not.to.exist;\n });\n});\n\ndescribe('Sort direction button behavior', () => {\n it('should disable sort direction button when sorting by relevance', async () => {\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar> </sort-filter-bar>\n `);\n\n el.selectedSort = 'relevance' as SortField;\n await el.updateComplete;\n\n const sortDirectionButton = el.shadowRoot?.querySelector(\n '.sort-direction-selector',\n ) as HTMLButtonElement;\n expect(sortDirectionButton).to.exist;\n expect(sortDirectionButton.disabled).to.be.true;\n });\n\n it('should enable sort direction button when not sorting by relevance', async () => {\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar> </sort-filter-bar>\n `);\n\n el.selectedSort = 'title' as SortField;\n await el.updateComplete;\n\n const sortDirectionButton = el.shadowRoot?.querySelector(\n '.sort-direction-selector',\n ) as HTMLButtonElement;\n expect(sortDirectionButton).to.exist;\n expect(sortDirectionButton.disabled).to.be.false;\n });\n\n it('should toggle sort direction when clicked', async () => {\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar> </sort-filter-bar>\n `);\n\n el.selectedSort = 'title' as SortField;\n el.sortDirection = 'asc';\n await el.updateComplete;\n\n const sortDirectionButton = el.shadowRoot?.querySelector(\n '.sort-direction-selector',\n ) as HTMLButtonElement;\n\n sortDirectionButton.click();\n await el.updateComplete;\n expect(el.sortDirection).to.equal('desc');\n\n sortDirectionButton.click();\n await el.updateComplete;\n expect(el.sortDirection).to.equal('asc');\n });\n});\n\ndescribe('Display mode/style buttons', () => {\n it('should render all display mode buttons', async () => {\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar> </sort-filter-bar>\n `);\n\n const displayModeButtonList = el.shadowRoot\n ?.querySelector('#display-style-selector')\n ?.querySelector('ul');\n\n const gridButton = displayModeButtonList?.children\n .item(0)\n ?.querySelector('#grid-button');\n expect(gridButton).to.exist;\n\n const detailListButton = displayModeButtonList?.children\n .item(1)\n ?.querySelector('#list-detail-button');\n expect(detailListButton).to.exist;\n\n const compactListButton = displayModeButtonList?.children\n .item(2)\n ?.querySelector('#list-compact-button');\n expect(compactListButton).to.exist;\n });\n\n it('should not render display mode buttons when suppressed', async () => {\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar suppressDisplayModes></sort-filter-bar>\n `);\n\n const displayModeButtonList = el.shadowRoot?.querySelector(\n '#display-style-selector',\n );\n expect(displayModeButtonList).not.to.exist;\n });\n\n it('should active current display mode', async () => {\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar> </sort-filter-bar>\n `);\n\n el.displayMode = 'grid';\n await el.updateComplete;\n\n const displayModeTitle = el.shadowRoot\n ?.querySelector('#display-style-selector')\n ?.querySelector('button.active')\n ?.getAttribute('title');\n expect(displayModeTitle).to.equal('Tile view');\n });\n\n it('should change displayMode prop to the one clicked', async () => {\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar> </sort-filter-bar>\n `);\n\n el.displayMode = 'grid';\n await el.updateComplete;\n\n const extendedListButton = el.shadowRoot?.querySelector(\n '#list-detail-button',\n ) as HTMLElement;\n extendedListButton.click();\n await el.updateComplete;\n expect(el.displayMode).to.equal('list-detail');\n\n const compactListButton = el.shadowRoot?.querySelector(\n '#list-compact-button',\n ) as HTMLElement;\n compactListButton.click();\n await el.updateComplete;\n expect(el.displayMode).to.equal('list-compact');\n\n const gridModeButton = el.shadowRoot?.querySelector(\n '#grid-button',\n ) as HTMLElement;\n gridModeButton.click();\n await el.updateComplete;\n expect(el.displayMode).to.equal('grid');\n });\n});\n\ndescribe('Sort/filter bar letter behavior', () => {\n it('sets the selected title letter when clicked', async () => {\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar></sort-filter-bar>\n `);\n\n el.selectedSort = 'title' as SortField;\n el.prefixFilterCountMap = { title: { T: 1 }, creator: {} };\n await el.updateComplete;\n\n const alphaBar = el.shadowRoot?.querySelector('alpha-bar');\n const letterLink = alphaBar?.shadowRoot?.querySelector(\n 'li > button:not(:disabled)',\n ) as HTMLAnchorElement;\n expect(letterLink?.textContent?.trim()).to.equal('T');\n\n letterLink?.click();\n await el.updateComplete;\n\n expect(el.selectedTitleFilter).to.equal('T');\n });\n\n it('sets the selected creator letter when clicked', async () => {\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar></sort-filter-bar>\n `);\n\n el.selectedSort = 'creator' as SortField;\n el.prefixFilterCountMap = { title: {}, creator: { C: 1 } };\n await el.updateComplete;\n\n const alphaBar = el.shadowRoot?.querySelector('alpha-bar');\n const letterLink = alphaBar?.shadowRoot?.querySelector(\n 'li > button:not(:disabled)',\n ) as HTMLAnchorElement;\n expect(letterLink?.textContent?.trim()).to.equal('C');\n\n letterLink?.click();\n await el.updateComplete;\n\n expect(el.selectedCreatorFilter).to.equal('C');\n });\n});\n\ndescribe('Sort/filter bar mobile view', () => {\n let origWindowSize: { width: number; height: number };\n before(() => {\n origWindowSize = { width: window.innerWidth, height: window.innerHeight };\n window.resizeTo(500, 600);\n });\n\n after(() => {\n window.resizeTo(origWindowSize.width, origWindowSize.height);\n });\n\n it('renders in mobile view', async () => {\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar></sort-filter-bar>\n `);\n\n const mobileSortContainer = el.shadowRoot?.querySelector(\n '#mobile-sort-container',\n );\n const desktopSortContainer = el.shadowRoot?.querySelector(\n '#desktop-sort-container',\n );\n\n expect(mobileSortContainer?.classList?.contains('visible')).to.be.true;\n expect(desktopSortContainer?.classList?.contains('hidden')).to.be.true;\n });\n\n it('changes selected sort in mobile view', async () => {\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar></sort-filter-bar>\n `);\n\n const mobileDropdown = el.shadowRoot?.querySelector(\n '#mobile-dropdown',\n ) as IaDropdown;\n expect(mobileDropdown).to.exist;\n\n mobileDropdown.selectedOption = 'title';\n const option = { id: 'title' };\n mobileDropdown.dispatchEvent(\n new CustomEvent('optionSelected', { detail: { option } }),\n );\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal('title');\n });\n\n it('clears title filter when sort changed from title in mobile view', async () => {\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar></sort-filter-bar>\n `);\n\n el.selectedSort = 'title' as SortField;\n el.selectedTitleFilter = 'A';\n await el.updateComplete;\n\n const mobileDropdown = el.shadowRoot?.querySelector(\n '#mobile-dropdown',\n ) as IaDropdown;\n expect(mobileDropdown).to.exist;\n\n mobileDropdown.selectedOption = 'relevance';\n const option = { id: 'relevance' };\n mobileDropdown.dispatchEvent(\n new CustomEvent('optionSelected', { detail: { option } }),\n );\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal('relevance');\n expect(el.selectedTitleFilter).to.be.null;\n });\n\n it('clears creator filter when sort changed from creator in mobile view', async () => {\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar></sort-filter-bar>\n `);\n\n el.selectedSort = 'creator' as SortField;\n el.selectedCreatorFilter = 'A';\n await el.updateComplete;\n\n const mobileDropdown = el.shadowRoot?.querySelector(\n '#mobile-dropdown',\n ) as IaDropdown;\n expect(mobileDropdown).to.exist;\n\n mobileDropdown.selectedOption = 'relevance';\n const option = { id: 'relevance' };\n mobileDropdown.dispatchEvent(\n new CustomEvent('optionSelected', { detail: { option } }),\n );\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal('relevance');\n expect(el.selectedCreatorFilter).to.be.null;\n });\n\n it('shows sort selector backdrop when mobile sort open', async () => {\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar></sort-filter-bar>\n `);\n\n const mobileDropdown = el.shadowRoot?.querySelector(\n '#mobile-dropdown',\n ) as IaDropdown;\n expect(mobileDropdown).to.exist;\n\n const caret = mobileDropdown?.shadowRoot?.querySelector(\n '.caret',\n ) as HTMLElement;\n expect(caret).to.exist;\n\n caret?.click();\n await el.updateComplete;\n\n let backdrop = el.shadowRoot?.querySelector(\n '#sort-selector-backdrop',\n ) as HTMLElement;\n expect(backdrop).to.exist;\n\n backdrop?.click();\n await el.updateComplete;\n\n backdrop = el.shadowRoot?.querySelector(\n '#sort-selector-backdrop',\n ) as HTMLElement;\n expect(backdrop).not.to.exist;\n });\n\n it('shows loansTab top-bar slot Default View', async () => {\n const resizeStub = new SharedResizeObserver();\n const addSpy = sinon.spy(resizeStub, 'addObserver');\n const removeSpy = sinon.spy(resizeStub, 'removeObserver');\n\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar .resizeObserver=${resizeStub}></sort-filter-bar>\n `);\n\n // this element exists\n expect(el?.shadowRoot?.querySelector('#sort-selector-container')).to.exist;\n\n // loads & unloads twice when [re]setting ResizeObserver\n expect(addSpy.callCount).to.equal(2);\n\n const resizeStub2 = new SharedResizeObserver();\n el.resizeObserver = resizeStub2;\n await el.updateComplete;\n expect(removeSpy.callCount).to.equal(2);\n });\n\n it('contains sort-options slot when enabled', async () => {\n const resizeStub = new SharedResizeObserver();\n const addSpy = sinon.spy(resizeStub, 'addObserver');\n const removeSpy = sinon.spy(resizeStub, 'removeObserver');\n\n const el = await fixture<SortFilterBar>(html`\n <sort-filter-bar\n .resizeObserver=${resizeStub}\n .enableSortOptionsSlot=${true}\n ></sort-filter-bar>\n `);\n\n await el.updateComplete;\n\n // slot exists\n const sortOptionsSlot = el?.shadowRoot?.querySelector(\n 'slot[name=\"sort-options\"]',\n );\n expect(sortOptionsSlot).to.exist;\n\n // sort bar does not exist\n expect(el?.shadowRoot?.querySelector('#sort-selector-container')).to.not\n .exist;\n\n const resizeStub2 = new SharedResizeObserver();\n el.resizeObserver = resizeStub2;\n await el.updateComplete;\n\n // there's no need for resize observer\n expect(addSpy.callCount).to.equal(0);\n expect(removeSpy.callCount).to.equal(0);\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"sort-filter-bar.test.js","sourceRoot":"","sources":["../../../test/sort-filter-bar/sort-filter-bar.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\r\nimport sinon from 'sinon';\r\nimport { html } from 'lit';\r\nimport type { IaDropdown } from '@internetarchive/ia-dropdown';\r\nimport { SharedResizeObserver } from '@internetarchive/shared-resize-observer';\r\nimport type { SortFilterBar } from '../../src/sort-filter-bar/sort-filter-bar';\r\nimport type { SortField } from '../../src/models';\r\n\r\nimport '../../src/sort-filter-bar/sort-filter-bar';\r\n\r\ndescribe('Sort selector default buttons', async () => {\r\n let el: SortFilterBar;\r\n let sortSelectorContainer: HTMLElement | null | undefined;\r\n let desktopSortSelector: HTMLElement | null | undefined;\r\n\r\n beforeEach(async () => {\r\n el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar></sort-filter-bar>\r\n `);\r\n sortSelectorContainer = el.shadowRoot?.querySelector(\r\n '#sort-selector-container',\r\n );\r\n desktopSortSelector = sortSelectorContainer?.querySelector(\r\n '#desktop-sort-selector',\r\n );\r\n\r\n el.resizeObserver = new SharedResizeObserver();\r\n await el.updateComplete;\r\n });\r\n\r\n it('should render basic component', async () => {\r\n expect(sortSelectorContainer).to.exist;\r\n expect(desktopSortSelector).to.exist;\r\n });\r\n\r\n it('should render sort-by label', async () => {\r\n const sortByLabel = el.shadowRoot?.querySelector('.sort-by-text');\r\n expect(sortByLabel).to.exist;\r\n expect(sortByLabel?.textContent?.trim()).to.equal('Sort by:');\r\n });\r\n\r\n it('should render sort direction button', async () => {\r\n const sortDirections = el.shadowRoot?.querySelector(\r\n '.sort-direction-container',\r\n );\r\n expect(sortDirections).to.exist;\r\n expect(sortDirections?.querySelector('.sort-direction-icon')).to.exist;\r\n });\r\n\r\n it('should not render relevance-sort selector if showRelevance is false', async () => {\r\n el.showRelevance = false;\r\n await el.updateComplete;\r\n\r\n const defaultSortSelector =\r\n desktopSortSelector?.querySelector('button.selected');\r\n expect(defaultSortSelector?.textContent?.trim()).not.to.equal('Relevance');\r\n });\r\n\r\n it('should render default relevance-sort selector', async () => {\r\n el.showRelevance = true;\r\n await el.updateComplete;\r\n\r\n const defaultSortSelector =\r\n desktopSortSelector?.querySelector('button.selected');\r\n expect(defaultSortSelector?.textContent?.trim()).to.equal('Relevance');\r\n });\r\n\r\n it('should render default view-sort selector', async () => {\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(1)\r\n ?.querySelector('ia-dropdown');\r\n expect(defaultSortSelector?.textContent?.trim()).to.equal('Weekly views');\r\n });\r\n\r\n it('should render active view-sort selectors', async () => {\r\n el.selectedSort = 'alltimeview' as SortField;\r\n await el.updateComplete;\r\n\r\n const defaultSortSelector = desktopSortSelector?.querySelector(\r\n 'ia-dropdown.selected',\r\n );\r\n expect(defaultSortSelector?.textContent?.trim()).to.equal('All-time views');\r\n });\r\n\r\n it('should render default title-sort selector', async () => {\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(2)\r\n ?.querySelector('button');\r\n expect(defaultSortSelector?.textContent?.trim()).to.equal('Title');\r\n });\r\n\r\n it('should render default date-sort selector', async () => {\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(3)\r\n ?.querySelector('ia-dropdown');\r\n expect(defaultSortSelector?.textContent?.trim()).to.equal('Date published');\r\n });\r\n\r\n it('should render active date-sort selectors', async () => {\r\n el.selectedSort = 'datereviewed' as SortField;\r\n await el.updateComplete;\r\n\r\n const defaultSortSelector = desktopSortSelector?.querySelector(\r\n 'ia-dropdown.selected',\r\n );\r\n expect(defaultSortSelector?.textContent?.trim()).to.equal('Date reviewed');\r\n });\r\n\r\n it('should render default creator-sort selector', async () => {\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(4)\r\n ?.querySelector('button');\r\n expect(defaultSortSelector?.textContent?.trim()).to.equal('Creator');\r\n });\r\n\r\n it('handles click event on view-sort selector', async () => {\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(1)\r\n ?.querySelector('.dropdown-label') as HTMLElement;\r\n\r\n defaultSortSelector?.click();\r\n await el.updateComplete;\r\n\r\n expect(el.selectedSort).to.equal('weeklyview');\r\n });\r\n\r\n it('handles click event on title selector', async () => {\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(2)\r\n ?.querySelector('button');\r\n\r\n defaultSortSelector?.click();\r\n await el.updateComplete;\r\n\r\n expect(el.selectedSort).to.equal('title');\r\n });\r\n\r\n it('handles click event on date-sort selector', async () => {\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(3)\r\n ?.querySelector('.dropdown-label') as HTMLElement;\r\n\r\n defaultSortSelector?.click();\r\n await el.updateComplete;\r\n\r\n expect(el.selectedSort).to.equal('date');\r\n });\r\n\r\n it('handles click event on creator selector', async () => {\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(4)\r\n ?.querySelector('button');\r\n\r\n defaultSortSelector?.click();\r\n await el.updateComplete;\r\n\r\n expect(el.selectedSort).to.equal('creator');\r\n });\r\n\r\n it('handles click event on relevance selector', async () => {\r\n el.showRelevance = true;\r\n el.selectedSort = 'title' as SortField;\r\n await el.updateComplete;\r\n\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(0)\r\n ?.querySelector('button');\r\n\r\n defaultSortSelector?.click();\r\n await el.updateComplete;\r\n\r\n expect(el.selectedSort).to.equal('relevance');\r\n });\r\n\r\n it('handles return/space key event on view-sort selector', async () => {\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(1)\r\n ?.querySelector('.dropdown-label') as HTMLElement;\r\n\r\n el.selectedSort = 'relevance' as SortField;\r\n const enterEvent = new KeyboardEvent('keydown', { key: 'Enter' });\r\n defaultSortSelector?.dispatchEvent(enterEvent);\r\n await el.updateComplete;\r\n\r\n expect(el.selectedSort).to.equal('weeklyview');\r\n\r\n el.selectedSort = 'relevance' as SortField;\r\n const spaceEvent = new KeyboardEvent('keydown', { key: ' ' });\r\n defaultSortSelector?.dispatchEvent(spaceEvent);\r\n await el.updateComplete;\r\n\r\n expect(el.selectedSort).to.equal('weeklyview');\r\n });\r\n\r\n it('handles return/space key event on date-sort selector', async () => {\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(3)\r\n ?.querySelector('.dropdown-label') as HTMLElement;\r\n\r\n el.selectedSort = 'relevance' as SortField;\r\n const enterEvent = new KeyboardEvent('keydown', { key: 'Enter' });\r\n defaultSortSelector?.dispatchEvent(enterEvent);\r\n await el.updateComplete;\r\n\r\n expect(el.selectedSort).to.equal('date');\r\n\r\n el.selectedSort = 'relevance' as SortField;\r\n const spaceEvent = new KeyboardEvent('keydown', { key: ' ' });\r\n defaultSortSelector?.dispatchEvent(spaceEvent);\r\n await el.updateComplete;\r\n\r\n expect(el.selectedSort).to.equal('date');\r\n });\r\n\r\n it('handles click event on view-sort dropdown option', async () => {\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(1)\r\n ?.querySelector('ia-dropdown') as IaDropdown;\r\n\r\n const firstOption = defaultSortSelector?.shadowRoot?.querySelector(\r\n 'li > button',\r\n ) as HTMLButtonElement;\r\n expect(firstOption).to.exist;\r\n\r\n firstOption?.click();\r\n await el.updateComplete;\r\n\r\n expect(el.selectedSort).to.equal('weeklyview');\r\n });\r\n\r\n it('handles click event on date-sort dropdown option', async () => {\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(3)\r\n ?.querySelector('ia-dropdown') as IaDropdown;\r\n\r\n const firstOption = defaultSortSelector?.shadowRoot?.querySelector(\r\n 'li > button',\r\n ) as HTMLButtonElement;\r\n expect(firstOption).to.exist;\r\n\r\n firstOption?.click();\r\n await el.updateComplete;\r\n\r\n expect(el.selectedSort).to.equal('date');\r\n });\r\n\r\n it('shows view sort selector backdrop when view sort open', async () => {\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(1)\r\n ?.querySelector('ia-dropdown') as IaDropdown;\r\n\r\n const caret = defaultSortSelector?.shadowRoot?.querySelector(\r\n '.caret',\r\n ) as HTMLElement;\r\n expect(caret).to.exist;\r\n\r\n caret?.click();\r\n await el.updateComplete;\r\n\r\n let backdrop = el.shadowRoot?.querySelector(\r\n '#sort-selector-backdrop',\r\n ) as HTMLElement;\r\n expect(backdrop).to.exist;\r\n\r\n backdrop?.click();\r\n await el.updateComplete;\r\n\r\n backdrop = el.shadowRoot?.querySelector(\r\n '#sort-selector-backdrop',\r\n ) as HTMLElement;\r\n expect(backdrop).not.to.exist;\r\n });\r\n\r\n it('shows date sort selector backdrop when date sort open', async () => {\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(3)\r\n ?.querySelector('ia-dropdown') as IaDropdown;\r\n\r\n const caret = defaultSortSelector?.shadowRoot?.querySelector(\r\n '.caret',\r\n ) as HTMLElement;\r\n expect(caret).to.exist;\r\n\r\n caret?.click();\r\n await el.updateComplete;\r\n\r\n let backdrop = el.shadowRoot?.querySelector(\r\n '#sort-selector-backdrop',\r\n ) as HTMLElement;\r\n expect(backdrop).to.exist;\r\n\r\n backdrop?.click();\r\n await el.updateComplete;\r\n\r\n backdrop = el.shadowRoot?.querySelector(\r\n '#sort-selector-backdrop',\r\n ) as HTMLElement;\r\n expect(backdrop).not.to.exist;\r\n });\r\n\r\n it('closes dropdown by hitting escape key', async () => {\r\n const defaultSortSelector = desktopSortSelector?.children\r\n .item(3)\r\n ?.querySelector('ia-dropdown') as IaDropdown;\r\n\r\n const caret = defaultSortSelector?.shadowRoot?.querySelector(\r\n '.caret',\r\n ) as HTMLElement;\r\n expect(caret).to.exist;\r\n\r\n caret?.click();\r\n await el.updateComplete;\r\n\r\n let backdrop = el.shadowRoot?.querySelector(\r\n '#sort-selector-backdrop',\r\n ) as HTMLElement;\r\n expect(backdrop).to.exist;\r\n\r\n document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape' }));\r\n await el.updateComplete;\r\n\r\n backdrop = el.shadowRoot?.querySelector(\r\n '#sort-selector-backdrop',\r\n ) as HTMLElement;\r\n expect(backdrop).not.to.exist;\r\n });\r\n});\r\n\r\ndescribe('Sort direction button behavior', () => {\r\n it('should disable sort direction button when sorting by relevance', async () => {\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar> </sort-filter-bar>\r\n `);\r\n\r\n el.selectedSort = 'relevance' as SortField;\r\n await el.updateComplete;\r\n\r\n const sortDirectionButton = el.shadowRoot?.querySelector(\r\n '.sort-direction-selector',\r\n ) as HTMLButtonElement;\r\n expect(sortDirectionButton).to.exist;\r\n expect(sortDirectionButton.disabled).to.be.true;\r\n });\r\n\r\n it('should enable sort direction button when not sorting by relevance', async () => {\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar> </sort-filter-bar>\r\n `);\r\n\r\n el.selectedSort = 'title' as SortField;\r\n await el.updateComplete;\r\n\r\n const sortDirectionButton = el.shadowRoot?.querySelector(\r\n '.sort-direction-selector',\r\n ) as HTMLButtonElement;\r\n expect(sortDirectionButton).to.exist;\r\n expect(sortDirectionButton.disabled).to.be.false;\r\n });\r\n\r\n it('should toggle sort direction when clicked', async () => {\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar> </sort-filter-bar>\r\n `);\r\n\r\n el.selectedSort = 'title' as SortField;\r\n el.sortDirection = 'asc';\r\n await el.updateComplete;\r\n\r\n const sortDirectionButton = el.shadowRoot?.querySelector(\r\n '.sort-direction-selector',\r\n ) as HTMLButtonElement;\r\n\r\n sortDirectionButton.click();\r\n await el.updateComplete;\r\n expect(el.sortDirection).to.equal('desc');\r\n\r\n sortDirectionButton.click();\r\n await el.updateComplete;\r\n expect(el.sortDirection).to.equal('asc');\r\n });\r\n});\r\n\r\ndescribe('Display mode/style buttons', () => {\r\n it('should render all display mode buttons', async () => {\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar> </sort-filter-bar>\r\n `);\r\n\r\n const displayModeButtonList = el.shadowRoot\r\n ?.querySelector('#display-style-selector')\r\n ?.querySelector('ul');\r\n\r\n const gridButton = displayModeButtonList?.children\r\n .item(0)\r\n ?.querySelector('#grid-button');\r\n expect(gridButton).to.exist;\r\n\r\n const detailListButton = displayModeButtonList?.children\r\n .item(1)\r\n ?.querySelector('#list-detail-button');\r\n expect(detailListButton).to.exist;\r\n\r\n const compactListButton = displayModeButtonList?.children\r\n .item(2)\r\n ?.querySelector('#list-compact-button');\r\n expect(compactListButton).to.exist;\r\n });\r\n\r\n it('should not render display mode buttons when suppressed', async () => {\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar suppressDisplayModes></sort-filter-bar>\r\n `);\r\n\r\n const displayModeButtonList = el.shadowRoot?.querySelector(\r\n '#display-style-selector',\r\n );\r\n expect(displayModeButtonList).not.to.exist;\r\n });\r\n\r\n it('should active current display mode', async () => {\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar> </sort-filter-bar>\r\n `);\r\n\r\n el.displayMode = 'grid';\r\n await el.updateComplete;\r\n\r\n const displayModeTitle = el.shadowRoot\r\n ?.querySelector('#display-style-selector')\r\n ?.querySelector('button.active')\r\n ?.getAttribute('title');\r\n expect(displayModeTitle).to.equal('Tile view');\r\n });\r\n\r\n it('should change displayMode prop to the one clicked', async () => {\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar> </sort-filter-bar>\r\n `);\r\n\r\n el.displayMode = 'grid';\r\n await el.updateComplete;\r\n\r\n const extendedListButton = el.shadowRoot?.querySelector(\r\n '#list-detail-button',\r\n ) as HTMLElement;\r\n extendedListButton.click();\r\n await el.updateComplete;\r\n expect(el.displayMode).to.equal('list-detail');\r\n\r\n const compactListButton = el.shadowRoot?.querySelector(\r\n '#list-compact-button',\r\n ) as HTMLElement;\r\n compactListButton.click();\r\n await el.updateComplete;\r\n expect(el.displayMode).to.equal('list-compact');\r\n\r\n const gridModeButton = el.shadowRoot?.querySelector(\r\n '#grid-button',\r\n ) as HTMLElement;\r\n gridModeButton.click();\r\n await el.updateComplete;\r\n expect(el.displayMode).to.equal('grid');\r\n });\r\n});\r\n\r\ndescribe('Sort/filter bar letter behavior', () => {\r\n it('sets the selected title letter when clicked', async () => {\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar></sort-filter-bar>\r\n `);\r\n\r\n el.selectedSort = 'title' as SortField;\r\n el.prefixFilterCountMap = { title: { T: 1 }, creator: {} };\r\n await el.updateComplete;\r\n\r\n const alphaBar = el.shadowRoot?.querySelector('alpha-bar');\r\n const letterLink = alphaBar?.shadowRoot?.querySelector(\r\n 'li > button:not(:disabled)',\r\n ) as HTMLAnchorElement;\r\n expect(letterLink?.textContent?.trim()).to.equal('T');\r\n\r\n letterLink?.click();\r\n await el.updateComplete;\r\n\r\n expect(el.selectedTitleFilter).to.equal('T');\r\n });\r\n\r\n it('sets the selected creator letter when clicked', async () => {\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar></sort-filter-bar>\r\n `);\r\n\r\n el.selectedSort = 'creator' as SortField;\r\n el.prefixFilterCountMap = { title: {}, creator: { C: 1 } };\r\n await el.updateComplete;\r\n\r\n const alphaBar = el.shadowRoot?.querySelector('alpha-bar');\r\n const letterLink = alphaBar?.shadowRoot?.querySelector(\r\n 'li > button:not(:disabled)',\r\n ) as HTMLAnchorElement;\r\n expect(letterLink?.textContent?.trim()).to.equal('C');\r\n\r\n letterLink?.click();\r\n await el.updateComplete;\r\n\r\n expect(el.selectedCreatorFilter).to.equal('C');\r\n });\r\n});\r\n\r\ndescribe('Sort/filter bar mobile view', () => {\r\n let origWindowSize: { width: number; height: number };\r\n before(() => {\r\n origWindowSize = { width: window.innerWidth, height: window.innerHeight };\r\n window.resizeTo(500, 600);\r\n });\r\n\r\n after(() => {\r\n window.resizeTo(origWindowSize.width, origWindowSize.height);\r\n });\r\n\r\n it('renders in mobile view', async () => {\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar></sort-filter-bar>\r\n `);\r\n\r\n const mobileSortContainer = el.shadowRoot?.querySelector(\r\n '#mobile-sort-container',\r\n );\r\n const desktopSortContainer = el.shadowRoot?.querySelector(\r\n '#desktop-sort-container',\r\n );\r\n\r\n expect(mobileSortContainer?.classList?.contains('visible')).to.be.true;\r\n expect(desktopSortContainer?.classList?.contains('hidden')).to.be.true;\r\n });\r\n\r\n it('changes selected sort in mobile view', async () => {\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar></sort-filter-bar>\r\n `);\r\n\r\n const mobileDropdown = el.shadowRoot?.querySelector(\r\n '#mobile-dropdown',\r\n ) as IaDropdown;\r\n expect(mobileDropdown).to.exist;\r\n\r\n mobileDropdown.selectedOption = 'title';\r\n const option = { id: 'title' };\r\n mobileDropdown.dispatchEvent(\r\n new CustomEvent('optionSelected', { detail: { option } }),\r\n );\r\n await el.updateComplete;\r\n\r\n expect(el.selectedSort).to.equal('title');\r\n });\r\n\r\n it('clears title filter when sort changed from title in mobile view', async () => {\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar></sort-filter-bar>\r\n `);\r\n\r\n el.selectedSort = 'title' as SortField;\r\n el.selectedTitleFilter = 'A';\r\n await el.updateComplete;\r\n\r\n const mobileDropdown = el.shadowRoot?.querySelector(\r\n '#mobile-dropdown',\r\n ) as IaDropdown;\r\n expect(mobileDropdown).to.exist;\r\n\r\n mobileDropdown.selectedOption = 'relevance';\r\n const option = { id: 'relevance' };\r\n mobileDropdown.dispatchEvent(\r\n new CustomEvent('optionSelected', { detail: { option } }),\r\n );\r\n await el.updateComplete;\r\n\r\n expect(el.selectedSort).to.equal('relevance');\r\n expect(el.selectedTitleFilter).to.be.null;\r\n });\r\n\r\n it('clears creator filter when sort changed from creator in mobile view', async () => {\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar></sort-filter-bar>\r\n `);\r\n\r\n el.selectedSort = 'creator' as SortField;\r\n el.selectedCreatorFilter = 'A';\r\n await el.updateComplete;\r\n\r\n const mobileDropdown = el.shadowRoot?.querySelector(\r\n '#mobile-dropdown',\r\n ) as IaDropdown;\r\n expect(mobileDropdown).to.exist;\r\n\r\n mobileDropdown.selectedOption = 'relevance';\r\n const option = { id: 'relevance' };\r\n mobileDropdown.dispatchEvent(\r\n new CustomEvent('optionSelected', { detail: { option } }),\r\n );\r\n await el.updateComplete;\r\n\r\n expect(el.selectedSort).to.equal('relevance');\r\n expect(el.selectedCreatorFilter).to.be.null;\r\n });\r\n\r\n it('shows sort selector backdrop when mobile sort open', async () => {\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar></sort-filter-bar>\r\n `);\r\n\r\n const mobileDropdown = el.shadowRoot?.querySelector(\r\n '#mobile-dropdown',\r\n ) as IaDropdown;\r\n expect(mobileDropdown).to.exist;\r\n\r\n const caret = mobileDropdown?.shadowRoot?.querySelector(\r\n '.caret',\r\n ) as HTMLElement;\r\n expect(caret).to.exist;\r\n\r\n caret?.click();\r\n await el.updateComplete;\r\n\r\n let backdrop = el.shadowRoot?.querySelector(\r\n '#sort-selector-backdrop',\r\n ) as HTMLElement;\r\n expect(backdrop).to.exist;\r\n\r\n backdrop?.click();\r\n await el.updateComplete;\r\n\r\n backdrop = el.shadowRoot?.querySelector(\r\n '#sort-selector-backdrop',\r\n ) as HTMLElement;\r\n expect(backdrop).not.to.exist;\r\n });\r\n\r\n it('shows loansTab top-bar slot Default View', async () => {\r\n const resizeStub = new SharedResizeObserver();\r\n const addSpy = sinon.spy(resizeStub, 'addObserver');\r\n const removeSpy = sinon.spy(resizeStub, 'removeObserver');\r\n\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar .resizeObserver=${resizeStub}></sort-filter-bar>\r\n `);\r\n\r\n // this element exists\r\n expect(el?.shadowRoot?.querySelector('#sort-selector-container')).to.exist;\r\n\r\n // loads & unloads twice when [re]setting ResizeObserver\r\n expect(addSpy.callCount).to.equal(2);\r\n\r\n const resizeStub2 = new SharedResizeObserver();\r\n el.resizeObserver = resizeStub2;\r\n await el.updateComplete;\r\n expect(removeSpy.callCount).to.equal(2);\r\n });\r\n\r\n it('contains sort-options slot when enabled', async () => {\r\n const resizeStub = new SharedResizeObserver();\r\n const addSpy = sinon.spy(resizeStub, 'addObserver');\r\n const removeSpy = sinon.spy(resizeStub, 'removeObserver');\r\n\r\n const el = await fixture<SortFilterBar>(html`\r\n <sort-filter-bar\r\n .resizeObserver=${resizeStub}\r\n .enableSortOptionsSlot=${true}\r\n ></sort-filter-bar>\r\n `);\r\n\r\n await el.updateComplete;\r\n\r\n // slot exists\r\n const sortOptionsSlot = el?.shadowRoot?.querySelector(\r\n 'slot[name=\"sort-options\"]',\r\n );\r\n expect(sortOptionsSlot).to.exist;\r\n\r\n // sort bar does not exist\r\n expect(el?.shadowRoot?.querySelector('#sort-selector-container')).to.not\r\n .exist;\r\n\r\n const resizeStub2 = new SharedResizeObserver();\r\n el.resizeObserver = resizeStub2;\r\n await el.updateComplete;\r\n\r\n // there's no need for resize observer\r\n expect(addSpy.callCount).to.equal(0);\r\n expect(removeSpy.callCount).to.equal(0);\r\n });\r\n});\r\n"]}
|
package/eslint.config.mjs
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
import typescriptEslint from '@typescript-eslint/eslint-plugin';
|
|
2
|
-
import html from 'eslint-plugin-html';
|
|
3
|
-
import tsParser from '@typescript-eslint/parser';
|
|
4
|
-
import path from 'node:path';
|
|
5
|
-
import { fileURLToPath } from 'node:url';
|
|
6
|
-
import js from '@eslint/js';
|
|
7
|
-
import { FlatCompat } from '@eslint/eslintrc';
|
|
8
|
-
|
|
9
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
-
const __dirname = path.dirname(__filename);
|
|
11
|
-
const compat = new FlatCompat({
|
|
12
|
-
baseDirectory: __dirname,
|
|
13
|
-
recommendedConfig: js.configs.recommended,
|
|
14
|
-
allConfig: js.configs.all,
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
export default [
|
|
18
|
-
...compat.extends('plugin:@typescript-eslint/recommended'),
|
|
19
|
-
{
|
|
20
|
-
plugins: {
|
|
21
|
-
'@typescript-eslint': typescriptEslint,
|
|
22
|
-
html,
|
|
23
|
-
},
|
|
24
|
-
|
|
25
|
-
languageOptions: {
|
|
26
|
-
parser: tsParser,
|
|
27
|
-
},
|
|
28
|
-
|
|
29
|
-
settings: {
|
|
30
|
-
'import/resolver': {
|
|
31
|
-
node: {
|
|
32
|
-
extensions: ['.ts', '.tsx'],
|
|
33
|
-
moduleDirectory: ['node_modules', 'src', 'demo'],
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
rules: {
|
|
39
|
-
'@typescript-eslint/no-unsafe-function-type': 'warn',
|
|
40
|
-
'@typescript-eslint/no-unused-vars': 'warn',
|
|
41
|
-
'@typescript-eslint/no-explicit-any': 'warn',
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
ignores: ['**/*.js', '**/*.mjs', '**/*.d.ts'],
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
files: ['**/*.test.ts'],
|
|
49
|
-
rules: {
|
|
50
|
-
'@typescript-eslint/no-unused-expressions': 'off',
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
];
|
|
1
|
+
import typescriptEslint from '@typescript-eslint/eslint-plugin';
|
|
2
|
+
import html from 'eslint-plugin-html';
|
|
3
|
+
import tsParser from '@typescript-eslint/parser';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import js from '@eslint/js';
|
|
7
|
+
import { FlatCompat } from '@eslint/eslintrc';
|
|
8
|
+
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = path.dirname(__filename);
|
|
11
|
+
const compat = new FlatCompat({
|
|
12
|
+
baseDirectory: __dirname,
|
|
13
|
+
recommendedConfig: js.configs.recommended,
|
|
14
|
+
allConfig: js.configs.all,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
export default [
|
|
18
|
+
...compat.extends('plugin:@typescript-eslint/recommended'),
|
|
19
|
+
{
|
|
20
|
+
plugins: {
|
|
21
|
+
'@typescript-eslint': typescriptEslint,
|
|
22
|
+
html,
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
languageOptions: {
|
|
26
|
+
parser: tsParser,
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
settings: {
|
|
30
|
+
'import/resolver': {
|
|
31
|
+
node: {
|
|
32
|
+
extensions: ['.ts', '.tsx'],
|
|
33
|
+
moduleDirectory: ['node_modules', 'src', 'demo'],
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
rules: {
|
|
39
|
+
'@typescript-eslint/no-unsafe-function-type': 'warn',
|
|
40
|
+
'@typescript-eslint/no-unused-vars': 'warn',
|
|
41
|
+
'@typescript-eslint/no-explicit-any': 'warn',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
ignores: ['**/*.js', '**/*.mjs', '**/*.d.ts'],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
files: ['**/*.test.ts'],
|
|
49
|
+
rules: {
|
|
50
|
+
'@typescript-eslint/no-unused-expressions': 'off',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
];
|