feat: enhance card customization options and UI layout in the editor

This commit is contained in:
Ross
2026-01-04 21:50:37 +00:00
parent cda15991e3
commit de9ed94dbf
3 changed files with 543 additions and 150 deletions
+241 -108
View File
@@ -445,10 +445,69 @@
border: 1px solid #f5c6cb;
}
.status-info {
background: #d1ecf1;
color: #0c5460;
border: 1px solid #bee5eb;
.config-section {
margin-bottom: 20px;
border: 1px solid #e0e0e0;
border-radius: 6px;
overflow: hidden;
}
.config-section h4 {
margin: 0;
padding: 12px 15px;
background: #f8f9fa;
border-bottom: 1px solid #e0e0e0;
font-size: 14px;
font-weight: 600;
color: #2c3e50;
cursor: pointer;
display: flex;
justify-content: space-between;
align-items: center;
}
.config-section h4:hover {
background: #e9ecef;
}
.config-section h4::after {
content: "▼";
font-size: 12px;
transition: transform 0.3s;
}
.config-section.collapsed h4::after {
transform: rotate(-90deg);
}
.section-controls {
padding: 10px 15px;
background: #f8f9fa;
border-bottom: 1px solid #e0e0e0;
}
.section-content {
padding: 15px;
}
.position-controls {
display: flex;
gap: 15px;
align-items: end;
}
.form-group.inline {
flex: 1;
margin-bottom: 0;
}
.form-group.inline label {
font-size: 12px;
margin-bottom: 2px;
}
.form-group.inline input {
width: 100%;
}
.loading {
@@ -607,127 +666,201 @@
<div class="section">
<h3 id="card-editor-title">Edit Card</h3>
<div class="form-group">
<label for="card-template-preset">Template Preset</label>
<select id="card-template-preset">
<option value="">Custom</option>
<option value="classic">Classic</option>
<option value="frozen">Frozen</option>
<option value="minimal">Minimal</option>
<option value="vintage">Vintage</option>
<option value="comic">Comic</option>
</select>
</div>
<!-- Background/Style Section -->
<div class="config-section">
<h4>Style</h4>
<div class="section-content">
<div class="form-group">
<label for="card-template-preset">Template Preset</label>
<select id="card-template-preset">
<option value="">Custom</option>
<option value="classic">Classic</option>
<option value="frozen">Frozen</option>
<option value="minimal">Minimal</option>
<option value="vintage">Vintage</option>
<option value="comic">Comic</option>
<option value="polaroid">Polaroid</option>
</select>
</div>
<div class="form-group">
<label for="card-background-style">Background Style</label>
<select id="card-background-style">
<option value="solid">Solid</option>
<option value="gradient">Gradient</option>
<option value="pattern">Pattern</option>
<option value="comic">Comic</option>
</select>
</div>
<div class="form-group">
<label for="card-background-style">Background Style</label>
<select id="card-background-style">
<option value="solid">Solid</option>
<option value="gradient">Gradient</option>
<option value="pattern">Pattern</option>
<option value="comic">Comic</option>
<option value="polaroid">Polaroid</option>
</select>
</div>
<div class="form-group">
<label for="card-font-family">Font Family</label>
<select id="card-font-family">
<option value="Arial">Arial</option>
<option value="Georgia">Georgia</option>
<option value="Times New Roman">Times New Roman</option>
<option value="Comic Sans MS">Comic Sans MS</option>
<option value="Impact">Impact</option>
<option value="Courier New">Courier New</option>
</select>
</div>
<div class="form-group">
<label for="card-font-family">Font Family</label>
<select id="card-font-family">
<option value="Arial">Arial</option>
<option value="Georgia">Georgia</option>
<option value="Times New Roman">Times New Roman</option>
<option value="Comic Sans MS">Comic Sans MS</option>
<option value="Impact">Impact</option>
<option value="Courier New">Courier New</option>
</select>
</div>
<div class="form-group">
<label for="card-font-weight">Font Weight</label>
<select id="card-font-weight">
<option value="normal">Normal</option>
<option value="bold">Bold</option>
</select>
</div>
<div class="form-group">
<label for="card-footer-color">Footer Color</label>
<div class="color-picker">
<input type="color" id="card-footer-color" value="#111111" class="color-input">
<input type="text" id="card-footer-color-text" value="#111111" class="color-value" readonly>
<div class="form-group">
<label for="card-font-weight">Font Weight</label>
<select id="card-font-weight">
<option value="normal">Normal</option>
<option value="bold">Bold</option>
</select>
</div>
</div>
</div>
<div class="form-group">
<label for="card-title-input">Title</label>
<input type="text" id="card-title-input" placeholder="Enter card title">
<div class="checkbox-group inline">
<input type="checkbox" id="card-show-title" checked>
<label for="card-show-title">Show title</label>
<!-- Title Section -->
<div class="config-section" id="title-section">
<h4>Title</h4>
<div class="section-controls">
<div class="checkbox-group">
<input type="checkbox" id="card-show-title" checked>
<label for="card-show-title">Show title</label>
</div>
</div>
<div class="section-content">
<div class="form-group">
<label for="card-title-input">Title Text</label>
<input type="text" id="card-title-input" placeholder="Enter card title">
</div>
<div class="form-group">
<label>Title Style</label>
<div class="title-style-grid">
<div class="title-style-option" data-style="folded">Folded</div>
<div class="title-style-option" data-style="condensed">Condensed</div>
<div class="title-style-option" data-style="outlined">Outlined</div>
<div class="title-style-option selected" data-style="classic">Classic</div>
</div>
</div>
<div class="form-group">
<label for="card-title-color">Title Color</label>
<div class="color-picker">
<input type="color" id="card-title-color" value="#111111" class="color-input">
<input type="text" id="card-title-color-text" value="#111111" class="color-value" readonly>
</div>
</div>
<div class="checkbox-group">
<input type="checkbox" id="card-title-shadow">
<label for="card-title-shadow">Title shadow</label>
</div>
<div class="form-group">
<label for="card-title-font-size">Title Font Size (px)</label>
<input type="number" id="card-title-font-size" value="20" min="10" max="200" step="5">
</div>
<div class="form-group">
<label>Title Position</label>
<div class="position-controls">
<div class="form-group inline">
<label for="card-title-x">X (%)</label>
<input type="number" id="card-title-x" value="50" min="0" max="100" step="1">
</div>
<div class="form-group inline">
<label for="card-title-y">Y (%)</label>
<input type="number" id="card-title-y" value="20" min="0" max="100" step="1">
</div>
</div>
<div class="checkbox-group">
<input type="checkbox" id="card-title-draggable">
<label for="card-title-draggable">Enable drag to reposition</label>
</div>
</div>
</div>
</div>
<div class="form-group">
<label for="card-footer-input">Footer</label>
<input type="text" id="card-footer-input" placeholder="Enter footer text">
<div class="checkbox-group inline">
<input type="checkbox" id="card-show-footer" checked>
<label for="card-show-footer">Show footer</label>
<!-- Image Section -->
<div class="config-section" id="image-section">
<h4>Image</h4>
<div class="section-content">
<div class="form-group">
<label>Image</label>
<select id="card-image-select">
<option value="-1">Use default image</option>
</select>
</div>
<div class="form-group">
<label for="card-image-fit">Image Fit</label>
<select id="card-image-fit">
<option value="cover">Cover (fill area)</option>
<option value="contain">Contain (show all)</option>
<option value="fill">Fill (stretch)</option>
<option value="none">None (original size)</option>
<option value="scale-down">Scale Down</option>
</select>
</div>
<div class="form-group">
<label for="card-image-position">Image Position</label>
<select id="card-image-position">
<option value="center">Center</option>
<option value="top">Top</option>
<option value="bottom">Bottom</option>
<option value="left">Left</option>
<option value="right">Right</option>
<option value="top left">Top Left</option>
<option value="top right">Top Right</option>
<option value="bottom left">Bottom Left</option>
<option value="bottom right">Bottom Right</option>
</select>
</div>
<div class="checkbox-group">
<input type="checkbox" id="card-full-bleed" checked>
<label for="card-full-bleed">Full cover image (full bleed)</label>
</div>
<div class="checkbox-group">
<input type="checkbox" id="card-show-accent">
<label for="card-show-accent">Show accent overlay</label>
</div>
<div class="form-group" id="accent-color-group" style="display: none;">
<label for="card-accent-color">Accent Color</label>
<div class="color-picker">
<input type="color" id="card-accent-color" value="#f1c40f" class="color-input">
<input type="text" id="card-accent-color-text" value="#f1c40f" class="color-value" readonly>
</div>
</div>
</div>
</div>
<div class="form-group">
<label>Title Style</label>
<div class="title-style-grid">
<div class="title-style-option" data-style="classic">Classic</div>
<div class="title-style-option" data-style="large">Large</div>
<div class="title-style-option" data-style="small">Small</div>
<div class="title-style-option selected" data-style="folded">Folded</div>
<div class="title-style-option" data-style="condensed">Condensed</div>
<div class="title-style-option" data-style="italic">Italic</div>
<div class="title-style-option" data-style="bold">Bold</div>
<div class="title-style-option" data-style="outlined">Outlined</div>
<div class="title-style-option" data-style="shadow">Shadow</div>
<!-- Footer Section -->
<div class="config-section" id="footer-section">
<h4>Footer</h4>
<div class="section-controls">
<div class="checkbox-group">
<input type="checkbox" id="card-show-footer" checked>
<label for="card-show-footer">Show footer</label>
</div>
</div>
</div>
<div class="section-content">
<div class="form-group">
<label for="card-footer-input">Footer Text</label>
<input type="text" id="card-footer-input" placeholder="Enter footer text">
</div>
<div class="form-group">
<label for="global-title-font-size">Title Font Size (px)</label>
<input type="number" id="global-title-font-size" value="20" min="10" max="200" step="5">
</div>
<div class="form-group">
<label for="card-accent-color">Accent Color</label>
<div class="color-picker">
<input type="color" id="card-accent-color" value="#f1c40f" class="color-input">
<input type="text" id="card-accent-color-text" value="#f1c40f" class="color-value" readonly>
<div class="form-group">
<label for="card-footer-color">Footer Color</label>
<div class="color-picker">
<input type="color" id="card-footer-color" value="#111111" class="color-input">
<input type="text" id="card-footer-color-text" value="#111111" class="color-value" readonly>
</div>
</div>
</div>
</div>
<div class="form-group">
<label for="card-title-color">Title Color</label>
<div class="color-picker">
<input type="color" id="card-title-color" value="#111111" class="color-input">
<input type="text" id="card-title-color-text" value="#111111" class="color-value" readonly>
</div>
</div>
<div class="checkbox-group">
<input type="checkbox" id="card-full-bleed" checked>
<label for="card-full-bleed">Full bleed background</label>
</div>
<div class="checkbox-group">
<input type="checkbox" id="card-title-shadow">
<label for="card-title-shadow">Title shadow</label>
</div>
<div class="form-group">
<label>Image</label>
<select id="card-image-select">
<option value="-1">Use default image</option>
</select>
</div>
<div class="btn-group" style="margin-top: 15px;">
<button class="btn btn-primary" id="update-card">Update Card</button>
<button class="btn btn-danger" id="delete-card">Delete Card</button>