From 9b601129902423cc81a5e694a8c28518dd5c639b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Oct 2026 11:10:37 +0000 Subject: [PATCH 1/2] Build(deps-dev): Bump @biomejs/biome Bumps the dev-dependencies group with 1 update: [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome). Updates `@biomejs/biome` from 2.5.15 to 2.6.2 - [Release notes](https://github.com/biomejs/biome/releases) - [Changelog](https://github.com/biomejs/biome/blob/@biomejs/biome@2.6.2/packages/@biomejs/biome/CHANGELOG.md) - [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.6.2/packages/@biomejs/biome) --- updated-dependencies: - dependency-name: "@biomejs/biome" dependency-version: 2.6.2 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-dependencies ... Signed-off-by: dependabot[bot] --- package-lock.json | 108 ++++++++++++++++++++++++++++++---------------- package.json | 2 +- 2 files changed, 73 insertions(+), 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4c73e5ec..8a7c9e80 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "stackyard-dev", "devDependencies": { - "@biomejs/biome": "2.5.15", + "@biomejs/biome": "2.6.2", "@playwright/test": "^1.64.1", "@types/node": "26.6.5", "c8": "12.0.0", @@ -25,9 +25,9 @@ } }, "node_modules/@biomejs/biome": { - "version": "2.5.15", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.5.15.tgz", - "integrity": "sha512-WZTW4slm/pdkh92K6t/3aEN++44JD1PQ7squ7RCMLI1flHGl43DVOIGXvCjHiZgBMO1V4uYxoFNtqrIA4qGuIQ==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.6.2.tgz", + "integrity": "sha512-JLTFAFF9vfJcWwLhwuL4ZHflLg+XfTEC4IUnAlJRX1cMRt57++Xd1Ysb9Fdmlh9YUrvyCXfPEHjjEIqKJGdPKw==", "dev": true, "license": "MIT OR Apache-2.0", "bin": { @@ -41,20 +41,56 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "2.5.15", - "@biomejs/cli-darwin-x64": "2.5.15", - "@biomejs/cli-linux-arm64": "2.5.15", - "@biomejs/cli-linux-arm64-musl": "2.5.15", - "@biomejs/cli-linux-x64": "2.5.15", - "@biomejs/cli-linux-x64-musl": "2.5.15", - "@biomejs/cli-win32-arm64": "2.5.15", - "@biomejs/cli-win32-x64": "2.5.15" + "@biomejs/cli-android-arm64": "2.6.2", + "@biomejs/cli-android-x64": "2.6.2", + "@biomejs/cli-darwin-arm64": "2.6.2", + "@biomejs/cli-darwin-x64": "2.6.2", + "@biomejs/cli-linux-arm64": "2.6.2", + "@biomejs/cli-linux-arm64-musl": "2.6.2", + "@biomejs/cli-linux-x64": "2.6.2", + "@biomejs/cli-linux-x64-musl": "2.6.2", + "@biomejs/cli-win32-arm64": "2.6.2", + "@biomejs/cli-win32-x64": "2.6.2" + } + }, + "node_modules/@biomejs/cli-android-arm64": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-android-arm64/-/cli-android-arm64-2.6.2.tgz", + "integrity": "sha512-dMpdpH7zFEL5FxuIA9LJW+RoNyC3oeDB7PJyjqVVwtMNoKB5uo8OZYmrVSBikn71txzYwy/3xga7UME6bJQZ6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-android-x64": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-android-x64/-/cli-android-x64-2.6.2.tgz", + "integrity": "sha512-XCwEhPBGYzuRA502dRkCcQ+5cefQwuxQR7f9wa4do92dvIcuBL6VMLMFB/fL9hlpZ4dGSfHdpGFSIDlp52mg0A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.21.3" } }, "node_modules/@biomejs/cli-darwin-arm64": { - "version": "2.5.15", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.5.15.tgz", - "integrity": "sha512-BZVzFhJ/mUvTLMYbc9x6el0o2Uv5zP7bACYyhFb6fSc1giroXm7PL0a5KqMJ9F+/BnkYRjagD/ROSDVOZ6eapg==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.6.2.tgz", + "integrity": "sha512-rpXtabRgyZNz3aCjd/cRoSZGYi92R9eAXdUUe1sigIsRDyfMwgThaa98Yxt1fiZ7mxquqkAyIHIo08N/e1ToBA==", "cpu": [ "arm64" ], @@ -69,9 +105,9 @@ } }, "node_modules/@biomejs/cli-darwin-x64": { - "version": "2.5.15", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.5.15.tgz", - "integrity": "sha512-V5Kw63V+fVGNFhFrizDxMbGXAzZCh8kYzJpy3GI6gTapWDg7bZK9oYC9CbVgQSEdTnupz0U5Efz8Ev+5vdBBXw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.6.2.tgz", + "integrity": "sha512-7GGzlm1GxUKoQ9CNV8tQZ+XXad4sz+v+uzNsWlhaGjsnZqUOVBw1OmAMpG3uNV/Mr0UrCpRJvSK0qvfuqSQOjg==", "cpu": [ "x64" ], @@ -86,9 +122,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64": { - "version": "2.5.15", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.5.15.tgz", - "integrity": "sha512-XaG7P7eeSLYETD3K9grfB0mQmpLQZjygdbsxekWBJAg4am79fGAtRpfRyNnTvXB2fZFNnJZG3nXm7HBat0+VUw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.6.2.tgz", + "integrity": "sha512-Qs4CofCE8MdkjZFfEjswh2NAcbyQ7IVYtGSzQBvLqFlla/CSXroGbktUFndWG/kVSTywadauzAspYWtSfqAc2g==", "cpu": [ "arm64" ], @@ -106,9 +142,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "2.5.15", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.5.15.tgz", - "integrity": "sha512-tGzZUTcJCV7tj5Adh/Gn6nR4MycqA3iohq2LEcrarAgRBkU0h0OKd2UzCRkOsOYOuUGaUJb4YmqRqyy2feGGSw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.6.2.tgz", + "integrity": "sha512-I+FYCLVSmR3cYfKcQ+KNeLOZ5w0wRd9fQFlw3JbSvy7bkegvTqdHaBRRcJzHQB/1ldldTLIcG21ka6X2cTWmJw==", "cpu": [ "arm64" ], @@ -126,9 +162,9 @@ } }, "node_modules/@biomejs/cli-linux-x64": { - "version": "2.5.15", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.5.15.tgz", - "integrity": "sha512-xE4iEW/3LqlYj9GFgGrFsFSH51dEEpUbYWBfeOv0q87WkUDxK2o/HhreSb7qMJqck70RVM6Lg96hgedcAYcOkA==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.6.2.tgz", + "integrity": "sha512-FJKsb95418139xDdbv9XnNJsIIwvsgR21Of0aE9B9U+nQlOtRq5gJl2ps0jZUmYBxTaOlP9BKo8N+Ff8+Rui1g==", "cpu": [ "x64" ], @@ -146,9 +182,9 @@ } }, "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "2.5.15", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.5.15.tgz", - "integrity": "sha512-IlxUcyxilVGPsE008x13pWdkTbU3nQpP2i9b5UrbOYj6goBkKsRX1XB7yJLcV+O1H9LBchIIm4adOaVLZBX0ZQ==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.6.2.tgz", + "integrity": "sha512-wnjEXAK2pDd2j8r9gKI3L+44sIxjkYzS5aHmD1+K57RNJ3sFyT4n22NH6QFPqqeVdRBxN54H3kckUUCrFKCcJw==", "cpu": [ "x64" ], @@ -166,9 +202,9 @@ } }, "node_modules/@biomejs/cli-win32-arm64": { - "version": "2.5.15", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.5.15.tgz", - "integrity": "sha512-2kPKzhNlm8C+Ru3GcO0Me2ODkCBLrVOUNuyi84RJyWDVKAA4+Kjj3jMjL938lF6BRfvltC4vB2nPY9SvN51Ovg==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.6.2.tgz", + "integrity": "sha512-/PEOo6evlgrQOfKhMNtC/4Gk8ai3hySXXEtjUzCqZe/4iAbMdqelpp7qvZEDyLxlZS+BjOMQFpq2gXI/BPaAqw==", "cpu": [ "arm64" ], @@ -183,9 +219,9 @@ } }, "node_modules/@biomejs/cli-win32-x64": { - "version": "2.5.15", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.5.15.tgz", - "integrity": "sha512-yAzh4UqEImV6Hcy0zjUqNfJAsUhoD64FBQCdTG8Md/Z2wQeVP/ZmJ3XRYAs1g8J9fjTFyl2fCtc5FB5til47+g==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.6.2.tgz", + "integrity": "sha512-FVlWD+mDDz8nN5LWKRWUhhb7wKIK0VE3oXQvQBX7Fwwj00CvqMVhMyiz1iz8O5aZGmnkhFlKSwJPrUvMh5prQw==", "cpu": [ "x64" ], diff --git a/package.json b/package.json index e57941da..9433ff68 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "typecheck:ui": "tsc -p tsconfig.frontend.json" }, "devDependencies": { - "@biomejs/biome": "2.5.15", + "@biomejs/biome": "2.6.2", "@playwright/test": "^1.64.1", "@types/node": "26.6.5", "c8": "12.0.0", From 32fd69adb205af3550d97b34a3bde5f574772edd Mon Sep 17 00:00:00 2001 From: SandObserver <260779319+SandObserver@users.noreply.github.com> Date: Mon, 26 Oct 2026 16:41:00 -0400 Subject: [PATCH 2/2] Pass Biome 2.6 lint Turn off useDomNodeTextContent: the e2e specs and the demo tour read rendered text on purpose. Use Math.max in the listbox. --- biome.json | 3 +++ ui/admin/index.html | 2 +- ui/js/admin-app-form.js | 4 ++-- ui/js/admin-color-control.js | 2 +- ui/js/admin-list.js | 2 +- ui/js/admin-settings.js | 2 +- ui/js/admin-widget-form.js | 4 ++-- ui/js/admin.js | 10 +++++----- ui/js/listbox.js | 2 +- ui/js/widget-config-form.js | 4 ++-- 10 files changed, 19 insertions(+), 16 deletions(-) diff --git a/biome.json b/biome.json index e35c89fd..8a62b77e 100644 --- a/biome.json +++ b/biome.json @@ -40,6 +40,9 @@ "suspicious": { "noShadow": "error", "useIterableCallbackReturn": "off" + }, + "performance": { + "useDomNodeTextContent": "off" } } }, diff --git a/ui/admin/index.html b/ui/admin/index.html index 2f65abbf..47b991a8 100644 --- a/ui/admin/index.html +++ b/ui/admin/index.html @@ -319,6 +319,6 @@

General

- + diff --git a/ui/js/admin-app-form.js b/ui/js/admin-app-form.js index a072803c..c3324ba1 100644 --- a/ui/js/admin-app-form.js +++ b/ui/js/admin-app-form.js @@ -34,9 +34,9 @@ import { setTogDisabled, swapContent, } from '/js/admin-shared.js?v=c509d11e'; -import { createListbox } from '/js/listbox.js?v=2734f4e0'; +import { createListbox } from '/js/listbox.js?v=42aec241'; import { MAX_LABELS } from '/js/badge-logic.js?v=85b1bc96'; -import { renderColorControl, BADGE_DEFAULT } from '/js/admin-color-control.js?v=b3bb1707'; +import { renderColorControl, BADGE_DEFAULT } from '/js/admin-color-control.js?v=b47faa12'; import { badgeErrorAdvice, TONE } from '/js/admin-error.js?v=1c258dc1'; import { fluidHoverClear, fluidHoverKb } from '/js/fluid-hover.js?v=eb6cc81c'; import { iconSvg } from '/js/icon-set.js?v=26655aca'; diff --git a/ui/js/admin-color-control.js b/ui/js/admin-color-control.js index 85faa92e..60b50a47 100644 --- a/ui/js/admin-color-control.js +++ b/ui/js/admin-color-control.js @@ -3,7 +3,7 @@ import { t } from '/js/i18n.js?v=ed7c5565'; import { html, raw, setHtml } from '/js/html.js?v=c71f8903'; import { qa, q } from '/js/utils.js?v=017012d7'; import { iconSvg } from '/js/icon-set.js?v=26655aca'; -import { createListbox } from '/js/listbox.js?v=2734f4e0'; +import { createListbox } from '/js/listbox.js?v=42aec241'; import { HUE_NAMES, ROLE_NAMES, TILE_KEYWORDS, pageTheme, tileColor } from '/js/palette.js?v=3fb8ae43'; const CC_SWATCHES = ['#1c1c1e', '#8e8e93', '#f2f2f7', '#ff393c', '#ffcd00', '#35c759', '#0289ff', '#cb30df']; diff --git a/ui/js/admin-list.js b/ui/js/admin-list.js index 88aa67d7..a72b4075 100644 --- a/ui/js/admin-list.js +++ b/ui/js/admin-list.js @@ -22,7 +22,7 @@ import { paintIcon, toast } from '/js/admin-shared.js?v=c509d11e'; import { clr, el, focusFirst, initial, qa, setUserText } from '/js/utils.js?v=017012d7'; import { html, raw, setHtml } from '/js/html.js?v=c71f8903'; import { t } from '/js/i18n.js?v=ed7c5565'; -import { sizeLabel } from '/js/admin-widget-form.js?v=e9db6e2a'; +import { sizeLabel } from '/js/admin-widget-form.js?v=b480a481'; import { widgetGlyph } from '/js/widget-glyphs.js?v=479a53ee'; import { iconSvg } from '/js/icon-set.js?v=26655aca'; diff --git a/ui/js/admin-settings.js b/ui/js/admin-settings.js index b8268684..41f2ba72 100644 --- a/ui/js/admin-settings.js +++ b/ui/js/admin-settings.js @@ -14,7 +14,7 @@ import { confirmText, promptModal } from '/js/modal.js?v=6b0320bd'; import { el, inp, setUserText } from '/js/utils.js?v=017012d7'; import { formatNumber } from '/js/format-number.js?v=abcd4ae4'; import { serialWrites } from '/js/admin-save-logic.js?v=b83791fb'; -import { renderColorControl } from '/js/admin-color-control.js?v=b3bb1707'; +import { renderColorControl } from '/js/admin-color-control.js?v=b47faa12'; import { BACKDROP } from '/js/background.js?v=4d651887'; import { ALLOWED_HOSTS_MAX, diff --git a/ui/js/admin-widget-form.js b/ui/js/admin-widget-form.js index c78fce8b..4b5affff 100644 --- a/ui/js/admin-widget-form.js +++ b/ui/js/admin-widget-form.js @@ -1,7 +1,7 @@ import { state } from '/js/admin-state.js?v=064b9b85'; import { PE_SVG, initInlineEdit, swapContent } from '/js/admin-shared.js?v=c509d11e'; -import { createListbox } from '/js/listbox.js?v=2734f4e0'; -import { renderWidgetConfigForm } from '/js/widget-config-form.js?v=e978f0b5'; +import { createListbox } from '/js/listbox.js?v=42aec241'; +import { renderWidgetConfigForm } from '/js/widget-config-form.js?v=5c591625'; import { html, raw, setHtml } from '/js/html.js?v=c71f8903'; import { sizesForView, widgetConfigMode, rejectionLines, carriesTypedValues } from '/js/admin-logic.js?v=28471483'; import { t } from '/js/i18n.js?v=ed7c5565'; diff --git a/ui/js/admin.js b/ui/js/admin.js index 5125b4ea..69838c6c 100644 --- a/ui/js/admin.js +++ b/ui/js/admin.js @@ -4,10 +4,10 @@ import { buildSettingsTileForm, captureActLabels, serializeKvRows, -} from '/js/admin-app-form.js?v=2ede5bc6'; +} from '/js/admin-app-form.js?v=63c9ce52'; import { checkAuth, requireLogin, wirePasswordStrength } from '/js/admin-auth.js?v=d4c794a0'; import { recoveryShown } from '/js/config-recovery.js?v=85138697'; -import { focusRow, initList, render, syncFilterUI } from '/js/admin-list.js?v=b7cfd03d'; +import { focusRow, initList, render, syncFilterUI } from '/js/admin-list.js?v=24b894eb'; import { resolveAdminSection, settleDock } from '/js/admin-logic.js?v=28471483'; import { afterImport, @@ -31,7 +31,7 @@ import { wireUnsplashKey, wireProxmox, applyHealthChecks, -} from '/js/admin-settings.js?v=61b1ea1d'; +} from '/js/admin-settings.js?v=649babe5'; import { apiGet, apiPost, @@ -47,11 +47,11 @@ import { withheldText, } from '/js/admin-shared.js?v=c509d11e'; import { collapsedFolders, filter, state } from '/js/admin-state.js?v=064b9b85'; -import { buildWidgetForm } from '/js/admin-widget-form.js?v=e9db6e2a'; +import { buildWidgetForm } from '/js/admin-widget-form.js?v=b480a481'; import { initFluidHover } from '/js/fluid-hover.js?v=eb6cc81c'; import { formatNumber } from '/js/format-number.js?v=abcd4ae4'; import { initGlideSelect, syncGlideSelect } from '/js/glide-select.js?v=75a71ab4'; -import { createListbox } from '/js/listbox.js?v=2734f4e0'; +import { createListbox } from '/js/listbox.js?v=42aec241'; import { html, raw, setHtml } from '/js/html.js?v=c71f8903'; import { initI18n, LANGUAGES, t } from '/js/i18n.js?v=ed7c5565'; import { loadLocalIcons } from '/js/icons.js?v=5ac01d72'; diff --git a/ui/js/listbox.js b/ui/js/listbox.js index 1a01bf7b..ebc21c4d 100644 --- a/ui/js/listbox.js +++ b/ui/js/listbox.js @@ -221,7 +221,7 @@ export function createListbox( ); const o = items(); const first = o.findIndex(li => li.getAttribute('aria-selected') === 'true'); - setActive(first >= 0 ? first : 0); + setActive(Math.max(first, 0)); if (animate) list.classList.add('dd-in'); }; diff --git a/ui/js/widget-config-form.js b/ui/js/widget-config-form.js index 1d1e8af3..b20aadbc 100644 --- a/ui/js/widget-config-form.js +++ b/ui/js/widget-config-form.js @@ -4,8 +4,8 @@ import { t } from '/js/i18n.js?v=ed7c5565'; import { html, raw, setHtml } from '/js/html.js?v=c71f8903'; import { reveal, wireInlineEdit } from '/js/admin-shared.js?v=c509d11e'; -import { createListbox } from '/js/listbox.js?v=2734f4e0'; -import { renderColorControl } from '/js/admin-color-control.js?v=b3bb1707'; +import { createListbox } from '/js/listbox.js?v=42aec241'; +import { renderColorControl } from '/js/admin-color-control.js?v=b47faa12'; import { seedCarried, applyOptionSet,