Skip to content

feat: noodles#2421

Merged
alexdln merged 10 commits intonpmx-dev:mainfrom
alexdln:feat/noodles
Apr 8, 2026
Merged

feat: noodles#2421
alexdln merged 10 commits intonpmx-dev:mainfrom
alexdln:feat/noodles

Conversation

@alexdln
Copy link
Copy Markdown
Member

@alexdln alexdln commented Apr 8, 2026

🔗 Linked issue

Resolved #2417

🧭 Context

Infrastructure for custom noodles and a new one (artemis)

@vercel
Copy link
Copy Markdown

vercel bot commented Apr 8, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
npmx.dev Error Error Apr 8, 2026 4:14pm
2 Skipped Deployments
Project Deployment Actions Updated (UTC)
docs.npmx.dev Ignored Ignored Apr 8, 2026 4:14pm
npmx-lunaria Ignored Ignored Apr 8, 2026 4:14pm

Request Review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 8, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a theme-aware image component app/components/ColorScheme/Img.vue. Removes app/components/LandingLogo.vue and introduces app/components/Landing/IntroHeader.vue, which selects and exposes permanent or active "noodle" logos based on URL query or date/timezone logic. Adds noodle components app/components/Noodle/Kawaii/Logo.vue and app/components/Noodle/Artemis/Logo.vue and a noodle registry/type in app/components/Noodle/index.ts. Updates app/pages/index.vue to use the new header. Tests updated: accessibility suite now targets LandingIntroHeader and includes noodle logo audits; ColorScheme/Img.vue added to the test skip list.

Possibly related PRs

Suggested labels

front, a11y

Suggested reviewers

  • danielroe
  • userquin
🚥 Pre-merge checks | ✅ 1
✅ Passed checks (1 passed)
Check name Status Explanation
Description check ✅ Passed The PR description clearly references a linked issue (#2417) and provides context about infrastructure for custom noodles and a new artemis noodle, which aligns with the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (1)
app/components/Landing/IntroHeader.vue (1)

24-29: Consider validating the parsed JSON structure.

The JSON.parse calls cast directly to Noodle[] without runtime validation. If the data attributes are malformed or tampered with, this could cause runtime errors when accessing properties like noodle.key or noodle.tagline. As per coding guidelines for type-safe code, consider adding basic validation or using a schema validator.

Example validation
let permanentNoodles: Noodle[] | undefined
try {
  const parsed = JSON.parse(el.dataset.permanentNoodles as string)
  if (Array.isArray(parsed) && parsed.every(n => typeof n.key === 'string')) {
    permanentNoodles = parsed
  }
} catch {
  return
}
if (!permanentNoodles) return

Also applies to: 49-54


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 663cc158-2e53-4ee7-a43b-72435bbde6af

📥 Commits

Reviewing files that changed from the base of the PR and between 526c5db and 895b87b.

⛔ Files ignored due to path filters (4)
  • public/extra/moon-dark.png is excluded by !**/*.png
  • public/extra/moon-light.png is excluded by !**/*.png
  • public/extra/npmx-dark-artemis.svg is excluded by !**/*.svg
  • public/extra/npmx-light-artemis.svg is excluded by !**/*.svg
📒 Files selected for processing (8)
  • app/components/ColorScheme/Img.vue
  • app/components/Landing/IntroHeader.vue
  • app/components/LandingLogo.vue
  • app/components/Noodle/Artemis/Logo.vue
  • app/components/Noodle/Kawaii/Logo.vue
  • app/components/Noodle/Tkawaii/Logo.vue
  • app/components/Noodle/index.ts
  • app/pages/index.vue
💤 Files with no reviewable changes (1)
  • app/components/LandingLogo.vue

Copy link
Copy Markdown
Member

@serhalp serhalp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🍝🍝🍝

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
test/nuxt/a11y.spec.ts (1)

363-381: Differentiate test descriptions for clarity.

All three tests within the Noodles describe block have identical descriptions: 'should have no accessibility violations'. When a test fails, this makes it difficult to identify which component is affected without inspecting line numbers.

Additionally, the test at lines 376–380 references NoodleTkawaiiLogo, which is not exported (see above).

♻️ Suggested fix
   describe('Noodles', () => {
-    it('should have no accessibility violations', async () => {
+    it('NoodleKawaiiLogo should have no accessibility violations', async () => {
       const component = await mountSuspended(NoodleKawaiiLogo)
       const results = await runAxe(component)
       expect(results.violations).toEqual([])
     })

-    it('should have no accessibility violations', async () => {
+    it('NoodleArtemisLogo should have no accessibility violations', async () => {
       const component = await mountSuspended(NoodleArtemisLogo)
       const results = await runAxe(component)
       expect(results.violations).toEqual([])
     })
-    
-    it('should have no accessibility violations', async () => {
-      const component = await mountSuspended(NoodleTkawaiiLogo)
-      const results = await runAxe(component)
-      expect(results.violations).toEqual([])
-    })
+    // Remove or uncomment once NoodleTkawaiiLogo is exported
   })

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 228e461b-e8dc-4790-9b04-ad3c20bda2e7

📥 Commits

Reviewing files that changed from the base of the PR and between a4e310e and 565e2ab.

📒 Files selected for processing (2)
  • test/nuxt/a11y.spec.ts
  • test/unit/a11y-component-coverage.spec.ts

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
test/nuxt/a11y.spec.ts (1)

362-374: Disambiguate duplicated test titles in the Noodles suite.

Line 363 and Line 369 currently share the same test name, which makes CI failures harder to trace to a specific logo.

♻️ Suggested tweak
 describe('Noodles', () => {
-  it('should have no accessibility violations', async () => {
+  it('should have no accessibility violations for NoodleKawaiiLogo', async () => {
     const component = await mountSuspended(NoodleKawaiiLogo)
     const results = await runAxe(component)
     expect(results.violations).toEqual([])
   })

-  it('should have no accessibility violations', async () => {
+  it('should have no accessibility violations for NoodleArtemisLogo', async () => {
     const component = await mountSuspended(NoodleArtemisLogo)
     const results = await runAxe(component)
     expect(results.violations).toEqual([])
   })
 })

As per coding guidelines: "Use clear, descriptive variable and function names".


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 0bc01e34-c6c8-4ec7-abb8-f9b72a523169

📥 Commits

Reviewing files that changed from the base of the PR and between f1430a1 and 286d648.

📒 Files selected for processing (3)
  • app/components/Landing/IntroHeader.vue
  • app/components/Noodle/Artemis/Logo.vue
  • test/nuxt/a11y.spec.ts
✅ Files skipped from review due to trivial changes (1)
  • app/components/Noodle/Artemis/Logo.vue
🚧 Files skipped from review as they are similar to previous changes (1)
  • app/components/Landing/IntroHeader.vue

@codecov
Copy link
Copy Markdown

codecov bot commented Apr 8, 2026

Codecov Report

❌ Patch coverage is 95.45455% with 1 line in your changes missing coverage. Please review.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
app/pages/index.vue 0.00% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@alexdln alexdln added this pull request to the merge queue Apr 8, 2026
Merged via the queue into npmx-dev:main with commit ed72177 Apr 8, 2026
20 checks passed
@alexdln alexdln deleted the feat/noodles branch April 8, 2026 16:13
@github-actions github-actions bot mentioned this pull request Apr 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

npmx noodles

2 participants