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>
61 lines
3.2 KiB
Plaintext
61 lines
3.2 KiB
Plaintext
/**
|
|
* styles/scrying-pool.less — Entry point (@imports only)
|
|
*
|
|
* Build: npm run build → dist/styles/scrying-pool.css
|
|
* Watch: npm run watch (chokidar detects changes in @import-ed partials)
|
|
*
|
|
* Import order: tokens (base → states → motion → focus) → components
|
|
*/
|
|
|
|
// ── Token layers ─────────────────────────────────────────────────────────────
|
|
@import "tokens/_base.less";
|
|
@import "tokens/_states.less";
|
|
@import "tokens/_motion.less";
|
|
@import "tokens/_focus.less";
|
|
|
|
// ── Component styles ──────────────────────────────────────────────────────────
|
|
@import "components/_participant-card.less";
|
|
@import "components/_roster-strip.less";
|
|
@import "components/_directors-board.less";
|
|
@import "components/_scene-preset-panel.less";
|
|
@import "components/_notification.less";
|
|
@import "components/_player-badge.less";
|
|
@import "components/_player-panel.less";
|
|
// Story 3.2: ConfirmationBar and StripOverlayLayer
|
|
@import "components/_strip-overlay-layer.less";
|
|
@import "components/_confirmation-bar.less";
|
|
// Story 3.3: Preset Import/Export Dialogs
|
|
@import "components/_preset-import-export.less";
|
|
|
|
/*
|
|
* VisibilityBadge :root exception
|
|
* ─────────────────────────────────────────────────────────────────────────────
|
|
* PlayerStatusBadge (FR-22) is mounted directly onto Foundry's AV tile DOM,
|
|
* OUTSIDE the .scrying-pool root element. Its state tokens must therefore be
|
|
* declared on :root rather than scoped under .scrying-pool.
|
|
*
|
|
* This is an intentional architectural exception — all other module CSS MUST
|
|
* remain scoped under .scrying-pool. Do not add additional :root declarations
|
|
* without documenting the architectural reason here.
|
|
*
|
|
* The badge tokens are a subset of the Layer 2 state tokens declared in
|
|
* _states.less, re-exported on :root for badge accessibility outside the root.
|
|
*/
|
|
:root {
|
|
--sp-badge-state-active-bg: var(--sp-state-active-bg);
|
|
--sp-badge-state-active-text: var(--sp-state-active-text);
|
|
--sp-badge-state-hidden-bg: var(--sp-state-hidden-bg);
|
|
--sp-badge-state-hidden-text: var(--sp-state-hidden-text);
|
|
--sp-badge-state-self-muted-bg: var(--sp-state-self-muted-bg);
|
|
--sp-badge-state-self-muted-text: var(--sp-state-self-muted-text);
|
|
--sp-badge-state-offline-bg: var(--sp-state-offline-bg);
|
|
--sp-badge-state-offline-text: var(--sp-state-offline-text);
|
|
--sp-badge-state-cam-lost-bg: var(--sp-state-cam-lost-bg);
|
|
--sp-badge-state-cam-lost-text: var(--sp-state-cam-lost-text);
|
|
--sp-badge-state-reconnecting-bg: var(--sp-state-reconnecting-bg);
|
|
--sp-badge-state-reconnecting-text: var(--sp-state-reconnecting-text);
|
|
/* Badge surface & text (badge mounts outside .scrying-pool root) */
|
|
--sp-badge-surface: var(--sp-badge-bg, rgba(0, 0, 0, 0.72));
|
|
--sp-badge-color: var(--sp-badge-text, #dde2e8);
|
|
}
|