NAME
    Datastar::SSE - Module for creating Datastar Server Events
DESCRIPTION
    An implementation of the Datastar  Server Sent
    Event SDK in Perl
SYNOPSIS
        use Datastar::SSE qw/:fragment_merge_modes/;
        
        my @events;
        push @events,  Datastar::SSE->merge_fragments( $html_fragment, +{
            selector => '#name-selector',
            merge_mode => FRAGMENT_MERGEMODE_OUTER,
        });
        # $event is a multiline string which should be sent as part of
        # the http response body.  Multiple event strings can be sent in the same response.
        
        for my $evt (@events) {
            $cgi->print( $evt ); # CGI
            $psgi_writer->write( $evt ); # PSGI delayed response "writer"
            $c->write( $evt ); # Mojolicious controller
        }
EXPORT TAGS
    The following tags can be specified to export constants related to the
    Datastar SSE
 events
    The Datastar SSE  Event
    names:
      * DATASTAR_MERGE_FRAGMENTS
      datastar-merge-fragments
      
      * DATASTAR_REMOVE_FRAGMENTS
      datastar-remove-fragments
      
      * DATASTAR_MERGE_SIGNALS
      datastar-merge-signals
      
      * DATASTAR_REMOVE_SIGNALS
      datastar-remove-signals
      
      * DATASTAR_EXECUTE_SCRIPT
      datastar-execute-script
      
 fragment_merge_modes
    The Merge Modes for the "merge_fragments" event:
      * FRAGMENT_MERGEMODEMORPH
      morph
      Merges the fragment using Idiomorph
      . This is the default
      merge strategy.
      * FRAGMENT_MERGEMODE_INNER
      inner
      Replaces the target’s innerHTML with the fragment.
      * FRAGMENT_MERGEMODE_OUTER
      outer
      Replaces the target’s outerHTML with the fragment.
      * FRAGMENT_MERGEMODE_PREPEND
      prepend
      Prepends the fragment to the target’s children.
      * FRAGMENT_MERGEMODE_APPEND
      append
      Appends the fragment to the target’s children.
      * FRAGMENT_MERGEMODE_BEFORE
      before
      Inserts the fragment before the target as a sibling.
      * FRAGMENT_MERGEMODE_AFTER
      after
      Inserts the fragment after the target as a sibling.
      * FRAGMENT_MERGEMODE_UPSERTATTRIBUTES
      upsertAttributes
      Merges attributes from the fragment into the target – useful for
      updating a signal.
METHODS
 headers
            ->headers();
    Returns an Array Ref of the recommended headers to sent for Datastar
    SSE responses.
            Content-Type: text/event-stream
            Cache-Control: no-cache
            Connection: keep-alive
            Keep-Alive: timeout=300, max=100000
EVENTS
    Each Datastar SSE event is implements as a class method on
    Datastar::SSE. Each method accepts, but does not require, an options
    hashref as the last parameter, the options are documented per event,
    additionally all options from HTTP::ServerEvent are supported.
      * id
      The event id. If you send this, a client will send the
      "Last-Event-Id" header when reconnecting, allowing you to send the
      events missed while offline. Newlines or null characters in the event
      id are treated as a fatal error.
      * retry
      the amount of miliseconds to wait before reconnecting if the
      connection is lost. Newlines or null characters in the retry interval
      are treated as a fatal error.
 merge_fragments
            ->merge_fragments( $html_fragment, $options_hashref );
            ->merge_fragments( $html_fragment_arrayref, $options_hashref );
    datastar-merge-fragments
    
    Merges one or more fragments into the DOM. By default, Datastar merges
    fragments using Idiomorph
    , which matches top level
    elements based on their ID.
  OPTIONS
      * selector
      Str
      Selects the target element of the merge process using a CSS selector.
      * use_view_transition
      Bool
      Default: 0
      Sends As: useViewTransition
      Whether to use view transitions when merging into the DOM.
      * merge_mode
      Str|MERGEMODE
      Default: FRAGMENT_MERGEMODE_MORPH
      Sends As: mergeMode
      The mode to use when merging into the DOM.
      See merge modes
 merge_signals
            ->merge_signals( $signals_hashref, $options_hashref );
    datastar-merge-signals
    
    Updates the signals with new values. The only_if_missing option
    determines whether to update the signals with new values only if the
    key does not exist. The signals line should be a valid data-signals
    attribute. This will get merged into the signals.
  OPTIONS
      * only_if_missing
      Bool
      Default: 0
      Sends As: onlyIfMissing
      Only update the signals with new values if the key does not exist.
 remove_fragments
            ->remove_fragments( $selector, $options_hashref )
    datastar-remove-fragments
    
    Removes one or more HTML fragments that match the provided selector
    ($selector) from the DOM.
 remove_signals
            ->remove_signals( @paths, $options_hashref )
            ->remove_signals( $paths_arrayref, $options_hashref )
    datastar-remove-signals
    
    Removes signals that match one or more provided paths (@paths).
 execute_script
            ->execute_script( $script, $options_hashref )
            ->execute_script( $script_arrayref, $options_hashref )
    datastar-execute-script
    
    Executes JavaScript ($script or @$script_arrayref) in the browser.
  OPTIONS
      * auto_remove
      Bool
      Default: 1
      Sends As: autoRemove
      Determines whether to remove the script element after execution.
      * attributes
      Map[Name,Value]
      CycleTuple[ Str | Map[Name,Value] ]
      Default: [{ type => 'module' }]
      Each attribute adds an HTML attribute to the