Block Architecture
Each document type in Macro is implemented as a separate block package:Block Pattern
Each block is an isolated package with its own:- Components - UI specific to that document type
- Signals/Stores - Local state management
- Styles - Block-specific CSS
- Types - TypeScript definitions
Example: Markdown Block Structure
Block Entry Point
Frompackages/block-md/component/Block.tsx:
- Wrapped in
DocumentBlockContainerfrom core - Uses
Suspensefor async loading - Manages scroll container refs
- Integrates core components like
CustomScrollbar
Core Components
Thecore/ package provides shared components used across blocks:
Layout Components
DocumentBlockContainerUI Primitives
Button (from ui package)Dialog Components
Macro uses @corvu for accessible dialogs:Design System
Theui/ package contains design system primitives:
Styling Utilities
Class Mergingtailwind-merge to properly merge Tailwind classes.
Icon System
Macro uses Phosphor icons:macro-icons/ package.
Component Composition
Prefer Composition Over Props
From the code style guide:Example: Modals Provider
Fromblock-md:
Block State Management
Block Data Signals
Accessing Block Context
Accessibility
Macro uses @kobalte/core for accessible components:- Support keyboard navigation
- Include ARIA labels
- Have proper focus management
- Work with screen readers
Performance Patterns
Virtualization
For long lists, usevirtua or @tanstack/solid-virtual: