diff --git a/.github/workflows/autofix.yml b/.github/workflows/autofix.yml index 9ec6ede1a6..8c62cd4eaa 100644 --- a/.github/workflows/autofix.yml +++ b/.github/workflows/autofix.yml @@ -20,26 +20,26 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: lts/* - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # 4e1c8eafbd745f64b1ef30a7d7ed7965034c486c + - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # 5e1c8eafbd745f64b1ef30a7d7ed7965034c486c name: ๐ŸŸง Install pnpm - name: ๐Ÿ“ฆ Install dependencies run: pnpm install - name: ๐ŸŽจ Check for non-RTL/non-a11y CSS classes - run: pnpm lint:css + run: pnpm vp run lint:css - name: ๐ŸŒ Compare translations - run: pnpm i18n:check + run: pnpm vp run i18n:check - name: ๐ŸŒ Update lunaria data - run: pnpm build:lunaria + run: pnpm vp run build:lunaria - name: ๐Ÿ”  Fix lint errors - run: pnpm lint:fix + run: pnpm vp run lint:fix - uses: autofix-ci/action@635ffb0c9798bd160680f18fd73371e355b85f27 # 635ffb0c9798bd160680f18fd73371e355b85f27 diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index 4f9d810bf3..f2acad0be0 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -26,18 +26,18 @@ jobs: repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }} ref: ${{ github.event.pull_request.head.sha || github.sha }} - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: lts/* - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # 4e1c8eafbd745f64b1ef30a7d7ed7965034c486c + - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # 5e1c8eafbd745f64b1ef30a7d7ed7965034c486c name: ๐ŸŸง Install pnpm - name: ๐Ÿ“ฆ Install dependencies run: pnpm install - name: ๐Ÿงช Run Chromatic Visual and Accessibility Tests - uses: chromaui/action@5ec258af08deb3e8c36653bd618cb7fe52090031 # v15.2.0 + uses: chromaui/action@0794e6939fe40ce46a88963f818092afc427da5b # v15.3.0 env: CHROMATIC_BRANCH: ${{ github.event.pull_request.head.ref || github.ref_name }} CHROMATIC_SHA: ${{ github.event.pull_request.head.sha || github.sha }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aabce74779..23963aed01 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,18 +28,18 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: lts/* - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # 4e1c8eafbd745f64b1ef30a7d7ed7965034c486c + - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # 5e1c8eafbd745f64b1ef30a7d7ed7965034c486c name: ๐ŸŸง Install pnpm - name: ๐Ÿ“ฆ Install dependencies (root only, no scripts) run: pnpm install --filter . --ignore-scripts - name: ๐Ÿ”  Lint project - run: pnpm lint + run: pnpm vp run lint types: name: ๐Ÿ’ช Type check @@ -48,18 +48,18 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: lts/* - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # 4e1c8eafbd745f64b1ef30a7d7ed7965034c486c + - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # 5e1c8eafbd745f64b1ef30a7d7ed7965034c486c name: ๐ŸŸง Install pnpm - name: ๐Ÿ“ฆ Install dependencies run: pnpm install - name: ๐Ÿ’ช Type check - run: pnpm test:types + run: pnpm vp run test:types unit: name: ๐Ÿงช Unit tests @@ -68,18 +68,18 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: lts/* - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # 4e1c8eafbd745f64b1ef30a7d7ed7965034c486c + - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # 5e1c8eafbd745f64b1ef30a7d7ed7965034c486c name: ๐ŸŸง Install pnpm - name: ๐Ÿ“ฆ Install dependencies run: pnpm install - name: ๐Ÿงช Unit tests - run: pnpm test:unit run --coverage --reporter=default --reporter=junit --outputFile=test-report.junit.xml + run: pnpm vp test --project unit --coverage --reporter=default --reporter=junit --outputFile=test-report.junit.xml - name: โฌ†๏ธŽ Upload test results to Codecov if: ${{ !cancelled() }} @@ -94,21 +94,21 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: lts/* - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # 4e1c8eafbd745f64b1ef30a7d7ed7965034c486c + - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # 5e1c8eafbd745f64b1ef30a7d7ed7965034c486c name: ๐ŸŸง Install pnpm - name: ๐Ÿ“ฆ Install dependencies run: pnpm install - name: ๐ŸŒ Install browser - run: pnpm playwright install chromium-headless-shell + run: pnpm vp exec playwright install chromium-headless-shell - name: ๐Ÿงช Component tests - run: pnpm test:nuxt run --coverage --reporter=default --reporter=junit --outputFile=test-report.junit.xml + run: pnpm vp test --project nuxt --coverage --reporter=default --reporter=junit --outputFile=test-report.junit.xml - name: โฌ†๏ธŽ Upload coverage reports to Codecov uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5 @@ -131,23 +131,23 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: lts/* - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # 4e1c8eafbd745f64b1ef30a7d7ed7965034c486c + - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # 5e1c8eafbd745f64b1ef30a7d7ed7965034c486c name: ๐ŸŸง Install pnpm - name: ๐Ÿ“ฆ Install dependencies run: pnpm install - name: ๐Ÿ—๏ธ Build project - run: pnpm build:test + run: pnpm vp run build:test env: VALIDATE_HTML: true - name: ๐Ÿ–ฅ๏ธ Test project (browser) - run: pnpm test:browser:prebuilt + run: pnpm vp run test:browser:prebuilt a11y: name: โ™ฟ Accessibility audit @@ -159,21 +159,21 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: lts/* - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # 4e1c8eafbd745f64b1ef30a7d7ed7965034c486c + - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # 5e1c8eafbd745f64b1ef30a7d7ed7965034c486c name: ๐ŸŸง Install pnpm - name: ๐Ÿ“ฆ Install dependencies run: pnpm install - name: ๐Ÿ—๏ธ Build project - run: pnpm build:test + run: pnpm vp run build:test - name: โ™ฟ Accessibility audit (Lighthouse - ${{ matrix.mode }} mode) - run: pnpm test:a11y:prebuilt + run: pnpm vp run test:a11y:prebuilt env: LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN }} LIGHTHOUSE_COLOR_MODE: ${{ matrix.mode }} @@ -185,21 +185,18 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: lts/* - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # 4e1c8eafbd745f64b1ef30a7d7ed7965034c486c + - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # 5e1c8eafbd745f64b1ef30a7d7ed7965034c486c name: ๐ŸŸง Install pnpm - name: ๐Ÿ“ฆ Install dependencies run: pnpm install - name: ๐Ÿงน Check for unused code - run: pnpm knip - - - name: ๐Ÿงน Check for unused production code - run: pnpm knip --production + run: pnpm vp run knip i18n: name: ๐ŸŒ i18n validation @@ -208,20 +205,20 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: lts/* - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # 4e1c8eafbd745f64b1ef30a7d7ed7965034c486c + - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # 5e1c8eafbd745f64b1ef30a7d7ed7965034c486c name: ๐ŸŸง Install pnpm - name: ๐Ÿ“ฆ Install dependencies (root only, no scripts) run: pnpm install --filter . --ignore-scripts - name: ๐ŸŒ Check for missing or dynamic i18n keys - run: pnpm i18n:report + run: pnpm vp run i18n:report - name: ๐ŸŒ Check i18n schema is up to date run: | - pnpm i18n:schema + pnpm vp run i18n:schema git diff --exit-code i18n/schema.json diff --git a/.github/workflows/lunaria.yml b/.github/workflows/lunaria.yml index 1c4238b221..b2bc818360 100644 --- a/.github/workflows/lunaria.yml +++ b/.github/workflows/lunaria.yml @@ -28,11 +28,11 @@ jobs: # Makes the action clone the entire git history fetch-depth: 0 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: lts/* - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # 4e1c8eafbd745f64b1ef30a7d7ed7965034c486c + - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # 5e1c8eafbd745f64b1ef30a7d7ed7965034c486c name: ๐ŸŸง Install pnpm - name: ๐Ÿ“ฆ Install dependencies diff --git a/.github/workflows/provenance.yml b/.github/workflows/provenance.yml deleted file mode 100644 index 87e04ff979..0000000000 --- a/.github/workflows/provenance.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: provenance - -on: - push: - branches: - - main - paths: - - pnpm-lock.yaml - pull_request: - branches: - - main - paths: - - pnpm-lock.yaml - merge_group: - branches: - - main - -permissions: - contents: read - -jobs: - check-provenance: - name: ๐Ÿ”’ Check provenance downgrades - runs-on: ubuntu-slim - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - with: - fetch-depth: 0 - - - name: Check provenance downgrades - uses: danielroe/provenance-action@41bcc969e579d9e29af08ba44fcbfdf95cee6e6c # v0.1.1 - with: - fail-on-provenance-change: true diff --git a/.github/workflows/release-pr.yml b/.github/workflows/release-pr.yml index dff5505ca7..fc244db18e 100644 --- a/.github/workflows/release-pr.yml +++ b/.github/workflows/release-pr.yml @@ -20,7 +20,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: lts/* diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml index 512a3bffbb..331540e6d9 100644 --- a/.github/workflows/release-tag.yml +++ b/.github/workflows/release-tag.yml @@ -23,7 +23,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: lts/* @@ -58,13 +58,13 @@ jobs: git tag -a "$VERSION" -m "Release $VERSION" git push origin "$VERSION" - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # 4e1c8eafbd745f64b1ef30a7d7ed7965034c486c + - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # 5e1c8eafbd745f64b1ef30a7d7ed7965034c486c if: steps.check.outputs.skip == 'false' name: ๐ŸŸง Install pnpm - name: ๐Ÿ“ฆ Install dependencies if: steps.check.outputs.skip == 'false' - run: pnpm install --filter . --ignore-scripts + run: pnpm vp install --filter . --ignore-scripts - name: ๐Ÿ“ Generate release notes if: steps.check.outputs.skip == 'false' @@ -98,12 +98,12 @@ jobs: with: ref: release - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: lts/* registry-url: https://registry.npmjs.org - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # 4e1c8eafbd745f64b1ef30a7d7ed7965034c486c + - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # 5e1c8eafbd745f64b1ef30a7d7ed7965034c486c name: ๐ŸŸง Install pnpm with: cache: false diff --git a/.gitignore b/.gitignore index ac8d21945e..9aa2aebd2e 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,6 @@ public/blog/avatar storybook-static .nvmrc +.agents +.vscode/mcp.json +AGENTS.md diff --git a/.oxfmtrc.json b/.oxfmtrc.json deleted file mode 100644 index 90a61d7096..0000000000 --- a/.oxfmtrc.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$schema": "https://unpkg.com/oxfmt/configuration_schema.json", - "semi": false, - "singleQuote": true, - "arrowParens": "avoid", - "quoteProps": "consistent", - "experimentalSortPackageJson": false -} diff --git a/.oxlintrc.json b/.oxlintrc.json deleted file mode 100644 index 3593ccb945..0000000000 --- a/.oxlintrc.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "$schema": "https://unpkg.com/oxlint/configuration_schema.json", - "plugins": ["unicorn", "typescript", "oxc", "vue", "vitest"], - "jsPlugins": ["@e18e/eslint-plugin", "eslint-plugin-regexp"], - "categories": { - "correctness": "error", - "suspicious": "warn", - "perf": "warn" - }, - "rules": { - "no-console": "warn", - "no-await-in-loop": "off", - "unicorn/no-array-sort": "off", - "no-restricted-globals": "error", - "typescript/consistent-type-imports": "error", - "e18e/prefer-array-from-map": "error", - "e18e/prefer-timer-args": "error", - "e18e/prefer-date-now": "error", - "e18e/prefer-regex-test": "error", - "e18e/prefer-array-some": "error", - // RegExp - Possible Errors (most critical) - "regexp/no-contradiction-with-assertion": "error", - "regexp/no-dupe-disjunctions": "error", - "regexp/no-empty-alternative": "error", - "regexp/no-empty-capturing-group": "error", - "regexp/no-empty-character-class": "error", - "regexp/no-empty-group": "error", - "regexp/no-empty-lookarounds-assertion": "error", - "regexp/no-escape-backspace": "error", - "regexp/no-invalid-regexp": "error", - "regexp/no-lazy-ends": "error", - "regexp/no-misleading-capturing-group": "error", - "regexp/no-misleading-unicode-character": "error", - "regexp/no-missing-g-flag": "error", - "regexp/no-optional-assertion": "error", - "regexp/no-potentially-useless-backreference": "error", - "regexp/no-super-linear-backtracking": "error", - "regexp/no-useless-assertions": "error", - "regexp/no-useless-backreference": "error", - "regexp/no-useless-dollar-replacements": "error", - "regexp/strict": "error", - // RegExp - Best Practices - "regexp/confusing-quantifier": "warn", - "regexp/control-character-escape": "error", - "regexp/negation": "error", - "regexp/no-dupe-characters-character-class": "error", - "regexp/no-empty-string-literal": "error", - "regexp/no-extra-lookaround-assertions": "error", - "regexp/no-invisible-character": "error", - "regexp/no-legacy-features": "error", - "regexp/no-non-standard-flag": "error", - "regexp/no-obscure-range": "error", - "regexp/no-octal": "error", - "regexp/no-standalone-backslash": "error", - "regexp/no-trivially-nested-assertion": "error", - "regexp/no-trivially-nested-quantifier": "error", - "regexp/no-unused-capturing-group": "warn", - "regexp/no-useless-character-class": "error", - "regexp/no-useless-flag": "error", - "regexp/no-useless-lazy": "error", - "regexp/no-useless-quantifier": "error", - "regexp/no-useless-range": "error", - "regexp/no-useless-set-operand": "error", - "regexp/no-useless-string-literal": "error", - "regexp/no-useless-two-nums-quantifier": "error", - "regexp/no-zero-quantifier": "error", - "regexp/optimal-lookaround-quantifier": "warn", - "regexp/optimal-quantifier-concatenation": "error", - "regexp/prefer-predefined-assertion": "error", - "regexp/prefer-range": "error", - "regexp/prefer-set-operation": "error", - "regexp/simplify-set-operations": "error", - "regexp/use-ignore-case": "error", - // RegExp - Stylistic Issues (less critical, focused on consistency) - "regexp/match-any": "warn", - "regexp/no-useless-escape": "warn", - "regexp/no-useless-non-capturing-group": "warn", - "regexp/prefer-character-class": "warn", - "regexp/prefer-d": "warn", - "regexp/prefer-plus-quantifier": "warn", - "regexp/prefer-question-quantifier": "warn", - "regexp/prefer-star-quantifier": "warn", - "regexp/prefer-unicode-codepoint-escapes": "warn", - "regexp/prefer-w": "warn", - "regexp/sort-flags": "warn" - }, - "overrides": [ - { - "files": [ - "server/**/*", - "cli/**/*", - "scripts/**/*", - "modules/**/*", - "app/components/OgImage/*" - ], - "rules": { - "no-console": "off" - } - } - ], - "ignorePatterns": [ - ".output/**", - ".data/**", - ".nuxt/**", - ".nitro/**", - ".cache/**", - "dist/**", - "node_modules/**", - "coverage/**", - "playwright-report/**", - "test-results/**" - ] -} diff --git a/README.md b/README.md index ca49a74f76..05efb54876 100644 --- a/README.md +++ b/README.md @@ -159,6 +159,7 @@ We welcome contributions – please do feel free to explore the project and - [npmx-weekly](https://npmx-weekly.trueberryless.org/) – A weekly newsletter for the npmx ecosystem. Add your own content via suggestions in the weekly PR on [GitHub](https://github.com/trueberryless-org/npmx-weekly/pulls?q=is%3Aopen+is%3Apr+label%3A%22%F0%9F%95%94+weekly+post%22). - [npmx-digest](https://npmx-digest.trueberryless.org/) – An automated news aggregation website that summarizes npmx activity from GitHub and Bluesky every 8 hours. - [npmx-redirect](https://github.com/iaverages/npmx-redirect) – Browser extension that automatically redirects npmjs.com URLs to npmx.dev. +- [npmx-badge](https://npmx-badge.vercel.app/) – A playground to help you create custom badges quickly. If you're building something cool, let us know! ๐Ÿ™ diff --git a/app/components/BaseCard.vue b/app/components/BaseCard.vue index ebe3e45120..2eb7f348bd 100644 --- a/app/components/BaseCard.vue +++ b/app/components/BaseCard.vue @@ -2,6 +2,7 @@ defineProps<{ /** Whether this is an exact match for the query */ isExactMatch?: boolean + selected?: boolean }>() @@ -10,6 +11,7 @@ defineProps<{ class="group bg-bg-subtle border border-border rounded-lg p-4 sm:p-6 transition-[border-color,background-color] duration-200 hover:(border-border-hover bg-bg-muted) cursor-pointer relative focus-within:outline-none focus-within:ring-2 focus-within:ring-offset-bg focus-within:ring-offset-2 focus-within:ring-fg/50 focus-within:bg-bg-muted focus-within:border-border-hover" :class="{ 'border-accent/30 contrast-more:border-accent/90 bg-accent/5': isExactMatch, + 'bg-fg-subtle/15!': selected, }" > diff --git a/app/components/ColumnPicker.vue b/app/components/ColumnPicker.vue index ef073cb40c..edf0a36688 100644 --- a/app/components/ColumnPicker.vue +++ b/app/components/ColumnPicker.vue @@ -54,6 +54,7 @@ const columnLabels = computed(() => ({ maintenanceScore: $t('filters.columns.maintenance_score'), combinedScore: $t('filters.columns.combined_score'), security: $t('filters.columns.security'), + selection: $t('filters.columns.selection'), })) function getColumnLabel(id: ColumnId): string { diff --git a/app/components/Compare/ComparisonGrid.vue b/app/components/Compare/ComparisonGrid.vue index 2bd210b632..325839c49c 100644 --- a/app/components/Compare/ComparisonGrid.vue +++ b/app/components/Compare/ComparisonGrid.vue @@ -1,7 +1,7 @@ + + + + diff --git a/app/components/Package/Card.vue b/app/components/Package/Card.vue index 6c601cde1f..04c676de39 100644 --- a/app/components/Package/Card.vue +++ b/app/components/Package/Card.vue @@ -16,6 +16,11 @@ const props = defineProps<{ searchQuery?: string }>() +const { isPackageSelected, togglePackageSelection, canSelectMore } = usePackageSelection() +const isSelected = computed(() => { + return isPackageSelected(props.result.package.name) +}) + const emit = defineEmits<{ clickKeyword: [keyword: string] }>() @@ -39,8 +44,8 @@ const numberFormatter = useNumberFormatter()