{# Input Macros ============ Reusable input components with Alpine.js integration. Usage: {% from 'shared/macros/inputs.html' import search_autocomplete %} {{ search_autocomplete( search_var='userSearchQuery', results_var='userSearchResults', show_dropdown_var='showUserDropdown', loading_var='searchingUsers', disabled_var='transferring', select_action='selectUser(user)', display_field='username', secondary_field='email', placeholder='Search by name or email...' ) }} #} {# Search Autocomplete =================== A search input with dropdown results for autocomplete functionality. Parameters: - search_var: Alpine.js variable for search query (required) - results_var: Alpine.js variable containing search results array (required) - show_dropdown_var: Alpine.js variable controlling dropdown visibility (required) - loading_var: Alpine.js variable for loading state (default: 'searching') - disabled_var: Alpine.js variable for disabled state (default: none) - search_action: Alpine.js action on input (default: 'search()') - select_action: Alpine.js action when item selected, receives 'item' (required) - selected_check: Alpine.js expression to check if item is selected (optional) - display_field: Field name for primary display text (default: 'name') - secondary_field: Field name for secondary text (optional) - id_field: Field name for item ID (default: 'id') - placeholder: Input placeholder text (default: 'Search...') - min_chars: Minimum characters before showing results (default: 2) - no_results_text: Text when no results found (default: 'No results found') - loading_text: Text while loading (default: 'Searching...') #} {% macro search_autocomplete( search_var, results_var, show_dropdown_var, loading_var='searching', disabled_var=none, search_action='search()', select_action='selectItem(item)', selected_check=none, display_field='name', secondary_field=none, id_field='id', placeholder='Search...', min_chars=2, no_results_text='No results found', loading_text='Searching...' ) %}