listen ) ) {
ob_start();
if ( ! empty( $is_editing ) && ! betterdocs()->listen->has_listen( get_the_ID(), $listen_args ) ) {
// A template edited against a preview that is not a readable doc resolves to
// nothing — and a widget that renders nothing cannot be seen, selected or
// moved. It reads as broken rather than as empty, so the canvas gets static
// chrome instead. Same reasoning as the AI Actions placeholder below.
$listen_label = ! empty( $attributes['listen_button_label'] )
? $attributes['listen_button_label']
: betterdocs()->settings->get( 'listen_button_label' );
?>
ai_actions ) ) {
ob_start();
if ( ! empty( $is_editing ) && ! betterdocs()->ai_actions->has_actions( get_the_ID(), $ai_actions_args ) ) {
// The action list is resolved per doc, so a template edited against a
// preview that is not a readable doc resolves to nothing — and a widget
// that renders nothing cannot be seen, selected or moved. It reads as
// broken rather than as empty, so the canvas gets static chrome instead.
$svg_kses = AIActions::svg_kses();
$button_label = ! empty( $attributes['ai_actions_button_label'] )
? $attributes['ai_actions_button_label']
: betterdocs()->settings->get( 'ai_actions_button_label' );
?>
*` rule
// zeroes child block margins, and the 8px gap between the pills is the leading
// box's own, so two boxes would space them by the row's wider 16px.
$leading = trim( $reading_time ) . $listen;
?>