* Replace masonry with gridstack
* Initial work on dashboard widgets
* Implement function to save dashboard layout
* Define a default dashboard
* Clean up widgets
* Implement widget configuration views & forms
* Permit merging dict value with existing dict in user config
* Add widget deletion view
* Enable HTMX for widget configuration
* Implement view to add dashboard widgets
* ObjectCountsWidget: Identify models by app_label & name
* Add color customization to dashboard widgets
* Introduce Dashboard model to store user dashboard layout & config
* Clean up utility functions
* Remove hard-coded API URL
* Use fixed grid cell height
* Add modal close button
* Clean up dashboard views
* Rebuild JS
* WIP
* Add config_template field to Device
* Pre-fetch referenced templates
* Correct up_to_date callable
* Add config_template FK to Device
* Update & merge migrations
* Add config_template FK to Platform
* Add tagging support for ConfigTemplate
* Catch exceptions when rendering device templates in UI
* Refactor ConfigTemplate.render()
* Add support for returning plain text content
* Add ConfigTemplate model documentation
* Add feature documentation for config rendering
* Add interval to JobResult
* Accept a recurrence interval when executing scripts & reports
* Cleaned up jobs list display
* Schedule next job only if a reference start time can be determined
* Improve validation for scheduled jobs
* Added JobResult form filtersets
* Change housekeeping cleanup delete from `_raw_delete` to `delete` to make sure scheduled tasks are cancelled
* Change default sort of JobResult table to -created
* Added `delete` override to `JobResult` to remove scheduled tasks from RQ when a JobResult is deleted
* Updated js/css dist files. Will need to be redone when develop is merged to feature.