{# Search Bar Components ===================== Product search with autocomplete and suggestions for shop pages. Usage: {% from 'shared/macros/storefront/search-bar.html' import search_bar, search_autocomplete, mobile_search %} #} {# Search Bar ========== Basic search input with icon and optional button. Parameters: - placeholder: Placeholder text (default: 'Search products...') - action: Form action URL (default: '/search') - method: Form method (default: 'get') - name: Input name (default: 'q') - value: Initial value (default: '') - show_button: Show search button (default: false) - button_label: Button text (default: 'Search') - size: 'sm' | 'md' | 'lg' (default: 'md') - variant: 'default' | 'filled' | 'minimal' (default: 'default') Usage: {{ search_bar(placeholder='Search for products...') }} {{ search_bar(show_button=true, size='lg') }} #} {% macro search_bar( placeholder='Search products...', action='/search', method='get', name='q', value='', show_button=false, button_label='Search', size='md', variant='default' ) %} {% set sizes = { 'sm': {'input': 'py-1.5 pl-8 pr-3 text-sm', 'icon': 'w-4 h-4 left-2.5', 'button': 'px-3 py-1.5 text-sm'}, 'md': {'input': 'py-2.5 pl-10 pr-4 text-sm', 'icon': 'w-5 h-5 left-3', 'button': 'px-4 py-2.5 text-sm'}, 'lg': {'input': 'py-3 pl-12 pr-4 text-base', 'icon': 'w-6 h-6 left-3.5', 'button': 'px-5 py-3 text-base'} } %} {% set variants = { 'default': 'bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 focus:border-purple-500 dark:focus:border-purple-400 focus:ring-2 focus:ring-purple-500/20', 'filled': 'bg-gray-100 dark:bg-gray-700 border border-transparent focus:bg-white dark:focus:bg-gray-800 focus:border-purple-500 dark:focus:border-purple-400 focus:ring-2 focus:ring-purple-500/20', 'minimal': 'bg-transparent border-b border-gray-300 dark:border-gray-600 rounded-none focus:border-purple-500 dark:focus:border-purple-400' } %}
{% if show_button %} {% endif %}
{% endmacro %} {# Search Autocomplete =================== Search input with dropdown suggestions and autocomplete. Parameters: - placeholder: Placeholder text (default: 'Search products...') - action: Form action URL (default: '/search') - search_endpoint: API endpoint for suggestions (default: '/api/search/suggest') - min_chars: Minimum characters to trigger search (default: 2) - debounce: Debounce delay in ms (default: 300) - show_recent: Show recent searches (default: true) - show_popular: Show popular searches (default: true) - max_suggestions: Maximum suggestions to show (default: 5) - size: 'sm' | 'md' | 'lg' (default: 'md') Usage: {{ search_autocomplete(search_endpoint='/api/products/search') }} #} {% macro search_autocomplete( placeholder='Search products...', action='/search', search_endpoint='/api/search/suggest', min_chars=2, debounce=300, show_recent=true, show_popular=true, max_suggestions=5, size='md' ) %} {% set sizes = { 'sm': {'input': 'py-1.5 pl-8 pr-8 text-sm', 'icon': 'w-4 h-4', 'dropdown': 'mt-1'}, 'md': {'input': 'py-2.5 pl-10 pr-10 text-sm', 'icon': 'w-5 h-5', 'dropdown': 'mt-2'}, 'lg': {'input': 'py-3 pl-12 pr-12 text-base', 'icon': 'w-6 h-6', 'dropdown': 'mt-2'} } %}
{# Dropdown #}
{% endmacro %} {# Mobile Search ============= Full-screen search overlay for mobile devices. Parameters: - show_var: Alpine.js variable for visibility (default: 'showMobileSearch') - placeholder: Placeholder text (default: 'Search products...') - action: Form action URL (default: '/search') - search_endpoint: API endpoint for suggestions (default: '/api/search/suggest') Usage: {{ mobile_search(show_var='showSearch') }} #} {% macro mobile_search( show_var='showMobileSearch', placeholder='Search products...', action='/search', search_endpoint='/api/search/suggest' ) %} {% endmacro %} {# Search Trigger Button ==================== Button to open mobile search or focus desktop search. Parameters: - show_var: Alpine.js variable to toggle (default: 'showMobileSearch') - sr_label: Screen reader label (default: 'Open search') Usage: {{ search_trigger(show_var='showSearch') }} #} {% macro search_trigger( show_var='showMobileSearch', sr_label='Open search' ) %} {% endmacro %} {# Instant Search Results ===================== Inline search results component (for header search). Parameters: - results_var: Alpine.js expression for search results (default: 'searchResults') - loading_var: Alpine.js expression for loading state (default: 'isSearching') - query_var: Alpine.js expression for search query (default: 'searchQuery') - show_var: Alpine.js expression for visibility (default: 'showResults') Usage: {{ instant_search_results(results_var='searchResults') }} #} {% macro instant_search_results( results_var='searchResults', loading_var='isSearching', query_var='searchQuery', show_var='showResults' ) %} {% endmacro %}