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.

소스 정보

저장소
QuilibriumNetwork/quorum-desktop
최근 소스 활동
2025년 11월 18일 14:09
감지된 SKILL.md 언어
영어
스타
35
포크
12

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
6 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
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"
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기