ShelfWidgetDynamicLayoutProviding

Optional live-layout refinement for a shelf widget provider.

@MainActor protocol ShelfWidgetDynamicLayoutProviding : ShelfWidgetProviding

This deliberately lives beside ShelfWidgetProviding instead of adding a requirement to it: an already compiled droplet keeps the original protocol witness table, while a newer product can opt into a host refresh when product-owned content changes its requested canvas. The host still owns the layout envelope and clamps every returned trait before using it.

Properties

shelfWidgetLayoutInvalidationPublisher

@MainActor var shelfWidgetLayoutInvalidationPublisher: AnyPublisher<ShelfWidgetID, Never> { get }

Emits after a product-owned layout input changes. The value identifies the widget whose traits the host should re-read; it carries no product model data across the bundle boundary.

shelfWidgetLayoutInvalidationPublisher

@MainActor var shelfWidgetLayoutInvalidationPublisher: AnyPublisher<ShelfWidgetID, Never> { get }

Methods

currentLayoutTraits(for:)

@MainActor func currentLayoutTraits(for id: ShelfWidgetID) -> ShelfWidgetLayoutTraits?

The current layout traits for one declared widget, or nil to keep its descriptor's static traits. Callers ask at explicit pre-size and render edges; this must be cheap and must not create views.

currentLayoutTraits(for:)

@MainActor func currentLayoutTraits(for id: ShelfWidgetID) -> ShelfWidgetLayoutTraits?