d175f92806
Implements FR-19: Preset import/export as JSON New Files: - src/core/PresetImportExportManager.js - Core logic for export/import with merge/replace - src/ui/gm/PresetExportDialog.js - Export dialog with file download - src/ui/gm/PresetImportDialog.js - Import dialog with file picker, preview, merge/replace - templates/preset-export.hbs - Export dialog template - templates/preset-import.hbs - Import dialog template - styles/components/_preset-import-export.less - Dialog styles - tests/unit/core/PresetImportExportManager.test.js - 38 unit tests - _bmad-output/implementation-artifacts/3-3-preset-import-and-export.md - Story file Modified Files: - src/ui/gm/DirectorsBoard.js - Added export/import button handlers - templates/directors-board.hbs - Added Export/Import buttons to footer - styles/scrying-pool.less - Added stylesheet import - lang/en.json - Added localization strings for new UI - _bmad-output/implementation-artifacts/sprint-status.yaml - Story status: review Features: - Export all presets from current scene as JSON file - Import presets with merge (add new, skip duplicates) or replace (overwrite all) modes - Preview of presets before import with validation status - Confirmation dialog for replace mode to prevent data loss - Comprehensive error handling and validation - All ACs satisfied (AC-9 deferred for README docs) Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
52 lines
2.3 KiB
Handlebars
52 lines
2.3 KiB
Handlebars
{{!-- Director's Board — GM camera-management overview window --}}
|
|
<section class="scrying-pool directors-board__content"
|
|
role="list"
|
|
aria-label="{{localize "video-view-manager.directorsBoard.title"}}">
|
|
|
|
{{#unless isEmpty}}
|
|
{{#each participants}}
|
|
{{> "modules/video-view-manager/templates/participant-card.hbs"}}
|
|
{{/each}}
|
|
{{else}}
|
|
<p class="directors-board__empty" role="listitem">
|
|
{{localize "video-view-manager.directorsBoard.empty"}}
|
|
</p>
|
|
{{/unless}}
|
|
|
|
</section>
|
|
|
|
<div class="directors-board__bulk-bar">
|
|
<button type="button" class="directors-board__bulk-btn" data-action="show-all">
|
|
{{localize "video-view-manager.directorsBoard.bulk.showAll"}}
|
|
</button>
|
|
<button type="button" class="directors-board__bulk-btn" data-action="hide-all">
|
|
{{localize "video-view-manager.directorsBoard.bulk.hideAll"}}
|
|
</button>
|
|
{{#if hasUndo}}
|
|
<button type="button" class="directors-board__bulk-btn directors-board__bulk-btn--undo" data-action="undo">
|
|
{{localize "video-view-manager.directorsBoard.bulk.undo"}}
|
|
</button>
|
|
{{/if}}
|
|
{{#if hasRestore}}
|
|
<button type="button" class="directors-board__bulk-btn directors-board__bulk-btn--restore" data-action="restore-spotlight">
|
|
{{localize "video-view-manager.directorsBoard.bulk.restore"}}
|
|
</button>
|
|
{{/if}}
|
|
<button type="button" class="directors-board__help-btn" data-action="open-shortcut-panel" aria-label="{{localize "video-view-manager.directorsBoard.shortcuts.openPanel"}}">?</button>
|
|
</div>
|
|
|
|
<footer class="directors-board__footer">
|
|
<button type="button" class="directors-board__footer-btn" data-action="save-preset">
|
|
{{localize "video-view-manager.directorsBoard.footer.savePreset"}}
|
|
</button>
|
|
<button type="button" class="directors-board__footer-btn" data-action="load-preset" {{#unless hasPresets}}disabled{{/unless}}>
|
|
{{localize "video-view-manager.directorsBoard.footer.loadPreset"}}
|
|
</button>
|
|
<button type="button" class="directors-board__footer-btn" data-action="export-presets">
|
|
{{localize "video-view-manager.directorsBoard.footer.exportPresets"}}
|
|
</button>
|
|
<button type="button" class="directors-board__footer-btn" data-action="import-presets">
|
|
{{localize "video-view-manager.directorsBoard.footer.importPresets"}}
|
|
</button>
|
|
</footer>
|