**Asset Deployment Infrastructure:** - Enhanced RenderingEngineManager with complete asset deployment - Automatic plugin source directory discovery and asset copying - File system operations with proper directory structure preservation - Comprehensive error handling for missing assets **CLI Integration:** - Automatic asset deployment when using plugin engines - Verbose output showing deployment progress and statistics - Asset verification and accessibility validation - Production-ready deployment to _markitect/plugins/ structure **TestDrive JSUI Assets:** - Complete CSS asset suite (editor, controls, GitHub theme) - Placeholder image assets for testing deployment - Proper asset organization following plugin conventions - All 18 assets now deployed correctly **Testing Infrastructure:** - Comprehensive asset deployment testing - CLI integration verification with asset shipping - File existence and accessibility validation - Complete directory structure verification **Key Features:** - Assets deployed to `_markitect/plugins/testdrive-jsui/` when using --edit - HTML references match deployed asset locations - 18 total assets: 12 JS, 3 CSS, 3 images - Automatic deployment without --ship-assets flag needed - Clean separation of development vs production asset handling **Example Output:** ``` 🎯 Using rendering engine: testdrive-jsui (supports: edit, view) 📦 Deploying assets for engine 'testdrive-jsui'... 📄 Deployed 18 asset files js: 12 files css: 3 files images: 3 files ✅ Rendered with INTERACTIVE editing mode ``` This fixes the "HTML assets not found" issue when using explicit output directories with plugin engines. All plugin assets are now properly deployed and accessible. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
135 lines
2.5 KiB
CSS
135 lines
2.5 KiB
CSS
/**
|
|
* TestDrive JSUI Control Panel Styles
|
|
*
|
|
* Styles for individual control panels
|
|
*/
|
|
|
|
/* Contents Control (Northwest) */
|
|
.contents-control {
|
|
max-height: 300px;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
.contents-control .toc-item {
|
|
padding: 0.25rem 0;
|
|
cursor: pointer;
|
|
border-radius: 3px;
|
|
padding-left: 0.5rem;
|
|
}
|
|
|
|
.contents-control .toc-item:hover {
|
|
background-color: #f8f9fa;
|
|
}
|
|
|
|
.contents-control .toc-h1 { font-weight: bold; }
|
|
.contents-control .toc-h2 { margin-left: 1rem; }
|
|
.contents-control .toc-h3 { margin-left: 2rem; font-size: 0.9em; }
|
|
|
|
/* Status Control (East) */
|
|
.status-control {
|
|
text-align: center;
|
|
}
|
|
|
|
.status-metric {
|
|
padding: 0.5rem;
|
|
margin: 0.25rem 0;
|
|
background: #f8f9fa;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
.status-metric .metric-value {
|
|
font-size: 1.5em;
|
|
font-weight: bold;
|
|
color: #007bff;
|
|
}
|
|
|
|
.status-metric .metric-label {
|
|
font-size: 0.8em;
|
|
color: #6c757d;
|
|
}
|
|
|
|
/* Debug Control (Southeast) */
|
|
.debug-control {
|
|
font-family: monospace;
|
|
}
|
|
|
|
.debug-control .debug-header {
|
|
background: #343a40;
|
|
color: #fff;
|
|
padding: 0.5rem;
|
|
margin: -0.75rem -0.75rem 0.5rem -0.75rem;
|
|
border-radius: 5px 5px 0 0;
|
|
}
|
|
|
|
.debug-control .debug-logs {
|
|
max-height: 200px;
|
|
overflow-y: auto;
|
|
background: #f8f9fa;
|
|
padding: 0.5rem;
|
|
margin: 0 -0.75rem -0.75rem -0.75rem;
|
|
border-radius: 0 0 5px 5px;
|
|
font-size: 0.8em;
|
|
}
|
|
|
|
/* Edit Control (Northeast) */
|
|
.edit-control {
|
|
text-align: center;
|
|
}
|
|
|
|
.edit-control .control-button {
|
|
display: block;
|
|
width: 100%;
|
|
margin: 0.5rem 0;
|
|
padding: 0.5rem;
|
|
background: #007bff;
|
|
color: #fff;
|
|
border: none;
|
|
border-radius: 4px;
|
|
cursor: pointer;
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
.edit-control .control-button:hover {
|
|
background: #0056b3;
|
|
}
|
|
|
|
.edit-control .control-button:disabled {
|
|
background: #6c757d;
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
.edit-control .control-button.danger {
|
|
background: #dc3545;
|
|
}
|
|
|
|
.edit-control .control-button.danger:hover {
|
|
background: #c82333;
|
|
}
|
|
|
|
/* Control panel animations */
|
|
.markitect-control-panel {
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
.markitect-control-panel.entering {
|
|
opacity: 0;
|
|
transform: scale(0.9);
|
|
}
|
|
|
|
.markitect-control-panel.entered {
|
|
opacity: 1;
|
|
transform: scale(1);
|
|
}
|
|
|
|
/* Responsive adjustments */
|
|
@media (max-width: 768px) {
|
|
.markitect-control-panel {
|
|
position: fixed !important;
|
|
top: auto !important;
|
|
bottom: 10px !important;
|
|
left: 10px !important;
|
|
right: 10px !important;
|
|
transform: none !important;
|
|
max-width: none !important;
|
|
}
|
|
} |