@@ -127,81 +127,76 @@ const invoiceHtml = `<style>
127127 </div>
128128</div>` ;
129129
130- const calculatorHtml = `<style>
131- .calc {
130+ const dashboardHtml = `<style>
131+ .dash {
132132 font-family: var(--font-sans);
133- max-width: 320px ;
133+ max-width: 480px ;
134134 border-radius: var(--border-radius-xl);
135135 background: var(--color-background-secondary);
136136 border: 0.5px solid var(--color-border-tertiary);
137- overflow: hidden;
138- }
139- .calc-display {
140- padding: 20px 24px 12px;
141- text-align: right;
142- }
143- .calc-expression { font-size: 13px; color: var(--color-text-tertiary); min-height: 18px; }
144- .calc-result { font-size: 36px; font-weight: 700; color: var(--color-text-primary); line-height: 1.2; }
145- .calc-grid {
146- display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px;
147- background: var(--color-border-tertiary);
148- border-top: 0.5px solid var(--color-border-tertiary);
137+ padding: 24px;
149138}
150- .calc-btn {
151- padding: 16px; font-size: 16px; font-weight: 500;
152- border: none; border-radius: 0; cursor: pointer;
139+ .dash-title { font-size: 18px; font-weight: 600; color: var(--color-text-primary); margin-bottom: 4px; }
140+ .dash-subtitle { font-size: 12px; color: var(--color-text-tertiary); margin-bottom: 20px; }
141+ .dash-kpis { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 20px; }
142+ .dash-kpi {
143+ padding: 12px; border-radius: var(--border-radius-md);
153144 background: var(--color-background-primary);
154- color: var(--color-text-primary);
155- transition: background 0.1s;
145+ border: 0.5px solid var(--color-border-tertiary);
156146}
157- .calc-btn:hover { background: var(--color-background-tertiary); }
158- .calc-btn.op { color: var(--color-text-info); font-weight: 600; }
159- .calc-btn.eq {
160- background: var(--color-background-info); color: var(--color-text-info); font-weight: 600;
147+ .dash-kpi-label { font-size: 11px; color: var(--color-text-tertiary); }
148+ .dash-kpi-value { font-size: 22px; font-weight: 700; color: var(--color-text-primary); margin-top: 2px; }
149+ .dash-kpi-change { font-size: 11px; margin-top: 2px; }
150+ .dash-kpi-change.up { color: var(--color-text-success); }
151+ .dash-kpi-change.down { color: var(--color-text-danger); }
152+ .dash-chart { margin-bottom: 16px; }
153+ .dash-chart-title { font-size: 13px; font-weight: 600; color: var(--color-text-primary); margin-bottom: 8px; }
154+ .dash-bars { display: flex; align-items: flex-end; gap: 6px; height: 100px; }
155+ .dash-bar-col { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 4px; }
156+ .dash-bar {
157+ width: 100%; border-radius: 4px 4px 0 0;
158+ background: linear-gradient(180deg, rgba(99,102,241,0.7), rgba(16,185,129,0.5));
159+ transition: height 0.3s ease;
161160}
162- .calc-btn.eq:hover { opacity: 0.85; }
163- .calc-btn.wide { grid-column: span 2; }
161+ .dash-bar-label { font-size: 10px; color: var(--color-text-tertiary); }
162+ .dash-legend { display: flex; gap: 16px; padding-top: 12px; border-top: 0.5px solid var(--color-border-tertiary); }
163+ .dash-legend-item { display: flex; align-items: center; gap: 6px; font-size: 11px; color: var(--color-text-secondary); }
164+ .dash-legend-dot { width: 8px; height: 8px; border-radius: 50%; }
164165</style>
165- <div class="calc">
166- <div class="calc-display">
167- <div class="calc-expression" id="expr"></div>
168- <div class="calc-result" id="result">0</div>
166+ <div class="dash">
167+ <div class="dash-title">Q1 2026 Performance</div>
168+ <div class="dash-subtitle">Revenue, users, and conversion metrics — Jan to Mar 2026</div>
169+ <div class="dash-kpis">
170+ <div class="dash-kpi">
171+ <div class="dash-kpi-label">Revenue</div>
172+ <div class="dash-kpi-value">$284k</div>
173+ <div class="dash-kpi-change up">+12.3% vs Q4</div>
174+ </div>
175+ <div class="dash-kpi">
176+ <div class="dash-kpi-label">Active Users</div>
177+ <div class="dash-kpi-value">18.2k</div>
178+ <div class="dash-kpi-change up">+8.1% vs Q4</div>
179+ </div>
180+ <div class="dash-kpi">
181+ <div class="dash-kpi-label">Conversion</div>
182+ <div class="dash-kpi-value">3.4%</div>
183+ <div class="dash-kpi-change down">-0.2% vs Q4</div>
184+ </div>
185+ </div>
186+ <div class="dash-chart">
187+ <div class="dash-chart-title">Monthly Revenue</div>
188+ <div class="dash-bars">
189+ <div class="dash-bar-col"><div class="dash-bar" style="height:65%"></div><div class="dash-bar-label">Jan</div></div>
190+ <div class="dash-bar-col"><div class="dash-bar" style="height:78%"></div><div class="dash-bar-label">Feb</div></div>
191+ <div class="dash-bar-col"><div class="dash-bar" style="height:100%"></div><div class="dash-bar-label">Mar</div></div>
192+ </div>
169193 </div>
170- <div class="calc-grid">
171- <button class="calc-btn" onclick="clearCalc()">C</button>
172- <button class="calc-btn op" onclick="inputOp('(')">(</button>
173- <button class="calc-btn op" onclick="inputOp(')')">)</button>
174- <button class="calc-btn op" onclick="inputOp('/')">÷</button>
175- <button class="calc-btn" onclick="inputNum('7')">7</button>
176- <button class="calc-btn" onclick="inputNum('8')">8</button>
177- <button class="calc-btn" onclick="inputNum('9')">9</button>
178- <button class="calc-btn op" onclick="inputOp('*')">×</button>
179- <button class="calc-btn" onclick="inputNum('4')">4</button>
180- <button class="calc-btn" onclick="inputNum('5')">5</button>
181- <button class="calc-btn" onclick="inputNum('6')">6</button>
182- <button class="calc-btn op" onclick="inputOp('-')">−</button>
183- <button class="calc-btn" onclick="inputNum('1')">1</button>
184- <button class="calc-btn" onclick="inputNum('2')">2</button>
185- <button class="calc-btn" onclick="inputNum('3')">3</button>
186- <button class="calc-btn op" onclick="inputOp('+')">+</button>
187- <button class="calc-btn wide" onclick="inputNum('0')">0</button>
188- <button class="calc-btn" onclick="inputNum('.')">.</button>
189- <button class="calc-btn eq" onclick="calc()">=</button>
194+ <div class="dash-legend">
195+ <div class="dash-legend-item"><div class="dash-legend-dot" style="background: var(--color-text-success)"></div>Above target</div>
196+ <div class="dash-legend-item"><div class="dash-legend-dot" style="background: var(--color-text-danger)"></div>Below target</div>
197+ <div class="dash-legend-item"><div class="dash-legend-dot" style="background: var(--color-text-tertiary)"></div>No change</div>
190198 </div>
191- </div>
192- <script>
193- var expression = '';
194- function inputNum(n) { expression += n; update(); }
195- function inputOp(o) { expression += o; update(); }
196- function clearCalc() { expression = ''; document.getElementById('expr').textContent = ''; document.getElementById('result').textContent = '0'; }
197- function update() { document.getElementById('expr').textContent = expression; }
198- function calc() {
199- try {
200- var r = Function('"use strict"; return (' + expression + ')')();
201- document.getElementById('result').textContent = Number.isFinite(r) ? parseFloat(r.toFixed(8)).toString() : 'Error';
202- } catch(e) { document.getElementById('result').textContent = 'Error'; }
203- }
204- </script>` ;
199+ </div>` ;
205200
206201export const SEED_TEMPLATES : SeedTemplate [ ] = [
207202 {
@@ -223,11 +218,11 @@ export const SEED_TEMPLATES: SeedTemplate[] = [
223218 version : 1 ,
224219 } ,
225220 {
226- id : "seed-calculator -001" ,
227- name : "Calculator " ,
228- description : "Interactive calculator with basic arithmetic operations " ,
229- html : calculatorHtml ,
230- data_description : "N/A — interactive widget, no data substitution needed " ,
221+ id : "seed-dashboard -001" ,
222+ name : "Dashboard " ,
223+ description : "KPI dashboard with metrics cards and bar chart for quarterly performance " ,
224+ html : dashboardHtml ,
225+ data_description : "Title, subtitle, KPI labels/values/changes, monthly bar chart data, legend items " ,
231226 created_at : "2026-01-01T00:00:02.000Z" ,
232227 version : 1 ,
233228 } ,
0 commit comments