* 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
The main idea of this patch is to set slot props to a reactive store
instead of passing them as React props to the slot children elements.
Same as other state management in sunmao, the component will subscribe
to the slot store to get the latest value of slot props.
Same as component id, we need a way to identify every slot props in the store.
So we add a new parameter key to the `getSlot` function,
where [component id, slot name, key] will be a unique identifier.
Another challenge is to subscribe the slot store in a efficient way.
Currently we are using vue's reactivity system, which need set `deep: true`
to observe multiple value during effect.
By setting `deep: true`, if we write code like `const $slot = slotStore[slotKey]`,
it will subscribe all the sub-fields of this slot key be cause we 'access' the property.
The solution is to implement a redirector Proxy.
With the redirector, expression `$slot.a.b` will be redirect to `slotStore[slotKey].a.b`.
related to: #388