From 9dc3867dcac360d66faa853923e4c3d203209645 Mon Sep 17 00:00:00 2001 From: Adam Joseph Arling Date: Tue, 2 Jan 2024 12:57:34 -0500 Subject: [PATCH] Add Playwright integration tests --- .eslintrc.json | 20 +- .github/workflows/playwright.yml | 43 + .gitignore | 6 + README.md | 28 +- components/Facets/Filter/Clear.tsx | 1 - components/Footer/Footer.tsx | 2 +- components/Header/Super.tsx | 1 + components/Nav/Nav.tsx | 2 +- components/Shared/Container.tsx | 3 + components/Shared/SVG/Northwestern.tsx | 1 + cypress.config.ts | 11 - cypress/.eslintrc.json | 8 - cypress/e2e/homepage/homepage.cy.ts | 32 - cypress/e2e/item/item.cy.ts | 15 - cypress/e2e/search/search.cy.ts | 285 -- cypress/fixtures/example.json | 5 - cypress/fixtures/item/manifest1.json | 39 - .../fixtures/search/aggregations/aggs1.json | 44 - .../fixtures/search/aggregations/aggs2.json | 68 - cypress/fixtures/search/pagination/page1.json | 334 -- .../fixtures/search/pagination/page15.json | 134 - cypress/fixtures/search/pagination/page2.json | 335 -- cypress/fixtures/search/pagination/page3.json | 335 -- cypress/fixtures/search/response1.js | 64 - cypress/fixtures/search/response1.json | 53 - cypress/support/commands.ts | 37 - cypress/support/e2e.ts | 20 - cypress/support/index.ts | 24 - cypress/tsconfig.json | 8 - jest.config.js | 1 + package-lock.json | 3774 ++++++++--------- package.json | 12 +- playwright-report/index.html | 34 +- playwright.config.ts | 81 + tests/fixtures/open-graph.ts | 86 + tests/fixtures/search-page.ts | 44 + tests/fixtures/work-page.ts | 7 + tests/fixtures/works/canary-work.ts | 398 ++ tests/home.spec.ts | 24 + tests/layout.spec.ts | 44 + tests/search.spec.ts | 506 +++ tests/work.spec.ts | 545 +++ tsconfig.json | 67 +- 43 files changed, 3764 insertions(+), 3817 deletions(-) create mode 100644 .github/workflows/playwright.yml delete mode 100644 cypress.config.ts delete mode 100644 cypress/.eslintrc.json delete mode 100644 cypress/e2e/homepage/homepage.cy.ts delete mode 100644 cypress/e2e/item/item.cy.ts delete mode 100644 cypress/e2e/search/search.cy.ts delete mode 100644 cypress/fixtures/example.json delete mode 100644 cypress/fixtures/item/manifest1.json delete mode 100644 cypress/fixtures/search/aggregations/aggs1.json delete mode 100644 cypress/fixtures/search/aggregations/aggs2.json delete mode 100644 cypress/fixtures/search/pagination/page1.json delete mode 100644 cypress/fixtures/search/pagination/page15.json delete mode 100644 cypress/fixtures/search/pagination/page2.json delete mode 100644 cypress/fixtures/search/pagination/page3.json delete mode 100644 cypress/fixtures/search/response1.js delete mode 100644 cypress/fixtures/search/response1.json delete mode 100644 cypress/support/commands.ts delete mode 100644 cypress/support/e2e.ts delete mode 100644 cypress/support/index.ts delete mode 100644 cypress/tsconfig.json create mode 100644 playwright.config.ts create mode 100644 tests/fixtures/open-graph.ts create mode 100644 tests/fixtures/search-page.ts create mode 100644 tests/fixtures/work-page.ts create mode 100644 tests/fixtures/works/canary-work.ts create mode 100644 tests/home.spec.ts create mode 100644 tests/layout.spec.ts create mode 100644 tests/search.spec.ts create mode 100644 tests/work.spec.ts diff --git a/.eslintrc.json b/.eslintrc.json index 855f5a80..62b703ce 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -6,13 +6,21 @@ "prettier" ], "overrides": [ - // Only uses Testing Library lint rules in test files + // // Only uses Testing Library lint rules in test files + // { + // "files": [ + // "**/__tests__/**/*.[jt]s?(x)", + // "**/?(*.)+(spec|test).[jt]s?(x)" + // ], + // "extends": ["plugin:testing-library/react"] + // }, + + // Overrides for Playwright tests { - "files": [ - "**/__tests__/**/*.[jt]s?(x)", - "**/?(*.)+(spec|test).[jt]s?(x)" - ], - "extends": ["plugin:testing-library/react"] + "files": ["tests/**/*.[jt]s?(x)"], + "rules": { + "testing-library/prefer-screen-queries": "off" + } } ], "rules": { diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml new file mode 100644 index 00000000..eb95b77c --- /dev/null +++ b/.github/workflows/playwright.yml @@ -0,0 +1,43 @@ +name: Playwright Tests +on: + push: + branches: [main, deploy-staging, 4284-playwright-setup] + pull_request: + branches: [main, deploy-staging] +jobs: + test: + timeout-minutes: 10 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 18 + - name: Install dependencies + run: npm ci + + - name: Install Playwright Browsers + run: npx playwright install --with-deps + + - name: Build app + run: npm run build + env: + NEXT_PUBLIC_DCAPI_ENDPOINT: ${{ secrets.NEXT_PUBLIC_DCAPI_ENDPOINT }} + + - name: Start app + run: npm run start & + + - name: Wait for server + run: npx wait-on http://localhost:3000 + + - name: Run Playwright tests + run: npx playwright test + env: + BASE_URL: ${{ secrets.BASE_URL }} + + - uses: actions/upload-artifact@v3 + if: always() + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 diff --git a/.gitignore b/.gitignore index 3c5de8d9..075be015 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,9 @@ yarn-error.log* # vscode /.vscode/* + +# playwright +/test-results/ +/playwright-report/* +/blob-report/ +/playwright/.cache/ diff --git a/README.md b/README.md index 1bddff02..02e34b2f 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,6 @@ Digital Collections v2 (DCv2) is a UI application for discovering and interactin The following dependencies should be "pinned" or held behind `@latest` versions -- `next`: We've experienced issues with the AWS Amplify build process when using `@latest` versions of NextJS. To be safe, in general we should pin NextJS to >= 1 minor versions behind `next@latest`. - `@elastic/elasticsearch`: To match the version of `OpenSearch` our app uses. - `swiper` - `@honeybadger-io/js` @@ -123,17 +122,34 @@ A pre-commit hook will ensure code is linted before committed. ### End to end tests -Test fixtures can be accessed by pointing the app to a [Test Environment API](https://github.com/nulib/dc-test-environment). Setting the `NEXT_PUBLIC_DCAPI_ENDPOINT` `env` variable value to https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2 will run DC v2 against test data. The following commands start your server and the test suite. +Test fixtures can be accessed by pointing the app to a [Test Environment API](https://github.com/nulib/dc-test-environment). ```bash -# Start local server +NEXT_PUBLIC_DCAPI_ENDPOINT="https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2" +``` + +```bash +# Start local server (automatically points NEXT_PUBLIC_DCAPI_ENDPOINT to the test data API) npm run dev:test-env -# Start Cypress test runner -npm run cypress:open +# If in AWS Dev Environment, set a BASE_URL environment variable in a .env.local file +BASE_URL="[YOUR_DEV_ID].dev.rdc.library.northwestern.edu" + +# Start Playwright tests in headless mode +npm run test:playwright +``` + +To run more visual tests, try experimenting with: + +```bash +# Run in an interactive test browser to visually see tests run +npx playwright test --ui + +# Run all tests in headed mode +npx playwright test --headed ``` -E2E tests use [Cypress](https://docs.cypress.io/), and are linted with [Cypress ESLint Plugin](https://github.com/cypress-io/eslint-plugin-cypress). +For more info, view the docs: [Playwright](https://playwright.dev/). ### Unit tests diff --git a/components/Facets/Filter/Clear.tsx b/components/Facets/Filter/Clear.tsx index 2e2d49c6..e4236c9b 100644 --- a/components/Facets/Filter/Clear.tsx +++ b/components/Facets/Filter/Clear.tsx @@ -20,7 +20,6 @@ const FilterClear: React.FC = ({ isModal = false }) => { } = router; const handleClear = () => { - console.log("Clear click"); isModal ? filterDispatch({ type: "updateUserFacets", diff --git a/components/Footer/Footer.tsx b/components/Footer/Footer.tsx index ffa71d95..201bbab0 100644 --- a/components/Footer/Footer.tsx +++ b/components/Footer/Footer.tsx @@ -7,7 +7,7 @@ import SiteContentMessage from "./SiteContentMessage/SiteContentMessage"; export default function Footer() { return ( - + diff --git a/components/Header/Super.tsx b/components/Header/Super.tsx index 28e7b1ed..8724e606 100644 --- a/components/Header/Super.tsx +++ b/components/Header/Super.tsx @@ -5,6 +5,7 @@ import { Super, User, } from "@/components/Header/Header.styled"; + import Container from "../Shared/Container"; import { DCAPI_ENDPOINT } from "@/lib/constants/endpoints"; import Link from "next/link"; diff --git a/components/Nav/Nav.tsx b/components/Nav/Nav.tsx index 8dacddb4..b6b533e4 100644 --- a/components/Nav/Nav.tsx +++ b/components/Nav/Nav.tsx @@ -6,7 +6,7 @@ interface NavProps { } const Nav: React.FC = ({ children }) => { - return {children}; + return {children}; }; export default Nav; diff --git a/components/Shared/Container.tsx b/components/Shared/Container.tsx index dee88ed8..d582b368 100644 --- a/components/Shared/Container.tsx +++ b/components/Shared/Container.tsx @@ -7,6 +7,7 @@ interface ContainerProps { containerType?: "default" | "wide"; isFlex?: boolean; maxWidth?: number; + [key: string]: unknown; } const Container: React.FC = ({ @@ -15,6 +16,7 @@ const Container: React.FC = ({ containerType = "default", isFlex = false, maxWidth, + ...restProps }) => { const manualWidth = maxWidth ? { maxWidth: maxWidth } : {}; @@ -24,6 +26,7 @@ const Container: React.FC = ({ containerType={containerType} css={{ ...manualWidth }} isFlex={isFlex} + {...restProps} > {children} diff --git a/components/Shared/SVG/Northwestern.tsx b/components/Shared/SVG/Northwestern.tsx index b435575e..33c5ac05 100644 --- a/components/Shared/SVG/Northwestern.tsx +++ b/components/Shared/SVG/Northwestern.tsx @@ -13,6 +13,7 @@ const NorthwesternWordmark: React.FC = () => ( { - it("renders the hero slider", () => { - cy.visit("/"); - cy.get(".swiper").within(() => { - cy.get(".swiper-button-prev"); - cy.get(".swiper-button-next").as("nextBtn"); - - cy.get("figure") - .first() - .contains("Edward S. Curtis's The North American Indian") - .should( - "have.attr", - "href", - "https://dc-next.rdc-staging.library.northwestern.edu/collections/55ff2504-dd53-4943-b2cb-aeea46e77bc3" - ); - cy.contains("Crossing the Pend d'Oreille - Kalispel"); - - cy.get("@nextBtn").click(); - - cy.contains("Berkeley Folk Music Festival").should( - "have.attr", - "href", - "https://dc-next.rdc-staging.library.northwestern.edu/collections/18ec4c6b-192a-4ab8-9903-ea0f393c35f7" - ); - cy.contains("Joan Baez"); - }); - }); - - //TODO: Learn more section - - //TODO: Harmful Content -}); diff --git a/cypress/e2e/item/item.cy.ts b/cypress/e2e/item/item.cy.ts deleted file mode 100644 index f321eccc..00000000 --- a/cypress/e2e/item/item.cy.ts +++ /dev/null @@ -1,15 +0,0 @@ -describe("Item page", () => { - it("renders page content", () => { - cy.fixture("/item/manifest1.json").then((json) => { - cy.intercept( - "GET", - "https://iiif.stack.rdc-staging.library.northwestern.edu/public/4b/d4/e8/bd/-8/66/5-/4b/b8/-9/a5/5-/f3/ab/dd/65/aa/98-manifest.json", - json - ); - cy.visit( - "https://devbox.library.northwestern.edu:3000/items/4bd4e8bd-8665-4bb8-9a55-f3abdd65aa98" - ); - cy.get("[data-testid='work-viewer-wrapper']"); - }); - }); -}); diff --git a/cypress/e2e/search/search.cy.ts b/cypress/e2e/search/search.cy.ts deleted file mode 100644 index 783a8c2e..00000000 --- a/cypress/e2e/search/search.cy.ts +++ /dev/null @@ -1,285 +0,0 @@ -const DEFAULT_PAGINATION_SIZE = 40; -const TOTAL_RESULTS = 182; - -function getPaginationResults(count: number) { - return count > DEFAULT_PAGINATION_SIZE ? DEFAULT_PAGINATION_SIZE : count; -} - -function verifyGridItemCount(count = 0) { - const paginationResults = getPaginationResults(count); - cy.get("[data-testid='grid-item']").should("have.length", paginationResults); -} - -function verifyTopResultsCount(count: number) { - cy.get("[data-testid='results-count']").contains(`${count} results`); -} - -describe("Search page component", () => { - it("renders the global search bar and fires off a successful searches", () => { - cy.visit("/search"); - - const searches = [ - { - expectedResultCount: 4, - term: "Obama", - }, - { - expectedResultCount: 32, - term: "Illinois", - }, - { - expectedResultCount: 8, - term: "Berkeley", - }, - ]; - - /** Test Search only functionality */ - cy.get("form[data-testid='search-ui-component'] input").as("searchInput"); - cy.contains("Search").as("searchBtn"); - verifyTopResultsCount(TOTAL_RESULTS); - verifyGridItemCount(TOTAL_RESULTS); - - searches.forEach((s) => { - cy.get("@searchInput").clear().type(s.term); - - cy.get("@searchBtn").click(); - cy.url().should("include", `/search?q=${s.term}`); - verifyTopResultsCount(s.expectedResultCount); - cy.get("@searchInput").should("have.value", s.term); - - const paginationResults = getPaginationResults(s.expectedResultCount); - verifyGridItemCount(s.expectedResultCount); - cy.contains( - `Showing 1 to ${paginationResults} of ${paginationResults} results` - ); - }); - - /** Reset search input */ - cy.get("button[type='reset']").click(); - cy.url().should("include", `/search`); - verifyTopResultsCount(TOTAL_RESULTS); - verifyGridItemCount(TOTAL_RESULTS); - }); - - it("renders Facet filter buttons above the grid correctly", () => { - cy.visit("/search"); - - /** Work Type facet top buttons */ - cy.get("[data-testid='facet-inline-component']").within(() => { - cy.contains("All").as("allBtn"); - cy.contains("Image").as("imageBtn"); - cy.contains("Audio").as("audioBtn"); - cy.contains("Video").as("videoBtn"); - }); - - cy.get("@allBtn").parent().should("have.attr", "aria-checked", "true"); - cy.get("@imageBtn").parent().should("have.attr", "aria-checked", "false"); - - cy.get("@imageBtn").click(); - cy.get("@imageBtn").parent().should("have.attr", "aria-checked", "true"); - cy.get("@allBtn").parent().should("have.attr", "aria-checked", "false"); - verifyTopResultsCount(136); - verifyGridItemCount(136); - - cy.get("@audioBtn").click(); - cy.get("@audioBtn").parent().should("have.attr", "aria-checked", "true"); - cy.get("@imageBtn").parent().should("have.attr", "aria-checked", "false"); - verifyTopResultsCount(21); - verifyGridItemCount(21); - - cy.get("@videoBtn").click(); - cy.get("@videoBtn").parent().should("have.attr", "aria-checked", "true"); - cy.get("@audioBtn").parent().should("have.attr", "aria-checked", "false"); - verifyTopResultsCount(25); - verifyGridItemCount(25); - - /** Test Public Works toggle */ - cy.get("@allBtn").click(); - cy.contains("Public works only") - .siblings("button[role='switch']") - .as("publicWorksToggle") - .click(); - verifyTopResultsCount(114); - verifyGridItemCount(114); - - /** Test Filter Facet Toggle UI */ - cy.contains("Clear All").click(); - cy.get("[data-testid='facet-user-component']").as("facetUserComponent"); - cy.get("@facetUserComponent").should("not.exist"); - cy.get("@imageBtn").click(); - cy.get("@facetUserComponent") - .should("exist") - .within(() => { - cy.contains("1"); - }); - /** Tests the facet count tag value updates */ - cy.get("@publicWorksToggle").click({ force: true }); - cy.get("@facetUserComponent").within(() => { - cy.contains("2"); - }); - }); - - it("renders the Filter modal and interactions within", () => { - cy.visit("/search"); - cy.contains("Filter").as("filterBtn").click(); - cy.get("[data-testid='modal-content']").within(() => { - describe("Verify main modal structure components on modal load", () => { - cy.get("header").contains("Filter"); - cy.get("[data-testid='facets-filter-close']"); - cy.get("footer button").contains("Clear All").as("clearAllBtn"); - cy.get("footer button").contains("Cancel").as("cancelBtn"); - cy.get("[data-testid='facets-submit'] button").as("viewResultsBtn"); - }); - - /** Facet category menu buttons display */ - /** Subject and Description Facets category defaults to open on load */ - - cy.get("[data-testid='facets-group-list']").within(() => { - cy.get("h3 button") - .contains("Subject and Descriptive") - .as("subjectsAndDescriptiveBtn"); - - /** Displays Subject and Description children facets */ - cy.contains("Genre"); - cy.contains("Language"); - cy.contains("Style Period"); - cy.contains("Subject"); - cy.contains("Technique"); - cy.contains("Work Type"); - - /** Displays other Facet categories */ - cy.contains("Collection and Location"); - cy.contains("Creator and Contributor").as("creatorAndContributorBtn"); - cy.contains("Rights and Usage"); - }); - - /** Test interacting with a Facet */ - cy.get("button").contains("Style Period").click(); - cy.get("h3").contains("Style Period"); - cy.get("[data-testid='facet-find'] input").as("facetFilterInput"); - cy.get("@facetFilterInput").should("have.value", ""); - cy.get("@facetFilterInput").should( - "have.attr", - "placeholder", - "Find Style Period" - ); - cy.get("[data-testid='facet-options']") - .as("facetOptions") - .children() - .should("have.length", 6); - - /** Test facet input filter doesn't care about capitalization */ - cy.get("@facetFilterInput").type("a", { force: true }); - cy.get("@facetOptions").children().should("have.length", 4); - cy.get("@facetFilterInput").clear().type("A", { force: true }); - cy.get("@facetOptions").children().should("have.length", 4); - - /** Test filtering of facets */ - cy.get("@facetFilterInput").clear(); - cy.get("[data-testid='facets-group-list'] div[role='tablist'] button") - .contains("Subject") - .as("subjectBtn") - .click(); - cy.get("@facetFilterInput").type("foo", { force: true }); - cy.get("@facetOptions").children().should("have.length", 14); - cy.get("@facetFilterInput").clear().type("Rose", { force: true }); - cy.get("@facetOptions").children().should("have.length", 2); - - /** Test narrowing checkbox selections across Facets */ - cy.get("@facetFilterInput").clear(); - cy.get("@clearAllBtn").click(); - - cy.get("[data-testid='facets-group-list'] div[role='tablist'] button") - .contains("Genre") - .click(); - cy.get("@facetOptions").within(() => { - cy.contains("photographs").click(); - }); - cy.get("@facetOptions").children().should("have.length", 2); - cy.get("@viewResultsBtn").should("have.text", "View Results (13)"); - cy.get("li[data-testid='facets-filter-preview-item']") - .as("previewResultItems") - .should("have.length", 5); - - cy.get("@subjectBtn").click(); - cy.get("@facetOptions").within(() => { - cy.contains("Women").click(); - }); - cy.get("@viewResultsBtn").should("have.text", "View Results (2)"); - cy.get("@previewResultItems").should("have.length", 2); - cy.get("@facetOptions").within(() => { - cy.contains("British").click(); - }); - cy.get("@viewResultsBtn").should("have.text", "View Results (1)"); - cy.get("@previewResultItems").should("have.length", 1); - - /** Display interactive active facets in Filter modal header */ - cy.get("@clearAllBtn").click(); - cy.get("@facetFilterInput").clear(); - - cy.get("@subjectBtn").click(); - cy.get("@facetOptions").contains("British Columbia").click(); - cy.get("[data-testid='facet-user-value-component']") - .as("activeUserFacet") - .should("have.length", 1); - cy.get("@activeUserFacet").contains("British Columbia"); - cy.get("@activeUserFacet").contains("Subject"); - - cy.get("@creatorAndContributorBtn").click(); - cy.get("[data-testid='facet-value-button']") - .as("facetValueBtn") - .contains("Contributor") - .click(); - cy.get("@facetOptions") - .contains("Curtis, Edward S., 1868-1952 (Publisher)") - .click(); - cy.get("@activeUserFacet").should("have.length", 2); - cy.get("@activeUserFacet").contains( - "Curtis, Edward S., 1868-1952 (Publisher)" - ); - cy.get("@activeUserFacet").contains("Contributor"); - - /** Removes above active facets successfully */ - cy.get("@viewResultsBtn").contains("View Results (5)"); - cy.get("@activeUserFacet").contains("British Columbia").click(); - cy.get("@activeUserFacet").should("have.length", 1); - cy.get("@viewResultsBtn").contains("View Results (6)"); - cy.get("@activeUserFacet") - .contains("Curtis, Edward S., 1868-1952 (Publisher)") - .click(); - cy.get("@activeUserFacet").should("have.length", 0); - cy.get("@viewResultsBtn").contains("View Results (182)"); - }); - }); - - it("Shows and hides the filter modal", () => { - cy.visit("/search"); - verifyTopResultsCount(TOTAL_RESULTS); - cy.get("[data-testid='modal-content']").should("not.exist"); - cy.contains("Filter").as("filterBtn").click(); - cy.get("[data-testid='modal-content']").as("filterModal").should("exist"); - - /** Top Close button does not update Search Results */ - cy.contains("Chamber music groups").click(); - cy.contains("View Results (7)"); - cy.get("header [data-testid='facets-filter-close']").click(); - cy.get("@filterModal").should("not.exist"); - verifyTopResultsCount(TOTAL_RESULTS); - - /** Footer Cancel button does not update Search Results */ - cy.get("@filterBtn").click(); - cy.contains("Film posters").click(); - cy.contains("View Results (5)"); - cy.contains("Cancel").click(); - verifyTopResultsCount(TOTAL_RESULTS); - - /** View Results Button updates Search */ - cy.get("@filterBtn").click(); - cy.contains("Language").click(); - cy.contains("French").click(); - cy.contains("View Results (11)").click(); - verifyTopResultsCount(11); - verifyGridItemCount(11); - cy.get("[data-testid='facet-user-component']").contains("1"); - }); -}); diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json deleted file mode 100644 index 02e42543..00000000 --- a/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io", - "body": "Fixtures are a great way to mock data for responses to routes" -} diff --git a/cypress/fixtures/item/manifest1.json b/cypress/fixtures/item/manifest1.json deleted file mode 100644 index d83f05a3..00000000 --- a/cypress/fixtures/item/manifest1.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "label": "Staff for Testing", - "sequences": [ - { - "canvases": [ - { - "height": "480", - "images": [ - { - "motivation": "sc:painting", - "on": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/4b/d4/e8/bd/-8/66/5-/4b/b8/-9/a5/5-/f3/ab/dd/65/aa/98-manifest.json/canvas/907c8fde-38a3-4a72-8ea4-0a35605d1ab7", - "resource": { - "label": "inu-dil-2bffba2b-5883-4155-a234-75cfbd9f5157.tif", - "service": { - "profile": "http://iiif.io/api/image/2/level2.json", - "@context": "http://iiif.io/api/image/2/context.json", - "@id": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/907c8fde-38a3-4a72-8ea4-0a35605d1ab7" - }, - "@id": "https://iiif.stack.rdc.library.northwestern.edu/iiif/2/76c26a0a-0454-48d8-a225-9fc26735315b/full/pct:10/0/default.jpg", - "@type": "dctypes:Image" - }, - "@type": "oa:Annotation" - } - ], - "label": "inu-dil-2bffba2b-5883-4155-a234-75cfbd9f5157.tif", - "width": "640", - "@id": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/4b/d4/e8/bd/-8/66/5-/4b/b8/-9/a5/5-/f3/ab/dd/65/aa/98-manifest.json/canvas/907c8fde-38a3-4a72-8ea4-0a35605d1ab7", - "@type": "sc:Canvas" - } - ], - "@context": "http://iiif.io/api/presentation/2/context.json", - "@id": "/sequence/normal", - "@type": "sc:Sequence" - } - ], - "@context": "http://iiif.io/api/presentation/2/context.json", - "@id": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/4b/d4/e8/bd/-8/66/5-/4b/b8/-9/a5/5-/f3/ab/dd/65/aa/98-manifest.json", - "@type": "sc:Manifest" -} diff --git a/cypress/fixtures/search/aggregations/aggs1.json b/cypress/fixtures/search/aggregations/aggs1.json deleted file mode 100644 index f573847f..00000000 --- a/cypress/fixtures/search/aggregations/aggs1.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "data": [], - "pagination": { - "query_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQBgDQgH0kIBXAJwGMt4BtEAQwqqVQgDsC2SBbMDMkPhRRBIFOIBmBbvTYoJGJABdRSlEoA2WfEoAWPMG3ooNogO4QyAawJKYABywBdfAEcS-OInAQIp79wkygg0TgC%2BEfjc0BgaSCEgFtbxLiASljIq8CBQGBL0JBoq%2BBD2auzxiBFAA", - "current_page": 1, - "limit": 10, - "offset": 0, - "total_hits": 575, - "total_pages": 58, - "next_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQBgDQgH0kIBXAJwGMt4BtEAQwqqVQgDsC2SBbMDMkPhRRBIFOIBmBbvTYoJGJABdRSlEoA2WfEoAWPMG3ooNogO4QyAawJKYABywBdfAEcS-OInAQIp79wkygg0TgC%2BEfjc0BgaSCEgFtbxLiASljIq8CBQGBL0JBoq%2BBD2auzxiBFAA&page=2" - }, - "info": {}, - "aggregations": { - "subject": { - "doc_count_error_upper_bound": 5, - "sum_other_doc_count": 842, - "buckets": [ - { "key": "Adam", "doc_count": 88 }, - { "key": "Painting", "doc_count": 80 }, - { "key": "Berkeley (Calif.)", "doc_count": 12 }, - { "key": "Buddhist art", "doc_count": 11 }, - { "key": "Northwestern University (Evanston, Ill.)", "doc_count": 11 }, - { "key": "Church architecture", "doc_count": 10 }, - { "key": "Giant panda", "doc_count": 10 }, - { "key": "Olivier, Barry, 1935-", "doc_count": 10 }, - { "key": "Illinois--Evanston", "doc_count": 8 }, - { "key": "19th century", "doc_count": 7 }, - { "key": "College students", "doc_count": 7 }, - { "key": "Architecture, Domestic", "doc_count": 6 }, - { - "key": "Berkeley Folk Music Festival (6th : 1963 : Berkeley, Calif.)", - "doc_count": 6 - }, - { "key": "Hinton, Sam, 1917-2009", "doc_count": 5 }, - { "key": "Peace movements", "doc_count": 5 }, - { "key": "San Francisco (Calif.)", "doc_count": 5 }, - { "key": "San Francisco chronicle", "doc_count": 5 }, - { "key": "University of California, Berkeley", "doc_count": 5 }, - { "key": "20th century", "doc_count": 4 }, - { "key": "Anti-war demonstrations", "doc_count": 4 } - ] - } - } -} diff --git a/cypress/fixtures/search/aggregations/aggs2.json b/cypress/fixtures/search/aggregations/aggs2.json deleted file mode 100644 index b7e5b828..00000000 --- a/cypress/fixtures/search/aggregations/aggs2.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "data": [], - "pagination": { - "query_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQBgDQgH0kIBXAJwGMt4BtEAQwqqVQgDsC2SBbMDMkPhRRBIFOIBmBbvTYoJGJABdRSlEoA2WfEoAWPMG3ooNogO4QyAawJKYABywBdfAEcS-OInAQIp79wkygg0TgC%2BEfjc0BgaSCEgFtbxLiASljIq8CBQGBL0JBoq%2BBD2auzxiBFAA", - "current_page": 1, - "limit": 10, - "offset": 0, - "total_hits": 575, - "total_pages": 58, - "next_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQBgDQgH0kIBXAJwGMt4BtEAQwqqVQgDsC2SBbMDMkPhRRBIFOIBmBbvTYoJGJABdRSlEoA2WfEoAWPMG3ooNogO4QyAawJKYABywBdfAEcS-OInAQIp79wkygg0TgC%2BEfjc0BgaSCEgFtbxLiASljIq8CBQGBL0JBoq%2BBD2auzxiBFAA&page=2" - }, - "info": {}, - "aggregations": { - "subject": { - "doc_count_error_upper_bound": 0, - "sum_other_doc_count": 67, - "buckets": [ - { "key": "Berkeley (Calif.)", "doc_count": 12 }, - { "key": "San Francisco (Calif.)", "doc_count": 7 }, - { - "key": "Berkeley Folk Music Festival (6th : 1963 : Berkeley, Calif.)", - "doc_count": 6 - }, - { "key": "Los Angeles (Calif.)", "doc_count": 5 }, - { "key": "University of California, Berkeley", "doc_count": 5 }, - { "key": "University of California, Los Angeles", "doc_count": 5 }, - { - "key": "Berkeley Folk Music Festival (7th : 1964 : Berkeley, Calif.)", - "doc_count": 4 - }, - { - "key": "Wild West Festival (1969 : San Francisco, Calif.)", - "doc_count": 4 - }, - { - "key": "Northwestern University (Evanston, Ill.). Traffic Institute", - "doc_count": 3 - }, - { "key": "Relief (Sculpture)", "doc_count": 3 }, - { - "key": "William Randolph Hearst Greek Theatre (Berkeley, Calif.)", - "doc_count": 3 - }, - { - "key": "Berkeley Folk Music Festival (5th : 1962 : Berkeley, Calif.)", - "doc_count": 2 - }, - { "key": "Defense work", "doc_count": 2 }, - { "key": "Driftwood, Jimmie", "doc_count": 2 }, - { - "key": "KQED-TV (Television station : San Francisco, Calif.)", - "doc_count": 2 - }, - { "key": "NUL Items for Review", "doc_count": 2 }, - { "key": "Richmond (Calif.)", "doc_count": 2 }, - { - "key": "Richmond Festival of the Arts (1965 : Richmond, Calif.)", - "doc_count": 2 - }, - { - "key": "Richmond Memorial Auditorium (Richmond, Calif.)", - "doc_count": 2 - }, - { "key": "Self-portraits", "doc_count": 2 } - ] - } - } -} diff --git a/cypress/fixtures/search/pagination/page1.json b/cypress/fixtures/search/pagination/page1.json deleted file mode 100644 index 1cf5f232..00000000 --- a/cypress/fixtures/search/pagination/page1.json +++ /dev/null @@ -1,334 +0,0 @@ -{ - "data": [ - { - "accession_number": "BFMF_B03_F19_005_001n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/ac987e48-b6a5-4d34-b5e0-1d2006996a44/full/!300,300/0!/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/8d/71/0f/86/-e/c5/4-/43/cf/-9/ec/4-/eb/71/b1/c9/0c/5dD-manifest.json", - "work_type": "Image", - "id": "8d710f86-ec54-43cf-9ec4-eb71b1c90c5d", - "title": "Mimi Farina" - }, - { - "accession_number": "BFMF_B19_F11_006_010n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/95b354c0-c03b-4e41-ab7f-429e654159fe/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/75/2c/bc/86/-4/b3/5-/4a/20/-b/06/a-/b8/70/88/c1/64/cc-manifest.json", - "work_type": "Image", - "id": "752cbc86-4b35-4a20-b06a-b87088c164cc", - "title": "Sam Hinton, Richmond Festival of the Arts folk song concert" - }, - { - "accession_number": "BFMF_B06_F11_010_020n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/3dff9186-99a8-4836-9a08-9e1db0fede05/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/43/89/ed/19/-c/21/a-/46/70/-8/8d/8-/8e/d9/19/72/d9/8f-manifest.json", - "work_type": "Image", - "id": "4389ed19-c21a-4670-88d8-8ed91972d98f", - "title": "Kathy and Carol" - }, - { - "accession_number": "BFMF_B33_F05_031", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/d673dfb7-505b-4a81-9d77-da01b1ccc5cc/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ca/90/1f/24/-e/52/6-/48/ef/-9/86/e-/b2/0c/ef/36/2b/2a-manifest.json", - "work_type": "Image", - "id": "ca901f24-e526-48ef-986e-b20cef362b2a", - "title": "'Tiny Alice': Is it a hoax, a curdled brew of mysticism" - }, - { - "accession_number": "BFMF_B33_F13_006", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/a1e186b9-043a-4e75-af6a-096678d3a2a8/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/e6/4c/63/e6/-d/ff/8-/43/9f/-9/30/f-/08/36/c4/ee/f5/6b-manifest.json", - "work_type": "Image", - "id": "e64c63e6-dff8-439f-930f-0836c4eef56b", - "title": "VITA - Archie Green" - }, - { - "accession_number": "BFMF_B31_F04_040", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/46086c41-0fc0-4cc2-b2da-cdbbc0db7ab5/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/f1/8a/02/ba/-4/20/e-/45/94/-a/c4/9-/33/d3/e6/ec/d5/9b-manifest.json", - "work_type": "Image", - "id": "f18a02ba-420e-4594-ac49-33d3e6ecd59b", - "title": "Cowboy singer Slim Critchlow dies in Oakland" - }, - { - "accession_number": "BFMF_B05_F08_006", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/812edd1e-e767-4ed3-919d-46d7afe161f8/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/fa/55/da/0d/-8/b3/7-/4f/08/-8/49/1-/a1/a5/32/1e/44/23-manifest.json", - "work_type": "Image", - "id": "fa55da0d-8b37-4f08-8491-a1a5321e4423", - "title": "Roscoe Holcomb" - }, - { - "accession_number": "BFMF_B56_F13_010", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/6444cf38-da9a-4f66-8128-a58189ab5613/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/cf/4a/ef/d2/-7/fa/a-/42/ce/-b/89/d-/46/48/9e/c1/19/36-manifest.json", - "work_type": "Image", - "id": "cf4aefd2-7faa-42ce-b89d-46489ec11936", - "title": "Budweiser ad" - }, - { - "accession_number": "BFMF_B09_F20_047_024n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/97a8bea4-74d9-4227-91da-1b28f5207d83/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/41/9b/d5/45/-6/1e/f-/45/32/-9/0d/3-/62/3d/d7/5d/5e/26-manifest.json", - "work_type": "Image", - "id": "419bd545-61ef-4532-90d3-623dd75d5e26", - "title": "Jean Redpath" - }, - { - "accession_number": "BFMF_B09_F17_009", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/5a843953-83bd-416f-b4b4-92284f9b5c42/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/4e/40/34/4a/-5/d1/2-/43/de/-9/bb/7-/75/c2/16/b0/e6/03-manifest.json", - "work_type": "Image", - "id": "4e40344a-5d12-43de-9bb7-75c216b0e603", - "title": "Pine Valley Boys, El Cerrito Plaza" - }, - { - "accession_number": "BFMF_B48_F08_047", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/39802352-ed19-4256-a9f3-eb76ff93ad67/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/b8/94/95/36/-6/71/4-/44/6e/-9/3d/3-/e2/86/60/e7/46/c7-manifest.json", - "work_type": "Image", - "id": "b8949536-6714-446e-93d3-e28660e746c7", - "title": "Memo to Arita Press about ticket printing" - }, - { - "accession_number": "BFMF_B45_F02_078", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/05d68a65-aadb-402f-b90c-070a3a2cf612/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/d8/c9/03/dd/-f/02/9-/46/98/-a/c6/b-/00/c3/0d/3c/b2/d3-manifest.json", - "work_type": "Image", - "id": "d8c903dd-f029-4698-ac6b-00c30d3cb2d3", - "title": "Letter from Jane Welch to Barry Olivier" - }, - { - "accession_number": "BFMF_B32_F07_047", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/7c6523c9-b855-473c-81f9-a252b70268b1/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/fe/27/38/ff/-6/13/6-/46/52/-8/bc/c-/cc/08/aa/a8/4b/b2-manifest.json", - "work_type": "Image", - "id": "fe2738ff-6136-4652-8bcc-cc08aaa84bb2", - "title": "Billy Faier flier" - }, - { - "accession_number": "StreamingTestPublic", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/b6/5d/e0/cc/-9/77/6-/44/66/-b/b9/7-/83/64/f9/e7/d3/67-manifest.json", - "work_type": "Video", - "id": "b65de0cc-9776-4466-bb97-8364f9e7d367", - "title": "StreamingTestPublic" - }, - { - "accession_number": "BFMF_B46_F16_058", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/f26a2c04-a1d8-4632-83f5-4376968ae030/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/de/86/f4/37/-6/24/6-/4c/ed/-a/b3/8-/a2/ce/34/6a/fa/c5-manifest.json", - "work_type": "Image", - "id": "de86f437-6246-4ced-ab38-a2ce346afac5", - "title": "Critical commentary on the 1967 Berkeley Folk Music Festival" - }, - { - "accession_number": "BFMF_B13_F01_022_021n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/66e2843d-5159-4948-b38b-4bac496562db/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/e8/04/de/37/-f/7d/3-/43/7d/-a/b1/7-/5b/53/5c/66/50/ab-manifest.json", - "work_type": "Image", - "id": "e804de37-f7d3-437d-ab17-5b535c6650ab", - "title": "Sam Hinton, UCLA Folk Festival" - }, - { - "accession_number": "BFMF_B06_F11_008_008n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/435693a1-3969-42f0-a757-ec98c0042c4f/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/8e/2d/6b/c5/-3/f0/0-/45/d1/-8/80/b-/a4/58/cd/df/0c/1c-manifest.json", - "work_type": "Image", - "id": "8e2d6bc5-3f00-45d1-880b-a458cddf0c1c", - "title": "Kathy, Carol, and Charles" - }, - { - "accession_number": "BFMF_B19_F08_008_027n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/37d8b390-525d-4258-849e-009cddba33be/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/32/44/e1/cb/-d/e4/b-/4b/e3/-a/73/9-/b3/dd/8f/6c/2a/49-manifest.json", - "work_type": "Image", - "id": "3244e1cb-de4b-4be3-a739-b3dd8f6c2a49", - "title": "Clouds" - }, - { - "accession_number": "BFMF_B09_F12_029", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/585c22a1-7abf-425c-a15c-d1a7139a4b65/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/0e/35/3a/1d/-4/03/8-/4e/5b/-b/6c/9-/7e/8b/12/df/30/3b-manifest.json", - "work_type": "Image", - "id": "0e353a1d-4038-4e5b-b6c9-7e8b12df303b", - "title": "Caroline and Sandy Paton" - }, - { - "accession_number": "Voyager:Lif1849", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/a10bc580-4ebe-46d8-91c3-7d4c0535c92c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/2f/d3/4c/54/-b/67/3-/42/51/-b/43/6-/d3/9c/ae/0f/68/27-manifest.json", - "work_type": "Image", - "id": "2fd34c54-b673-4251-b436-d39cae0f6827", - "title": "The Annunciation Altar (total with predella). Predella: presentation in Temple" - }, - { - "accession_number": "Voyager:243193", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/21d2e632-1420-4731-8830-04670049cf16/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/82/d1/ca/cb/-0/8c/b-/48/d1/-8/b4/7-/1a/95/be/b3/d4/e6-manifest.json", - "work_type": "Image", - "id": "82d1cacb-08cb-48d1-8b47-1a95beb3d4e6", - "title": "Church of Sao Francisco de Assis. Interior" - }, - { - "accession_number": "Voyager:Mvd0652", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/0816716c-d2db-40e2-800d-4c747b5b0ecc/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a4/bf/61/8f/-9/c9/d-/4a/e5/-9/0c/c-/a5/33/0a/c3/35/01-manifest.json", - "work_type": "Image", - "id": "a4bf618f-9c9d-4ae5-90cc-a5330ac33501", - "title": "Altar of the Holy Sacrament. very close detail of the central pediment surmounted by female allegorical figures" - }, - { - "accession_number": "Voyager:159157", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/0df98eb2-f8ac-40ec-b4b8-71176a29367e/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/db/3c/77/ce/-8/46/5-/43/03/-9/c6/6-/55/09/c0/fd/45/13-manifest.json", - "work_type": "Image", - "id": "db3c77ce-8465-4303-9c66-5509c0fd4513", - "title": "Inner Shrine. Exterior: Festival Shrine" - }, - { - "accession_number": "Voyager:Lgf0413", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/6fe4735a-a45d-4970-a8df-69e98d21ca2c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/92/52/ea/1e/-2/f8/8-/4d/83/-9/39/e-/c2/0b/77/39/95/82-manifest.json", - "work_type": "Image", - "id": "9252ea1e-2f88-4d83-939e-c20b77399582", - "title": "St. Valentin with Kneeling Donor. Saint and crosier" - }, - { - "accession_number": "Voyager:inudilcsmi1116", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/ca25f394-1a7c-447c-8004-6ed1595a460d/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/93/7f/ee/e7/-9/a2/c-/41/9e/-8/83/b-/4a/83/5d/63/23/f4-manifest.json", - "work_type": "Image", - "id": "937feee7-9a2c-419e-883b-4a835d6323f4", - "title": "Coast in Winter" - }, - { - "accession_number": "Accession:JR_163_32", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/d0314464-4ac1-4266-b14d-ab701b072c53/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/02/45/f0/1c/-e/bf/8-/4d/31/-9/27/8-/cd/a8/13/16/4e/3c-manifest.json", - "work_type": "Image", - "id": "0245f01c-ebf8-4d31-9278-cda813164e3c", - "title": "Intramural football championship" - }, - { - "accession_number": "Voyager:Mia2060", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/6040357c-9783-4868-830a-3deeaec70409/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/03/bd/b3/01/-0/fd/d-/46/00/-9/51/6-/df/7c/53/25/48/0d-manifest.json", - "work_type": "Image", - "id": "03bdb301-0fdd-4600-9516-df7c5325480d", - "title": "Jami Mosque (Masjid). Architecture. Close detail: decoration of arcade with inlaid Persian inscriptions" - }, - { - "accession_number": "inu-wint-43-2-79-2A", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/32106332-9e1d-4beb-872f-a370e6218624/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/0b/34/c6/19/-e/5d/0-/48/a1/-8/90/9-/b0/40/1d/81/6f/d6-manifest.json", - "work_type": "Image", - "id": "0b34c619-e5d0-48a1-8909-b0401d816fd6", - "title": "Kisumu Market, Kenya" - }, - { - "accession_number": "Sull_0536", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/37a27b1d-ea5a-4bbe-b38a-fcd2f5904f25/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/16/87/26/a0/-3/c7/6-/4f/68/-8/38/e-/28/a0/34/7f/40/e5-manifest.json", - "work_type": "Image", - "id": "168726a0-3c76-4f68-838e-28a0347f40e5", - "title": "4603/74, Brickyard" - }, - { - "accession_number": "Accession:314827", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/5f8e4223-9bee-4782-b5be-221a8d53780e/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/16/a6/d5/e6/-3/fa/3-/4e/a6/-b/81/2-/9e/ad/a6/ce/0f/1b-manifest.json", - "work_type": "Image", - "id": "16a6d5e6-3fa3-4ea6-b812-9eada6ce0f1b", - "title": "Bhutadamara. View: front" - }, - { - "accession_number": "Accession:320275", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/a5e1ae54-822d-4cd4-ab54-2abc63fbc4fe/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/1e/63/bd/7e/-9/a4/2-/43/d4/-b/75/2-/af/e9/2e/23/f2/70-manifest.json", - "work_type": "Image", - "id": "1e63bd7e-9a42-43d4-b752-afe92e23f270", - "title": "La Caricature, (1883), cover" - }, - { - "accession_number": "Voyager:299097", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/188a4376-8a76-4ecf-87cb-bd33cec86d7c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/36/fe/94/77/-7/12/c-/4b/d9/-9/15/5-/f1/43/e3/b5/9f/20-manifest.json", - "work_type": "Image", - "id": "36fe9477-712c-4bd9-9155-f143e3b59f20", - "title": "Cutting the Rice" - }, - { - "accession_number": "0.003196864", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/c4/83/bc/c2/-a/4b/e-/41/75/-a/2d/7-/b2/bc/b1/e2/4d/28-manifest.json", - "work_type": "Audio", - "id": "c483bcc2-a4be-4175-a2d7-b2bcb1e24d28", - "title": null - }, - { - "accession_number": "0.635415315", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/a76e5b8c-3104-4050-b267-91e56d36add1/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/69/05/e1/a0/-5/a3/4-/46/b7/-b/60/e-/90/d0/81/64/64/ae-manifest.json", - "work_type": "Image", - "id": "6905e1a0-5a34-46b7-b60e-90d0816464ae", - "title": null - }, - { - "accession_number": "0.533456561", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/a687ef55-9de2-4869-b7f6-6aed003bab5d/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ed/81/77/ec/-0/bf/3-/45/be/-9/24/e-/a5/90/6a/aa/01/c7-manifest.json", - "work_type": "Image", - "id": "ed8177ec-0bf3-45be-924e-a5906aaa01c7", - "title": null - }, - { - "accession_number": "5-23-010", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/a3/44/c1/0a/-c/5b/8-/4d/9a/-b/ee/5-/17/6f/bd/62/24/d7-manifest.json", - "work_type": "Audio", - "id": "a344c10a-c5b8-4d9a-bee5-176fbd6224d7", - "title": null - }, - { - "accession_number": "5-23-013", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/ba8659de-593e-47f9-aa91-0b0857f2190a/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/42/5c/27/40/-3/19/2-/46/c0/-8/e5/9-/5c/4f/15/09/9f/30-manifest.json", - "work_type": "Image", - "id": "425c2740-3192-46c0-8e59-5c4f15099f30", - "title": null - }, - { - "accession_number": "0.219590227", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/58/c7/1f/0e/-0/77/7-/4a/65/-8/fb/d-/d0/b2/e6/40/a5/1b-manifest.json", - "work_type": "Video", - "id": "58c71f0e-0777-4a65-8fbd-d0b2e640a51b", - "title": null - }, - { - "accession_number": "0.865461908", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/a6e7a5a8-7dd5-49d3-8dfb-935bbd11494c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/af/d4/0c/d3/-c/e7/d-/4f/c3/-9/ec/3-/54/ed/2e/89/c6/ba-manifest.json", - "work_type": "Image", - "id": "afd40cd3-ce7d-4fc3-9ec3-54ed2e89c6ba", - "title": null - }, - { - "accession_number": "0.64960007", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/6e/01/49/85/-d/d9/9-/4c/9f/-b/ac/5-/69/77/71/54/3a/99-manifest.json", - "work_type": "Audio", - "id": "6e014985-dd99-4c9f-bac5-697771543a99", - "title": null - } - ], - "pagination": { - "query_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA", - "current_page": 1, - "limit": 40, - "offset": 0, - "total_hits": 575, - "total_pages": 15, - "next_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA&page=2" - }, - "info": {} -} diff --git a/cypress/fixtures/search/pagination/page15.json b/cypress/fixtures/search/pagination/page15.json deleted file mode 100644 index 214b2e88..00000000 --- a/cypress/fixtures/search/pagination/page15.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "data": [ - { - "accession_number": "Accession:JR_004_38", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/3f4f1a98-0353-4918-b42b-dc385adb495c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a0/f2/dd/d0/-4/97/d-/4c/49/-b/62/d-/ad/9b/3d/2d/a2/fe-manifest.json", - "work_type": "Image", - "id": "a0f2ddd0-497d-4c49-b62d-ad9b3d2da2fe", - "title": "Northwestern anti-war rally" - }, - { - "accession_number": "Voyager:265063", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/8c26d233-a69f-41cf-ad90-8d67ed38c742/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a6/76/12/e1/-5/1b/a-/46/ad/-a/9d/0-/cc/83/0f/ed/0f/dc-manifest.json", - "work_type": "Image", - "id": "a67612e1-51ba-46ad-a9d0-cc830fed0fdc", - "title": "Sistine Chapel Ceiling. The Expulsion" - }, - { - "accession_number": "Accession:B03F01_C003a_85R", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/39ea6571-0354-455e-adc5-862038e6cfb6/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/af/62/14/ec/-5/41/c-/42/a2/-b/c2/2-/d9/a5/2c/a2/57/c8-manifest.json", - "work_type": "Image", - "id": "af6214ec-541c-42a2-bc22-d9a52ca257c8", - "title": "Suscinio Castle" - }, - { - "accession_number": "Voyager:Mhf0481", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/73ad6af8-f1ae-4b0d-8176-0352c2fe1dd5/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/b0/8d/f7/a7/-b/65/3-/4c/b3/-8/9e/0-/10/3d/57/4a/fe/d7-manifest.json", - "work_type": "Image", - "id": "b08df7a7-b653-4cb3-89e0-103d574afed7", - "title": "Dutch Harbor and Cityscape" - }, - { - "accession_number": "Voyager:236791", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/fe9a360c-09d9-48ba-b65f-d91c1e4fcd5f/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/b8/37/73/d9/-0/ec/f-/41/a3/-8/80/f-/30/eb/48/80/44/bf-manifest.json", - "work_type": "Image", - "id": "b83773d9-0ecf-41a3-880f-30eb488044bf", - "title": "Improvision" - }, - { - "accession_number": "Voyager:176883", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/5eeb7a1e-f66a-4617-8ebc-1c4645e094af/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/c7/01/9d/e4/-9/33/a-/40/37/-8/d9/1-/80/f8/1a/f7/4e/45-manifest.json", - "work_type": "Image", - "id": "c7019de4-933a-4037-8d91-80f81af74e45", - "title": "Building of the Patriots Association. Exterior: corner view" - }, - { - "accession_number": "Voyager:115448", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/2550a584-ebf6-48a8-84f9-d3de1f96f660/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/c9/95/e7/ff/-f/a7/d-/4d/db/-b/96/6-/26/78/23/46/5f/52-manifest.json", - "work_type": "Image", - "id": "c995e7ff-fa7d-4ddb-b966-267823465f52", - "title": "The Manger" - }, - { - "accession_number": "Voyager:47096", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/3cd7ced9-cad2-486d-8c2f-fa32f2bcb50e/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ca/56/b7/f5/-d/35/6-/4d/6e/-8/08/d-/a7/c3/ef/e5/cd/5c-manifest.json", - "work_type": "Image", - "id": "ca56b7f5-d356-4d6e-808d-a7c3efe5cd5c", - "title": "Ancestor figure. 3/4 view" - }, - { - "accession_number": "Voyager:Msf0386", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/85b84e15-8e37-4f68-9d7d-d5626856febe/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/d5/73/fd/16/-5/9c/6-/42/8c/-b/ab/a-/53/24/a2/5e/dc/4c-manifest.json", - "work_type": "Image", - "id": "d573fd16-59c6-428c-baba-5324a25edc4c", - "title": "Saint Casilda" - }, - { - "accession_number": "Voyager:60647", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/2c79e577-3a3f-4ebb-b57e-5227184d2d6e/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/e2/43/5c/81/-1/6d/8-/4a/33/-a/05/d-/ae/16/a7/87/44/fa-manifest.json", - "work_type": "Image", - "id": "e2435c81-16d8-4a33-a05d-ae16a78744fa", - "title": "Humanoid head and neck with skull necklace. Front" - }, - { - "accession_number": "Accession:B02F06_0025a_005", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/79d55f3c-d74a-4710-8fee-5b29280398af/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/f2/b8/af/41/-f/4e/a-/4a/b3/-8/ae/2-/9f/6a/5d/5e/1c/af-manifest.json", - "work_type": "Image", - "id": "f2b8af41-f4ea-4ab3-8ae2-9f6a5d5e1caf", - "title": "Man rowing boat" - }, - { - "accession_number": "Voyager:150208", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/63a3b500-fb6e-429e-afef-84c1e8beefd0/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/f4/ed/6c/f1/-7/e5/c-/4f/4a/-b/ce/e-/cb/69/8f/1d/b6/6b-manifest.json", - "work_type": "Image", - "id": "f4ed6cf1-7e5c-4f4a-bcee-cb698f1db66b", - "title": "Sotira Lykodimou Church. Exterior" - }, - { - "accession_number": "Voyager:Nff0884", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/badbedc3-089f-4bb0-a8c1-65ebd1ef2cd1/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/f7/e3/b1/92/-f/ce/6-/4e/9f/-b/b1/d-/26/ad/f8/6d/dd/38-manifest.json", - "work_type": "Image", - "id": "f7e3b192-fce6-4e9f-bb1d-26adf86ddd38", - "title": "Young Girls at the Sea. reclining, pensive nude" - }, - { - "accession_number": "Voyager:Jia0477", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/d0795326-9f53-4c41-bf86-aa3cf1a7c608/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/fe/d0/90/60/-1/36/f-/41/f9/-9/c9/9-/17/8a/24/4a/d5/d1-manifest.json", - "work_type": "Image", - "id": "fed09060-136f-41f9-9c99-178a244ad5d1", - "title": "S. Maria in Trastevere. det: upper register with Popes and mosaic" - }, - { - "accession_number": "Canary_003", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/2ac97d66-a921-4edb-9999-8d246856c91c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/ad/83/01/81/-b/65/8-/4e/74/-9/04/5-/d0/73/d2/fb/83/0e-manifest.json", - "work_type": "Audio", - "id": "ad830181-b658-4e74-9045-d073d2fb830e", - "title": "Canary Record TEST 2" - } - ], - "pagination": { - "query_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA", - "current_page": 15, - "limit": 40, - "offset": 560, - "total_hits": 575, - "total_pages": 15, - "prev_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA&page=14" - }, - "info": {} -} diff --git a/cypress/fixtures/search/pagination/page2.json b/cypress/fixtures/search/pagination/page2.json deleted file mode 100644 index af2d8045..00000000 --- a/cypress/fixtures/search/pagination/page2.json +++ /dev/null @@ -1,335 +0,0 @@ -{ - "data": [ - { - "accession_number": "P0036_Aldridge_OF1_F03_001", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/b74385b0-1083-45b6-9838-633ba1927e70/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/15/1c/09/42/-3/4e/9-/49/ae/-8/84/6-/b4/8f/65/26/8f/75-manifest.json", - "work_type": "Image", - "id": "151c0942-34e9-49ae-8846-b48f65268f75", - "title": null - }, - { - "accession_number": "Accession:JR_054_38", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/4485c7e9-8cf4-41f5-9bbf-8db5d32098a3/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/55/e5/5e/e3/-a/68/1-/4f/cf/-b/b7/c-/06/49/37/92/4e/65-manifest.json", - "work_type": "Image", - "id": "55e55ee3-a681-4fcf-bb7c-064937924e65", - "title": "Woman with braid" - }, - { - "accession_number": "0.066396245", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/04/e7/98/f0/-a/21/d-/41/31/-9/80/8-/cc/86/20/21/a0/24-manifest.json", - "work_type": "Audio", - "id": "04e798f0-a21d-4131-9808-cc862021a024", - "title": null - }, - { - "accession_number": "0.173163484", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/28/99/99/0b/-d/ee/8-/43/15/-9/7e/2-/0c/38/84/42/94/24-manifest.json", - "work_type": "Video", - "id": "2899990b-dee8-4315-97e2-0c3884429424", - "title": null - }, - { - "accession_number": "0.949040201", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/f1/40/eb/49/-f/db/a-/48/59/-b/14/d-/3e/01/d5/f4/0e/c0-manifest.json", - "work_type": "Video", - "id": "f140eb49-fdba-4859-b14d-3e01d5f40ec0", - "title": "Canary Record TEST 2" - }, - { - "accession_number": "Accession:JR_115_24", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/890f03fd-aecd-4da8-9a46-b123c8a79255/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/6a/a0/e4/8e/-d/51/d-/48/be/-b/b5/3-/9a/42/c1/e8/f3/11-manifest.json", - "work_type": "Image", - "id": "6aa0e48e-d51d-48be-bb53-9a42c1e8f311", - "title": "Science lecture" - }, - { - "accession_number": "2022_03_24_07", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/c7/b5/2b/f3/-3/4a/5-/42/a2/-9/85/3-/04/aa/e3/d5/ad/ea-manifest.json", - "work_type": "Video", - "id": "c7b52bf3-34a5-42a2-9853-04aae3d5adea", - "title": null - }, - { - "accession_number": "Voyager:248224", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/e9a7a4b6-e333-42e8-a885-72c4e50dd7e1/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/70/0b/cd/8e/-3/e7/9-/4b/c4/-8/5b/d-/d8/ad/1e/af/5c/42-manifest.json", - "work_type": "Image", - "id": "700bcd8e-3e79-4bc4-85bd-d8ad1eaf5c42", - "title": "Colored plate" - }, - { - "accession_number": "0.254219184", - "thumbnail": null, - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/iiif3/fe/09/bc/be/-6/91/1-/4d/ec/-a/87/4-/be/6d/4c/63/c6/1b-manifest.json", - "work_type": "Audio", - "id": "fe09bcbe-6911-4dec-a874-be6d4c63c61b", - "title": "Canary Record TEST 2" - }, - { - "accession_number": "Voyager:Mff2175", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/517b89e6-db04-499f-abc5-2ece3bc2eb69/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/95/80/a5/83/-0/e0/c-/4e/55/-9/fa/b-/4d/b8/b6/1c/c2/9b-manifest.json", - "work_type": "Image", - "id": "9580a583-0e0c-4e55-9fab-4db8b61cc29b", - "title": "Triumph of Death (after Pieter Brueghel the Elder). landsknechts resisting, Death attacking party of aristocrats" - }, - { - "accession_number": "Voyager:inumckaygh43", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/544ede66-79da-4f91-9ddf-eaa384824881/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/9f/94/1b/7d/-1/02/3-/44/b4/-9/0c/4-/fa/eb/6b/a3/be/cf-manifest.json", - "work_type": "Image", - "id": "9f941b7d-1023-44b4-90c4-faeb6ba3becf", - "title": "Juvenile Delinquency in the Gold Coast" - }, - { - "accession_number": "Voyager:150213", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/6f18f97a-6b81-4888-a115-6d8a9c9d680d/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ad/9e/05/a5/-0/29/1-/44/dd/-b/47/c-/f2/1e/aa/f7/8b/cb-manifest.json", - "work_type": "Image", - "id": "ad9e05a5-0291-44dd-b47c-f21eaaf78bcb", - "title": "The Little Metropole Cathedral. Exterior" - }, - { - "accession_number": "Accession:313555", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/fd0e1283-e3bb-4131-835f-495a18554c8b/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/d3/8c/41/af/-d/15/5-/46/62/-8/3a/c-/e6/37/8e/5f/f7/5b-manifest.json", - "work_type": "Image", - "id": "d38c41af-d155-4662-83ac-e6378e5ff75b", - "title": "Vairocana with eight bodhisattvas or Vajraraga-Manjusri mandala. Detail: four bodhisattvas above Vairocana's proper left shoulder" - }, - { - "accession_number": "Voyager:305507", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/ddb115eb-a4f0-4709-87be-171ce1a95aa8/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/bd/71/d0/eb/-e/50/9-/45/fd/-9/36/1-/d2/83/89/92/59/36-manifest.json", - "work_type": "Image", - "id": "bd71d0eb-e509-45fd-9361-d28389925936", - "title": "Wall hanging" - }, - { - "accession_number": "Voyager:252924", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/4fce0559-0ea8-4ed5-a33a-1fdd4377bfde/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/03/c0/d4/71/-5/4c/e-/4f/d5/-a/a2/0-/9f/8f/12/db/89/08-manifest.json", - "work_type": "Image", - "id": "03c0d471-54ce-4fd5-aa20-9f8f12db8908", - "title": "Die gluckliche hand. Stage design, scene 1: the Chorus" - }, - { - "accession_number": "Voyager:313234", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/078e5344-e9d2-46f8-8058-21019e565025/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/05/90/9b/83/-f/25/f-/4b/4a/-a/20/b-/97/c4/76/6f/47/03-manifest.json", - "work_type": "Image", - "id": "05909b83-f25f-4b4a-a20b-97c4766f4703", - "title": "Chapelle du Rosaire Vence The garden and the pond" - }, - { - "accession_number": "Voyager:Mfb0052", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/09417625-2c19-4804-9a56-ca0142f39f18/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/09/1e/c2/ed/-7/31/0-/44/99/-b/e8/a-/a5/0e/a9/0e/38/0a-manifest.json", - "work_type": "Image", - "id": "091ec2ed-7310-4499-be8a-a50ea90e380a", - "title": "Place Vendome. NE corner elevation" - }, - { - "accession_number": "322677", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/deb8cce8-e91d-416b-886e-4e632a4a5ede/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/0a/4e/41/de/-b/b1/4-/4c/38/-8/91/8-/9e/3d/7b/eb/dd/4c-manifest.json", - "work_type": "Image", - "id": "0a4e41de-bb14-4c38-8918-9e3d7bebdd4c", - "title": "Kayseri" - }, - { - "accession_number": "Voyager:RL01375", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/39f9fda4-d81f-475f-8263-484ccd5c2a61/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/34/5e/e4/14/-2/b7/a-/43/0a/-b/84/8-/e1/80/0c/2c/56/22-manifest.json", - "work_type": "Image", - "id": "345ee414-2b7a-430a-b848-e1800c2c5622", - "title": "Yungang. Cave 20. Buddha. Detail" - }, - { - "accession_number": "Voyager:Nvd0039", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/7edc5068-9a06-4593-b9a0-9814356b8232/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/0d/93/cd/61/-2/e9/a-/43/d9/-a/a5/b-/3c/24/d7/b4/99/d5-manifest.json", - "work_type": "Image", - "id": "0d93cd61-2e9a-43d9-aa5b-3c24d7b499d5", - "title": "Tomb of Pius VIII Castiglione (b.Cingoli, 253rd Pope, r.1829-30). full figure of St. Peter" - }, - { - "accession_number": "Voyager:32861", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/369880b6-b6c0-46f7-9d0a-b0b37a6d9865/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/10/89/bc/19/-6/aa/a-/42/92/-b/62/f-/88/b1/9d/57/b9/80-manifest.json", - "work_type": "Image", - "id": "1089bc19-6aaa-4292-b62f-88b19d57b980", - "title": "Ekoi headdress mask" - }, - { - "accession_number": "Voyager:Pub0310", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/2646b3e6-68dd-41a2-a1be-ddf53cac7230/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/39/f5/97/31/-9/07/7-/45/b3/-9/c6/a-/48/22/b6/94/e3/11-manifest.json", - "work_type": "Image", - "id": "39f59731-9077-45b3-9c6a-4822b694e311", - "title": "American Center in Paris (1994). interior detail: main lobby at entrance level, view 2" - }, - { - "accession_number": "Voyager:Lff1053", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/a3ec1c0e-4792-450f-b590-54f170ade404/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/17/0a/36/77/-e/33/7-/48/d4/-a/d7/8-/e2/15/1e/ac/b9/e4-manifest.json", - "work_type": "Image", - "id": "170a3677-e337-48d4-ad78-e2151eacb9e4", - "title": "Triumph of Death. cart of skulls and king" - }, - { - "accession_number": "Voyager:141385", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/9fcc206e-077d-4d39-86b2-45175c8ea3ff/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/24/87/4d/c0/-2/59/7-/42/7b/-a/f0/4-/70/4f/7c/c2/e3/18-manifest.json", - "work_type": "Image", - "id": "24874dc0-2597-427b-af04-704f7cc2e318", - "title": "Crouching Aphrodite" - }, - { - "accession_number": "Voyager:154951", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/d707fc90-01b3-4a74-9719-aabe4ad3ed43/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/d3/7d/63/03/-3/eb/9-/48/71/-b/61/f-/3b/36/73/6f/1f/34-manifest.json", - "work_type": "Image", - "id": "d37d6303-3eb9-4871-b61f-3b36736f1f34", - "title": "House near the Farnesina. Wall decorated with trompe-l'oeil architectural motifs" - }, - { - "accession_number": "Voyager:Kgw0014", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/d7756234-56e9-4248-8c97-39872de9fb32/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/2b/36/22/c8/-0/05/c-/45/30/-9/34/8-/cc/24/cd/3a/c0/17-manifest.json", - "work_type": "Image", - "id": "2b3622c8-005c-4530-9348-cc24cd3ac017", - "title": "The Imperial Bursa of St. Stephen. Overall from right front" - }, - { - "accession_number": "Voyager:Lgm0015", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/dcacee74-be1a-45b1-b380-dff473f8f683/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/2c/b0/54/2b/-0/d6/4-/4f/54/-b/07/4-/f4/70/b9/1f/4f/6a-manifest.json", - "work_type": "Image", - "id": "2cb0542b-0d64-4f54-b074-f470b91f4f6a", - "title": "Knight, Death and the Devil.. the devil" - }, - { - "accession_number": "Voyager:Kba0025", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/b49a00d6-a718-44c8-b618-829481d5f474/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/2d/bc/94/80/-2/62/3-/4c/b4/-a/9d/7-/d1/c3/f8/f2/c3/d6-manifest.json", - "work_type": "Image", - "id": "2dbc9480-2623-4cb4-a9d7-d1c3f8f2c3d6", - "title": "Basilica of Holy Blood. det: portrait roundel of countess" - }, - { - "accession_number": "Voyager:211374", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/2cec5f7e-edfa-42db-b981-48e06f973af4/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/2e/73/8c/79/-f/77/2-/45/ae/-8/ee/b-/0c/23/a6/91/f6/8c-manifest.json", - "work_type": "Image", - "id": "2e738c79-f772-45ae-8eeb-0c23a691f68c", - "title": "Forbidden City. Palace of Tranquil Longevity, Pavillion of the Carpenters' Square, side view of the Gallery of the Square Rule" - }, - { - "accession_number": "Voyager:Kfa0269", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/35bdd2d4-8db6-4f13-a223-ae5bdfff3f25/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/2f/01/16/41/-d/a5/f-/45/21/-9/c9/8-/7a/dc/b4/bc/e8/88-manifest.json", - "work_type": "Image", - "id": "2f011641-da5f-4521-9c98-7adcb4bce888", - "title": "Benedictine Abbey and Cloister of Saint Pierre at Moissac. det: W wall of porch: Punishment of Female Unchastity" - }, - { - "accession_number": "Voyager:Lif0869", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/25a3099d-42bf-423f-97de-ed30f575929e/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/2f/84/c4/5b/-3/e6/9-/4c/ae/-b/f2/0-/30/bb/99/45/29/5a-manifest.json", - "work_type": "Image", - "id": "2f84c45b-3e69-4cae-bf20-30bb9945295a", - "title": "Martyrdom of the 10,000. center detail" - }, - { - "accession_number": "Voyager:Mif1727", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/38c9efba-69ca-4308-9cc1-4c15411eb597/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/35/94/63/87/-0/ea/4-/4c/2c/-9/00/c-/61/24/36/82/8b/af-manifest.json", - "work_type": "Image", - "id": "35946387-0ea4-4c2c-900c-612436828baf", - "title": "Diana and Endymion. Diana and the sleeping Endymion" - }, - { - "accession_number": "Voyager:1608", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/09a434c5-4eba-4ee0-8c43-36d59a68af60/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/39/55/fe/ea/-0/d5/6-/43/e0/-b/8d/3-/7a/a8/84/45/fa/2c-manifest.json", - "work_type": "Image", - "id": "3955feea-0d56-43e0-b8d3-7aa88445fa2c", - "title": "Capitol Dome. Interior" - }, - { - "accession_number": "Voyager:242058", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/0cf47633-6e44-4d4f-ba4f-ccb1f930010f/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/41/6d/96/b9/-0/38/b-/40/e8/-9/27/b-/00/41/39/c3/b4/e6-manifest.json", - "work_type": "Image", - "id": "416d96b9-038b-40e8-927b-004139c3b4e6", - "title": "Joliette Quarter, block #8. Exterior: view of windows" - }, - { - "accession_number": "Voyager:Lga0052", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/1a7508b6-2aab-4af2-9bf8-a533e1d74105/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/cb/82/28/06/-f/9e/f-/43/fd/-8/4b/1-/45/b8/c6/8d/bf/b5-manifest.json", - "work_type": "Image", - "id": "cb822806-f9ef-43fd-84b1-45b8c68dbfb5", - "title": "Platz at Tiergartner Gate. view E with Pilatus House, 1489-1520" - }, - { - "accession_number": "Voyager:170068", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/961490ac-0286-486c-b0cf-e20a9963d658/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/4b/f8/92/22/-2/9d/f-/44/f2/-8/8e/e-/c7/c7/ee/4e/17/ed-manifest.json", - "work_type": "Image", - "id": "4bf89222-29df-44f2-88ee-c7c7ee4e17ed", - "title": "Villa Schwob. Exterior" - }, - { - "accession_number": "Voyager:Mff0167", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/ad9f1ea1-966f-461c-b7c4-c07c1e84e67f/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/4e/3e/c3/13/-6/ff/3-/49/e1/-a/20/c-/66/ab/53/81/ce/12-manifest.json", - "work_type": "Image", - "id": "4e3ec313-6ff3-49e1-a20c-66ab5381ce12", - "title": "The Forge of Vulcan. central detail" - }, - { - "accession_number": "Voyager:305257", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/f50206d8-1d15-4490-bfe8-6f8c03f878c6/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/52/f6/03/11/-f/18/e-/4f/b3/-8/cb/f-/ce/d5/7e/ad/86/cf-manifest.json", - "work_type": "Image", - "id": "52f60311-f18e-4fb3-8cbf-ced57ead86cf", - "title": "Lagoon and Fishermen" - }, - { - "accession_number": "Accession:JR_124_39", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/bc06b92c-ab6e-4821-b8e5-f5aa84c7bd2f/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/de/7c/89/5f/-b/b7/b-/46/08/-9/55/e-/4f/a4/71/b6/dc/48-manifest.json", - "work_type": "Image", - "id": "de7c895f-bb7b-4608-955e-4fa471b6dc48", - "title": "Student rental house on Maple Avenue" - }, - { - "accession_number": "Voyager:Lff0316", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/4870017d-529e-4689-8a0a-bbcadeb3eea9/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/53/8f/69/de/-9/b2/e-/42/b0/-8/42/c-/fb/74/ec/dc/5d/79-manifest.json", - "work_type": "Image", - "id": "538f69de-9b2e-42b0-842c-fb74ecdc5d79", - "title": "Market Scene with Christ in the House of Mary and Martha. Still life detail" - } - ], - "pagination": { - "query_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA", - "current_page": 2, - "limit": 40, - "offset": 40, - "total_hits": 575, - "total_pages": 15, - "prev_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA&page=1", - "next_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA&page=3" - }, - "info": {} -} diff --git a/cypress/fixtures/search/pagination/page3.json b/cypress/fixtures/search/pagination/page3.json deleted file mode 100644 index c5fc690d..00000000 --- a/cypress/fixtures/search/pagination/page3.json +++ /dev/null @@ -1,335 +0,0 @@ -{ - "data": [ - { - "accession_number": "Voyager:186795", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/80c8ab64-50ae-437d-9fef-f24efb7865ef/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/55/5e/e0/5a/-8/1b/3-/44/2e/-8/a7/e-/a9/df/e4/b8/28/5a-manifest.json", - "work_type": "Image", - "id": "555ee05a-81b3-442e-8a7e-a9dfe4b8285a", - "title": "Santiago de Compostela Cathedral. Exterior; Puerta de las Platerias" - }, - { - "accession_number": "Accession:JR_150_35", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/97ca95b8-6b12-4c68-83e4-ecea21cabc81/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/5a/b4/51/a5/-2/12/c-/4e/d8/-9/5a/5-/62/6b/d2/de/c0/cb-manifest.json", - "work_type": "Image", - "id": "5ab451a5-212c-4ed8-95a5-626bd2dec0cb", - "title": "Chicago Jazz Musicians -- for film by Chris Vail '71" - }, - { - "accession_number": "Voyager:312796", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/addaf6a7-1262-41d6-be10-dcb9fa100d63/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/5f/d3/d5/28/-8/11/0-/44/12/-b/da/7-/bb/59/16/ed/38/a9-manifest.json", - "work_type": "Image", - "id": "5fd3d528-8110-4412-bda7-bb5916ed38a9", - "title": "Venus & Cupid" - }, - { - "accession_number": "TWA031", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/d20585df-b025-420b-8a59-95a237bcadc7/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/63/c9/bc/60/-6/ac/f-/4a/b1/-b/4d/6-/ce/69/a3/21/cb/e2-manifest.json", - "work_type": "Image", - "id": "63c9bc60-6acf-4ab1-b4d6-ce69a321cbe2", - "title": "Trans World Airlines, Menu: N/A" - }, - { - "accession_number": "Accession:313531", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/d164b89c-10ca-42d3-b201-d584e7175604/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/65/93/89/f3/-2/2e/3-/41/f3/-a/22/e-/dd/99/18/3a/f3/38-manifest.json", - "work_type": "Image", - "id": "659389f3-22e3-41f3-a22e-dd99183af338", - "title": "Green Tārā" - }, - { - "accession_number": "Voyager:166200", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/7b3296c9-5f1e-40ee-8d65-358f0087256c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/67/34/8c/ce/-9/be/6-/46/e9/-8/29/f-/7f/e8/de/5a/65/11-manifest.json", - "work_type": "Image", - "id": "67348cce-9be6-46e9-829f-7fe8de5a6511", - "title": "Self-Portrait in Florence" - }, - { - "accession_number": "Voyager:RL03103", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/b67020b9-c57e-49e2-b099-44fb70548a25/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/67/5f/a1/49/-9/a9/2-/4d/81/-b/00/1-/3c/ad/32/22/45/79-manifest.json", - "work_type": "Image", - "id": "675fa149-9a92-4d81-b001-3cad32224579", - "title": "Panchen Lama pre-incarnation Manjukirti (Mañjuśrī-kirti or King Rigden Gyalpo), 8th Shambhala king Detail: close-up of painting" - }, - { - "accession_number": "Voyager:Jic0778", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/55f88df6-8d36-4ea1-913c-f3eac09108b7/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/6c/2e/4d/68/-c/55/e-/4f/3b/-9/1a/d-/ae/37/bb/63/ba/39-manifest.json", - "work_type": "Image", - "id": "6c2e4d68-c55e-4f3b-91ad-ae37bb63ba39", - "title": "Satyr Carrying the Child Dionysus on His Left Arm. Total from front right" - }, - { - "accession_number": "Voyager:18113", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/82c5ad3b-304a-40ea-a891-d4d07ca1cde3/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/6e/c9/87/24/-5/f3/c-/43/db/-b/a5/6-/93/41/62/39/d6/63-manifest.json", - "work_type": "Image", - "id": "6ec98724-5f3c-43db-ba56-93416239d663", - "title": "Portrait of Richard Mather" - }, - { - "accession_number": "Voyager:123504", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/76fc354b-edb9-40e1-9baa-ed8b673680f0/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/7c/a4/00/f0/-7/c6/e-/49/07/-a/ff/0-/71/26/a9/f9/85/b3-manifest.json", - "work_type": "Image", - "id": "7ca400f0-7c6e-4907-aff0-7126a9f985b3", - "title": "Corps Student from Nuremberg, Cologne" - }, - { - "accession_number": "Accession:JR_127_39", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/0d5d6980-dd08-4dbf-8150-1de61b08e2aa/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/81/b0/bd/ab/-e/6e/4-/40/ef/-8/50/4-/ef/b9/b4/d2/64/d2-manifest.json", - "work_type": "Image", - "id": "81b0bdab-e6e4-40ef-8504-efb9b4d264d2", - "title": "Puppies Fred and Sailor on frozen lakefront" - }, - { - "accession_number": "Voyager:126371", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/338e8b6e-bf11-4d4f-83db-55a94c565e7c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/84/c3/e0/78/-9/7e/5-/48/48/-b/82/b-/80/f0/3e/de/a2/b5-manifest.json", - "work_type": "Image", - "id": "84c3e078-97e5-4848-b82b-80f03edea2b5", - "title": "Central area housing plan" - }, - { - "accession_number": "Voyager:TL01260008", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/839f0553-edee-45de-81fd-ffdfbbcab706/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/84/e0/6e/66/-7/a6/7-/4f/d4/-b/15/4-/87/68/83/01/c8/1a-manifest.json", - "work_type": "Image", - "id": "84e06e66-7a67-4fd4-b154-87688301c81a", - "title": "Passengers smoke room looking aft" - }, - { - "accession_number": "Voyager:Uib0011", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/256b29df-6d3a-4b85-9868-8c00ed71a0b3/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/96/94/ef/dd/-2/d8/3-/4d/56/-b/68/4-/31/61/c7/6e/85/df-manifest.json", - "work_type": "Image", - "id": "9694efdd-2d83-4d56-b684-3161c76e85df", - "title": "Via delle Fratta. View S of narrow street w. closed vista" - }, - { - "accession_number": "Voyager:133126", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/24267b2d-80d9-4678-b998-85054f95e29e/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/9d/0b/2a/fa/-a/d0/7-/49/e9/-a/eb/8-/f2/0b/54/a0/18/95-manifest.json", - "work_type": "Image", - "id": "9d0b2afa-ad07-49e9-aeb8-f20b54a01895", - "title": "Saint Vitus Cathedral. Detail: Saint Wenceslas" - }, - { - "accession_number": "Voyager:Lgf0090", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/5431242a-d407-4f4b-b0de-830f0b94681c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/9f/be/cd/85/-0/d4/d-/45/38/-9/ae/6-/ad/78/f1/d8/25/87-manifest.json", - "work_type": "Image", - "id": "9fbecd85-0d4d-4538-9ae6-ad78f1d82587", - "title": "Mass of St. Gregory" - }, - { - "accession_number": "Voyager:302841", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/8b18545b-bb21-4fdb-b5fc-44814a2a5dc0/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a2/1b/a3/b6/-1/38/8-/4f/e1/-9/78/7-/50/f6/79/d5/69/53-manifest.json", - "work_type": "Image", - "id": "a21ba3b6-1388-4fe1-9787-50f679d56953", - "title": "Grotto" - }, - { - "accession_number": "Voyager:103699", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/0a5c67a3-65a8-4b6c-98e6-9c400985edb2/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a2/c9/6a/9a/-3/f3/e-/40/e0/-a/84/b-/8f/26/85/a6/f3/76-manifest.json", - "work_type": "Image", - "id": "a2c96a9a-3f3e-40e0-a84b-8f2685a6f376", - "title": "Aryballos" - }, - { - "accession_number": "Voyager:258502", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/dee22c42-7d6a-4a19-a473-cc3ef5eba844/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a9/00/08/15/-c/28/5-/46/24/-8/e6/f-/55/60/51/22/1c/d8-manifest.json", - "work_type": "Image", - "id": "a9000815-c285-4624-8e6f-556051221cd8", - "title": "1100 N. Lake Shore Drive apartments. Exterior: facade" - }, - { - "accession_number": "Voyager:287220", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/00a0930a-2288-4ad0-8bbc-155427278d68/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a9/08/7f/da/-7/5c/9-/4a/84/-a/1a/3-/64/c7/9a/4e/bb/d7-manifest.json", - "work_type": "Image", - "id": "a9087fda-75c9-4a84-a1a3-64c79a4ebbd7", - "title": "Portrait of Anton Francesco Doni" - }, - { - "accession_number": "Voyager:Lif1003", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/60c3d5da-c4ad-426b-a03e-0730cc1b65ba/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/a9/d1/17/cc/-3/af/8-/46/c5/-9/da/2-/d3/c3/a2/54/8c/f3-manifest.json", - "work_type": "Image", - "id": "a9d117cc-3af8-46c5-9da2-d3c3a2548cf3", - "title": "Venus of Urbino. Upper right detail with servants, dog" - }, - { - "accession_number": "Voyager:285707", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/8269c962-5027-4aa4-a4db-489195e04ade/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ee/c7/1c/78/-c/86/5-/4b/71/-8/84/6-/60/b5/bc/1a/72/1f-manifest.json", - "work_type": "Image", - "id": "eec71c78-c865-4b71-8846-60b5bc1a721f", - "title": "Government River and Oceans North Customs (#1)" - }, - { - "accession_number": "Voyager:Mff1219", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/cb885f11-ceac-43cc-b8ee-add2440d542b/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/b5/b0/32/d9/-4/ee/0-/48/95/-8/c4/c-/69/6e/53/4f/be/28-manifest.json", - "work_type": "Image", - "id": "b5b032d9-4ee0-4895-8c4c-696e534fbe28", - "title": "Fete Champetre (unfinished). central detail" - }, - { - "accession_number": "Voyager:53936", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/c0b6140a-215c-44a3-a478-22899f76a4ae/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/bf/bf/8c/f5/-1/cf/9-/45/88/-a/69/8-/62/44/1a/56/04/76-manifest.json", - "work_type": "Image", - "id": "bfbf8cf5-1cf9-4588-a698-62441a560476", - "title": "Piazza Armerina. Roman villa: plan" - }, - { - "accession_number": "Voyager:Jta1002", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/8e95874f-bdce-4b44-bc7e-d73dd112ebc7/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/c7/72/ee/71/-b/5a/2-/4b/fa/-b/1b/9-/ba/9f/c1/6c/91/83-manifest.json", - "work_type": "Image", - "id": "c772ee71-b5a2-4bfa-b1b9-ba9fc16c9183", - "title": "Temple of Apollo: 4th c. BC, 1st, 2nd & 4th c. AD [under Caligula (37-41), Hadrian (117-138), and Julian the Apostate (361-363), never completed]. General from E, with Pronaos, columns" - }, - { - "accession_number": "Voyager:181297", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/37946b65-5379-4b18-a9d5-14ad19d00b48/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/cb/e9/a7/46/-b/92/5-/43/b4/-b/68/d-/e8/08/d0/48/b2/bc-manifest.json", - "work_type": "Image", - "id": "cbe9a746-b925-43b4-b68d-e808d048b2bc", - "title": "Brooks building. Exterior" - }, - { - "accession_number": "Voyager:115024", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/93d05a28-65fb-4a74-a3d1-be841e852178/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/e9/2e/32/93/-e/8b/7-/4d/cd/-8/97/7-/86/87/d1/26/c1/97-manifest.json", - "work_type": "Image", - "id": "e92e3293-e8b7-4dcd-8977-8687d126c197", - "title": "Montgomery Ward building (altered). Exterior: facade (with Statue of progress)" - }, - { - "accession_number": "Voyager:Mid0411", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/29e1ef95-97cd-4ff8-be7a-612139347f93/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/f1/f5/c0/d0/-a/23/c-/49/9c/-a/6b/c-/e6/20/32/60/6c/c2-manifest.json", - "work_type": "Image", - "id": "f1f5c0d0-a23c-499c-a6bc-e62032606cc2", - "title": "Tomb of Pope Gregory XII Boncompagni (r.1572-85). Det" - }, - { - "accession_number": "Voyager:39039", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/057b361b-b9a3-45ee-b748-f87b83d5e0ec/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/f9/06/98/ee/-0/a1/f-/48/cd/-9/4e/b-/fe/b8/e2/65/60/26-manifest.json", - "work_type": "Image", - "id": "f90698ee-0a1f-48cd-94eb-feb8e2656026", - "title": "Entrance to temple" - }, - { - "accession_number": "Voyager:1497", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/0cc6040f-a715-4a2b-8ac7-dcb28dbfb5d2/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/fd/ab/5c/24/-a/85/4-/4f/0c/-9/e9/f-/47/14/77/2d/74/5a-manifest.json", - "work_type": "Image", - "id": "fdab5c24-a854-4f0c-9e9f-4714772d745a", - "title": "St. Augustine in His Cell" - }, - { - "accession_number": "Voyager:123527", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/1ceaa647-1b1b-4e9d-8e3f-2a1539af3410/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ff/52/0a/e7/-1/62/1-/4b/59/-9/da/7-/6c/f1/04/50/b7/17-manifest.json", - "work_type": "Image", - "id": "ff520ae7-1621-4b59-9da7-6cf10450b717", - "title": "Undernourished Child of the Tenements" - }, - { - "accession_number": "BFMF_B15_F08_006_016n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/55c4ff8f-f3fe-46b5-a023-b78d919958de/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/25/01/42/40/-8/cd/a-/4b/d1/-8/20/3-/38/0b/d1/95/de/38-manifest.json", - "work_type": "Image", - "id": "25014240-8cda-4bd1-8203-380bd195de38", - "title": "J.E. Mainer's Mountaineers" - }, - { - "accession_number": "BFMF_B39_F22_011", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/25a9ff7f-6abb-4a12-ae00-6b6bc32619af/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/be/36/69/d7/-4/61/d-/47/1d/-a/ea/d-/f7/0f/e5/ca/2f/d6-manifest.json", - "work_type": "Image", - "id": "be3669d7-461d-471d-aead-f70fe5ca2fd6", - "title": "Letter from Mike Seeger to Barry Olivier" - }, - { - "accession_number": "BFMF_B06_F04_011_001n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/46ebd0cf-2cfa-441f-a1dc-2a0e0137d0a8/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/43/70/c3/84/-e/5f/6-/4a/2a/-b/2e/f-/9f/6e/ff/1e/72/fe-manifest.json", - "work_type": "Image", - "id": "4370c384-e5f6-4a2a-b2ef-9f6eff1e72fe", - "title": "Jefferson Airplane" - }, - { - "accession_number": "BFMF_B19_F07_003_042n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/73fad1b2-2858-4eea-80d6-4ccb3f42ad3b/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/45/0e/f3/a0/-9/1d/f-/45/95/-b/54/8-/fe/bc/b7/ab/c5/04-manifest.json", - "work_type": "Image", - "id": "450ef3a0-91df-4595-b548-febcb7abc504", - "title": "Dev Singh, KPFA session" - }, - { - "accession_number": "BFMF_B35_F15_007", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/5924ce28-6876-4fe6-8ef7-d294dcd380cd/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/58/6c/9e/b6/-9/e2/7-/4f/c4/-b/f6/9-/a2/01/a7/05/41/ff-manifest.json", - "work_type": "Image", - "id": "586c9eb6-9e27-4fc4-bf69-a201a70541ff", - "title": "Actor's Workshop clippings" - }, - { - "accession_number": "BFMF_B28_F07_023", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/e675f516-6cb4-4806-8030-ea036540c272/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ab/f0/e1/e7/-4/b5/6-/40/38/-a/b4/e-/b7/06/3d/e2/ba/32-manifest.json", - "work_type": "Image", - "id": "abf0e1e7-4b56-4038-ab4e-b7063de2ba32", - "title": "Two articles about \"war tax\" protest" - }, - { - "accession_number": "BFMF_B17_F01_028", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/bcc3bf64-47bd-480b-ab3e-d269b2d33687/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/b3/46/b4/b4/-e/12/0-/40/69/-9/aa/6-/15/3d/51/76/28/a4-manifest.json", - "work_type": "Image", - "id": "b346b4b4-e120-4069-9aa6-153d517628a4", - "title": "Pete Seeger, 1966 Berkeley Folk Music Festival" - }, - { - "accession_number": "BFMF_B49_F05_001", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/0aed3de4-8fe1-405e-a929-907fc296b30c/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/d2/b3/98/bc/-6/7d/0-/4b/a6/-b/61/f-/99/c3/91/c4/fa/53-manifest.json", - "work_type": "Image", - "id": "d2b398bc-67d0-4ba6-b61f-99c391c4fa53", - "title": "Fifth Annual Folk Music Festival brochure" - }, - { - "accession_number": "BFMF_B20_F01_010_022n", - "thumbnail": "https://iiif.stack.rdc-staging.library.northwestern.edu/iiif/2/450dc666-7258-4404-8860-f8e73c5690dd/full/!300,300/0/default.jpg", - "iiif_manifest": "https://iiif.stack.rdc-staging.library.northwestern.edu/public/ba/34/b5/ed/-8/0a/c-/4d/a5/-8/5c/9-/61/bd/7c/00/d0/86-manifest.json", - "work_type": "Image", - "id": "ba34b5ed-80ac-4da5-85c9-61bd7c00d086", - "title": "Ian and Sylvia, San Francisco State Folk Festival" - } - ], - "pagination": { - "query_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA", - "current_page": 3, - "limit": 40, - "offset": 80, - "total_hits": 575, - "total_pages": 15, - "prev_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA&page=2", - "next_url": "https://dcapi.rdc-staging.library.northwestern.edu/api/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0LgC%2BUYS80BhaSGEgVraJbiBS1nJq8CBQGFKMZFpqhBCOGpyJiFFAA&page=4" - }, - "info": {} -} diff --git a/cypress/fixtures/search/response1.js b/cypress/fixtures/search/response1.js deleted file mode 100644 index d50514c9..00000000 --- a/cypress/fixtures/search/response1.js +++ /dev/null @@ -1,64 +0,0 @@ -/** - * This must be a IIFE when using a .js file for a Cypress fixture. - * Or something that Cypress will process via eval() - */ - -/* eslint sort-keys: 0 */ -// prettier-ignore -(() => { - - const numRecordsToCreate = 20; - const data = []; - - /** - * This is a static image in DC Production that we assume will always be available - */ - const thumbnailUrl = - "https://iiif.stack.rdc.library.northwestern.edu/iiif/2/76c26a0a-0454-48d8-a225-9fc26735315b/full/pct:10/0/default.jpg"; - - const awsMockManifestUrl = - "https://yt8thudrak.execute-api.us-east-1.amazonaws.com/manifests"; - - - - /** - * Dynamically build up JSON response data from our testing API endpoint - */ - for (let i = 1; i < numRecordsToCreate; i++) { - const id = i; - let workType = "Image"; - if (id % 5 === 0) { - workType = "Audio"; - } else if (id % 6 === 0) { - workType = "Video"; - } - - data.push({ - accession_number: `accessionNum_${i}`, - thumbnail: thumbnailUrl, - - // This will bypass a staging manifest route, but do we need to mock it? - iiif_manifest: `${awsMockManifestUrl}/${id}`, - - work_type: workType, - id, - title: `${workType} ${i}`, - }); - } - - const response = { - data, - pagination: { - query_url: - "https://pylxu5f2l2.execute-api.us-east-1.amazonaws.com/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0yCi8jjpEnt4kKhQoHADmCKBQGFKMZFoqRBDOFIwq1gggZYRSKBhaUEhhIBraGAB6AKzijFpa9hgAHmqE3b1UnIkBOlBEWowCWg3DPUSiDW4gcRQ%2BIFL%2BAH4AjAAEAD5HuxAAVCAAvjcudzeEvNC1DfQgVrZrVdZyavAQJlsrkhhVHBpOO9gHcgA", - current_page: 1, - limit: 40, - offset: 0, - total_hits: numRecordsToCreate, - total_pages: 1, - }, - info: {}, - }; - - return response; -})() diff --git a/cypress/fixtures/search/response1.json b/cypress/fixtures/search/response1.json deleted file mode 100644 index 9c14dedc..00000000 --- a/cypress/fixtures/search/response1.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "data": [ - { - "accession_number": "0.680069183", - "thumbnail": "https://iiif.stack.rdc.library.northwestern.edu/iiif/2/76c26a0a-0454-48d8-a225-9fc26735315b/full/pct:10/0/default.jpg", - "iiif_manifest": "https://yt8thudrak.execute-api.us-east-1.amazonaws.com/manifests/1", - "work_type": "Image", - "id": "1", - "title": "It's Gonna Be May (For Brendan)" - }, - { - "accession_number": "Accession:JR_150_35", - "thumbnail": "https://iiif.stack.rdc.library.northwestern.edu/iiif/2/76c26a0a-0454-48d8-a225-9fc26735315b/full/pct:10/0/default.jpg", - "iiif_manifest": "https://yt8thudrak.execute-api.us-east-1.amazonaws.com/manifests/2", - "work_type": "Image", - "id": "2", - "title": "Chicago Jazz Musicians -- for film by Chris Vail '71" - }, - { - "accession_number": "Voyager:58249", - "thumbnail": "https://iiif.stack.rdc.library.northwestern.edu/iiif/2/76c26a0a-0454-48d8-a225-9fc26735315b/full/pct:10/0/default.jpg", - "iiif_manifest": "https://yt8thudrak.execute-api.us-east-1.amazonaws.com/manifests/3", - "work_type": "Image", - "id": "3", - "title": "Staff for Shango" - }, - { - "accession_number": "0.5156926", - "thumbnail": null, - "iiif_manifest": "https://yt8thudrak.execute-api.us-east-1.amazonaws.com/manifests/4", - "work_type": "Audio", - "id": "4", - "title": "It's Gonna Be May (For Brendan)" - }, - { - "accession_number": "2022_03_24_02", - "thumbnail": "https://iiif.stack.rdc.library.northwestern.edu/iiif/2/76c26a0a-0454-48d8-a225-9fc26735315b/full/pct:10/0/default.jpg", - "iiif_manifest": "https://yt8thudrak.execute-api.us-east-1.amazonaws.com/manifests/5", - "work_type": "Video", - "id": "5", - "title": "Ima video" - } - ], - "pagination": { - "query_url": "https://pylxu5f2l2.execute-api.us-east-1.amazonaws.com/v2/search?searchToken=N4IgRg9gJgniBcoDOBLAXgUwQFgAwBoQB9JCAVwCcBjLeAbRAEMqalUIA7IjsgWzAwUQhFFGEgUkgGZFejDiikYkAF3EqUKgDZZCKgBZ8wHRii3iA7hAoBrIipgAHLAF1CARzKC4icBAjmvrxkqgh0yCi8jjpEnt4kKhQoHADmCKBQGFKMZFoqRBDOFIwq1gggZYRSKBhaUEhhIBraGAB6AKzijFpa9hgAHmqE3b1UnIkBOlBEWowCWg3DPUSiDW4gcRQ%2BIFL%2BAH4AjAAEAD5HuxAAVCAAvjcudzeEvNC1DfQgVrZrVdZyavAQJlsrkhhVHBpOO9gHcgA", - "current_page": 1, - "limit": 40, - "offset": 0, - "total_hits": 5, - "total_pages": 1 - }, - "info": {} -} diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts deleted file mode 100644 index 95857aea..00000000 --- a/cypress/support/commands.ts +++ /dev/null @@ -1,37 +0,0 @@ -/// -// *********************************************** -// This example commands.ts shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** -// -// -// -- This is a parent command -- -// Cypress.Commands.add('login', (email, password) => { ... }) -// -// -// -- This is a child command -- -// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) -// -// -// -- This is a dual command -- -// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) -// -// -// -- This will overwrite an existing command -- -// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) -// -// declare global { -// namespace Cypress { -// interface Chainable { -// login(email: string, password: string): Chainable -// drag(subject: string, options?: Partial): Chainable -// dismiss(subject: string, options?: Partial): Chainable -// visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable -// } -// } -// } diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts deleted file mode 100644 index f80f74f8..00000000 --- a/cypress/support/e2e.ts +++ /dev/null @@ -1,20 +0,0 @@ -// *********************************************************** -// This example support/e2e.ts is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.js using ES2015 syntax: -import './commands' - -// Alternatively you can use CommonJS syntax: -// require('./commands') \ No newline at end of file diff --git a/cypress/support/index.ts b/cypress/support/index.ts deleted file mode 100644 index 9b1b1906..00000000 --- a/cypress/support/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* eslint-disable @typescript-eslint/no-namespace */ - -// in cypress/support/index.ts -// load type definitions that come with Cypress module -/// - -export {}; - -declare global { - namespace Cypress { - interface Chainable { - /** - * Custom command to select DOM element by data-testid attribute. - * @example cy.dataTestId('submit-button') - */ - dataTestId(value: string): Chainable; - } - } -} - -// @ts-ignore -Cypress.Commands.add("dataTestId", (value) => { - return cy.get(`[data-testid=${value}]`); -}); diff --git a/cypress/tsconfig.json b/cypress/tsconfig.json deleted file mode 100644 index 18edb199..00000000 --- a/cypress/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["es5", "dom"], - "types": ["cypress", "node"] - }, - "include": ["**/*.ts"] -} diff --git a/jest.config.js b/jest.config.js index 4a3ee711..a2fd960e 100644 --- a/jest.config.js +++ b/jest.config.js @@ -18,6 +18,7 @@ const customJestConfig = { }, setupFilesAfterEnv: ["/jest.setup.js"], testEnvironment: "jest-environment-jsdom", + testPathIgnorePatterns: ["/node_modules/", "/tests/"], }; // createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async diff --git a/package-lock.json b/package-lock.json index f6088d0c..85f92e52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,6 +42,7 @@ "devDependencies": { "@elastic/elasticsearch": "7.17", "@iiif/presentation-3": "^1.1.3", + "@playwright/test": "^1.40.1", "@testing-library/jest-dom": "^6.1.2", "@testing-library/react": "^15.0.2", "@testing-library/user-event": "^14.0.4", @@ -52,7 +53,7 @@ "@types/react-sticky-el": "^1.0.3", "@typescript-eslint/eslint-plugin": "^6.3.0", "babel-jest": "^29.6.2", - "cypress": "^12.4.0", + "dotenv": "^16.4.5", "eslint": "^8.47.0", "eslint-config-next": "^14.1.3", "eslint-config-prettier": "^9.0.0", @@ -64,7 +65,8 @@ "next-router-mock": "^0.9.1-beta.0", "prettier": "^3.0.1", "ts-jest": "^29.0.5", - "typescript": "^5.4.2" + "typescript": "^5.4.2", + "wait-on": "^7.2.0" }, "optionalDependencies": { "fsevents": "^2.3.2" @@ -602,87 +604,6 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cypress/request": { - "version": "2.88.12", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.12.tgz", - "integrity": "sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "~6.10.3", - "safe-buffer": "^5.1.2", - "tough-cookie": "^4.1.3", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@cypress/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/@cypress/request/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, - "dependencies": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" - } - }, - "node_modules/@cypress/xvfb/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -863,6 +784,21 @@ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, "node_modules/@honeybadger-io/core": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@honeybadger-io/core/-/core-5.2.0.tgz", @@ -1052,23 +988,6 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -1914,9 +1833,9 @@ } }, "node_modules/@next/bundle-analyzer": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-14.2.1.tgz", - "integrity": "sha512-Qwy3Mu/dfnu4rs2xzCy7gKZlwzZzYtiq/rjPcK/7xq3BHSyLthkHf1NAF8NNfjVTouDwo2KchisHrmAamUNWWw==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-14.2.3.tgz", + "integrity": "sha512-Z88hbbngMs7njZKI8kTJIlpdLKYfMSLwnsqYe54AP4aLmgL70/Ynx/J201DQ+q2Lr6FxFw1uCeLGImDrHOl2ZA==", "dependencies": { "webpack-bundle-analyzer": "4.10.1" } @@ -1927,18 +1846,18 @@ "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==" }, "node_modules/@next/eslint-plugin-next": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.1.tgz", - "integrity": "sha512-Fp+mthEBjkn8r9qd6o4JgxKp0IDEzW0VYHD8ZC05xS5/lFNwHKuOdr2kVhWG7BQCO9L6eeepshM1Wbs2T+LgSg==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz", + "integrity": "sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==", "dev": true, "dependencies": { "glob": "10.3.10" } }, "node_modules/@next/font": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/font/-/font-14.2.1.tgz", - "integrity": "sha512-Ycpo+xb8cGUHhoXaz1+ODE2b278ZoeB5BbPzoHRPpQcm7zwBc/vdBanEQIbCzWIbCmnSWc60g17moJWeWAtfNw==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/font/-/font-14.2.3.tgz", + "integrity": "sha512-u35UstQmvl3Yrvv2MOi6RcXMH3xDtmWTXcvkYcC/vCZHLqj/5JQ5UyFRf5saDWxFlZIkEh8HCzwNGoiHIr1/NQ==", "peerDependencies": { "next": "*" } @@ -2131,6 +2050,23 @@ "react-dom": "^16.8 || ^17.0 || ^18.0" } }, + "node_modules/@nulib/use-markdown": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@nulib/use-markdown/-/use-markdown-0.2.1.tgz", + "integrity": "sha512-gez/Hd3nku/MZi1ZOx6huwcMDkBpfuSIQX6gMclpf8N+w8QKvFt1sGPowp19H2aEv8FI9f5ao/9HID5jYeNk3A==", + "dependencies": { + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.0", + "remark-gfm": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.0", + "unified": "^11.0.4" + }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -2141,6 +2077,21 @@ "node": ">=14" } }, + "node_modules/@playwright/test": { + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.43.1.tgz", + "integrity": "sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==", + "dev": true, + "dependencies": { + "playwright": "1.43.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@polka/url": { "version": "1.0.0-next.25", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", @@ -3404,13 +3355,14 @@ "dev": true }, "node_modules/@samvera/clover-iiif": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/@samvera/clover-iiif/-/clover-iiif-2.7.4.tgz", - "integrity": "sha512-EyRjGxXKMUoe9g4UWT8d1ybZaS71IXzXJOe3jNweWQt/Bgh1kDtTKV40lsRbYhAbtBvHmrkDOuGXN6sbsd8ZXA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@samvera/clover-iiif/-/clover-iiif-2.8.0.tgz", + "integrity": "sha512-aB3f9x5EnjQnwDB4yR67Wg2INE9PZxRcy8KWS+rRTsMhDTWl4d9yCD991PPQV6h3I+JKb2PpQe4ebQ/TeJCmZA==", "dependencies": { "@iiif/parser": "^1.1.2", "@iiif/vault": "^0.9.22", "@iiif/vault-helpers": "^0.10.0", + "@nulib/use-markdown": "^0.2.1", "@radix-ui/react-aspect-ratio": "^1.0.3", "@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-form": "^0.0.3", @@ -3484,6 +3436,27 @@ "react-dom": "^16.13.1 || ^17 || ^18" } }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -3732,9 +3705,9 @@ } }, "node_modules/@testing-library/react": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-15.0.2.tgz", - "integrity": "sha512-5mzIpuytB1ctpyywvyaY2TAAUQVCZIGqwiqFQf6u9lvj/SJQepGUzNV18Xpk+NLCaCE2j7CWrZE0tEf9xLZYiQ==", + "version": "15.0.4", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-15.0.4.tgz", + "integrity": "sha512-Fw/LM1emOHKfCxv5R0tz+25TOtiMt0o5Np1zJmb4LbSacOagXQX4ooAaHiJfGUMe+OjUk504BX11W+9Z8CvyZA==", "dev": true, "dependencies": { "@babel/runtime": "^7.12.5", @@ -3840,10 +3813,18 @@ "@types/node": "*" } }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/eslint": { - "version": "8.56.9", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", - "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "peer": true, "dependencies": { "@types/estree": "*", @@ -3902,6 +3883,14 @@ "@types/node": "*" } }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", @@ -3995,11 +3984,24 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, "node_modules/@types/node": { "version": "20.12.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", @@ -4083,18 +4085,6 @@ "@types/send": "*" } }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true - }, - "node_modules/@types/sizzle": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", - "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", - "dev": true - }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -4107,6 +4097,11 @@ "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", "dev": true }, + "node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, "node_modules/@types/yargs": { "version": "17.0.32", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", @@ -4122,16 +4117,6 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", @@ -4205,7 +4190,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", @@ -4425,8 +4409,7 @@ "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, "node_modules/@webassemblyjs/ast": { "version": "1.12.1", @@ -4658,19 +4641,6 @@ "node": ">= 6.0.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -4695,15 +4665,6 @@ "ajv": "^6.9.1" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -4753,26 +4714,6 @@ "node": ">= 8" } }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -4970,15 +4911,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -4993,35 +4925,11 @@ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -5037,21 +4945,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, "node_modules/axe-core": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", @@ -5241,53 +5134,21 @@ "@babel/core": "^7.0.0" } }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -5361,39 +5222,6 @@ "node-int64": "^0.4.0" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -5415,15 +5243,6 @@ "node": ">=10.16.0" } }, - "node_modules/cachedir": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", - "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -5462,9 +5281,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001610", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001610.tgz", - "integrity": "sha512-QFutAY4NgaelojVMjY63o6XlZyORPaLfyMnsl3HgnWdJUcX6K0oaJymHjH8PT5Gk7sTm8rvC/c5COUQKXqmOMA==", + "version": "1.0.30001612", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz", + "integrity": "sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==", "funding": [ { "type": "opencollective", @@ -5480,11 +5299,14 @@ } ] }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/chalk": { "version": "2.4.2", @@ -5509,23 +5331,41 @@ "node": ">=10" } }, - "node_modules/check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true, - "engines": { - "node": ">= 0.8.0" + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "peer": true, - "engines": { - "node": ">=6.0" - } + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "peer": true, + "engines": { + "node": ">=6.0" + } }, "node_modules/ci-info": { "version": "3.9.0", @@ -5553,58 +5393,6 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-table3": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.4.tgz", - "integrity": "sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -5657,6 +5445,26 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -5705,12 +5513,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -5722,22 +5524,21 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "engines": { - "node": ">= 6" + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "engines": { - "node": ">=4.0.0" + "node": ">= 10" } }, "node_modules/concat-map": { @@ -5898,212 +5699,12 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "devOptional": true }, - "node_modules/cypress": { - "version": "12.17.4", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.17.4.tgz", - "integrity": "sha512-gAN8Pmns9MA5eCDFSDJXWKUpaL3IDd89N9TtIupjYnzLSmlpVr+ZR+vb4U/qaMp+lB6tBvAmt7504c3Z4RU5KQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@cypress/request": "2.88.12", - "@cypress/xvfb": "^1.2.4", - "@types/node": "^16.18.39", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.6.0", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", - "commander": "^6.2.1", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.4", - "enquirer": "^2.3.6", - "eventemitter2": "6.4.7", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-ci": "^3.0.0", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.8", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "process": "^0.11.10", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.5.3", - "supports-color": "^8.1.1", - "tmp": "~0.2.1", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "bin": { - "cypress": "bin/cypress" - }, - "engines": { - "node": "^14.0.0 || ^16.0.0 || >=18.0.0" - } - }, - "node_modules/cypress/node_modules/@types/node": { - "version": "16.18.96", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.96.tgz", - "integrity": "sha512-84iSqGXoO+Ha16j8pRZ/L90vDMKX04QTYMTfYeE1WrjWaZXuchBehGUZEpNgx7JnmlrIHdnABmpjrQjhCnNldQ==", - "dev": true - }, - "node_modules/cypress/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cypress/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cypress/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cypress/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cypress/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/cypress/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cypress/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cypress/node_modules/proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true - }, - "node_modules/cypress/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cypress/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/cypress/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", @@ -6177,12 +5778,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", - "dev": true - }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", @@ -6192,7 +5787,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -6208,8 +5802,7 @@ "node_modules/debug/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/decimal.js": { "version": "10.4.3", @@ -6217,6 +5810,18 @@ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/dedent": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", @@ -6291,7 +5896,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, "engines": { "node": ">=6" } @@ -6310,6 +5914,18 @@ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -6332,15 +5948,15 @@ } }, "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, "node_modules/dom-accessibility-api": { @@ -6413,6 +6029,18 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -6424,16 +6052,6 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -6443,9 +6061,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.738", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.738.tgz", - "integrity": "sha512-lwKft2CLFztD+vEIpesrOtCrko/TFnEJlHFdRhazU7Y/jx5qc4cqsocfVrBg4So4gGe9lvxnbLIoev47WMpg+A==" + "version": "1.4.748", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.748.tgz", + "integrity": "sha512-VWqjOlPZn70UZ8FTKUOkUvBLeTQ0xpty66qV0yJcAGY2/CthI4xyW9aEozRVtuwv3Kpf5xTesmJUcPwuJmgP4A==" }, "node_modules/emittery": { "version": "0.13.1", @@ -6465,15 +6083,6 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { "version": "5.16.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", @@ -6486,19 +6095,6 @@ "node": ">=10.13.0" } }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -6601,14 +6197,14 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", - "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", + "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", @@ -6777,12 +6373,12 @@ } }, "node_modules/eslint-config-next": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.1.tgz", - "integrity": "sha512-BgD0kPCWMlqoItRf3xe9fG0MqwObKfVch+f2ccwDpZiCJA8ghkz2wrASH+bI6nLZzGcOJOpMm1v1Q1euhfpt4Q==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.3.tgz", + "integrity": "sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "14.2.1", + "@next/eslint-plugin-next": "14.2.3", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", "eslint-import-resolver-node": "^0.3.6", @@ -6802,160 +6398,129 @@ } } }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/parser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", - "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "bin": { + "eslint-config-prettier": "bin/cli.js" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": ">=7.0.0" } }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" } }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "node_modules/eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "debug": "^3.2.7" }, "engines": { - "node": ">=10" + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/eslint-config-next/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "ms": "^2.1.1" } }, - "node_modules/eslint-config-next/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/eslint-plugin-cypress": { + "version": "2.15.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.2.tgz", + "integrity": "sha512-CtcFEQTDKyftpI22FVGpx8bkpKyYXBlNge6zSo0pl5/qJvBAnzaD76Vu2AsP16d6mTj478Ldn2mhgrWV+Xr0vQ==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "globals": "^13.20.0" + }, + "peerDependencies": { + "eslint": ">= 3.2.1" } }, - "node_modules/eslint-config-next/node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "node_modules/eslint-plugin-cypress/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" + "type-fest": "^0.20.2" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-cypress/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-import": { + "node_modules/eslint-plugin-import": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", @@ -6986,7 +6551,17 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-import/node_modules/debug": { + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", @@ -6995,7 +6570,19 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-import/node_modules/minimatch": { + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", @@ -7007,7 +6594,7 @@ "node": "*" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-jsx-a11y": { + "node_modules/eslint-plugin-jsx-a11y": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", @@ -7037,7 +6624,17 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", @@ -7049,7 +6646,7 @@ "node": "*" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-react": { + "node_modules/eslint-plugin-react": { "version": "7.34.1", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", @@ -7081,7 +6678,7 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-react-hooks": { + "node_modules/eslint-plugin-react-hooks": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", @@ -7093,31 +6690,41 @@ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, - "node_modules/eslint-config-next/node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/eslint-config-next/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10" + "node": "*" } }, - "node_modules/eslint-config-next/node_modules/resolve": { + "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", @@ -7134,123 +6741,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-config-next/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "node_modules/eslint-plugin-testing-library": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-6.2.2.tgz", + "integrity": "sha512-1E94YOTUDnOjSLyvOwmbVDzQi/WkKm3WVrMXu6SmBr6DN95xTGZmI6HJ/eOkSXh/DlheRsxaPsJvZByDBhWLVQ==", "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" + "dependencies": { + "@typescript-eslint/utils": "^5.58.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" }, "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-cypress": { - "version": "2.15.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.2.tgz", - "integrity": "sha512-CtcFEQTDKyftpI22FVGpx8bkpKyYXBlNge6zSo0pl5/qJvBAnzaD76Vu2AsP16d6mTj478Ldn2mhgrWV+Xr0vQ==", - "dev": true, - "dependencies": { - "globals": "^13.20.0" - }, - "peerDependencies": { - "eslint": ">= 3.2.1" - } - }, - "node_modules/eslint-plugin-cypress/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-cypress/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-testing-library": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-6.2.2.tgz", - "integrity": "sha512-1E94YOTUDnOjSLyvOwmbVDzQi/WkKm3WVrMXu6SmBr6DN95xTGZmI6HJ/eOkSXh/DlheRsxaPsJvZByDBhWLVQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "^5.58.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" - }, - "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0" + "eslint": "^7.5.0 || ^8.0.0" } }, "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/scope-manager": { @@ -7501,18 +7005,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/eslint/node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -7713,12 +7205,6 @@ "node": ">=0.10.0" } }, - "node_modules/eventemitter2": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true - }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -7729,19 +7215,19 @@ } }, "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" }, "engines": { @@ -7751,17 +7237,11 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "dependencies": { - "pify": "^2.2.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/exit": { "version": "0.1.2", @@ -7791,33 +7271,12 @@ "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", "engines": [ "node >=0.6.0" ] @@ -7884,15 +7343,6 @@ "bser": "2.1.1" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -7920,21 +7370,6 @@ "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz", "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==" }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -8041,27 +7476,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -8087,9 +7501,9 @@ } }, "node_modules/framer-motion": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.1.3.tgz", - "integrity": "sha512-/t74b1WQu+mpZtra6xFSfsRfdTymJjNYgFudVIsUmoOWjznr3x5o9HbrX7Jt9655OCA2Js0W79bMZEKE7owp9w==", + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.1.7.tgz", + "integrity": "sha512-cW11Pu53eDAXUEhv5hEiWuIXWhfkbV32PlgVISn7jRdcAiVrJ1S03YQQ0/DzoswGYYwKi4qYmHHjCzAH52eSdQ==", "dependencies": { "tslib": "^2.4.0" }, @@ -8110,21 +7524,6 @@ } } }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -8235,15 +7634,12 @@ } }, "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -8278,24 +7674,6 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "dependencies": { - "async": "^3.2.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/glob": { "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", @@ -8335,21 +7713,6 @@ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -8512,44 +7875,177 @@ "node": ">= 0.4" } }, - "node_modules/hls.js": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.5.8.tgz", - "integrity": "sha512-hJYMPfLhWO7/7+n4f9pn6bOheCGx0WgvVz7k3ouq3Pp1bja48NN+HeCQu3XCGYzqWQF/wo7Sk6dJAyWVJD8ECA==" - }, - "node_modules/hpagent": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz", - "integrity": "sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ==", - "dev": true - }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, + "node_modules/hast-util-from-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", + "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", "dependencies": { - "whatwg-encoding": "^2.0.0" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^8.0.0", + "property-information": "^6.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" }, - "engines": { - "node": ">=12" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "node_modules/html-parse-stringify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", - "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", - "optional": true, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", "dependencies": { - "void-elements": "3.1.0" + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/htmlparser2": { + "node_modules/hast-util-raw": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.2.tgz", + "integrity": "sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.1.tgz", + "integrity": "sha512-hZOofyZANbyWo+9RP75xIDV/gq+OUKx+T46IlwERnKmfpwp81XBFbT9mi26ws+SJchA4RVUQwIBJpqEOBhMzEQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-raw": "^9.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", + "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hls.js": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.5.8.tgz", + "integrity": "sha512-hJYMPfLhWO7/7+n4f9pn6bOheCGx0WgvVz7k3ouq3Pp1bja48NN+HeCQu3XCGYzqWQF/wo7Sk6dJAyWVJD8ECA==" + }, + "node_modules/hpagent": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz", + "integrity": "sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ==", + "dev": true + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "optional": true, + "dependencies": { + "void-elements": "3.1.0" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/htmlparser2": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", @@ -8581,20 +8077,6 @@ "node": ">= 6" } }, - "node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -8609,12 +8091,12 @@ } }, "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "engines": { - "node": ">=8.12.0" + "node": ">=10.17.0" } }, "node_modules/husky": { @@ -8668,26 +8150,6 @@ "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -8775,15 +8237,6 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/internal-slot": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", @@ -8883,18 +8336,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", @@ -9003,22 +8444,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -9076,6 +8501,17 @@ "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -9190,24 +8626,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -9307,12 +8725,6 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -9471,50 +8883,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-changed-files/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, "node_modules/jest-circus": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", @@ -11451,6 +10819,19 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/joi": { + "version": "17.13.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.0.tgz", + "integrity": "sha512-9qcrTyoBmFZRNHeVP4edKqIUEgFzq7MHvTNSDuHSqkpOPtiBkgNgcmTSqmiw1kw9tdKaiddvIDv/eCJDxmqWCA==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -11469,12 +10850,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, "node_modules/jsdom": { "version": "20.0.3", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", @@ -11543,12 +10918,6 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -11560,12 +10929,6 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -11578,18 +10941,6 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/jsonp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/jsonp/-/jsonp-0.2.1.tgz", @@ -11662,35 +11013,6 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "node_modules/jsprim/node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -11761,15 +11083,6 @@ "node": ">=0.10" } }, - "node_modules/lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true, - "engines": { - "node": "> 0.8" - } - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -11798,99 +11111,22 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/listr2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "peer": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^4.1.0" }, "engines": { "node": ">=8" @@ -11964,172 +11200,13 @@ "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==" }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-update/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/loose-envify": { @@ -12203,40 +11280,792 @@ "node": ">=10" } }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "node_modules/make-dir/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz", + "integrity": "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", + "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", + "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", + "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", + "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "tmpl": "1.0.5" + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/merge-stream": { + "node_modules/micromark-util-symbol": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } + "node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, "node_modules/micromatch": { "version": "4.0.5", @@ -12483,14 +12312,6 @@ "node": ">= 8.16.0" } }, - "node_modules/node-webvtt/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -12513,9 +12334,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.9.tgz", + "integrity": "sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==", "dev": true }, "node_modules/object-assign": { @@ -12697,12 +12518,6 @@ "node": ">= 0.8.0" } }, - "node_modules/ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -12745,21 +12560,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -12814,7 +12614,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, "dependencies": { "entities": "^4.4.0" }, @@ -12889,18 +12688,6 @@ "node": ">=8" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -12918,15 +12705,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", @@ -12948,6 +12726,50 @@ "node": ">=8" } }, + "node_modules/playwright": { + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.43.1.tgz", + "integrity": "sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==", + "dev": true, + "dependencies": { + "playwright-core": "1.43.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.1.tgz", + "integrity": "sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -13008,18 +12830,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", @@ -13046,15 +12856,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -13085,6 +12886,15 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -13096,16 +12906,6 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -13130,21 +12930,6 @@ } ] }, - "node_modules/qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -13405,13 +13190,94 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz", + "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", + "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", + "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "dependencies": { - "throttleit": "^1.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/require-directory": { @@ -13485,19 +13351,6 @@ "node": ">=10" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -13508,12 +13361,6 @@ "node": ">=0.10.0" } }, - "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", - "dev": true - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -13821,10 +13668,16 @@ } }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/sirv": { "version": "2.0.4", @@ -13854,53 +13707,6 @@ "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -13927,37 +13733,21 @@ "source-map": "^0.6.0" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ssr-window": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-4.0.2.tgz", @@ -14025,17 +13815,20 @@ } }, "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/string-width-cjs": { @@ -14059,11 +13852,32 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } }, "node_modules/string.prototype.matchall": { "version": "4.0.11", @@ -14140,6 +13954,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -14300,9 +14127,9 @@ } }, "node_modules/terser": { - "version": "5.30.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz", - "integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.4.tgz", + "integrity": "sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==", "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -14467,35 +14294,11 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/throttleit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", - "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" }, - "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, - "engines": { - "node": ">=14.14" - } - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -14546,15 +14349,6 @@ "node": ">=6" } }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/tr46": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", @@ -14567,6 +14361,24 @@ "node": ">=12" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/ts-api-utils": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", @@ -14714,24 +14526,6 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -14879,22 +14673,94 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" + "node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/untildify": { + "node_modules/unist-util-stringify-position": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 4.0.0" } }, "node_modules/update-browserslist-db": { @@ -15037,6 +14903,46 @@ "node": ">=0.6.0" } }, + "node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", + "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", @@ -15058,6 +14964,25 @@ "node": ">=14" } }, + "node_modules/wait-on": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", + "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", + "dev": true, + "dependencies": { + "axios": "^1.6.1", + "joi": "^17.11.0", + "lodash": "^4.17.21", + "minimist": "^1.2.8", + "rxjs": "^7.8.1" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -15079,6 +15004,15 @@ "node": ">=10.13.0" } }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/web-streams-polyfill": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", @@ -15169,14 +15103,6 @@ "node": ">= 10.13.0" } }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -15453,6 +15379,26 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", @@ -15477,23 +15423,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -15528,6 +15457,12 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/ws": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", @@ -15606,14 +15541,24 @@ "node": ">=12" } }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/yocto-queue": { @@ -15627,6 +15572,15 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index 531bb428..5afdef5c 100644 --- a/package.json +++ b/package.json @@ -4,17 +4,17 @@ "scripts": { "analyze": "ANALYZE=true npm run build", "build": "next build", - "cypress:open": "NEXT_PUBLIC_DCAPI_ENDPOINT=https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2 cypress open", "dev": "node server.js", "dev:test-env": "NEXT_PUBLIC_DCAPI_ENDPOINT=https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2 npm run dev", "export": "next build && next export", "lint": "next lint", "ts-lint": "tsc --noEmit --incremental --watch", "ts-lint-commit-hook": "tsc --noEmit", - "start": "next start", + "start": "NEXT_PUBLIC_DCAPI_ENDPOINT=https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2 next start", "prepare": "husky install", "test": "jest --watch", - "test:ci": "jest" + "test:ci": "jest", + "test:playwright": "playwright test" }, "dependencies": { "@honeybadger-io/js": "^5.1.1", @@ -53,6 +53,7 @@ "devDependencies": { "@elastic/elasticsearch": "7.17", "@iiif/presentation-3": "^1.1.3", + "@playwright/test": "^1.40.1", "@testing-library/jest-dom": "^6.1.2", "@testing-library/react": "^15.0.2", "@testing-library/user-event": "^14.0.4", @@ -63,7 +64,7 @@ "@types/react-sticky-el": "^1.0.3", "@typescript-eslint/eslint-plugin": "^6.3.0", "babel-jest": "^29.6.2", - "cypress": "^12.4.0", + "dotenv": "^16.4.5", "eslint": "^8.47.0", "eslint-config-next": "^14.1.3", "eslint-config-prettier": "^9.0.0", @@ -75,7 +76,8 @@ "next-router-mock": "^0.9.1-beta.0", "prettier": "^3.0.1", "ts-jest": "^29.0.5", - "typescript": "^5.4.2" + "typescript": "^5.4.2", + "wait-on": "^7.2.0" }, "optionalDependencies": { "fsevents": "^2.3.2" diff --git a/playwright-report/index.html b/playwright-report/index.html index 8c8d57f1..66d64a11 100644 --- a/playwright-report/index.html +++ b/playwright-report/index.html @@ -7,7 +7,7 @@ Playwright Test Report - -
- \ No newline at end of file +window.playwrightReportBase64 = "data:application/zip;base64,UEsDBBQAAAgIAAJjmVjI6qgPUgQAAGYjAAAZAAAAZDMxODM4MTM1OWE5Yjk2YWNiMWUuanNvbtWZXXOjNhSG/4qHq3bGYfXFh7jbdmd2e7Pbi1y1kwsBIqaxkUeIJjuZ/PdKMjPBCsbYQDd7FWLDe95zhI4eyc9eUW75H7mXeDmGMY4hDiijKQ1ZlkLure33X9mO6zs2Ysf9es8zX9X6G8Vr/Tf5+9lendS4STMOU5BTnNOYIxRmIYnM46XaWlVWr75o5T2756tve16tPku236w+McVWrMpXO64v7N3235zXmSz3qhSVVtlL8Q/PVOsw20ixK5ud/mIrMmbvSZ5tDm/9b8tKfwrR2svEttnpO+HL2ssb2T4HMaZrj1WVUPYTk+ud9s3u2yvRqEzYuPxJqyqeG0NMbQ5fS14327ZCrmqtmFS3pX0YAURuALlBwS2MEoSSgPgwAH95RkLJ714CzAN83xa7rdtvvBCS69KJB5PNeUVkFDtGIIz7dIvySTWSJ6tUiseay1HakaNNcZ90q3j7fc/9LWuqbDNKPHbF0av4nRm9plJm8LrX656EMlEp/qRGxMQBPI4ZDKTjV/zx9+ulyXXJmOkyKlx4HC6MBlJp0zAZ/TlW3xn6MLwuH6Fnvp34IwMThI8Dx6Q3M1Mn/14o8cuHX0fJBq5scJRQT19pc6g/mBxu7k0S3Q6Dg9cOg0yL6dZkbJsiAxp9dT10JF+JL+xf/lEpWaaNOl/XwEeR836ieGL+ccc7Dl5m9osBcPxOtQs6dsn8dp02jMPJ7xd9NUzA3IbD0JngeKJdEnbqG89uNwLz2g071cXzVzfCJxeaq+wGuGMXnbD7sVBcjiQH49FdgMkgN1zWyY0+PdYH52pwWYe8evXssQb7F7cptKGjxHBUFOeaSylke48OoZraLnd1bTmUKcWyzY5XlkDvzAPiwUuUbLi1O4jsBNGcYQhpAPMiR4yFLF0I2YtSapB9mofYgwgsQOxWdXgQIx8SOCuxG0WnN0Dcj9UXE7vRduY0wb2WryB2I+7MGv06LUvskR+4TQoN5XMJshtttwvE16UzquvoePTN4NCBZC6F9nMBlqP22AfYoQlCe1O7iNqNrPvG0WjiQvozUXvsB9jZ5pGzi+gPpHbtNwrnxbQlqT1+2wECNNXwktROfehuMyCZ6HdJbNd+oXuCNHX+Lsnt2i8mQ6c474DbjUenyw8f913Wynvk3wu2n7U2C3KYKIP7lh+A7QiDoig44wBkOQCMwzRbCNsfefpQqnmonZgjttmpnRwO7k6OIU6QQTs8H7W3iu4BIpoB2g/SsXO2AcNZjtlbcXcTGi55zG5jRu4Oh6CBfEZDe6vtdugR0/O6nnOIFzvjjgZ3IBdB+4gAC0G7jqzpGjiRT+xDx0N7K+ueLFI4cRX9aaDdFgBTd9cylSIWg3brl7jTdSqjLQbtB7sBcDeF7/ao3RqmxJln0dSfXhaDdu2X+sD9CQ7Cd3vabg3DN7vkqW/wvNh+MBm7i+Jc2N4vf7bn/h/Y3lojy2L7RVFmw/a7l/8AUEsDBBQAAAgIAAJjmVh6lqHQRAUAAGUwAAAZAAAAOWY5OGZkOGM4ZDE1MzhmNWViYmIuanNvbs1aTXOrNhT9Kx5W7UxC0Tfy7r1uXjedLjJdtJMFCJHQOMiD5SaZTP57JcyMbQUDlkXqlRkD5x593XuOxHtUViv5WxEtI17ytCxSkRaAoLQkMs/z6Ka9/3v2LM0Tq+xNbXW8WUsR6425p+XG/C7/fm+vTqLcMiGSXOAsEyVME5wLRgr7eqVXFler9eJRZoVsFo2szc9msVIPapHVxWJV1U821LpR/0ihOybisVHP1fbZ3FgpkelK1dHyveXax9OAmP/RTSTUavtsHiUfN1GxbboXAYLpTZTVtdLtP7ZJ94Ze9tBdGTSh2sDy1YBqadmvM/24u93IzXbVdYSLutFZo++q9mWYQHyb4FtI7gBbQrgkOAaY/RVZCN28RcvEviDXXZ923fNdlqqRix9KtT0xjsgt4p4IZLgPtqxe9baRy0XeqJeNbKZAE3wMDTjrg+4Q797WMl5l21o8TgInLjjZg9/bwdvW2vz9cXh909MgoWotX/WEmIiA45hDzYlr+fLrGdDoGBr7NWadPchJ4dLjcJQMNKVrhm3RHxPxqdNTFI6350TbbJPiB6XVT7/8PCE0hs6sS3FyFHt6CsD7FADwRz+73RKPtfou/6w2Vb4a7x4SQ+pMXpQST47sIE2RMY4/sn/lN62bKt/qKTwpSYZm5XSWAB9n08AsnRGnvizTOVlSpy+RJ0sIz2B5zqyklAZieDDaFJ6g+K3UpoJPK1OWm1OmQG/xOy8PGljmDErSn6YuqRvTozjXsmlU0z1jQujtps2Gm00rKDKtM/H4LOtWStzbF9RTtNTNVrZ0ByUWKZCEGAgsCC6FACUm4kBilUrpvbwKo6cgOymoICEzCKoWdXRo0iSooLKITukjwzP1jGmUwpPZ+CL5YaHR0NIPKz9sOCfT4JDyw+IzB3+CnAohP0jMkDtIGPim0XQe/UFjwNzhTn0rOzrwSZCGJEmIM4iIepOks5RMGnPoLHYAPSliNE7xnJJpuCF0Uhb5Lt0eVBC+Ytoo+MoqZgllgTjjWUGk5FQmeUEv2pQoq8YUltdAexLQmpzwJXRnnYbGiscAp0FLKP+8JwFG9iSmTiwD7ToaHqiGDkMHr6E2nNtJdEgPnFtETQDXsAA6QRWEqKI8RtDNXcQ3989k4nnMmbOHgrivYZrLxKNlksSInZaNV2HiO5auJLwyE79jmV6xie8Y4ms08R03V9FdqEj6UUN7+LOifJ0iSUqaJwBJLguKcglYWbDpHt5HfgxYeETm0B+IDOuP3cjwgBb+EPGAyKGHu2wacXd3IIT+GIUOqz+6cE7CNqMVSn90AZgb4CtcfBubIKcvMfTdVJ7FxbckuXuI4y9AZnHxhiT4fGaGmO9RxxwuvuXIoDvTrsLF77ghHrxm9qDOUDOnR/m6mklpyQrBWMkEhFmSJ5hd5uJfZP5U6TAmnhMevoa2oIMDBY3VS3nIEmoRP5fQABa+g3YyCgxTQkegQ5fQNpy7l9avM/xKaBvA/QIDT1uCl5ZQExu5W3iIpFdk4VuO1B0AjHwz/3wWHiUxgO7HLtfn4S1NN9/7duZ8Ht6yxIOL/P/28C1DFIhhYA/fcnOm4qWnCv2o4fXIGVG+To+IMstwjkuBsxQCe5kffuo44uE9xMeAhU/YHKfwCRs+hd8NzM4khNIfe8RDSd8rE3xmEYGz6I8+6BOHayH0RxvOlQdg6DjkTP0xGmBG/WFiw09n3OjKLLwhSROnYmLg7Y7nsfAIxIn7RSVg3vsMs1h4wxG4m0WQeVIMbOENN+j237ATmrR4e1BDH8R3Ub64ZN5//AdQSwMEFAAACAgAAmOZWJqlKfeNNgAARDcCABkAAABhMDg4MDY0ZGU5ZmUzNTFlZWY1Zi5qc29u3X1rj9tG0u5fIeZLxoDNZV9INg0kLxwj2TdAks3mdoBzsh8oiRpxzREnlOTJYJH/frqpsd0qkmJXsamZ7KeM7Ul3VXdXsa5P/edqXVbFN6ur11d5pFSUyFWRrQsRs6JYx+url+2/f5/fFvo3dkXeLDfh7q5Yhvud/rd9sdP/ff3//tP+NLjKq2Wa8vUyY0Wq5EImC5UmC/O/l/vKrNsU21XR7IJ/3BXb4O9NfrcJVvk+D/LtKrgt9A/tL7Z/XBW7ZVPe7ct6qxe4a+p/F8v9I3nLTVPflodb/Q9Vvczb33n9n5aBPuKrcqv/XsQvr5Z1dbjVvyv+fHm1OjSP/ydLWPbyKt9u6337N4bRf2mi85vHn+rDflm3Oxd/6FX3xcqQlO83+p+vfmq3C+7ymyLQv3VXb4vt/kr/X02xO1SPpwY32+3zZv9z2a7JIy5fRfIVj39m6WvOX8cyZHH2f6/MEvvm4ep1ZP6H4u7xAh7P8stiXTdF8L91/c4wObpiwsyKFiEiVX3rLtp1v8o1Txu9ttPSHCwd9S+9Lv/YH5ridbBo6vtd0TitnYC1leyl+rjizw93RVjlh+1y47R4Chfnnxb/l3kvB32Xr9mf9s8vexha1tt98cfeYU8RR6d7JmfYCbfF/VvE0uCKYxoz5ik7bQeuJknPsPLIhuHoB9f1we0kCYofw0Z4U+/r678dVcILh00ll6ebKna6K0Lh8E8KhyV/nhKMWIZ9Wkb9OXJ1tVasrV51OuM45BK8Rp5lfZdIOEuzOIOLq7GzfORk9zfDyasbw8qQEueMfKbMWoZlf46/paPeD/f1/+bvizf7fVMuDnuXA447Bzz1CIz++/gdiwceBJ3eRJ3SK6aSG1nkSu/kpuDTI9Jo6hPLPhEsI98EZ5IPqn8SuTKxzndIP0wgNzslN5tIbmKdrvB/ujF4vXwiubGwyOXeyU2gcrjEY3iz3heNo91oaAQPtvcjT/4AdZYfFV+0SiebOD3UsX4LZIpJaHYR586g99ukfy6apm4ef0dvsT/s2g/1bte6J/l+r034W+2LtL9i/gdtzL/eN4eiJfesGydj/R2QCZNplspELUWaFj1u3H5TBDdVvcir4HgrwSJvWu9tXepHGtTrdbA7LJfFbrc+fPidYufHn5PpkD8XSxVfzJ87bjZ6xWnk1Z/7uKIll1HctyzWnetZWbLelSkvPWWD1sUk56dnaaIn56oZUuAnyHOsYJ2fkfXncX6SMGLA4xLJqLX6jJyf4xpOB5yEQsXQOekVS9JBCpVAq9/dcDpu86rd2P7AWSf6JK6PecR5uf3ZRR6TMEljGFtR7rbuwBkY5+kD8bGTsfu2/YUxcpX2e86qDwqt1n3FQ45Pu27dhDfF/suHH6p8WWzqSn9brz97/AwtHoJ3xcN93ayCugnuNk2+K15+9iLURFRObAHTgsVEgU4tS5gLF3Z+bk2M6892h8VtuX+lbeJ9vdWkL6tyOf4d0rSnwPfgVNswlUOiM/RsfvnxWxcKM0Ahi6jBotSy3Pmom4wRRRVqy8D320bL4a95dRhXy4ZWGJKlHqhFohi9c+yBkt1MbwfqSioDxpyKJ3+JpBXSiYec4nk1W6Y1G5A9SXwoGbusYtOkp0Ap89Eg2xDtgzbBFMWmKcxg1iUiH6+cS7FlWg47j9s9unpJ1SZeR1EYx75ebDKLajsSCQ0G9/jvBVXbI6nQyL68Yvuxrorrzx41wMvgP8E2v9WeyGdvK73DZ8GfTkrhkRv4TSFHwiIrxho7ZQhGtcKRRIX97A1RyKJZlMKRyuw5KAUHv0NTy0IpvZsSLn6Hcwz4SCTMWZ+PAbv64Y9rs3PBz6cLALtQNz0AjNrlcgFgztmqKMRqKZeCKS54nic9AeCvtVm3D/S9mNd01IK7IF/U74tjbLgpV/oYmkbLRfXgJ+zL2HDcNzVBskvFfdNjRG7sZlN/cd/HFYHCSO2aFWLct39lmfTWppAeOHTlfcR9R5f2G/c9bgfjRLK3XoIS931cH2ScpELxgw1XtpvG0EmUjGqbPue4b8trBgt8BOt95aSDPL/4XzTui8hq60Pg3bIfoahBHGZb5DxxMbwwlCYcOuJkOu0gwtCD7Q0irM0n9FW5NQu9+vjd+ezF8be+zRdFdf3ZN7f6UbhFGB4ZAxE/kZI5s/13nwUbR0I7CXZBzTgxGTvcAZlSBWMN9LeSYN40xvkxVHLo/IwG/J/K+RFhQi/X8ZZ0Qcnhm8OqrJ3lUDPYKfChpl9YzOaTQ00ozIayiKwxYj6fHIowzbgnObRru8bpxMihoRKWEcej5/lUcii1HJ4tc3p+cvhruSrc5dAwKL3JoZpPDjWhMOdJD7yzOJtPDmWYKl+2UxLNJYeGyhjK4eh5PpUcxmEizvqyz08O31SVsxRq9jr9APQ3Y3szTvb2I8U/HBaa2uC+bt7tgnpbPWDoT6B3R83bscS2AYeClaQ3r8nMUvjmn20APAnjGFoel3/zZ7M4gXnk7pkcwxHMS5GfSWqbUkO56cdj39bm6L8sfi135aIaV+FJt8CGReTPol0eJJ1SZzM6wEnXnuXkEEQaYz74mPNPI/BQREItH2Ipqg0Eo1DSMIJNNmS1naYOVPpV24Z8oLbJwU2WZnOpbU2m8mf6nTRdTe4DacljGawktCRqWlDWLA6u6BklAUep85IEdN/lcklAtcriVZonTHDJ1DpNVCp6koAm0/f1MQV4W6/yqm0AyYObYls0+k/NYat/pakPN5ugXgelPo8mX7b5ueC+3G9KT/39TNm9WieJQRmzyyUGj5uN3TaPpNfEoFkRfPKk7G8tRyYGzcoJXNlDQ8jj0spFqxAyg3rtTunjjJlBsx0s7/KZGRxZf57MoN600w6sqMbs3JnBAbadDP1H9XX8D8LYT7uhM8nJX+3MDoSM1vV9WXyz/bUs7u/qZlwalLaCoLFJp1NgrbjHc9caWB/vix77f/fqWETyalnVO3dDX4UMCjknm9B2pWo6dPyzPifNjoCqlmxrZ5YplDjVNft0gzUr3to3mF3wGg9ZdcC5/GN//dnbfLss3CNUmmbY0MHJWZDMdnWGsnwzvybOoczT2VHY1wTk+1gsD4WfUEJ/5AyWKZMvSq8+XmpCDLFoOmExai940dzPAKbMJFUSeZQOfaKQ60gH6SAEVVQohKdgBbeLlFN3Ad7nC/va/l5smwJ1XULAZBWdBetLjSlo3xT5qtzeTOSjEwel82E9lxihTMFdfJtvbw4mkIhiI/VVmM/t0tXBwny366Cx0vm8UaOinCnEJ7ml77oqgy++OPr/27x6vcl3r4wL9PlvV19tb6pyt7lW8sVvV+W4X6JCyYFeZRmdFSuol4zdyhgrXzfFdrm5ZsyVk4RBXD6qAcu5pbASROIDSMlP+4eqCH4omrJeoZ5XwlNfAs8F1uIblBQ6OxD7KCU/MS6x1tNJx+TX5XYVnPDhzkXK4fui5ng4tzwK12SyMcP/qW8kuF49bPPdvlwGO8PIzkQJMWxAx4gxaiCC8wSrhk9zVXWLSroDKSofXCr45MgZZi6icbPWQRccFiYui5IbpaAFRi3p5ELgX5x9U7eHal92k4rDuoLAbgYVODkCwUWKvLMeLfHIAYJ+0QFBJdNvGQUS4ad/Xzf7zb2+Of05DX7Zlu+LZlfuH4Lrr97n2532g14G31RV+OKasxcYzjqlBYxsukmHhoS+xKU7a9ydtSyMkk5+m/zq7Apvuqb4uVhutuXvB4xFmoVceRMeGw8M4yP0qAEaL6KDCkE2f6QdbRmqORjRBJ+YQLAgoFlNvw67CXksmjpmVd9t6n19qxnKt+Uyr4K7pjagcsXuOnGzszVrEhqnEVnP2ZXDGGVwjg3ELXUKjAT5ocWSZmcD4f8/dfMuMNjbKIHp9JOzUWiSQT78CT+NlwTi1tBd69iD8H9iAsEC9xboiDHCf9bCdiYetqjziGw62wXJEhGm8Z/fykIVQzwOOluW1nqa/JZmBwLjxeQ3dlJCO4mdt3VVFW1FSlu68u0jDSjGMuif0j/+NkRyikjcAZ38iSscI52eLGqemKc2nIpTBH2a90bluOOvkq8uxZrSXc1tMeHIAovCKIIljmS7zS53HU0ZjNltlmTV6+Bt3lTBT7flfnPN3CK9hrVO/CojWwl2+ebY9YyyttEm3E0dvN3ktwutDL877MplqX06R7445IuewVRYc9QlnDXIH+JZcghuQzdUFTY00h/OKpqy2LlrB8ODgi4R2W1Qds4Eodj7AlUERjKo2MkWqsqwir0nUHXkwJ1+0Un5kHWcXWgl6a/py/qP4PuDkQ7URYiOqUC+CBu70O0iBl8UlRk4pGcCM1YhRuJk0HVflcUFgodOhpcs4hk64f6obq+ZewhAkyxhSe6EaMYJnOC0rPQPTfG+LO6DH4+V0aiXlDBvZQ927VXiE2HBkNmRXmo9bGR39PtsJmmphKEVMpXcgcoz1sVhp73e9wYi88SSd34VnZZYcv1xNDg7anKllyEUIpn0Qlx5EP3uRtSErmBsSPKRJ2v3xA99htAQn4bXToSQHNURJ7hx+Fyi1wpGzVoHx4IcCRF2LY4bSJLj8SsJgk8qJb81zhyMX0RLGmNhysDrON+V4tLH0beq/24vxC6X6/YqmFjHq7jgKlerLIn4IomuPnV7nXR4HSUiuC+rKjjcrfJ9EYBPf3C/KbYffi9vikAf0LZYBfX2b/XaTJv1MdHVLqsBI13bYROXGun6ONli5MaPYGO+Or7aFeGMGN7fcoTr+EKsTHn4HWiyXpLRDV99S88IBdluB/Ey+wcwkRq+xtafpeHLbAqbpUVKDbf9FzZ8MR4yCCUkyX6KGJ5mOglVQ1MZw26vFu2KSKU9SWN0BiLGT+H6jcOCNzKV9mDJEagMNJWwLKLXtiddVGfpXnXY5za8WTflMt8Gb26L4w9LE2zXX6zd/rAyJoCzMWqogEF28iAbYZcTnVYhI9dhQ04Fcp1ovoehYO2cGId5G6TT9k+8hgNEF1uArLLiCEOluyQYGn0FVmJLrXpsLmpp9DQBQdhFHqMeM4ZE7gunVJzUC4yT+HZTLN+1ZvQ4iVi4wUESk3ESCZmvumx2wXWb8XKPzBi+YK0G2Vu2awAGvWWSmHEYGRTjA6GGqLThqfxaBiKMIYoZ+R3b0FS+FWt3AhyZymQuxZp40wiKzaVYE28qQcmZFGsCpZt+jOlsJGKx9IZItHNxXnV/AhNXdBItsR5MF2ICiqJbxOkhoNizqu8h4o+7PLeA4iqJs1UUpZmS60gmRaGybCiguGyRGj6OkFnVwbbeB7f5uyIw1dI3xS7Y1y3S1PE5BB8icX4CiScp0JNAIm/9kAsFEo+bjd40414DiWZFASNNvctiA4nuK1MefCdf7CmQeH5p74FEsx0EfekH7qIFEs366aUDiQb6Ht58RE5w/RcGEmUYdSYtZlR3QUbEWujJ+Aiaj84AppQaw5NOgwvR/tyxJd/4ccZKceAoFvBmyFlnyVx6CfC5WRkqWIciEqp8SeZSidLTt4nDV2JxyKBTJ6jmn2QoBBnng41DDkPSdBLtONSkcaJULaO5gZHdcSzwQXYGsX8u3nBhGIPISuT6aWnjZly44UIzIuDXeQIj6HJQF/35XX7XXtObfZXvQH+Ck0bVPEqYmY2oQSdpw7sPYmlQBL+DRC/GZycNEimwGnWmFjLNVweggIwCJ20EkMEWMsrZZ+gxuIMkJg5KFxMW0MTB3sLzYzGdrP6eVWeoM+rZZSD4cLmwwFLGRVwomS6WRcSkWqaKX3VRpR/HxprTLLdH2r34+m0lS7+vn8QX9PWPm41fX+LV1zcrgs9NmvRiEmJ9/Z6VZeKnaCjuaUr05OufX9q7r6+3gxPhfKJEt+vD+bRzz49lSRhFEJqakdPgz3p+rOZVQkxVnvVGiUkHeX7x/hP4S8yPdctVJWHKYR5IqekDu1wGApESgKqbz5g+sgsxagnbpqC6aQJqd7e0x5gKz+0U6kOQ24NBeFJXM8kL/14/CYRrp3riyNSqKmnX3QwONiGInIE5hBVo06eFoQTO2U1Q3fGIKiG7aDb0jfSYhs3CWHqqtpI2rM1YYw1WxgydniquZIwqETUX/suP3zpR6KmNTSZ2iHPSUDikFjBwTb46yGUi59ECmkg46OMyoyfxSkCTmsK5Lgn9WahZlACPQgkDr+QPbcqGDLjpNEJg+D5LFiu3fQuTtbSNqMLp1cTyZJLiJCugbXSqD4jm5vZAfEEjS3uGnkcdYIiEmbzLjOJE6wBDKnSjHWacDh2oXdU2rgNchYCFArb4kbWUGhSCc577/5i/+TwZ9TsNqRBbo8VbIRJrv0+nxJzb+2TdQiqlJnvHM71QHkpfc+qljbYy9j6RRmBLJ4SOotJp1wwOOoSIyHtLXDz4HZkUyGnXBtbv85k5OU6dj+wAYpfLZQciwVKRpGKZq1W8SPg6F7InO9DiWzYfW43L5SbQl/HuQ5Fg+8+PJ+0jZ2DP0gKjJVMDNnKp0ZLtZmOXGh/rvX3lDNoVoS0b+2g0RqxMeNudpT01GrdLn61W95ozaLeDLacecwZj68+SMzCbdvpo6S2Hz6A+cOqcan0indSNkGS3yS5oxiCcGSVqOztv/p1Xr4rguzqvqvz34DiG3d3xEaGA8XElyY7wCazT6IxzV0NdhgwGaFRCp1FRTPVxgYnDiMHylIj6POIocrDR/b7vuMfJEFSJj23srCnv+22+Whyah+Crm5udwSfdoZ943IVjVynV1o8jF4xm9BM3iUUFnzjVwYsjF28UY+enIcfZ+U7fzZ5V/TfetLs8Oxs6FutErmWSLUUiWVqsFnmPDf2Pu2Ib/L3J7zbBKt/nbY3fbaF/aH+x/eOq2C2b8q63+mZdNtrc+wNlSItBO5oJfrkR7cfNzl5sxML0OIzJ24h2vWLMYAAj7bXkkCPae1aOhZc+m3ZpPosd3bf0jLU37XZQH4hzvGBHtJsNYHOjwHFEmNHOQqUghkpGbk19guqbWquhVgs5HTLvjgw6wdyYdJZmcfjYx2uAP4YYDSevbgwrQzrvyepv3uz3Tbk47F0OuIMdOvkI7Pj1IMIsnd4MtOuMWjZj5NoYJ04xYQy5KWzHdwBgGHtidoR4aGIMkWARRjDX4p4a7if3pHLIyY/DkTuc1CSRa2NxiBlOl1xA1k+uPZzKrRYDRy6ED7nEY0B4E4bGFBpDZ00h3AeoZ/nnkzgYp86H09O3y5O3FfB1tF5FC5GyuIgytV6KRV/iwGQHbqp6kVcfkAQWedP6Osaf2QX1eh3sDkszlm19+PA7RRdngOL9nFQinng/cWp60C7k/Rw3G7/h1Kv383FFOxToxfvpWVlmfrwfs7QaNC4meT89SyfjMjRFMSjo/ch+kAea9zO2wTzejwh5B09W/pW8H/eUteY1Ts7BDU48yE4FIMb1ea69B4hifn0EGWy/yMYb/32W8yPKYSIZKtiofplGiZOo+skElsfv0OIheFc83NfNKqib4G7T5Lvi5WcvQk1E5cIWRF8gD3q3gd+4U1/3JFB/QzusqCZPazype/SVCDAUwgp6Ru7EthHrBvMAJEmUYQYHP1y0reZ4oL+aoSUutEIkAvKd21X0o3eOPFAYJHmCA3UmFebTksnE2iDAbnOZvGu2OFSwvpaa/rTHfl1CsWnS4bx5smLLBk2CKYpNUwiheRk5PZ65JDhJcmhaZeFIlXHYnqdSbYm+dk+YlxmiWRB7pIoeQbusajOkkqNn3hTbIChPpXdADM7V3MAgkKTWDjMn5C+0VkjCDLaRUtUWs4G8fCuFDJb2MJW6JzEu7Hio7uiq6U6Si+OBCQIbImcqHe9b+xlFgEep8xIBdt/lchHgNV+pdbJYskXGpCiS5SIpeiLAXxswpeCIpfQRcDZf1O+LY3C4KVcfwGeqBy9xX8aGA79ZfLny8eNmYxer/JaPf1rRLpBTfctiA789K8e8t4WR8L4VrPE+V3ONCfz2LI2DaMHqAwXxv1jiEV92dIN5Ar8qzGDQX8j/TtCZKAsFnMcm4t53TjhIs3gH927yB/3JA7+4vHYWJjAZIxQ1LsZsm9xtHqczpSwiZOAH6bTDCE5F1KdwkeXWLHQy1teuFT9WUrtPRO3klDm1Cp/ZM6i435INQ2inrjiiah4mY4c7IFPK4ZeG6r8zu0xj/E3jhlVz2H/kAOjwRN4PY1r+wO0/QdoFJYdvDquydpZDwyCsJ6W7N2w+OdSEdobvkHMZLObzySHTL/xsqh9Dp8DQiZFDTSWEq1LJdCiomeSQh1GnVPeZy+Gv5apwl0PeracgtwMyG5/JtxzykMEZliyignGwOJtPDnnP8DMqnUk0lxxqKiVsE3m+cihCBsE/n7scvqncRxZo9joRZPLbTmxvxsnentp1aejvdAaRrWp72uIgqDlxkB6Ho8s8JH3nevNmdguMPVz+zZ/N4wTmkaOm0UBQNfLsSnYCtTUC0I8FLZRa3fhzvuwCIemUPJvRAZba/oKqhmx4pzHmg485fy4hkWQITpaiGkEwCkV2waLIn3obcG2QSr9qW5PPYNMNObeaZnOpbU1mZ3A4PWhz0nbloRNEk9dpyDyfHUAAgfes/XySgOPU+UgCIna5XBJwoVYiXkaJWizXi0XGV5lc9CQBTabvZACl6QDJg5tiWzT6T81hq3+lqQ83m6BeB6U+jyZvh97sgvtyvyn9tMMzZfdqnSYG24jbpRKD7DhxcOSyE6+JwU8rWuKpvMyddF+Z8uYhTM+5ZBpmFsX5pX0nBtvt4GBa0T8KhDaMwmwAa/JA2aD/xKDeNesAfwnyhPNngCw1w0w4GF9oZynTvl2ZHQdxACf+ZvtrWdzf1Y3LbJZEQGxKcv7CnhbtZsTNN5Ar6XQJkEMKdqnqIF7QzM8pUeCWxvvZB9mxTKHB2W6zecFxmELk/vEgxCArlm8TzzlTU0GEtQk0256OEyyY/9fUKZGNye69jcXm9pqAfB+r5aHwk2rozWgmWGdBRsLTq49XmhAjLGaE1HBf2cWeQQbjUWSlwqPBuaXIdVATZ91PPAkjmEBJyMzaZcpOE0B7R5n+vdg2mCnQSV8ulmpTcGZ9qzE17ZsiX5Xbm2mMcNigwel3YT2YGKFOp0/l1mzACQzkoZ/crl51m8o9eB00VqA+mnAjCvFRbum7rsrgiy+OEYBtXr3e5LtXxgv6/Lerr7Y3VbnbXCv54rer0mW8G4c9Spw8EIozK6qXjN3KGCvHEenXjLlyEncKEqlGB7enLyeIzAeQkp/2D1UR/FA0Zb1CPa8OfCcZP4DbU3/dbL5BSaGzA9+YIFsZXGLtp5Omya/L7So44cOdiwSqL7qg2DOLXbPJxhD/p76R4Hr1sM13+3IZ7AwjOxMnxLDRmagynskf5CPBqmGX4d4+uFQQXFaSmRTRuGHroAsOCxOZRcmNSqFTTv5gCoF/cfZN3R6qfdnNKg7rCgK7Gaz1Iud7uUiRd9ajJR45QNAvoVFAp9+eAYbw1L+vm/3mXt+c/pwGv2zL90WzK/cPwfVX7/PtTntCL4Nvqip8cc3ZCwxnKXATuSJ/kKRDR0Jf5tKdNe7OWhpyOCGa07+1dok3XVP8XCw32/L3A8YiTUMJnR1yNzy3McEwPkKPGqDxEne+tGTlLe14y1DRwYgm+MQEggWYNqHrAmn3IY/FU8es6rtNva9vNUP5tlzmVXDX1AZXrthdJ252tmZNdVI01DoAbpcOY5TBOTYQt5TCcWh0K8Ee3Yqxs4Hwt1OCfn64wwlMCuEG6AZ27E/4abx0+ic52eiJPQj/JyYQLHBY50P2FGKM8J+1sJ2JT2CCiwxawu2KZIkI0/jPcKXdEHJM1lqJy0SMWYPRKow4zMuT39hJDe0kdt7WVVW0NSlt8cq3jzTgGIOfF/rH30ZJThGpO6CTP3GFYoQxX8BrPLURVZxC6NO8NyrHHQeIHBVNsaZ0V3NbTCBY6PTckr+kdr3raMpgzG6zJKtem6lAVfDTbbnfXDPHSK/qlvJyRlYZdv3m2PWMsrbRJtxNHbzd5LcLrQy/O+zKZal9Oke+ZAdzkixnCmuOuoSzBvlDPEuZQgB58tUpbGikP5xVNGWBmDeteYihsU13G5SdM0Eo9r5AFYGRjpojf6HsObpuir0nUHXkAEE/RKmg02+XWmFmnoHX9GX9R/D9wUgH6iIS2HdBRtvgNnyh20UMvigqM7HwFf208QwTJ4Ou+6osLhA8dMb+kFVxhk64P6rba4YIAagw5XBu6gSa7d6RaVnpH5rifVncBz8ei6NRL0nBmVJ0RXsy3tIrxIImU0H7mFoRa09e9NtNonomWZGp5A5UnrEuDjvt9b43KJknlrzzq+gg5JErkKPB8VHTa71UmMH+nfFaL5roZzDMHFO/g4KxIclHnqzdFD/0GUKjfBpeISA09eMiToDj8JlEvxWMhjFoA5AF1K7EccNIcjr8LIxgi78iB2sEZw6mL6YjLQuzzqztPoHDdXKYVWeHfETscrlur5WMizTRf17wdJUuFyKR66tP3V4nHV5HiQjuy6oKDnerfF8E4MMf3G+K7Yffy5si0Ae0LVZBvf1bvTbrehiAatfUnHZ88chg0Fyo4+u42fiFK68dX2ZFGD+wZyXTO77cVya9+2Hc9kkdX3pp2OYbj4sUueMr6wEatjX45I6vsQ1m6fjiURjFMNrByR+m/76OL31AojMzldx7IIbnmU5C1dBUph0gSkXtqRZ2Uc/4FESEm8JZF4KCfpb2aMkRqAw8lcmgapl0UT1L9yrEPq/hzbopl/k2eHNbHH9Ymli7/mbt9oeVsQFcrdGWCjj1jWxn28VEpzXIyHXYkEuBXCea8V105nmPoy0O0mn7Jz6DAZrOmMEYHZXKOMJQiRGEGKYdyaPnYkuremwuamn0hHkm7BKPUX8ZRSLMr5MF+aRaYJzEt5ti+a61o8dJ9BVAsysACOnlobxXXTa74LrNdznHZQxfsPWM7tLbFQCD3jJNzFKoChIylTY6lW/DIBO+HomNTOVbsWbCV5T1BL/Jq2LNIMoUWbEqNpdizWCzOFlrKTmTYu1UyZOv2s5k+yURmiNkY9rOxHnV/RnsECOfop1oG0wWIgKKLXEu3dqoQEHfqv4DiohdLggfleXLWEYrxVWRL5TQf62GAorLFqnh4wiZVR1s631wm78rAlMrfVPsgn3dIk0dn0PwIRTnJZB4kv88DSRKdbmZMsfNRi/6OEfOVyDx04p2uK8/koULJCJWprx3WO7raZh439IzQkeZ7eCsBibOzcdBBhJHN5gnkMhDBsOxgtx3+t8YSOSh7Fi4imr1yIhYCj0ZHkHzoWAlCjlBL51GF6IdumNHvnHkjJniwhFsghIZNawjmUsrATo5y0XI/cWeJHMpROlp28QBLGmiExiIGp/YOkgzCkIGcbBJx0Mmk2gHoiYNFKVqGcONL0gryQbBfy7eb6EZSzuuN9XbkTZsxoX7LQwj3YgMmRF0NaiL/vwuv2uv6c2+ynegPcFJo4pQdSCYyXjc0oZ3H4TSwAu+DCMJLRa6RrXhS9w06kwdZJovCSdXkROW0gYAGewgo5y9hDiOZC1lY3sMKl1MXMAQB9ttp8cFzKrzxwXcd7lgoRFbLZfrQmkvhOd8XayKFbvqwko/zo01p1luj7T7cPYlt/PEpzjRqcluXQonut1s9PaORp43Z//jilZNX9zvbSKdfbNyx9nvHU1LecRwaU9VQyNLe3f2zXYQxUj01hIQnX29AUTrZsAumsHZl2GcQQgcMuTP8x4gq3nt1HmLfjx00kF2artFOupN/yUGyLplq+JQwAHIWTR9eJHLQCBSBjAJObq0wueoJWSXQkvvcL0RztCyx5gKv90Uhk4YVSLHxk4KayZ54d/rJ4Fw7QwT0HAkez124c3gZBOCxBlM0GHr9hLy5uwlaFJhO7Gix49s4BvpMQ2bhqzTn0Om0Y64jNCIFTFDZ+pJFcSoClFz4b/8+K0LhRICCFMpTOwI56SZcEglYJiAoKjkN5vIeZSAJhLd1PhESsCQmkElQI7QJmoeJaDCCPpZZOFK2ZD5Np1GIF6s15BFC+7Iykj25ZDkItexreBJZkDb6lQfEM3N5kRgKpzcJi/tIXo+tYAmEgIeP1dTQIUMBjUVeXaitOvaxrWAuxRk6NGmgxQOCsE5z/1/zN98noz7nao7I0KQ5wNJu76NOWXm3N5nFnI4pzxjoxH6p3mhIgpZ5iuPaKOtjL1PpBnY0jnc3IKj064aHPQIEaF3TRyHA8h8TZ3sW/v5TJ0cp85HegCxy+XSA1obR3kuM1EkKl6pZZLztCc90OJbNh+bjcvlJtCX8e5DmWD7z48n7SFpYA/TOk0aSGWk80JJg+Nm43ca+0wafFrRUhFR/3RDXNKgf2UvFYLt0i6ddfikwcjSvpMGZjuIgMdij0mDdgNorsdzJw30rqJjHkly99wzqBCcOqlan0gKu+NFRHYb7aJmDMSZ0aK2t/Pm33n1qgi+q/Oqyn8PjoPYnT0fwcIIRpwVvUDwBNdpdMq5o6WuaexATyl6mZQ9Ks/dVh8XGN6F/RYxlco4ihyMdL/vW4QR9DL4uP0+yADz877f5qvFoXkIvrq52RmA0h36iQvtl8CkFbn1r/3+4UpsXJ64DDkcM6USaoo2jlzcUYyhH4dRNty3Sv1ymlX57Ea0+y6XM6LXqcgTkSRZwbMiXabRatE3uv0fd8U2+HuT322CVb7P2yq/20L/0P5i+8dVsVs25V1v/c19sXhX7lGWtBg0pFlk0FEvZEgfNxv7KvBjgsSbIf1xRctwTHprZLCGdM/KUvQSjH7eZmk4as+TIX1+ae+GtN4OVngydq5tCGtIs+44cMZwKEQEu4CFAs4CEuRw+1NU39RaC7VKyPGQE+g3cNErRKSzTGA2nI9XMn0MMRpOXt0YVoZ03pPV37zZ75tycdi7HHAG3VtElLX/COz49SDCLJ3ezjicqeTaKCdOMWEUuRwGhpV7jdfAE7MjxEMTY4gE81B0EPgnkntSOuTkxuHIhZNgJpJro3GIGU4X+J5TH4M9nMqtGgNFLvQjpp6u02PAOBOGRoh+dtYUwn2AzPLJOXv/SRMHo9R58Xncd7mcz8MKxuNoJZT+16xYc621bADTDz6PyQ7cVPUirz5gCSzypnV1TGZgF9TrdbA7LM1YtvXhw+8UXaQBgvNzUol4mkVITDvjpbII7WbjF+wVsPTTipbzo/rD2Ejnp2fltqXPg/NjloZDMzw5P+eX9u786O1g3TrjHgFLRzeYx/nhoYzB94hnZNibZ916YALAsBGNJ70SRIsuxzA4O15X9+xbDxDF/CY+DS1HlU3uvsCU8yOqYTS1GczaXaZR4iSmfjKA5fE7tHgI3hUP93WzCuomuNs0+a54+dmLUBNRObEFcY+pSQ4b+Y079XVPQvU3tMMJmim1mOak7NFjGiCCdXMsombjbMi6wSwASRJlyGAbELtoX83xRH81Q0tciIUuEfnB2nX0o5eOPFFosE+v7UQfqCupEEjTocJ7jFgbBthtLpN31SbDDJYEUrWDPfbrEprNkA5Mj5iaPcwGbYIpmi0OI5jDZxHVEMxc8pskOYxDBjuAVTxa4/FUqi3RFtFwJAV3pIhuQdyRGiLV038sXGntdA9fXrMNwvJUegdE4YPhxtcUI+aE/YVWC5pEOBmX+nFmNpSXX62gqVTwkxc/W88j6cIeX8bzwASBNZEwF+utdLxn7WcUAU66iM8zRIDdd7lcBDhKV6uFXBc5i9fRQhRSLnlPBPhrg6YUHMGUPkLO5ov6fXEMDjfl6gP6TPXgI+7L2GDgN87Sy1W9HDcbv1e/5eMfV7QCv6mXwK9ZudNb6yfw27P0uZJrTODXLH12jITfwK/eLu7EZX2Wj5sNYPn4/IHfVH/YIWRY+leqekF8b9JQdODR0t6vGekgexb/6wd+cWntNEw4bIAcL8oYItq2yN0GcrpTqsKo0yRAptOOIjiVUJ/CRZZbs9DJVF+7UvxYR+3qTGjGOm0unH4FtgfvuWRDhaxT5kfu02AydrgEMqVcwlo5Mp0J5lFjvB9DJXjSWTS9r3cm7ycLGUyUscu0ydMl8c1hVdbOkqg5hAj4LKJG+1jM5pPELOQdbHu6JMZ8PknMQpH6kkS7vmucTowkGio74CqjRtUTSaKMQo4ev/TEgvhruSqcBdEwCAGQFP3VqNnkUBPaqbhj4zHYQUqz2eRQUyrPtxwg6EyimeTQUAk7FVSsnqscspDD5NATVCLgPoiV89QCzZ6I4GRp+puxHRonk3tq26Whv+OfZ+TPuT1ycRDYnPToWRhDw0plownSp3r0XIto/OSP/mwmJzCv3Dmb03IEe8io3bnsBG1rBKQfCVljCFUw4UdO9TK7SEg6pc/mc4I1azHsJRVkXZPGmC8+5vyTztc+In/tU1QvCEah8DCFdcH095w6UOlXb2vyYR0MeQwRS7O51LYZANXxwcjSeNJ55aEZRJOXwcfaW8FNiMv2rf188oB91J0+Hx95wHaX59YJskjVepkupFwLqbJISJEse/KAJtl3MoXSNIHkwU2xLRr9p+aw1b/S1IebTVCvg1KfR5O3g292wX2535ReGuKZsru1TnKDCWOXg5Y6bjZ+116bQj6taGfwfEBLIVYmPfnhuMOU3KBZGur8AZn1kRtst+vE3NkZXpC5wXaDTm7QQT9Myg1K0cWf5eNjFJ4xtJTnsXD6gAS8dxlTa1FZZsdBHACKv9n+Whb3d3UzLg8iTBUMm5JtC3titJsNN9NMLmkGokG4G7IBbRerDgIGzfycFEwYKHKAwYZaHBzvNpsTLLrVEuOBt0FWLNcmnm2sppTdlDAnN3UwG2JtcK7mrM9Jhpx18oFkdhT2OQEBPxbMQ+knldFrzgS8KXLNCo/4wBdleoRFdvNAveCZMz8DAYtiWUqVRR4NDi9FroMaO4s58jjuoPtRmbUrlZ3GgPbOM/17sW0QOHiyZwwYI8/85sz6WmPK2jdFviq3N9MYSWFIYwIf1oOJEfp08mhuw0YnoEsNJnK7hNVtNPfgddBYgVM/xuvjB1lRiM9yS991VQZffHEMAWzz6vUm370yftDnv119tb2pyt3mWskXv12V476JDBWs/jwBIUOyYoX1krFbGWPlOCf9mjFXTrIEDo2hxie5PYI5QaQ+gJT8tH+oiuCHoinrFep5ddrbBPlLY4/+dbP6BiWFyE4cRgLeDNnM4BJrQJ00Tn5dblfBCR8ILjrvi6y+7MHFrvlkY4r/U99IcL162Oa7fbkMdoaRnQkUYtiAb4tNuI0Eq4ZdJnz74LIz644ML9vOBh+zbB10wWFhQrMoueFwFgZ5FjsXAv/i7Ju6PVT7sptWHNYVBHZFJzhHf5kiRV5aj5p4ZMGdAQmnKnGy2hb2KDCEs/593ew39/rq9Pc0+GVbvi+aXbl/CK6/ep9vd9oXehl8U1Xhi2vOXmA4g3jIdHGSDm0JfalLd844hrMYNkDTRw1xu8ybril+Lpabbfn7AWORxqGCpaeS7K/ZwGAYH6FHDdB4ySBGPxmin0s74DJUdTCiCD4xgWAhhiyQVYG0W5HHIqpjVvXdpt7Xt5qhfFsu8yq4a2qDLVfsrhM3O1uzBt1qch0At2uHMbrgHBfOl2TanGFTHfl7Y89vxZjZQPbbQUE/P9xh5CUJGbSv6Y517E/2ibzABnlydSOPPcj+JybcWeAwacrJH8sYI/tnDWxn4iF6NyeXz3C7JFkiojT+U1yJts1gIoWstRKXmRizBqOTMO6AICd0fuwi2kn8vK2rqmiLUtrqlW8faUBxlqbAiE7ITo+NlJwikndAKX/iCsWIgkXzdIsstUFVnELo07w3Ksfwe0rumOQp1pTuqm6LCXcWOnB/gpoJ53bB62jKYMxusySrXpvBQFXw022531wzx0hvT59/RjZJ7frNsdsZ5WyjTbibOni7yW8XWhl+d9iVy1K7dE5spWEEswp0xa6w5qhLNGuQP+dXmfZMQia/SoUNjPRHs4qmLBAjp2Xa7VKewIOdMkHo9b44FYERBfwfcq0St0fpuun1njDVkQN3+jttipJs4Nm1VpipZ+A1fVn/EXx/MNKBuggtr0BX0xlh2IsYfFFEZgSDU3PI2tmGNEyc7Lnuq7K4QPAAgx6cLBkZOt/+qG6vGSIEoEmGs/LYhEdk945MS0r/0BTvy+I++PFYHY16SXEnekb2oE8GXPpEWTBkdtDDqSWx9uxFv90kabcJkDwT1i6QGqTyjHVx2Gmv970Byjwx5J1fRcw9xbpENDhBanqtVxomEBJapb2V/R6Ev7PVOPbpYD01c5B9NEKnobFbh0WuHT8BfsMnAf1WHxqEHfDJY5L6zRN2FY0byJHT+auQJXAWLxn0QHA2ZLciBdBmdshawbSlZV0v6vyMIqd+DrMqeLz+oR8Ru1yu5Wut1lJJlYsiYTxnKeeRvPrU8nXS5nUUreC+rKrgcLfK90UAvv7B/abYfvi9vCkCfUDbYhXU27/VazNUaPocVLus5rTti0ficrOAjpuN3vfxm+yt7evjinaref9gHWTbl/vKlGcPWwM8zQIaWdp721fW7Y9ivL/rjtb2ZTboVALPDQmpd+2ksrh6rrOAnqLtKwtlAtu+GNkAGx5rOg1ZIwsVvEYxPv9hkEp7pMboMESEqxJH3Wm/5Mdmz+8UI3AZeCohokSfpOMvynnpPr/hzbopl/k2eHNbHH9YmnC7/mbt9oeVMQFcrdq4BySLHB4Udj3RaRkych02ZC8i14lmfBedkueEfm62n+MzIKDpTDo1flQq4whDJUYQEuizkIMWsaVVPfYXtTTCWCGZRkunDjlDRBI94bWIk4qBcRLfborlu9aOHicRO/pgkMRknERC7qsum11w3ea8nCMzhq9ONSPZMLCLAAaTRSQxSzshe3r8yEao8msYsDCCFRXkR2KjU/lVrIZKX0rrBMPJo2JlPSDvVBoVm0exsu6EGfI5KjmLYjUk+tJadjbbL4kwL0Qm0c7GedT9hkToNZNJtMR6MGGIiCe2xA0PISQGCvpW9Q8h1e5yFkbrKSCk4kLJXLFlvOSpYnG+iGwIqZN44rKFa/g4SWZVB9t6H9zm74rA1EvfFLtgX7doU8fnEHwIxfmII56kQE/jiKlpGblUHDE99qeM3XPiM47Yrgg7nG2kcnIcEbEy6bkPJ2KnxBFHlvYdRzTbZTBZ6zOO2G5w8ZnielcO50Bz9VxHyzxBHFEfkMzg3D9GPSAZEYuhJwMkaD6yqANkSs31SqcBhmiH7tiUbxw5Y6aMssR7JnaOz9IYYom5tBOgc7yaSNHtN6MT6VKM0tO4iUNZ0kSnUQd1mE40CkYGcbKqAzBEJtGORE2aK0rVM5ob+E7GAcEH2RkEALp4z4VmLOvgv5Gfkg2dceGeC8MIzCiRy/clR5eEuijQ7/K79pre7Kt8B1oUHFVqBr92fMJt2aWiTsExJ8EXIe+MQmRkWbEhTNxU6kxtZJqvBLaRMfqnwkYBGewjoxy+grV+1OCFtAE+BrUuJjJgiPMfGehZ1X+lEWKXC1YaibVgXC2yWKZ5zBXP1qurLrj04wBZc5rl9ki7B3dfcjtRfOLux22x4aUmyQo26u6by/Pr7psVgVOeyF5gQqy737OyjNRZMcG84Znc/Z6lZ0SLNtslHXffI1r06AbzuPsizDqh52dbNtR3ee4TC2IZcpip5qL3nRMO0iwOW9nH8ZP+EpNk3dJVMoyjDg7yZUbSkVKAcSg6BXOTqUXMW0K2Khh6ISIs2cS1x5kKvy0VLZ3Y2VCDdKYO9qCT2/q9fhII184wAR4HuQ5f2pU3g+NNCBIXhxLWLUwfk4eSN2cnwZDaQbUmB01t9BvpMQ+bdJGfyf68jWwz2DRBFDFNpxquPUTSiSoRNRf+y4/fOlHoqb5CJnaIc9JgOKQSMEzAliF6WCGR82iBRH93OTLq+URawJAKJ+wq+rtQ82iBNBQwsUets9L6GVMmjqMRQiT2GbJowT2/MJJ5OSS4yHVsI3iSFdB2OtUHRINzeyBQCSRUB0nak/R8KoE0jGGkcLyE8Ym0gGmEBSeqMrJxZVe2jWsBVzFQocwyT98vNSgG51z3/zF/83ky7ngqrVShB08GgpV2hRtzSs25PVDVnefo0H3zRC80CxnMJ5BR6qUNujL2QLGGoCYU9gfQSxHsysFBpxATfDctaRAy5WxUERHL6Vn7+UyfHKfOS4LAfZfLJQiiQi5X63S1XrO8SCMmFyLqSRC0OJfNx37jcrkJ9GW8+1Aq2P7z40lPTxvYQ7VA2oCnF0wbtJuNX6nftMHHFe1yEx9DJhErk142DKZ6Shv0LD1n2sBsBw0Jr2mDsQ3mSRtkoegYHclfecjk1IHV+kTiFBg4IqF/i60ALQbpzChR2+F58++8elUE39V5VeW/B8d57O7OT9adyKroRUgn8E6jw86dTHX5OopCBSc9K3qRhD0xz91YHxEYTSULU1jNxcnDPOMocrDSPb7vloEMAszylBoaiG0MrSnv+22+Whyah+Crm5udgSnd4Z645ouHHF4MowtuHLmANaPfuNDKBRCpJhy+i0PqbOhr8mQoOyOHJ1bZ9K/q24hG7eLNiP7Xn/8fUEsDBBQAAAgIAAJjmViRDYwCVisAAGXnAQAZAAAAYmUwNDY4MmQwNzU5MzMzNGQyNGUuanNvbu19bY/cNrLuXxHmi2cBtyK+SKQM7IfYa28WsDcHJ957gLMJAnW32tM3Pa1Bd0/GQdb//YrqGae6JLXImuI4MO75sMcTj6mHZJGsl6eqfr9YrTf1P5YXLy7mdaYLK5eZyUullF5KXV887/7+n9V13f7GXbP7Jd3f1Iv0sG//5lDv2///4t+/d38aHWO2XBlh53mmFst5tcqlUkK5f74+bNyou3q7rHf75Pubepv8fVfdXCXL6lAl1XaZXNftH7pf7H5c1vvFbn1zWDfbdoCbXfN/68XhHtziatdcr2+v27/YNIuq+50Xv3fw+9A36237X5V6frFoNrfX7W+qT88vlre7+38njSyfX1TbbXPo/oub5k8t5OrD/Z+a28Oi6b5bf2xHPdRLB6g6XLV/ffE/7ceSm+pDnbS/c9Ns6+3hov03u3p/u7lfMfyp/aHaHd6vuxFlJvUs0zOZvxfmhZQv8jwtyvJ/L9wQh91vFy8y9w/qm/vFv1/Hl/Wq2dXJd03zi5vi1Igmy9yIAIhSg+POu3FfV4ur5KodmzK0KIQeGnq1/ni43dUv2nXaHuqPB6+xBYI9iHnX3O3rXbqt716xDP2Tk5Tbdh9fiE/wz88HJuN23utz6vRzuT0zlftpuBn9l+/4Go1vgubjppF+aA7N5TfrQ329/2Yxt5UoKzNTy3ox02alZjZbZDMhrZFVXYiVXf3FB1ghkXjk+elSex/g7I8DLIpPp3PyHcQdv4dB7KeJvW3aS6q7o7w2waRKoE0wohja5UiL7QDkGEA+tdb3s91/42Y7++Cme7Lq+R8LJgVx1d2F8Hnryk/T4ni8Z9ND8131a/3t4bBbz28P01tg00yhY63EIxfAArFTekRk6HgLdC+o/LE7Zoo/AOuMG7AWFgF+JNwCru/YkaTDlfj6eaw4AFFWOT9cxQu3APed4hcGqc89ogS4cHXlCNxvV4d656n6OIwFehnPKidhd/7A8BnpcRu/IclKxyS2s5/wVdL8v4L+XO92ze7+d9pPHG733cu433fadXU4tDrodatMd7/i/kGrjb447G7rDu5ZG0TazGotW+ujms9lXepFUQ/YIIerOum090Nzk2zqX+tNZ4I4e4TD4NB21OBoz81TGRzdpya38Phqshkcn0f8A4gdNgpC7Q3/kSmSrGQcc+P80Ozmhvscupj18OrTzA03PlI0tQqaTyQNuAVmkHpiCkO6kONaG0+7LGUqNbqjjS5Jy6LLsWUB0+gGa3bph/rw8rf/bjb15bNWoTg022fPk9+TbXujvkie/W29v17v98+ST39JF5v1Yvrsl2lZomlIU5Cm4UzQh2nkZkotcuejWm/fTx519SLLUmkkVumJIIFOoCdVzTCQhbSBmtswRAMgTq7jy/r/rPfr+WbihjkCVNhjRQJYCLDRY3oVEWCoqj4MEGwy8wKG6ubD+ID9n49p5ESABcsCAnO3GLuRiAANywqCM5ILXoAlywoCRVXznhHNc4jBo5NPXoRhAEPdA4MAjYx1iLXiWECjoomgzlkAgluwmHRThAE0LDucxwNoWQCCazDnvQZzHOChAQTXYMF7iPOzoRxfgNDRy3uIcxZNwQJVRk86SsMAsqgKFirVk57yMIAsqoLNo+0wi6Zgi3gLWLIAhKoMrwgWgmWHfVQZL/P0h6vmLnnX7GpfA/V+GkifoFnZZTyrxbDclaWKJgiGReMpi1hH3WDPFw0fPEnMAFmOeglOErPdZ3lEsIx2Rqzi2GKRRbMKLItOK7Jo76Fl8S6JLJ5tXyKldjKMPYxQiFhLWLLcg0IAISx4dYqSxfQTArwlheJFyKKWCRHtMSlZHDhCmFiKY48mRzwnMpZx1SO+EfdYQpWLVQpNhoMWRISxPMUmK3n22MQCKHDwlEiyUNGkEAcDiEuooBSyOkkMj7ddKBkPoeFZw2i2icHubOoagpPMq/wbzaJbC8j6LJgRsjjDhIKqIatD1mCXNhVhGeuywcF8IkANbsOC1cQz2OlOFEOtoi0hi5EsNDzJvFLI49QWOtqjzOPVFpAmx72EPKoh5LzwOt5Nz69NVGxycJR5oz+mKFicIXm0o2xYYswCsm14Y6QGE4KEJUKErzLvLmN3iKBRlkRexHpTbIbelMk8iRGEMA7Jus+2Z6YQEdpY6qHFCUqCqGPn0PnKai1bibaZKIhFiPM1jDtnsbFHvBILcCXy8m4sD3NJQHLa9GkOyB65R8mjhJkQqz5wqzE/iAoR3NzTaTihGPGhJmIMurpDMfKYLJCjoScv71CMPIfmhKfBjpHnyECqxihG7zyrIzRssAymvgYkMtyPig4gdwpT0FeeLoWpVMuVMIu80spoqStb5+XFcArT6483G5ea8+Z21/64S/atYLWTSF5tml/dj5u1+9ULhowmAQk0pylNZZY9VUrT8VPTW2r4UpruR0RBTTuSVBOS0hQ0Mkmyx3379JSm4aGjpTQdP4epNXrwgqGkNE2P/4VSmjpgJQ7PmJKmtX81KU3tsojUZGi/jCaaCpA09qQ5Te08ZKox/1caWsaasNAoY7QbZWokcomrnOjCKD2CmCdL/b57Ji+f7epN1T4as06Inv0lvf+ly2dV+0P7yVZVufw9uar2TpNqt+L96x/eJ6+qbbX7LfnvetHsliHbotLM4gxKSdNZZSZGTszwrnhgyzOWCIXMgAEqx2gD9wf4ZeW1bDn20sicdlnJzISeyrfVvN5cDu78X9Lt4epS+G+/KbBDzBLL1kiRhR3LSXR5WmBPE1EAIDmIRQAcNBbniIScm9HtJ1xmDiEW0UISQUaiZNhU8sRxZSRKhgPIQk+TkRgZDiALO02qOHELB5CF7iBVHHJaCxDn/VBX0CMOzvLkO7Z+8nb9S528v1qHvPZurvhC1cTt0AXva29ThXmWtBihhIFWlst+ABpNK5QwHd/nsm/17KoV4qUHRI0L7wktaZEjWYQK8piZsG3lNXFSHSCjZWolJosSV9sEZpe83votdsnlQpUmjJjuLQ5l34FKPOYmDrmn7LsiiUt44qpjDC45hCy0Cgmz3UYRhvigHbRi9D6iep4GRo3gg/b/ytP5oEW+zGsrVtWytf/tat7+32rEB/1mvV22f1jvu2utK9/7qv0T+E/XzbLaJHft7zV3LM5oCd0dp85obax6Imf08VOTe1toVmf05xGBpFszNGyoM9qNjN90ez6SEyDimEvE5YweGDqmM9p9Dj0j+XA1ZZozemL8L+eMLtNSIGBW/Rmr+T7psogBMqSRROUMOkif2BktRKpxbqbSRGW5hHWDHqUtn74tQdOxuDSlLKjSCrnSY8bTwHSu6mq53n5gmY9MM8tjAijokx4txjFolFddcHk/W66rTfNhVu3Xy7o1x8GU19cn0z3xxCbOORs0ZZHh8ig0gVQw2XXMMA+esfM8XA5NMWCCvZK/1D31KG1OnOA/rtuLM2ROvbJKxE2DvnMzxlNBk3KAv10s6v2+/UIIaFzEg8iBVTAneNSwGQDtBOfnRSdLP2eZDIFukDaoqNAhL8jzXnDQXzYfE6fKB2CWoteSgogZNvbwFPxuuVu7xd1RSbNKqmTefAwB3yv+R11wWOPR0zv6ecFvr+f1LgR1jz1GXXJwl46WmB9AbW1gJM6B7rHniQVdhY+/YQD0m2bT2rnB4s3EqFcwt3uUqjckIZvbOll12ANgKxy/ne6fMALb0mA/rHaobKteLUSqmMBsnzFq+znZlgGguZ4cmF4fItv//Ne+rnaLq5CFxgV6qPoKzLj3u7eP+mX7z3+BCua7H2aitNr9j5wF6ZaqRNZOTmVWSVhlwyOpxANciQkotLCPgjFqjrDPELSiJJpVko16depuDBADlRYGnUJL5Kyok7RpvjocQqc5LodMYywoBRacL27RAcQUMRpAHaUmUQeQpc6m0vFWkIXbr/IoJYkcQExKIW4xzLRkTGPsELKEplTuQZsZuJWOBvQfpvPRvH7oKQIZDMvlMIWh70lIVPKf5FVz81t3pfWvQN9rzi0OzsEhKhswtY4vHdohxBRsooAVceprdAhZWEXqpKo67xEoDMtDAauWMz9luAQlcZeD0v7CAPLcIrAqOGNVrg4hS0kpZaLQAzuALAUAFaRZMNahcQgtC7tNwUw6ZoAsRBAFG9YxSyE2A6gIo3BpOoA8x+SkHC8zQp5z4pNWcZKn/ar7BQ+A2I1FA6hh/Ex5uYNCVarP+tCQWvWgP63Wu/3hMkBnKrHzkdg2CQbcRhPAB6Mzq2pRH/az46xmi02z93dD6rQQ+LGluRE0LMU6Wh4lgK3lsGF7AqwtkZoxNOqpncfB1uq+8mfLGF4ZU8yrpcwXi6JWWZHLDDY9/Ftzt9001bLjZu2vql2dHM9W8sDjqjab4wJ0F8Pj2x9mo/wsqZ12+UT9D4/93yZ280h15+Jn/TEikG0xKN2B/KxuZHxqxHmWY4BQ46GZ+Fnd0Gczllj5Wd3ncPbe8OqT+FmD49ug+UQiIul+n3lbEK38r4iflbdWMc6hJjo/tBhdl/j8rCKVPY1W0axnLXx0Wr959F6WoCnlmFGoLC1yp09KnTM6poq0xCWcqYsex3dc9GsEEAHKKNluDiBPbTQtgypShSHEHBoiwjg+FQeQJblGx0m57ACyBDB0nJRLB1CyNBnSkYJoDiDPKdEeIaBJY3s00toa08m7artetfZI8tZF40Pu+1LizAXiHKHjbbKkWlBtOofyfL9uf5Qhvq1wkCwOOJ3H8WE6gDxXVqxijh1ElhYcGhZzZOyX5BCed2j4IwQeHMZezR1CnsPik2BLPyw8sWENw06j/nQ/yorzSj5P6o/V4vAicV6eoHu0F86lTsin1v/DhPb1pl3+72/cyJfHH/7tpvPXHy/2V83drPv9Hy9+mjbK2hngsmdEjQtGsXyK0X63Xi7rrQ9AHI8mnjwD9IWp1qfbJvj0FSylOLT1aQfgKwfr7aqZ3VTbeuMrDL3IOnGxLbiIeY1AbHsTxfUkIMeMkIffrcs4CoFJM2wG0tgJuozDEnMA0SYT4z1lHBOhBYhT2mhbnGdxjCwHkMUKzLModW0cQB7VPs+sx31JRMhS3y2HERhuhDxSKKJdNDxqfX7SnHCy3ZV/ZL1FiJtJEcVQhPibwgBi7YcWOs5F0EEJgtiLKhEXUYZxZj01yBYgLtNAy4PMIU9eBvS1HqZPLO899rP6eg7qa4G8kNfuL5Lv3r97+yyUNOEmjV8AmkM/h+EjxlYdDmLJc39BX+rovhAR8jyjKrTgKlVwjv9u0VzPm2Mu5YPYQFPBY+ICdxylqYg5rIs3WuUqzszvMxyDJ87SWTxXxmPiJJkUOMpElEmftm4hVKIWGaY5Pb7w09Co/IWfhr7iQY2ISyVaVGZVqVUml0IWRgm7WhQX/cJP39/U2+Tvu+rmKnFkvC7+65h5SfeL3Y/Ler/YrR9OwCmnqL0f6lXz8SKAkwAzvU8ZRYXLU30aRlFxTIk9v6nq2L6bjVHkRsT+yxzWZqFTitzQvcyQYpD681m674kzHmPrDDdaL8/V7X//202dbqrb7eLKa3BMWCrz6cPzuONqcFNxcW4+ISypobGJ0/G84Cwu1tyxxdl4UqbfcExZFTSjSIwgm4oS99woiAm2UYlSQ5vbtPdud+16bULZWkm4ZpcdvJAirXULABdTt2bSrXY/2/03brazD266pyl6QPEWxFWHxTdE+WlaGonBpzItsbH/6AWA3no1mdYRhFdmadYnZU2G6ScAw/ZiozVDyIA1rlsxqTxPwC3g+k566YPh9mj5jxUHIMrKy08VBjeUGzW1upAbzi8MwUypKbhwdcc8WAEWS4cRX8pnFa6gO98NL7Nzpsvjb0iq1jGNjUNPG/rKFzerbJ1XRSVLJctqWam6stIOmFWunm5nkRyam2RT/1pvkod8JwYbCpYvQDaUdXHqp7Ghuk9N7yBrC7duRFwDIlMcaRkhQ5NE2eeuCLc4JobmNjjc5zAhTKjhssUkg6P7AN4G9Wdo49Yiyw2uq0wtmvP1ZGZIkWpcr8BqIv2/HFuW6IkZUqZKYPqKoYZ6gPeWk+vYguwl8ypDDIvCqoWT2mYYyB7piuhkhmXz+ELLHUC01bSNLgK7cAQANGibaalORZTmVh0+Fo7NSQ0VPnaDA2hZIjGQcMtY56gDWLIAhJEivviqA1iydIErYBFJ3jOCPa1EgLDl5uRF6A9QpRlPGNREIdh0+FjqvRkVRwQdQMtxTRuYcDbpqQgCiJ3vxIqlJ/xtXoQ8RQeh54+x2FUHEKdh0wDCWle8pxibI7RTYqOk7Dl8OLeEtoAW6DKaj9LcAWS5ZmCVJsYiSB1Ay7KCUQjNDh+myBEXsIi2gDmLsmWhLsMrgjh8RlxBH13Gyz794aq5S1yzywALtZ0GThNRtOemjGS3qFRgqgARoIolCSI4yDQMMAqz3eHDUSWaylPCo8QMsGBZQHCUOC2/FiAOGtDOellGOyO4WwxtBUUWyy4QkqWtschiPYiCR6kVWSTr3iFkqUQhRJRC0B1AlntQnBRsYVUqBI9eK07SPzxSS0MQsqg9QkR7THCzGCpAE0tzFLjpHvGcyFjWlcAtXYlLCLNTfBKcAxBiZhZNYxAyjq/YAWSx/0ScqjwdQBb7T8SpyuMA4v5JxBVUUAhZnSQCxwOoCGU8hDx3oYpnmlgevRCmCzHr/pZHaVA+5SpoCHE7ICpCqBmyOmRFyaM0qCgVtzuALL4SoX1qUZAQtv+NZQl9cpiIAHmUBg1PMqsU9jo3UhHGepMlpqtSAdp4S8ijNUDSC6/jXeJSdMSTnMNySaxmspQsPAyRRzvJ2NNAXUJ4klljpL02pkQxzOGbzLvJTK6GvIj2oDC5GiBhiTHZvUPIozXkNpZu2GtMS0UI/a6shrJk8jXEqmTYQeRpJipgKUNO1k0Lsdc7lEbuE5Cb5ldSxD9/RPWrbBM3O6hDVeBmYwYYFSK4uacTcQIx4uYpVIxBd3coRh7/EmRojLY7JmNkIZGIE5YGM0bVy8QmYpQeGEMyrRy0cWuAmskwMGqEJCb/rzxdEpPMRGVlVeZFXejK6iJT+mI4ien1x5uNy855c7trf9wl+1aw2kkkrzbNr+7Hzdr96sXjc5oEZM+cJjWV2jxVYYjjp6Z31LImNX0eEQDJB4cNzWlyI6NHphxuo0IS7HLUeHtUStP5odlTmlQ/80NoeWYuoSlNUx/4cilNKtVY47QZsanyV5TSpFtFvJeDltOoTMKy9UcPT2rK0wLTdaSlPuvQMGM0HfPU9jzOBRGjTw/Fk6V+qA22qzfVARQFu/+ly2fVcDfCrq3zSafnkG0pUomZfIWm9VCQsCuhh/fQA1t5vmSWPzJgg8ox1sD9CX5ZeS1brwWNlTQ3g8xM6Kl8W83rzeXgzn8uF+e3/SY1uPaqyIjXi4TNrHyO5SQ6mxqc+UMUAMgNYhGAAWgik7TUMwlZN6MSQLjPytRiv3spaT4SGYeTobLU4E4KxGMUh5PRAWQxmGUcToYDeKbRYhDAKKGLDiBLn3uporDTOoAsNFPpEwlnefQdXz95u/6lTt5frQPeezdXTNLq/NyU2eqC9b1vsfV6fhGvexhq5bjuh6DZghYhlDAn3+e2b3XtqhXj5SRIkRrcQ72URJA+zXO8LIVtK7CJE+sAIZWpwVY3VSc1gfklr7d+ay37dwYtPiJNGDXdWxpahFizJ8qCicLv6QCyJNXKE4cdX4jJIcQhJqJyAhPeRhEGOKI7aOOxbKL/aWhUfkd0wFeezhG9zGuzrFZibqpyWSxWciHKEUf0m/V22f5hve+uta4w8av2T+A/XTfLapPctb/X3HF4pKUdbX6ei+KpPNLHT01urRWcHuluRGzDGI4qWwEjUyQcDy2GvejBLulubNyVO55L2n0OB147MiCXS7r7ALak9Z+hrG+LrMTOEUvUp74il7RS7buNJMIYovIDvaRP7JFWOs17bX2IHmkJO4g9rv/56esSNB2DszkV0SWpMkiYDuhKeVVXy/X2A8t88n4xhIImZQo6pkcrcgza5VUXY97Pjm08ZtV+vaxPG3Wsr0+me+KOTZyHNmjKAkfnNHXK+chd8ZgZH7v5DEwxYIL46tDUsoUeNc6JE/zHdXtxBsxJYloF0ceqoAPdjNFV0KQc4G8Xi3q/b78QAhpnVlM3AuYFj5o2A6Cd4Py86GTp5yyTIdBxRyhFu7UVjAqMFh4cgP6y+Zg4ZT4As8rw3UzFDLuWeAp+t9yt5eLuqKRZJVVy7CzkDR6rQZoYmIcFoEfLKI4t+O31vN6FoMZGpqJKOLhLR2vND6C2NjAc14LW2PGliAqn8PE4DIB+02xaSzdUvHUviENsfwHzu0cZe0MSsrmtk1WHPQQ2Ls1IPpWWBvthtUNlO8cZP2TgMOVnjON+TrZlAOhe8SgiaJhiHyLb//zXvq52i6uQhe4V76RiFqH39lG/bP/5L1DBfPfDTJRWu/+RsyDdssA1xXVGPKQSVtrwSC6ZBFekWa/gOREaeGFYIj9FvwWxKWkECSXZ+FenDscAMShSi1s+l4JoJZ7kTvPV4lAmNbjBDbFZrFJRGmc7hDlLNp7SUQoTdQBZIhdKx1tBlpi7yqPUJXIAeaqZKJhwyZjO2CFkScVTuQd1ZuBaGu5t+tBdBLIYlsthGkPflZCo5D/Jq+bmt+5O69+Bvvdcuzi4brkiPikwyY4vKbpFaHGWC1HAYPoaIx22Q8iSL6tOiquzHgHLU6RQweLlvG+Z5alSqILS/4IASpaUY2XiVMXtELLk5isThyLYAsS5+VSAsEU5M0KeJbRRKj06gFjlowLU0aQQJ75TEcah07QAsU5KBHhSk5cZIY/C4pNccZKv/ar7BR+AZ7O9fAFqGEBTXv6gUJXqsz40pFY96E+r9W5/uPTXmWyvPh5tgzSMuI0mgg+GZ1bVoj7sZ8dZzRabZu/vhzRpiYs+Ez3VGtZjHa2SEkLYarGdKe1BZWcMjBqBsDXwlS/e/nC1WCwrPc9sldfVcpXpfA67yv+tudtummrZ0bP2V9WuTo5nK3mgclWbzXEBuovh0Y0Qs1GKlizcm/RE3eSPHbenNjNnpWh9HhGm9nIkDXcjY28VTx/EoaGZOq93Q5tzzwgvQ6v9HHasn7QpfDRDy30AM7RU2IwiUZFsmlnkNyY7Z78ihpZNLQ5bGGK2ghaj6xKfoVWmBVZppaG5CbXwUWr95tF7WoKmVGKWVkdfJ00JhmH4PFM6SyUuAkEkkmkRxXvsECrc15EWIdAyStKbQ9i7lKkIg6pTBUHEZCxFhRjFseIQYmowLVVNx8m9bAEqXABWEO+nOMmXDiGmFNIYhTpOKM0BxP5HWqqX1h6BoEmTezTg2prUybtqu161Vkny1gXlvS/9bo44n40oyBr63yYrrAWVqnMwDdamiChDXFzBILFuQxToPIor0wHElb+Jex2rumMLUWM/CXENYXFHxt5JHcKCRRRh21zGzs0OIa4LTVTjfFJtyYdF47RlIkgYfRp1q/tRV5xz8nlSf6wWhxeJc/aEXKQah4KoKstJn9Op52Jfb9rl//7GjXx5/OHfbjp//fFif9Xczbrf//Hip0nTzM0A+8CJzx0MZvlUp/1uvVzWWx+AvYJARIBAYZjqg7ptgk8fJoHTyL0altoc1a595WC9XTWzm2pbb3yFwbCEr7UF9zCrJahxNxWiIXgSluNFaFmiXrqMpQ70SMZUgFGoYg5gmbHcSGUsC0Hjqmy0GynPYtlYOW5fTtviPItS4MYB5KHJ5Jn1uC2JCM+6zP0RltEQ4lpaRCkUsS6aHHOoqQCV/8MdEF53CHEvSuImixB/UxhAnptGBJ2TIIQ8LJRchtFmvbXHHHvsaXZbDrnyMqDB9TCDYnnvs5/V13NQZgvkhrx2f5F89/7d22eBvIlu0jgdh0Y7yGEAibFth4OIH3nivkBP6ui+EBGyFFTKVWjlVargHP/dormeN8d8ygexgWaCx8QLnBtK8xflsDzeaK2rODO/z3IMnTiuoUqduPGYOEkmC+ybJp4an/5uAWyiDtl4zy8ik2BoVH42UcBXnpBNVMhML5ayyJalynWmlnNz0S//9P1NvU3+vqturhLHx+siwI6cl3S/2P24rPeL3frhBJzSiu7q+S9rt0D++UujpKKu5/rTkIq6T01lFxrLSypyI+IORHaE1hLIKnJD42xDoQdbBnwW7nvqjM/Y/XJJ58g473+7qdNNdbtdXHkN3iuVRKQW+fKk8rRUmAzARZRyY2MvnqZNx4sp1X6vQAaIUPbMZEKZUlMf+HJMqSIVOFJtqQlRUZlSQ5vbtNdud+t6bULRShX2YJeDF1K0tS5xtkVhJ31q97Pdf+NmO/vgpnuapAf0bkFcdVh/Q5SfpqWRFndSpn3igwtCTCwAdNSrycSOYLz43Ho0fpgADBuNjZYNIQK2aYbr9zwWbgHXd9JDHwwXZ0hN3j1T4gBEWXk5qcLgIr1/Mro0tbqQHs4vDPjCezRcuLpj/quQ9AeHcTz359F3/sDwtLjw+A1J1jomsbHoaf5feTqralnXolgtalNrs5TzalXN7YBV5YrqdhbJoblJNvWv9SZ5yHh6vAkF6xcgE6q0T2ZCdZ+a3sCS1YRqR8RJlRa+anQLyn9kihzjXKNzDdBCzI3zQ7NbG+5z5wrbPtracB/A1safoplbi0zgprdG/P+8DJuWuFRkYYiEinJsWZ4iLSM3vTZpNPoN5GBOpxoHcBxdogU+7MoQ/cuwauGkqhlGxFQyVC8ehgjL5jGzs3GiBQlgEdiHIwQgS8/lIiSlPAwfdp/R8MESKqy8BoVtHZoIQqItY5mjDiCPCMIoEWtsVWFaAxEgLCLJe0Z6Tf5oAGHfzcmLMAyg4VhBE43S3/NT0/CpaCKIHzsaLcTAXLNJN0UYwILjmj6hbTMDxM0AaABhEJ73GuzlwtIAwkpXvIe4l/FIAmij5erhLHbaAlqgymhWKrPCqQHEBYxTiKsDiFs40wDGYjIrzMMiZgXDdl3MK4gz7IhFyS1UZnj59AJbJDTD3fpoM14W6g9XzV3iOl4GpVzqXoBE0AhlZTTTxfT8Q7RXu1SxhMH0DhTtSipjEdsN9kRQlxCeJ16EJfbR0bwQMLuC1wC0ouempCEsYx0Ui88y8V7vmExR5NDiij+0TRZZrKfR8jzdIotm5lt81xDvayGiVIR2CA0+ykQxPKncwqpfWNwBmLjNJzkgHtmlIQh5BFHEelJsjxxIBGhiKZHWsngjhIxlaVlcAYGoQwqYpeKT5OwPscQljqhnWcZyHJe4xwtRDqMV5+m1RCeKYbTiPCVm7xNXUEEpZHWZlDzRFaFkPIT4zSMijGajlDgAJGj5y0LFqaPvIPYMPeoq+lStoEHMeRQHmITE66AtmTRYFaX+dgcQX9g0W1Ron5oUNIi4nz1VEH0SmmgImRRYDQ8zrxwyKbA62rvMpMBC6hz3ErLEWgRkwfC64kucLkvc5BzWTWI1l0ucZ0S0lvNoJ7nkEUNIv+ENmpa4rgh1k+GrzLjJIs1wiyDqGhZxXhSHkCXoJyCDiTPz3SHEbx4RoY2jHjqEPG9eDh2wjNayQ8hCIBHRSho6iCz95AQsacjJwmkR4sgacZuLoILAYRUDHUoekzSoX1XgVuPKi0RphGSS6aScUIwssXxhgm7uUIw8mixkbIx2PyZj5NEiTlgb7Bh51FlI3BjFGFImooWG+cXnszS8ykQMjDrSDuYxZSLcV/xa2zxdQtNCFistxEouTGVVPrd1nV8MJzS9/nizcak6b2537Y+7ZN8KVjuJ5NWm+dX9uFm7X714dH6TgGSa0wQnK8VTNZ45fmp6QxVnglM3InoJbDaczx+W4BQwMkmu89Fr9zEJTkNDe/RpoiY4dZ/DJTrkYFYnLcFp8gNfLMGpRSYw2bGwxB7VX0+CU7sstld6gVjpXli2ZunBGU5aptri1hjTBQxG5gGNMkazUaYWB4+UISoePv0UT5b6oUjYrt5UB1Ad7P6XLp9Vw50JuxbPJ12fQ7ZFpQLXv9E5Tbwk7FDo4Tn0wFbw0J8lrFIrx3gD9wf4ZeW1bAVmPlMvK5mZ0FP5tprXm8vBnf9cN85v+3Wq8O0iMmI/KAn7Wvkcy0l0eb9lAVEAIDuIRQAcNFxbMacFSSWk3YwKAOE6K9IMNx8tibX9ZSRKRpGWJdph6ipG4mSYNMNhXBqVU0biZDiALOmQMlK/pBZgwZKRK1UcfpoDGFqbZgSgRxyc5dF31P3k7fqXOnl/tQ55791cewx54onTBe97b1J53j3hj8wyX/cD0MjvPUzQ97nuW127asV46QGyxLGtk9auISB9Ouh4WQrbVmATJ9YBQmpTi3MvSxrvQ5rATJPXW7+1tmmJE4CJd4YJo6d7S4MdqDJJRBiH3dMCxBVvOkWdAvHEY8cYYSpTgXlmJXEVYQLcKMQQT3SZSlye6nzBVS8PlBu1OHcJs3ii/b/ydJ7oaiUKZeraLsqVLTI1t6Uc8US/WW+X7R/W++5m64oUv2r/BP7TdbOsNsld+3vNHYNLWtrRXui5cUyEJ3FJHz81ubPHU83mkv48InzWhv27gS5pN3LvwRRnz1CAgPdq5TC5pN3QZ90ivC5p9zkcG5aDFw3RJT31gS/nki5ThVuiWeIL9RW5pPMsFThrqyBmo0joJn1il3Se9QuLq4I6D1hL6FEK8+nbEjAdF0Dp1RCjVoiDdOmA3pRXdbVcbz8wzSfvhaqI5cYUdE2PVugYtMyrLsa8nx07esyq/XpZn/bsWF+fzPfEIZs4H23QnA32eHYGAmnO+cht8ZgpHzv7DMzRf4alRQ+jphZN9yh4TpzgP67bq9N7TjLNcNxI06jDCvrQzRhfBU3KAf52saj3+/YLIaALXDiDeFvA7OBR02YAtBOcnxedLP2cZTIAusDdARXNKatgYGC0EOEA9JfNx8Qp8yGYccErYp0SBROJR8uKDy13a7m4SyppVkmVHLsMeYPHXVXJ4GHlR08f6ecFv72e17sA1BLzlMliAu7S0cLzA6itDYzIOdC4cJsiqpzCx+MwAPpNs2kt3VDxlgbT4qiwYeHNgCvw5ea2TlYd9gDYCouIpl6Clgb7YbVDZVvl+ERSnxyY8TNGcT8n2zIANG5ARBUSmGcfItv//Ne+rnaLq4CF1j2+J3GhYea93719VDDbf/4L1DDf/TATpdXuf+QsQLlsp4LzPXVB1L0kLLfhkVviAa6XnE8kf8FQNUfwZwhaURINEclGwTp1OAaIgUoL3BhYZAXxYTzJnuaryJHrtMBmAjH1V6koPbQdQkxdIN4LOkqBohagwYlkxKdNx1pBkyGVmLjFeZTyRA4gToshar0w4ZIxnbFDiLsCEBF60GcG7qXhRqcPvUYgk2G5HKYy9H0JiUr+k7xqbn7rLrX+Jeh70bWL02uZRRQwmGTHlxTtEGIHc068iIs4lTZaiFYqFgk7KbfOegYs7oRFI7QoWM6c9zGzOBRPlMOgDMAggDjMTdTLYblwxgpdHUKWZFRlovAEHUBcTJq6x7BhOTPC8SyZEIQ2JOU4DCDPHsNOdsxSiKmMVIRRODUdQMUihSclepkRWpb3xCfD4iRl+1X3Cx4ADUv7Ew2DaMrLIxSqU31WiIb0qgcFarXe7Q+X/kqT7dXTphniGgbdRnPBBwM0q2pRH/az46xmi02z9/dE6n4dwulOsSMTgDXLGZKHHTZsMw4SWYIYGkOj8lO2Ar7ydJStWuvlYjHPVuVy2RpCMltYt1wPc/xbc7fdNNWyI2jtr6pdnRzPVvJA5qo2m+MCdBfDY/siZqMkLSXcZfAkJK3jp6b30nKStLoRMVUmN0PDBpK0AkYOFuk8zbLx+iGPIWkNDR2RpNV9DnPCxLme8oEkrckPfDGSVotM4FoRhhrI/opIWnlfmS6IbCAtRtclPkmrSHPsxFE5zW7Rwken9ZtH72UJmpI1uHOTIepYJ2XPGT1TJpW4u9R09/YRiHG8xyZV2HtMFAsZJe/NAcR1n3JatE3LoPJUQRB72WDEXY6TfukQ4rNC7O4aJ/3SAbQs3kcdJ/2yA4hrKVERxjrJGltsinhQtEcgaNLiHo24thZ18q7arletUZK8dVF5/0u/nWSv4SG1UbGG/rfJImtB1epanL2YF7HciNYhPq5glPjiIt5beRxfpgPIkh+oY9V37CCyJAhqWN+RsY+SQ4hJZVSEwJPD2My5Q8hS21H7JNzSDwvO1yCChOGnUb+6H3vFeSefJ/XHanF4kThvT8hVano6AfFFMz7F/x8mtK837fJ/f+NGvjz+8G83nb/+eLG/au5m3e//ePHTtHFmUourihGfAhjN8qlP+916uay3XgAxW5l4wRqgNEw1R902ocfPFjiDh4YS1tsc1bB9BWG9XTWzm2pbb3ylAddpIUqDBRcxqzFoMU2B2ORAn0TmeCFiNZxY+kCXsTQCpuY+uozDFzP95j5UgLHshBJTUWgA8yyWqdVrnEMFGKXSTQeQpSt8nlmP+5KIED88RIRlNISKReXLRbSLRrGoe/lJx8LJFlj+IXbDVTwlFyFepzCALKZRLoLOSRBCXBSB9iLnMow7661Alrj+AXEFIWNeBjS9HmZRLO8d97P6eg7qbYEMkdfuL5Lv3r97+yyUO2H6Xck08faCUSTG3h0OIu61REQI/amj+0JEyKIn5Sq0BCtVcI7/btFcz5tjVuWD2EBDwWfiuMcndWsgbyXqkenN/D7XMXjiuDI4jbWWK+Mxc4JQ2jTD5gWx53ju0+YthFPUQjvTc4lKKBgYNQKnyP8rbJyinz79P1BLAwQUAAAICAACY5lYfJ0ATmYIAABwQQAACwAAAHJlcG9ydC5qc29uzZtNc9u6FYb/CkdrJ8X3R7b3Nm03baftTBd3sjgADizVtKihqDiZTP57D2XZVhKSNyIpX2ZjQqJI4MHBeV985MvqHhtI0MDq3ZcVxOYA5X+r+g7r/eqd/Hqz2jdQN//Z3OPqHbdcMaOtlV7bm1U61NBsqu3qnWVasLdauJtV3pRIv/zty/Hqb2n1bpUkd9JxqT344A3EwHH1eOffoX3ual3d49v9DuPbZk/fNLhvHp/RXvU+402IyANLXibvUAgTjbLtzzdNeXwq7Iu/0pN3cIvFP3a4Lf5Sw25d/EqNLWCbirblxfHuYzHhPtab3bFJN6tdXf0PY3OqYVzX1f3mcE9flFU8NfuxjT/Wv9xsW1riZhWr8nBPd/Kv57i4lP5mBdtt1Rw/adv6geoNt6er6tDE6vhe/ERPbTC1FYJmffr6bvWuqQ94s6pxfyhPrKBpIK7vcXssf/j64evN7wFUwieQnHvNU04CwEC4EsC8qTFXn+bhpy1bBD8hWc4ZARmLiTGgcIxX4veA4W7TzINPKf0a+D4ck0dbJI70rpISys3LI9vCYftSpC7NJdx9Pl7t7za73enTp/d9bTvkOav47F1OLrrEtXRZYwjh26xSwmdqyXBe6XrKGxsjC1EBxCwcUyFanc66tal2xRohYV3UuKU/+6KsbqtjFxL7u/2F2eOHej52oHzpP/1d+mgT7euGfycnnSQKxaOKWuUYeVb6PPxzVTUvjOaBImwvFaFfJap/l0oWmKS3HpJG9AZZSGZS9AymzouDR6hXz52dmFg2gXGJHpORAbnNyf588IxhMhA7Ui8DijHZpmhttlEIYIEpOy12hmTj0tDx+tVdSyekmAFUoIyjwAneXob085EzgshA4DD7R0mpOZdSM0lKgTnHjEroM0rNEbPO30rpHqGO62Ep7XrKG4plkaPnaB31kwnOmnOH+RTFZ+Yoze7Of6j8Kc71S6/Kb3vV8PGRvvr38XXF0fTRXbtqSx25GjkAOqEqrY1ThivrrTIuSmuxA2qzxuK2rAKUxSOCIkB9ZNlmz31R5VzsDzHifp8PT/fgpULdQ1fZPrpaufFj5hXoCsETokxka8jzC9lOizrovoeIDZEs22QTDk1DLSkgVB/xEXy9SVTBuqYGlJ/nYcp5P1Sr5JKhuuR1smDIuyrusjXOyp6Qff+I9L5KFLhttEJxi1usqVQftnRLXR1u1xS9xWZLN0I8trd42DTrzUypgaZ6faCV5osGjVxmTc5TOCDmholg2Bnob+DmNoRbcmVZHHaUeLH4Z40fN/hQ/OuxFsXDmhLz6T6oKbQP9RZTUW3/RNljpjwsVG8ids4sGXYy2tO833qnMlMG0XnfBzvCNmL5nClSVVCrinu4o8qtYXtLCbmpjgPglKyf6jYPZG/6IAup+JIhR6VRo1M2RGRcuWid6Egdp1zb1mSzhflsghK+j5zRyybHJLfSWBkpFehgRAapOsi1y71P0UYDfkOVaicTT+F4/Lqt5Uw8fa/vav3MonlqmY3KyvgojeIWU4D5zezg1PZyLyvFovVKZJYTC9JyjYwme1GGrhidy8uOgTtgZa0Yv27wCnCzSC6bEHnwXEk0MZiuicI0KzsG6ZCTPe4tLZdpcEnqyIwLMYfgRfKqa0Y7v5MdxbnfyGqulu2tSPatoXIQNtkYKOPmVzOyo3Jwv48VTIslsw4eolYsOeEQgpP0sbu6jx3FeMDGKrfovJF4ijGj49ILEBkTJj7Oxo7SsH4Xq+2Exe/XWO1ynAEoT/rldHLRgLAd4Ea72FE4B0ysc4tePMxWgpHGeBQebbQshSusyA6tsl/uYakdS0bKkQvNknT0rccsJBe5xxLM4WFHsO23sO0y8pLZMptSUBmB60zTBFQqds3+p1nYEUQHHaxddLgGS9MsG5TKUjnPpJIm9oTrvA52DOZ+A2v4sndpssvKKQekW1wAt0Kw85ntdQ3smPw75F/lopNEaNcHwfGoo7COawgs9qGezb+OQTxgX61ZtH3NMpOsueC1sqCFEz6njqTxE/Z1jHwNuFfJF82NoYop25QzB7SMqyBZB7fR7nUMzX7zqoX9I2l2HHNok9LLwYa2NOGgQ0CmjBOJWe2llCoJ9d1J5AcCPXzMoesZb6iHuQuayZgCZC2k5F3bm1c95vBd1U8Zp1c+hRUT5PM5IKcPm06gwjGnlCCUEIJAr2LnyuXz2GhPRpX4kRL783H2Gegp17/aICYo4rXpeZkyt1GDkpYqCg6176H350+7siI78f5QU7Em0Tt6uOKXkrwzFcvNiMObnTC56007nrEF0+TtfrrjGZIV2uVA//qmd+83NITJ++6LTYP3xwH9C12dffRoQh7ovuphFqzC9Wqjsm7C3s+1sWZrTYAkdKSxLZnRgp0P8V+rh21ZQTpC3K9by5s2UFa3z0cfgcxyrGjesW1mGeysF6RQU8zZtUFGsBlkZiJxYazkNLvrOrB0zW3JS7XHyAkb59fmSdkSDAgvhSclkQhOuInaczm8AelxU5YXri7cjBMv8NqgIeFRhnWeOZggPZezHFIeZRcciaQ7NkHmwYJPJmYReZ+OT1Wey6kOCI/mZsFUc4wJVGAONELKTOlgZhOeESN9QHeMW7AvykYwmtwK0/4XTK2YTKFrY+aKOwmXyg5nE7Zhrz7YEbnJES0qmwRNIyFMlZ2L2Q2ojncLZheFyYpzSpAWnNTBIep5VedilAOi48SUPZdrsyS9MdIiuuizI/kOznftuMwhOhdDHdIcqyecZ7k2VFQqxRhY9ilZTokzuvkmO5cP837JkZxNOA0wEWPH+h/X5+t/benC9b8P39Bq33Q+OXyR6xPEjiq0SfHllW3psirQr+u6qh8b+X9QSwECPwMUAAAICAACY5lYyOqoD1IEAABmIwAAGQAAAAAAAAAAAAAAtIEAAAAAZDMxODM4MTM1OWE5Yjk2YWNiMWUuanNvblBLAQI/AxQAAAgIAAJjmVh6lqHQRAUAAGUwAAAZAAAAAAAAAAAAAAC0gYkEAAA5Zjk4ZmQ4YzhkMTUzOGY1ZWJiYi5qc29uUEsBAj8DFAAACAgAAmOZWJqlKfeNNgAARDcCABkAAAAAAAAAAAAAALSBBAoAAGEwODgwNjRkZTlmZTM1MWVlZjVmLmpzb25QSwECPwMUAAAICAACY5lYkQ2MAlYrAABl5wEAGQAAAAAAAAAAAAAAtIHIQAAAYmUwNDY4MmQwNzU5MzMzNGQyNGUuanNvblBLAQI/AxQAAAgIAAJjmVh8nQBOZggAAHBBAAALAAAAAAAAAAAAAAC0gVVsAAByZXBvcnQuanNvblBLBQYAAAAABQAFAFUBAADkdAAAAAA="; \ No newline at end of file diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 00000000..26f11d6d --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,81 @@ +/* eslint sort-keys: "off" */ + +import { defineConfig, devices } from "@playwright/test"; + +/* eslint-disable @typescript-eslint/no-var-requires */ +require("dotenv").config(); + +const PORT = process.env.PORT || 3000; +const BASE_URL = + process.env.BASE_URL || `https://devbox.library.northwestern.edu:${PORT}`; + +export default defineConfig({ + testDir: "./tests", + fullyParallel: false, + + /* Increase locator timeout past default 5s */ + expect: { + timeout: 10 * 1000, + }, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + reporter: "html", + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : 3, + /* Increase the default timeout to 10 seconds. */ + timeout: 10000, + + use: { + baseURL: BASE_URL, + /* Collect trace when retrying the failed test. */ + trace: "on-first-retry", + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + + { + name: "firefox", + use: { ...devices["Desktop Firefox"], ignoreHTTPSErrors: true }, + }, + + { + name: "webkit", + use: { ...devices["Desktop Safari"] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + // webServer: { + // command: "npm run dev:ci", + // url: BASE_URL, + // timeout: 30 * 1000, + // reuseExistingServer: !process.env.CI, + // }, +}); diff --git a/tests/fixtures/open-graph.ts b/tests/fixtures/open-graph.ts new file mode 100644 index 00000000..7aaafa27 --- /dev/null +++ b/tests/fixtures/open-graph.ts @@ -0,0 +1,86 @@ +import { type Locator, type Page, expect } from "@playwright/test"; + +export class OpenGraphPage { + defaultTitle: string = + "Digital Collections - Northwestern University Libraries"; + + defaultDescription: string = + "Explore digital resources from the Northwestern University Library collections – including letters, photographs, diaries, maps, and audiovisual materials - as well as licensed art historical images for teaching and reference."; + + dcUrl: string = "https://digitalcollections.library.northwestern.edu"; + + iiifImageServerUrl: string = `https://iiif.stack.rdc.library.northwestern.edu/iiif/2/`; + + readonly metaDescription: Locator; + readonly metaTitle: Locator; + readonly ogDescription: Locator; + readonly ogSiteName: Locator; + readonly ogImage: Locator; + readonly ogUrl: Locator; + + constructor( + public readonly page: Page, + public readonly route: string + ) { + this.metaDescription = page.locator('meta[name="description"]'); + this.metaTitle = page.locator('meta[property="og:title"]'); + this.ogDescription = page.locator('meta[property="og:description"]').nth(0); + this.ogImage = page.locator('meta[property="og:image"]'); + this.ogSiteName = page.locator('meta[property="og:site_name"]'); + this.ogUrl = page.locator('meta[property="og:url"]'); + this.route = route; + } + + async goto() { + await this.page.goto(this.route); + } + + async hasDefaultDescription() { + await expect(this.metaDescription).toHaveAttribute( + "content", + this.defaultDescription + ); + } + + async hasDefaultOGDescription() { + await expect(this.ogDescription).toHaveAttribute( + "content", + this.defaultDescription + ); + } + + async hasDefaultOGImage() { + await expect(this.ogImage).toHaveAttribute( + "content", + `${this.iiifImageServerUrl}999a8522-aa7a-4c49-a4a1-25165be91b05/full/461,/0/default.jpg` + ); + } + + async hasOGDescription(description: string) { + await expect(this.ogDescription).toHaveAttribute("content", description); + } + + async hasOGImage(uri: string) { + await expect(this.ogImage).toHaveAttribute("content", uri); + } + + async hasOGUrl(route: string) { + const params = route ? `/${route}` : ""; + await expect(this.ogUrl).toHaveAttribute( + "content", + `${this.dcUrl}${params}` + ); + } + + async hasMetaDescription(description: string) { + await expect(this.metaDescription).toHaveAttribute("content", description); + } + + async hasMetaTitle(title: string | null) { + await expect(this.metaTitle).toHaveAttribute("content", title || ""); + } + + async hasOGSiteName() { + await expect(this.ogSiteName).toHaveAttribute("content", this.defaultTitle); + } +} diff --git a/tests/fixtures/search-page.ts b/tests/fixtures/search-page.ts new file mode 100644 index 00000000..8ce27be4 --- /dev/null +++ b/tests/fixtures/search-page.ts @@ -0,0 +1,44 @@ +import { type Page, expect } from "@playwright/test"; + +export class SearchPage { + readonly DEFAULT_PAGINATION_SIZE = 40; + readonly TOTAL_RESULTS = 205; + + readonly route: string = "/search"; + + constructor(public readonly page: Page) {} + + async goto() { + await this.page.goto(this.route); + } + + getPaginationResults = (totalCount: number) => + totalCount > this.DEFAULT_PAGINATION_SIZE + ? this.DEFAULT_PAGINATION_SIZE + : totalCount; + + async verifyGridItemCount(totalCount = 0) { + const paginationResultsCount = this.getPaginationResults(totalCount); + await expect(this.page.getByTestId(`grid-item`)).toHaveCount( + paginationResultsCount + ); + } + + async verifyTopResultsCount(count: number) { + await expect(this.page.getByTestId(`results-count`)).toContainText( + `${count} results` + ); + } + + async verifyTotalsResultDisplay({ + count, + total, + }: { + count: number; + total: number; + }) { + await expect(this.page.getByTestId("results")).toHaveText( + `Showing 1 to ${count} of ${total} results` + ); + } +} diff --git a/tests/fixtures/work-page.ts b/tests/fixtures/work-page.ts new file mode 100644 index 00000000..72308ca3 --- /dev/null +++ b/tests/fixtures/work-page.ts @@ -0,0 +1,7 @@ +import { type Page } from "@playwright/test"; + +export class WorkPage { + readonly route: string = "/items"; + + constructor(public readonly page: Page) {} +} diff --git a/tests/fixtures/works/canary-work.ts b/tests/fixtures/works/canary-work.ts new file mode 100644 index 00000000..47902cf4 --- /dev/null +++ b/tests/fixtures/works/canary-work.ts @@ -0,0 +1,398 @@ +/* eslint-disable sort-keys */ + +import { Work } from "@nulib/dcapi-types"; + +type WorkExtended = Work & { + canonical_link: string; + related_material: string[]; +}; + +export const canaryWork: WorkExtended = { + abstract: ["Updated description!!!"], + accession_number: "TEST_canary_002", + alternate_title: ["This is an alternative title"], + api_link: + "https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2/works/cb8a19a7-3dec-47f3-80c0-12872ae61f8f", + api_model: "Work", + ark: "ark:/81985/n2x34qh35", + batch_ids: [ + "20ebb42e-93a5-4e47-bfcb-f3491f319b48", + "512ae70f-13db-46cb-ad5b-bd768302d919", + "59c46d06-a2be-4b25-9dc5-ceb1671bf1b8", + ], + box_name: ["The name of a box"], + box_number: ["88"], + canonical_link: + "https://dc.library.northwestern.edu/items/cb8a19a7-3dec-47f3-80c0-12872ae61f8f", + caption: ["Beebo"], + catalog_key: ["MS-1984-1982-1989"], + collection: { + description: "A private collection for Meadow test records", + id: "820fc328-a333-430b-a974-ac6218a1ffcd", + title: "TEST Canary Records", + }, + contributor: [ + { + facet: + "http://id.loc.gov/authorities/names/n91114928|ctg|Metallica (Musical group) (Cartographer)", + id: "http://id.loc.gov/authorities/names/n91114928", + label: "Metallica (Musical group)", + label_with_role: "Metallica (Musical group) (Cartographer)", + role: "Cartographer", + variants: [], + }, + { + facet: + "http://id.worldcat.org/fast/1717972|act|Schober, Franz von, 1796-1882 (Actor)", + id: "http://id.worldcat.org/fast/1717972", + label: "Schober, Franz von, 1796-1882", + label_with_role: "Schober, Franz von, 1796-1882 (Actor)", + role: "Actor", + variants: [], + }, + ], + create_date: "2022-08-02T18:52:31.503448Z", + creator: [ + { + facet: + "http://id.loc.gov/authorities/names/no2011059409||Dessa (Vocalist)", + id: "http://id.loc.gov/authorities/names/no2011059409", + label: "Dessa (Vocalist)", + variants: [ + "Dessa, 1981-", + "Wander, Dessa, 1981-", + "Dessa Darling", + "Wander, Margret", + ], + }, + ], + csv_metadata_update_jobs: ["6eef2d27-dc36-4470-b461-820ae199b835"], + cultural_context: ["Test Context"], + date_created: ["August 1906 to December 1910", "1958"], + description: [ + "This is a private record for RepoDev testing on production", + "Test", + ], + file_sets: [ + { + accession_number: "TEST_canary_002_001", + description: "access tif", + duration: null, + height: 3024, + id: "39a418a3-1ec7-4ef6-ae0c-0227c5aa2355", + label: "access tif", + mime_type: "image/tiff", + original_filename: "Squirrel.tif", + poster_offset: null, + rank: 0, + representative_image_url: + "https://dc-test-iiif.rdc-staging.library.northwestern.edu/iiif/2/39a418a3-1ec7-4ef6-ae0c-0227c5aa2355", + role: "Access", + streaming_url: null, + webvtt: null, + width: 4032, + }, + { + accession_number: "TEST_canary_002_006", + description: "access jpg", + duration: null, + height: 4032, + id: "a59dc417-d313-4286-88d4-1c80916b82c6", + label: "access jpg", + mime_type: "image/jpeg", + original_filename: "PXL_20211213_211133857.jpg", + poster_offset: null, + rank: 1073741824, + representative_image_url: + "https://dc-test-iiif.rdc-staging.library.northwestern.edu/iiif/2/a59dc417-d313-4286-88d4-1c80916b82c6", + role: "Access", + streaming_url: null, + webvtt: null, + width: 3024, + }, + { + accession_number: "KETCHUM_CCC", + description: "Ketchum, 1974", + duration: null, + height: 4438, + id: "c285fdc6-d7ee-4a94-a548-2c80e22584da", + label: "Cocktail Construction Chart", + mime_type: "image/jpeg", + original_filename: "cocktail_construction_chart_1974.jpg", + poster_offset: null, + rank: 1610612736, + representative_image_url: + "https://dc-test-iiif.rdc-staging.library.northwestern.edu/iiif/2/c285fdc6-d7ee-4a94-a548-2c80e22584da", + role: "Access", + streaming_url: null, + webvtt: null, + width: 6494, + }, + { + accession_number: "TEST_canary_002_002", + description: "preservation bmp", + duration: null, + height: 862, + id: "b60fc7a7-8f13-407e-8b69-9a030b01daae", + label: "preservation bmp", + mime_type: "image/bmp", + original_filename: "Angela_and_Lisa_Redd.bmp", + poster_offset: null, + rank: 0, + representative_image_url: null, + role: "Preservation", + streaming_url: null, + webvtt: null, + width: 640, + }, + { + accession_number: "TEST_canary_002_004", + description: "preservation tif", + duration: null, + height: 4032, + id: "258f7218-2f42-4293-8a18-a0aa5e1484f0", + label: "preservation tif", + mime_type: "image/tiff", + original_filename: "distillery.tif", + poster_offset: null, + rank: 1073741824, + representative_image_url: null, + role: "Preservation", + streaming_url: null, + webvtt: null, + width: 3024, + }, + { + accession_number: "TEST_canary_002_005", + description: "preservation jpg", + duration: null, + height: 4032, + id: "4c7b9949-9cb1-4da2-83bd-04d9dd6d0c4f", + label: "preservation jpg", + mime_type: "image/jpeg", + original_filename: "PXL_20211213_211133857.jpg", + poster_offset: null, + rank: 1610612736, + representative_image_url: null, + role: "Preservation", + streaming_url: null, + webvtt: null, + width: 3024, + }, + { + accession_number: "TEST_canary_002_003", + description: "auxiliary png", + duration: null, + height: 4000, + id: "e2dfbed2-b125-486a-b33f-ddeff349f887", + label: "auxiliary png", + mime_type: "image/jpeg", + original_filename: "CoopersHawk.png", + poster_offset: null, + rank: 0, + representative_image_url: + "https://dc-test-iiif.rdc-staging.library.northwestern.edu/iiif/2/e2dfbed2-b125-486a-b33f-ddeff349f887", + role: "Auxiliary", + streaming_url: null, + webvtt: null, + width: 6000, + }, + ], + folder_name: ["Blue folder"], + folder_number: ["88"], + genre: [ + { + facet: "http://vocab.getty.edu/aat/300435283||stencil prints", + id: "http://vocab.getty.edu/aat/300435283", + label: "stencil prints", + variants: [], + }, + ], + id: "cb8a19a7-3dec-47f3-80c0-12872ae61f8f", + identifier: ["555"], + iiif_manifest: + "https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2/works/cb8a19a7-3dec-47f3-80c0-12872ae61f8f?as=iiif", + indexed_at: "2023-03-15T21:45:34.246257", + ingest_project: { + id: "e98ca38d-7677-43f8-bc30-f36f92eded0a", + title: "golive_smoketest", + }, + ingest_sheet: { + id: "3999f185-ec7a-4cd9-a219-02aa4cb54ceb", + title: "TEST_CanaryRecords_prod.csv", + }, + keywords: ["leaves"], + language: [ + { + facet: "http://id.loc.gov/vocabulary/languages/crh||Crimean Tatar", + id: "http://id.loc.gov/vocabulary/languages/crh", + label: "Crimean Tatar", + variants: [], + }, + ], + legacy_identifier: ["555"], + library_unit: "University Main Library", + license: { + id: "http://www.europeana.eu/portal/rights/rr-r.html", + label: "All rights reserved", + }, + location: [ + { + facet: "https://sws.geonames.org/4999069/||Leland Township", + id: "https://sws.geonames.org/4999069/", + label: "Leland Township", + variants: [], + }, + ], + modified_date: "2022-12-05T15:52:58.347463Z", + notes: [ + { + note: "Here are some notes", + type: "General Note", + }, + { + note: "Awards type", + type: "Awards", + }, + { + note: "Biographical note", + type: "Bibliographical/Historical Note", + }, + { + note: "creation production credits", + type: "Creation/Production Credits", + }, + { + note: "Language note", + type: "Lanugage Note", + }, + { + note: "Local Note", + type: "Local Note", + }, + { + note: "Performers", + type: "Performers", + }, + { + note: "Statement of Responsibility", + type: "Statement of Responsibility", + }, + { + note: "Venue/event date", + type: "Venue/Event Date", + }, + ], + physical_description_material: ["Acrylic paint on cement block"], + physical_description_size: ["16 x 24 inches"], + preservation_level: "Level 1", + project: { + cycle: "2022", + desc: "This is a description", + manager: "Nicole Finzer", + name: "Test", + proposer: "Carolyn Caizzi", + task_number: "P0000", + }, + provenance: [ + "Artist; sold to Mr. Blank in 1955; sold to Lancelot in 2017; gifted to Northwestern University in 2019", + ], + published: true, + publisher: ["Northwestern University Press"], + related_material: ["See Also: related material"], + related_url: [ + { + label: "Finding Aid", + url: "https://findingaids.library.northwestern.edu/", + }, + { + label: "Resource Guide", + url: "https://www.wbez.org/", + }, + { + label: "Related Information", + url: "https://www.nationalgeographic.com/animals/mammals/facts/squirrels", + }, + { + label: "Hathi Trust", + url: "https://www.hathitrust.org/", + }, + ], + representative_file_set: { + aspect_ratio: 0.75, + id: "a59dc417-d313-4286-88d4-1c80916b82c6", + url: "https://dc-test-iiif.rdc-staging.library.northwestern.edu/iiif/2/a59dc417-d313-4286-88d4-1c80916b82c6", + }, + rights_holder: ["Artist"], + rights_statement: { + id: "http://rightsstatements.org/vocab/InC-EDU/1.0/", + label: "In Copyright - Educational Use Permitted", + }, + scope_and_contents: ["I promise there is scope and content"], + series: ["Canaries and How to Care for Them"], + source: ["Mars"], + status: "Done", + style_period: [ + { + facet: + "http://vocab.getty.edu/aat/300018478||Qing (dynastic styles and periods)", + id: "http://vocab.getty.edu/aat/300018478", + label: "Qing (dynastic styles and periods)", + variants: [], + }, + ], + subject: [ + { + facet: + "http://id.worldcat.org/fast/1902713|TOPICAL|Cats on postage stamps (Topical)", + id: "http://id.worldcat.org/fast/1902713", + label: "Cats on postage stamps", + label_with_role: "Cats on postage stamps (Topical)", + role: "Topical", + variants: [], + }, + { + facet: + "info:nul/6cba23b5-a91a-4c13-8398-54967b329d48|TOPICAL|Test Record Canary (Topical)", + id: "info:nul/6cba23b5-a91a-4c13-8398-54967b329d48", + label: "Test Record Canary", + label_with_role: "Test Record Canary (Topical)", + role: "Topical", + variants: [], + }, + { + facet: + "http://vocab.getty.edu/tgn/2000971|GEOGRAPHICAL|Leelanau (Geographical)", + id: "http://vocab.getty.edu/tgn/2000971", + label: "Leelanau", + label_with_role: "Leelanau (Geographical)", + role: "Geographical", + variants: [], + }, + { + facet: + "http://id.worldcat.org/fast/1204587|GEOGRAPHICAL|Michigan--Ann Arbor (Geographical)", + id: "http://id.worldcat.org/fast/1204587", + label: "Michigan--Ann Arbor", + label_with_role: "Michigan--Ann Arbor (Geographical)", + role: "Geographical", + variants: [], + }, + ], + table_of_contents: ["1. cats; 2. dogs"], + technique: [ + { + facet: + "http://vocab.getty.edu/aat/300053228||drypoint (printing process)", + id: "http://vocab.getty.edu/aat/300053228", + label: "drypoint (printing process)", + variants: [], + }, + ], + terms_of_use: "Terms ", + thumbnail: + "https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2/works/cb8a19a7-3dec-47f3-80c0-12872ae61f8f/thumbnail", + title: "Canary Record TEST 3", + visibility: "Public", + work_type: "Image", +}; diff --git a/tests/home.spec.ts b/tests/home.spec.ts new file mode 100644 index 00000000..0c533c84 --- /dev/null +++ b/tests/home.spec.ts @@ -0,0 +1,24 @@ +import { OpenGraphPage } from "./fixtures/open-graph"; +import { test } from "@playwright/test"; + +const ogTest = test.extend<{ openGraphPage: OpenGraphPage }>({ + openGraphPage: async ({ page }, use) => { + const openGraphPage = new OpenGraphPage(page, "/"); + await openGraphPage.goto(); + await use(openGraphPage); + }, +}); + +ogTest( + "has Homepage Open Graph Data and meta title and description", + async ({ openGraphPage }) => { + await openGraphPage.hasOGSiteName(); + await openGraphPage.hasMetaTitle( + "Digital Collections - Northwestern University Libraries" + ); + await openGraphPage.hasDefaultDescription(); + await openGraphPage.hasDefaultOGDescription(); + await openGraphPage.hasOGUrl(""); + await openGraphPage.hasDefaultOGImage(); + } +); diff --git a/tests/layout.spec.ts b/tests/layout.spec.ts new file mode 100644 index 00000000..193efe1e --- /dev/null +++ b/tests/layout.spec.ts @@ -0,0 +1,44 @@ +import { expect, test } from "@playwright/test"; + +test("top header renders logo and links", async ({ page }) => { + await page.goto("/"); + + // Renders the Northwestern logo + await expect(page.getByTestId("northwestern-logo")).toBeVisible(); + + // Renders the main navigation links + const navEl = page.getByTestId("super-nav"); + + await expect( + navEl.getByRole("link", { exact: true, name: "Libraries" }) + ).toHaveAttribute("href", "https://www.library.northwestern.edu/"); + + await expect( + navEl.getByRole("link", { exact: true, name: "About" }) + ).toHaveAttribute("href", "/about"); + + await expect( + navEl.getByRole("link", { exact: true, name: "Contact" }) + ).toHaveAttribute("href", "/contact"); + + await expect(navEl.getByRole("link", { name: "Sign in" })).toBeVisible(); +}); + +test("footer renders", async ({ page }) => { + await page.goto("/"); + + const footerEl = page.getByTestId("footer"); + + // This component is coming from NUL Design System; not necessary to test everything in it + await expect(footerEl).toBeVisible(); + await expect( + footerEl.getByAltText("Northwestern University logo") + ).toBeVisible(); + + // Display NUL ethics message + await expect( + page.getByText( + "Northwestern University Libraries is dedicated to the fair and ethical" + ) + ).toBeVisible(); +}); diff --git a/tests/search.spec.ts b/tests/search.spec.ts new file mode 100644 index 00000000..41a394e7 --- /dev/null +++ b/tests/search.spec.ts @@ -0,0 +1,506 @@ +import { test as base, expect } from "@playwright/test"; + +import { OpenGraphPage } from "@/tests/fixtures/open-graph"; +import { SearchPage } from "@/tests/fixtures/search-page"; + +type SearchPageFixtures = { + openGraphPage: OpenGraphPage; + searchPage: SearchPage; +}; + +const TOTAL_RESULTS = 205; + +/** Set up Fixtures for the test. Super handy */ +// https://playwright.dev/docs/test-fixtures +const test = base.extend({ + // A common fixture to help with Open Graph data + openGraphPage: async ({ page }, use) => { + const openGraphPage = new OpenGraphPage(page, "/search"); + await openGraphPage.goto(); + await use(openGraphPage); + }, + // A fixture to help with the Search Page shared functionality + searchPage: async ({ page }, use) => { + const searchPage = new SearchPage(page); + await searchPage.goto(); + await use(searchPage); + }, +}); + +test.describe("Search page component", () => { + test.beforeEach(async ({ page }) => { + await page.goto("/search"); + }); + + test("renders Open Graph data and meta title and description", async ({ + openGraphPage, + }) => { + await openGraphPage.hasOGSiteName(); + await openGraphPage.hasMetaTitle("Search"); + await openGraphPage.hasDefaultDescription(); + await openGraphPage.hasDefaultOGDescription(); + await openGraphPage.hasOGUrl("search"); + await openGraphPage.hasDefaultOGImage(); + await openGraphPage.hasDefaultOGDescription(); + }); + + test("renders the global search bar and fires off successful searches", async ({ + page, + searchPage, + }) => { + const searches = [ + { + expectedResultCount: 5, + term: "Obama", + }, + { + expectedResultCount: 35, + term: "Illinois", + }, + { + expectedResultCount: 8, + term: "Berkeley", + }, + ]; + + const searchInput = page.getByPlaceholder("Search by keyword or phrase,"); + const searchBtn = page.getByTestId("submit-button"); + + await searchPage.verifyTopResultsCount(TOTAL_RESULTS); + await searchPage.verifyGridItemCount(TOTAL_RESULTS); + + // Test "Obama" search term + await searchInput.fill(searches[0].term); + await searchBtn.click(); + + await expect(page).toHaveURL(`/search?q=${searches[0].term}`); + await searchPage.verifyTopResultsCount(searches[0].expectedResultCount); + await expect(searchInput).toHaveValue(searches[0].term); + + const search1 = searchPage.getPaginationResults( + searches[0].expectedResultCount + ); + + await searchPage.verifyTopResultsCount(searches[0].expectedResultCount); + await searchPage.verifyTotalsResultDisplay({ + count: search1, + total: search1, + }); + + // Test "Illinois" search term + await searchInput.fill(searches[1].term); + await searchBtn.click(); + + await expect(page).toHaveURL(`/search?q=${searches[1].term}`); + await searchPage.verifyTopResultsCount(searches[1].expectedResultCount); + await expect(searchInput).toHaveValue(searches[1].term); + + const search2 = searchPage.getPaginationResults( + searches[1].expectedResultCount + ); + + await searchPage.verifyTopResultsCount(searches[1].expectedResultCount); + await searchPage.verifyTotalsResultDisplay({ + count: search2, + total: search2, + }); + + // Reset the search + await page.getByRole("button", { name: "Clear" }).click(); + await expect(page).toHaveURL(/\/search/); + + // Verify original counts are back in place + await searchPage.verifyTopResultsCount(TOTAL_RESULTS); + await searchPage.verifyGridItemCount(TOTAL_RESULTS); + }); + + test("renders Facet filter buttons above the grid correctly", async ({ + page, + searchPage, + }) => { + const facetInlineComponent = page.getByTestId("facet-inline-component"); + const allBtn = facetInlineComponent.getByLabel("All"); + const imageBtn = facetInlineComponent.getByLabel("Image"); + const audioBtn = facetInlineComponent.getByLabel("Audio"); + const videoBtn = facetInlineComponent.getByLabel("Video"); + const clearAllBtn = page.getByRole("button", { + name: "Clear All", + }); + const publicWorksToggle = page.getByLabel("Public works only"); + const facetUserComponent = page + .getByTestId("facet-user-component") + .locator("span"); + + const IMAGE_COUNT = 152; + const AUDIO_COUNT = 25; + const VIDEO_COUNT = 28; + const PUBLIC_WORKS_COUNT = 179; + + // Work Type facet button checks + await expect(allBtn).toHaveAttribute("aria-checked", "true"); + await expect(imageBtn).toHaveAttribute("aria-checked", "false"); + + // Select Image facet + await imageBtn.click(); + await expect(imageBtn).toHaveAttribute("aria-checked", "true"); + await expect(allBtn).toHaveAttribute("aria-checked", "false"); + await searchPage.verifyTopResultsCount(IMAGE_COUNT); + await searchPage.verifyGridItemCount(IMAGE_COUNT); + + // Select Audio facet + await audioBtn.click(); + await expect(audioBtn).toHaveAttribute("aria-checked", "true"); + await expect(imageBtn).toHaveAttribute("aria-checked", "false"); + await searchPage.verifyTopResultsCount(AUDIO_COUNT); + await searchPage.verifyGridItemCount(AUDIO_COUNT); + + // Select Video facet + await videoBtn.click(); + await expect(videoBtn).toHaveAttribute("aria-checked", "true"); + await expect(audioBtn).toHaveAttribute("aria-checked", "false"); + await searchPage.verifyTopResultsCount(VIDEO_COUNT); + await searchPage.verifyGridItemCount(VIDEO_COUNT); + + // Toggle Public Works + await allBtn.click(); + await publicWorksToggle.click(); + + await searchPage.verifyTopResultsCount(PUBLIC_WORKS_COUNT); + await searchPage.verifyGridItemCount(PUBLIC_WORKS_COUNT); + + // Test Filter Facet Toggle UI + await clearAllBtn.click(); + await expect(facetUserComponent).not.toBeVisible(); + + await imageBtn.click(); + await expect(facetUserComponent).toBeVisible(); + await expect(facetUserComponent).toContainText("1"); + + await publicWorksToggle.click(); + await expect(facetUserComponent).toContainText("2"); + }); + + test("renders the Filter modal and a general run through of interactions within", async ({ + page, + }) => { + const filterBtn = page.getByRole("button", { name: "Filter Filter" }); + const filterModalHeading = page.getByRole("heading", { name: "Filter" }); + const filterModalBody = page.getByTestId("facets-group-list"); + + await filterBtn.click(); + + // Test Filter Modal UI, default layout and interactions + await expect(filterModalHeading).toBeInViewport(); + await page.getByRole("banner").getByTestId("facets-filter-close").click(); + await page.getByRole("button", { name: "Filter Filter" }).click(); + await page.getByRole("button", { name: "Clear All" }).click(); + await page.getByText("Cancel").click(); + await page.getByRole("button", { name: "Filter Filter" }).click(); + await page + .getByTestId("facets-submit") + .getByTestId("submit-button") + .click(); + + expect(filterModalHeading).not.toBeVisible(); + + // Test facets; Subject and Descriptive defaults open on load + await filterBtn.click(); + await expect( + filterModalBody.getByRole("button", { name: "Subject and Descriptive" }) + ).toBeVisible(); + + // Test Genre facet + await page.getByRole("tab", { name: "Genre" }).click(); + await page.getByRole("heading", { name: "Genre" }).click(); + + // Test Language facet + await page.getByRole("tab", { name: "Language" }).click(); + await page.getByRole("heading", { name: "Language" }).click(); + await page.locator("li").filter({ hasText: "English(84)" }).click(); + await page.locator("li").filter({ hasText: "French(11)" }).click(); + + // Test Style Period facet + await page.getByRole("tab", { name: "Style Period" }).click(); + await page.getByRole("heading", { name: "Style Period" }).click(); + await page.getByPlaceholder("Find Style Period").click(); + await page.getByText("Qing (dynastic styles and").click(); + await page + .getByTestId("facet-options") + .getByLabel("Qing (dynastic styles and") + .click(); + + // Test Subject facet + await page.getByRole("tab", { name: "Subject" }).click(); + await page + .getByTestId("facet-multi-component") + .getByRole("heading", { name: "Subject" }) + .click(); + await page.getByPlaceholder("Find Subject").click(); + await page + .getByText("Northwestern University (Evanston, Ill.)(21)") + .click(); + await page + .getByLabel("Northwestern University (Evanston, Ill.)(22)") + .click(); + + // Test Technique facet + await page.getByRole("tab", { name: "Technique" }).click(); + await page.getByRole("heading", { name: "Technique" }).click(); + await page.getByPlaceholder("Find Technique").click(); + await page + .locator("li") + .filter({ hasText: "photomechanical processes(6)" }) + .click(); + await page.getByLabel("photomechanical processes(6)").click(); + + // Test Work Type facet + await page.getByRole("tab", { name: "Work Type" }).click(); + await page.getByRole("heading", { name: "Work Type" }).click(); + await page.getByPlaceholder("Find Work Type").click(); + await page.getByTestId("facet-options").click(); + + // Close modal + await page.getByRole("banner").getByTestId("facets-filter-close").click(); + + // Reopen modal + await filterBtn.click(); + + // Check Collection and Location Group facets + await page.getByRole("button", { name: "Collection and Location" }).click(); + await page.getByRole("tab", { name: "Collection" }).click(); + await page + .getByTestId("facet-multi-component") + .getByRole("heading", { name: "Collection" }) + .click(); + await page.getByPlaceholder("Find Collection").click(); + await page + .locator("li") + .filter({ hasText: "Collection of Carl Smith(14)" }) + .click(); + await page + .locator("li") + .filter({ hasText: "Chicago Chamber Musicians" }) + .click(); + await page + .getByTestId("facet-options") + .getByLabel("Chicago Chamber Musicians") + .click(); + await page.getByRole("tab", { name: "Series" }).click(); + await page.getByRole("heading", { name: "Series" }).click(); + await page.getByPlaceholder("Find Series").click(); + await page.getByRole("tab", { name: "Box Number" }).click(); + await page.getByRole("heading", { name: "Box Number" }).click(); + await page.getByPlaceholder("Find Box Number").click(); + + // Activate a facet + await page.getByLabel("(16)").click(); + await page.getByRole("heading", { name: "Preview Results" }).click(); + + // Currently selected (uncommitted) facets display in modal header + const userFacet = page.getByTestId("facet-user-value-component"); + await expect(userFacet).toContainText("1"); + await expect(userFacet).toContainText("Box Number"); + + // Remove facet + await userFacet.click(); + + // Verify currently selected user facet is removed from the modal header + expect(userFacet).not.toBeVisible(); + + // Toggle the facet again + await page.getByLabel("(16)").click(); + + // Submit button shows number of results + const modalSubmitBtn = page + .getByTestId("facets-submit") + .getByTestId("submit-button"); + await expect(modalSubmitBtn).toHaveText("View Results (16)"); + await modalSubmitBtn.click(); + + // Main search page matches result count + await expect(page.getByTestId("results-count")).toHaveText("16 results"); + }); + + test("Filter modal facets will update Preview Results when facets are turned on/off", async ({ + page, + }) => { + const filterBtn = page.getByRole("button", { name: "Filter Filter" }); + const previewItems = page.getByTestId("facets-filter-preview-item"); + const facetOptions = page.getByTestId("facet-options"); + const userFacetsRow = page.getByTestId("facet-user-component"); + const userFacetButtons = userFacetsRow.getByTestId( + "facet-user-value-component" + ); + + await filterBtn.click(); + + // Default Preview Results display + await expect(previewItems).toHaveCount(5); + expect(previewItems.nth(0)).toContainText("Dracula"); + expect(previewItems.nth(1)).toContainText("Portrait of Justine Cordwell."); + expect(userFacetsRow).toHaveCount(0); + + // Activate a facet + await page.getByLabel("African American college students").click(); + + // Preview Items update + await expect(previewItems.nth(0)).toContainText( + "Protest photographs, c. 1969-1970" + ); + await expect(previewItems.nth(1)).toContainText( + "Ronald E. Pitts. Cleveland" + ); + + // User selected facets update + await expect(userFacetButtons).toHaveCount(1); + await expect( + userFacetsRow.getByLabel("Remove African American") + ).toBeVisible(); + + // Test the facet count (12) is included in the facet label and its checked + await expect( + facetOptions.getByText("African American college students(12)") + ).toBeVisible(); + await expect( + facetOptions.getByLabel("African American college students") + ).toBeChecked(); + + // Activating a second facet + await facetOptions.getByLabel("Choirs (Music)").click(); + + // Preview Items update + await expect(previewItems).toHaveCount(2); + await expect(previewItems.nth(0)).toContainText( + "Ronald E. Pitts. Cleveland" + ); + await expect(previewItems.nth(1)).toContainText( + "Audition for the Northwestern Community Ensemble" + ); + + // User facets update + await expect(userFacetButtons).toHaveCount(2); + await expect( + userFacetsRow.getByLabel("Remove Choirs (Music)") + ).toBeVisible(); + await expect( + userFacetsRow.getByLabel("Remove African American") + ).toBeVisible(); + + // Test the facet count (2) is included in the facet label and its checked + await expect( + facetOptions.getByText("African American college students(2)") + ).toBeVisible(); + await expect(facetOptions.getByLabel("Choirs (Music)")).toBeChecked(); + }); + + test("Filter modal cancel buttons do not make changes to the search results", async ({ + page, + }) => { + const filterBtn = page.getByRole("button", { name: "Filter Filter" }); + const facetOptions = page.getByTestId("facet-options"); + const submitBtn = page + .getByTestId("facets-submit") + .getByTestId("submit-button"); + const resultsCount = page.getByTestId("results-count"); + + await filterBtn.click(); + + // Activating a facet updates uncommitted count within modal + await page.getByRole("tab", { name: "Language" }).click(); + await facetOptions.getByLabel("French").check(); + await expect(submitBtn).toHaveText("View Results (11)"); + + // Canceling returns the default number of total results + await page.getByText("Cancel").click(); + await expect(resultsCount).toHaveText(`${TOTAL_RESULTS} results`); + + await filterBtn.click(); + + // Try another facet from a different group + await page.getByRole("button", { name: "Collection and Location" }).click(); + await page.getByRole("tab", { name: "Collection" }).click(); + await facetOptions.getByLabel("Map and Atlas Collection").check(); + await expect(submitBtn).toHaveText("View Results (6)"); + + await page.getByRole("banner").getByTestId("facets-filter-close").click(); + await expect(resultsCount).toHaveText(`${TOTAL_RESULTS} results`); + }); + + test("renders correct pagination", async ({ page, searchPage }) => { + function buildResultsString({ page }: { page: number }) { + const start = paginationResultsCount * (page - 1) + 1; + const end = start + paginationResultsCount - 1; + const refinedEnd = end > TOTAL_RESULTS ? TOTAL_RESULTS : end; + return `Showing ${start} to ${refinedEnd} of ${TOTAL_RESULTS} results`; + } + + const nextBtn = page.getByRole("button", { name: "Next" }); + const prevBtn = page.getByRole("button", { name: "Previous" }); + const startBtn = page.getByRole("button", { name: "Start" }); + const paginationResultsCount = + searchPage.getPaginationResults(TOTAL_RESULTS); + + await searchPage.verifyGridItemCount(TOTAL_RESULTS); + await searchPage.verifyTopResultsCount(TOTAL_RESULTS); + + await expect(prevBtn).not.toBeVisible(); + await expect(startBtn).not.toBeVisible(); + + // Click to page 2 + await nextBtn.click(); + await searchPage.verifyGridItemCount( + TOTAL_RESULTS - paginationResultsCount + ); + await expect(page.getByTestId("results")).toHaveText( + buildResultsString({ page: 2 }) + ); + await expect(prevBtn).toBeVisible(); + await expect(startBtn).not.toBeVisible(); + + // URL updates + await expect(page).toHaveURL(new RegExp(`/search\\?page=2`)); + + // Click to page 3 + await nextBtn.click(); + await searchPage.verifyGridItemCount( + TOTAL_RESULTS - paginationResultsCount * 2 + ); + await expect(page.getByTestId("results")).toHaveText( + buildResultsString({ page: 3 }) + ); + expect(prevBtn).toBeVisible(); + expect(startBtn).toBeVisible(); + + await expect(page).toHaveURL(`/search?page=3`); + + // Click previous going back to page 2 + await prevBtn.click(); + await searchPage.verifyGridItemCount( + TOTAL_RESULTS - paginationResultsCount + ); + await expect(page.getByTestId("results")).toHaveText( + buildResultsString({ page: 2 }) + ); + await expect(page).toHaveURL(`/search?page=2`); + + // Go to end of results + await page.goto("/search?page=6"); + await searchPage.verifyGridItemCount(5); + await expect(page.getByTestId("results")).toHaveText( + buildResultsString({ page: 6 }) + ); + await expect(nextBtn).not.toBeVisible(); + }); + + test("renders Work results which link to the Work page", async ({ page }) => { + await page.getByLabel("Public works only").click(); + await page.getByRole("link", { name: "Ajal-e Moallaq Image" }).click(); + await expect(page).toHaveURL("items/5a2dcade-0071-48c3-b29b-755293e862c4"); + + await page.goto("/search"); + await page.getByLabel("Public works only").click(); + + await page.getByRole("link", { name: "Cadbury Eggs Cars Image" }).click(); + await expect(page).toHaveURL("items/944cc66c-dcf9-4ac5-8d0d-ec48a699a0fe"); + }); +}); diff --git a/tests/work.spec.ts b/tests/work.spec.ts new file mode 100644 index 00000000..9ae229f2 --- /dev/null +++ b/tests/work.spec.ts @@ -0,0 +1,545 @@ +import { test as base, expect } from "@playwright/test"; + +import { OpenGraphPage } from "@/tests/fixtures/open-graph"; +import { WorkPage } from "@/tests/fixtures/work-page"; +import { canaryWork } from "./fixtures/works/canary-work"; + +type WorkPageFixtures = { + openGraphPage: OpenGraphPage; + workPage: WorkPage; +}; + +const CANARY_WORK_ID = "cb8a19a7-3dec-47f3-80c0-12872ae61f8f"; + +const test = base.extend({ + // A common fixture to help with Open Graph data + openGraphPage: async ({ page }, use) => { + const openGraphPage = new OpenGraphPage(page, `/items/${CANARY_WORK_ID}`); + await openGraphPage.goto(); + await use(openGraphPage); + }, + // A fixture to help with the Search Page shared functionality + workPage: async ({ page }, use) => { + const workPage = new WorkPage(page); + await use(workPage); + }, +}); + +test.describe("Work page component", async () => { + test.beforeEach(async ({ page }) => { + await page.goto(`/items/${CANARY_WORK_ID}`); + }); + + test("renders Open Graph data and meta title and description", async ({ + openGraphPage, + }) => { + await openGraphPage.hasMetaTitle(canaryWork.title); + await openGraphPage.hasMetaDescription(canaryWork.description.join(" ")); + await openGraphPage.hasOGDescription( + `${canaryWork.description.join(" ")} - ${canaryWork.terms_of_use}` + ); + await openGraphPage.hasOGSiteName(); + await openGraphPage.hasOGUrl(`items/${canaryWork.id}`); + await openGraphPage.hasOGImage( + `https://dc-test-iiif.rdc-staging.library.northwestern.edu/iiif/2/a59dc417-d313-4286-88d4-1c80916b82c6/full/1200,630/0/default.jpg` + ); + }); + + test("renders the Work top level metadata", async ({ page }) => { + await page.goto(`/items/${CANARY_WORK_ID}`); + const metadataEl = page.getByTestId("metadata"); + + await page.getByRole("button", { name: "Dismiss" }).click(); + + await expect(page.getByTestId("title")).toContainText( + canaryWork.title || "" + ); + await expect(page.getByTestId("summary")).toContainText( + canaryWork.description.join(", ") || "" + ); + + await expect(metadataEl.getByText("Alternate Title")).toBeVisible(); + await expect( + metadataEl.getByText("This is an alternative title") + ).toBeVisible(); + await expect(metadataEl.getByText("Abstract")).toBeVisible(); + await expect(metadataEl.getByText("Updated description!!!")).toBeVisible(); + await expect(metadataEl.getByText("Caption")).toBeVisible(); + await expect(metadataEl.getByText("Beebo")).toBeVisible(); + await expect(metadataEl.getByText("Contributor")).toBeVisible(); + await expect( + metadataEl.getByText("Metallica (Musical group) (Cartographer)") + ).toBeVisible(); + await expect(metadataEl.getByText("Creator")).toBeVisible(); + await expect(metadataEl.getByText("Dessa (Vocalist)")).toBeVisible(); + await expect(metadataEl.getByText("Cultural Context")).toBeVisible(); + await expect(metadataEl.getByText("Test Context")).toBeVisible(); + await expect(metadataEl.getByText("Date", { exact: true })).toBeVisible(); + await expect( + metadataEl.getByText("August 1906 to December 1910") + ).toBeVisible(); + await expect(metadataEl.getByText("1958")).toBeVisible(); + await expect(metadataEl.getByText("Department")).toBeVisible(); + await expect( + metadataEl.getByText("University (MAIN) Library") + ).toBeVisible(); + await expect(metadataEl.getByText("Dimensions")).toBeVisible(); + await expect(metadataEl.getByText("16 x 24 inches")).toBeVisible(); + await expect(metadataEl.getByText("Genre")).toBeVisible(); + + // Click to show more + await page.getByRole("button", { name: "Show More" }).click(); + + await expect(metadataEl.getByText("stencil prints")).toBeVisible(); + await expect( + metadataEl.getByText("Language", { exact: true }) + ).toBeVisible(); + await expect(metadataEl.getByText("Crimean Tatar")).toBeVisible(); + await expect(metadataEl.getByText("Location")).toBeVisible(); + await expect(metadataEl.getByText("Leland Township")).toBeVisible(); + await expect( + metadataEl.getByText("Materials", { exact: true }) + ).toBeVisible(); + await expect( + metadataEl.getByText("Acrylic paint on cement block") + ).toBeVisible(); + await expect(metadataEl.getByText("Notes", { exact: true })).toBeVisible(); + await expect( + metadataEl.getByText("Here are some notes (General Note)", { + exact: true, + }) + ).toBeVisible(); + await expect(metadataEl.getByText("Awards type (Awards)")).toBeVisible(); + await expect(metadataEl.getByText("Biographical note (")).toBeVisible(); + await expect( + metadataEl.getByText("creation production credits (") + ).toBeVisible(); + await expect(metadataEl.getByText("Provenance")).toBeVisible(); + await expect( + metadataEl.getByText("Artist; sold to Mr. Blank in") + ).toBeVisible(); + await expect(metadataEl.getByText("Publisher")).toBeVisible(); + await expect( + metadataEl.getByText("Northwestern University Press") + ).toBeVisible(); + await expect( + metadataEl.getByText("Related Material", { exact: true }) + ).toBeVisible(); + await expect( + metadataEl.getByText("See Also: related material") + ).toBeVisible(); + await expect(metadataEl.getByText("Related URL")).toBeVisible(); + await expect(metadataEl.getByText("Finding Aid")).toBeVisible(); + await expect(metadataEl.getByText("Research Guide")).toBeVisible(); + await expect(metadataEl.getByText("Rights Holder")).toBeVisible(); + await expect(metadataEl.getByText("Artist", { exact: true })).toBeVisible(); + await expect(metadataEl.getByText("Rights Statement")).toBeVisible(); + await expect( + metadataEl.getByText("In Copyright - Educational") + ).toBeVisible(); + await expect(metadataEl.getByText("Scope and Contents")).toBeVisible(); + await expect( + metadataEl.getByText("I promise there is scope and") + ).toBeVisible(); + await expect(metadataEl.getByText("Series")).toBeVisible(); + await expect( + metadataEl.getByText("Canaries and How to Care for") + ).toBeVisible(); + await expect(metadataEl.getByText("Source")).toBeVisible(); + await expect(metadataEl.getByText("Mars")).toBeVisible(); + await expect(metadataEl.getByText("Style Period")).toBeVisible(); + await expect( + metadataEl.getByText("Qing (dynastic styles and") + ).toBeVisible(); + await expect(metadataEl.getByText("Subject")).toBeVisible(); + await expect(metadataEl.getByText("Cats on postage stamps")).toBeVisible(); + await expect(metadataEl.getByText("Test Record Canary")).toBeVisible(); + await expect(metadataEl.getByText("Table of Contents")).toBeVisible(); + await expect(metadataEl.getByText("cats; 2. dogs")).toBeVisible(); + await expect(metadataEl.getByText("Technique")).toBeVisible(); + await expect( + metadataEl.getByText("drypoint (printing process)") + ).toBeVisible(); + await expect(page.getByText("Attribution")).toContainText("Attribution"); + await expect(page.getByText("Courtesy of Northwestern")).toBeVisible(); + + // Shows the collection + const collectionsCard = page.getByTestId("card-wrapper").locator("a"); + await expect( + collectionsCard.getByAltText("TEST Canary Records") + ).toHaveAttribute( + "src", + `https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2/collections/820fc328-a333-430b-a974-ac6218a1ffcd/thumbnail?aspect=square` + ); + const figCaption = collectionsCard.locator("figcaption"); + await expect(figCaption).toContainText("TEST Canary Records"); + await expect(figCaption.getByTestId("work-count-total")).toContainText( + "3 Works" + ); + const workCountTypes = figCaption.getByTestId("work-count-type"); + await expect(workCountTypes.nth(0)).toContainText("1"); + await expect(workCountTypes.nth(1)).toContainText("1"); + await expect(workCountTypes.nth(2)).toContainText("1"); + }); + + test("renders the Explore Further section Clover sliders", async ({ + page, + }) => { + await page.goto(`/items/${CANARY_WORK_ID}`); + await page.getByRole("button", { name: "Dismiss" }).click(); + const relatedItems = page.getByTestId("related-items"); + + await expect( + page.getByRole("heading", { name: "Explore Further" }) + ).toBeVisible(); + + // Collection Slider + await page + .getByTestId("related-items") + .locator("a") + .filter({ hasText: "TEST Canary Records" }) + .click(); + + expect(page.url()).toBe( + "https://dc.library.northwestern.edu/search?q=collection.id%3A%22820fc328-a333-430b-a974-ac6218a1ffcd%22" + ); + + await page.goBack(); + + // View all button + await page.getByLabel("TEST Canary Records").nth(1).click(); + + expect(page.url()).toBe( + "https://dc.library.northwestern.edu/search?q=collection.id%3A%22820fc328-a333-430b-a974-ac6218a1ffcd%22" + ); + + await page.goBack(); + + // Test the Collection carousel + const collectionsSliderItems = relatedItems + .locator(".swiper-wrapper") + .nth(0); + await expect( + collectionsSliderItems.filter({ hasText: "Canary Record TEST 3" }) + ).toBeVisible(); + await expect( + collectionsSliderItems.filter({ hasText: "Image" }) + ).toBeVisible(); + await expect( + collectionsSliderItems.filter({ hasText: "Canary Record TEST 2" }) + ).toBeVisible(); + await expect( + collectionsSliderItems.filter({ hasText: "Video" }) + ).toBeVisible(); + await expect( + collectionsSliderItems.filter({ hasText: "Canary Record TEST 1" }) + ).toBeVisible(); + await expect( + collectionsSliderItems.filter({ hasText: "Audio" }) + ).toBeVisible(); + + // More Like This slider + await page + .getByTestId("related-items") + .locator("a") + .filter({ hasText: "More Like This" }) + .click(); + + expect(page.url()).toBe( + "https://dc.library.northwestern.edu/search?similar=cb8a19a7-3dec-47f3-80c0-12872ae61f8f" + ); + + await page.goBack(); + + // TODO: Something is wrong with the More Like This slider + + // // Test the More Like This carousel + // const moreLikeThisSliderItems = relatedItems + // .locator(".swiper-wrapper") + // .nth(1); + + // // Test the More Like This carousel has 10 items + // await expect(moreLikeThisSliderItems.locator(".swiper-slide")).toHaveCount( + // 11 + // ); + + // Slider navigation + await expect( + relatedItems.getByRole("button", { name: "previous item" }) + ).toBeDisabled(); + + await page.getByRole("button", { name: "next item" }).click(); + // expect prev button to be enabled + await expect( + relatedItems.getByRole("button", { name: "previous item" }) + ).toBeEnabled(); + // expect next button to be disabled + await expect( + relatedItems.getByRole("button", { name: "next item" }) + ).toBeDisabled(); + + // Test the Subject carousels exist. But they'll be random so can't really test the content + const subject1SliderItems = relatedItems.locator(".swiper-wrapper").nth(2); + const subject2SliderItems = relatedItems.locator(".swiper-wrapper").nth(3); + + await expect(subject1SliderItems).toBeVisible(); + await expect(subject2SliderItems).toBeVisible(); + }); + + test("renders the Find this item and Cite this item modal windows", async ({ + page, + }) => { + const today = new Date().toDateString(); + + await page.goto(`/items/${CANARY_WORK_ID}`); + await page.getByRole("button", { name: "Dismiss" }).click(); + + /** + * Find this item + */ + await page.getByRole("button", { name: "Find this item" }).click(); + await page.getByRole("heading", { name: "Find this item" }).click(); + await page + .getByTestId("actions-dialog-aside") + .getByRole("img", { name: "Canary Record TEST" }) + .click(); + await page + .getByTestId("actions-dialog-aside") + .getByText("Canary Record TEST") + .click(); + await page.getByTestId("actions-dialog-aside").getByText("Image").click(); + await page.getByText("Accession").click(); + await page.getByText("TEST_canary_002").click(); + await page.getByText("Box Name").click(); + await page.getByText("The name of a box").click(); + await page.getByText("Box Number").click(); + await page.getByText("88").nth(1).click(); + await page.getByText("Folder Name").click(); + await page.getByText("Blue folder").click(); + await page.getByText("Folder Number").click(); + await page.getByText("88").nth(2).click(); + await page.getByText("NUsearch").click(); + await page.getByRole("link", { name: "MS-1984-1982-" }).click(); + + expect(page.url()).toBe( + "https://search.library.northwestern.edu/discovery/search?vid=01NWU_INST%3ANULVNEW&institution=01NWU&field=any&query=any%2Ccontains%2CMS-1984-1982-1989&query=&search_scope=MyInst_and_CI" + ); + + await page.goBack(); + + /** + * Cite this item + */ + const citeDialog = page.getByRole("dialog").getByTestId("metadata"); + + await page.getByRole("button", { name: "Cite this item" }).click(); + await expect( + page.getByRole("heading", { name: "Cite this item" }) + ).toBeVisible(); + + // Aside info + await expect( + page + .getByTestId("actions-dialog-aside") + .getByRole("img", { name: "Canary Record TEST" }) + ).toBeVisible(); + await expect( + page.getByTestId("actions-dialog-aside").getByText("Canary Record TEST") + ).toBeVisible(); + await expect( + page.getByTestId("actions-dialog-aside").getByText("Image") + ).toBeVisible(); + + // Main data + await expect(citeDialog.getByText("Title", { exact: true })).toBeVisible(); + await expect( + citeDialog.getByText("Canary Record TEST 3 | Copy") + ).toBeVisible(); + await citeDialog + .locator("dd") + .filter({ hasText: "Canary Record TEST 3 | Copy" }) + .getByRole("button") + .click(); + + await expect(citeDialog.getByText("Use Statement")).toBeVisible(); + await expect(citeDialog.getByText("Terms | Copy")).toBeVisible(); + + await expect(citeDialog.getByText("Ark", { exact: true })).toBeVisible(); + await expect( + citeDialog.getByText("ark:/81985/n2x34qh35 | Copy") + ).toBeVisible(); + + await expect(citeDialog.getByText("APA Format")).toBeVisible(); + await expect( + citeDialog.getByText( + `University (MAIN) Library, Northwestern University Libraries. (${today}` + ) + ).toBeVisible(); + + await expect(citeDialog.getByText("Chicago/Turabian Format")).toBeVisible(); + await expect( + citeDialog.getByText("University (MAIN) Library,").nth(1) + ).toBeVisible(); + + await expect(citeDialog.getByText("MLA Format")).toBeVisible(); + await expect( + citeDialog.getByText( + `University (MAIN) Library, Northwestern University Libraries. "Canary Record TEST 3", TEST Canary Records ${today}.` + ) + ).toBeVisible(); + + await expect(citeDialog.getByText("Wiki Citation")).toBeVisible(); + await expect( + citeDialog.getByText("{{cite web |") + ).toBeVisible(); + + // Verify the copy button is present on all items + const copyButtons = citeDialog + .locator("button") + .filter({ hasText: "Copy" }); + await expect(copyButtons).toHaveCount(7); + await copyButtons.nth(0).click(); + + // TODO: This fails in headless tests for some reason + //await expect(copyButtons.nth(0).locator("> span")).toHaveText("Copied"); + + await page.getByTestId("facets-filter-close").click(); + }); + + test("Download and share dialog renders all content", async ({ page }) => { + await page.goto(`/items/${CANARY_WORK_ID}`); + await page.getByRole("button", { name: "Dismiss" }).click(); + await page.getByRole("button", { name: "Download and share" }).click(); + + const dialog = page.getByRole("dialog"); + + await expect( + dialog.getByRole("heading", { name: "Download this item" }) + ).toBeVisible(); + + // Aside info + await expect( + dialog.getByRole("img", { name: "Canary Record TEST" }) + ).toBeVisible(); + await expect(dialog.getByText("Image", { exact: true })).toBeVisible(); + await expect( + dialog.getByRole("button", { name: "Logo Facebook" }) + ).toBeVisible(); + await expect( + dialog.getByRole("button", { name: "Logo Twitter" }) + ).toBeVisible(); + await expect( + dialog.getByRole("button", { name: "Logo Pinterest" }) + ).toBeVisible(); + + // IIIF Manifest + await expect( + dialog.getByRole("heading", { name: "IIIF Manifest" }) + ).toBeVisible(); + await expect( + dialog.getByRole("link", { name: "https://dc-test-api.rdc-" }) + ).toBeVisible(); + await dialog.getByRole("button", { name: "Copy Manifest Link" }).click(); + + //TODO: This fails in headless tests for some reason + //await expect(dialog.getByText("Copied")).toBeVisible(); + + await expect( + dialog.getByRole("link", { name: "What is IIIF?" }) + ).toHaveAttribute("href", "https://iiif.io/get-started/why-iiif/"); + await expect( + dialog.getByRole("link", { name: "View in Mirador" }) + ).toHaveAttribute( + "href", + "https://projectmirador.org/embed/?iiif-content=https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2/works/cb8a19a7-3dec-47f3-80c0-12872ae61f8f?as=iiif" + ); + + // Embed Viewer + const embedViewer = dialog.getByTestId("preview-embed-viewer"); + + await expect( + dialog.getByRole("heading", { name: "Embed Viewer" }) + ).toBeVisible(); + await expect(dialog.getByTestId("embed-html")).toContainText( + `/embedded-viewer/https%3A%2F%2Fdc-test-api.rdc-staging.library.northwestern.edu%2Fapi%2Fv2%2Fworks%2Fcb8a19a7-3dec-47f3-80c0-12872ae61f8f%3Fas%3Diiif" title="Canary Record TEST 3" width="100%" height="800">` + ); + await expect(dialog.getByText("Preview")).toBeVisible(); + await expect( + embedViewer.filter({ hasText: "Canary Record TEST 3" }) + ).toBeVisible(); + await expect(embedViewer.locator("span").nth(1)).toHaveAttribute( + "style", + `background-image: url(\"https://dc-test-api.rdc-staging.library.northwestern.edu/api/v2/works/cb8a19a7-3dec-47f3-80c0-12872ae61f8f/thumbnail\");` + ); + + await page.getByRole("button", { exact: true, name: "Copy" }).click(); + + await page.locator('select[name="show-title"]').selectOption("false"); + await expect(embedViewer.getByText("Canary Record TEST 3")).toBeHidden(); + + await expect(page.getByTestId("preview-info-panel")).not.toBeVisible(); + await page + .locator('select[name="show-info-panel"]') + .selectOption("show initially open"); + await expect(page.getByTestId("preview-info-panel")).toBeVisible(); + + // Download and Embed Images + const downloadEmbedItems = dialog.getByTestId("download-embed-items"); + + // Image thumbnails + await expect( + dialog.getByRole("heading", { name: "Download and Embed" }) + ).toBeVisible(); + await expect( + downloadEmbedItems.getByRole("img", { name: "access tif" }) + ).toBeVisible(); + await expect( + downloadEmbedItems.getByRole("img", { name: "access jpg" }) + ).toBeVisible(); + await expect( + downloadEmbedItems.getByRole("img", { + name: "Cocktail Construction Chart", + }) + ).toBeVisible(); + await expect( + downloadEmbedItems.getByRole("img", { name: "auxiliary png" }) + ).toBeVisible(); + + await expect(downloadEmbedItems.getByText("access tif")).toBeVisible(); + await expect(downloadEmbedItems.getByText("access jpg")).toBeVisible(); + await expect( + downloadEmbedItems.getByText("Cocktail Construction Chart") + ).toBeVisible(); + await expect(downloadEmbedItems.getByText("auxiliary png")).toBeVisible(); + + await expect( + downloadEmbedItems.getByRole("button", { name: "Download JPG" }) + ).toHaveCount(4); + await expect(downloadEmbedItems.getByText("Embed HTML")).toHaveCount(4); + await expect( + downloadEmbedItems.getByRole("button", { name: "Copy IIIF" }) + ).toHaveCount(4); + + // Toggle Embed HTML + const embedHtml = downloadEmbedItems.getByText( + `Northwestern Libraries Digital Collections Fileset image for 39a418a3-1ec7-4ef6-ae0c-0227c5aa2355` + ); + + await expect(embedHtml).toBeHidden(); + await downloadEmbedItems.getByText("Embed HTML").nth(0).click(); + await expect(embedHtml).toBeVisible(); + + await expect( + downloadEmbedItems.getByText("Copy 3000px - 100%1800px - 50") + ).toBeVisible(); + + await downloadEmbedItems.getByRole("combobox").nth(0).selectOption("900"); + await downloadEmbedItems.getByRole("combobox").nth(1).selectOption("gray"); + + await expect( + downloadEmbedItems.getByText( + `Northwestern Libraries Digital Collections Fileset image for 39a418a3-1ec7-4ef6-ae0c-0227c5aa2355` + ) + ).toBeVisible(); + }); +}); diff --git a/tsconfig.json b/tsconfig.json index e6e8420f..cb3b00bd 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,30 +1,54 @@ { "compilerOptions": { - "target": "ES6", - "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, + "baseUrl": ".", "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + "incremental": true, "isolatedModules": true, "jsx": "preserve", - "incremental": true, - "baseUrl": ".", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "module": "esnext", + "moduleResolution": "node", + "noEmit": true, "paths": { - "@/*": ["*"], - "@/components/*": ["components/*"], - "@/context/*": ["context/*"], - "@/lib/*": ["lib/*"], - "@/mocks/*": ["mocks/*"], - "@/pages/*": ["pages/*"], - "@/styles/*": ["styles/*"] - } + "@/*": [ + "*" + ], + "@/components/*": [ + "components/*" + ], + "@/context/*": [ + "context/*" + ], + "@/lib/*": [ + "lib/*" + ], + "@/mocks/*": [ + "mocks/*" + ], + "@/pages/*": [ + "pages/*" + ], + "@/styles/*": [ + "styles/*" + ] + }, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "target": "ES6", + "types": ["jest"] }, + "exclude": [ + "node_modules", + "cypress", + "./cypress.config.ts" + ], "include": [ "next-env.d.ts", "**/*.ts", @@ -33,6 +57,5 @@ "**/*.jsx", "**/*.mjs", "types.d.ts" - ], - "exclude": ["node_modules", "cypress", "./cypress.config.ts"] -} + ] +} \ No newline at end of file