diff --git a/package-lock.json b/package-lock.json index 24a0a8931..bcaa16a2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@thegetty/quire", - "version": "1.0.0-rc.33", + "version": "1.0.0-rc.34", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@thegetty/quire", - "version": "1.0.0-rc.33", + "version": "1.0.0-rc.34", "license": "SEE LICENSE IN https://github.com/thegetty/quire/blob/main/LICENSE", "workspaces": [ "packages/*" @@ -2139,6 +2139,90 @@ "node": ">= 8" } }, + "node_modules/@pagefind/darwin-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.4.0.tgz", + "integrity": "sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/darwin-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.4.0.tgz", + "integrity": "sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@pagefind/freebsd-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/freebsd-x64/-/freebsd-x64-1.4.0.tgz", + "integrity": "sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@pagefind/linux-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.4.0.tgz", + "integrity": "sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/linux-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.4.0.tgz", + "integrity": "sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pagefind/windows-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.4.0.tgz", + "integrity": "sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@parcel/watcher": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", @@ -10498,12 +10582,6 @@ "node": ">=12" } }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "license": "MIT" - }, "node_modules/luxon": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", @@ -11804,6 +11882,24 @@ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "license": "CC0-1.0" }, + "node_modules/pagefind": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.4.0.tgz", + "integrity": "sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==", + "dev": true, + "license": "MIT", + "bin": { + "pagefind": "lib/runner/bin.cjs" + }, + "optionalDependencies": { + "@pagefind/darwin-arm64": "1.4.0", + "@pagefind/darwin-x64": "1.4.0", + "@pagefind/freebsd-x64": "1.4.0", + "@pagefind/linux-arm64": "1.4.0", + "@pagefind/linux-x64": "1.4.0", + "@pagefind/windows-x64": "1.4.0" + } + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -16218,7 +16314,6 @@ "fs-extra": "^11.2.0", "iiif-builder": "^1.0.7", "lit": "^3.1.2", - "lunr": "^2.3.9", "template-polyfill": "^2.0.0", "vite": "^6.3.6" }, @@ -16273,6 +16368,7 @@ "markdown-it-footnote": "^4.0.0", "mime-types": "^2.1.35", "module-alias": "^2.2.2", + "pagefind": "^1.4.0", "path": "^0.12.7", "prettier": "^3.2.5", "remove-markdown": "^0.5.0", @@ -16280,12 +16376,23 @@ "rollup-plugin-scss": "^3.0.0", "sass": "^1.70.0", "sharp": "^0.33.2", + "sinon": "^21.0.0", "toml": "^3.0.0" }, "engines": { "node": ">=22" } }, + "packages/11ty/node_modules/@sinonjs/fake-timers": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.1.0.tgz", + "integrity": "sha512-cqfapCxwTGsrR80FEgOoPsTonoefMBY7dnUEbQ+GRcved0jvkJLzvX6F4WtN+HBqbPX/SiFsIRUp+IrCW/2I2w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, "packages/11ty/node_modules/cross-env": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", @@ -16305,6 +16412,16 @@ "yarn": ">=1" } }, + "packages/11ty/node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "packages/11ty/node_modules/jsdom": { "version": "24.1.3", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.3.tgz", @@ -16353,6 +16470,24 @@ "dev": true, "license": "MIT" }, + "packages/11ty/node_modules/sinon": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.1.tgz", + "integrity": "sha512-Z0NVCW45W8Mg5oC/27/+fCqIHFnW8kpkFOq0j9XJIev4Ld0mKmERaZv5DMLAb9fGCevjKwaEeIQz5+MBXfZcDw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^15.1.0", + "@sinonjs/samsam": "^8.0.3", + "diff": "^8.0.2", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, "packages/cli": { "name": "@thegetty/quire-cli", "version": "1.0.0-rc.33", @@ -17714,6 +17849,48 @@ "fastq": "^1.6.0" } }, + "@pagefind/darwin-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.4.0.tgz", + "integrity": "sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==", + "dev": true, + "optional": true + }, + "@pagefind/darwin-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.4.0.tgz", + "integrity": "sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==", + "dev": true, + "optional": true + }, + "@pagefind/freebsd-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/freebsd-x64/-/freebsd-x64-1.4.0.tgz", + "integrity": "sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==", + "dev": true, + "optional": true + }, + "@pagefind/linux-arm64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.4.0.tgz", + "integrity": "sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==", + "dev": true, + "optional": true + }, + "@pagefind/linux-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.4.0.tgz", + "integrity": "sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==", + "dev": true, + "optional": true + }, + "@pagefind/windows-x64": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.4.0.tgz", + "integrity": "sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==", + "dev": true, + "optional": true + }, "@parcel/watcher": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", @@ -18178,7 +18355,6 @@ "lit": "^3.1.2", "locale-en-us": "^0.0.2", "loglevel": "^1.9.1", - "lunr": "^2.3.9", "markdown-it": "^14.0.0", "markdown-it-anchor": "^8.6.7", "markdown-it-attrs": "^4.1.6", @@ -18187,6 +18363,7 @@ "markdown-it-footnote": "^4.0.0", "mime-types": "^2.1.35", "module-alias": "^2.2.2", + "pagefind": "^1.4.0", "path": "^0.12.7", "prettier": "^3.2.5", "remove-markdown": "^0.5.0", @@ -18194,11 +18371,21 @@ "rollup-plugin-scss": "^3.0.0", "sass": "^1.70.0", "sharp": "^0.33.2", + "sinon": "^21.0.0", "template-polyfill": "^2.0.0", "toml": "^3.0.0", "vite": "^6.3.6" }, "dependencies": { + "@sinonjs/fake-timers": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.1.0.tgz", + "integrity": "sha512-cqfapCxwTGsrR80FEgOoPsTonoefMBY7dnUEbQ+GRcved0jvkJLzvX6F4WtN+HBqbPX/SiFsIRUp+IrCW/2I2w==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.1" + } + }, "cross-env": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", @@ -18208,6 +18395,12 @@ "cross-spawn": "^7.0.1" } }, + "diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "dev": true + }, "jsdom": { "version": "24.1.3", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.3.tgz", @@ -18242,6 +18435,19 @@ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", "dev": true + }, + "sinon": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.1.tgz", + "integrity": "sha512-Z0NVCW45W8Mg5oC/27/+fCqIHFnW8kpkFOq0j9XJIev4Ld0mKmERaZv5DMLAb9fGCevjKwaEeIQz5+MBXfZcDw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^15.1.0", + "@sinonjs/samsam": "^8.0.3", + "diff": "^8.0.2", + "supports-color": "^7.2.0" + } } } }, @@ -23237,11 +23443,6 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" - }, "luxon": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", @@ -24070,6 +24271,20 @@ } } }, + "pagefind": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.4.0.tgz", + "integrity": "sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==", + "dev": true, + "requires": { + "@pagefind/darwin-arm64": "1.4.0", + "@pagefind/darwin-x64": "1.4.0", + "@pagefind/freebsd-x64": "1.4.0", + "@pagefind/linux-arm64": "1.4.0", + "@pagefind/linux-x64": "1.4.0", + "@pagefind/windows-x64": "1.4.0" + } + }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", diff --git a/package.json b/package.json index c91e6c7f5..3a02413a4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@thegetty/quire", - "version": "1.0.0-rc.33", + "version": "1.0.0-rc.34", "private": true, "description": "a multi-format book publishing framework", "author": "Getty Digital", diff --git a/packages/11ty/_includes/components/head-tags/pagefind.js b/packages/11ty/_includes/components/head-tags/pagefind.js new file mode 100644 index 000000000..d49c5780b --- /dev/null +++ b/packages/11ty/_includes/components/head-tags/pagefind.js @@ -0,0 +1,37 @@ +/* eslint-disable camelcase */ +import { html } from 'common-tags' + +/** + * Renders data tags for PageFind search + * + * @param {Object} eleventyConfig + * + * @return {String} HTML meta elements + */ +export default function (eleventyConfig) { + const contributors = eleventyConfig.getFilter('contributors') + const removeHTML = eleventyConfig.getFilter('removeHTML') + + return function ({ page, layout }) { + if (!page) { + return + } + + const meta = [ + { + property: 'type', + content: layout + } + ] + + if (page.contributor) { + const contributorContent = contributors({ context: page.contributor, format: 'string', type: 'primary' }) + meta.push({ + property: 'contributors', + content: removeHTML(contributorContent) + }) + } + + return html`${meta.map(({ property, content }) => ``)}` + } +} diff --git a/packages/11ty/_includes/components/head.js b/packages/11ty/_includes/components/head.js index b6568d75d..f5b0920b5 100644 --- a/packages/11ty/_includes/components/head.js +++ b/packages/11ty/_includes/components/head.js @@ -12,6 +12,7 @@ export default function (eleventyConfig) { const opengraph = eleventyConfig.getFilter('opengraph') const removeHTML = eleventyConfig.getFilter('removeHTML') const twitterCard = eleventyConfig.getFilter('twitterCard') + const pagefind = eleventyConfig.getFilter('pagefind') const { application, publication } = eleventyConfig.globalData @@ -70,6 +71,8 @@ export default function (eleventyConfig) { ${twitterCard({ abstract, cover, layout })} + ${pagefind({ page, layout })} + diff --git a/packages/11ty/_includes/components/index.js b/packages/11ty/_includes/components/index.js index b17b444db..d12facfcf 100644 --- a/packages/11ty/_includes/components/index.js +++ b/packages/11ty/_includes/components/index.js @@ -54,6 +54,7 @@ export { default as modal } from './modal/index.js' export { default as navigation } from './navigation.js' export { default as opengraph } from './head-tags/opengraph.js' export { default as pageButtons } from './page-buttons.js' +export { default as pagefind } from './head-tags/pagefind.js' export { default as pageHeader } from './page-header.js' export { default as pageTitle } from './page-title.js' export { default as search } from './search.js' diff --git a/packages/11ty/_includes/components/search.js b/packages/11ty/_includes/components/search.js index 33839054c..7c2c5efab 100644 --- a/packages/11ty/_includes/components/search.js +++ b/packages/11ty/_includes/components/search.js @@ -9,8 +9,6 @@ import { html } from '#lib/common-tags/index.js' export default function (eleventyConfig) { const icon = eleventyConfig.getFilter('icon') return (params) => { - const { url } = params.publication - const searchIndex = new URL('search-index.json', url) return html`