Skip to content

fix(ui): mobile command picker and DiscordEmbed label spacing#304

Draft
RedStar071 wants to merge 28 commits into
mainfrom
cursor/mobile-command-picker-embed-spacing-1354
Draft

fix(ui): mobile command picker and DiscordEmbed label spacing#304
RedStar071 wants to merge 28 commits into
mainfrom
cursor/mobile-command-picker-embed-spacing-1354

Conversation

@RedStar071

@RedStar071 RedStar071 commented Jul 18, 2026

Copy link
Copy Markdown
Member

🔗 Linked issue

N/A — UI polish from Discord mobile/embed screenshots.

🧭 Context

Two showcase regressions on /wolfstar:

  1. The slash-command picker on small viewports still used the desktop left rail instead of Discord mobile’s horizontal app bar under the list.
  2. Bold embed labels (Type, User, Reason, logging fields) jammed into their values because Vue’s whitespace condensation drops spaces between tags, and DiscordMention/DiscordRole are components rather than text nodes.

📚 Description

  • Command picker: desktop styles stay the default; Discord mobile layout (column + bottom rail, uppercase labels, pill input) is applied only below md via max-md: / md: — no inverted mobile-first base cascade.
  • DiscordEmbed spacing: unscoped strong::after space plus explicit template spaces so every embed caller keeps a gap before text and mention/role chips.
  • DiscordMention / DiscordRole: small leading margin so chip components don’t sit flush against prior text when whitespace is stripped.
  • Showcase templates + Nuxt SSR tests updated.

Mobile command picker
Embed label spacing
Desktop command picker

Test plan

  • Below md: list on top, horizontal app rail below, pill input + send
  • md+: original vertical left rail and desktop input tools
  • Embeds: space after Type/User/Reason and logging labels next to mentions
  • pnpm lint:fix, pnpm typecheck, pnpm build:test, pnpm test:unit, pnpm test:nuxt

To show artifacts inline, enable in settings.

Open in Web Open in Cursor 

View with Codesmith Autofix with Codesmith
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.

Confidence Score: 5/5

All changes are confined to Discord showcase UI components and their tests — no server routes, auth logic, or database access is touched.

The changes fix two purely cosmetic regressions (mobile command picker layout and embed label spacing) by adjusting CSS and Vue template whitespace. The new Discord chrome components follow the same patterns as existing ones. The formatSlashCommandDisplayName import removal is safe because Nuxt 4's shared/utils/ auto-import makes it available without an explicit import. Tests were updated to match the renamed component paths and new SSR behavior is covered.

No files require special attention. The unscoped style block in embed.vue is intentional and correctly scoped by the .discord-embed class selector.

Reviews (17): Last reviewed commit: "feat(discord): add mobile channel info a..." | Re-trigger Greptile

Context used:

  • Context used - CLAUDE.md (source)

cursoragent and others added 2 commits July 18, 2026 15:01
Match Discord mobile slash-command suggestions (horizontal app rail,
uppercase app labels, pill input) and restore gaps after bold embed
labels when values are DiscordMention/DiscordRole components.

Co-authored-by: RedStar <redstar071@proton.me>
@codspeed-hq

codspeed-hq Bot commented Jul 18, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 44 untouched benchmarks


Comparing cursor/mobile-command-picker-embed-spacing-1354 (5f879e7) with main (88743ca)

Open in CodSpeed

@codecov

codecov Bot commented Jul 18, 2026

Copy link
Copy Markdown

❌ 4 Tests Failed:

Tests completed Failed Passed Skipped
1507 4 1503 1
View the top 3 failed test(s) by shortest run time
test/nuxt/components/discord/string-select-menu.spec.ts > DiscordStringSelectMenu > closes when focus leaves the menu, so Tab is not trapped
Stack Traces | 0.214s run time
TypeError: Cannot read properties of null (reading 'insertBefore')
 ❯ insert node_modules/.pnpm/@vue+runtime-dom@3.5.38/node_modules/@.../runtime-dom/dist/runtime-dom.esm-bundler.js?v=9224b5b5:28:11
 ❯ processCommentNode node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5566:6
 ❯ patch node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5467:8
 ❯ patchBlockChildren node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5876:6
 ❯ Object.process node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:1083:8
 ❯ patch node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5515:15
 ❯ patchBlockChildren node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5876:6
 ❯ patchElement node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5794:6
 ❯ processElement node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5641:8
 ❯ patch node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5491:10
test/nuxt/components/discord/string-select-menu.spec.ts > DiscordStringSelectMenu > closes on Escape and returns focus to the trigger
Stack Traces | 0.298s run time
TypeError: Cannot read properties of null (reading 'insertBefore')
 ❯ insert node_modules/.pnpm/@vue+runtime-dom@3.5.38/node_modules/@.../runtime-dom/dist/runtime-dom.esm-bundler.js?v=9224b5b5:28:11
 ❯ processCommentNode node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5566:6
 ❯ patch node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5467:8
 ❯ patchBlockChildren node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5876:6
 ❯ Object.process node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:1083:8
 ❯ patch node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5515:15
 ❯ patchBlockChildren node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5876:6
 ❯ patchElement node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5794:6
 ❯ processElement node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5641:8
 ❯ patch node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5491:10
test/nuxt/components/discord/string-select-menu.spec.ts > DiscordStringSelectMenu > opens the listbox above the trigger by default (Discord near-composer behavior)
Stack Traces | 0.391s run time
TypeError: Cannot read properties of null (reading 'insertBefore')
 ❯ insert node_modules/.pnpm/@vue+runtime-dom@3.5.38/node_modules/@.../runtime-dom/dist/runtime-dom.esm-bundler.js?v=9224b5b5:28:11
 ❯ processCommentNode node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5566:6
 ❯ patch node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5467:8
 ❯ patchBlockChildren node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5876:6
 ❯ Object.process node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:1083:8
 ❯ patch node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5515:15
 ❯ patchBlockChildren node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5876:6
 ❯ patchElement node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5794:6
 ❯ processElement node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5641:8
 ❯ patch node_modules/.pnpm/@vue+runtime-core@3.5.38/node_modules/@.../runtime-core/dist/runtime-core.esm-bundler.js?v=9224b5b5:5491:10
test/nuxt/components/discord/scrollbar.spec.ts > DiscordScrollbar > exposes Discord floating-pill scrollbar tokens (positive)
Stack Traces | 0.421s run time
AssertionError: expected '' to be '5px' // Object.is equality

- Expected
+ Received

- 5px

 ❯ .../components/discord/scrollbar.spec.ts:84:76
 ❯ node_modules/.pnpm/@voidzero-dev+vite-plus-test@0.1.19_@opentelemetry+api@1.9.1_@types+node@24.12.4_@vites_65607070458e2ba991a6d34b5394cae6/node_modules/@voidzero-dev/vite-plus-test/dist/@vitest/runner/chunk-artifact.js?v=9224b5b5:1903:22

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

Also apply oxfmt class-order and template formatting tweaks.

Co-authored-by: RedStar <redstar071@proton.me>
@blacksmith-sh

This comment has been minimized.

cursoragent and others added 6 commits July 18, 2026 15:47
Use an unscoped strong::after rule and explicit template spaces so Type,
User, Reason, and logging fields keep a gap before text and mention chips.

Co-authored-by: RedStar <redstar071@proton.me>
Restore the original desktop styles as defaults and scope Discord mobile
layout/input tweaks to max-md instead of inverting the base cascade.

Co-authored-by: RedStar <redstar071@proton.me>
Stop rendering the WolfStar group under Frequently Used, surface Staryl's
first command in that slot instead, and size the picker to five visible rows.

Co-authored-by: RedStar <redstar071@proton.me>
Compose WolfStar CommandsShowcase as a Discord-like workspace (header,
welcome, chat, member list, message input) and cover it with SSR/a11y tests.
@blacksmith-sh

This comment has been minimized.

Move channel header/welcome under discord/channel/, rename MessageComposer
to chat-message-composer, and align the composer toolbar with Discord icons.
Group slash-command UI, shared types/utils, and tests under chat-input-command,
update auto-import names, and fix knip/composer SSR assertions that were failing CI.
Align header, composer, member list, slash picker, and string-select with
Discord desktop/mobile patterns, use Discord-true oklch chrome, wire
members toggle and support-server roster avatars, and simplify moderation
reply text in the marketing showcase.
Import Message bar / toolbar SVGs from the Discord assets Figma pack and
switch channel header plus composer attach controls to discord:* icons.
@blacksmith-sh

This comment has been minimized.

RedStar071 and others added 4 commits July 20, 2026 20:30
…ence

Align the mockup closer to Discord with a plain attach control, composed
slash chrome, short-channel welcome pinning, status icons, and SSR coverage.
…-picker-embed-spacing-1354

Co-authored-by: RedStar <redstar071@proton.me>
Satisfy the design-token guardrail for string-select hover and
CommandsShowcase SurfaceCard chrome without changing the colors.

Co-authored-by: RedStar <redstar071@proton.me>
Co-locate CSF stories for Discord mock UI (messages, embeds, chat input
commands, channel chrome, and Components V2), with shared fixtures and a
Discord dark chrome decorator for Chromatic snapshots.

Co-authored-by: RedStar <redstar071@proton.me>
@netlify

netlify Bot commented Jul 21, 2026

Copy link
Copy Markdown

Deploy Preview for wolfstar-rocks-et34281 failed.

Name Link
🔨 Latest commit 92e44d9
🔍 Latest deploy log https://app.netlify.com/projects/wolfstar-rocks-et34281/deploys/6a5f7bf2fa34070008a7cb72

cursoragent and others added 5 commits July 21, 2026 10:56
Vue's compiler could not resolve the auto-imported base type when
building chat-input-command stories; import it explicitly instead.

Co-authored-by: RedStar <redstar071@proton.me>
Use a transparent track with a 4px muted pill thumb everywhere (including
the command picker), and hide the chat scrollbar until hover or scroll.

Co-authored-by: RedStar <redstar071@proton.me>
…ed-spacing-1354' into cursor/mobile-command-picker-embed-spacing-1354
…ed-spacing-1354' into cursor/mobile-command-picker-embed-spacing-1354
Overlay the picker on the chat, clear messages while slash mode is
active (no short-channel scrollbar), and close the picker after execute
so the bot response is revealed like Discord.

Co-authored-by: RedStar <redstar071@proton.me>
Open Members/Media/Pins from the mobile channel title, flush composer/picker
layout, Esc/slash idle send chrome, and reply connector spacing — with Storybook
and Nuxt a11y/SSR coverage.
Add a Discord App Launcher, skyra-aligned embeds, upward select menus,
desktop mention avatars, and channel chrome fixes for closer Discord parity.
@greptile-apps

greptile-apps Bot commented Jul 21, 2026

Copy link
Copy Markdown

Too many files changed for review. (129 files found, 100 file limit)

Bypass the limit by tagging @greptile-apps to review.

@blacksmith-sh

This comment has been minimized.

Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com>
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.

2 participants