|
12 | 12 | name: string; |
13 | 13 | description: string; |
14 | 14 | base_preset: string; |
15 | | - is_public: number; |
| 15 | + visibility: string; |
16 | 16 | alias: string | null; |
17 | 17 | packages?: any[]; |
18 | 18 | custom_script?: string; |
|
34 | 34 | name: '', |
35 | 35 | description: '', |
36 | 36 | base_preset: 'developer', |
37 | | - is_public: true, |
| 37 | + visibility: 'unlisted' as string, |
38 | 38 | alias: '', |
39 | 39 | packages: [] as string[], |
40 | 40 | custom_script: '', |
|
238 | 238 | name: config.name, |
239 | 239 | description: config.description || '', |
240 | 240 | base_preset: config.base_preset, |
241 | | - is_public: config.is_public === 1, |
| 241 | + visibility: config.visibility || 'unlisted', |
242 | 242 | alias: config.alias || '', |
243 | 243 | packages: config.packages || [], |
244 | 244 | custom_script: config.custom_script || '', |
|
267 | 267 | name: '', |
268 | 268 | description: '', |
269 | 269 | base_preset: 'developer', |
270 | | - is_public: true, |
| 270 | + visibility: 'unlisted', |
271 | 271 | alias: '', |
272 | 272 | packages: [], |
273 | 273 | custom_script: '', |
|
441 | 441 | name: 'Imported Config', |
442 | 442 | description: `Imported from Brewfile (${data.packages.length} packages)`, |
443 | 443 | base_preset: 'minimal', |
444 | | - is_public: true, |
| 444 | + visibility: 'unlisted', |
445 | 445 | alias: '', |
446 | 446 | packages: data.packages, |
447 | 447 | custom_script: '', |
|
535 | 535 | {/if} |
536 | 536 | </div> |
537 | 537 | </div> |
538 | | - <span class="badge" class:public={config.is_public} class:private={!config.is_public}> |
539 | | - {config.is_public ? 'Public' : 'Private'} |
540 | | - </span> |
| 538 | + <span class="badge" class:public={config.visibility === 'public'} class:unlisted={config.visibility === 'unlisted'} class:private={config.visibility === 'private'}> |
| 539 | + {config.visibility} |
| 540 | + </span> |
541 | 541 | </div> |
542 | 542 | {#if config.description} |
543 | 543 | <p class="config-description">{config.description}</p> |
|
598 | 598 | </div> |
599 | 599 |
|
600 | 600 | <div class="form-group"> |
601 | | - <label class="checkbox-label"> |
602 | | - <input type="checkbox" bind:checked={formData.is_public} /> |
603 | | - <span>Public (anyone can use this install URL)</span> |
604 | | - </label> |
605 | | - </div> |
| 601 | + <label class="form-label" for="config-visibility">Visibility</label> |
| 602 | + <select id="config-visibility" class="form-select" bind:value={formData.visibility}> |
| 603 | + <option value="public">Public — listed on profile, install URL works</option> |
| 604 | + <option value="unlisted">Unlisted — not listed, but install URL works</option> |
| 605 | + <option value="private">Private — only you can access</option> |
| 606 | + </select> |
| 607 | + <p class="form-hint">Unlisted configs can still be installed by anyone with the URL.</p> |
| 608 | + </div> |
606 | 609 |
|
607 | 610 | <div class="form-group"> |
608 | 611 | <label class="form-label" for="config-alias">Short Alias (Optional)</label> |
|
1034 | 1037 | color: var(--accent); |
1035 | 1038 | } |
1036 | 1039 |
|
| 1040 | + .badge.unlisted { |
| 1041 | + background: rgba(234, 179, 8, 0.2); |
| 1042 | + color: #eab308; |
| 1043 | + } |
| 1044 | +
|
1037 | 1045 | .badge.private { |
1038 | 1046 | background: rgba(239, 68, 68, 0.2); |
1039 | 1047 | color: var(--danger); |
|
1153 | 1161 | margin-top: 6px; |
1154 | 1162 | } |
1155 | 1163 |
|
1156 | | - .checkbox-label { |
1157 | | - display: flex; |
1158 | | - align-items: center; |
1159 | | - gap: 8px; |
1160 | | - cursor: pointer; |
1161 | | - } |
1162 | 1164 |
|
1163 | | - .checkbox-label input { |
1164 | | - width: 16px; |
1165 | | - height: 16px; |
1166 | | - accent-color: var(--accent); |
1167 | | - } |
1168 | 1165 |
|
1169 | 1166 | .alias-input { |
1170 | 1167 | display: flex; |
|
0 commit comments