mirror of
https://github.com/olehomelchenko/astrolabe-nvc.git
synced 2025-12-21 21:22:23 +00:00
276 lines
14 KiB
HTML
276 lines
14 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Astrolabe - Vega-Lite Snippet Manager</title>
|
||
<link rel="stylesheet" href="src/styles.css">
|
||
|
||
<!-- Monaco Editor -->
|
||
<script src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.47.0/min/vs/loader.js"></script>
|
||
</head>
|
||
|
||
<body>
|
||
<!-- Header -->
|
||
<div class="header">
|
||
<div class="header-left">
|
||
<span class="header-icon">🔭</span>
|
||
<span class="header-title">Astrolabe</span>
|
||
</div>
|
||
<div class="header-links">
|
||
<span class="header-link" id="import-link">Import</span>
|
||
<span class="header-link" id="export-link">Export</span>
|
||
<span class="header-link" id="datasets-link">Datasets</span>
|
||
<span class="header-link" id="help-link">Help</span>
|
||
<input type="file" id="import-file-input" accept=".json" style="display: none;" />
|
||
</div>
|
||
</div>
|
||
|
||
<div class="app-container">
|
||
<!-- Toggle Button Strip -->
|
||
<div class="toggle-strip">
|
||
<button class="btn btn-icon xlarge active" id="toggle-snippet-panel" title="Toggle Snippets Panel">
|
||
📄
|
||
</button>
|
||
<button class="btn btn-icon xlarge active" id="toggle-editor-panel" title="Toggle Editor Panel">
|
||
✏️
|
||
</button>
|
||
<button class="btn btn-icon xlarge active" id="toggle-preview-panel" title="Toggle Preview Panel">
|
||
👁️
|
||
</button>
|
||
<button class="btn btn-icon xlarge" id="toggle-datasets" title="Datasets">
|
||
📁
|
||
</button>
|
||
</div>
|
||
|
||
<div class="main-panels">
|
||
<!-- Snippet Library Panel -->
|
||
<div class="panel snippet-panel" id="snippet-panel">
|
||
<div class="panel-header">
|
||
Snippets
|
||
</div>
|
||
<div class="sort-controls">
|
||
<span class="sort-label">Sort by:</span>
|
||
<button class="sort-btn active" data-sort="modified">
|
||
<span class="sort-text">Modified</span>
|
||
<span class="sort-arrow">⬇</span>
|
||
</button>
|
||
<button class="sort-btn" data-sort="created">
|
||
<span class="sort-text">Created</span>
|
||
<span class="sort-arrow">⬇</span>
|
||
</button>
|
||
<button class="sort-btn" data-sort="name">
|
||
<span class="sort-text">Name</span>
|
||
<span class="sort-arrow">⬇</span>
|
||
</button>
|
||
</div>
|
||
<div class="search-controls">
|
||
<input type="text" id="snippet-search" placeholder="Search snippets..." />
|
||
<button class="btn btn-icon" id="search-clear" title="Clear search">×</button>
|
||
</div>
|
||
<div class="panel-content">
|
||
<ul class="snippet-list">
|
||
<!-- Dynamically populated by renderSnippetList() -->
|
||
</ul>
|
||
<div class="placeholder">
|
||
Click to select a snippet
|
||
</div>
|
||
<div class="snippet-meta" id="snippet-meta" style="display: none;">
|
||
<div class="meta-header">Name</div>
|
||
<input type="text" id="snippet-name" class="input small" placeholder="Snippet name..." />
|
||
|
||
<div class="meta-header">Comment</div>
|
||
<textarea id="snippet-comment" class="input textarea medium" placeholder="Add a comment..." rows="3"></textarea>
|
||
|
||
<div class="meta-info">
|
||
<div class="meta-info-item">
|
||
<span class="meta-info-label">Created:</span>
|
||
<span id="snippet-created"></span>
|
||
</div>
|
||
<div class="meta-info-item">
|
||
<span class="meta-info-label">Modified:</span>
|
||
<span id="snippet-modified"></span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="meta-actions">
|
||
<button class="btn btn-standard flex" id="duplicate-btn">Duplicate</button>
|
||
<button class="btn btn-standard flex danger" id="delete-btn">Delete</button>
|
||
</div>
|
||
</div>
|
||
<div class="storage-monitor" id="storage-monitor">
|
||
<div class="storage-info">
|
||
<span class="storage-label">Storage:</span>
|
||
<span class="storage-text" id="storage-text">0 KB / 5 MB</span>
|
||
</div>
|
||
<div class="storage-bar">
|
||
<div class="storage-fill" id="storage-fill"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Resize Handle 1 -->
|
||
<div class="resize-handle" id="resize-handle-1"></div>
|
||
|
||
<!-- Editor Panel -->
|
||
<div class="panel editor-panel" id="editor-panel">
|
||
<div class="panel-header">
|
||
<span>Editor</span>
|
||
<div class="editor-controls">
|
||
<button class="btn btn-action publish" id="publish-btn">Publish</button>
|
||
<button class="btn btn-action revert" id="revert-btn">Revert</button>
|
||
<span class="view-label">View:</span>
|
||
<div class="view-toggle-group">
|
||
<button class="btn btn-toggle active" id="view-draft">Draft</button>
|
||
<button class="btn btn-toggle" id="view-published">Published</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="panel-content">
|
||
<div id="monaco-editor" style="height: 100%; width: 100%;"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Resize Handle 2 -->
|
||
<div class="resize-handle" id="resize-handle-2"></div>
|
||
|
||
<!-- Preview Panel -->
|
||
<div class="panel preview-panel" id="preview-panel">
|
||
<div class="panel-header">
|
||
Preview
|
||
</div>
|
||
<div class="panel-content">
|
||
<div id="vega-preview" style="height: 100%; width: 100%; overflow: auto;"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Dataset Manager Modal -->
|
||
<div id="dataset-modal" class="modal" style="display: none;">
|
||
<div class="modal-content">
|
||
<div class="modal-header">
|
||
<span class="modal-title">Dataset Manager</span>
|
||
<button class="btn btn-icon" id="dataset-modal-close">×</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<!-- List View (default) -->
|
||
<div id="dataset-list-view" class="dataset-view">
|
||
<div class="dataset-list-header">
|
||
<button class="btn btn-modal primary" id="new-dataset-btn">New Dataset</button>
|
||
</div>
|
||
<div class="dataset-container">
|
||
<div class="dataset-list" id="dataset-list">
|
||
<!-- Dynamically populated by renderDatasetList() -->
|
||
</div>
|
||
<div class="dataset-details" id="dataset-details" style="display: none;">
|
||
<div class="dataset-detail-section">
|
||
<div class="dataset-detail-header">Name</div>
|
||
<input type="text" id="dataset-detail-name" class="input" placeholder="Dataset name..." />
|
||
|
||
<div class="dataset-detail-header">Comment</div>
|
||
<textarea id="dataset-detail-comment" class="input textarea" placeholder="Add a comment..." rows="3"></textarea>
|
||
|
||
<div class="dataset-detail-header-row">
|
||
<span class="dataset-detail-header">Statistics</span>
|
||
<button class="btn btn-icon large" id="refresh-metadata-btn" style="display: none;" title="Refresh metadata from URL">🔄</button>
|
||
</div>
|
||
<div class="stats-box">
|
||
<div class="stat-item">
|
||
<span class="stat-label">Rows:</span>
|
||
<span id="dataset-detail-rows">0</span>
|
||
</div>
|
||
<div class="stat-item">
|
||
<span class="stat-label">Columns:</span>
|
||
<span id="dataset-detail-columns">0</span>
|
||
</div>
|
||
<div class="stat-item">
|
||
<span class="stat-label">Size:</span>
|
||
<span id="dataset-detail-size">0 B</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="dataset-detail-header">Timestamps</div>
|
||
<div class="stats-box">
|
||
<div class="stat-item">
|
||
<span class="stat-label">Created:</span>
|
||
<span id="dataset-detail-created">-</span>
|
||
</div>
|
||
<div class="stat-item">
|
||
<span class="stat-label">Modified:</span>
|
||
<span id="dataset-detail-modified">-</span>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="dataset-detail-header">Preview</div>
|
||
<pre id="dataset-preview" class="preview-box large"></pre>
|
||
|
||
<div class="dataset-actions">
|
||
<button class="btn btn-modal" id="copy-reference-btn">Copy Reference</button>
|
||
<button class="btn btn-modal danger" id="delete-dataset-btn">Delete</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Form View (for creating new datasets) -->
|
||
<div id="dataset-form-view" class="dataset-view" style="display: none;">
|
||
<div class="dataset-form">
|
||
<div class="dataset-form-header">Create New Dataset</div>
|
||
|
||
<div class="dataset-form-group">
|
||
<label class="dataset-form-label">Name *</label>
|
||
<input type="text" id="dataset-form-name" class="input" placeholder="Enter dataset name..." />
|
||
</div>
|
||
|
||
<div class="dataset-form-group">
|
||
<label class="dataset-form-label">Data or URL *</label>
|
||
<div class="dataset-format-hint">
|
||
Paste your data (JSON, CSV, or TSV) or a URL. Format will be detected automatically.
|
||
</div>
|
||
<textarea id="dataset-form-input" class="input textarea" placeholder="Paste data or URL here..." rows="12"></textarea>
|
||
</div>
|
||
|
||
<!-- Detection Confirmation UI -->
|
||
<div id="dataset-detection-confirm" class="dataset-detection-confirm" style="display: none;">
|
||
<div class="detection-header">
|
||
<span class="detection-title">Detected:</span>
|
||
<div class="detection-badges">
|
||
<span class="detection-badge" id="detected-format">JSON</span>
|
||
<span class="detection-badge" id="detected-source">Inline</span>
|
||
<span class="detected-confidence high" id="detected-confidence">high confidence</span>
|
||
</div>
|
||
</div>
|
||
<div class="detection-preview-label">Preview:</div>
|
||
<pre id="detected-preview" class="preview-box medium"></pre>
|
||
</div>
|
||
|
||
<div class="dataset-form-group">
|
||
<label class="dataset-form-label">Comment</label>
|
||
<textarea id="dataset-form-comment" class="input textarea" placeholder="Optional description..." rows="3"></textarea>
|
||
</div>
|
||
|
||
<div class="dataset-form-error" id="dataset-form-error"></div>
|
||
|
||
<div class="dataset-form-actions">
|
||
<button class="btn btn-modal primary" id="save-dataset-btn">Save Dataset</button>
|
||
<button class="btn btn-modal" id="cancel-dataset-btn">Cancel</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<script src="src/js/config.js"></script>
|
||
<script src="src/js/snippet-manager.js"></script>
|
||
<script src="src/js/dataset-manager.js"></script>
|
||
<script src="src/js/panel-manager.js"></script>
|
||
<script src="src/js/editor.js"></script>
|
||
<script src="src/js/app.js"></script>
|
||
</body>
|
||
|
||
</html> |