diff --git a/.github/workflows/autofix.yml b/.github/workflows/autofix.yml index 00b98ae8e7..34bc863fd5 100644 --- a/.github/workflows/autofix.yml +++ b/.github/workflows/autofix.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-24.04-arm steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index 72795a3b3c..b66bd886ae 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -20,7 +20,7 @@ jobs: steps: - name: โ˜‘๏ธ Checkout - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }} @@ -34,7 +34,7 @@ jobs: sfw: true - name: ๐Ÿงช Run Chromatic Visual and Accessibility Tests - uses: chromaui/action@94713c544284a14195de3b50ef24301579f1877e # v18.0.1 + uses: chromaui/action@14cfaef73576e69f95f47f60058063f46ca38719 # v18.1.0 with: buildCommand: vp run build-storybook outputDir: storybook-static diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 123cb48fc8..2ef968ad3a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-24.04-arm steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false @@ -46,7 +46,7 @@ jobs: runs-on: ubuntu-24.04-arm steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false @@ -64,7 +64,7 @@ jobs: runs-on: ubuntu-24.04-arm steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false @@ -103,7 +103,7 @@ jobs: runs-on: ubuntu-24.04-arm steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false @@ -144,16 +144,23 @@ jobs: name: ๐Ÿ–ฅ๏ธ Browser tests runs-on: ubuntu-24.04-arm container: - image: mcr.microsoft.com/playwright:v1.61.1-noble@sha256:5b8f294aff9041b7191c34a4bab3ac270157a28774d4b0660e9743297b697e48 + image: mcr.microsoft.com/playwright:v1.62.1-noble@sha256:dcc5531e97840b9b5e794f2814476b21571c5124a3fca2267d73041f56e7580e steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: ๐Ÿ‘‘ Fix Git ownership run: git config --global --add safe.directory /__w/npmx.dev/npmx.dev + # Required to build better-sqlite3 for docs presumably because of the + # use of the playwright container. We should remove this if we stop having + # to build better-sqlite3 and the prebuilt binary starts working. + - name: ๐Ÿšง Install build tools + run: apt-get update && apt-get install --yes build-essential + shell: bash + - uses: voidzero-dev/setup-vp@250f29ce396baf5e8f24498e17c0dfdebabc26eb # v1.15.0 with: node-version: lts/* @@ -188,7 +195,7 @@ jobs: mode: [dark, light] steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false @@ -212,7 +219,7 @@ jobs: runs-on: ubuntu-24.04-arm steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false @@ -230,7 +237,7 @@ jobs: runs-on: ubuntu-24.04-arm steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false diff --git a/.github/workflows/dependency-diff.yml b/.github/workflows/dependency-diff.yml index bd64e8ba7d..4a04d8766a 100644 --- a/.github/workflows/dependency-diff.yml +++ b/.github/workflows/dependency-diff.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-slim steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 persist-credentials: false diff --git a/.github/workflows/deploy-canary.yml b/.github/workflows/deploy-canary.yml index 679a918fa7..54099c4943 100644 --- a/.github/workflows/deploy-canary.yml +++ b/.github/workflows/deploy-canary.yml @@ -17,7 +17,7 @@ jobs: name: ๐Ÿš€ Deploy to canary (main.npmx.dev) runs-on: ubuntu-24.04-arm steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false fetch-depth: 2 diff --git a/.github/workflows/lunaria.yml b/.github/workflows/lunaria.yml index 8ef40235c4..bbca2f3f86 100644 --- a/.github/workflows/lunaria.yml +++ b/.github/workflows/lunaria.yml @@ -22,7 +22,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: # Necessary for Lunaria to work properly # Makes the action clone the entire git history diff --git a/.github/workflows/mirror-tangled.yml b/.github/workflows/mirror-tangled.yml index 2e6e083e6b..cfabd9ea83 100644 --- a/.github/workflows/mirror-tangled.yml +++ b/.github/workflows/mirror-tangled.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-24.04-arm steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 persist-credentials: false diff --git a/.github/workflows/release-pr.yml b/.github/workflows/release-pr.yml index f208d99a52..94ad0eed38 100644 --- a/.github/workflows/release-pr.yml +++ b/.github/workflows/release-pr.yml @@ -21,7 +21,7 @@ jobs: pull-requests: write # create or update the release pull request steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 persist-credentials: false diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml index e9690fbc82..3d6a17d8e6 100644 --- a/.github/workflows/release-tag.yml +++ b/.github/workflows/release-tag.yml @@ -23,7 +23,7 @@ jobs: skipped: ${{ steps.check.outputs.skip }} steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 persist-credentials: true @@ -100,7 +100,7 @@ jobs: environment: npm-publish steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: release persist-credentials: false diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 82e13a418c..a02e7eea3e 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -19,7 +19,7 @@ jobs: permissions: issues: write # mark and close stale bug issues steps: - - uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0 + - uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11.0.0 with: days-before-issue-stale: 30 days-before-issue-close: 7 @@ -37,7 +37,7 @@ jobs: permissions: pull-requests: write # mark and close stale pull requests steps: - - uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0 + - uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11.0.0 with: days-before-issue-stale: -1 days-before-issue-close: -1 diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml index 55d7a59ab0..6135e3efbe 100644 --- a/.github/workflows/zizmor.yml +++ b/.github/workflows/zizmor.yml @@ -26,11 +26,11 @@ jobs: contents: read # checkout repository steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - - uses: zizmorcore/zizmor-action@192e21d79ab29983730a13d1382995c2307fbcaa # v0.5.7 + - uses: zizmorcore/zizmor-action@3dc1ecc9bcb9e94e9b2c709687979e1298497054 # v0.6.2 with: persona: pedantic # Use annotations instead of SARIF as this doesn't need special permissions diff --git a/.storybook/main.ts b/.storybook/main.ts index e7f7270185..98ce1928ed 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -13,6 +13,7 @@ const config = { '@storybook/addon-docs', '@storybook/addon-themes', 'storybook-i18n', + 'msw-storybook-addon', ], framework: '@storybook-vue/nuxt', staticDirs: ['./.public', { from: '../public', to: '/' }], diff --git a/.storybook/preview.ts b/.storybook/preview.ts index e64a50168e..9d545ea267 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -4,12 +4,10 @@ import { addons } from 'storybook/preview-api' import { currentLocales } from '../config/i18n' import { fn } from 'storybook/test' import { ACCENT_COLORS } from '../shared/utils/constants' -import { initialize, mswLoader } from 'msw-storybook-addon' +import { mswLoader } from 'msw-storybook-addon/csf3' import npmxDark from './theme' -initialize() - // @ts-expect-error - dynamic global name globalThis.defineOgImage = fn() @@ -95,7 +93,7 @@ const preview: Preview = { } }, ], - loaders: [mswLoader], + loaders: [mswLoader()], } export default preview diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 237d15a28d..e153c57fde 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -706,9 +706,7 @@ import { MyComponent } from '#components' describe('MyComponent', () => { it('should have no accessibility violations', async () => { const component = await mountSuspended(MyComponent, { - props: { - /* required props */ - }, + props: {/* required props */}, }) const results = await runAxe(component) expect(results.violations).toEqual([]) diff --git a/app/assets/logos/sponsors/index.ts b/app/assets/logos/sponsors/index.ts index 6a4347eeee..de52c48609 100644 --- a/app/assets/logos/sponsors/index.ts +++ b/app/assets/logos/sponsors/index.ts @@ -40,7 +40,7 @@ export const SPONSORS = { light: LogoCodeRabbitLight, }, normalisingIndent: '0.875rem', - url: 'https://www.coderabbit.ai', + url: 'https://coderabbit.link/npmx', }, ], silver: [ diff --git a/app/assets/main.css b/app/assets/main.css index 1735c87de6..e824da64da 100644 --- a/app/assets/main.css +++ b/app/assets/main.css @@ -15,13 +15,14 @@ /* text colors */ --fg: oklch(0.982 0 0); - --fg-muted: oklch(0.749 0 0); - --fg-subtle: oklch(0.673 0 0); + --fg-muted: oklch(0.849 0 0); + --fg-subtle: oklch(0.773 0 0); /* border, separator colors */ --border: oklch(0.269 0 0); --border-subtle: oklch(0.239 0 0); --border-hover: oklch(0.371 0 0); + --border-elevated: oklch(0.369 0 0); /* accent color, set by user from settings */ --accent: var(--accent-color, oklch(0.787 0.128 230.318)); @@ -81,19 +82,38 @@ --bg-elevated: oklch(0.264 0 0); } +:root[data-theme='dark'][data-fg-theme='contrast'] { + --fg: oklch(1 0 0); + --fg-muted: oklch(0.95 0 0); + --fg-subtle: oklch(0.9 0 0); +} + +:root[data-theme='dark'][data-fg-theme='standard'] { + --fg: oklch(0.982 0 0); + --fg-muted: oklch(0.849 0 0); + --fg-subtle: oklch(0.773 0 0); +} + +:root[data-theme='dark'][data-fg-theme='muted'] { + --fg: oklch(0.969 0 0); + --fg-muted: oklch(0.749 0 0); + --fg-subtle: oklch(0.673 0 0); +} + :root[data-theme='light'] { --bg: var(--bg-color, oklch(1 0 0)); --bg-subtle: var(--bg-subtle-color, oklch(0.979 0.001 286.375)); --bg-muted: var(--bg-muted-color, oklch(0.955 0.001 286.76)); --bg-elevated: var(--bg-elevated-color, oklch(0.94 0.002 287.29)); - --fg: oklch(0.146 0 0); - --fg-muted: oklch(0.398 0 0); - --fg-subtle: oklch(0.48 0 0); + --fg: oklch(0.046 0 0); + --fg-muted: oklch(0.198 0 0); + --fg-subtle: oklch(0.28 0 0); --border: oklch(0.8514 0 0); --border-subtle: oklch(0.922 0 0); --border-hover: oklch(0.715 0 0); + --border-elevated: oklch(0.75 0 0); --accent: var(--accent-color, oklch(0.5 0.16 247.27)); --accent-muted: var(--accent-color, oklch(0.205 0 0)); @@ -147,29 +167,49 @@ --bg-subtle: var(--bg-subtle-color, oklch(0.979 0 0)); } +:root[data-theme='light'][data-fg-theme='contrast'] { + --fg: oklch(0 0 0); + --fg-muted: oklch(0.1 0 0); + --fg-subtle: oklch(0.2 0 0); +} + +:root[data-theme='light'][data-fg-theme='standard'] { + --fg: oklch(0.046 0 0); + --fg-muted: oklch(0.198 0 0); + --fg-subtle: oklch(0.28 0 0); +} + +:root[data-theme='light'][data-fg-theme='muted'] { + --fg: oklch(0.146 0 0); + --fg-muted: oklch(0.398 0 0); + --fg-subtle: oklch(0.48 0 0); +} + @media (prefers-contrast: more) { :root[data-theme='dark'] { /* text colors */ --fg: oklch(1 0 0); - --fg-muted: oklch(0.769 0 0); - --fg-subtle: oklch(0.693 0 0); + --fg-muted: oklch(0.869 0 0); + --fg-subtle: oklch(0.793 0 0); /* border, separator colors */ --border: oklch(0.769 0 0); --border-subtle: oklch(0.739 0 0); --border-hover: oklch(0.771 0 0); + --border-elevated: oklch(0.869 0 0); } :root[data-theme='light'] { /* text colors */ --fg: oklch(0 0 0); - --fg-muted: oklch(0.329 0 0); - --fg-subtle: oklch(0.4 0 0); + --fg-muted: oklch(0.229 0 0); + --fg-subtle: oklch(0.3 0 0); /* border, separator colors */ --border: oklch(0.3514 0 0); --border-subtle: oklch(0.422 0 0); --border-hover: oklch(0.315 0 0); + --border-elevated: oklch(0.25 0 0); } } diff --git a/app/components/Brand/Customize.vue b/app/components/Brand/Customize.vue index 083f3dfb1b..98d54cb8dd 100644 --- a/app/components/Brand/Customize.vue +++ b/app/components/Brand/Customize.vue @@ -82,9 +82,9 @@ async function downloadCustomPng() { const img = new Image() const loaded = new Promise((resolve, reject) => { - // oxlint-disable-next-line eslint-plugin-unicorn(prefer-add-event-listener) + // oxlint-disable-next-line unicorn/prefer-add-event-listener img.onload = () => resolve() - // oxlint-disable-next-line eslint-plugin-unicorn(prefer-add-event-listener) + // oxlint-disable-next-line unicorn/prefer-add-event-listener img.onerror = () => reject(new Error('Failed to load custom SVG')) }) img.src = url diff --git a/app/components/Button/Base.vue b/app/components/Button/Base.vue index 1a321e888d..be7926289c 100644 --- a/app/components/Button/Base.vue +++ b/app/components/Button/Base.vue @@ -48,7 +48,7 @@ defineExpose({