|
23 | 23 | setTimeout(() => (copied = ''), 2000); |
24 | 24 | } |
25 | 25 |
|
26 | | - const presets = [ |
27 | | - { |
28 | | - id: 'minimal', |
29 | | - name: 'minimal', |
30 | | - icon: '🎯', |
31 | | - description: 'CLI essentials for servers, containers, or minimalists. Fast and lightweight.', |
32 | | - tools: ['ripgrep', 'fd', 'bat', 'fzf', 'lazygit', 'gh'] |
33 | | - }, |
34 | | - { |
35 | | - id: 'developer', |
36 | | - name: 'developer', |
37 | | - icon: '⚡', |
38 | | - badge: 'Recommended', |
39 | | - description: 'Ready-to-code Mac setup. Everything you need to start building immediately.', |
40 | | - tools: ['node', 'go', 'docker', 'VS Code', 'Chrome', 'OrbStack'] |
41 | | - }, |
42 | | - { |
43 | | - id: 'full', |
44 | | - name: 'full', |
45 | | - icon: '🌟', |
46 | | - description: 'Complete dev environment with languages, DevOps, databases, and AI tools.', |
47 | | - tools: ['python', 'rustup', 'kubectl', 'terraform', 'ollama', 'Cursor'] |
48 | | - } |
49 | | - ]; |
| 26 | +
|
50 | 27 | </script> |
51 | 28 |
|
52 | 29 | <svelte:head> |
|
195 | 172 | <div class="step"> |
196 | 173 | <div class="step-number">2</div> |
197 | 174 | <h3>Pick your tools</h3> |
198 | | - <p>Choose a preset or use the interactive TUI to toggle exactly what you want.</p> |
| 175 | + <p>Use the interactive TUI to pick a preset or toggle exactly what you want.</p> |
199 | 176 | </div> |
200 | 177 | <div class="step"> |
201 | 178 | <div class="step-number">3</div> |
|
210 | 187 | </div> |
211 | 188 | </section> |
212 | 189 |
|
213 | | - <section class="presets-section"> |
214 | | - <div class="section-header"> |
215 | | - <h2 class="section-title">Choose Your Preset</h2> |
216 | | - <p class="section-subtitle">Start with a preset, customize with the interactive selector</p> |
217 | | - </div> |
218 | | - <div class="presets-container"> |
219 | | - {#each presets as preset} |
220 | | - <button |
221 | | - class="preset-card" |
222 | | - class:featured={preset.id === 'developer'} |
223 | | - class:copied={copied === preset.id} |
224 | | - onclick={() => copyCommand(`curl -fsSL https://openboot.dev/install.sh | bash -s -- --preset ${preset.id}`, preset.id)} |
225 | | - > |
226 | | - <div class="preset-icon">{preset.icon}</div> |
227 | | - <div class="preset-header"> |
228 | | - <h3> |
229 | | - {preset.name} |
230 | | - {#if preset.badge} |
231 | | - <span class="badge">{preset.badge}</span> |
232 | | - {/if} |
233 | | - </h3> |
234 | | - </div> |
235 | | - <p>{preset.description}</p> |
236 | | - <div class="preset-tools"> |
237 | | - {#each preset.tools as tool} |
238 | | - <span>{tool}</span> |
239 | | - {/each} |
240 | | - </div> |
241 | | - <div class="command-preview"> |
242 | | - <span class="cmd">curl ... | bash -s -- --preset {preset.id}</span> |
243 | | - <span class="hint">{copied === preset.id ? 'Copied!' : 'Click to copy'}</span> |
244 | | - </div> |
245 | | - </button> |
246 | | - {/each} |
247 | | - </div> |
248 | 190 |
|
249 | | - </section> |
250 | 191 | </div> |
251 | 192 | </main> |
252 | 193 |
|
|
714 | 655 | margin: 0; |
715 | 656 | } |
716 | 657 |
|
717 | | - /* ── Presets Section ──────────────────────────────── */ |
718 | | -
|
719 | | - .presets-section { |
720 | | - margin-bottom: 20px; |
721 | | - } |
722 | | -
|
723 | | - .section-header { |
724 | | - text-align: center; |
725 | | - margin-bottom: 40px; |
726 | | - } |
727 | | -
|
728 | | - .section-title { |
729 | | - font-size: 1.75rem; |
730 | | - font-weight: 700; |
731 | | - margin-bottom: 12px; |
732 | | - letter-spacing: -0.02em; |
733 | | - } |
734 | | -
|
735 | | - .section-subtitle { |
736 | | - color: var(--text-secondary); |
737 | | - font-size: 1rem; |
738 | | - } |
739 | | -
|
740 | | - .presets-container { |
741 | | - display: grid; |
742 | | - grid-template-columns: repeat(3, 1fr); |
743 | | - gap: 16px; |
744 | | - } |
745 | | -
|
746 | | - .preset-card { |
747 | | - background: var(--bg-secondary); |
748 | | - border: 1px solid var(--border); |
749 | | - border-radius: 16px; |
750 | | - padding: 28px; |
751 | | - transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); |
752 | | - position: relative; |
753 | | - overflow: hidden; |
754 | | - cursor: pointer; |
755 | | - text-align: left; |
756 | | - } |
757 | | -
|
758 | | - .preset-card:hover { |
759 | | - border-color: var(--border-hover); |
760 | | - transform: translateY(-4px); |
761 | | - box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2), 0 0 0 1px var(--border-hover); |
762 | | - } |
763 | | -
|
764 | | - .preset-card.featured { |
765 | | - background: linear-gradient(135deg, var(--bg-secondary) 0%, rgba(34, 197, 94, 0.06) 100%); |
766 | | - border-color: rgba(34, 197, 94, 0.3); |
767 | | - } |
768 | | -
|
769 | | - .preset-card.featured:hover { |
770 | | - border-color: rgba(34, 197, 94, 0.5); |
771 | | - box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2), 0 0 20px rgba(34, 197, 94, 0.08); |
772 | | - } |
773 | | -
|
774 | | - .preset-card.copied { |
775 | | - border-color: var(--accent); |
776 | | - box-shadow: 0 0 16px rgba(34, 197, 94, 0.15); |
777 | | - } |
778 | | -
|
779 | | - .preset-icon { |
780 | | - width: 48px; |
781 | | - height: 48px; |
782 | | - border-radius: 12px; |
783 | | - display: flex; |
784 | | - align-items: center; |
785 | | - justify-content: center; |
786 | | - font-size: 1.5rem; |
787 | | - margin-bottom: 16px; |
788 | | - background: rgba(255, 255, 255, 0.05); |
789 | | - border: 1px solid rgba(255, 255, 255, 0.08); |
790 | | - } |
791 | | -
|
792 | | - .preset-header h3 { |
793 | | - font-size: 1.1rem; |
794 | | - font-weight: 600; |
795 | | - display: flex; |
796 | | - align-items: center; |
797 | | - gap: 10px; |
798 | | - margin-bottom: 8px; |
799 | | - } |
800 | | -
|
801 | | - .badge { |
802 | | - font-size: 0.6rem; |
803 | | - padding: 3px 8px; |
804 | | - background: var(--accent); |
805 | | - color: #000; |
806 | | - border-radius: 20px; |
807 | | - font-weight: 700; |
808 | | - text-transform: uppercase; |
809 | | - letter-spacing: 0.04em; |
810 | | - } |
811 | | -
|
812 | | - .preset-card p { |
813 | | - color: var(--text-secondary); |
814 | | - font-size: 0.875rem; |
815 | | - margin-bottom: 16px; |
816 | | - line-height: 1.5; |
817 | | - } |
818 | | -
|
819 | | - .preset-tools { |
820 | | - display: flex; |
821 | | - flex-wrap: wrap; |
822 | | - gap: 6px; |
823 | | - } |
824 | | -
|
825 | | - .preset-tools span { |
826 | | - font-family: 'JetBrains Mono', monospace; |
827 | | - font-size: 0.7rem; |
828 | | - padding: 4px 10px; |
829 | | - background: var(--bg-tertiary); |
830 | | - border: 1px solid var(--border); |
831 | | - border-radius: 20px; |
832 | | - color: var(--text-secondary); |
833 | | - transition: all 0.2s; |
834 | | - } |
835 | | -
|
836 | | - .preset-card:hover .preset-tools span { |
837 | | - border-color: var(--border-hover); |
838 | | - } |
839 | | -
|
840 | | - .command-preview { |
841 | | - position: absolute; |
842 | | - bottom: 0; |
843 | | - left: 0; |
844 | | - right: 0; |
845 | | - padding: 12px 20px; |
846 | | - background: linear-gradient(to top, rgba(0, 0, 0, 0.95) 0%, rgba(0, 0, 0, 0.8) 100%); |
847 | | - font-family: 'JetBrains Mono', monospace; |
848 | | - font-size: 0.7rem; |
849 | | - color: var(--accent); |
850 | | - opacity: 0; |
851 | | - transform: translateY(100%); |
852 | | - transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); |
853 | | - border-radius: 0 0 16px 16px; |
854 | | - display: flex; |
855 | | - align-items: center; |
856 | | - justify-content: space-between; |
857 | | - } |
858 | | -
|
859 | | - .preset-card:hover .command-preview { |
860 | | - opacity: 1; |
861 | | - transform: translateY(0); |
862 | | - } |
863 | | -
|
864 | | - .command-preview .hint { |
865 | | - color: var(--text-muted); |
866 | | - font-size: 0.65rem; |
867 | | - } |
868 | | -
|
869 | 658 | /* ── Footer ───────────────────────────────────────── */ |
870 | 659 |
|
871 | 660 | footer { |
|
975 | 764 | font-size: 1.75rem; |
976 | 765 | } |
977 | 766 |
|
978 | | - .presets-container { |
979 | | - grid-template-columns: 1fr; |
980 | | - } |
981 | | -
|
982 | 767 | .install-command code { |
983 | 768 | font-size: 0.7rem; |
984 | 769 | } |
|
0 commit comments