LiveActivityProviding
Adopt to show a compact live activity in the notch or island: small leading and trailing accessories beside the (simulated) notch.
@MainActor protocol LiveActivityProviding : Droplet
Adopt to show a compact live activity in the notch or island: small leading and trailing accessories beside the (simulated) notch. The row is compact only, like Droppy's own activities: hovering or clicking it opens the shelf, which is where your controls belong (see makeExpanded(context:)).
The host owns the presentation slot policy: publishing a state is a request, not a command, and a higher-priority activity (a phone call, a screen recording) can hold the slot.
External activities share a priority band below Droppy's built-in activities. DroppyReplacesBuiltIn is reserved host metadata and does not grant an external droplet a built-in activity's precedence.
- Note: Maturity: Stable. Covered by the 1.0 compatibility promise. Host support: mounted, and the seat is awarded:
compactwhile your row is drawn,secondarywhile your activity rides the companion pill beside one of Droppy's own (only when the state setsjoinsPersistentActivitySet),outranked,surfaceSuppressedoridleotherwise. See Host support.
Properties
liveActivityState
@MainActor var liveActivityState: AnyPublisher<LiveActivityState?, Never> { get }
The droplet's current activity, or nil when idle. The host subscribes once at activation; publish on the main thread.
Methods
liveActivitySeatDidChange(_:)
@MainActor func liveActivitySeatDidChange(_ seat: DropletLiveActivitySeat)
The host moved this droplet's activity to a different seat (DroppyKit 0.6.0).
Publishing a state used to be a request into silence: a droplet could not tell whether it was on screen, riding the secondary pill, or losing to something it would never see. So it kept animating content nobody was looking at, and it had no honest answer when a user asked why the activity did not appear.
Use it to stop work, not to argue: there is no verb here for taking the seat back. A droplet that stops its ticker on none(_:) and restarts it on compact is doing exactly what this exists for.
liveActivitySeatDidChange(_:)
@MainActor func liveActivitySeatDidChange(_ seat: DropletLiveActivitySeat)
Default: ignore seat changes, which is what every droplet written against DroppyKit 0.5.0 and earlier already does.
makeCompactLeading()
@MainActor func makeCompactLeading() -> AnyView
Small view rendered on the leading side of the notch while the activity holds the compact slot.
makeCompactTrailing()
@MainActor func makeCompactTrailing() -> AnyView
Small view rendered on the trailing side of the notch while the activity holds the compact slot.
makeCompanionCompact(context:)
@MainActor func makeCompanionCompact(context: CompactLiveActivityContext) -> AnyView
The mark rendered inside the round companion pill while this activity rides the secondary seat beside another activity (DroppyKit 0.7.0).
Defaults to makeCompactLeading(), which is what the host mounted there before this verb existed. Implement it when the leading wing accessory does not read at puck scale, and draw for the context's slotSize: the host holds the mark to that square, scaling anything larger down and clipping it, so a wing-sized view comes out small.
makeCompanionCompact(context:)
@MainActor func makeCompanionCompact(context: CompactLiveActivityContext) -> AnyView
Default: the leading compact accessory, exactly what hosts mounted in the companion pill before DroppyKit 0.7.0.
makeCompanionDetail(context:)
@MainActor func makeCompanionDetail(context: LiveActivityContext) -> AnyView?
Detail content revealed when the user hovers the companion pill and the host grows it into a wide capsule (the accordion), or nil to keep the centered companion mark during the grow (DroppyKit 0.7.0).
The view is laid out leading-aligned beside the companion mark inside the grown capsule. Keep it to a line or two of text-scale content; the interactive surface remains makeExpanded(context:).
makeCompanionDetail(context:)
@MainActor func makeCompanionDetail(context: LiveActivityContext) -> AnyView?
Default: no accordion detail; the companion keeps its centered mark while the capsule grows.
makeExpanded(context:)
@MainActor func makeExpanded(context: LiveActivityContext) -> AnyView
A card for the compact activity, which Droppy does not mount.
A droplet's live activity behaves exactly like Droppy's own: hovering or clicking the row opens the shelf, where the droplet's shelf widget is, and no card grows out of the row (DroppyKit 1.8.1). The requirement stays so droplets already built keep loading; return an empty view in a new droplet and put controls in a shelf widget.