{# Datepicker Macros ================= Date and time picker components using Flatpickr with Alpine.js integration. Prerequisites: Add Flatpickr CDN to your base template: Usage: {% from 'shared/macros/datepicker.html' import datepicker, daterange_picker, datetime_picker %} {# Basic date picker #} {{ datepicker('startDate', 'formData.startDate', label='Start Date') }} {# Date range picker #} {{ daterange_picker('dateRange', 'formData.dateRange', label='Date Range') }} {# Date and time picker #} {{ datetime_picker('scheduledAt', 'formData.scheduledAt', label='Schedule') }} #} {# Datepicker ========== A single date picker input. Parameters: - id: Unique ID for the input - x_model: Alpine.js x-model binding - label: Input label (optional) - placeholder: Placeholder text (default: 'Select date') - format: Date format (default: 'Y-m-d') - min_date: Minimum selectable date (default: none) - max_date: Maximum selectable date (default: none) - disabled: Alpine.js expression for disabled state - required: Whether the field is required - error: Alpine.js expression for error message - class_extra: Additional CSS classes #} {% macro datepicker(id, x_model, label=none, placeholder='Select date', format='Y-m-d', min_date=none, max_date=none, disabled=none, required=false, error=none, class_extra='') %}
{% if label %} {% endif %}
{% if error %}

{% endif %}
{% endmacro %} {# Date Range Picker ================= A date range picker for selecting start and end dates. Parameters: - id: Unique ID for the input - x_model: Alpine.js x-model binding (will contain "YYYY-MM-DD to YYYY-MM-DD") - label: Input label (optional) - placeholder: Placeholder text (default: 'Select date range') - format: Date format (default: 'Y-m-d') - min_date: Minimum selectable date - max_date: Maximum selectable date - disabled: Alpine.js expression for disabled state - required: Whether the field is required #} {% macro daterange_picker(id, x_model, label=none, placeholder='Select date range', format='Y-m-d', min_date=none, max_date=none, disabled=none, required=false) %}
{% if label %} {% endif %}
{% endmacro %} {# DateTime Picker =============== A date and time picker. Parameters: - id: Unique ID for the input - x_model: Alpine.js x-model binding - label: Input label (optional) - placeholder: Placeholder text (default: 'Select date and time') - format: DateTime format (default: 'Y-m-d H:i') - enable_time: Whether to enable time selection (default: true) - time_24hr: Use 24-hour time format (default: true) - minute_increment: Minute increment for time picker (default: 5) - min_date: Minimum selectable date - max_date: Maximum selectable date - disabled: Alpine.js expression for disabled state - required: Whether the field is required #} {% macro datetime_picker(id, x_model, label=none, placeholder='Select date and time', format='Y-m-d H:i', enable_time=true, time_24hr=true, minute_increment=5, min_date=none, max_date=none, disabled=none, required=false) %}
{% if label %} {% endif %}
{% endmacro %} {# Time Picker =========== A time-only picker. Parameters: - id: Unique ID for the input - x_model: Alpine.js x-model binding - label: Input label (optional) - placeholder: Placeholder text (default: 'Select time') - format: Time format (default: 'H:i') - time_24hr: Use 24-hour time format (default: true) - minute_increment: Minute increment (default: 5) - disabled: Alpine.js expression for disabled state - required: Whether the field is required #} {% macro time_picker(id, x_model, label=none, placeholder='Select time', format='H:i', time_24hr=true, minute_increment=5, disabled=none, required=false) %}
{% if label %} {% endif %}
{% endmacro %} {# Month Picker ============ A month-only picker for selecting year and month. Parameters: - id: Unique ID for the input - x_model: Alpine.js x-model binding - label: Input label (optional) - placeholder: Placeholder text (default: 'Select month') - format: Month format (default: 'F Y') - disabled: Alpine.js expression for disabled state - required: Whether the field is required #} {% macro month_picker(id, x_model, label=none, placeholder='Select month', format='F Y', disabled=none, required=false) %}
{% if label %} {% endif %}
{% endmacro %} {# Inline Datepicker ================= An inline calendar picker (always visible). Parameters: - id: Unique ID for the element - x_model: Alpine.js x-model binding - format: Date format (default: 'Y-m-d') - min_date: Minimum selectable date - max_date: Maximum selectable date #} {% macro inline_datepicker(id, x_model, format='Y-m-d', min_date=none, max_date=none) %}
{% endmacro %} {# Flatpickr Dark Mode Styles ========================== Include this in your base template for dark mode support. The dark theme CSS is loaded conditionally. #} {% macro datepicker_dark_mode_script() %} {% endmacro %}