Container/Presentation Component
Use this skill to create a React component under src/components that follows the Container/Presentation pattern.
Refer to this skill's bundled references for detailed rules.
references/component-architecture.mdreferences/typescript-and-scss-rules.md
If the /react-container-presentation-component input is incomplete, ask questions first before creating files.
When To Use
- When the user runs
/react-container-presentation-component - When the user explicitly asks for a React component that follows the Container/Presentation pattern
- When the user wants help deciding or implementing
uivsfeaturesclassification within the Container/Presentation pattern
Required Questions
If any of the following information is missing, ask the user using ask_user.
- Component name
- Type (
uiorfeatures) - Whether to replace existing components (only when creating
ui)
Question requirements:
- Provide the type as options (
ui,features) - Require the component name to be in PascalCase
- For
ui, ask whether direct usage of Mantine or other UI libraries in existingfeaturesshould be replaced with the new component
Procedure
- Check existing components
- Check whether
src/components/ui/<ComponentName>orsrc/components/features/<ComponentName>already exists. - If it exists, do not overwrite; confirm the preferred approach with the user.
- Decide target directory
ui:src/components/ui/<ComponentName>features:src/components/features/<ComponentName>
- Re-check classification (only when
uiis specified)
- Even when
uiis specified, before creating files, reviewReclassification Ruleinreferences/component-architecture.md. - If the implementation includes state management, side effects, async processing, context/store updates, or business logic, treat it as
features. - If the result is closer to
features, do not proceed asui; useask_userand confirm one of the following before continuing.Create as featuresKeep ui and move state/logic to parent or features
- Create required files
ui:index.tsx,index.module.scss,index.stories.tsxfeatures:index.tsx,use<ComponentName>.tsx,presentation.tsx,types.ts,presentation.module.scss,presentation.stories.tsx
- Replace existing usages (only when creating
ui)
- Only when the user approves, replace equivalent direct implementations using Mantine or other UI libraries in existing
featureswith the newuicomponent.
- Validate
- Run build and lint commands, and ensure both pass; if issues are introduced by newly added or updated files, fix them.
- Follow
Storybook Minimuminreferences/component-architecture.mdfor story state decisions. - Ask the user via
ask_userwhether to run a Storybook check (for example: "Run" / "Skip for now"). - Run
npm run storybookonly if the user selects "Run". - If the user selects "Skip for now", explicitly mention in the final report that Storybook execution was skipped.
Output Contract
- Report the list of files created.
- If replacements were performed, report the list of changed files and replacement details.
- Provide one usage example of the created component.
- Report whether Storybook verification was executed (run/skip), and if run, include the command used.
- Explain why the component was classified as
uiorfeatures. - Summarize where state, side effects, and rendering responsibilities were placed.
- Confirm whether there were any dependency direction violations.
- Clearly state any unresolved items.