module Playbook::PbKitHelper
def deprecated_kit_warning(kit_name, message = nil)
def deprecated_kit_warning(kit_name, message = nil) # Skip in test and production environments return "".html_safe if Rails.env.test? || Rails.env.production? # Build the warning message base_message = "PLAYBOOK DEPRECATION WARNING\\n ----------------------------\\n The \\\"#{kit_name}\\\" kit is deprecated and will be removed in a future version." full_message = if message "#{base_message} #{message}" else "#{base_message} Please migrate to the recommended alternative" end # Escape the message for JavaScript escaped_message = full_message.gsub("'", "\\\\'").gsub("\n", "\\n") # Return a self-executing script that checks if we're already warned # Uses client-side tracking to ensure one warning per page load # Only shows warnings on localhost (matching React behavior) script = "<script type=\"text/javascript\">\n" script += "(function() {\n" script += " var hostname = window.location.hostname;\n" script += " var isLocalDev = hostname === 'localhost' || hostname === '127.0.0.1' || hostname.endsWith('.local') || hostname.includes('local.') || !hostname;\n" script += " if (!isLocalDev) return;\n" script += " if (!window.__PB_WARNED_KITS__) window.__PB_WARNED_KITS__ = new Set();\n" script += " if (!window.__PB_WARNED_KITS__.has('#{kit_name}')) {\n" script += " window.__PB_WARNED_KITS__.add('#{kit_name}');\n" script += " console.warn('#{escaped_message}');\n" script += " }\n" script += "})();\n" script += "</script>" script.html_safe end
def pb_rails(kit_name, props: {}, &block)
def pb_rails(kit_name, props: {}, &block) kit = Playbook::KitResolver.resolve(kit_name.to_s) if respond_to? :render_component render_component kit.new(props, &block), &block else render kit.new(props, &block), &block end end