|
7 | 7 | let activeTab = $state('overview'); |
8 | 8 | let copied = $state(false); |
9 | 9 |
|
10 | | - const tabs = [ |
11 | | - { id: 'overview', label: 'Overview' }, |
12 | | - { id: 'formulae', label: 'Formulae' }, |
13 | | - { id: 'casks', label: 'Casks' }, |
14 | | - { id: 'macos', label: 'macOS' }, |
15 | | - { id: 'shell', label: 'Shell' } |
16 | | - ]; |
17 | | -
|
18 | 10 | function getInstallCommand() { |
19 | 11 | return `curl -fsSL https://openboot.dev/${data.configUser.username}/${data.config.slug}/install | bash`; |
20 | 12 | } |
|
26 | 18 | } |
27 | 19 |
|
28 | 20 | const snapshot = data.config.snapshot || {}; |
29 | | - const packages = snapshot.packages || {}; |
30 | | - const formulae = packages.formulae || []; |
31 | | - const casks = packages.casks || []; |
32 | | - const taps = packages.taps || []; |
| 21 | + const snapshotPkgs = snapshot.packages || {}; |
33 | 22 | const macosPrefs = snapshot.macos_prefs || []; |
34 | 23 | const shell = snapshot.shell || {}; |
35 | 24 | const git = snapshot.git || {}; |
36 | 25 | const devTools = snapshot.dev_tools || []; |
| 26 | +
|
| 27 | + const configPkgs: { name: string; type: string }[] = Array.isArray(data.config.packages) |
| 28 | + ? data.config.packages.map((p: any) => (typeof p === 'string' ? { name: p, type: 'formula' } : p)) |
| 29 | + : []; |
| 30 | +
|
| 31 | + const configCli = configPkgs.filter((p: any) => p.type !== 'cask' && p.type !== 'npm'); |
| 32 | + const configApps = configPkgs.filter((p: any) => p.type === 'cask'); |
| 33 | + const configNpm = configPkgs.filter((p: any) => p.type === 'npm'); |
| 34 | +
|
| 35 | + const formulae = snapshotPkgs.formulae?.length ? snapshotPkgs.formulae : configCli.map((p: any) => p.name); |
| 36 | + const casks = snapshotPkgs.casks?.length ? snapshotPkgs.casks : configApps.map((p: any) => p.name); |
| 37 | + const taps = snapshotPkgs.taps || []; |
| 38 | + const hasSnapshot = !!(snapshotPkgs.formulae?.length || snapshotPkgs.casks?.length); |
| 39 | +
|
| 40 | + const tabs = [ |
| 41 | + { id: 'overview', label: 'Overview' }, |
| 42 | + { id: 'formulae', label: 'CLI' }, |
| 43 | + { id: 'casks', label: 'Apps' }, |
| 44 | + ...(configNpm.length > 0 ? [{ id: 'npm', label: 'NPM' }] : []), |
| 45 | + ...(macosPrefs.length > 0 ? [{ id: 'macos', label: 'macOS' }] : []), |
| 46 | + ...(shell.default || shell.oh_my_zsh ? [{ id: 'shell', label: 'Shell' }] : []) |
| 47 | + ]; |
37 | 48 | </script> |
38 | 49 |
|
39 | 50 | <svelte:head> |
|
79 | 90 | <div class="stats"> |
80 | 91 | <div class="stat"> |
81 | 92 | <span class="stat-value">{formulae.length}</span> |
82 | | - <span class="stat-label">Formulae</span> |
| 93 | + <span class="stat-label">CLI</span> |
83 | 94 | </div> |
84 | 95 | <div class="stat"> |
85 | 96 | <span class="stat-value">{casks.length}</span> |
86 | | - <span class="stat-label">Casks</span> |
87 | | - </div> |
88 | | - <div class="stat"> |
89 | | - <span class="stat-value">{devTools.length}</span> |
90 | | - <span class="stat-label">Dev Tools</span> |
91 | | - </div> |
92 | | - <div class="stat"> |
93 | | - <span class="stat-value">{macosPrefs.length}</span> |
94 | | - <span class="stat-label">Preferences</span> |
| 97 | + <span class="stat-label">Apps</span> |
95 | 98 | </div> |
| 99 | + {#if configNpm.length > 0} |
| 100 | + <div class="stat"> |
| 101 | + <span class="stat-value">{configNpm.length}</span> |
| 102 | + <span class="stat-label">NPM</span> |
| 103 | + </div> |
| 104 | + {/if} |
| 105 | + {#if devTools.length > 0} |
| 106 | + <div class="stat"> |
| 107 | + <span class="stat-value">{devTools.length}</span> |
| 108 | + <span class="stat-label">Dev Tools</span> |
| 109 | + </div> |
| 110 | + {/if} |
| 111 | + {#if macosPrefs.length > 0} |
| 112 | + <div class="stat"> |
| 113 | + <span class="stat-value">{macosPrefs.length}</span> |
| 114 | + <span class="stat-label">Preferences</span> |
| 115 | + </div> |
| 116 | + {/if} |
96 | 117 | </div> |
97 | 118 | </section> |
98 | 119 |
|
|
108 | 129 | <span class="tab-count">{formulae.length}</span> |
109 | 130 | {:else if tab.id === 'casks' && casks.length > 0} |
110 | 131 | <span class="tab-count">{casks.length}</span> |
| 132 | + {:else if tab.id === 'npm' && configNpm.length > 0} |
| 133 | + <span class="tab-count">{configNpm.length}</span> |
111 | 134 | {:else if tab.id === 'macos' && macosPrefs.length > 0} |
112 | 135 | <span class="tab-count">{macosPrefs.length}</span> |
113 | 136 | {/if} |
|
182 | 205 |
|
183 | 206 | {:else if activeTab === 'formulae'} |
184 | 207 | {#if formulae.length === 0} |
185 | | - <div class="empty-state">No formulae in this snapshot.</div> |
| 208 | + <div class="empty-state">No CLI packages configured.</div> |
186 | 209 | {:else} |
187 | 210 | <div class="package-grid"> |
188 | 211 | {#each formulae as pkg} |
|
193 | 216 |
|
194 | 217 | {:else if activeTab === 'casks'} |
195 | 218 | {#if casks.length === 0} |
196 | | - <div class="empty-state">No casks in this snapshot.</div> |
| 219 | + <div class="empty-state">No apps configured.</div> |
197 | 220 | {:else} |
198 | 221 | <div class="package-grid"> |
199 | 222 | {#each casks as pkg} |
|
202 | 225 | </div> |
203 | 226 | {/if} |
204 | 227 |
|
| 228 | + {:else if activeTab === 'npm'} |
| 229 | + {#if configNpm.length === 0} |
| 230 | + <div class="empty-state">No npm packages configured.</div> |
| 231 | + {:else} |
| 232 | + <div class="package-grid"> |
| 233 | + {#each configNpm as pkg} |
| 234 | + <div class="package-item">{pkg.name}</div> |
| 235 | + {/each} |
| 236 | + </div> |
| 237 | + {/if} |
| 238 | + |
205 | 239 | {:else if activeTab === 'macos'} |
206 | 240 | {#if macosPrefs.length === 0} |
207 | 241 | <div class="empty-state">No macOS preferences in this snapshot.</div> |
|
0 commit comments