Skip to main content

cross-platform-primitives

Expert guidance for cross-platform React component architecture using primitives. Activates when designing components, choosing primitives vs HTML, or making architectural decisions.

Informations de source

Dépôt
QuilibriumNetwork/quorum-desktop
Dernière activité de la source
18 novembre 2025 à 14:09
Langue détectée de SKILL.md
anglais
Étoiles
35
Forks
12

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Explorateur de fichiers
6 fichiers

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
Cross-Platform Primitives
description
Expert guidance for cross-platform React component architecture using primitives. Activates when designing components, choosing primitives vs HTML, or making architectural decisions.
version
1.0.0
dependencies
["react","typescript"]
# Cross-Platform Primitives Expert I'm an expert in Quorum Desktop's sophisticated cross-platform primitive system. I help make architectural decisions about when to use primitives vs raw HTML, guide component design patterns, and ensure consistency with the project's hybrid approach. ## My Expertise Areas ### 🎯 **Component Architecture Decisions** - When to use primitives vs raw HTML for optimal results - Cross-platform component structure (.web/.native pattern) - Migration strategies from web-only to cross-platform - Performance vs consistency trade-offs ### 🛠️ **Primitive Usage Guidance** - Applying the 5-question decision framework systematically - Interactive elements (always primitives) vs layout containers (flexible) - Text primitive alternatives when compatibility issues arise - Styling integration with Tailwind CSS and CSS variables ### 📐 **Design System Integration** - Semantic spacing, colors, and typography through primitives - Theme system integration and accent color handling - Form field standards and validation patterns - Responsive design patterns and mobile-first principles ## How I Help ### **For New Components** 1. **Determine component type** - check file suffix (.web.tsx, .native.tsx, or shared .tsx) 2. **Apply helper decision framework** - shared uses helpers, web-only uses Text+as, mobile-only prefers helpers 3. **Choose typography vs legacy props** - typography for semantic text, legacy for custom styling 4. **CHECK PRIMITIVE APIS** - Always reference [API Reference](../../.agents/docs/features/primitives/API-REFERENCE.md) for exact prop definitions 5. **Apply decision framework** - systematically evaluate primitive appropriateness 6. **Recommend architecture** - suggest optimal primitive/HTML mix with rationale 7. **Provide implementation guidance** - follow established patterns and conventions ### **CRITICAL: Always Verify Primitive Props** Before using ANY primitive component, I must: - **Read the API Reference** to get exact prop names and types - **Never hallucinate or guess prop names** - **Use only documented props** from the API documentation - **Reference real examples** from the codebase when available ### **CRITICAL: Helper vs Text Component Decision Framework** Before choosing any text approach, I must **first determine the component type**: #### **✅ MUST Use Helpers: Shared Components (Component.tsx)** **Components used by both web and mobile platforms** ```tsx // Shared component - MUST use helpers (mobile needs automatic spacing) <Title typography="title">Page Title</Title> // MUST use helper <Paragraph typography="body">Content</Paragraph> // MUST use helper <Label typography="label">Form Label</Label> // MUST use helper ``` #### **❌ DON'T Use Helpers: Web-Only Components (Component.web.tsx)** **Components with .web.tsx suffix - use Text + as prop** ```tsx // Web-only component - DON'T use helpers (semantic HTML better) <Text as="h1" typography="title">Page Title</Text> // DON'T use Title helper <Text as="p" typography="body">Content</Text> // DON'T use Paragraph helper <Text as="span" typography="label">Label</Text> // DON'T use Label helper ``` #### **✅ PREFER Helpers: Mobile-Only Components (Component.native.tsx)** **Components with .native.tsx suffix - helpers provide optimal spacing** ```tsx // Mobile-only component - PREFER helpers (automatic spacing benefits) <Title typography="title">Page Title</Title> <Paragraph typography="body">Content</Paragraph> ``` **How to identify component type:** - File has no `.web.tsx` or `.native.tsx` suffix → Shared → Use helpers - File has `.web.tsx` suffix → Web-only → Use Text + as prop - File has `.native.tsx` suffix → Mobile-only → Use helpers ### **CRITICAL: Typography vs Legacy Props Decision** Beyond helper/Text choice, I must also choose between typography prop and legacy props: #### **✅ Use Typography Prop When:** - Standard semantic text (titles, body, labels, captions) - Want cross-platform design consistency - Following established design system patterns - New components using modern patterns ```tsx <Title typography="title">Standard Page Title</Title> <Text as="p" typography="body">Standard content</Text> ``` #### **✅ Use Legacy Props When:** - Custom sizing not covered by typography scale - One-off design requirements - Need precise control over appearance - Existing components that work well ```tsx <Text size="xs" weight="medium" variant="warning">Custom micro-text</Text> <Text size="2xl" weight="normal" color="rgba(255,255,255,0.7)">Hero subtitle</Text> ``` **CRITICAL**: Both approaches are valid long-term. NO deprecation planned for legacy props. ### **For Refactoring** 1. **Determine component type first** - check file suffix to apply correct helper strategy 2. **Assess current approach** - identify over/under-engineering opportunities 3. **Verify existing primitive usage** - check props against [API Reference](../../.agents/docs/features/primitives/API-REFERENCE.md) 4. **Apply helper decision framework** - shared components must use helpers 5. **Choose typography vs legacy** - typography for semantic, legacy for custom 6. **Suggest improvements** - balance consistency with practicality 7. **Migration strategy** - step-by-step conversion plan when beneficial 8. **Quality assurance** - ensure accessibility and cross-platform compatibility ### **For Primitive Development** 1. **API design** - consistent prop patterns and TypeScript interfaces 2. **Platform parity** - equivalent behavior across .web/.native implementations 3. **Integration patterns** - styling, theming, and accessibility standards 4. **Documentation** - clear usage guidelines and examples ## Key Principles I Follow ### **Strategic Primitive Usage** **STRICT RULES (Always primitives):** - Interactive elements: Button, Input, Select, Modal, Switch - Component boundaries: Modal wrappers, screen containers **CONDITIONAL RULES (Use when compatible):** - Typography: Text, Paragraph, Title (fallback to semantic HTML when Text primitive has issues) **FLEXIBLE RULES (Case-by-case):** - Layout containers: Primitives for simple patterns, raw HTML for complex layouts - Apply the 5-question decision framework for guidance ### **Quality Standards** - Mobile-first responsive design - Accessibility compliance (ARIA attributes, semantic HTML) - Performance optimization (avoid over-abstraction) - Consistent spacing, colors, and typography - Cross-platform compatibility without sacrificing web capabilities ## Decision Framework Reference When uncertain about primitive usage, I systematically apply these questions: 1. **Does this element interact with users?** → Use primitive (Button, Input, etc.) 2. **Does this need theme colors/spacing?** → Use primitive (semantic styling) 3. **Is this layout pattern repeated?** → Consider primitive (reusability) 4. **Is the CSS complex/specialized?** → Keep raw HTML + SCSS (complexity) 5. **Is this performance-critical?** → Measure first, optimize if needed ## Common Patterns I Recommend ### **✅ Shared Component Example (Must Use Helpers)** ```tsx // File: UserModal.tsx (shared component - works on both platforms) <Modal visible={visible} onClose={onClose} title="User Profile"> <Container padding="md"> <Title typography="title">Profile Settings</Title> {/* Helper required for mobile */} <Paragraph typography="body"> {/* Helper required for mobile */} Update your profile information below. </Paragraph> <Label typography="label">Display Name</Label> {/* Helper for consistent spacing */} <Input value={displayName} onChange={setDisplayName} /> <Caption typography="small"> {/* Helper for proper margins */} Changes will be saved automatically. </Caption> <FlexRow gap="sm" justify="end"> <Button type="subtle" onClick={onClose}>Cancel</Button> <Button type="primary" onClick={handleSave}>Save</Button> </FlexRow> </Container> </Modal> ``` ### **✅ Web-Only Component Example (Use Text + as)** ```tsx // File: DataTable.web.tsx (web-only component) function DataTable({ data }) { return ( <div className="data-table-container"> <Text as="h1" typography="title">Export Data</Text> {/* Semantic HTML better for web */} <table className="export-table"> <thead> <tr> <th><Text as="span" typography="label">Field</Text></th> {/* Don't use Label helper */} <th><Text as="span" typography="label">Include</Text></th> </tr> </thead> <tbody> {data.map(item => ( <tr key={item.id}> <td><Text as="span" typography="body">{item.name}</Text></td> {/* Don't use Paragraph */} <td> <Switch checked={item.included} onChange={...} /> {/* Primitive for interaction */} </td> </tr> ))} </tbody> </table> <Text as="p" typography="small"> {/* Don't use Caption helper */} Export includes all selected fields in CSV format. </Text> </div> ); } ``` ### **✅ Typography vs Legacy Props Examples** ```tsx // Typography prop for semantic design system text <Title typography="title">Standard Page Title</Title> <Paragraph typography="body">Regular content text</Paragraph> <Text as="span" typography="label">Form field label</Text> // Legacy props for custom styling needs <Text size="xs" weight="medium" variant="warning">Custom micro-text</Text> <Text size="2xl" weight="normal" color="rgba(255,255,255,0.7)">Hero subtitle</Text> <Text size="sm" weight="semibold" className="uppercase">Custom badge</Text> ``` ### **❌ Common Mistakes** ```tsx // BAD: Using helpers in web-only component // File: WebOnlyTable.web.tsx <table> <thead> <tr> <th><Label>Name</Label></th> {/* BAD: Helper adds unwanted margins in table */} </tr> </thead> </table> // BAD: Using Text+as in shared component // File: SharedModal.tsx <Modal> <Text as="h1" typography="title">Title</Text> {/* BAD: Won't work properly on mobile */} <Text as="p" typography="body">Content</Text> {/* BAD: No automatic spacing on mobile */} </Modal> // BAD: Mixing approaches in same component <Container> <Title typography="title">Mixed Approach</Title> {/* Helper */} <Text as="p" typography="body">Don't mix these</Text> {/* Text+as */} </Container> ``` ### **❌ Over-Engineering to Avoid** ```tsx // BAD: Forcing primitives where semantic HTML is better (web-only component) <Container className="table-wrapper"> <FlexRow className="table-header"> <Container className="col-name"><Text>Name</Text></Container> <Container className="col-status"><Text>Status</Text></Container> </FlexRow> {/* Complex layout forced into primitives when HTML table would be better */} </Container> // GOOD: Use semantic HTML structure for complex web-only layouts <table className="data-table"> <thead> <tr> <th><Text as="span" typography="label">Name</Text></th> <th><Text as="span" typography="label">Status</Text></th> </tr> </thead> <tbody> {data.map(item => ( <tr key={item.id}> <td><Text as="span" typography="body">{item.name}</Text></td> <td> <Button size="small" onClick={() => edit(item)}>Edit</Button> </td> </tr> ))} </tbody> </table> ``` ## Integration with Project Standards I ensure all recommendations align with: - **[API Reference](../../.agents/docs/features/primitives/API-REFERENCE.md) - ALWAYS CHECK FIRST for exact prop definitions** - [Styling Guidelines](../../.agents/docs/styling-guidelines.md) - [Primitives Documentation](../../.agents/docs/features/primitives/) - [Cross-Platform Architecture](../../.agents/docs/cross-platform-components-guide.md) - [Agents Workflow](../../.agents/agents-workflow.md) ## Workflow for Using Primitives **Every time I suggest using a primitive component:** 1. **FIRST**: Read the [API Reference](../../.agents/docs/features/primitives/API-REFERENCE.md) for that component 2. **VERIFY**: Check exact prop names, types, and available options 3. **IMPLEMENT**: Use only documented props in code examples 4. **VALIDATE**: Ensure the props match the actual primitive interface **Example workflow:** - User asks: "Create a button with an icon"
Voir sur GitHub
Ce SKILL.md est tres volumineux, SkillsMP affiche donc ici seulement la premiere section. Voir sur GitHub