@redsift/ds-mcp-server 12.5.3-alpha.4 → 12.5.3-alpha.6

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.
Files changed (54) hide show
  1. package/consumer-instructions/.cursorrules +14 -0
  2. package/consumer-instructions/.windsurfrules +18 -4
  3. package/consumer-instructions/CLAUDE.md +25 -11
  4. package/consumer-instructions/redsift-design-system.instructions.md +25 -11
  5. package/data/docs/components/charts/BaseBarChart.json +1 -1
  6. package/data/docs/components/charts/LineChart.json +1 -1
  7. package/data/docs/components/dashboard/DataCard.json +6 -1
  8. package/data/docs/components/dashboard/DataCardBody.json +5 -1
  9. package/data/docs/components/dashboard/DataCardHeader.json +4 -1
  10. package/data/docs/components/dashboard/DataCardListbox.json +5 -1
  11. package/data/docs/components/design-system/AppContent.json +4 -1
  12. package/data/docs/components/design-system/AppSidePanel.json +4 -1
  13. package/data/docs/components/design-system/Breadcrumbs.json +6 -1
  14. package/data/docs/components/design-system/Button.json +5 -1
  15. package/data/docs/components/design-system/Card.json +6 -1
  16. package/data/docs/components/design-system/CardActions.json +4 -1
  17. package/data/docs/components/design-system/CardBody.json +4 -1
  18. package/data/docs/components/design-system/CardHeader.json +4 -1
  19. package/data/docs/components/design-system/DetailedCard.json +6 -1
  20. package/data/docs/components/design-system/DetailedCardHeader.json +4 -1
  21. package/data/docs/components/design-system/DetailedCardSection.json +4 -1
  22. package/data/docs/components/design-system/Heading.json +5 -1
  23. package/data/docs/components/design-system/IconButton.json +5 -1
  24. package/data/docs/components/design-system/Pill.json +5 -1
  25. package/data/docs/components/design-system/Tab.json +5 -1
  26. package/data/docs/components/design-system/TabPanel.json +6 -1
  27. package/data/docs/components/design-system/Tabs.json +6 -1
  28. package/data/docs/components/design-system/Text.json +5 -1
  29. package/data/docs/components/pickers/Combobox.json +6 -1
  30. package/data/docs/components/pickers/ComboboxContent.json +6 -1
  31. package/data/docs/components/pickers/MenuButton.json +5 -1
  32. package/data/docs/components/pickers/MenuButtonContent.json +5 -1
  33. package/data/docs/components/pickers/Select.json +6 -1
  34. package/data/docs/components/popovers/Dialog.json +4 -1
  35. package/data/docs/components/popovers/Toggletip.json +6 -1
  36. package/data/docs/components/popovers/Tooltip.json +5 -1
  37. package/data/docs/components-index.json +0 -504
  38. package/data/docs/components.json +7945 -24342
  39. package/data/docs/llms-full.txt +657 -2571
  40. package/data/docs/llms.txt +5 -77
  41. package/data/metadata.json +2 -2
  42. package/data/patterns/drilldowned-datagrid-server-side.mdx +19 -0
  43. package/dist/data-store.d.ts +2 -0
  44. package/dist/data-store.d.ts.map +1 -1
  45. package/dist/data-store.js +4 -0
  46. package/dist/data-store.js.map +1 -1
  47. package/dist/pattern-store.d.ts +5 -0
  48. package/dist/pattern-store.d.ts.map +1 -1
  49. package/dist/pattern-store.js +30 -0
  50. package/dist/pattern-store.js.map +1 -1
  51. package/dist/resources.d.ts.map +1 -1
  52. package/dist/resources.js +34 -6
  53. package/dist/resources.js.map +1 -1
  54. package/package.json +2 -2
@@ -40,6 +40,16 @@ When applying colors, spacing, or typography:
40
40
  1. Call `search_design_tokens` to find the correct token names and CSS custom properties.
41
41
  2. Do not hardcode color hex values — use the design token CSS variables.
42
42
 
43
+ ## Rule 5 — Host App Setup (Adopting or Migrating to DS)
44
+
45
+ When adopting `@redsift/*` components in a new project or migrating from raw HTML/CSS/Tailwind:
46
+
47
+ 1. Read the `design-system://getting-started/host-app` MCP resource FIRST.
48
+ 2. Ensure the app entry point imports `@redsift/design-system/style/index.css`.
49
+ 3. Wrap the app with `<AppContainer>` (full Red Sift shell) or `<ThemeProvider value={{ theme }}>` (standalone). Do NOT pass `theme` to every individual component — use context at the root.
50
+ 4. Import icons from `@redsift/icons`, not `@mdi/js`.
51
+ 5. Remove conflicting Tailwind/utility-CSS classes (`bg-*`, `text-*`, `border-*`, `dark:*`) from elements that render or wrap DS components.
52
+
43
53
  ## Common Mistakes
44
54
 
45
55
  These are real examples of props that do NOT exist in the Red Sift DS:
@@ -52,6 +62,10 @@ These are real examples of props that do NOT exist in the Red Sift DS:
52
62
  - `import { Select } from '@redsift/design-system'` → Should be `@redsift/pickers`
53
63
  - `import { Dialog } from '@redsift/design-system'` → Should be `@redsift/popovers`
54
64
  - `import { DataGrid } from '@redsift/design-system'` → Should be `@redsift/table`
65
+ - Passing `theme` to every component → Wrap app with `<AppContainer>` or `<ThemeProvider>` at root
66
+ - Missing `@redsift/design-system/style/index.css` import → Must import at app entry point
67
+ - `import { mdiPlus } from '@mdi/js'` → Should be `@redsift/icons`
68
+ - Tailwind `bg-*`/`text-*`/`dark:*` on DS wrappers → Use DS tokens or layout primitives
55
69
 
56
70
  ## NEVER Do This
57
71
 
@@ -10,7 +10,7 @@ This project uses the **Red Sift Design System** (`@redsift/*` packages). The de
10
10
 
11
11
  1. Configure the MCP server — see [MCP Server docs](https://design-system.redsift.io/introduction/mcp-server)
12
12
  2. Copy this file to your project root as `.cursorrules`
13
- 3. Verify: ask the AI *"What props does Button accept?"* — it should call `get_component_props`, not answer from memory
13
+ 3. Verify: ask the AI _"What props does Button accept?"_ — it should call `get_component_props`, not answer from memory
14
14
 
15
15
  ## Rule 1 — Mandatory Prop Lookup
16
16
 
@@ -40,6 +40,16 @@ When applying colors, spacing, or typography:
40
40
  1. Call `search_design_tokens` to find the correct token names and CSS custom properties.
41
41
  2. Do not hardcode color hex values — use the design token CSS variables.
42
42
 
43
+ ## Rule 5 — Host App Setup (Adopting or Migrating to DS)
44
+
45
+ When adopting `@redsift/*` components in a new project or migrating from raw HTML/CSS/Tailwind:
46
+
47
+ 1. Read the `design-system://getting-started/host-app` MCP resource FIRST.
48
+ 2. Ensure the app entry point imports `@redsift/design-system/style/index.css`.
49
+ 3. Wrap the app with `<AppContainer>` (full Red Sift shell) or `<ThemeProvider value={{ theme }}>` (standalone). Do NOT pass `theme` to every individual component — use context at the root.
50
+ 4. Import icons from `@redsift/icons`, not `@mdi/js`.
51
+ 5. Remove conflicting Tailwind/utility-CSS classes (`bg-*`, `text-*`, `border-*`, `dark:*`) from elements that render or wrap DS components.
52
+
43
53
  ## Common Mistakes
44
54
 
45
55
  These are real examples of props that do NOT exist in the Red Sift DS:
@@ -52,6 +62,10 @@ These are real examples of props that do NOT exist in the Red Sift DS:
52
62
  - `import { Select } from '@redsift/design-system'` → Should be `@redsift/pickers`
53
63
  - `import { Dialog } from '@redsift/design-system'` → Should be `@redsift/popovers`
54
64
  - `import { DataGrid } from '@redsift/design-system'` → Should be `@redsift/table`
65
+ - Passing `theme` to every component → Wrap app with `<AppContainer>` or `<ThemeProvider>` at root
66
+ - Missing `@redsift/design-system/style/index.css` import → Must import at app entry point
67
+ - `import { mdiPlus } from '@mdi/js'` → Should be `@redsift/icons`
68
+ - Tailwind `bg-*`/`text-*`/`dark:*` on DS wrappers → Use DS tokens or layout primitives
55
69
 
56
70
  ## NEVER Do This
57
71
 
@@ -75,6 +89,6 @@ import { Select } from '@redsift/design-system';
75
89
 
76
90
  Test that your AI assistant is using the MCP server correctly with these prompts:
77
91
 
78
- 1. *"What props does Button accept?"* → Should call `get_component_props`, NOT answer from memory
79
- 2. *"Import the Select component"* → Should call `get_component_usage`, return `@redsift/pickers`
80
- 3. *"Create a data table page"* → Should call `search_patterns` first, then follow the pattern spec
92
+ 1. _"What props does Button accept?"_ → Should call `get_component_props`, NOT answer from memory
93
+ 2. _"Import the Select component"_ → Should call `get_component_usage`, return `@redsift/pickers`
94
+ 3. _"Create a data table page"_ → Should call `search_patterns` first, then follow the pattern spec
@@ -40,6 +40,16 @@ When applying colors, spacing, or typography:
40
40
  1. Call `search_design_tokens` to find the correct token names and CSS custom properties.
41
41
  2. Do not hardcode color hex values — use the design token CSS variables.
42
42
 
43
+ ## Rule 5 — Host App Setup (Adopting or Migrating to DS)
44
+
45
+ When adopting `@redsift/*` components in a new project or migrating from raw HTML/CSS/Tailwind:
46
+
47
+ 1. Read the `design-system://getting-started/host-app` MCP resource FIRST.
48
+ 2. Ensure the app entry point imports `@redsift/design-system/style/index.css`.
49
+ 3. Wrap the app with `<AppContainer>` (full Red Sift shell) or `<ThemeProvider value={{ theme }}>` (standalone). Do NOT pass `theme` to every individual component — use context at the root.
50
+ 4. Import icons from `@redsift/icons`, not `@mdi/js`.
51
+ 5. Remove conflicting Tailwind/utility-CSS classes (`bg-*`, `text-*`, `border-*`, `dark:*`) from elements that render or wrap DS components.
52
+
43
53
  ## NEVER Do This
44
54
 
45
55
  These are concrete examples of wrong code. **Every single one will fail:**
@@ -62,17 +72,21 @@ import { Select } from '@redsift/design-system';
62
72
 
63
73
  ## Common Mistakes
64
74
 
65
- | Wrong (guessed) | Correct (actual) | How to verify |
66
- | --------------------------------------------------- | -------------------------------------------- | --------------------------------------- |
67
- | `variant="primary"` | Look up actual variants | `get_component_props` for the component |
68
- | `size="sm"` / `size="lg"` | Most components have no size prop | `get_component_props` for the component |
69
- | `colorScheme="red"` | Does not exist | `get_component_props` for the component |
70
- | `isDisabled` | `disabled` | `get_component_props` for the component |
71
- | `onPress` | `onClick` | `get_component_props` for the component |
72
- | `leftIcon` / `rightIcon` | Look up actual icon prop names | `get_component_props` for the component |
73
- | `import { Select } from '@redsift/design-system'` | `import { Select } from '@redsift/pickers'` | `get_component_usage` |
74
- | `import { Dialog } from '@redsift/design-system'` | `import { Dialog } from '@redsift/popovers'` | `get_component_usage` |
75
- | `import { DataGrid } from '@redsift/design-system'` | `import { DataGrid } from '@redsift/table'` | `get_component_usage` |
75
+ | Wrong (guessed) | Correct (actual) | How to verify |
76
+ | --------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------ |
77
+ | `variant="primary"` | Look up actual variants | `get_component_props` for the component |
78
+ | `size="sm"` / `size="lg"` | Most components have no size prop | `get_component_props` for the component |
79
+ | `colorScheme="red"` | Does not exist | `get_component_props` for the component |
80
+ | `isDisabled` | `disabled` | `get_component_props` for the component |
81
+ | `onPress` | `onClick` | `get_component_props` for the component |
82
+ | `leftIcon` / `rightIcon` | Look up actual icon prop names | `get_component_props` for the component |
83
+ | `import { Select } from '@redsift/design-system'` | `import { Select } from '@redsift/pickers'` | `get_component_usage` |
84
+ | `import { Dialog } from '@redsift/design-system'` | `import { Dialog } from '@redsift/popovers'` | `get_component_usage` |
85
+ | `import { DataGrid } from '@redsift/design-system'` | `import { DataGrid } from '@redsift/table'` | `get_component_usage` |
86
+ | Passing `theme` to every component | Wrap app with `<AppContainer>` or `<ThemeProvider>` at root | `design-system://getting-started/host-app` |
87
+ | Missing `@redsift/design-system/style/index.css` | Must import at app entry point | `design-system://getting-started/host-app` |
88
+ | `import { mdiPlus } from '@mdi/js'` | `import { mdiPlus } from '@redsift/icons'` | `get_component_usage` |
89
+ | Tailwind `bg-*`/`text-*`/`dark:*` on DS wrappers | Use DS tokens or layout primitives | `design-system://getting-started/host-app` |
76
90
 
77
91
  ## Verification
78
92
 
@@ -44,6 +44,16 @@ When applying colors, spacing, or typography:
44
44
  1. Call `search_design_tokens` to find the correct token names and CSS custom properties.
45
45
  2. Do not hardcode color hex values — use the design token CSS variables.
46
46
 
47
+ ## Rule 5 — Host App Setup (Adopting or Migrating to DS)
48
+
49
+ When adopting `@redsift/*` components in a new project or migrating from raw HTML/CSS/Tailwind:
50
+
51
+ 1. Read the `design-system://getting-started/host-app` MCP resource FIRST.
52
+ 2. Ensure the app entry point imports `@redsift/design-system/style/index.css`.
53
+ 3. Wrap the app with `<AppContainer>` (full Red Sift shell) or `<ThemeProvider value={{ theme }}>` (standalone). Do NOT pass `theme` to every individual component — use context at the root.
54
+ 4. Import icons from `@redsift/icons`, not `@mdi/js`.
55
+ 5. Remove conflicting Tailwind/utility-CSS classes (`bg-*`, `text-*`, `border-*`, `dark:*`) from elements that render or wrap DS components.
56
+
47
57
  ## NEVER Do This
48
58
 
49
59
  These are concrete examples of wrong code. **Every single one will fail:**
@@ -66,17 +76,21 @@ import { Select } from '@redsift/design-system';
66
76
 
67
77
  ## Common Mistakes
68
78
 
69
- | Wrong (guessed) | Correct (actual) | How to verify |
70
- | --------------------------------------------------- | -------------------------------------------- | --------------------------------------- |
71
- | `variant="primary"` | Look up actual variants | `get_component_props` for the component |
72
- | `size="sm"` / `size="lg"` | Most components have no size prop | `get_component_props` for the component |
73
- | `colorScheme="red"` | Does not exist | `get_component_props` for the component |
74
- | `isDisabled` | `disabled` | `get_component_props` for the component |
75
- | `onPress` | `onClick` | `get_component_props` for the component |
76
- | `leftIcon` / `rightIcon` | Look up actual icon prop names | `get_component_props` for the component |
77
- | `import { Select } from '@redsift/design-system'` | `import { Select } from '@redsift/pickers'` | `get_component_usage` |
78
- | `import { Dialog } from '@redsift/design-system'` | `import { Dialog } from '@redsift/popovers'` | `get_component_usage` |
79
- | `import { DataGrid } from '@redsift/design-system'` | `import { DataGrid } from '@redsift/table'` | `get_component_usage` |
79
+ | Wrong (guessed) | Correct (actual) | How to verify |
80
+ | --------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------ |
81
+ | `variant="primary"` | Look up actual variants | `get_component_props` for the component |
82
+ | `size="sm"` / `size="lg"` | Most components have no size prop | `get_component_props` for the component |
83
+ | `colorScheme="red"` | Does not exist | `get_component_props` for the component |
84
+ | `isDisabled` | `disabled` | `get_component_props` for the component |
85
+ | `onPress` | `onClick` | `get_component_props` for the component |
86
+ | `leftIcon` / `rightIcon` | Look up actual icon prop names | `get_component_props` for the component |
87
+ | `import { Select } from '@redsift/design-system'` | `import { Select } from '@redsift/pickers'` | `get_component_usage` |
88
+ | `import { Dialog } from '@redsift/design-system'` | `import { Dialog } from '@redsift/popovers'` | `get_component_usage` |
89
+ | `import { DataGrid } from '@redsift/design-system'` | `import { DataGrid } from '@redsift/table'` | `get_component_usage` |
90
+ | Passing `theme` to every component | Wrap app with `<AppContainer>` or `<ThemeProvider>` at root | `design-system://getting-started/host-app` |
91
+ | Missing `@redsift/design-system/style/index.css` | Must import at app entry point | `design-system://getting-started/host-app` |
92
+ | `import { mdiPlus } from '@mdi/js'` | `import { mdiPlus } from '@redsift/icons'` | `get_component_usage` |
93
+ | Tailwind `bg-*`/`text-*`/`dark:*` on DS wrappers | Use DS tokens or layout primitives | `design-system://getting-started/host-app` |
80
94
 
81
95
  ## Verification
82
96
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "BaseBarChart",
3
- "description": "BarChart visualizes categorical data with rectangular bars.\nBuilt on D3.js with responsive sizing and interactive tooltips.\n\nSupports horizontal/vertical orientation, stacked/grouped bars,\nand various legend placements.\n\nData format: `CategoryData` `[{ key: string, value: number }]`",
3
+ "description": "BarChart visualizes categorical data with rectangular bars.\nBuilt on D3.js with responsive sizing and interactive tooltips.\n\nThis is the only public entry point for bar charts. Do not import\n`RenderedLinearBarChart`, `RenderedOrdinalBarChart`, `EmptyBarChart`, or\n`LoadingBarChart` directly — `BarChart` selects the correct renderer\n(linear vs. ordinal scale) automatically based on the data type,\nand manages all loading and empty states internally.\n\nSupports horizontal/vertical orientation, stacked/grouped bars,\nand various legend placements.\n\nData format: `CategoryData` `[{ key: string, value: number }]`",
4
4
  "package": "@redsift/charts",
5
5
  "filePath": "packages/charts/src/components/BarChart/BarChart.tsx",
6
6
  "props": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "LineChart",
3
- "description": "LineChart displays trends over time or continuous data.\nBuilt on D3.js with smooth interpolation and interactive data points.\n\nData format: `LinearData` `[{ key: Date, value: number, label?: string }]`",
3
+ "description": "LineChart displays trends over time or continuous data.\nBuilt on D3.js with smooth interpolation and interactive data points.\n\nThis is the only public entry point for line charts. Do not import\n`RenderedLineChart`, `EmptyLineChart`, or `LoadingLineChart` directly —\nthose are internal sub-components that `LineChart` selects automatically\nbased on whether `data` is present and non-empty.\n\nData format: `LinearData` `[{ key: Date, value: number, label?: string }]`",
4
4
  "package": "@redsift/charts",
5
5
  "filePath": "packages/charts/src/components/LineChart/LineChart.tsx",
6
6
  "props": [
@@ -296,5 +296,10 @@
296
296
  }
297
297
  ],
298
298
  "examples": [],
299
- "tags": {}
299
+ "tags": {},
300
+ "usageRules": [
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
+ "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
+ "The `slot` prop is not supported. Do not pass slot=\"heading\" or similar — use the compound sub-component API instead."
304
+ ]
300
305
  }
@@ -435,5 +435,9 @@
435
435
  }
436
436
  ],
437
437
  "examples": [],
438
- "tags": {}
438
+ "tags": {},
439
+ "usageRules": [
440
+ "Must be a direct child of <DataCard>. Do not place DataCard.Listbox or DataCard.Header inside DataCard.Body.",
441
+ "Children should be <DataRow> components."
442
+ ]
439
443
  }
@@ -300,5 +300,8 @@
300
300
  }
301
301
  ],
302
302
  "examples": [],
303
- "tags": {}
303
+ "tags": {},
304
+ "usageRules": [
305
+ "Must be a direct child of <DataCard>, not nested inside DataCard.Body or DataCard.Listbox."
306
+ ]
304
307
  }
@@ -533,5 +533,9 @@
533
533
  }
534
534
  ],
535
535
  "examples": [],
536
- "tags": {}
536
+ "tags": {},
537
+ "usageRules": [
538
+ "Must be a direct child of <DataCard>. Do not place DataCard.Body or DataCard.Header inside DataCard.Listbox.",
539
+ "Children should be <DataRow> components with onClick and hasFilterIcon for drilldown interactions."
540
+ ]
537
541
  }
@@ -562,5 +562,8 @@
562
562
  }
563
563
  ],
564
564
  "examples": [],
565
- "tags": {}
565
+ "tags": {},
566
+ "usageRules": [
567
+ "Must be a direct child of <AppContainer>. This is where page content goes."
568
+ ]
566
569
  }
@@ -83,5 +83,8 @@
83
83
  }
84
84
  ],
85
85
  "examples": [],
86
- "tags": {}
86
+ "tags": {},
87
+ "usageRules": [
88
+ "Must be a direct child of <AppContainer>. Houses the side navigation."
89
+ ]
87
90
  }
@@ -294,5 +294,10 @@
294
294
  }
295
295
  ],
296
296
  "examples": [],
297
- "tags": {}
297
+ "tags": {},
298
+ "usageRules": [
299
+ "Only accepts Breadcrumbs.Item as children. Non-Item children are silently ignored and will not render.",
300
+ "The last Breadcrumbs.Item is automatically marked as the current page and is not clickable.",
301
+ "Provide an aria-label for accessibility (e.g. aria-label=\"Breadcrumb navigation\")."
302
+ ]
298
303
  }
@@ -398,5 +398,9 @@
398
398
  }
399
399
  ],
400
400
  "examples": [],
401
- "tags": {}
401
+ "tags": {},
402
+ "usageRules": [
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
+ "Variants: check with get_component_props — they differ from other UI libraries (no \"primary\", no \"secondary\")."
405
+ ]
402
406
  }
@@ -324,5 +324,10 @@
324
324
  }
325
325
  ],
326
326
  "examples": [],
327
- "tags": {}
327
+ "tags": {},
328
+ "usageRules": [
329
+ "Card only accepts Card.Header, Card.Body, and Card.Actions as children. Other elements are silently ignored.",
330
+ "Card.Header has a fixed design. Use Card.Body for content and Card.Actions for button rows.",
331
+ "For collapsible cards, pass `isCollapsible` to Card. Use `isCollapsed`/`onCollapse` for controlled mode, or `defaultCollapsed` for uncontrolled."
332
+ ]
328
333
  }
@@ -427,5 +427,8 @@
427
427
  }
428
428
  ],
429
429
  "examples": [],
430
- "tags": {}
430
+ "tags": {},
431
+ "usageRules": [
432
+ "Must be a direct child of <Card>."
433
+ ]
431
434
  }
@@ -427,5 +427,8 @@
427
427
  }
428
428
  ],
429
429
  "examples": [],
430
- "tags": {}
430
+ "tags": {},
431
+ "usageRules": [
432
+ "Must be a direct child of <Card>."
433
+ ]
431
434
  }
@@ -424,5 +424,8 @@
424
424
  }
425
425
  ],
426
426
  "examples": [],
427
- "tags": {}
427
+ "tags": {},
428
+ "usageRules": [
429
+ "Must be a direct child of <Card>."
430
+ ]
428
431
  }
@@ -397,5 +397,10 @@
397
397
  }
398
398
  ],
399
399
  "examples": [],
400
- "tags": {}
400
+ "tags": {},
401
+ "usageRules": [
402
+ "Content children (after DetailedCard.Header) must be DetailedCard.Section components. Other elements will not receive collapse/expand state injection via cloneElement.",
403
+ "DetailedCard.Header is extracted via partitionComponents — it must be a direct child, not wrapped.",
404
+ "DetailedCard.CollapsibleSectionItems must be a child of DetailedCard.Section for auto-detection of collapsible state."
405
+ ]
401
406
  }
@@ -33,5 +33,8 @@
33
33
  }
34
34
  ],
35
35
  "examples": [],
36
- "tags": {}
36
+ "tags": {},
37
+ "usageRules": [
38
+ "Must be a direct child of <DetailedCard>."
39
+ ]
37
40
  }
@@ -86,5 +86,8 @@
86
86
  }
87
87
  ],
88
88
  "examples": [],
89
- "tags": {}
89
+ "tags": {},
90
+ "usageRules": [
91
+ "Must be a direct child of <DetailedCard>. Do not wrap in a <div> — the parent injects `isCollapsed` and `theme` via cloneElement."
92
+ ]
90
93
  }
@@ -386,5 +386,9 @@
386
386
  }
387
387
  ],
388
388
  "examples": [],
389
- "tags": {}
389
+ "tags": {},
390
+ "usageRules": [
391
+ "The `theme` prop is optional — inherited from context. Do NOT pass `theme` to every component.",
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
+ ]
390
394
  }
@@ -367,5 +367,9 @@
367
367
  }
368
368
  ],
369
369
  "examples": [],
370
- "tags": {}
370
+ "tags": {},
371
+ "usageRules": [
372
+ "The `theme` prop is optional — inherited from context. Do NOT pass `theme` to every component.",
373
+ "Requires `icon` prop (SVG path string from @redsift/icons). Import icons from @redsift/icons, not @mdi/js."
374
+ ]
371
375
  }
@@ -374,5 +374,9 @@
374
374
  }
375
375
  ],
376
376
  "examples": [],
377
- "tags": {}
377
+ "tags": {},
378
+ "usageRules": [
379
+ "Content via `children`, NOT a `label` prop. Usage: `<Pill color=\"blue\" size=\"small\">Active</Pill>`",
380
+ "The `theme` prop is optional — inherited from context."
381
+ ]
378
382
  }
@@ -525,5 +525,9 @@
525
525
  }
526
526
  ],
527
527
  "examples": [],
528
- "tags": {}
528
+ "tags": {},
529
+ "usageRules": [
530
+ "Must be a child of <Tabs>. Requires TabsContext — rendering outside <Tabs> will silently fail (no selection, no keyboard navigation).",
531
+ "Always provide a `value` prop that matches a corresponding TabPanel."
532
+ ]
529
533
  }
@@ -291,5 +291,10 @@
291
291
  }
292
292
  ],
293
293
  "examples": [],
294
- "tags": {}
294
+ "tags": {},
295
+ "usageRules": [
296
+ "Must be used within a <Tabs> provider. Requires TabsContext — rendering outside <Tabs> will silently fail (panel never shown).",
297
+ "The `value` prop must match a corresponding Tab `value`.",
298
+ "Use `keepMounted` to keep panel content in DOM when inactive (useful for preserving form state)."
299
+ ]
295
300
  }
@@ -354,5 +354,10 @@
354
354
  }
355
355
  ],
356
356
  "examples": [],
357
- "tags": {}
357
+ "tags": {},
358
+ "usageRules": [
359
+ "Accepts <Tab> and <TabPanel> children. Tabs must have a `value` prop that matches a TabPanel `value`.",
360
+ "For navigation tabs, use the `as` prop on Tab (e.g. as=\"a\" href=\"/path\") instead of onClick.",
361
+ "Supports controlled (`value`/`onChange`) and uncontrolled (`defaultValue`) modes."
362
+ ]
358
363
  }
@@ -414,5 +414,9 @@
414
414
  }
415
415
  ],
416
416
  "examples": [],
417
- "tags": {}
417
+ "tags": {},
418
+ "usageRules": [
419
+ "The `theme` prop is optional — inherited from context. Do NOT pass `theme` to every component.",
420
+ "The `slot` prop is NOT supported. Do not pass slot=\"heading\" or similar — use Heading component or compound sub-component API instead."
421
+ ]
418
422
  }
@@ -316,5 +316,10 @@
316
316
  }
317
317
  ],
318
318
  "examples": [],
319
- "tags": {}
319
+ "tags": {},
320
+ "usageRules": [
321
+ "Must use compound sub-components: <Combobox.Trigger> and <Combobox.Content>.",
322
+ "Combobox.Trigger requires a TextField or TextArea as its child. Custom inputs must forward refs correctly or focus management will break.",
323
+ "Combobox.Content accepts ComboboxContent.Header, .Listbox, and .Footer as children."
324
+ ]
320
325
  }
@@ -449,5 +449,10 @@
449
449
  }
450
450
  ],
451
451
  "examples": [],
452
- "tags": {}
452
+ "tags": {},
453
+ "usageRules": [
454
+ "Only accepts ComboboxContent.Header, ComboboxContent.Listbox, and ComboboxContent.Footer as children. Other elements are silently ignored.",
455
+ "Children are reordered internally (Header → Listbox → Footer) regardless of JSX order.",
456
+ "Must be used inside a <Combobox> — requires popover and combobox context."
457
+ ]
453
458
  }
@@ -236,5 +236,9 @@
236
236
  }
237
237
  ],
238
238
  "examples": [],
239
- "tags": {}
239
+ "tags": {},
240
+ "usageRules": [
241
+ "Must use compound sub-components: <MenuButton.Trigger> and <MenuButton.Content>.",
242
+ "MenuButton.Content accepts MenuButtonContent.Header, .Menu, and .Footer or plain Menu items."
243
+ ]
240
244
  }
@@ -438,5 +438,9 @@
438
438
  }
439
439
  ],
440
440
  "examples": [],
441
- "tags": {}
441
+ "tags": {},
442
+ "usageRules": [
443
+ "Only accepts MenuButtonContent.Header, MenuButtonContent.Menu, and MenuButtonContent.Footer as children. If none are provided, all children are wrapped in a Menu automatically.",
444
+ "Must be used inside a <MenuButton> — requires popover and menu button context."
445
+ ]
442
446
  }
@@ -254,5 +254,10 @@
254
254
  }
255
255
  ],
256
256
  "examples": [],
257
- "tags": {}
257
+ "tags": {},
258
+ "usageRules": [
259
+ "Must use compound sub-components: <Select.Trigger> and <Select.Content>.",
260
+ "Select.Content accepts <Item> components as children for options.",
261
+ "For searchable/filterable lists, use Combobox instead of Select."
262
+ ]
258
263
  }
@@ -110,5 +110,8 @@
110
110
  }
111
111
  ],
112
112
  "examples": [],
113
- "tags": {}
113
+ "tags": {},
114
+ "usageRules": [
115
+ "Must use compound sub-components: <Dialog.Trigger>, <Dialog.Content>, <Dialog.Title>, etc. Do not pass content as a string prop."
116
+ ]
114
117
  }
@@ -180,5 +180,10 @@
180
180
  }
181
181
  ],
182
182
  "examples": [],
183
- "tags": {}
183
+ "tags": {},
184
+ "usageRules": [
185
+ "Must use compound sub-components: <Toggletip.Trigger> and <Toggletip.Content>.",
186
+ "Trigger and Content sub-components must not be used outside <Toggletip> — they throw if ToggletipContext is missing.",
187
+ "Use Toggletip instead of Tooltip when content should be triggered by click (not hover) for touch/keyboard accessibility."
188
+ ]
184
189
  }
@@ -117,5 +117,9 @@
117
117
  }
118
118
  ],
119
119
  "examples": [],
120
- "tags": {}
120
+ "tags": {},
121
+ "usageRules": [
122
+ "Must use compound sub-components: <Tooltip.Trigger> and <Tooltip.Content>. Do not pass content as a string prop.",
123
+ "Trigger and Content sub-components must not be used outside <Tooltip> — they throw if TooltipContext is missing."
124
+ ]
121
125
  }