* feat/relationship:
feat(editor): add Component Relationship View Modal
test(runtime): add slot trait test
feat(runtime): support Component DataSource
fix(editor): hide deprecated component is component list
feat(core): add deprecated metadata field
style: change the style of the expression hint
feat(EventForm): show event name of event handler
feat(ExpressionEditor): allow pressing tab to switch field input
feat(Descriptions): add title, label, value slots
feat(PopoverWidget): add appendToParent option
fix(PopoverWidget): add padding to popover bottom
feat(PopoverWidget): add appentToBody option
# Conflicts:
# packages/core/src/metadata.ts
# packages/editor/src/components/ComponentsList/ComponentList.tsx
# packages/runtime/src/index.ts
* refactor/datasource2:
feat(slot): add slot trait v2
feat(fetch): remove fetch trait config property
fix(DataSource): hide value type tag for normal DataSources
fix(ComponentList): hide isDataSource components in ComponentList
feat(DataSource): hide empty properties form
* develop:
fix(ValidationTrait): don't clear existing errors
fix(StateManager): fix the can't deep eval the nest array issues
feat(runtime): add style for ErrorBoundary
feat(runtime): add ErrorBoundary to ImplWrapper
refactor(runtime): refactor utilMethodFactory type
refactor(runtime): add slot receiver to app services
refactor(runtime): temporary hack the list component with the new slot system
refactor(runtime): remove slot props from event trait
perf(runtime): implement slot receiver to avoid of re-render when passing fallback elements
perf(runtime): refactor the slot's props and fallback implementation
fix(SpaceWidget): fix padding display misalignment
fix: fix selecting component would change the properties' values issue
refactor: remove the shared package from core
fix: fix the `exampleProperties` type errors
# Conflicts:
# packages/chakra-ui-lib/src/index.ts
The slot receiver is a magic hole of sunmao's runtime.
In sunmao, we support pass props and fallback elements to a slot.
But if we pass them as React component's props,
it will cause re-render since most of them could not use a shallow equal checker.
Also, in sunmao's runtime, we are not using a traditional React render mechanism.
Instead, we keep most of the components not be rendered and only subscribe to related state updates.
To continue with our design,
we need a way to render slot's fallback elements without passing the elements as props.
This is where the slot receiver comes.
It contains a map and an event emitter, when a slot need render,
it will attach the fallback elements to the map and send a signal via the emitter.
When the Receiver component receive a signal, it will force render the fallback elements.
related: #388