Skip to content

feat: Detailed code component for longer code examples#3236

Open
nhivpham wants to merge 16 commits intomainfrom
np-gmt-257
Open

feat: Detailed code component for longer code examples#3236
nhivpham wants to merge 16 commits intomainfrom
np-gmt-257

Conversation

@nhivpham
Copy link
Contributor

@nhivpham nhivpham commented Jan 20, 2026

Overview

Adds an internal detailed code component for code examples that run longer.

PR Checklist

  • Related to designs:
  • Related to JIRA ticket: GMT-257
  • I have run this code to verify it works
  • This PR includes unit tests for the code change
  • This PR includes testing instructions tests for the code change
  • The alpha package of this PR is passing end-to-end tests in all relevant Codecademy repositories

Testing Instructions

Don't make me tap the sign.

  1. Go to /?path=/docs/organisms-connectedform-connectedform--docs#example-code
  2. View example code preview
  3. Click on code drop down
  4. Close code drop down
  5. Finish and do a celebratory dance

PR Links and Envs

Repository PR Link
Monolith Monolith PR
Mono Mono PR

@nhivpham nhivpham requested a review from a team as a code owner January 20, 2026 18:34
@nhivpham nhivpham marked this pull request as draft January 20, 2026 18:35
@nx-cloud
Copy link

nx-cloud bot commented Jan 20, 2026

View your CI Pipeline Execution ↗ for commit da8b65f


☁️ Nx Cloud last updated this comment at 2026-03-18 00:11:48 UTC

Copy link
Contributor

@LinKCoding LinKCoding left a comment

Choose a reason for hiding this comment

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

I really like what you've done!

I've added some notes to polish up the PR, but would love to hear your thoughts :)
Thanks for taking this on!

export const DetailedCodeButton: React.FC<DetailedCodeButtonProps> = ({
heading,
isExpanded,
language,
Copy link
Contributor

Choose a reason for hiding this comment

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

consider defaulting to tsx

Comment on lines +30 to +33
'& > div': {
borderRadius: 'none',
padding: 0,
},
Copy link
Contributor

Choose a reason for hiding this comment

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

It seems like this could be omitted and the .docblock-source could get a borderRadius: 'none'

Comment on lines +62 to +64
<Rotation height={16} rotated={isExpanded} width={16}>
<MiniChevronDownIcon aria-hidden size={16} />
</Rotation>
Copy link
Contributor

Choose a reason for hiding this comment

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

It feels like we should have something more overt to indicate that this button will "show more code"

Or that there is more code to display.

My first thought is to have something shown right under the code snippet that is a TextButton that has ... show more code" that also has the same handleClick`

but would want to hear your thoughts

borderRadius: 'none',
padding: 0,
},
'& .docblock-source': {
Copy link
Contributor

Choose a reason for hiding this comment

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

I also did some styling testing and it seems like targeting the .docblock-source is the most consistent want to apply the styling :\ so that seems to be just the way to do it.

but I think it warrants adding a note for why it has to be done this way.

@codecov
Copy link

codecov bot commented Feb 3, 2026

⚠️ JUnit XML file not found

The CLI was unable to find any JUnit XML files to upload.
For more help, visit our troubleshooting guide.

@nhivpham nhivpham marked this pull request as ready for review March 16, 2026 16:09
@nhivpham nhivpham requested a review from LinKCoding March 17, 2026 17:16
Copy link
Contributor

@LinKCoding LinKCoding left a comment

Choose a reason for hiding this comment

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

I really like the changes! Adding some notes for us to disc :)

@codecademydev
Copy link
Collaborator

📬 Published Alpha Packages:

@codecademy/[email protected]

@github-actions
Copy link
Contributor

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds a new internal DetailedCode Storybook/docs component to better display long code examples with a collapsed “preview” and an expand/collapse control, and migrates the ConnectedForm docs’ large example into this component.

Changes:

  • Introduces DetailedCode (wrapper + body + toggle button) under packages/styleguide/.storybook/components/Elements/DetailedCode.
  • Exposes DetailedCode via the styleguide Storybook components barrel export.
  • Updates ConnectedForm.mdx to use DetailedCode and moves the long example into a separate example.ts string export.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
packages/styleguide/src/lib/Organisms/ConnectedForm/ConnectedForm/example.ts Adds extracted long-form example code as a string for reuse in docs.
packages/styleguide/src/lib/Organisms/ConnectedForm/ConnectedForm/ConnectedForm.mdx Replaces inline fenced code block with the new <DetailedCode /> component.
packages/styleguide/.storybook/components/index.tsx Re-exports DetailedCode for use in MDX docs (~styleguide/blocks).
packages/styleguide/.storybook/components/Elements/DetailedCode/types.ts Defines prop types for DetailedCode and its subcomponents.
packages/styleguide/.storybook/components/Elements/DetailedCode/index.tsx Implements preview/expand logic and composes body + toggle.
packages/styleguide/.storybook/components/Elements/DetailedCode/elements.tsx Adds styled wrappers and the floating “more lines” indicator styling.
packages/styleguide/.storybook/components/Elements/DetailedCode/DetailedCodeButton/index.tsx Adds the expand/collapse control UI.
packages/styleguide/.storybook/components/Elements/DetailedCode/DetailedCodeBody/index.tsx Renders Storybook Source and the truncated-code indicator.

Comment on lines +42 to +43
/* Color to match the text color in the Source component */
textColor: '#C9CDCF',
Copy link

Copilot AI Mar 23, 2026

Choose a reason for hiding this comment

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

FloatingIndicator uses a hardcoded hex value for textColor (#C9CDCF). Please switch this to an existing Gamut token/semantic color so it stays theme-consistent and avoids hardcoded colors.

Suggested change
/* Color to match the text color in the Source component */
textColor: '#C9CDCF',
/* Use semantic text color to match the Source component */
textColor: 'text-secondary',

Copilot uses AI. Check for mistakes.
<Source code={code} dark language={language} />
{showEllipses && (
<FloatingIndicator aria-label="More code below">
...{codeLines} more lines
Copy link

Copilot AI Mar 23, 2026

Choose a reason for hiding this comment

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

The floating indicator text uses codeLines (total lines) in ...{codeLines} more lines, but when previewing a snippet the value should represent remaining hidden lines (e.g., total - previewLines). As-is, the UI will over-report how many lines are hidden.

Suggested change
...{codeLines} more lines
...{codeLines} lines total

Copilot uses AI. Check for mistakes.
export const example = `import {
ConnectedCheckbox,
ConnectedInput,
ConnectedSelect,
Copy link

Copilot AI Mar 23, 2026

Choose a reason for hiding this comment

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

This code example references <SubmitButton> later, but the import block in the snippet doesn't include it. Since this is intended to be copy/pastable example code, please add SubmitButton to the @codecademy/gamut import list (or remove the usage).

Suggested change
ConnectedSelect,
ConnectedSelect,
SubmitButton,

Copilot uses AI. Check for mistakes.
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.

4 participants