- 
            
            
              
            
            
# frozen_string_literal: true
           
        
      
        
          
- 
            
            
              
            
            
           
        
      
        
          
- 
            
              1
            
            
              
            
            
require "zeitwerk"
           
        
      
        
          
- 
            
            
              
            
            
           
        
      
        
          
- 
            
              1
            
            
              
            
            
Zeitwerk::Loader.new.then do |loader|
           
        
      
        
          
- 
            
              1
            
            
              
            
            
  loader.inflector.inflect "htmx" => "HTMX"
           
        
      
        
          
- 
            
              1
            
            
              
            
            
  loader.tag = File.basename __FILE__, ".rb"
           
        
      
        
          
- 
            
              1
            
            
              
            
            
  loader.push_dir __dir__
           
        
      
        
          
- 
            
              1
            
            
              
            
            
  loader.setup
           
        
      
        
          
- 
            
            
              
            
            
end
           
        
      
        
          
- 
            
            
              
            
            
           
        
      
        
          
- 
            
            
              
            
            
# Main namespace.
           
        
      
        
          
- 
            
              1
            
            
              
            
            
module HTMX
           
        
      
        
          
- 
            
              1
            
            
              
            
            
  REQUEST_MAP = {
           
        
      
        
          
- 
            
            
              
            
            
    boosted: "HTTP_HX_BOOSTED",
           
        
      
        
          
- 
            
            
              
            
            
    current_url: "HTTP_HX_CURRENT_URL",
           
        
      
        
          
- 
            
            
              
            
            
    history_restore_request: "HTTP_HX_HISTORY_RESTORE_REQUEST",
           
        
      
        
          
- 
            
            
              
            
            
    prompt: "HTTP_HX_PROMPT",
           
        
      
        
          
- 
            
            
              
            
            
    request: "HTTP_HX_REQUEST",
           
        
      
        
          
- 
            
            
              
            
            
    target: "HTTP_HX_TARGET",
           
        
      
        
          
- 
            
            
              
            
            
    trigger_name: "HTTP_HX_TRIGGER_NAME",
           
        
      
        
          
- 
            
            
              
            
            
    trigger: "HTTP_HX_TRIGGER"
           
        
      
        
          
- 
            
            
              
            
            
  }.freeze
           
        
      
        
          
- 
            
            
              
            
            
           
        
      
        
          
- 
            
              1
            
            
              
            
            
  RESPONSE_MAP = {
           
        
      
        
          
- 
            
            
              
            
            
    location: "HX-Location",
           
        
      
        
          
- 
            
            
              
            
            
    push_url: "HX-Push-Url",
           
        
      
        
          
- 
            
            
              
            
            
    redirect: "HX-Redirect",
           
        
      
        
          
- 
            
            
              
            
            
    refresh: "HX-Refresh",
           
        
      
        
          
- 
            
            
              
            
            
    replace_url: "HX-Replace-Url",
           
        
      
        
          
- 
            
            
              
            
            
    reswap: "HX-Reswap",
           
        
      
        
          
- 
            
            
              
            
            
    retarget: "HX-Retarget",
           
        
      
        
          
- 
            
            
              
            
            
    trigger: "HX-Trigger",
           
        
      
        
          
- 
            
            
              
            
            
    trigger_after_settle: "HX-Trigger-After-Settle",
           
        
      
        
          
- 
            
            
              
            
            
    trigger_after_swap: "HX-Trigger-After-Swap"
           
        
      
        
          
- 
            
            
              
            
            
  }.freeze
           
        
      
        
          
- 
            
            
              
            
            
           
        
      
        
          
- 
            
              1
            
            
              
            
            
  def self.loader registry = Zeitwerk::Registry
           
        
      
        
          
- 
            
              4
            
            
              
            
            
    @loader ||= registry.loaders.each.find { |loader| loader.tag == File.basename(__FILE__, ".rb") }
           
        
      
        
          
- 
            
            
              
            
            
  end
           
        
      
        
          
- 
            
            
              
            
            
           
        
      
        
          
- 
            
              1
            
            
              
            
            
  def self.[](...)
           
        
      
        
          
- 
            
              2
            
            
              
            
            
    @prefixer ||= Prefixer.new
           
        
      
        
          
- 
            
              2
            
            
              
            
            
    @prefixer.call(...)
           
        
      
        
          
- 
            
            
              
            
            
  end
           
        
      
        
          
- 
            
            
              
            
            
           
        
      
        
          
- 
            
              1
            
            
              
            
            
  def self.request(**) = Headers::Request.for(**)
           
        
      
        
          
- 
            
            
              
            
            
           
        
      
        
          
- 
            
              1
            
            
              
            
            
  def self.request!(headers, **attributes) = headers.merge! attributes.transform_keys!(REQUEST_MAP)
           
        
      
        
          
- 
            
            
              
            
            
           
        
      
        
          
- 
            
              1
            
            
              
            
            
  def self.request?(headers, key, value) = headers[REQUEST_MAP[key]] == value
           
        
      
        
          
- 
            
            
              
            
            
           
        
      
        
          
- 
            
              1
            
            
              
            
            
  def self.response(**) = Headers::Response.for(**)
           
        
      
        
          
- 
            
            
              
            
            
           
        
      
        
          
- 
            
              1
            
            
              
            
            
  def self.response!(headers, **attributes)
           
        
      
        
          
- 
            
              3
            
            
              
            
            
    headers.merge! attributes.transform_keys!(RESPONSE_MAP)
           
        
      
        
          
- 
            
            
              
            
            
  end
           
        
      
        
          
- 
            
            
              
            
            
           
        
      
        
          
- 
            
              1
            
            
              
            
            
  def self.response?(headers, key, value) = headers[RESPONSE_MAP[key]] == value
           
        
      
        
          
- 
            
            
              
            
            
end