Each module (especially within features/) should use an index.ts file as a "Gatekeeper" to define its public API. This pattern enables encapsulation and improves tree-shaking by only exposing necessary symbols and keeping internal sub-components private.
Example features/canvas/index.ts implementation:
// ✅ Public API
export const nodeTypes = { ... }
export const edgeTypes = { ... }
export { ConnectionLine, AgentflowHeader, createHeaderProps }
export { useFlowNodes, useFlowHandlers, useDragAndDrop }
// Container components are re-exported for advanced usage
export { AgentFlowNode, AgentFlowEdge, StickyNote, IterationNode }
// ❌ Internal sub-components stay private within containers/components
// features/canvas/index.ts
// ✅ Public API
export const nodeTypes = { ... }
export const edgeTypes = { ... }
export { ConnectionLine, AgentflowHeader, createHeaderProps }
export { useFlowNodes, useFlowHandlers, useDragAndDrop }
// Container components are re-exported for advanced usage
export { AgentFlowNode, AgentFlowEdge, StickyNote, IterationNode }
// ❌ Internal sub-components stay private within containers/components