Malli schema for the Pose data model.
A pose is a plain recursive map. A leaf pose has no :poses (or an empty :poses vector). A composite pose has :poses and an optional :layout describing how sub-poses tile a bounding rectangle.
Validation is not wired into any runtime path yet; Phase 6 of the pre-alpha refactor adds validation at public API boundaries. Until then, impl.pose operates on structurally-valid poses by convention; this schema is the authoritative definition of that convention.
Decisions made in Phase 2:
Malli schema for the Pose data model. A pose is a plain recursive map. A leaf pose has no :poses (or an empty :poses vector). A composite pose has :poses and an optional :layout describing how sub-poses tile a bounding rectangle. Validation is not wired into any runtime path yet; Phase 6 of the pre-alpha refactor adds validation at public API boundaries. Until then, impl.pose operates on structurally-valid poses by convention; this schema is the authoritative definition of that convention. Decisions made in Phase 2: - A leaf with no :data and no :mapping is valid -- leaves inherit context from ancestors via impl.pose/resolve-tree. - :share-scales is structurally allowed on any pose; it is a no-op on leaves (nothing to share). - :layout :weights length is not required to equal (count :poses); impl.pose/compute-layout tolerates short/long weight vectors.
(explain x)Explain why x does not conform to the pose schema, or nil if valid.
Explain why x does not conform to the pose schema, or nil if valid.
Compositor layout spec for a composite pose.
Compositor layout spec for a composite pose.
Aesthetic mapping: keyword key -> column ref or literal value.
Aesthetic mapping: keyword key -> column ref or literal value.
A pose-layer: a layer declaration attached to a pose. :layer-type names a registered entry; :mark / :stat / :position are layer-structural siblings extracted from user opts by build-layer (Phase 6 decision 1).
A pose-layer: a layer declaration attached to a pose. :layer-type names a registered entry; :mark / :stat / :position are layer-structural siblings extracted from user opts by build-layer (Phase 6 decision 1).
Structural schema for a pose tree.
Shape: {:data ? dataset (inherited from ancestor if absent) :mapping ? aesthetic mappings (merges with ancestors) :layers ? PoseLayer vec at this level (accumulates into leaves) :poses ? sub-poses; absent or empty = leaf :layout ? Layout for composites :opts ? plot options (inheritable) :share-scales ? ShareScales}
Permissive {:closed false} intentionally -- generators like facet and mosaic attach metadata keys (:panel-label, :facet-row, ...) to leaves that pass through resolve-tree unchanged.
Structural schema for a pose tree.
Shape:
{:data ? dataset (inherited from ancestor if absent)
:mapping ? aesthetic mappings (merges with ancestors)
:layers ? PoseLayer vec at this level (accumulates into leaves)
:poses ? sub-poses; absent or empty = leaf
:layout ? Layout for composites
:opts ? plot options (inheritable)
:share-scales ? ShareScales}
Permissive {:closed false} intentionally -- generators like facet
and mosaic attach metadata keys (:panel-label, :facet-row, ...) to
leaves that pass through resolve-tree unchanged.Axis keys whose scale domains union across descendants of a composite.
Axis keys whose scale domains union across descendants of a composite.
(valid? x)Check if x conforms to the pose schema.
Check if x conforms to the pose schema.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |