@primereact/mcp 11.0.0-rc.2 → 11.0.0-rc.4

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 (61) hide show
  1. package/README.md +10 -9
  2. package/data/llms/headless/components/carousel/api.json +1 -1
  3. package/data/llms/headless/components/contextmenu/api.json +2 -2
  4. package/data/llms/headless/components/inputcolor/api.json +1 -1
  5. package/data/llms/headless/components/menu/api.json +2 -2
  6. package/data/llms/headless/components/textarea/api.json +6 -0
  7. package/data/llms/headless/guides/ai/mcp.md +113 -0
  8. package/data/llms/headless/guides/ai/plugin.md +139 -0
  9. package/data/llms/headless/guides/installation.md +1 -1
  10. package/data/llms/hooks/use-filter.md +2 -5
  11. package/data/llms/llms-full.txt +1199 -266
  12. package/data/llms/llms.txt +8 -0
  13. package/data/llms/primitive/components/carousel/api.json +1 -1
  14. package/data/llms/primitive/components/contextmenu/api.json +2 -2
  15. package/data/llms/primitive/components/inputcolor/api.json +1 -1
  16. package/data/llms/primitive/components/menu/api.json +8 -8
  17. package/data/llms/primitive/components/textarea/api.json +6 -6
  18. package/data/llms/primitive/guides/ai/mcp.md +113 -0
  19. package/data/llms/primitive/guides/ai/plugin.md +139 -0
  20. package/data/llms/primitive/guides/icons/primeicons.md +3 -3
  21. package/data/llms/primitive/guides/installation.md +1 -1
  22. package/data/llms/styled/components/datatable.md +20 -40
  23. package/data/llms/styled/components/dataview.md +12 -17
  24. package/data/llms/styled/components/dialog.md +11 -17
  25. package/data/llms/styled/components/fileupload.md +3 -3
  26. package/data/llms/styled/components/inputgroup.md +0 -65
  27. package/data/llms/styled/components/select.md +3 -5
  28. package/data/llms/styled/components/slider.md +1 -2
  29. package/data/llms/styled/components/stepper.md +1 -2
  30. package/data/llms/styled/components/toolbar.md +10 -10
  31. package/data/llms/styled/components/tooltip.md +46 -0
  32. package/data/llms/styled/guides/ai/mcp.md +113 -0
  33. package/data/llms/styled/guides/ai/plugin.md +139 -0
  34. package/data/llms/styled/guides/icons/primeicons.md +3 -3
  35. package/data/llms/styled/guides/installation/astro.md +1 -1
  36. package/data/llms/styled/guides/installation/configuration.md +135 -0
  37. package/data/llms/styled/guides/installation/nextjs.md +1 -1
  38. package/data/llms/styled/guides/installation/react-router.md +1 -1
  39. package/data/llms/styled/guides/installation/tanstack.md +1 -1
  40. package/data/llms/styled/guides/installation/vite.md +1 -1
  41. package/data/llms/tailwind/components/datatable.md +17 -34
  42. package/data/llms/tailwind/components/dataview.md +12 -17
  43. package/data/llms/tailwind/components/dialog.md +12 -17
  44. package/data/llms/tailwind/components/select.md +1 -2
  45. package/data/llms/tailwind/components/slider.md +1 -2
  46. package/data/llms/tailwind/components/toolbar.md +10 -7
  47. package/data/llms/tailwind/guides/ai/mcp.md +113 -0
  48. package/data/llms/tailwind/guides/ai/plugin.md +139 -0
  49. package/data/llms/tailwind/guides/icons/primeicons.md +3 -3
  50. package/data/llms/tailwind/guides/installation/astro.md +1 -1
  51. package/data/llms/tailwind/guides/installation/nextjs.md +1 -1
  52. package/data/llms/tailwind/guides/installation/react-router.md +1 -1
  53. package/data/llms/tailwind/guides/installation/tanstack.md +1 -1
  54. package/data/llms/tailwind/guides/installation/vite.md +1 -1
  55. package/data/manifest.json +2400 -1694
  56. package/data/mcp-data.json +1375 -542
  57. package/dist/index.d.ts +2 -3
  58. package/dist/index.js +1 -1
  59. package/package.json +9 -4
  60. package/data/llms/manifest.json +0 -12409
  61. package/data/llms/mcp-data.json +0 -14481
@@ -366,71 +366,6 @@ export default function SelectDemo() {
366
366
  }
367
367
  ```
368
368
 
369
- ### File Upload
370
-
371
- File upload functionality can be integrated within an InputGroup for inline file selection.
372
-
373
- ```tsx
374
- 'use client';
375
- import { Tag as TagIcon } from '@primeicons/react';
376
- import { CloudUpload } from '@primeicons/react/cloud-upload';
377
- import { Upload } from '@primeicons/react/upload';
378
- import { Button } from '@primereact/ui/button';
379
- import { FileUpload, FileUploadRootInstance } from '@primereact/ui/fileupload';
380
- import { InputGroup } from '@primereact/ui/inputgroup';
381
- import { InputText } from '@primereact/ui/inputtext';
382
-
383
- export default function FileUploadDemo() {
384
- return (
385
- <div className="flex flex-col items-center justify-center gap-4 max-w-93 mx-auto">
386
- <div className="flex flex-wrap items-center justify-center gap-4 w-full">
387
- <InputGroup.Root className="w-fit!">
388
- <FileUpload.Root as={InputGroup.Addon} name="demo2[]" accept="image/*" maxFileSize={1000000}>
389
- {(instance: FileUploadRootInstance) => (
390
- <Button severity="secondary" variant="text" onClick={instance.choose} className="justify-start border-none">
391
- <Upload />
392
- {instance.hasFiles ? instance.state.files.map((file) => file.name).join(', ') : 'Choose file'}
393
- </Button>
394
- )}
395
- </FileUpload.Root>
396
- <InputGroup.Addon>
397
- <Button severity="secondary" variant="text" iconOnly>
398
- <CloudUpload />
399
- </Button>
400
- </InputGroup.Addon>
401
- </InputGroup.Root>
402
- <InputGroup.Root className="flex-1! max-w-fit!">
403
- <InputGroup.Addon>Upload</InputGroup.Addon>
404
- <FileUpload.Root as={InputGroup.Addon} name="demo1[]" accept="image/*" maxFileSize={1000000}>
405
- {(instance: FileUploadRootInstance) => (
406
- <Button severity="secondary" variant="text" onClick={instance.choose} className="justify-start border-none">
407
- <Upload />
408
- {instance.hasFiles ? instance.state.files.map((file) => file.name).join(', ') : 'Choose file'}
409
- </Button>
410
- )}
411
- </FileUpload.Root>
412
- </InputGroup.Root>
413
- </div>
414
-
415
- <InputGroup.Root>
416
- <InputGroup.Addon>
417
- <TagIcon />
418
- </InputGroup.Addon>
419
- <InputText placeholder="Label" />
420
- <FileUpload.Root as={InputGroup.Addon} name="demo3[]" accept="image/*" maxFileSize={1000000}>
421
- {(instance: FileUploadRootInstance) => (
422
- <Button severity="secondary" variant="text" onClick={instance.choose} className="border-none">
423
- <Upload />
424
- {instance.hasFiles ? instance.state.files.map((file) => file.name).join(', ') : 'Browse'}
425
- </Button>
426
- )}
427
- </FileUpload.Root>
428
- </InputGroup.Root>
429
- </div>
430
- );
431
- }
432
- ```
433
-
434
369
  ### Float Label
435
370
 
436
371
  FloatLabel visually integrates a label with its form element. Visit [FloatLabel](/docs/components/floatlabel) documentation for more information.
@@ -10,7 +10,6 @@ import { Search } from '@primeicons/react/search';
10
10
  import { IconField } from '@primereact/ui/iconfield';
11
11
  import { InputText } from '@primereact/ui/inputtext';
12
12
  import { Select, type SelectValueChangeEvent } from '@primereact/ui/select';
13
- import Image from 'next/image';
14
13
  import * as React from 'react';
15
14
 
16
15
  type Language = {
@@ -52,7 +51,7 @@ export default function Preview() {
52
51
  <Select.Value placeholder="Select a language">
53
52
  {language && (
54
53
  <span className="flex items-center gap-2">
55
- <Image
54
+ <img
56
55
  alt={language.label}
57
56
  src="https://primefaces.org/cdn/primevue/images/flag/flag_placeholder.png"
58
57
  className={`flag flag-${language.code}`}
@@ -89,7 +88,7 @@ export default function Preview() {
89
88
  {filteredLanguages.map((l, index) => (
90
89
  <Select.Option key={l.value} index={index} uKey={l.value} className="justify-between">
91
90
  <div className="flex items-center gap-2">
92
- <Image
91
+ <img
93
92
  alt={l.label}
94
93
  src="https://primefaces.org/cdn/primevue/images/flag/flag_placeholder.png"
95
94
  className={`flag flag-${l.code}`}
@@ -665,7 +664,6 @@ import { SelectValueChangeEvent } from '@primereact/ui/select';
665
664
  import { IconField } from '@primereact/ui/iconfield';
666
665
  import { InputText } from '@primereact/ui/inputtext';
667
666
  import { Select } from '@primereact/ui/select';
668
- import Image from 'next/image';
669
667
  import * as React from 'react';
670
668
 
671
669
  type Country = {
@@ -730,7 +728,7 @@ export default function FilterDemo() {
730
728
  {filteredCountries.map((country, index) => (
731
729
  <Select.Option key={country.code} index={index} uKey={country.code}>
732
730
  <div className="flex items-center gap-2">
733
- <Image
731
+ <img
734
732
  alt={country.name}
735
733
  src="https://primefaces.org/cdn/primevue/images/flag/flag_placeholder.png"
736
734
  className={`flag flag-${country.code.toLowerCase()} mr-2`}
@@ -363,7 +363,6 @@ Image filter implementation using multiple sliders.
363
363
  import { Slider } from '@primereact/ui/slider';
364
364
  import { ToggleButton } from '@primereact/ui/togglebutton';
365
365
  import { ToggleButtonGroup, type ToggleButtonGroupValueChangeEvent } from '@primereact/ui/togglebuttongroup';
366
- import Image from 'next/image';
367
366
  import { SliderRootChangeEvent } from '@primereact/ui/slider';
368
367
  import * as React from 'react';
369
368
 
@@ -379,7 +378,7 @@ export default function FilterDemo() {
379
378
 
380
379
  return (
381
380
  <div className="flex flex-col items-center justify-center">
382
- <Image
381
+ <img
383
382
  alt="user header"
384
383
  className="w-80 rounded mb-6"
385
384
  src="https://primefaces.org/cdn/primevue/images/galleria/galleria1.jpg"
@@ -384,7 +384,6 @@ import { Divider } from '@primereact/ui/divider';
384
384
  import { InputText } from '@primereact/ui/inputtext';
385
385
  import { Stepper } from '@primereact/ui/stepper';
386
386
  import { ToggleButton } from '@primereact/ui/togglebutton';
387
- import Image from 'next/image';
388
387
 
389
388
  export default function TemplateDemo() {
390
389
  return (
@@ -559,7 +558,7 @@ export default function TemplateDemo() {
559
558
  <div className="flex flex-col gap-2 mx-auto" style={{ minHeight: '16rem', maxWidth: '24rem' }}>
560
559
  <div className="text-center mt-4 mb-4 text-xl font-semibold">Account created successfully</div>
561
560
  <div className="flex justify-center">
562
- <Image
561
+ <img
563
562
  alt="logo"
564
563
  width={240}
565
564
  height={160}
@@ -113,34 +113,34 @@ import { Search } from '@primeicons/react/search';
113
113
  export default function CustomDemo() {
114
114
  return (
115
115
  <Toolbar.Root
116
- className="max-[768px]:flex-col max-[768px]:items-start"
116
+ className="@container"
117
117
  style={{ borderRadius: '3rem', padding: '0.75rem 1rem 0.75rem 1.5rem', background: 'var(--p-surface-900)', border: 'none' }}
118
118
  >
119
- <Toolbar.Start className="max-[768px]:flex-wrap gap-y-2">
119
+ <Toolbar.Start>
120
120
  <div className="flex items-center gap-1">
121
121
  <i className="pi pi-prime text-xl" style={{ color: 'var(--p-primary-400)' }} />
122
122
  <span className="font-bold text-lg ml-2" style={{ color: 'var(--p-surface-0)' }}>
123
123
  Brand
124
124
  </span>
125
125
  </div>
126
- <div className="ml-6 flex gap-1 flex-wrap max-[768px]:ml-0">
127
- <Button variant="text" size="small" className="text-surface-0 hover:bg-surface-700">
126
+ <div className="ml-6 hidden @min-[620px]:flex gap-1">
127
+ <Button variant="text" size="small" className="text-surface-0! hover:bg-surface-700!">
128
128
  Products
129
129
  </Button>
130
- <Button variant="text" size="small" className="text-surface-0 hover:bg-surface-700">
130
+ <Button variant="text" size="small" className="text-surface-0! hover:bg-surface-700!">
131
131
  Solutions
132
132
  </Button>
133
- <Button variant="text" size="small" className="text-surface-0 hover:bg-surface-700">
133
+ <Button variant="text" size="small" className="text-surface-0! hover:bg-surface-700!">
134
134
  Resources
135
135
  </Button>
136
- <Button variant="text" size="small" className="text-surface-0 hover:bg-surface-700">
136
+ <Button variant="text" size="small" className="text-surface-0! hover:bg-surface-700!">
137
137
  Pricing
138
138
  </Button>
139
139
  </div>
140
140
  </Toolbar.Start>
141
- <Toolbar.End className="max-[768px]:w-full">
142
- <div className="flex items-center gap-2 flex-wrap">
143
- <Button variant="text" size="small" className="text-surface-0 hover:bg-surface-700">
141
+ <Toolbar.End>
142
+ <div className="flex items-center gap-2">
143
+ <Button variant="text" size="small" iconOnly aria-label="Search" className="text-surface-0! hover:bg-surface-700!">
144
144
  <Search />
145
145
  </Button>
146
146
  <Button severity="contrast" size="small">
@@ -138,6 +138,52 @@ export default function BasicDemo() {
138
138
  }
139
139
  ```
140
140
 
141
+ ### Standalone
142
+
143
+ `Tooltip.Manager` only coordinates a group of tooltips, so moving between adjacent ones skips the open delay. A single tooltip doesn't need it, wrap just the `Tooltip.Root` and its `openDelay` is honored on its own.
144
+
145
+ ```tsx
146
+ import { Button } from '@primereact/ui/button';
147
+ import { Tooltip } from '@primereact/ui/tooltip';
148
+
149
+ export default function StandaloneDemo() {
150
+ return (
151
+ <div className="flex items-center justify-center gap-4">
152
+ {/* No Tooltip.Manager wrapper — each Tooltip.Root works on its own */}
153
+ <Tooltip.Root>
154
+ <Tooltip.Trigger as={Button} variant="outlined" severity="secondary">
155
+ Default delays
156
+ </Tooltip.Trigger>
157
+ <Tooltip.Portal>
158
+ <Tooltip.Positioner sideOffset={8}>
159
+ <Tooltip.Popup>
160
+ <Tooltip.Arrow />
161
+ <div className="font-semibold text-sm">No manager needed</div>
162
+ <div className="opacity-75 text-sm mt-1">Used standalone, without a Tooltip.Manager.</div>
163
+ </Tooltip.Popup>
164
+ </Tooltip.Positioner>
165
+ </Tooltip.Portal>
166
+ </Tooltip.Root>
167
+
168
+ <Tooltip.Root openDelay={1200} closeDelay={800}>
169
+ <Tooltip.Trigger as={Button} variant="outlined" severity="secondary">
170
+ 1200ms open · 800ms close
171
+ </Tooltip.Trigger>
172
+ <Tooltip.Portal>
173
+ <Tooltip.Positioner sideOffset={8}>
174
+ <Tooltip.Popup>
175
+ <Tooltip.Arrow />
176
+ <div className="font-semibold text-sm">Independent timing</div>
177
+ <div className="opacity-75 text-sm mt-1">Waits 1200ms to open, lingers 800ms after you leave.</div>
178
+ </Tooltip.Popup>
179
+ </Tooltip.Positioner>
180
+ </Tooltip.Portal>
181
+ </Tooltip.Root>
182
+ </div>
183
+ );
184
+ }
185
+ ```
186
+
141
187
  ### Arrow
142
188
 
143
189
  Use `Tooltip.Arrow` to display an arrow on the tooltip.
@@ -0,0 +1,113 @@
1
+ # MCP Server
2
+
3
+ Connect AI assistants to PrimeReact component documentation, guides, examples, setup, and API metadata.
4
+
5
+ ## Introduction
6
+
7
+ [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) lets AI assistants call external tools. The `@primereact/mcp` package uses those tools to search and read the PrimeReact documentation included with the package.
8
+
9
+ - Find components, guides, examples, setup instructions, and hooks.
10
+ - Read mode-scoped component APIs and documentation sections.
11
+ - Check component usage against documented properties and callbacks.
12
+ - Return links to the related PrimeReact documentation when available.
13
+
14
+ The server requires Node.js 22 or newer. It is read-only and does not change your project files or PrimeReact configuration.
15
+
16
+ ## CLI Setup
17
+
18
+ The recommended setup is the [PrimeReact Plugin](./plugin). It installs this MCP server together with the PrimeReact skills for implementation, setup, theming, accessibility, and troubleshooting.
19
+
20
+ ```bash
21
+ pnpm dlx @primeui/cli plugin install --tool copilot --library primereact
22
+ pnpm dlx @primeui/cli doctor --tool copilot --library primereact
23
+ ```
24
+
25
+ Replace `copilot` with `claude`, `codex`, `gemini`, or `cursor` for another supported assistant. Use Manual Setup when you want the MCP server without the plugin skills.
26
+
27
+ ## Manual Setup
28
+
29
+ ### Claude Code
30
+
31
+ Add the server to your user configuration to use it in every project, or omit `-s user` for the current project only.
32
+
33
+ ```bash
34
+ claude mcp add primereact -s user -- npx -y @primereact/mcp
35
+ ```
36
+
37
+ See the [Claude Code MCP documentation](https://docs.anthropic.com/en/docs/claude-code/mcp) for client-specific options.
38
+
39
+ ### VS Code
40
+
41
+ Create `.vscode/mcp.json` for project-level setup. To use the server across projects, add the same `servers` entry to your VS Code user MCP configuration.
42
+
43
+ ```json
44
+ {
45
+ "servers": {
46
+ "primereact": {
47
+ "command": "npx",
48
+ "args": ["-y", "@primereact/mcp"]
49
+ }
50
+ }
51
+ }
52
+ ```
53
+
54
+ See the [VS Code MCP documentation](https://code.visualstudio.com/docs/copilot/chat/mcp-servers) for more details.
55
+
56
+ ### OpenAI Codex
57
+
58
+ Add the server with the Codex CLI, or add the same configuration to `~/.codex/config.toml`.
59
+
60
+ ```bash
61
+ codex mcp add primereact -- npx -y @primereact/mcp
62
+ ```
63
+
64
+ ```toml
65
+ [mcp_servers.primereact]
66
+ command = "npx"
67
+ args = ["-y", "@primereact/mcp"]
68
+ ```
69
+
70
+ See the [OpenAI Codex MCP documentation](https://developers.openai.com/codex/mcp/) for more details.
71
+
72
+ ### Cursor
73
+
74
+ Create `.cursor/mcp.json` in your project or `~/.cursor/mcp.json` for global configuration.
75
+
76
+ ```json
77
+ {
78
+ "mcpServers": {
79
+ "primereact": {
80
+ "command": "npx",
81
+ "args": ["-y", "@primereact/mcp"]
82
+ }
83
+ }
84
+ }
85
+ ```
86
+
87
+ See the [Cursor MCP documentation](https://docs.cursor.com/context/model-context-protocol) for more details.
88
+
89
+ ## Tools
90
+
91
+ The PrimeReact MCP server provides eight tools.
92
+
93
+ | Tool | Purpose |
94
+ | ---------------- | ----------------------------------------------------------------------------------------- |
95
+ | `list` | List available components, guides, examples, resources, or modes. |
96
+ | `search` | Search generated component, guide, section, API, hook, and example text. |
97
+ | `get_component` | Read mode-scoped component or hook documentation, API metadata, and available sections. |
98
+ | `get_guide` | Read a generated PrimeReact guide and its source metadata. |
99
+ | `get_example` | Return an example from a documented component or hook section. |
100
+ | `get_setup` | Return setup guidance for a supported PrimeReact mode and environment. |
101
+ | `validate_usage` | Validate component usage against generated PrimeReact API metadata in one selected mode. |
102
+ | `version` | Report the server version and the status of its documentation data, tools, and resources. |
103
+
104
+ ## Data and Validation
105
+
106
+ The MCP package includes a generated copy of the PrimeReact documentation. This keeps the server usable without a PrimeReact source checkout and makes its answers match the installed package version. Results include a `primeui://primereact` resource URI and, when available, a link to the public documentation.
107
+
108
+ - The tools do not edit files, install dependencies, or update configuration.
109
+ - Component, setup, example, and validation calls stay in one selected mode: `styled`, `tailwind`, `primitive`, `headless`, or `hooks` where supported.
110
+ - `validate_usage` checks documented API metadata. If the required metadata is unavailable or the mode is ambiguous, it reports that limitation instead of guessing.
111
+ - Run your project type checks, tests, and browser checks after making changes. MCP validation does not replace them.
112
+
113
+ If you installed the PrimeReact Plugin, do not register the MCP server again with a manual configuration. Run the CLI `doctor` command if the server is missing or appears more than once.
@@ -0,0 +1,139 @@
1
+ # Plugin
2
+
3
+ Install PrimeReact workflow skills and the PrimeReact MCP server in a supported AI assistant.
4
+
5
+ ## Introduction
6
+
7
+ The PrimeReact Plugin adds PrimeReact skills and the PrimeReact MCP server to Claude Code, Codex, GitHub Copilot, Cursor, or Gemini CLI. Plugins installed through GitHub Copilot CLI are also available in VS Code. Install the plugin when you want the assistant to follow PrimeReact-specific, mode-aware workflows as well as read the current component documentation.
8
+
9
+ The plugin is published from the [primefaces/primeui-plugins](https://github.com/primefaces/primeui-plugins) repository. Use `@primeui/cli` for the same installation flow across supported assistants, or follow the manual setup for your client.
10
+
11
+ ## What It Installs
12
+
13
+ Installing the PrimeReact Plugin adds:
14
+
15
+ - Six focused skills covering routing, implementation, setup, theming, accessibility, and troubleshooting.
16
+ - The PrimeReact MCP server, configured with `@primereact/mcp`.
17
+ - The manifest required by the selected assistant.
18
+
19
+ PrimeVue and PrimeNG are separate plugins. Installing this plugin does not change your application or install PrimeReact dependencies in the project.
20
+
21
+ ## Skills
22
+
23
+ Each skill covers one type of PrimeReact work. The skills use `@primereact/mcp` when they need mode-scoped component APIs, examples, setup guides, hooks, or usage validation.
24
+
25
+ | Skill | Use it for |
26
+ | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
27
+ | `primereact-router` | Select the PrimeReact mode and choose the skill that matches the task. |
28
+ | `primereact-component-implementation` | Choose and implement components, composition, properties, callbacks, and documented hooks. |
29
+ | `primereact-setup-installation` | Configure a supported React environment in `styled`, `tailwind`, `primitive`, or `headless` mode. |
30
+ | `primereact-theming-customization` | Work with styled presets and tokens, Tailwind-owned components, primitives, headless markup, or pass-through APIs without mixing modes. |
31
+ | `primereact-accessibility-icons` | Review semantics, keyboard behavior, focus, accessible names, PrimeIcons, and custom icons in the selected mode. |
32
+ | `primereact-audit-troubleshooting` | Find invalid APIs and troubleshoot components, setup, MCP, plugin, or duplicate configurations. |
33
+
34
+ The current PrimeReact v11 documentation does not provide a supported version migration guide, so the plugin does not advertise a migration workflow.
35
+
36
+ Skill names use the `primereact-` prefix because assistants may keep skills from several plugins in one shared namespace.
37
+
38
+ ## How Skills Work
39
+
40
+ You do not need to select a skill manually. Describe the PrimeReact task and the router chooses the relevant workflow.
41
+
42
+ - The router checks that the project uses React and PrimeReact, then selects `styled`, `tailwind`, `primitive`, or `headless` from project evidence. It uses `hooks` only for a documented standalone hook.
43
+ - The selected skill reads only the component or guide information needed for that mode.
44
+ - When component metadata is available, the skill validates the final PrimeReact usage in the same mode.
45
+ - If project evidence is ambiguous or the documentation does not confirm an API, the skill reports the limitation instead of borrowing guidance from another mode.
46
+
47
+ After implementation, run the checks required by your project, including type checking, tests, browser behavior, accessibility, and visual review where applicable.
48
+
49
+ ## CLI Setup
50
+
51
+ Set `--tool` to the assistant you use. Keep `--library primereact` when you run the command outside a project or from a project that uses more than one PrimeUI library.
52
+
53
+ ```bash
54
+ pnpm dlx @primeui/cli plugin install --tool copilot --library primereact
55
+ ```
56
+
57
+ Supported tool values are `claude`, `codex`, `copilot`, `cursor`, and `gemini`. Use `copilot` for GitHub Copilot CLI and VS Code.
58
+
59
+ ## Lifecycle and Doctor
60
+
61
+ Use the same CLI to check the installation, update the plugin, or remove it. Each command applies only to PrimeReact in the selected assistant.
62
+
63
+ ```bash
64
+ pnpm dlx @primeui/cli plugin status --tool copilot --library primereact
65
+ pnpm dlx @primeui/cli plugin update --tool copilot --library primereact
66
+ pnpm dlx @primeui/cli plugin remove --tool copilot --library primereact
67
+ pnpm dlx @primeui/cli doctor --tool copilot --library primereact
68
+
69
+ # Machine-readable diagnostics
70
+ pnpm dlx @primeui/cli doctor --tool copilot --library primereact --json
71
+ ```
72
+
73
+ Run `doctor` when the plugin or MCP server is not working as expected. It checks the installation, starts the MCP server, confirms the available tools, and tests documentation retrieval and component validation. Checks that an assistant does not expose are reported as unsupported.
74
+
75
+ ## Manual Setup
76
+
77
+ ### Source
78
+
79
+ Claude Code, Codex, and GitHub Copilot can install the plugin directly from the public marketplace. For manual Cursor or Gemini CLI setup, clone the repository to a location you intend to keep because those clients use the selected `plugins/primereact` directory after installation.
80
+
81
+ ```bash
82
+ git clone --branch main https://github.com/primefaces/primeui-plugins.git ~/primeui-plugins
83
+ ls ~/primeui-plugins/plugins/primereact
84
+ ```
85
+
86
+ ### Claude Code
87
+
88
+ Add the PrimeUI marketplace, then install only the PrimeReact plugin.
89
+
90
+ ```bash
91
+ claude plugin marketplace add primefaces/primeui-plugins
92
+ claude plugin install primereact@primeui
93
+ claude plugin list --json
94
+ ```
95
+
96
+ ### Codex
97
+
98
+ Add the PrimeUI marketplace, inspect its catalog, then install only the PrimeReact plugin. Use the interactive plugin browser to manage enablement.
99
+
100
+ ```bash
101
+ codex plugin marketplace add primefaces/primeui-plugins
102
+ codex plugin list --available
103
+ codex plugin add primereact@primeui
104
+ codex plugin list
105
+ ```
106
+
107
+ ### VS Code Copilot
108
+
109
+ Install the PrimeReact Plugin through GitHub Copilot CLI. VS Code automatically discovers plugins installed by Copilot CLI, so it does not need a separate plugin configuration.
110
+
111
+ ```bash
112
+ copilot plugin marketplace add primefaces/primeui-plugins
113
+ copilot plugin install primereact@primeui
114
+ ```
115
+
116
+ The installation includes the seven PrimeReact skills and the PrimeReact MCP server. See the [VS Code Agent Plugins](https://code.visualstudio.com/docs/agent-customization/agent-plugins) and [GitHub Copilot CLI Plugins](https://docs.github.com/en/copilot/how-tos/copilot-cli/customize-copilot/plugins-finding-installing) documentation for client-specific details.
117
+
118
+ ### Cursor
119
+
120
+ For local setup, link the PrimeReact plugin directory into Cursor's local-plugin directory. Restart Cursor or run `Developer: Reload Window` after creating the link.
121
+
122
+ ```bash
123
+ mkdir -p ~/.cursor/plugins/local
124
+ ln -s ~/primeui-plugins/plugins/primereact ~/.cursor/plugins/local/primereact
125
+ ```
126
+
127
+ Use Cursor's Customize screen to manage the plugin, its skills, and its MCP server.
128
+
129
+ ### Gemini CLI
130
+
131
+ Validate the PrimeReact extension directory, then install it from the persistent checkout. Do not install from the repository root because it contains plugins for all three PrimeUI libraries.
132
+
133
+ ```bash
134
+ gemini extensions validate ~/primeui-plugins/plugins/primereact
135
+ gemini extensions install ~/primeui-plugins/plugins/primereact --consent
136
+ gemini extensions list --output-format json
137
+ ```
138
+
139
+ Gemini CLI 0.29.3 requires `experimental.extensionManagement` to be enabled. The installed extension contains the seven PrimeReact skills and the PrimeReact MCP server.
@@ -95,7 +95,7 @@ export default function ColorDemo() {
95
95
 
96
96
  ## Spin
97
97
 
98
- Use a spin animation utility like `animate-spin` from Tailwind apply rotation.
98
+ Use the `spin` property to apply a rotation animation to an icon. Alternatively, a spin animation utility such as `animate-spin` from Tailwind can also be used.
99
99
 
100
100
  ```tsx
101
101
  import { Cog } from '@primeicons/react/cog';
@@ -104,8 +104,8 @@ import { Spinner } from '@primeicons/react/spinner';
104
104
  export default function SpinDemo() {
105
105
  return (
106
106
  <div className="flex justify-center gap-4">
107
- <Spinner className="animate-spin" size={32} />
108
- <Cog className="animate-spin" size={32} />
107
+ <Spinner spin size={32} />
108
+ <Cog spin size={32} />
109
109
  </div>
110
110
  );
111
111
  }
@@ -16,7 +16,7 @@ Start from our <a href="https://github.com/primefaces/primereact-examples/tree/m
16
16
  Install PrimeReact and a theme package using your favorite package manager:
17
17
 
18
18
  ```bash
19
- npm install @primereact/ui@11.0.0-rc.2 @primeuix/themes@3.0.0-rc.1 @primeicons/react@8.0.0-rc.1
19
+ npm install @primereact/ui @primeuix/themes @primeicons/react
20
20
  ```
21
21
 
22
22
  </DocStep>