From 16209e5797c06b82f8654ee1007b56bc90ebeb1a Mon Sep 17 00:00:00 2001 From: Jason Buckner Date: Mon, 2 Feb 2026 16:03:50 -0800 Subject: [PATCH 1/5] Test adding elements to BR --- package-lock.json | 234 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 1 + src/BookReader.js | 2 + 3 files changed, 227 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6abb3f878..29c51ae31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "AGPL-3.0", "dependencies": { "@internetarchive/bergamot-translator": "^0.4.9-ia.1", + "@internetarchive/elements": "0.2.1-webdev-8151.0", "@internetarchive/ia-activity-indicator": "^0.0.4", "@internetarchive/ia-item-navigator": "2.2.2", "@internetarchive/icon-bookmark": "^1.4.0", @@ -2194,6 +2195,58 @@ "resolved": "https://registry.npmjs.org/@internetarchive/bergamot-translator/-/bergamot-translator-0.4.9-ia.1.tgz", "integrity": "sha512-NacODSAjU2sjyrU6bLjFdp82SgG2ZlAMq0t3WJ+yfauz+iNeSqFgt4UHgdoGfRN9W6yxoOyfWY3yWqkHxyDfAQ==" }, + "node_modules/@internetarchive/elements": { + "version": "0.2.1-webdev-8151.0", + "resolved": "https://registry.npmjs.org/@internetarchive/elements/-/elements-0.2.1-webdev-8151.0.tgz", + "integrity": "sha512-o+6lKrPAHxCzlxmmdbl8PpHbHUxBLhvRs1Tw6pyXltM+E4boYYuJatKVgbdPFwM5/HxknGzIoonpoIX+2IdIEA==", + "license": "AGPL-3.0-only", + "dependencies": { + "@lit/localize": "^0.12.2", + "lit": "^3.3.1", + "magic-snowflakes": "^7.0.2", + "tslib": "^2.8.1" + } + }, + "node_modules/@internetarchive/elements/node_modules/@lit/reactive-element": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.2.tgz", + "integrity": "sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.5.0" + } + }, + "node_modules/@internetarchive/elements/node_modules/lit": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.2.tgz", + "integrity": "sha512-NF9zbsP79l4ao2SNrH3NkfmFgN/hBYSQo90saIVI1o5GpjAdCPVstVzO1MrLOakHoEhYkrtRjPK6Ob521aoYWQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^2.1.0", + "lit-element": "^4.2.0", + "lit-html": "^3.3.0" + } + }, + "node_modules/@internetarchive/elements/node_modules/lit-element": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.2.2.tgz", + "integrity": "sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.5.0", + "@lit/reactive-element": "^2.1.0", + "lit-html": "^3.3.0" + } + }, + "node_modules/@internetarchive/elements/node_modules/lit-html": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.2.tgz", + "integrity": "sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, "node_modules/@internetarchive/field-parsers": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@internetarchive/field-parsers/-/field-parsers-0.1.4.tgz", @@ -4867,9 +4920,59 @@ } }, "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz", - "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.1.tgz", + "integrity": "sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==", + "license": "BSD-3-Clause" + }, + "node_modules/@lit/localize": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@lit/localize/-/localize-0.12.2.tgz", + "integrity": "sha512-Qv9kvgJKDq/JVSwXOxuWvQnnOBysHA99ti9im9a4fImCmx+fto+XXcUYQbjZHqiueEEc4V20PcRDPO+1g/6seQ==", + "license": "BSD-3-Clause", + "dependencies": { + "lit": "^3.2.0" + } + }, + "node_modules/@lit/localize/node_modules/@lit/reactive-element": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.2.tgz", + "integrity": "sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.5.0" + } + }, + "node_modules/@lit/localize/node_modules/lit": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.2.tgz", + "integrity": "sha512-NF9zbsP79l4ao2SNrH3NkfmFgN/hBYSQo90saIVI1o5GpjAdCPVstVzO1MrLOakHoEhYkrtRjPK6Ob521aoYWQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^2.1.0", + "lit-element": "^4.2.0", + "lit-html": "^3.3.0" + } + }, + "node_modules/@lit/localize/node_modules/lit-element": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.2.2.tgz", + "integrity": "sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.5.0", + "@lit/reactive-element": "^2.1.0", + "lit-html": "^3.3.0" + } + }, + "node_modules/@lit/localize/node_modules/lit-html": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.2.tgz", + "integrity": "sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } }, "node_modules/@lit/reactive-element": { "version": "1.6.3", @@ -15695,6 +15798,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/magic-snowflakes": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/magic-snowflakes/-/magic-snowflakes-7.0.2.tgz", + "integrity": "sha512-hpoaXHPu2YYQT7tZK3/x4BgHmfYBoCN8+E9BbJKiDKe78nGEqYA3Sk5T2fK1SGcavKHPeBxXJgE8oaEExxeqrg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/make-dir": { "version": "3.1.0", "dev": true, @@ -19251,8 +19363,9 @@ } }, "node_modules/tslib": { - "version": "2.4.0", - "dev": true, + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/tunnel-agent": { @@ -21725,6 +21838,55 @@ "resolved": "https://registry.npmjs.org/@internetarchive/bergamot-translator/-/bergamot-translator-0.4.9-ia.1.tgz", "integrity": "sha512-NacODSAjU2sjyrU6bLjFdp82SgG2ZlAMq0t3WJ+yfauz+iNeSqFgt4UHgdoGfRN9W6yxoOyfWY3yWqkHxyDfAQ==" }, + "@internetarchive/elements": { + "version": "0.2.1-webdev-8151.0", + "resolved": "https://registry.npmjs.org/@internetarchive/elements/-/elements-0.2.1-webdev-8151.0.tgz", + "integrity": "sha512-o+6lKrPAHxCzlxmmdbl8PpHbHUxBLhvRs1Tw6pyXltM+E4boYYuJatKVgbdPFwM5/HxknGzIoonpoIX+2IdIEA==", + "requires": { + "@lit/localize": "^0.12.2", + "lit": "^3.3.1", + "magic-snowflakes": "^7.0.2", + "tslib": "^2.8.1" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.2.tgz", + "integrity": "sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==", + "requires": { + "@lit-labs/ssr-dom-shim": "^1.5.0" + } + }, + "lit": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.2.tgz", + "integrity": "sha512-NF9zbsP79l4ao2SNrH3NkfmFgN/hBYSQo90saIVI1o5GpjAdCPVstVzO1MrLOakHoEhYkrtRjPK6Ob521aoYWQ==", + "requires": { + "@lit/reactive-element": "^2.1.0", + "lit-element": "^4.2.0", + "lit-html": "^3.3.0" + } + }, + "lit-element": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.2.2.tgz", + "integrity": "sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==", + "requires": { + "@lit-labs/ssr-dom-shim": "^1.5.0", + "@lit/reactive-element": "^2.1.0", + "lit-html": "^3.3.0" + } + }, + "lit-html": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.2.tgz", + "integrity": "sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==", + "requires": { + "@types/trusted-types": "^2.0.2" + } + } + } + }, "@internetarchive/field-parsers": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@internetarchive/field-parsers/-/field-parsers-0.1.4.tgz", @@ -23781,9 +23943,55 @@ } }, "@lit-labs/ssr-dom-shim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz", - "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.1.tgz", + "integrity": "sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==" + }, + "@lit/localize": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@lit/localize/-/localize-0.12.2.tgz", + "integrity": "sha512-Qv9kvgJKDq/JVSwXOxuWvQnnOBysHA99ti9im9a4fImCmx+fto+XXcUYQbjZHqiueEEc4V20PcRDPO+1g/6seQ==", + "requires": { + "lit": "^3.2.0" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.2.tgz", + "integrity": "sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==", + "requires": { + "@lit-labs/ssr-dom-shim": "^1.5.0" + } + }, + "lit": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.2.tgz", + "integrity": "sha512-NF9zbsP79l4ao2SNrH3NkfmFgN/hBYSQo90saIVI1o5GpjAdCPVstVzO1MrLOakHoEhYkrtRjPK6Ob521aoYWQ==", + "requires": { + "@lit/reactive-element": "^2.1.0", + "lit-element": "^4.2.0", + "lit-html": "^3.3.0" + } + }, + "lit-element": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.2.2.tgz", + "integrity": "sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==", + "requires": { + "@lit-labs/ssr-dom-shim": "^1.5.0", + "@lit/reactive-element": "^2.1.0", + "lit-html": "^3.3.0" + } + }, + "lit-html": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.2.tgz", + "integrity": "sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==", + "requires": { + "@types/trusted-types": "^2.0.2" + } + } + } }, "@lit/reactive-element": { "version": "1.6.3", @@ -31427,6 +31635,11 @@ "version": "3.1.0", "dev": true }, + "magic-snowflakes": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/magic-snowflakes/-/magic-snowflakes-7.0.2.tgz", + "integrity": "sha512-hpoaXHPu2YYQT7tZK3/x4BgHmfYBoCN8+E9BbJKiDKe78nGEqYA3Sk5T2fK1SGcavKHPeBxXJgE8oaEExxeqrg==" + }, "make-dir": { "version": "3.1.0", "dev": true, @@ -33952,8 +34165,9 @@ } }, "tslib": { - "version": "2.4.0", - "dev": true + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "tunnel-agent": { "version": "0.6.0", diff --git a/package.json b/package.json index 0224b60e3..31aff2d5d 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "private": false, "dependencies": { "@internetarchive/bergamot-translator": "^0.4.9-ia.1", + "@internetarchive/elements": "0.2.1-webdev-8151.0", "@internetarchive/ia-activity-indicator": "^0.0.4", "@internetarchive/ia-item-navigator": "2.2.2", "@internetarchive/icon-bookmark": "^1.4.0", diff --git a/src/BookReader.js b/src/BookReader.js index a307d3eba..235b05906 100644 --- a/src/BookReader.js +++ b/src/BookReader.js @@ -42,6 +42,8 @@ import { ImageCache } from './BookReader/ImageCache.js'; import { PageContainer } from './BookReader/PageContainer.js'; import { NAMED_REDUCE_SETS } from './BookReader/ReduceSet.js'; +import '@internetarchive/elements/ia-status-indicator/ia-status-indicator'; + /** * BookReader * @param {Partial} overrides From d83006f06a174175e5062c72fbd0e45a2fb1ed16 Mon Sep 17 00:00:00 2001 From: Jason Buckner Date: Tue, 3 Feb 2026 14:01:59 -0800 Subject: [PATCH 2/5] Add svg-inline-loader --- package-lock.json | 119 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + src/BookReader.js | 1 + webpack.config.js | 6 ++- 4 files changed, 126 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 29c51ae31..17ace5f03 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,6 +61,7 @@ "sass": "1.93.2", "sinon": "21.0.0", "soundmanager2": "2.97.20170602", + "svg-inline-loader": "0.8.2", "svgo": "4.0.0", "testcafe": "3.7.2", "testcafe-browser-provider-browserstack": "^1.13.2-alpha.1", @@ -7086,6 +7087,16 @@ "dev": true, "license": "MIT" }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -8622,6 +8633,16 @@ "dev": true, "license": "MIT" }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/encodeurl": { "version": "1.0.2", "dev": true, @@ -15709,6 +15730,34 @@ "node": ">=6.11.5" } }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -17743,6 +17792,13 @@ "dev": true, "license": "ISC" }, + "node_modules/simple-html-tokenizer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.1.1.tgz", + "integrity": "sha512-Mc/gH3RvlKvB/gkp9XwgDKEWrSYyefIJPGG8Jk1suZms/rISdUuVEMx5O1WBnTWaScvxXDvGJrZQWblUmQHjkQ==", + "dev": true, + "license": "MIT" + }, "node_modules/sinon": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.0.tgz", @@ -18302,6 +18358,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-inline-loader": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/svg-inline-loader/-/svg-inline-loader-0.8.2.tgz", + "integrity": "sha512-kbrcEh5n5JkypaSC152eGfGcnT4lkR0eSfvefaUJkLqgGjRQJyKDvvEE/CCv5aTSdfXuc+N98w16iAojhShI3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^1.1.0", + "object-assign": "^4.0.1", + "simple-html-tokenizer": "^0.1.1" + } + }, "node_modules/svgo": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", @@ -25457,6 +25525,12 @@ "version": "2.4.3", "dev": true }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, "bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -26513,6 +26587,12 @@ "version": "8.0.0", "dev": true }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, "encodeurl": { "version": "1.0.2", "dev": true @@ -31569,6 +31649,28 @@ "version": "4.2.0", "dev": true }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -32959,6 +33061,12 @@ "version": "3.0.7", "dev": true }, + "simple-html-tokenizer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.1.1.tgz", + "integrity": "sha512-Mc/gH3RvlKvB/gkp9XwgDKEWrSYyefIJPGG8Jk1suZms/rISdUuVEMx5O1WBnTWaScvxXDvGJrZQWblUmQHjkQ==", + "dev": true + }, "sinon": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.0.tgz", @@ -33351,6 +33459,17 @@ "version": "1.0.0", "dev": true }, + "svg-inline-loader": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/svg-inline-loader/-/svg-inline-loader-0.8.2.tgz", + "integrity": "sha512-kbrcEh5n5JkypaSC152eGfGcnT4lkR0eSfvefaUJkLqgGjRQJyKDvvEE/CCv5aTSdfXuc+N98w16iAojhShI3g==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "object-assign": "^4.0.1", + "simple-html-tokenizer": "^0.1.1" + } + }, "svgo": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", diff --git a/package.json b/package.json index 31aff2d5d..6f0f1740a 100644 --- a/package.json +++ b/package.json @@ -83,6 +83,7 @@ "sass": "1.93.2", "sinon": "21.0.0", "soundmanager2": "2.97.20170602", + "svg-inline-loader": "0.8.2", "svgo": "4.0.0", "testcafe": "3.7.2", "testcafe-browser-provider-browserstack": "^1.13.2-alpha.1", diff --git a/src/BookReader.js b/src/BookReader.js index 235b05906..111682025 100644 --- a/src/BookReader.js +++ b/src/BookReader.js @@ -43,6 +43,7 @@ import { PageContainer } from './BookReader/PageContainer.js'; import { NAMED_REDUCE_SETS } from './BookReader/ReduceSet.js'; import '@internetarchive/elements/ia-status-indicator/ia-status-indicator'; +import '@internetarchive/elements/ia-combo-box/ia-combo-box'; /** * BookReader diff --git a/webpack.config.js b/webpack.config.js index 2d966c3e8..2ca5470c4 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -21,7 +21,11 @@ const shared = { { test: /\.js$/, exclude: /node_modules[/\\](?!(lit-element|lit-html|lit|@lit)[/\\]).*/, - loader: "babel-loader", + loader: 'babel-loader', + }, + { + test: /\.svg$/, + loader: 'svg-inline-loader', }, ], }, From b0a4d2567cdf13a1ba043a678dbd31e5219869af Mon Sep 17 00:00:00 2001 From: Jason Buckner Date: Tue, 3 Feb 2026 16:03:42 -0800 Subject: [PATCH 3/5] Add svg mock for jest tests --- package.json | 1 + tests/jest/mocks/svg.js | 4 ++++ 2 files changed, 5 insertions(+) create mode 100644 tests/jest/mocks/svg.js diff --git a/package.json b/package.json index 6f0f1740a..2425b641d 100644 --- a/package.json +++ b/package.json @@ -96,6 +96,7 @@ "node_modules/(?!(sinon|lit-html|lit-element|lit|@lit|@lit-labs|@internetarchive|@open-wc)/)" ], "moduleNameMapper": { + "\\.svg$": "/tests/jest/mocks/svg.js", "^@/(.*)$": "/$1" }, "setupFiles": [ diff --git a/tests/jest/mocks/svg.js b/tests/jest/mocks/svg.js new file mode 100644 index 000000000..5153f9a12 --- /dev/null +++ b/tests/jest/mocks/svg.js @@ -0,0 +1,4 @@ +/** + * Mock for SVG imports in Jest tests. + */ +export class SVGMock {} From f6a5b075cf56057dea08abec6ee9d5af8b75be9c Mon Sep 17 00:00:00 2001 From: Jason Buckner Date: Tue, 3 Feb 2026 16:19:21 -0800 Subject: [PATCH 4/5] Use webpack's built-in asset loader for svgs --- package-lock.json | 119 ---------------------------------------------- package.json | 1 - webpack.config.js | 4 +- 3 files changed, 2 insertions(+), 122 deletions(-) diff --git a/package-lock.json b/package-lock.json index 17ace5f03..29c51ae31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,7 +61,6 @@ "sass": "1.93.2", "sinon": "21.0.0", "soundmanager2": "2.97.20170602", - "svg-inline-loader": "0.8.2", "svgo": "4.0.0", "testcafe": "3.7.2", "testcafe-browser-provider-browserstack": "^1.13.2-alpha.1", @@ -7087,16 +7086,6 @@ "dev": true, "license": "MIT" }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, "node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -8633,16 +8622,6 @@ "dev": true, "license": "MIT" }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/encodeurl": { "version": "1.0.2", "dev": true, @@ -15730,34 +15709,6 @@ "node": ">=6.11.5" } }, - "node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -17792,13 +17743,6 @@ "dev": true, "license": "ISC" }, - "node_modules/simple-html-tokenizer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.1.1.tgz", - "integrity": "sha512-Mc/gH3RvlKvB/gkp9XwgDKEWrSYyefIJPGG8Jk1suZms/rISdUuVEMx5O1WBnTWaScvxXDvGJrZQWblUmQHjkQ==", - "dev": true, - "license": "MIT" - }, "node_modules/sinon": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.0.tgz", @@ -18358,18 +18302,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svg-inline-loader": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/svg-inline-loader/-/svg-inline-loader-0.8.2.tgz", - "integrity": "sha512-kbrcEh5n5JkypaSC152eGfGcnT4lkR0eSfvefaUJkLqgGjRQJyKDvvEE/CCv5aTSdfXuc+N98w16iAojhShI3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^1.1.0", - "object-assign": "^4.0.1", - "simple-html-tokenizer": "^0.1.1" - } - }, "node_modules/svgo": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", @@ -25525,12 +25457,6 @@ "version": "2.4.3", "dev": true }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, "bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -26587,12 +26513,6 @@ "version": "8.0.0", "dev": true }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, "encodeurl": { "version": "1.0.2", "dev": true @@ -31649,28 +31569,6 @@ "version": "4.2.0", "dev": true }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -33061,12 +32959,6 @@ "version": "3.0.7", "dev": true }, - "simple-html-tokenizer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.1.1.tgz", - "integrity": "sha512-Mc/gH3RvlKvB/gkp9XwgDKEWrSYyefIJPGG8Jk1suZms/rISdUuVEMx5O1WBnTWaScvxXDvGJrZQWblUmQHjkQ==", - "dev": true - }, "sinon": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.0.tgz", @@ -33459,17 +33351,6 @@ "version": "1.0.0", "dev": true }, - "svg-inline-loader": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/svg-inline-loader/-/svg-inline-loader-0.8.2.tgz", - "integrity": "sha512-kbrcEh5n5JkypaSC152eGfGcnT4lkR0eSfvefaUJkLqgGjRQJyKDvvEE/CCv5aTSdfXuc+N98w16iAojhShI3g==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "object-assign": "^4.0.1", - "simple-html-tokenizer": "^0.1.1" - } - }, "svgo": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", diff --git a/package.json b/package.json index 2425b641d..681862f63 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,6 @@ "sass": "1.93.2", "sinon": "21.0.0", "soundmanager2": "2.97.20170602", - "svg-inline-loader": "0.8.2", "svgo": "4.0.0", "testcafe": "3.7.2", "testcafe-browser-provider-browserstack": "^1.13.2-alpha.1", diff --git a/webpack.config.js b/webpack.config.js index 2ca5470c4..753ec6fa2 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -24,8 +24,8 @@ const shared = { loader: 'babel-loader', }, { - test: /\.svg$/, - loader: 'svg-inline-loader', + test: /\.svg/, + type: 'asset/inline', }, ], }, From 0d77b37b726f3d958b4e6fe906c64737e653e3ca Mon Sep 17 00:00:00 2001 From: Jason Buckner Date: Tue, 3 Feb 2026 16:23:02 -0800 Subject: [PATCH 5/5] Externalize svgs --- webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpack.config.js b/webpack.config.js index 753ec6fa2..064240003 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -25,7 +25,7 @@ const shared = { }, { test: /\.svg/, - type: 'asset/inline', + type: 'asset/resource', }, ], },