@redsift/ds-mcp-server 12.5.3-alpha.6 → 12.5.3-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/consumer-instructions/redsift-design-system.instructions.md +82 -1
- package/data/docs/components/charts/Axis.json +6 -1
- package/data/docs/components/charts/BarChart.json +7 -1
- package/data/docs/components/charts/ChartContainerTitle.json +5 -1
- package/data/docs/components/charts/Legend.json +6 -1
- package/data/docs/components/charts/LineChart.json +7 -1
- package/data/docs/components/charts/PieChart.json +6 -1
- package/data/docs/components/charts/ScatterPlot.json +6 -1
- package/data/docs/components/dashboard/ChartEmptyState.json +8 -1
- package/data/docs/components/dashboard/Dashboard.json +6 -1
- package/data/docs/components/dashboard/DataCard.json +12 -0
- package/data/docs/components/dashboard/DataCardBody.json +4 -0
- package/data/docs/components/dashboard/DataCardHeader.json +4 -0
- package/data/docs/components/dashboard/DataCardListbox.json +5 -0
- package/data/docs/components/dashboard/DataRow.json +7 -1
- package/data/docs/components/dashboard/PdfExportButton.json +6 -1
- package/data/docs/components/dashboard/TimeSeriesBarChart.json +6 -1
- package/data/docs/components/dashboard/WithFilters.json +5 -1
- package/data/docs/components/design-system/Alert.json +8 -1
- package/data/docs/components/design-system/AppBar.json +6 -1
- package/data/docs/components/design-system/AppContent.json +4 -0
- package/data/docs/components/design-system/AppSidePanel.json +5 -0
- package/data/docs/components/design-system/Badge.json +6 -1
- package/data/docs/components/design-system/Breadcrumbs.json +4 -0
- package/data/docs/components/design-system/Button.json +5 -0
- package/data/docs/components/design-system/Card.json +9 -0
- package/data/docs/components/design-system/CardActions.json +4 -0
- package/data/docs/components/design-system/CardBody.json +3 -0
- package/data/docs/components/design-system/CardHeader.json +4 -0
- package/data/docs/components/design-system/DetailedCard.json +6 -0
- package/data/docs/components/design-system/Flexbox.json +14 -1
- package/data/docs/components/design-system/Grid.json +6 -1
- package/data/docs/components/design-system/Heading.json +11 -0
- package/data/docs/components/design-system/Icon.json +6 -1
- package/data/docs/components/design-system/IconButton.json +9 -0
- package/data/docs/components/design-system/Pill.json +10 -0
- package/data/docs/components/design-system/Skeleton.json +10 -1
- package/data/docs/components/design-system/SkeletonCircle.json +6 -1
- package/data/docs/components/design-system/SkeletonText.json +6 -1
- package/data/docs/components/design-system/Tab.json +4 -0
- package/data/docs/components/design-system/TabPanel.json +4 -0
- package/data/docs/components/design-system/Tabs.json +6 -0
- package/data/docs/components/design-system/Text.json +9 -0
- package/data/docs/components/design-system/TextField.json +6 -1
- package/data/docs/components/pickers/Combobox.json +6 -0
- package/data/docs/components/pickers/MenuButton.json +5 -0
- package/data/docs/components/pickers/Select.json +5 -0
- package/data/docs/components/popovers/Dialog.json +6 -0
- package/data/docs/components/popovers/Toggletip.json +5 -0
- package/data/docs/components/popovers/Tooltip.json +4 -0
- package/data/docs/components/table/DataGrid.json +9 -1
- package/data/docs/components/table/StatefulDataGrid.json +6 -1
- package/data/docs/components-index.json +341 -51
- package/data/docs/components.json +2 -2
- package/data/docs/llms-full.txt +248 -1
- package/data/docs/llms.txt +50 -0
- package/data/docs/patterns-catalog.md +191 -0
- package/data/docs/patterns.json +365 -27
- package/data/metadata.json +2 -2
- package/data/prompts/ds-advisor.md +103 -0
- package/dist/data-store.d.ts +21 -1
- package/dist/data-store.d.ts.map +1 -1
- package/dist/data-store.js +65 -15
- package/dist/data-store.js.map +1 -1
- package/dist/pattern-store.d.ts +18 -1
- package/dist/pattern-store.d.ts.map +1 -1
- package/dist/pattern-store.js +64 -22
- package/dist/pattern-store.js.map +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +56 -27
- package/dist/prompts.js.map +1 -1
- package/dist/resources.d.ts.map +1 -1
- package/dist/resources.js +26 -0
- package/dist/resources.js.map +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +12 -0
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +4 -2
|
@@ -15,6 +15,7 @@ This project uses the **Red Sift Design System** (`@redsift/*` packages). The de
|
|
|
15
15
|
1. Configure the MCP server in `.vscode/mcp.json` — see [MCP Server docs](https://design-system.redsift.io/introduction/mcp-server)
|
|
16
16
|
2. Copy this file to `.github/instructions/` in your project
|
|
17
17
|
3. Verify: ask the AI _"What props does Button accept?"_ — it should call `get_component_props`, not answer from memory
|
|
18
|
+
4. **For automated code generation (Software Factory / agent workflows):** also load the `design-system://prompts/ds-advisor` MCP resource into the system prompt — it contains the component selection cheat sheet, anti-patterns, and disambiguation rules
|
|
18
19
|
|
|
19
20
|
## Rule 1 — Mandatory Prop Lookup
|
|
20
21
|
|
|
@@ -54,9 +55,43 @@ When adopting `@redsift/*` components in a new project or migrating from raw HTM
|
|
|
54
55
|
4. Import icons from `@redsift/icons`, not `@mdi/js`.
|
|
55
56
|
5. Remove conflicting Tailwind/utility-CSS classes (`bg-*`, `text-*`, `border-*`, `dark:*`) from elements that render or wrap DS components.
|
|
56
57
|
|
|
58
|
+
## Rule 6 — Semantic Colors Only
|
|
59
|
+
|
|
60
|
+
When setting colors on DS components:
|
|
61
|
+
|
|
62
|
+
1. **Never use hex/rgb literals** (`#22c55e`, `rgb(34, 197, 94)`) on DS component color props.
|
|
63
|
+
2. **Never use CSS variable fallbacks** like `color="var(--rs-color-green-500, #22c55e)"`.
|
|
64
|
+
3. **Always use semantic color values:** `"success"`, `"warning"`, `"error"`, `"info"`, `"no-data"`, `"question"`, or palette names from `NeutralColorPalette` / `PresentationColorPalette`.
|
|
65
|
+
4. If asked which hex color to use, **refuse** — return the semantic token name instead.
|
|
66
|
+
|
|
67
|
+
## Rule 7 — Icons from @redsift/icons Only
|
|
68
|
+
|
|
69
|
+
1. **Never use unicode glyphs** (✓, ✕, ⚠, ›, •) as visual indicators — import the equivalent `mdi*` icon from `@redsift/icons`.
|
|
70
|
+
2. **Never import from `@mdi/js`** — always use `@redsift/icons` (the DS re-exports the mdi icon set).
|
|
71
|
+
3. Render icons with the `<Icon>` component from `@redsift/design-system`, e.g. `<Icon path={mdiCheck} />`.
|
|
72
|
+
|
|
73
|
+
## Rule 8 — Component Selection
|
|
74
|
+
|
|
75
|
+
When choosing which component to use, follow this cheat sheet:
|
|
76
|
+
|
|
77
|
+
| UI Intent | Correct Component | Package | Common Mistake |
|
|
78
|
+
| ------------------------ | -------------------------------------- | ------------------------ | ------------------------------------------------- |
|
|
79
|
+
| KPI / metric tile | `DataCard` + `DataRow` | `@redsift/dashboard` | Using `Card` with inline styles |
|
|
80
|
+
| Status badge | `<Pill color="success">Label</Pill>` | `@redsift/design-system` | `<Pill label="..." />` (label prop doesn't exist) |
|
|
81
|
+
| Loading placeholder | `Skeleton` / `SkeletonText` | `@redsift/design-system` | `Skeleton` from `@mui/material` |
|
|
82
|
+
| Collapsible detail panel | `DetailedCard` + `DetailedCardSection` | `@redsift/design-system` | Custom accordion with Card |
|
|
83
|
+
| Generic container | `Card` | `@redsift/design-system` | Using Card for KPI tiles (use DataCard) |
|
|
84
|
+
| Modal / dialog | `Dialog` compound component | `@redsift/popovers` | Building custom overlay |
|
|
85
|
+
|
|
86
|
+
## Rule 9 — Refusal Rules
|
|
87
|
+
|
|
88
|
+
1. If asked to provide a hex color for a DS component → **refuse** and return the semantic token name.
|
|
89
|
+
2. If asked to wrap a DS component in `styled-components` to change its visual appearance → **refuse** and propose using the component's built-in props, composition, or filing a DS feature request.
|
|
90
|
+
3. If the requested component does not exist in any `@redsift/*` package → say so and propose the closest existing primitive or composition.
|
|
91
|
+
|
|
57
92
|
## NEVER Do This
|
|
58
93
|
|
|
59
|
-
These are concrete examples of wrong code. **Every single one will fail:**
|
|
94
|
+
These are concrete examples of wrong code. **Every single one will fail or produce incorrect results:**
|
|
60
95
|
|
|
61
96
|
```tsx
|
|
62
97
|
// ❌ WRONG — Button has NO size prop
|
|
@@ -72,6 +107,46 @@ These are concrete examples of wrong code. **Every single one will fail:**
|
|
|
72
107
|
|
|
73
108
|
// ❌ WRONG — wrong package
|
|
74
109
|
import { Select } from '@redsift/design-system';
|
|
110
|
+
|
|
111
|
+
// ❌ WRONG — Use DataCard for KPI tiles, not Card with inline styles
|
|
112
|
+
<Card style={{ borderLeft: '4px solid green' }}>
|
|
113
|
+
// ✅ RIGHT
|
|
114
|
+
<DataCard color="success">
|
|
115
|
+
|
|
116
|
+
// ❌ WRONG — Pill uses children, not label
|
|
117
|
+
<Pill label="Active" />
|
|
118
|
+
// ✅ RIGHT
|
|
119
|
+
<Pill color="success">Active</Pill>
|
|
120
|
+
|
|
121
|
+
// ❌ WRONG — gap takes a string
|
|
122
|
+
<Flexbox gap={4}>
|
|
123
|
+
// ✅ RIGHT
|
|
124
|
+
<Flexbox gap="4px">
|
|
125
|
+
|
|
126
|
+
// ❌ WRONG — use mdi icons, not unicode characters
|
|
127
|
+
<Text>✓ Trusted</Text>
|
|
128
|
+
// ✅ RIGHT
|
|
129
|
+
<Icon path={mdiCheck} /> <Text>Trusted</Text>
|
|
130
|
+
|
|
131
|
+
// ❌ WRONG — use DS Skeleton, not MUI
|
|
132
|
+
import { Skeleton } from '@mui/material';
|
|
133
|
+
// ✅ RIGHT
|
|
134
|
+
import { Skeleton } from '@redsift/design-system';
|
|
135
|
+
|
|
136
|
+
// ❌ WRONG — hex color on DS component
|
|
137
|
+
<Heading color="#22c55e">Title</Heading>
|
|
138
|
+
// ✅ RIGHT
|
|
139
|
+
<Heading color="success">Title</Heading>
|
|
140
|
+
|
|
141
|
+
// ❌ WRONG — CSS variable fallback on DS component
|
|
142
|
+
<Text color="var(--rs-color-green-500, #22c55e)">Status</Text>
|
|
143
|
+
// ✅ RIGHT
|
|
144
|
+
<Text color="success">Status</Text>
|
|
145
|
+
|
|
146
|
+
// ❌ WRONG — import from @mdi/js
|
|
147
|
+
import { mdiPlus } from '@mdi/js';
|
|
148
|
+
// ✅ RIGHT
|
|
149
|
+
import { mdiPlus } from '@redsift/icons';
|
|
75
150
|
```
|
|
76
151
|
|
|
77
152
|
## Common Mistakes
|
|
@@ -91,6 +166,12 @@ import { Select } from '@redsift/design-system';
|
|
|
91
166
|
| Missing `@redsift/design-system/style/index.css` | Must import at app entry point | `design-system://getting-started/host-app` |
|
|
92
167
|
| `import { mdiPlus } from '@mdi/js'` | `import { mdiPlus } from '@redsift/icons'` | `get_component_usage` |
|
|
93
168
|
| Tailwind `bg-*`/`text-*`/`dark:*` on DS wrappers | Use DS tokens or layout primitives | `design-system://getting-started/host-app` |
|
|
169
|
+
| `<Pill label="Active" />` | `<Pill color="success">Active</Pill>` (children) | `get_component_props` for Pill |
|
|
170
|
+
| `<Flexbox gap={4}>` | `<Flexbox gap="4px">` (string, not number) | `get_component_props` for Flexbox |
|
|
171
|
+
| `<Card>` for KPI tiles | `<DataCard>` from `@redsift/dashboard` | `get_component_props` for DataCard |
|
|
172
|
+
| `import { Skeleton } from '@mui/material'` | `import { Skeleton } from '@redsift/design-system'` | `get_component_usage` for Skeleton |
|
|
173
|
+
| Hex/rgb colors on DS components | Use semantic colors: `"success"`, `"error"`, etc. | `get_component_props` for the component |
|
|
174
|
+
| Unicode glyphs (✓, ✕, ⚠) as indicators | `<Icon path={mdiCheck} />` from `@redsift/icons` | `get_component_usage` for Icon |
|
|
94
175
|
|
|
95
176
|
## Verification
|
|
96
177
|
|
|
@@ -301,5 +301,17 @@
|
|
|
301
301
|
"DataCard.Header, DataCard.Body, and DataCard.Listbox must be direct children of <DataCard>. Never nest them inside each other (e.g. Listbox inside Body) — nesting doubles margins and breaks layout.",
|
|
302
302
|
"Use DataCard.Body for static/link DataRow children. Use DataCard.Listbox for interactive filter-selection DataRow children. Do not combine both in one DataCard.",
|
|
303
303
|
"The `slot` prop is not supported. Do not pass slot=\"heading\" or similar — use the compound sub-component API instead."
|
|
304
|
+
],
|
|
305
|
+
"disambiguation": "DataCard is a purpose-built KPI/metric tile from @redsift/dashboard. This is the correct component 9 out of 10 times when building \"a card with a big number\" or \"summary cards above a grid\". Do NOT use Card or DetailedCard for this.",
|
|
306
|
+
"antiPatterns": [
|
|
307
|
+
"❌ <Card style={{ borderLeft: \"4px solid green\" }}> for KPI tiles → ✅ <DataCard color=\"success\"> — DataCard is purpose-built for metric tiles."
|
|
308
|
+
],
|
|
309
|
+
"keywords": [
|
|
310
|
+
"kpi tile",
|
|
311
|
+
"metric tile",
|
|
312
|
+
"stat card",
|
|
313
|
+
"kpi card",
|
|
314
|
+
"summary card",
|
|
315
|
+
"metric card"
|
|
304
316
|
]
|
|
305
317
|
}
|
|
@@ -439,5 +439,9 @@
|
|
|
439
439
|
"usageRules": [
|
|
440
440
|
"Must be a direct child of <DataCard>. Do not place DataCard.Listbox or DataCard.Header inside DataCard.Body.",
|
|
441
441
|
"Children should be <DataRow> components."
|
|
442
|
+
],
|
|
443
|
+
"keywords": [
|
|
444
|
+
"metric body",
|
|
445
|
+
"kpi body"
|
|
442
446
|
]
|
|
443
447
|
}
|
|
@@ -537,5 +537,10 @@
|
|
|
537
537
|
"usageRules": [
|
|
538
538
|
"Must be a direct child of <DataCard>. Do not place DataCard.Body or DataCard.Header inside DataCard.Listbox.",
|
|
539
539
|
"Children should be <DataRow> components with onClick and hasFilterIcon for drilldown interactions."
|
|
540
|
+
],
|
|
541
|
+
"keywords": [
|
|
542
|
+
"metric listbox",
|
|
543
|
+
"kpi listbox",
|
|
544
|
+
"filter listbox"
|
|
540
545
|
]
|
|
541
546
|
}
|
|
@@ -299,5 +299,9 @@
|
|
|
299
299
|
"Only accepts Breadcrumbs.Item as children. Non-Item children are silently ignored and will not render.",
|
|
300
300
|
"The last Breadcrumbs.Item is automatically marked as the current page and is not clickable.",
|
|
301
301
|
"Provide an aria-label for accessibility (e.g. aria-label=\"Breadcrumb navigation\")."
|
|
302
|
+
],
|
|
303
|
+
"keywords": [
|
|
304
|
+
"breadcrumb nav",
|
|
305
|
+
"path navigation"
|
|
302
306
|
]
|
|
303
307
|
}
|
|
@@ -402,5 +402,10 @@
|
|
|
402
402
|
"usageRules": [
|
|
403
403
|
"The `theme` prop is optional — components inherit theme from the nearest ThemeProvider or AppContainer ancestor. Do NOT pass `theme` to every component; wrap the app at the root instead.",
|
|
404
404
|
"Variants: check with get_component_props — they differ from other UI libraries (no \"primary\", no \"secondary\")."
|
|
405
|
+
],
|
|
406
|
+
"keywords": [
|
|
407
|
+
"action button",
|
|
408
|
+
"cta",
|
|
409
|
+
"submit"
|
|
405
410
|
]
|
|
406
411
|
}
|
|
@@ -329,5 +329,14 @@
|
|
|
329
329
|
"Card only accepts Card.Header, Card.Body, and Card.Actions as children. Other elements are silently ignored.",
|
|
330
330
|
"Card.Header has a fixed design. Use Card.Body for content and Card.Actions for button rows.",
|
|
331
331
|
"For collapsible cards, pass `isCollapsible` to Card. Use `isCollapsed`/`onCollapse` for controlled mode, or `defaultCollapsed` for uncontrolled."
|
|
332
|
+
],
|
|
333
|
+
"disambiguation": "Card is a generic container with Header/Body/Actions. Do NOT use for KPI/metric tiles — use DataCard from @redsift/dashboard instead.",
|
|
334
|
+
"antiPatterns": [
|
|
335
|
+
"❌ Using Card with inline styles for KPI tiles → ✅ Use DataCard from @redsift/dashboard for metric/KPI tiles."
|
|
336
|
+
],
|
|
337
|
+
"keywords": [
|
|
338
|
+
"container",
|
|
339
|
+
"card panel",
|
|
340
|
+
"content card"
|
|
332
341
|
]
|
|
333
342
|
}
|
|
@@ -402,5 +402,11 @@
|
|
|
402
402
|
"Content children (after DetailedCard.Header) must be DetailedCard.Section components. Other elements will not receive collapse/expand state injection via cloneElement.",
|
|
403
403
|
"DetailedCard.Header is extracted via partitionComponents — it must be a direct child, not wrapped.",
|
|
404
404
|
"DetailedCard.CollapsibleSectionItems must be a child of DetailedCard.Section for auto-detection of collapsible state."
|
|
405
|
+
],
|
|
406
|
+
"disambiguation": "DetailedCard is a complex card with collapsible sections. Use for rich detail panels, not KPI tiles. For KPI tiles use DataCard from @redsift/dashboard.",
|
|
407
|
+
"keywords": [
|
|
408
|
+
"expandable card",
|
|
409
|
+
"collapsible card",
|
|
410
|
+
"detail panel"
|
|
405
411
|
]
|
|
406
412
|
}
|
|
@@ -519,5 +519,18 @@
|
|
|
519
519
|
}
|
|
520
520
|
],
|
|
521
521
|
"examples": [],
|
|
522
|
-
"tags": {}
|
|
522
|
+
"tags": {},
|
|
523
|
+
"antiPatterns": [
|
|
524
|
+
"❌ gap={4} → ✅ gap=\"4px\" — gap is a string prop (CSS value), not a number.",
|
|
525
|
+
"❌ style={{ display: \"flex\", gap: 4 }} → ✅ <Flexbox gap=\"4px\"> — use the Flexbox component instead of inline styles."
|
|
526
|
+
],
|
|
527
|
+
"keywords": [
|
|
528
|
+
"flex container",
|
|
529
|
+
"row",
|
|
530
|
+
"column",
|
|
531
|
+
"stack",
|
|
532
|
+
"box",
|
|
533
|
+
"hstack",
|
|
534
|
+
"vstack"
|
|
535
|
+
]
|
|
523
536
|
}
|
|
@@ -390,5 +390,16 @@
|
|
|
390
390
|
"usageRules": [
|
|
391
391
|
"The `theme` prop is optional — inherited from context. Do NOT pass `theme` to every component.",
|
|
392
392
|
"Valid `color` values come from NeutralColorPalette (\"black\", \"x-dark-grey\", \"dark-grey\", \"mid-grey\", \"light-grey\", \"x-light-grey\", \"white\") and NotificationsColorPalette (\"error\", \"warning\", \"success\", \"info\", \"question\", \"no-data\"). You can also pass hex/rgb strings."
|
|
393
|
+
],
|
|
394
|
+
"antiPatterns": [
|
|
395
|
+
"❌ color=\"#22c55e\" or color=\"var(--rs-color-green-500)\" → ✅ color=\"success\" — use semantic color values from NeutralColorPalette / NotificationsColorPalette."
|
|
396
|
+
],
|
|
397
|
+
"keywords": [
|
|
398
|
+
"title",
|
|
399
|
+
"header text",
|
|
400
|
+
"section heading",
|
|
401
|
+
"h1",
|
|
402
|
+
"h2",
|
|
403
|
+
"h3"
|
|
393
404
|
]
|
|
394
405
|
}
|
|
@@ -321,5 +321,10 @@
|
|
|
321
321
|
}
|
|
322
322
|
],
|
|
323
323
|
"examples": [],
|
|
324
|
-
"tags": {}
|
|
324
|
+
"tags": {},
|
|
325
|
+
"disambiguation": "Icon renders an SVG icon from a path string. Always import mdi* icons from @redsift/icons. NEVER use unicode glyphs (✓, ✕, ⚠, ›) and NEVER import from @mdi/js.",
|
|
326
|
+
"antiPatterns": [
|
|
327
|
+
"❌ Unicode characters (✓, ✕, ⚠, ›) → ✅ <Icon path={mdiCheck} /> from @redsift/icons.",
|
|
328
|
+
"❌ import { mdiPlus } from \"@mdi/js\" → ✅ import { mdiPlus } from \"@redsift/icons\"."
|
|
329
|
+
]
|
|
325
330
|
}
|
|
@@ -371,5 +371,14 @@
|
|
|
371
371
|
"usageRules": [
|
|
372
372
|
"The `theme` prop is optional — inherited from context. Do NOT pass `theme` to every component.",
|
|
373
373
|
"Requires `icon` prop (SVG path string from @redsift/icons). Import icons from @redsift/icons, not @mdi/js."
|
|
374
|
+
],
|
|
375
|
+
"disambiguation": "IconButton renders a clickable icon. Requires icon prop (SVG path string). Import icons from @redsift/icons, not @mdi/js.",
|
|
376
|
+
"antiPatterns": [
|
|
377
|
+
"❌ Unicode characters as icon content → ✅ icon={mdiPlus} prop with mdi imports from @redsift/icons.",
|
|
378
|
+
"❌ import { mdiPlus } from \"@mdi/js\" → ✅ import { mdiPlus } from \"@redsift/icons\"."
|
|
379
|
+
],
|
|
380
|
+
"keywords": [
|
|
381
|
+
"icon action",
|
|
382
|
+
"toolbar button"
|
|
374
383
|
]
|
|
375
384
|
}
|
|
@@ -378,5 +378,15 @@
|
|
|
378
378
|
"usageRules": [
|
|
379
379
|
"Content via `children`, NOT a `label` prop. Usage: `<Pill color=\"blue\" size=\"small\">Active</Pill>`",
|
|
380
380
|
"The `theme` prop is optional — inherited from context."
|
|
381
|
+
],
|
|
382
|
+
"antiPatterns": [
|
|
383
|
+
"❌ <Pill label=\"Active\" /> → ✅ <Pill color=\"success\">Active</Pill> — Pill uses children for content, NOT a label prop."
|
|
384
|
+
],
|
|
385
|
+
"keywords": [
|
|
386
|
+
"chip",
|
|
387
|
+
"tag",
|
|
388
|
+
"badge",
|
|
389
|
+
"label",
|
|
390
|
+
"status pill"
|
|
381
391
|
]
|
|
382
392
|
}
|
|
@@ -334,5 +334,14 @@
|
|
|
334
334
|
}
|
|
335
335
|
],
|
|
336
336
|
"examples": [],
|
|
337
|
-
"tags": {}
|
|
337
|
+
"tags": {},
|
|
338
|
+
"disambiguation": "Always use Skeleton from @redsift/design-system. NEVER import Skeleton from @mui/material — it will not match the DS theme.",
|
|
339
|
+
"antiPatterns": [
|
|
340
|
+
"❌ import { Skeleton } from \"@mui/material\" → ✅ import { Skeleton } from \"@redsift/design-system\" — always use the DS Skeleton."
|
|
341
|
+
],
|
|
342
|
+
"keywords": [
|
|
343
|
+
"loading placeholder",
|
|
344
|
+
"shimmer",
|
|
345
|
+
"skeleton loader"
|
|
346
|
+
]
|
|
338
347
|
}
|
|
@@ -334,5 +334,10 @@
|
|
|
334
334
|
}
|
|
335
335
|
],
|
|
336
336
|
"examples": [],
|
|
337
|
-
"tags": {}
|
|
337
|
+
"tags": {},
|
|
338
|
+
"disambiguation": "Use SkeletonCircle from @redsift/design-system for avatar/icon-shaped loading placeholders.",
|
|
339
|
+
"keywords": [
|
|
340
|
+
"avatar placeholder",
|
|
341
|
+
"circle skeleton"
|
|
342
|
+
]
|
|
338
343
|
}
|
|
@@ -367,5 +367,10 @@
|
|
|
367
367
|
}
|
|
368
368
|
],
|
|
369
369
|
"examples": [],
|
|
370
|
-
"tags": {}
|
|
370
|
+
"tags": {},
|
|
371
|
+
"disambiguation": "Use SkeletonText from @redsift/design-system for paragraph-shaped loading placeholders.",
|
|
372
|
+
"keywords": [
|
|
373
|
+
"text placeholder",
|
|
374
|
+
"paragraph skeleton"
|
|
375
|
+
]
|
|
371
376
|
}
|
|
@@ -529,5 +529,9 @@
|
|
|
529
529
|
"usageRules": [
|
|
530
530
|
"Must be a child of <Tabs>. Requires TabsContext — rendering outside <Tabs> will silently fail (no selection, no keyboard navigation).",
|
|
531
531
|
"Always provide a `value` prop that matches a corresponding TabPanel."
|
|
532
|
+
],
|
|
533
|
+
"keywords": [
|
|
534
|
+
"tab item",
|
|
535
|
+
"tab button"
|
|
532
536
|
]
|
|
533
537
|
}
|
|
@@ -296,5 +296,9 @@
|
|
|
296
296
|
"Must be used within a <Tabs> provider. Requires TabsContext — rendering outside <Tabs> will silently fail (panel never shown).",
|
|
297
297
|
"The `value` prop must match a corresponding Tab `value`.",
|
|
298
298
|
"Use `keepMounted` to keep panel content in DOM when inactive (useful for preserving form state)."
|
|
299
|
+
],
|
|
300
|
+
"keywords": [
|
|
301
|
+
"tab content",
|
|
302
|
+
"tab panel"
|
|
299
303
|
]
|
|
300
304
|
}
|