@primereact/mcp 11.0.0 → 11.2.0

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 (189) hide show
  1. package/data/llms/headless/components/accordion/api.json +9 -9
  2. package/data/llms/headless/components/animateonscroll/api.json +2 -2
  3. package/data/llms/headless/components/autocomplete/api.json +33 -33
  4. package/data/llms/headless/components/avatar/api.json +1 -1
  5. package/data/llms/headless/components/carousel/api.json +15 -15
  6. package/data/llms/headless/components/checkbox/api.json +18 -18
  7. package/data/llms/headless/components/collapsible/api.json +14 -14
  8. package/data/llms/headless/components/compare/api.json +3 -3
  9. package/data/llms/headless/components/contextmenu/api.json +2 -2
  10. package/data/llms/headless/components/datatable/api.json +19 -19
  11. package/data/llms/headless/components/dataview/api.json +3 -3
  12. package/data/llms/headless/components/datepicker/api.json +43 -43
  13. package/data/llms/headless/components/dialog/api.json +19 -19
  14. package/data/llms/headless/components/divider/api.json +3 -3
  15. package/data/llms/headless/components/drawer/api.json +13 -13
  16. package/data/llms/headless/components/fieldset/api.json +9 -9
  17. package/data/llms/headless/components/fileupload/api.json +5 -5
  18. package/data/llms/headless/components/focustrap/api.json +4 -4
  19. package/data/llms/headless/components/gallery/api.json +23 -23
  20. package/data/llms/headless/components/inplace/api.json +3 -3
  21. package/data/llms/headless/components/inputcolor/api.json +6 -6
  22. package/data/llms/headless/components/inputcolor.md +0 -1
  23. package/data/llms/headless/components/inputnumber/api.json +8 -8
  24. package/data/llms/headless/components/inputotp/api.json +7 -7
  25. package/data/llms/headless/components/inputpassword/api.json +4 -4
  26. package/data/llms/headless/components/inputpassword.md +3 -3
  27. package/data/llms/headless/components/inputtags/api.json +8 -8
  28. package/data/llms/headless/components/inputtext/api.json +1 -1
  29. package/data/llms/headless/components/knob/api.json +18 -18
  30. package/data/llms/headless/components/listbox/api.json +27 -27
  31. package/data/llms/headless/components/menu/api.json +10 -10
  32. package/data/llms/headless/components/message/api.json +1 -1
  33. package/data/llms/headless/components/metergroup/api.json +3 -3
  34. package/data/llms/headless/components/motion/api.json +1 -1
  35. package/data/llms/headless/components/navigationmenu/api.json +5 -5
  36. package/data/llms/headless/components/orderlist/api.json +5 -5
  37. package/data/llms/headless/components/organizationchart/api.json +6 -6
  38. package/data/llms/headless/components/paginator/api.json +5 -5
  39. package/data/llms/headless/components/panel/api.json +9 -9
  40. package/data/llms/headless/components/picklist/api.json +5 -5
  41. package/data/llms/headless/components/popover/api.json +16 -16
  42. package/data/llms/headless/components/positioner/api.json +7 -7
  43. package/data/llms/headless/components/progressbar/api.json +3 -3
  44. package/data/llms/headless/components/progressspinner/api.json +3 -3
  45. package/data/llms/headless/components/radiobutton/api.json +16 -16
  46. package/data/llms/headless/components/rating/api.json +5 -5
  47. package/data/llms/headless/components/scrollarea/api.json +6 -6
  48. package/data/llms/headless/components/select/api.json +34 -34
  49. package/data/llms/headless/components/sidebar/api.json +1116 -141
  50. package/data/llms/headless/components/sidebar.md +4 -2
  51. package/data/llms/headless/components/slider/api.json +3 -3
  52. package/data/llms/headless/components/speeddial/api.json +4 -4
  53. package/data/llms/headless/components/splitter/api.json +5 -5
  54. package/data/llms/headless/components/stepper/api.json +13 -13
  55. package/data/llms/headless/components/styleclass/api.json +1 -1
  56. package/data/llms/headless/components/tabs/api.json +17 -17
  57. package/data/llms/headless/components/terminal/api.json +1 -1
  58. package/data/llms/headless/components/toast/api.json +4 -4
  59. package/data/llms/headless/components/togglebutton/api.json +27 -3
  60. package/data/llms/headless/components/toggleswitch/api.json +3 -3
  61. package/data/llms/headless/components/tooltip/api.json +17 -17
  62. package/data/llms/headless/components/tree/api.json +20 -20
  63. package/data/llms/headless/components/tree.md +1 -0
  64. package/data/llms/headless/components/treetable/api.json +19 -19
  65. package/data/llms/headless/guides/misc/internationalization.md +282 -0
  66. package/data/llms/hooks/use-filter.md +2 -2
  67. package/data/llms/hooks/use-tree-filter.md +3 -1
  68. package/data/llms/llms-full.txt +10444 -1743
  69. package/data/llms/llms.txt +15 -0
  70. package/data/llms/primitive/components/accordion/api.json +39 -39
  71. package/data/llms/primitive/components/animateonscroll/api.json +5 -5
  72. package/data/llms/primitive/components/autocomplete/api.json +105 -105
  73. package/data/llms/primitive/components/avatar/api.json +14 -14
  74. package/data/llms/primitive/components/badge/api.json +6 -6
  75. package/data/llms/primitive/components/breadcrumb/api.json +27 -27
  76. package/data/llms/primitive/components/button/api.json +8 -8
  77. package/data/llms/primitive/components/buttongroup/api.json +3 -3
  78. package/data/llms/primitive/components/card/api.json +24 -24
  79. package/data/llms/primitive/components/carousel/api.json +28 -28
  80. package/data/llms/primitive/components/checkbox/api.json +14 -14
  81. package/data/llms/primitive/components/checkboxgroup/api.json +5 -5
  82. package/data/llms/primitive/components/chip/api.json +19 -19
  83. package/data/llms/primitive/components/collapsible/api.json +18 -18
  84. package/data/llms/primitive/components/compare/api.json +18 -18
  85. package/data/llms/primitive/components/contextmenu/api.json +150 -1141
  86. package/data/llms/primitive/components/datatable/api.json +215 -164
  87. package/data/llms/primitive/components/dataview/api.json +17 -17
  88. package/data/llms/primitive/components/datepicker/api.json +230 -230
  89. package/data/llms/primitive/components/dialog/api.json +63 -63
  90. package/data/llms/primitive/components/divider/api.json +3 -3
  91. package/data/llms/primitive/components/drawer/api.json +47 -47
  92. package/data/llms/primitive/components/fieldset/api.json +31 -31
  93. package/data/llms/primitive/components/fileupload/api.json +53 -53
  94. package/data/llms/primitive/components/floatlabel/api.json +3 -3
  95. package/data/llms/primitive/components/focustrap/api.json +7 -7
  96. package/data/llms/primitive/components/gallery/api.json +91 -91
  97. package/data/llms/primitive/components/iconfield/api.json +7 -7
  98. package/data/llms/primitive/components/iftalabel/api.json +3 -3
  99. package/data/llms/primitive/components/inplace/api.json +18 -18
  100. package/data/llms/primitive/components/inputcolor/api.json +51 -51
  101. package/data/llms/primitive/components/inputnumber/api.json +10 -10
  102. package/data/llms/primitive/components/inputotp/api.json +12 -12
  103. package/data/llms/primitive/components/inputpassword/api.json +7 -7
  104. package/data/llms/primitive/components/inputtags/api.json +6 -6
  105. package/data/llms/primitive/components/inputtext/api.json +4 -4
  106. package/data/llms/primitive/components/knob/api.json +19 -19
  107. package/data/llms/primitive/components/label/api.json +3 -3
  108. package/data/llms/primitive/components/listbox/api.json +57 -57
  109. package/data/llms/primitive/components/menu/api.json +87 -279
  110. package/data/llms/primitive/components/message/api.json +22 -22
  111. package/data/llms/primitive/components/metergroup/api.json +27 -27
  112. package/data/llms/primitive/components/navigationmenu/api.json +8 -8
  113. package/data/llms/primitive/components/paginator/api.json +43 -43
  114. package/data/llms/primitive/components/panel/api.json +34 -34
  115. package/data/llms/primitive/components/popover/api.json +67 -67
  116. package/data/llms/primitive/components/portal/api.json +4 -4
  117. package/data/llms/primitive/components/progressbar/api.json +22 -22
  118. package/data/llms/primitive/components/progressspinner/api.json +18 -18
  119. package/data/llms/primitive/components/radiobutton/api.json +16 -16
  120. package/data/llms/primitive/components/rating/api.json +20 -20
  121. package/data/llms/primitive/components/scrollarea/api.json +23 -23
  122. package/data/llms/primitive/components/select/api.json +95 -95
  123. package/data/llms/primitive/components/sidebar/api.json +215 -121
  124. package/data/llms/primitive/components/sidebar.md +2 -1
  125. package/data/llms/primitive/components/skeleton/api.json +3 -3
  126. package/data/llms/primitive/components/slider/api.json +22 -22
  127. package/data/llms/primitive/components/speeddial/api.json +22 -22
  128. package/data/llms/primitive/components/splitter/api.json +18 -18
  129. package/data/llms/primitive/components/stepper/api.json +64 -64
  130. package/data/llms/primitive/components/tabs/api.json +51 -51
  131. package/data/llms/primitive/components/tag/api.json +3 -3
  132. package/data/llms/primitive/components/terminal/api.json +44 -44
  133. package/data/llms/primitive/components/textarea/api.json +4 -4
  134. package/data/llms/primitive/components/timeline/api.json +27 -27
  135. package/data/llms/primitive/components/toast/api.json +48 -48
  136. package/data/llms/primitive/components/togglebutton/api.json +10 -10
  137. package/data/llms/primitive/components/togglebuttongroup/api.json +5 -5
  138. package/data/llms/primitive/components/toggleswitch/api.json +12 -12
  139. package/data/llms/primitive/components/toolbar/api.json +15 -15
  140. package/data/llms/primitive/components/tooltip/api.json +52 -52
  141. package/data/llms/primitive/components/tree/api.json +73 -73
  142. package/data/llms/primitive/components/visuallyhidden/api.json +3 -3
  143. package/data/llms/primitive/guides/migration/updating-to-v11.md +2219 -0
  144. package/data/llms/primitive/guides/misc/internationalization.md +287 -0
  145. package/data/llms/styled/add-ons/designer/ci.md +273 -0
  146. package/data/llms/styled/add-ons/designer/guide.md +99 -0
  147. package/data/llms/styled/add-ons/designer/overview.md +194 -0
  148. package/data/llms/styled/add-ons/uikit/guide/v3.md +182 -0
  149. package/data/llms/styled/add-ons/uikit/guide/v4.md +163 -0
  150. package/data/llms/styled/add-ons/uikit/overview.md +204 -0
  151. package/data/llms/styled/components/button/api.json +8 -8
  152. package/data/llms/styled/components/carousel.md +65 -0
  153. package/data/llms/styled/components/datatable.md +101 -88
  154. package/data/llms/styled/components/floatlabel/api.json +3 -3
  155. package/data/llms/styled/components/fluid/api.json +3 -3
  156. package/data/llms/styled/components/iconfield/api.json +7 -7
  157. package/data/llms/styled/components/iftalabel/api.json +3 -3
  158. package/data/llms/styled/components/inputcolor.md +3 -0
  159. package/data/llms/styled/components/inputgroup/api.json +7 -7
  160. package/data/llms/styled/components/label/api.json +3 -3
  161. package/data/llms/styled/components/menu.md +39 -41
  162. package/data/llms/styled/components/organizationchart/api.json +33 -33
  163. package/data/llms/styled/components/rating/api.json +11 -11
  164. package/data/llms/styled/components/select.md +6 -0
  165. package/data/llms/styled/components/sidebar.md +12 -8
  166. package/data/llms/styled/components/tree.md +5 -0
  167. package/data/llms/styled/components/treetable.md +171 -62
  168. package/data/llms/styled/guides/configuration.md +223 -0
  169. package/data/llms/styled/guides/form/formik.md +448 -0
  170. package/data/llms/styled/guides/form/react-hook-form.md +503 -0
  171. package/data/llms/styled/guides/form/tanstack.md +502 -0
  172. package/data/llms/styled/guides/migration/updating-to-v11.md +2219 -0
  173. package/data/llms/styled/guides/misc/internationalization.md +379 -0
  174. package/data/llms/styled/guides/theming/tailwind.md +25 -0
  175. package/data/llms/tailwind/components/button/api.json +8 -8
  176. package/data/llms/tailwind/components/datatable.md +33 -42
  177. package/data/llms/tailwind/components/inputgroup.md +0 -1
  178. package/data/llms/tailwind/components/menu.md +5 -5
  179. package/data/llms/tailwind/components/select.md +3 -0
  180. package/data/llms/tailwind/components/sidebar.md +16 -11
  181. package/data/llms/tailwind/components/tooltip.md +4 -13
  182. package/data/llms/tailwind/guides/misc/internationalization.md +287 -0
  183. package/data/manifest.json +1089 -779
  184. package/data/mcp-data.json +263 -32
  185. package/dist/index.d.ts +7 -2
  186. package/dist/index.js +1 -1
  187. package/package.json +9 -8
  188. package/data/llms/styled/guides/installation/configuration.md +0 -135
  189. package/data/llms/tailwind/guides/theming/guide.md +0 -179
@@ -0,0 +1,379 @@
1
+ # Internationalization and Localization
2
+
3
+ Translating component messages and configuring regional settings such as date formats and the first day of the week.
4
+
5
+ ## Overview
6
+
7
+ Components ship with a set of built-in messages such as filter operator labels, month names and ARIA descriptions. These messages live in a locale registry that is shared across PrimeReact, PrimeVue and PrimeNG through the `@primeuix/locale` package, and are re-exported from `@primereact/core/locale`.
8
+
9
+ English is registered by default, so no configuration is required until another language is needed.
10
+
11
+ Setting a language is enough for components to pick it up. No per-component prop is involved. Switching the language below re-renders the calendar with translated month and day names, moves the first day of the week, and updates the button label.
12
+
13
+ ```tsx
14
+ 'use client';
15
+ import { ChevronDown } from '@primeicons/react/chevron-down';
16
+ import { ChevronLeft } from '@primeicons/react/chevron-left';
17
+ import { ChevronRight } from '@primeicons/react/chevron-right';
18
+ import { defineLocale, en, Locale, useLocale } from '@primereact/core/locale';
19
+ import { Button } from '@primereact/ui/button';
20
+ import { DatePicker, type DatePickerRootProps, type DatePickerRootValueChangeEvent } from '@primereact/ui/datepicker';
21
+ import { Select, type SelectValueChangeEvent } from '@primereact/ui/select';
22
+ import * as React from 'react';
23
+
24
+ // Spreading `en` keeps every untranslated key readable instead of resolving to undefined.
25
+ defineLocale('de', {
26
+ ...en,
27
+ dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
28
+ monthNames: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
29
+ today: 'Heute',
30
+ clear: 'Löschen',
31
+ firstDayOfWeek: 1
32
+ });
33
+
34
+ defineLocale('es', {
35
+ ...en,
36
+ dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sá'],
37
+ monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
38
+ today: 'Hoy',
39
+ clear: 'Limpiar',
40
+ firstDayOfWeek: 1
41
+ });
42
+
43
+ const languages = [
44
+ { label: 'English', value: 'en' },
45
+ { label: 'Deutsch', value: 'de' },
46
+ { label: 'Español', value: 'es' }
47
+ ];
48
+
49
+ export default function SwitcherDemo() {
50
+ const [date, setDate] = React.useState<DatePickerRootProps['value'] | null>(null);
51
+ const { lang, t } = useLocale();
52
+
53
+ return (
54
+ <div className="flex flex-col items-center gap-4">
55
+ <Select.Root
56
+ value={lang}
57
+ onValueChange={(event: SelectValueChangeEvent) => Locale.use(event.value as string)}
58
+ options={languages}
59
+ optionLabel="label"
60
+ optionValue="value"
61
+ className="w-full md:w-56"
62
+ >
63
+ <Select.Trigger>
64
+ <Select.Value />
65
+ <Select.Indicator>
66
+ <ChevronDown />
67
+ </Select.Indicator>
68
+ </Select.Trigger>
69
+ <Select.Portal>
70
+ <Select.Positioner>
71
+ <Select.Popup>
72
+ <Select.List />
73
+ </Select.Popup>
74
+ </Select.Positioner>
75
+ </Select.Portal>
76
+ </Select.Root>
77
+
78
+ <DatePicker.Root value={date} onValueChange={(event: DatePickerRootValueChangeEvent) => setDate(event.value)}>
79
+ <DatePicker.Body>
80
+ <DatePicker.Panel>
81
+ <DatePicker.Calendar>
82
+ <DatePicker.Header className="bg-transparent!">
83
+ <DatePicker.Prev as={Button} iconOnly variant="text" rounded severity="secondary" size="small">
84
+ <ChevronLeft />
85
+ </DatePicker.Prev>
86
+ <DatePicker.Title>
87
+ <DatePicker.SelectMonth />
88
+ <DatePicker.SelectYear />
89
+ <DatePicker.Decade />
90
+ </DatePicker.Title>
91
+ <DatePicker.Next as={Button} iconOnly variant="text" rounded severity="secondary" size="small">
92
+ <ChevronRight />
93
+ </DatePicker.Next>
94
+ </DatePicker.Header>
95
+ <DatePicker.Table>
96
+ <DatePicker.TableHead />
97
+ <DatePicker.TableBody />
98
+ <DatePicker.TableBody view="month" />
99
+ <DatePicker.TableBody view="year" />
100
+ </DatePicker.Table>
101
+ </DatePicker.Calendar>
102
+ </DatePicker.Panel>
103
+ </DatePicker.Body>
104
+ </DatePicker.Root>
105
+
106
+ <Button severity="secondary" onClick={() => setDate(null)}>
107
+ {t('clear')}
108
+ </Button>
109
+ </div>
110
+ );
111
+ }
112
+ ```
113
+
114
+ ## Import
115
+
116
+ ```js
117
+ import { $t, $l, defineLocale, updateLocale, useLocale, Locale, LocaleService, en } from '@primereact/core/locale';
118
+ ```
119
+
120
+ ## Setting the Language
121
+
122
+ `Locale.use` selects the active language. Every component reading a message re-renders when it changes, so this works both at startup and later in response to a language switcher.
123
+
124
+ ```js
125
+ import { Locale } from '@primereact/core/locale';
126
+
127
+ Locale.use('de');
128
+ ```
129
+
130
+ Only `en` is built in, so any other language has to be registered first. See [Adding a Language](#adding-a-language) below.
131
+
132
+ `PrimeReactProvider` also accepts a `locale` prop, which sets the initial language for the components beneath it.
133
+
134
+ ```jsx
135
+ import { PrimeReactProvider } from '@primereact/core';
136
+
137
+ <PrimeReactProvider locale="de">
138
+ <App />
139
+ </PrimeReactProvider>;
140
+ ```
141
+
142
+ ## Adding a Language
143
+
144
+ `defineLocale` registers a new language.
145
+
146
+ ```js
147
+ import { defineLocale, Locale } from '@primereact/core/locale';
148
+
149
+ defineLocale('es', {
150
+ clear: 'Limpiar',
151
+ apply: 'Aplicar',
152
+ accept: 'Sí',
153
+ reject: 'No',
154
+ dayNames: ['domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado'],
155
+ dayNamesShort: ['dom', 'lun', 'mar', 'mié', 'jue', 'vie', 'sáb'],
156
+ dayNamesMin: ['D', 'L', 'M', 'X', 'J', 'V', 'S'],
157
+ monthNames: ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'],
158
+ monthNamesShort: ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic']
159
+ });
160
+
161
+ Locale.use('es');
162
+ ```
163
+
164
+ A registered language must be complete. Keys that are left out resolve to `undefined` rather than falling back to English, which renders as an empty label. The practical approach is to spread the built-in English messages and override from there:
165
+
166
+ ```js
167
+ import { defineLocale, en } from '@primereact/core/locale';
168
+
169
+ defineLocale('es', {
170
+ ...en,
171
+ clear: 'Limpiar',
172
+ apply: 'Aplicar'
173
+ });
174
+ ```
175
+
176
+ The `en` object holds the built-in English messages and is exported for exactly this purpose. Ready-made translations from [PrimeLocale](#ready-made-translations) already cover every key, so spreading is only needed for hand-written translations.
177
+
178
+ The provider accepts a `locales` map, which registers languages and selects one in a single step. Anything listed here is registered before `locale` is applied.
179
+
180
+ ```jsx
181
+ import { PrimeReactProvider } from '@primereact/core';
182
+
183
+ <PrimeReactProvider locale="es" locales={{ es: spanishMessages }}>
184
+ <App />
185
+ </PrimeReactProvider>;
186
+ ```
187
+
188
+ ## Updating an Existing Language
189
+
190
+ `updateLocale` merges new values into a language that is already registered, leaving the remaining keys untouched. It is useful for overriding a handful of labels without redefining a full translation.
191
+
192
+ ```js
193
+ import { updateLocale } from '@primereact/core/locale';
194
+
195
+ updateLocale('en', {
196
+ clear: 'Reset',
197
+ apply: 'Confirm'
198
+ });
199
+ ```
200
+
201
+ If the language does not exist yet, `updateLocale` registers it, behaving like `defineLocale`.
202
+
203
+ ## Reading Messages
204
+
205
+ ### In Components
206
+
207
+ `useLocale` is the React hook for reading the active locale. It re-renders the calling component when the language changes.
208
+
209
+ ```jsx
210
+ import { Button } from '@primereact/ui/button';
211
+ import { useLocale } from '@primereact/core/locale';
212
+
213
+ function ClearFilterButton({ onClear }) {
214
+ const { t } = useLocale();
215
+
216
+ return (
217
+ <Button severity="secondary" onClick={onClear}>
218
+ {t('clear')}
219
+ </Button>
220
+ );
221
+ }
222
+ ```
223
+
224
+ | Field | Description |
225
+ | ---------- | --------------------------------------------- |
226
+ | `lang` | Active language code, such as `en` or `de`. |
227
+ | `messages` | Full message object of the active language. |
228
+ | `t` | Translates a key against the active language. |
229
+
230
+ Re-rendering on a language change relies on the context published by `PrimeReactProvider`, which applications normally have at their root. A component rendered outside any provider still reads the correct messages on first render, but will not update when the language changes later.
231
+
232
+ ### Outside Components
233
+
234
+ `$t` performs the same lookup without a React context, which suits utilities, event handlers and module-level code.
235
+
236
+ ```js
237
+ import { $t } from '@primereact/core/locale';
238
+
239
+ $t('clear'); // 'Clear'
240
+ ```
241
+
242
+ Nested keys use dot notation.
243
+
244
+ ```js
245
+ $t('aria.selectRow'); // 'Row Selected'
246
+ ```
247
+
248
+ Messages containing placeholders accept replacement values. Positional placeholders such as `{0}` are filled from the argument order, while named ones are filled from an object.
249
+
250
+ ```js
251
+ $t('searchMessage', 5); // '5 results are available'
252
+ $t('selectionMessage', 3); // '3 items selected'
253
+ $t('aria.stars', { star: 4 }); // '4 stars'
254
+ ```
255
+
256
+ ## Reacting to Language Changes
257
+
258
+ Language changes emit a `locale:change` event. Components handle this automatically through `useLocale`; the event is only needed for code living outside React, such as syncing a third-party library.
259
+
260
+ ```js
261
+ import { LocaleService } from '@primereact/core/locale';
262
+
263
+ const onChange = ({ lang }) => console.log('Language is now', lang);
264
+
265
+ LocaleService.on('locale:change', onChange);
266
+
267
+ // remove the listener when it is no longer needed
268
+ LocaleService.off('locale:change', onChange);
269
+ ```
270
+
271
+ ## Inspecting the Registry
272
+
273
+ `$l` returns a facade over the registry, which helps when building a language switcher.
274
+
275
+ ```js
276
+ import { $l } from '@primereact/core/locale';
277
+
278
+ $l().langs; // ['en', 'es']
279
+ $l().get('es'); // message object of the Spanish locale
280
+ ```
281
+
282
+ ## Message Keys
283
+
284
+ These components read their labels from the active language:
285
+
286
+ | Component | Keys |
287
+ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
288
+ | DatePicker | `dayNames`, `dayNamesShort`, `dayNamesMin`, `monthNames`, `monthNamesShort`, `today`, `weekHeader`, `clear`, `am`, `pm`, `firstDayOfWeek`, `dateFormat` |
289
+ | FileUpload | `fileSizeTypes` |
290
+ | Paginator | `aria.firstPageLabel`, `aria.prevPageLabel`, `aria.nextPageLabel`, `aria.lastPageLabel`, `aria.pageLabel` |
291
+ | Sidebar | `aria.toggleSidebar` |
292
+
293
+ The registry holds a larger set covering filter operators, password strength labels, empty-state messages and the remaining `aria` labels. Those are reserved for components that do not consume them yet, so translating them has no visible effect today.
294
+
295
+ Not every entry is a string. `firstDayOfWeek` is a number, `showMonthAfterYear` is a boolean, and `dayNames`, `monthNames` and `fileSizeTypes` are arrays. `searchMessage` and similar entries carry a `{0}` placeholder.
296
+
297
+ The full set with default English values is exported as `en`, which can also be inspected at runtime:
298
+
299
+ ```js
300
+ import { en } from '@primereact/core/locale';
301
+
302
+ Object.keys(en); // every top-level key
303
+ ```
304
+
305
+ ## Ready-Made Translations
306
+
307
+ Writing a translation from scratch is rarely necessary. The community maintained [PrimeLocale](https://github.com/primefaces/primelocale) repository publishes complete translations for 70+ languages, shared across all Prime libraries. Each file covers every built-in message key, so nothing is left resolving to `undefined`.
308
+
309
+ ### Copying a File
310
+
311
+ Grab the JSON file for the desired language from the repository, for example `es.json`, and place it in the project.
312
+
313
+ Each file wraps its messages in a single key named after the language:
314
+
315
+ ```json
316
+ {
317
+ "es": {
318
+ "clear": "Limpiar",
319
+ "apply": "Aplicar",
320
+ "aria": { "selectRow": "Seleccionar fila" }
321
+ }
322
+ }
323
+ ```
324
+
325
+ That wrapper has to be unwrapped before registering, otherwise every lookup resolves to `undefined`:
326
+
327
+ ```js
328
+ import { defineLocale, Locale } from '@primereact/core/locale';
329
+ import es from './locales/es.json';
330
+
331
+ defineLocale('es', es.es);
332
+ Locale.use('es');
333
+ ```
334
+
335
+ The same unwrapping applies when the language is registered through the provider:
336
+
337
+ ```jsx
338
+ import { PrimeReactProvider } from '@primereact/core';
339
+ import es from './locales/es.json';
340
+
341
+ <PrimeReactProvider locale="es" locales={{ es: es.es }}>
342
+ <App />
343
+ </PrimeReactProvider>;
344
+ ```
345
+
346
+ ### Installing the Package
347
+
348
+ The translations are also published to npm, which avoids maintaining copies by hand.
349
+
350
+ ```bash
351
+ npm install primelocale
352
+ ```
353
+
354
+ ```js
355
+ import { defineLocale, Locale } from '@primereact/core/locale';
356
+ import { es } from 'primelocale/js/es.js';
357
+
358
+ defineLocale('es', es);
359
+ Locale.use('es');
360
+ ```
361
+
362
+ The package entry points export the messages directly, so no unwrapping is needed there.
363
+
364
+ Regional variants are named with an underscore in the package and a hyphen in the JSON files. Brazilian Portuguese is `primelocale/js/pt_BR.js` when imported and `pt-BR.json` when copied.
365
+
366
+ ### Adjusting a Translation
367
+
368
+ A ready-made translation can be tuned without editing the file, by layering overrides on top of it:
369
+
370
+ ```js
371
+ defineLocale('es', es.es);
372
+ updateLocale('es', { clear: 'Borrar' });
373
+ ```
374
+
375
+ Contributions of new languages and corrections are welcome in the PrimeLocale repository, and benefit every Prime library at once.
376
+
377
+ ## Coming from v10
378
+
379
+ The locale helpers from `primereact/api` were replaced. The [migration guide](/docs/styled/guides/migration/updating-to-v11) maps each one to its replacement.
@@ -48,6 +48,31 @@ In the CSS file that contains the tailwindcss import, add the `tailwindcss-prime
48
48
  @import 'tailwindcss-primeui';
49
49
  ```
50
50
 
51
+ ### Cascade layer
52
+
53
+ PrimeReact resets the browser defaults on the native elements it renders (preflight, see the [configuration guide](/docs/styled/guides/configuration)), and those rules live in `primeui.base`, a cascade layer nested under `primeui`. A CSS layer is ordered where its name is first declared, not where its rules are written, so when `tailwindcss` declares its layers first, `primeui` ends up after them and the reset wins over utility classes.
54
+
55
+ This only shows up in server-rendered apps, and only before hydration: PrimeReact injects the layer declaration at runtime, which lands after the application's own CSS on the first server-rendered response. Utility classes meant to override the reset lose until the client takes over, so the first paint is visibly wrong and corrects itself once React hydrates.
56
+
57
+ Fix the order by declaring the layer above the `tailwindcss` import:
58
+
59
+ ```css
60
+ @layer primeui;
61
+
62
+ @import 'tailwindcss';
63
+ @import 'tailwindcss-primeui';
64
+ ```
65
+
66
+ Declaring `primeui` is enough on its own: `primeui.base`, where the reset lives, is nested inside it, and a nested layer's order is fixed by its parent's. Declaring it after the `tailwindcss` import does nothing, since the order is already fixed by then. This applies to any framework that declares its own layers, not just Tailwind.
67
+
68
+ An application with `theme.options.cssLayer` enabled has already declared this layer: that option wraps PrimeReact's component styles, variables and global style in a layer named `primeui` by default, or in whatever name is passed to it (`{ name: 'myui' }` produces `myui`), and `@layer primeui;` covers the reset and that layer with the same line.
69
+
70
+ Where Tailwind's own preflight is already in use, or another reset such as normalize.css or Bootstrap's reboot, turn off PrimeReact's instead of maintaining two resets:
71
+
72
+ ```tsx
73
+ <PrimeReactProvider preflight={false}>
74
+ ```
75
+
51
76
  ### Tailwind v3
52
77
 
53
78
  Use the plugins option in your Tailwind config file to configure the plugin.
@@ -37,19 +37,19 @@
37
37
  },
38
38
  {
39
39
  "name": "style",
40
- "type": "CSSProperties | ((instance?: ButtonInstance) => CSSProperties)",
40
+ "type": "CSSProperties | ((instance?: ButtonInstance) => undefined | CSSProperties)",
41
41
  "default": "",
42
42
  "description": "The style to apply to the component."
43
43
  },
44
44
  {
45
45
  "name": "className",
46
- "type": "string | ((instance?: ButtonInstance) => string)",
46
+ "type": "string | ((instance?: ButtonInstance) => undefined | string)",
47
47
  "default": "",
48
48
  "description": "The class name to apply to the component."
49
49
  },
50
50
  {
51
51
  "name": "as",
52
- "type": "string | number | bigint | boolean | ComponentClass<any, any> | FunctionComponent<any> | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode, any, any> | ReactPortal | Promise<AwaitedReactNode>",
52
+ "type": "null | string | number | bigint | boolean | ComponentClass<any, any> | FunctionComponent<any> | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode, any, any> | ReactPortal | Promise<AwaitedReactNode>",
53
53
  "default": "",
54
54
  "description": "The component type to render."
55
55
  },
@@ -128,31 +128,31 @@
128
128
  {
129
129
  "name": "plain",
130
130
  "type": "boolean",
131
- "default": "",
131
+ "default": "false",
132
132
  "description": "Whether to show the Button with a plain style."
133
133
  },
134
134
  {
135
135
  "name": "rounded",
136
136
  "type": "boolean",
137
- "default": "",
137
+ "default": "false",
138
138
  "description": "Whether to show the Button with a rounded style."
139
139
  },
140
140
  {
141
141
  "name": "raised",
142
142
  "type": "boolean",
143
- "default": "",
143
+ "default": "false",
144
144
  "description": "Whether to show the Button with a raised style."
145
145
  },
146
146
  {
147
147
  "name": "iconOnly",
148
148
  "type": "boolean",
149
- "default": "",
149
+ "default": "false",
150
150
  "description": "Whether to show the Button with a borderless style."
151
151
  },
152
152
  {
153
153
  "name": "fluid",
154
154
  "type": "boolean",
155
- "default": "",
155
+ "default": "false",
156
156
  "description": "Whether to show the Button with a fluid width."
157
157
  },
158
158
  {