feat: Detailed code component for longer code examples#3236
feat: Detailed code component for longer code examples#3236
Conversation
|
View your CI Pipeline Execution ↗ for commit da8b65f ☁️ Nx Cloud last updated this comment at |
LinKCoding
left a comment
There was a problem hiding this comment.
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, |
There was a problem hiding this comment.
consider defaulting to tsx
| '& > div': { | ||
| borderRadius: 'none', | ||
| padding: 0, | ||
| }, |
There was a problem hiding this comment.
It seems like this could be omitted and the .docblock-source could get a borderRadius: 'none'
packages/styleguide/src/lib/Organisms/ConnectedForm/ConnectedForm/codeExample.ts
Outdated
Show resolved
Hide resolved
| <Rotation height={16} rotated={isExpanded} width={16}> | ||
| <MiniChevronDownIcon aria-hidden size={16} /> | ||
| </Rotation> |
There was a problem hiding this comment.
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': { |
There was a problem hiding this comment.
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.
|
LinKCoding
left a comment
There was a problem hiding this comment.
I really like the changes! Adding some notes for us to disc :)
packages/styleguide/.storybook/components/Elements/DetailedCode/elements.tsx
Outdated
Show resolved
Hide resolved
packages/styleguide/.storybook/components/Elements/DetailedCode/elements.tsx
Outdated
Show resolved
Hide resolved
packages/styleguide/.storybook/components/Elements/DetailedCode/elements.tsx
Outdated
Show resolved
Hide resolved
packages/styleguide/.storybook/components/Elements/DetailedCode/elements.tsx
Outdated
Show resolved
Hide resolved
packages/styleguide/.storybook/components/Elements/DetailedCode/elements.tsx
Outdated
Show resolved
Hide resolved
packages/styleguide/.storybook/components/Elements/DetailedCode/DetailedCodeBody/index.tsx
Outdated
Show resolved
Hide resolved
|
📬 Published Alpha Packages: |
|
🚀 Styleguide deploy preview ready! Preview URL: https://69b9ee5dc6f5b8274cf0fd07--gamut-preview.netlify.app |
There was a problem hiding this comment.
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) underpackages/styleguide/.storybook/components/Elements/DetailedCode. - Exposes
DetailedCodevia the styleguide Storybook components barrel export. - Updates
ConnectedForm.mdxto useDetailedCodeand moves the long example into a separateexample.tsstring 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. |
| /* Color to match the text color in the Source component */ | ||
| textColor: '#C9CDCF', |
There was a problem hiding this comment.
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.
| /* Color to match the text color in the Source component */ | |
| textColor: '#C9CDCF', | |
| /* Use semantic text color to match the Source component */ | |
| textColor: 'text-secondary', |
| <Source code={code} dark language={language} /> | ||
| {showEllipses && ( | ||
| <FloatingIndicator aria-label="More code below"> | ||
| ...{codeLines} more lines |
There was a problem hiding this comment.
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.
| ...{codeLines} more lines | |
| ...{codeLines} lines total |
| export const example = `import { | ||
| ConnectedCheckbox, | ||
| ConnectedInput, | ||
| ConnectedSelect, |
There was a problem hiding this comment.
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).
| ConnectedSelect, | |
| ConnectedSelect, | |
| SubmitButton, |
Overview
Adds an internal detailed code component for code examples that run longer.
PR Checklist
Testing Instructions
Don't make me tap the sign.
/?path=/docs/organisms-connectedform-connectedform--docs#example-codePR Links and Envs