Skip to content

Commit f3f7ba1

Browse files
DMontgomery40Faxbot Agent
andauthored
p4(ui): add PluginMarketplace skeleton component (not wired yet) (#20)
Co-authored-by: Faxbot Agent <[email protected]>
1 parent fe95e62 commit f3f7ba1

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import React, { useState } from 'react';
2+
import { Box, Typography, TextField, InputAdornment, Grid, Card, CardContent } from '@mui/material';
3+
import SearchIcon from '@mui/icons-material/Search';
4+
5+
/**
6+
* Minimal placeholder for the Admin Console Plugin Marketplace.
7+
* - Strict TypeScript compliant (no unused vars)
8+
* - Not wired into the App shell yet; safe to compile
9+
* - No provider name checks; trait‑gated wiring will come in later PRs
10+
*/
11+
export default function PluginMarketplace(): JSX.Element {
12+
const [query, setQuery] = useState('');
13+
14+
return (
15+
<Box sx={{ px: { xs: 1, sm: 2, md: 3 }, py: 2 }}>
16+
<Typography variant="h4" sx={{ mb: 2 }}>
17+
Plugin Marketplace
18+
</Typography>
19+
20+
<TextField
21+
fullWidth
22+
placeholder="Search plugins…"
23+
value={query}
24+
onChange={(e) => setQuery(e.target.value)}
25+
InputProps={{
26+
startAdornment: (
27+
<InputAdornment position="start">
28+
<SearchIcon />
29+
</InputAdornment>
30+
),
31+
}}
32+
sx={{ mb: 3 }}
33+
/>
34+
35+
<Grid container spacing={2}>
36+
{/* Empty state placeholder; results will be populated in later PRs */}
37+
<Grid item xs={12}>
38+
<Card variant="outlined">
39+
<CardContent>
40+
<Typography color="text.secondary">
41+
Marketplace results will appear here. Use traits to gate provider‑specific UI.
42+
</Typography>
43+
</CardContent>
44+
</Card>
45+
</Grid>
46+
</Grid>
47+
</Box>
48+
);
49+
}
50+

0 commit comments

Comments
 (0)