- Added a preview link for bundles in the wizard settings page. closes#1048
- Enhanced the wizard steps template to handle bundle preview mode.
- Updated JavaScript to generate URLs for bundle preview and runtime modes.
- Improved test coverage for password reset token generation by asserting token creation.
- Updated the sub-navigation for the wizard to conditionally display step creation options based on the default state and available bundles.
- Improved the bundles page layout by categorizing steps into pre-invite, post-invite, and additional categories, enhancing user experience.
- Added orphaned step handling to allow users to remove steps that no longer have an associated entry.
- Displayed the associated wizard bundle name in the invite card if applicable.
- Adjusted JavaScript routing for bundle steps in the wizard.
- Modified the development script to set the NODE_ENV to development when installing npm dependencies, ensuring proper handling of devDependencies.
- Updated the subproject reference in the plus directory to indicate a dirty state.
Hide the phase indicator in the wizard steps template unless the wizard is in "preview" mode. This change applies to both mobile and desktop views of the progress bar.
The progress bar on the wizard steps was always being rendered, even when there was only one step. This commit fixes that by wrapping the progress bar HTML within an `{% if max_idx > 0 %}` conditional. This ensures the progress bar (step count and percentage) is only displayed when there are actually multiple steps to show progress for, for both mobile and desktop views.
Additionally, the JavaScript logic for updating progress bar values was refined. It now specifically targets the flex container with the `justify-between` class to locate the step and percentage spans, ensuring it doesn't accidentally interfere with the phase indicator's flex container, which has `justify-center`. This improves the robustness of the progress bar update mechanism.
This commit implements two improvements to the combo wizard invitation flow:
1. Badge Display Fix: Added the "pre-invite" / "post-invite" category badge
above wizard steps in combo invites. This badge was already present in
single-invite pages but was missing from combo invites.
2. URL Refactoring: Cleaned up combo wizard URLs to match the pattern used
by single-invite wizards:
- Before: /wizard/combo/0?category=pre_invite → /j/<code> → /wizard/combo/0?category=post_invite
- After: /wizard/combo/pre_invite → /j/<code> → /wizard/combo/post_invite
This makes combo URLs consistent with single-invite URLs
(/wizard/pre-wizard → /wizard/post-wizard) by removing the step index
from the path and using path-based category routing.
Changes include:
- Pass step_phase to template for badge display
- Update routes to use path-based categories instead of query parameters
- Update templates and JavaScript to handle new URL structure
- Fix form method attributes and template formatting
Migration Changes:
- Renamed migration file from 20251004 to 20251005
- Updated down_revision from fd5a34530162 to 08a6c8fb44db
- Ensures migration runs after upstream notification events migration
- Fixes migration chain branching issue
- Removed incorrect merge migration (1e83c67d9785)
Migration chain is now:
fd5a34530162 (disabled attribute) → 08a6c8fb44db (notification events)
→ 20251005_add_category_to_wizard_step (wizard category)
Wizard Refactoring:
- Enhanced uniqueness constraint for WizardStep from (server_type, position)
to (server_type, category, position)
- Ensures steps in different categories (pre_invite vs post_invite) can have
the same position indexing without conflict
- Updated wizard state management documentation to explicitly list and
describe data-* attributes used in steps.html template
Code Quality:
- Applied djlint formatting to 8 template files to minimize rebase conflicts
- Applied ruff format and ruff check --fix (no changes needed)
- Removed redundant requirement comments from spec-driven development
- Fixed case sensitivity in test assertion (POST vs post)
- Updated test references from 20251004 to 20251005 to match corrected
migration revision ID
Now supports multiple next buttons in interaction gating
Refactor the `attachInteractionGating` function to handle multiple "next" buttons, specifically for mobile and desktop versions.
The previous implementation only considered a single `#next-btn` element. This change updates it to find both `#wizard-next-btn` and `#wizard-next-btn-desktop`, allowing interaction gating to apply to all relevant next buttons.
A shared `enableAllButtons` function is introduced to ensure that once interaction is detected in the content, all next buttons are enabled simultaneously. Store button-specific handlers for proper cleanup.
Also, ensure the `attachInteractionGating` function is re-initialized after HTMX processes new content.
- Changed "Steps of" updates to preserve localization (by targeting exact child elements)
- Fixes issue of Wizard steps staying at 1 when user's locale is not English
- Updated title block in frame.html for clarity.
- Improved localization for the "Next" button in steps.html.
- Refactored the WizardController JavaScript for better readability and organization.
- Added detailed comments to the wizard architecture for future reference.
- Enhanced button visibility and state management based on interaction requirements.
- Implemented swipe gesture handling for mobile navigation.
- Updated subproject commit to indicate a dirty state.
Add comprehensive "require interaction" functionality for wizard steps that prevents users from proceeding until they engage with step content.
## Key Features:
- **Database Integration**: New `require_interaction` boolean field in WizardStep model with migration
- **Frontend Gating**: Robust JavaScript system that disables "Next" button until user clicks links/buttons in step content
- **UI Enhancement**: Improved checkbox forms with clear descriptions and visual indicators
- **Event Handling**: Advanced interaction detection with proper HTMX disabling and event capture
- **Admin Interface**: Full integration with wizard configuration forms (main and simple)
- **Export/Import**: Support for require_interaction field in wizard step data operations
## Technical Implementation:
- Disabled button state management with pointer-events and tabindex control
- HTMX attribute manipulation to prevent premature navigation
- Event listener capture phase handling for reliable interaction blocking
- Comprehensive test coverage for interaction scenarios
- Form validation and user experience improvements
## Files Modified:
- Backend: models, routes, forms, services, migration
- Frontend: JavaScript interaction logic, templates, UI components
- Testing: Complete test suite for interaction requirements
This feature ensures users engage with critical wizard content before proceeding, improving onboarding experience and preventing accidental step skipping.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Prevent brief "content flash" during wizard step transitions (initial load, after first nav click)
- Ensure consistent layout by fixing overflow-x-hidden not applying correctly
- Split shared layout into steps/frame.html to avoid multiple base.html rendering after every nav click