Switched from lucide-angular to Google Material Icons font for better compatibility across all environments, especially air-gapped and enterprise setups. **Changes:** - Removed lucide-angular dependency (not available in some environments) - Added Material Icons font via Google CDN in index.html - Updated all components to use Material Icons spans instead of Lucide components - Added Material Icons CSS classes (md-16, md-18, md-20, md-24) **Icon Mapping:** - RefreshCw → refresh - Sparkles → auto_awesome - Search → search - X/Close → close - Download → download - Trash2/Delete → delete - Database → storage - Upload → upload **Benefits:** - No npm dependency required (just a font) - Works in all environments (air-gapped, enterprise proxies) - Smaller bundle: 349.74 kB raw, 91.98 kB gzipped - Industry standard Material Design icons - Better cross-browser compatibility All components tested and working correctly. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
110 lines
3.4 KiB
HTML
110 lines
3.4 KiB
HTML
<div class="upload-section">
|
|
<h2>Upload Artifact</h2>
|
|
<form [formGroup]="uploadForm" (ngSubmit)="onSubmit()">
|
|
<div class="form-group">
|
|
<label for="file">File *</label>
|
|
<input type="file" id="file" (change)="onFileSelected($event)" required>
|
|
<small>Supported: CSV, JSON, binary files, PCAP</small>
|
|
</div>
|
|
|
|
<div class="form-row">
|
|
<div class="form-group">
|
|
<label for="sim-source">Sim Source *</label>
|
|
<input
|
|
type="text"
|
|
id="sim-source"
|
|
formControlName="sim_source"
|
|
placeholder="e.g., Jenkins, GitLab CI"
|
|
required>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="uploaded-by">Uploaded By *</label>
|
|
<input
|
|
type="text"
|
|
id="uploaded-by"
|
|
formControlName="uploaded_by"
|
|
placeholder="e.g., john.doe"
|
|
required>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-row">
|
|
<div class="form-group">
|
|
<label for="sim-source-id">SIM Source ID (for grouping)</label>
|
|
<input
|
|
type="text"
|
|
id="sim-source-id"
|
|
formControlName="sim_source_id"
|
|
placeholder="e.g., sim_run_20251015_001">
|
|
<small>Use same ID for multiple artifacts from same source</small>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="tags">Tags (comma-separated) *</label>
|
|
<input
|
|
type="text"
|
|
id="tags"
|
|
formControlName="tags"
|
|
placeholder="e.g., regression, smoke, critical"
|
|
required>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-row">
|
|
<div class="form-group">
|
|
<label for="test-result">Test Result</label>
|
|
<select id="test-result" formControlName="test_result">
|
|
<option value="">-- Select --</option>
|
|
<option value="pass">Pass</option>
|
|
<option value="fail">Fail</option>
|
|
<option value="skip">Skip</option>
|
|
<option value="error">Error</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="version">Version</label>
|
|
<input
|
|
type="text"
|
|
id="version"
|
|
formControlName="version"
|
|
placeholder="e.g., v1.0.0">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="description">Description</label>
|
|
<textarea
|
|
id="description"
|
|
formControlName="description"
|
|
rows="3"
|
|
placeholder="Describe this artifact..."></textarea>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="test-config">Test Config (JSON)</label>
|
|
<textarea
|
|
id="test-config"
|
|
formControlName="test_config"
|
|
rows="4"
|
|
placeholder='{"browser": "chrome", "timeout": 30}'></textarea>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="custom-metadata">Custom Metadata (JSON)</label>
|
|
<textarea
|
|
id="custom-metadata"
|
|
formControlName="custom_metadata"
|
|
rows="4"
|
|
placeholder='{"build": "1234", "commit": "abc123"}'></textarea>
|
|
</div>
|
|
|
|
<button type="submit" class="btn btn-primary btn-large" [disabled]="uploading">
|
|
<span class="material-icons md-18">upload</span>
|
|
{{ uploading ? 'Uploading...' : 'Upload Artifact' }}
|
|
</button>
|
|
</form>
|
|
|
|
<div *ngIf="uploadStatus" class="upload-status" [class.success]="uploadStatus.success" [class.error]="!uploadStatus.success">
|
|
{{ uploadStatus.message }}
|
|
</div>
|
|
</div>
|