A <send> element: spec 6.2's instruction to send an event, immediately or
after a delay.
Every mutually exclusive attribute pairing 6.2.1 names is nonetheless
simultaneously representable here, on purpose, so
Statifier.Validator.Checks.Send can report the shape rather than
lowering refusing to build it - the same division of labour
Statifier.Document.Invoke's moduledoc describes for its own attributes:
event"Must not occur with the 'eventexpr' attribute."target"Must not occur with the 'targetexpr' attribute."type"Must not occur with the 'typeexpr' attribute."id"Must not occur with the 'idlocation' attribute."delay"Must not occur with the 'delayexpr' attribute or when the attribute 'target' has the value '_internal'."namelist"Must not occur with the<param>element."
namelist is [String.t()] from a whitespace-split namelist attribute
(5.9.2's space-separated list of location expressions), mirroring
Statifier.Document.Invoke.namelist. params and content are built the
same way Statifier.Document.Invoke's own params/content are - one
slot each, filled by Statifier.Lowering.Builders.place/3's %Send{}
clauses as <param>/<content> children are walked.
Unlike <invoke>, <send> is executable content: it is tagged
{:content_node, send} by Statifier.Lowering.Builders.build_send/2 and
lands in a block's own content list through the placement clauses every
other content node already uses, rather than through a dedicated
state-level slot.
Summary
Types
@type t() :: %Statifier.Document.Send{ attribute_locations: Statifier.Document.attribute_locations(), content: Statifier.Document.Content.t() | nil, delay: String.t() | nil, delayexpr: String.t() | nil, event: String.t() | nil, eventexpr: String.t() | nil, id: String.t() | nil, idlocation: String.t() | nil, location: Statifier.Parser.Location.t(), namelist: [String.t()], params: [Statifier.Document.Param.t()], target: String.t() | nil, targetexpr: String.t() | nil, type: String.t() | nil, typeexpr: String.t() | nil }