@mantis-core/ui 0.5.0 → 0.7.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 (378) hide show
  1. package/CHANGELOG.md +155 -0
  2. package/COMPONENTS.md +71 -73
  3. package/README.md +19 -6
  4. package/bin/mantis-llm.mjs +242 -0
  5. package/catalog.json +3031 -0
  6. package/dist/components/Buttons/Button.d.ts +39 -9
  7. package/dist/components/Buttons/Button.d.ts.map +1 -1
  8. package/dist/components/Buttons/Button.js +21 -13
  9. package/dist/components/Buttons/Button.js.map +1 -1
  10. package/dist/components/Forms/AutoCompleteField.d.ts +60 -0
  11. package/dist/components/Forms/AutoCompleteField.d.ts.map +1 -0
  12. package/dist/components/Forms/AutoCompleteField.js +125 -0
  13. package/dist/components/Forms/AutoCompleteField.js.map +1 -0
  14. package/dist/components/Forms/CKEditorInput.d.ts +5 -2
  15. package/dist/components/Forms/CKEditorInput.d.ts.map +1 -1
  16. package/dist/components/Forms/CKEditorInput.js +5 -2
  17. package/dist/components/Forms/CKEditorInput.js.map +1 -1
  18. package/dist/components/Forms/CheckboxField.d.ts +14 -0
  19. package/dist/components/Forms/CheckboxField.d.ts.map +1 -0
  20. package/dist/components/Forms/CheckboxField.js +26 -0
  21. package/dist/components/Forms/CheckboxField.js.map +1 -0
  22. package/dist/components/Forms/ColorPickerInput.d.ts +27 -8
  23. package/dist/components/Forms/ColorPickerInput.d.ts.map +1 -1
  24. package/dist/components/Forms/ColorPickerInput.js +57 -11
  25. package/dist/components/Forms/ColorPickerInput.js.map +1 -1
  26. package/dist/components/Forms/DateField.d.ts +68 -0
  27. package/dist/components/Forms/DateField.d.ts.map +1 -0
  28. package/dist/components/Forms/DateField.js +108 -0
  29. package/dist/components/Forms/DateField.js.map +1 -0
  30. package/dist/components/Forms/DatePresets.d.ts.map +1 -1
  31. package/dist/components/Forms/DatePresets.js +6 -3
  32. package/dist/components/Forms/DatePresets.js.map +1 -1
  33. package/dist/components/Forms/FieldShell.d.ts +24 -0
  34. package/dist/components/Forms/FieldShell.d.ts.map +1 -0
  35. package/dist/components/Forms/FieldShell.js +39 -0
  36. package/dist/components/Forms/FieldShell.js.map +1 -0
  37. package/dist/components/Forms/FileDropzone.d.ts +4 -2
  38. package/dist/components/Forms/FileDropzone.d.ts.map +1 -1
  39. package/dist/components/Forms/FileDropzone.js.map +1 -1
  40. package/dist/components/Forms/FormActionsBar.js +2 -2
  41. package/dist/components/Forms/FormActionsBar.js.map +1 -1
  42. package/dist/components/Forms/FormWizard.d.ts +1 -1
  43. package/dist/components/Forms/FormWizard.d.ts.map +1 -1
  44. package/dist/components/Forms/FormWizard.js +4 -5
  45. package/dist/components/Forms/FormWizard.js.map +1 -1
  46. package/dist/components/Forms/HiddenField.d.ts +12 -6
  47. package/dist/components/Forms/HiddenField.d.ts.map +1 -1
  48. package/dist/components/Forms/HiddenField.js +14 -5
  49. package/dist/components/Forms/HiddenField.js.map +1 -1
  50. package/dist/components/Forms/MaskField.d.ts +28 -0
  51. package/dist/components/Forms/MaskField.d.ts.map +1 -0
  52. package/dist/components/Forms/MaskField.js +74 -0
  53. package/dist/components/Forms/MaskField.js.map +1 -0
  54. package/dist/components/Forms/NumberField.d.ts +14 -0
  55. package/dist/components/Forms/NumberField.d.ts.map +1 -0
  56. package/dist/components/Forms/NumberField.js +51 -0
  57. package/dist/components/Forms/NumberField.js.map +1 -0
  58. package/dist/components/Forms/OtpInput.d.ts +23 -8
  59. package/dist/components/Forms/OtpInput.d.ts.map +1 -1
  60. package/dist/components/Forms/OtpInput.js +37 -8
  61. package/dist/components/Forms/OtpInput.js.map +1 -1
  62. package/dist/components/Forms/PasswordInput.d.ts +22 -9
  63. package/dist/components/Forms/PasswordInput.d.ts.map +1 -1
  64. package/dist/components/Forms/PasswordInput.js +63 -28
  65. package/dist/components/Forms/PasswordInput.js.map +1 -1
  66. package/dist/components/Forms/PhoneInput.d.ts +16 -8
  67. package/dist/components/Forms/PhoneInput.d.ts.map +1 -1
  68. package/dist/components/Forms/PhoneInput.js +13 -6
  69. package/dist/components/Forms/PhoneInput.js.map +1 -1
  70. package/dist/components/Forms/RadioGroup.d.ts +34 -13
  71. package/dist/components/Forms/RadioGroup.d.ts.map +1 -1
  72. package/dist/components/Forms/RadioGroup.js +49 -6
  73. package/dist/components/Forms/RadioGroup.js.map +1 -1
  74. package/dist/components/Forms/RangeSlider.d.ts +26 -11
  75. package/dist/components/Forms/RangeSlider.d.ts.map +1 -1
  76. package/dist/components/Forms/RangeSlider.js +40 -7
  77. package/dist/components/Forms/RangeSlider.js.map +1 -1
  78. package/dist/components/Forms/RatingInput.d.ts +24 -8
  79. package/dist/components/Forms/RatingInput.d.ts.map +1 -1
  80. package/dist/components/Forms/RatingInput.js +41 -9
  81. package/dist/components/Forms/RatingInput.js.map +1 -1
  82. package/dist/components/Forms/SearchInput.d.ts +18 -10
  83. package/dist/components/Forms/SearchInput.d.ts.map +1 -1
  84. package/dist/components/Forms/SearchInput.js +44 -23
  85. package/dist/components/Forms/SearchInput.js.map +1 -1
  86. package/dist/components/Forms/SelectField.d.ts +41 -0
  87. package/dist/components/Forms/SelectField.d.ts.map +1 -0
  88. package/dist/components/Forms/SelectField.js +110 -0
  89. package/dist/components/Forms/SelectField.js.map +1 -0
  90. package/dist/components/Forms/SwitchField.d.ts +14 -0
  91. package/dist/components/Forms/SwitchField.d.ts.map +1 -0
  92. package/dist/components/Forms/SwitchField.js +26 -0
  93. package/dist/components/Forms/SwitchField.js.map +1 -0
  94. package/dist/components/Forms/TagsInput.d.ts +29 -8
  95. package/dist/components/Forms/TagsInput.d.ts.map +1 -1
  96. package/dist/components/Forms/TagsInput.js +53 -9
  97. package/dist/components/Forms/TagsInput.js.map +1 -1
  98. package/dist/components/Forms/TextArea.d.ts +13 -10
  99. package/dist/components/Forms/TextArea.d.ts.map +1 -1
  100. package/dist/components/Forms/TextArea.js +27 -9
  101. package/dist/components/Forms/TextArea.js.map +1 -1
  102. package/dist/components/Forms/TextField.d.ts +14 -0
  103. package/dist/components/Forms/TextField.d.ts.map +1 -0
  104. package/dist/components/Forms/TextField.js +29 -0
  105. package/dist/components/Forms/TextField.js.map +1 -0
  106. package/dist/components/Forms/ToggleInlineButton.d.ts +33 -12
  107. package/dist/components/Forms/ToggleInlineButton.d.ts.map +1 -1
  108. package/dist/components/Forms/ToggleInlineButton.js +56 -6
  109. package/dist/components/Forms/ToggleInlineButton.js.map +1 -1
  110. package/dist/components/Forms/UploadFilesPreview.js +3 -3
  111. package/dist/components/Forms/UploadFilesPreview.js.map +1 -1
  112. package/dist/components/Forms/field-typing.test-d.d.ts +2 -0
  113. package/dist/components/Forms/field-typing.test-d.d.ts.map +1 -0
  114. package/dist/components/Forms/field-typing.test-d.js +24 -0
  115. package/dist/components/Forms/field-typing.test-d.js.map +1 -0
  116. package/dist/components/Forms/useFieldController.d.ts +85 -0
  117. package/dist/components/Forms/useFieldController.d.ts.map +1 -0
  118. package/dist/components/Forms/useFieldController.js +54 -0
  119. package/dist/components/Forms/useFieldController.js.map +1 -0
  120. package/dist/components/Loaders/Loading.d.ts.map +1 -1
  121. package/dist/components/Loaders/Loading.js +3 -2
  122. package/dist/components/Loaders/Loading.js.map +1 -1
  123. package/dist/components/Tables/ActionColumn.d.ts +20 -4
  124. package/dist/components/Tables/ActionColumn.d.ts.map +1 -1
  125. package/dist/components/Tables/ActionColumn.js +24 -5
  126. package/dist/components/Tables/ActionColumn.js.map +1 -1
  127. package/dist/components/Tables/FilterPannel.d.ts +9 -2
  128. package/dist/components/Tables/FilterPannel.d.ts.map +1 -1
  129. package/dist/components/Tables/FilterPannel.js +15 -11
  130. package/dist/components/Tables/FilterPannel.js.map +1 -1
  131. package/dist/components/Tables/IndexColumn.d.ts +12 -3
  132. package/dist/components/Tables/IndexColumn.d.ts.map +1 -1
  133. package/dist/components/Tables/IndexColumn.js +21 -5
  134. package/dist/components/Tables/IndexColumn.js.map +1 -1
  135. package/dist/components/Tables/MantisDataTable.d.ts +45 -0
  136. package/dist/components/Tables/MantisDataTable.d.ts.map +1 -0
  137. package/dist/components/Tables/MantisDataTable.js +63 -0
  138. package/dist/components/Tables/MantisDataTable.js.map +1 -0
  139. package/dist/components/Tables/MenuButton.d.ts +28 -7
  140. package/dist/components/Tables/MenuButton.d.ts.map +1 -1
  141. package/dist/components/Tables/MenuButton.js +20 -10
  142. package/dist/components/Tables/MenuButton.js.map +1 -1
  143. package/dist/components/Tables/PaginatedTable.d.ts +26 -17
  144. package/dist/components/Tables/PaginatedTable.d.ts.map +1 -1
  145. package/dist/components/Tables/PaginatedTable.js +24 -22
  146. package/dist/components/Tables/PaginatedTable.js.map +1 -1
  147. package/dist/components/Tables/cell-presets.d.ts +35 -0
  148. package/dist/components/Tables/cell-presets.d.ts.map +1 -0
  149. package/dist/components/Tables/cell-presets.js +40 -0
  150. package/dist/components/Tables/cell-presets.js.map +1 -0
  151. package/dist/components/Tables/columns.d.ts +40 -0
  152. package/dist/components/Tables/columns.d.ts.map +1 -0
  153. package/dist/components/Tables/columns.js +2 -0
  154. package/dist/components/Tables/columns.js.map +1 -0
  155. package/dist/components/Tables/filters/MultiSelectFilter.d.ts +24 -6
  156. package/dist/components/Tables/filters/MultiSelectFilter.d.ts.map +1 -1
  157. package/dist/components/Tables/filters/MultiSelectFilter.js +19 -6
  158. package/dist/components/Tables/filters/MultiSelectFilter.js.map +1 -1
  159. package/dist/components/auth/ChangePasswordForm.d.ts.map +1 -1
  160. package/dist/components/auth/ChangePasswordForm.js +12 -12
  161. package/dist/components/auth/ChangePasswordForm.js.map +1 -1
  162. package/dist/components/auth/ForgotPasswordForm.d.ts.map +1 -1
  163. package/dist/components/auth/ForgotPasswordForm.js +7 -5
  164. package/dist/components/auth/ForgotPasswordForm.js.map +1 -1
  165. package/dist/components/auth/LoginForm.d.ts +2 -2
  166. package/dist/components/auth/LoginForm.d.ts.map +1 -1
  167. package/dist/components/auth/LoginForm.js +15 -15
  168. package/dist/components/auth/LoginForm.js.map +1 -1
  169. package/dist/components/auth/ResetPasswordForm.d.ts.map +1 -1
  170. package/dist/components/auth/ResetPasswordForm.js +11 -12
  171. package/dist/components/auth/ResetPasswordForm.js.map +1 -1
  172. package/dist/components/auth/UserMenu.d.ts +11 -1
  173. package/dist/components/auth/UserMenu.d.ts.map +1 -1
  174. package/dist/components/auth/UserMenu.js +30 -87
  175. package/dist/components/auth/UserMenu.js.map +1 -1
  176. package/dist/components/data/Timeline.d.ts +2 -2
  177. package/dist/components/data/Timeline.d.ts.map +1 -1
  178. package/dist/components/data/Timeline.js +17 -17
  179. package/dist/components/data/Timeline.js.map +1 -1
  180. package/dist/components/feedback/Avatar.d.ts +4 -2
  181. package/dist/components/feedback/Avatar.d.ts.map +1 -1
  182. package/dist/components/feedback/Avatar.js +4 -4
  183. package/dist/components/feedback/Avatar.js.map +1 -1
  184. package/dist/components/feedback/CardSkeleton.d.ts.map +1 -1
  185. package/dist/components/feedback/CardSkeleton.js +3 -3
  186. package/dist/components/feedback/CardSkeleton.js.map +1 -1
  187. package/dist/components/feedback/TableSkeleton.d.ts.map +1 -1
  188. package/dist/components/feedback/TableSkeleton.js +3 -3
  189. package/dist/components/feedback/TableSkeleton.js.map +1 -1
  190. package/dist/components/feedback/Tag.d.ts +4 -2
  191. package/dist/components/feedback/Tag.d.ts.map +1 -1
  192. package/dist/components/feedback/Tag.js +4 -4
  193. package/dist/components/feedback/Tag.js.map +1 -1
  194. package/dist/components/navigation/CommandPalette.d.ts.map +1 -1
  195. package/dist/components/navigation/CommandPalette.js +5 -2
  196. package/dist/components/navigation/CommandPalette.js.map +1 -1
  197. package/dist/components/navigation/PageTabs.d.ts +10 -8
  198. package/dist/components/navigation/PageTabs.d.ts.map +1 -1
  199. package/dist/components/navigation/PageTabs.js +17 -13
  200. package/dist/components/navigation/PageTabs.js.map +1 -1
  201. package/dist/components/overlays/Drawer.d.ts +16 -3
  202. package/dist/components/overlays/Drawer.d.ts.map +1 -1
  203. package/dist/components/overlays/Drawer.js +9 -5
  204. package/dist/components/overlays/Drawer.js.map +1 -1
  205. package/dist/components/overlays/Modal.d.ts +18 -3
  206. package/dist/components/overlays/Modal.d.ts.map +1 -1
  207. package/dist/components/overlays/Modal.js +13 -5
  208. package/dist/components/overlays/Modal.js.map +1 -1
  209. package/dist/components/pages/app-shell/AppShell.d.ts.map +1 -1
  210. package/dist/components/pages/app-shell/AppShell.js +6 -6
  211. package/dist/components/pages/app-shell/AppShell.js.map +1 -1
  212. package/dist/components/ui/ConfirmDialog.d.ts +1 -2
  213. package/dist/components/ui/ConfirmDialog.d.ts.map +1 -1
  214. package/dist/components/ui/ConfirmDialog.js +10 -4
  215. package/dist/components/ui/ConfirmDialog.js.map +1 -1
  216. package/dist/components/ui/DataState.js +2 -2
  217. package/dist/components/ui/DataState.js.map +1 -1
  218. package/dist/index.d.ts +71 -42
  219. package/dist/index.d.ts.map +1 -1
  220. package/dist/index.js +114 -22
  221. package/dist/index.js.map +1 -1
  222. package/docs/README.md +1 -1
  223. package/docs/components/action-column.md +33 -7
  224. package/docs/components/admin-page-configurator.md +24 -5
  225. package/docs/components/admin-page-header.md +21 -3
  226. package/docs/components/admin-page-layout-shell.md +18 -4
  227. package/docs/components/admin-page-layout.md +34 -5
  228. package/docs/components/app-shell.md +31 -6
  229. package/docs/components/auto-complete-field.md +60 -0
  230. package/docs/components/avatar.md +18 -8
  231. package/docs/components/bar-chart.md +25 -7
  232. package/docs/components/breadcrumbs.md +15 -2
  233. package/docs/components/button.md +34 -15
  234. package/docs/components/card-skeleton.md +9 -3
  235. package/docs/components/change-password-form.md +23 -4
  236. package/docs/components/checkbox-field.md +38 -0
  237. package/docs/components/ckeditor-input.md +40 -8
  238. package/docs/components/color-picker-input.md +19 -8
  239. package/docs/components/command-palette.md +23 -2
  240. package/docs/components/confirm-dialog.md +36 -9
  241. package/docs/components/data-state.md +31 -6
  242. package/docs/components/date-field.md +39 -0
  243. package/docs/components/date-presets.md +19 -5
  244. package/docs/components/description-list.md +20 -2
  245. package/docs/components/dirty-form-guard.md +16 -4
  246. package/docs/components/donut-chart.md +24 -7
  247. package/docs/components/drawer.md +27 -8
  248. package/docs/components/empty-state.md +12 -2
  249. package/docs/components/error-boundary.md +16 -2
  250. package/docs/components/error-message.md +22 -3
  251. package/docs/components/field-shell.md +47 -0
  252. package/docs/components/file-dropzone.md +22 -6
  253. package/docs/components/filter-pannel.md +34 -7
  254. package/docs/components/forgot-password-form.md +23 -5
  255. package/docs/components/form-actions-bar.md +21 -2
  256. package/docs/components/form-field-render.md +36 -8
  257. package/docs/components/form-section.md +13 -1
  258. package/docs/components/form-wizard.md +34 -5
  259. package/docs/components/hidden-field.md +22 -6
  260. package/docs/components/index-column.md +25 -5
  261. package/docs/components/line-chart.md +25 -7
  262. package/docs/components/loading.md +14 -5
  263. package/docs/components/login-form.md +31 -6
  264. package/docs/components/mantis-data-table.md +61 -0
  265. package/docs/components/map-picker-client.md +29 -8
  266. package/docs/components/map-picker-osm.md +27 -9
  267. package/docs/components/map-picker.md +25 -4
  268. package/docs/components/mask-field.md +31 -0
  269. package/docs/components/menu-button.md +22 -7
  270. package/docs/components/modal.md +34 -9
  271. package/docs/components/multi-select-filter.md +25 -7
  272. package/docs/components/number-field.md +40 -0
  273. package/docs/components/otp-input.md +20 -7
  274. package/docs/components/page-tabs.md +23 -4
  275. package/docs/components/page-title.md +6 -1
  276. package/docs/components/paginated-table.md +36 -13
  277. package/docs/components/pagination.md +20 -7
  278. package/docs/components/password-input.md +20 -8
  279. package/docs/components/phone-input.md +17 -7
  280. package/docs/components/radio-group.md +39 -9
  281. package/docs/components/range-slider.md +18 -6
  282. package/docs/components/rating-input.md +19 -8
  283. package/docs/components/render-field.md +31 -3
  284. package/docs/components/reset-password-form.md +24 -4
  285. package/docs/components/rich-text-preview.md +17 -5
  286. package/docs/components/search-input.md +18 -7
  287. package/docs/components/select-field.md +55 -0
  288. package/docs/components/stat-card.md +14 -3
  289. package/docs/components/status-badge.md +17 -7
  290. package/docs/components/switch-field.md +32 -0
  291. package/docs/components/table-filter-field.md +22 -4
  292. package/docs/components/table-skeleton.md +9 -3
  293. package/docs/components/table-toolbar.md +18 -5
  294. package/docs/components/tag.md +16 -7
  295. package/docs/components/tags-input.md +21 -8
  296. package/docs/components/text-area.md +18 -8
  297. package/docs/components/text-field.md +32 -0
  298. package/docs/components/timeline.md +19 -3
  299. package/docs/components/toggle-inline-button.md +42 -10
  300. package/docs/components/upload-files-preview.md +23 -2
  301. package/docs/components/use-field-controller.md +58 -0
  302. package/docs/components/user-menu.md +26 -6
  303. package/docs/contracts/dependency-map.md +50 -52
  304. package/docs/contracts/field-controller.md +138 -0
  305. package/docs/contracts/style-imports.md +1 -20
  306. package/llms.txt +70 -72
  307. package/package.json +48 -11
  308. package/dist/components/Forms/AsyncSelect.d.ts +0 -20
  309. package/dist/components/Forms/AsyncSelect.d.ts.map +0 -1
  310. package/dist/components/Forms/AsyncSelect.js +0 -77
  311. package/dist/components/Forms/AsyncSelect.js.map +0 -1
  312. package/dist/components/Forms/Combobox.d.ts +0 -10
  313. package/dist/components/Forms/Combobox.d.ts.map +0 -1
  314. package/dist/components/Forms/Combobox.js +0 -11
  315. package/dist/components/Forms/Combobox.js.map +0 -1
  316. package/dist/components/Forms/CurrencyInput.d.ts +0 -12
  317. package/dist/components/Forms/CurrencyInput.d.ts.map +0 -1
  318. package/dist/components/Forms/CurrencyInput.js +0 -9
  319. package/dist/components/Forms/CurrencyInput.js.map +0 -1
  320. package/dist/components/Forms/DateInput.d.ts +0 -10
  321. package/dist/components/Forms/DateInput.d.ts.map +0 -1
  322. package/dist/components/Forms/DateInput.js +0 -11
  323. package/dist/components/Forms/DateInput.js.map +0 -1
  324. package/dist/components/Forms/DateRangeInput.d.ts +0 -10
  325. package/dist/components/Forms/DateRangeInput.d.ts.map +0 -1
  326. package/dist/components/Forms/DateRangeInput.js +0 -13
  327. package/dist/components/Forms/DateRangeInput.js.map +0 -1
  328. package/dist/components/Forms/DropDown.d.ts +0 -10
  329. package/dist/components/Forms/DropDown.d.ts.map +0 -1
  330. package/dist/components/Forms/DropDown.js +0 -11
  331. package/dist/components/Forms/DropDown.js.map +0 -1
  332. package/dist/components/Forms/MultiSelect.d.ts +0 -10
  333. package/dist/components/Forms/MultiSelect.d.ts.map +0 -1
  334. package/dist/components/Forms/MultiSelect.js +0 -13
  335. package/dist/components/Forms/MultiSelect.js.map +0 -1
  336. package/dist/components/Forms/NumberInput.d.ts +0 -10
  337. package/dist/components/Forms/NumberInput.d.ts.map +0 -1
  338. package/dist/components/Forms/NumberInput.js +0 -16
  339. package/dist/components/Forms/NumberInput.js.map +0 -1
  340. package/dist/components/Forms/Select.d.ts +0 -15
  341. package/dist/components/Forms/Select.d.ts.map +0 -1
  342. package/dist/components/Forms/Select.js +0 -48
  343. package/dist/components/Forms/Select.js.map +0 -1
  344. package/dist/components/Forms/Switch.d.ts +0 -18
  345. package/dist/components/Forms/Switch.d.ts.map +0 -1
  346. package/dist/components/Forms/Switch.js +0 -30
  347. package/dist/components/Forms/Switch.js.map +0 -1
  348. package/dist/components/Forms/TextInput.d.ts +0 -11
  349. package/dist/components/Forms/TextInput.d.ts.map +0 -1
  350. package/dist/components/Forms/TextInput.js +0 -12
  351. package/dist/components/Forms/TextInput.js.map +0 -1
  352. package/dist/components/Forms/TimePicker.d.ts +0 -13
  353. package/dist/components/Forms/TimePicker.d.ts.map +0 -1
  354. package/dist/components/Forms/TimePicker.js +0 -19
  355. package/dist/components/Forms/TimePicker.js.map +0 -1
  356. package/dist/components/Forms/Toggle.d.ts +0 -14
  357. package/dist/components/Forms/Toggle.d.ts.map +0 -1
  358. package/dist/components/Forms/Toggle.js +0 -10
  359. package/dist/components/Forms/Toggle.js.map +0 -1
  360. package/dist/components/Forms/types.d.ts +0 -9
  361. package/dist/components/Forms/types.d.ts.map +0 -1
  362. package/dist/components/Forms/types.js +0 -2
  363. package/dist/components/Forms/types.js.map +0 -1
  364. package/docs/components/async-select.md +0 -27
  365. package/docs/components/combobox.md +0 -19
  366. package/docs/components/currency-input.md +0 -21
  367. package/docs/components/date-input.md +0 -21
  368. package/docs/components/date-range-input.md +0 -20
  369. package/docs/components/drop-down.md +0 -26
  370. package/docs/components/multi-select.md +0 -22
  371. package/docs/components/number-input.md +0 -21
  372. package/docs/components/select.md +0 -28
  373. package/docs/components/switch.md +0 -24
  374. package/docs/components/text-input.md +0 -24
  375. package/docs/components/time-picker.md +0 -25
  376. package/docs/components/toggle.md +0 -24
  377. package/docs/contracts/component-doc-schema.md +0 -78
  378. package/docs/contracts/controller-props.md +0 -28
@@ -2,22 +2,49 @@
2
2
  name: ConfirmDialog
3
3
  category: feedback
4
4
  import: '@mantis-core/ui/components/ui/ConfirmDialog'
5
- whenToUse: Modal confirmation dialog with confirm/cancel buttons and severity-aware styling.
6
- baseLibrary: primereact/dialog
5
+ whenToUse: Confirm/cancel dialog for destructive or non-trivial actions; composed from the migrated Modal + Button.
6
+ baseLibrary: custom
7
7
  requiredStyles: [scss/confirm-dialog.scss]
8
+ relatedComponents: ['Modal', 'Button']
8
9
  relatedNextCore: []
9
10
  props:
10
11
  - { name: visible, type: boolean, required: true }
11
- - { name: onConfirm, type: '() => void', required: true }
12
+ - { name: onConfirm, type: '() => void | Promise<void>', required: true }
12
13
  - { name: onCancel, type: '() => void', required: true }
13
- - { name: title, type: ReactNode, required: false }
14
- - { name: message, type: ReactNode, required: false }
15
- - { name: confirmSeverity, type: '''primary'' | ''info'' | ''success'' | ''warning'' | ''danger''', required: false, default: '''danger''' }
16
- - { name: loading, type: boolean, required: false }
17
- - { name: width, type: string, required: false, default: '''30rem''' }
14
+ - { name: title, type: ReactNode, required: false, default: "'Confirmar accion'" }
15
+ - { name: message, type: ReactNode, required: false, default: "'Esta accion no se puede deshacer.'" }
16
+ - { name: icon, type: ReactNode, required: false }
17
+ - { name: confirmLabel, type: string, required: false, default: "'Confirmar'" }
18
+ - { name: cancelLabel, type: string, required: false, default: "'Cancelar'" }
19
+ - { name: confirmSeverity, type: "'primary' | 'info' | 'success' | 'warning' | 'danger'", required: false, default: "'danger'" }
20
+ - { name: loading, type: boolean, required: false, default: 'false' }
21
+ - { name: disabled, type: boolean, required: false, default: 'false' }
22
+ - { name: className, type: string, required: false }
18
23
  ---
24
+
19
25
  ## Example
20
26
 
21
27
  ```tsx
22
- <ConfirmDialog visible={showConfirm} title='Delete?' message='This cannot be undone.' confirmSeverity='danger' onConfirm={handleDelete} onCancel={() => setShowConfirm(false)} />
28
+ import ConfirmDialog from '@mantis-core/ui/components/ui/ConfirmDialog';
29
+ import { useState } from 'react';
30
+
31
+ function Example() {
32
+ const [visible, setVisible] = useState(false);
33
+ return (
34
+ <ConfirmDialog
35
+ visible={visible}
36
+ title='Delete property?'
37
+ message='This cannot be undone.'
38
+ confirmSeverity='danger'
39
+ onConfirm={() => setVisible(false)}
40
+ onCancel={() => setVisible(false)}
41
+ />
42
+ );
43
+ }
23
44
  ```
45
+
46
+ ## Notes
47
+
48
+ - Renders headerless inside a `size="sm"` Modal — title/message live in the body, actions in the footer.
49
+ - Backdrop/close dismissal is treated as cancel, unless `loading` is `true` — dismissal is blocked while an action is in flight.
50
+ - Default copy is Spanish; override `title`/`message`/`confirmLabel`/`cancelLabel` for other locales.
@@ -2,18 +2,43 @@
2
2
  name: DataState
3
3
  category: feedback
4
4
  import: '@mantis-core/ui/components/ui/DataState'
5
- whenToUse: Full-area empty/error/loading state placeholder for data-fetching views.
5
+ whenToUse: Loading/empty/error/ready placeholder for data-fetching views; renders `children` unchanged when `status="ready"`, otherwise a titled state panel.
6
6
  baseLibrary: custom
7
7
  requiredStyles: [scss/data-state.scss]
8
- relatedComponents: [StatusBadge, Loading]
8
+ relatedComponents: ['StatusBadge', 'Loading']
9
9
  relatedNextCore: []
10
10
  props:
11
- - { name: status, type: DataStateStatus, required: true }
12
- - { name: message, type: string, required: false }
13
- - { name: action, type: ReactNode, required: false }
11
+ - { name: status, type: "'ready' | 'loading' | 'empty' | 'error'", required: true }
12
+ - { name: className, type: string, required: false }
13
+ - { name: children, type: ReactNode, required: false, description: 'Rendered as-is only when `status` is `"ready"`.' }
14
+ - { name: icon, type: ReactNode, required: false, description: 'Overrides the default per-status icon (spinner/inbox/triangle).' }
15
+ - { name: loadingTitle, type: ReactNode, required: false, default: "'Cargando informacion'" }
16
+ - { name: loadingDescription, type: ReactNode, required: false, default: "'Espera un momento mientras consultamos los datos.'" }
17
+ - { name: emptyTitle, type: ReactNode, required: false, default: "'Sin resultados'" }
18
+ - { name: emptyDescription, type: ReactNode, required: false, default: "'No hay registros para mostrar con los filtros actuales.'" }
19
+ - { name: emptyAction, type: ReactNode, required: false }
20
+ - { name: errorTitle, type: ReactNode, required: false, default: "'No se pudo cargar la informacion'" }
21
+ - { name: errorDescription, type: ReactNode, required: false, default: "'Ocurrio un error al consultar los datos.'" }
22
+ - { name: errorAction, type: ReactNode, required: false, description: 'Overrides the default retry Button built from `onRetry`.' }
23
+ - { name: onRetry, type: '() => void', required: false, description: 'Renders a default retry Button on `error` when `errorAction` is not given.' }
24
+ - { name: retryLabel, type: string, required: false, default: "'Reintentar'" }
14
25
  ---
26
+
15
27
  ## Example
16
28
 
17
29
  ```tsx
18
- <DataState status='empty' message='No properties found' action={<Button label='Add first' onClick={onCreate} />} />
30
+ import DataState from '@mantis-core/ui/components/ui/DataState';
31
+
32
+ function Example() {
33
+ return (
34
+ <DataState status='empty' emptyTitle='No properties found' emptyDescription='Try adjusting your filters.'>
35
+ <ul />
36
+ </DataState>
37
+ );
38
+ }
19
39
  ```
40
+
41
+ ## Notes
42
+
43
+ - `status="ready"` short-circuits to `<>{children}</>` — every other prop is ignored in that case.
44
+ - Default copy is Spanish; override the `*Title`/`*Description` props for other locales.
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: DateField
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/DateField'
5
+ whenToUse: Single date, date-range, or time-only picker wired to react-hook-form; one wrapper covers all three via `selectionMode`/`timeOnly`/`showTime`.
6
+ baseLibrary: '@primereact/ui/datepicker'
7
+ formContract: FieldControllerProps
8
+ relatedComponents: ['DatePresets', 'MaskField']
9
+ relatedNextCore: []
10
+ props:
11
+ - { name: selectionMode, type: "'single' | 'multiple' | 'range'", required: false, default: "'single'", description: 'Drives the value shape: Date for single, Date[] for multiple, (Date|null)[] for range.' }
12
+ - { name: showTime, type: boolean, required: false, default: 'false', description: 'Adds hour/minute pickers alongside the calendar.' }
13
+ - { name: timeOnly, type: boolean, required: false, default: 'false', description: 'Hides the calendar, showing only the time pickers.' }
14
+ - { name: hourFormat, type: "'12' | '24'", required: false, default: "'24'", description: 'Adds an AM/PM picker when set to 12.' }
15
+ - { name: showSeconds, type: boolean, required: false, default: 'false', description: 'Adds a seconds picker (with showTime/timeOnly).' }
16
+ - { name: minDate, type: Date, required: false }
17
+ - { name: maxDate, type: Date, required: false }
18
+ - { name: placeholder, type: string, required: false }
19
+ - { name: showButtonBar, type: boolean, required: false, default: 'false', description: 'Renders a Today + Clear footer inside the panel.' }
20
+ ---
21
+
22
+ ## Example
23
+
24
+ ```tsx
25
+ import { DateField } from '@mantis-core/ui/components/Forms/DateField';
26
+ import { useForm } from 'react-hook-form';
27
+
28
+ function Example() {
29
+ const { control } = useForm({ defaultValues: { fecha: null as Date | null } });
30
+ return <DateField name='fecha' control={control} label='Fecha' />;
31
+ }
32
+ ```
33
+
34
+ ## Notes
35
+
36
+ - Folds the three former PR10 date components: single date (default), range (`selectionMode="range"`, value `[start, end]`), and time (`timeOnly`/`showTime`). `react-datepicker` is gone.
37
+ - Value collapses every PR11 "empty" shape (`[]`, `[null, null]`) to a canonical `null` — a partial in-progress range (`[Date, null]`) passes through untouched.
38
+ - Built-in clear affordance (✕ in the input) and, when `showButtonBar`, a Today/Clear footer — both route through the same empty-value normalization.
39
+ - Pair with `DatePresets` for a quick-range button row above a `selectionMode="range"` field.
@@ -2,17 +2,31 @@
2
2
  name: DatePresets
3
3
  category: forms
4
4
  import: '@mantis-core/ui/components/Forms/DatePresets'
5
- whenToUse: 'Row of preset buttons (Hoy, 7 días, 30 días, Este mes) that fire onChange with a [Date, Date] range; pair with DateRangeInput.'
6
- baseLibrary: custom
5
+ whenToUse: Row of quick-range preset buttons (Today, 7 days, 30 days, This month) that fire onChange with a [Date, Date] tuple. Not RHF-bound — pair with a `DateField` in `selectionMode="range"`.
6
+ baseLibrary: '@primereact/ui/button'
7
+ relatedComponents: ['DateField']
7
8
  relatedNextCore: []
8
9
  props:
9
10
  - { name: onChange, type: '(range: [Date, Date]) => void', required: true }
10
- - { name: presets, type: '{ label: string; resolve: () => [Date, Date] }[]', required: false }
11
- - { name: disabled, type: boolean, required: false }
11
+ - { name: presets, type: '{ label: string; resolve: () => [Date, Date] }[]', required: false, description: 'Defaults to Today / 7 días / 30 días / Este mes.' }
12
12
  - { name: className, type: string, required: false }
13
+ - { name: disabled, type: boolean, required: false }
13
14
  ---
15
+
14
16
  ## Example
15
17
 
16
18
  ```tsx
17
- <DatePresets onChange={(range) => setValue('period', range)} />
19
+ import DatePresets from '@mantis-core/ui/components/Forms/DatePresets';
20
+ import { useState } from 'react';
21
+
22
+ function Example() {
23
+ const [range, setRange] = useState<[Date, Date] | null>(null);
24
+ return <DatePresets onChange={setRange} />;
25
+ }
18
26
  ```
27
+
28
+ ## Notes
29
+
30
+ - Default export, not a named export.
31
+ - Purely presentational: each preset renders as a PR11 `Button` (`type="button"`, `variant="outlined"`, `size="small"`) and calls `onChange` with its `resolve()` result — it does not read or write any form state itself.
32
+ - Default preset labels are hardcoded in Spanish ("Hoy", "7 días", "30 días", "Este mes") — pass your own `presets` for other locales.
@@ -2,15 +2,33 @@
2
2
  name: DescriptionList
3
3
  category: data
4
4
  import: '@mantis-core/ui/components/data/DescriptionList'
5
- whenToUse: 'Grid-based label/value list for detail views; supports 1, 2, or 3 columns.'
5
+ whenToUse: Grid-based label/value list for detail views; supports 1, 2, or 3 columns.
6
6
  baseLibrary: custom
7
+ relatedComponents: ['StatCard']
7
8
  relatedNextCore: []
8
9
  props:
9
10
  - { name: items, type: '{ label: string; value: ReactNode }[]', required: true }
10
11
  - { name: columns, type: '1 | 2 | 3', required: false, default: '1' }
11
12
  ---
13
+
12
14
  ## Example
13
15
 
14
16
  ```tsx
15
- <DescriptionList columns={2} items={[{ label: 'Nombre', value: lead.name }, { label: 'Email', value: lead.email }]} />
17
+ import DescriptionList from '@mantis-core/ui/components/data/DescriptionList';
18
+
19
+ function Example() {
20
+ return (
21
+ <DescriptionList
22
+ columns={2}
23
+ items={[
24
+ { label: 'Name', value: 'Jane Doe' },
25
+ { label: 'Email', value: 'jane@example.com' },
26
+ ]}
27
+ />
28
+ );
29
+ }
16
30
  ```
31
+
32
+ ## Notes
33
+
34
+ - Not re-exported from the package root — import the deep path shown above.
@@ -2,7 +2,7 @@
2
2
  name: DirtyFormGuard
3
3
  category: forms
4
4
  import: '@mantis-core/ui/components/Forms/DirtyFormGuard'
5
- whenToUse: Blocks navigation when a react-hook-form has unsaved changes; also available as useDirtyFormGuard hook.
5
+ whenToUse: Blocks tab-close/reload when a react-hook-form has unsaved changes; render it declaratively, or use the underlying useDirtyFormGuard hook to also guard programmatic navigation.
6
6
  baseLibrary: custom
7
7
  relatedComponents: [FormActionsBar]
8
8
  relatedNextCore: []
@@ -11,13 +11,25 @@ props:
11
11
  - { name: enabled, type: boolean, required: false, default: 'true', description: 'Set to false to temporarily disable the guard' }
12
12
  - { name: message, type: string, required: false, description: 'Custom confirmation message shown to the user' }
13
13
  ---
14
+
14
15
  ## Example
15
16
 
16
17
  ```tsx
17
- {/* TODO: add example */}
18
+ import DirtyFormGuard from '@mantis-core/ui/components/Forms/DirtyFormGuard';
19
+ import { useForm } from 'react-hook-form';
20
+
21
+ function Example() {
22
+ const { formState } = useForm({ defaultValues: { name: '' } });
23
+ return <DirtyFormGuard isDirty={formState.isDirty} />;
24
+ }
18
25
  ```
19
26
 
20
27
  ## Notes
21
28
 
22
- - Use the component for declarative page guards.
23
- - Use the hook when you need to wrap specific navigation or destructive actions.
29
+ - Renders nothing (`return null`) it only attaches a `beforeunload` listener while
30
+ `enabled && isDirty`.
31
+ - Also exported as the `useDirtyFormGuard(options)` hook, returning `{ shouldProceed,
32
+ confirmIfDirty }`: `shouldProceed()` runs `window.confirm(message)` and `confirmIfDirty(action)`
33
+ runs `action()` only if the user confirms (or the form isn't dirty). Use the hook to guard
34
+ programmatic navigation (router pushes, tab switches, discard buttons) that `beforeunload` can't
35
+ catch; use the component for the tab-close/reload case.
@@ -2,20 +2,37 @@
2
2
  name: DonutChart
3
3
  category: charts
4
4
  import: '@mantis-core/ui/components/charts/DonutChart'
5
- whenToUse: Part-to-whole breakdown rendered as a doughnut chart.
6
- baseLibrary: custom
5
+ whenToUse: Part-to-whole breakdown rendered as a doughnut chart, zero-config over chart.js defaults.
6
+ baseLibrary: chart.js
7
+ requiredStyles: []
7
8
  relatedComponents: [LineChart, BarChart]
8
9
  relatedNextCore: []
9
10
  props:
10
11
  - { name: labels, type: 'string[]', required: true }
11
- - { name: datasets, type: '{ data: number[]; label?: string }[]', required: true }
12
- - { name: options, type: 'ChartOptions<''doughnut''>', required: false }
13
- - { name: colors, type: 'string[]', required: false, default: DEFAULT_COLORS palette }
14
- - { name: height, type: number, required: false, default: '300' }
12
+ - { name: datasets, type: '{ data: number[]; label?: string }[]', required: true, description: 'Typically a single-entry array — one value per label/slice.' }
13
+ - { name: options, type: 'ChartOptions<''doughnut''>', required: false, description: 'Deep-merged over defaultDonutOptions (plugins merge shallowly one level).' }
14
+ - { name: colors, type: 'string[]', required: false, default: 'DEFAULT_COLORS (8-color palette)', description: 'Applied per-slice (cycled by label index) unless the dataset supplies its own backgroundColor/borderColor.' }
15
+ - { name: height, type: number, required: false, default: '300', description: 'Container height in px.' }
15
16
  - { name: className, type: string, required: false }
16
17
  ---
18
+
17
19
  ## Example
18
20
 
19
21
  ```tsx
20
- <DonutChart labels={['Leads','Closed','Lost']} datasets={[{ data: [60,25,15] }]} />
22
+ import DonutChart from '@mantis-core/ui/components/charts/DonutChart';
23
+
24
+ function Example() {
25
+ return (
26
+ <DonutChart
27
+ labels={['Leads', 'Closed', 'Lost']}
28
+ datasets={[{ data: [60, 25, 15] }]}
29
+ />
30
+ );
31
+ }
21
32
  ```
33
+
34
+ ## Notes
35
+
36
+ - Not re-exported from the package root — import from the deep path above (`@mantis-core/ui/components/charts/DonutChart`), not `@mantis-core/ui`.
37
+ - Calls `registerCharts()` (module-level, from `./chart-setup`) on import — no separate chart.js registration needed.
38
+ - Legend defaults to `position: 'right'` (vs. `'top'` for Bar/Line).
@@ -2,18 +2,37 @@
2
2
  name: Drawer
3
3
  category: overlays
4
4
  import: '@mantis-core/ui/components/overlays/Drawer'
5
- whenToUse: Slide-in side panel (PrimeReact Sidebar wrapper); defaults to right position.
6
- baseLibrary: custom
5
+ whenToUse: Controlled slide-in side panel; composes PR11's headless Drawer compound (Root/Portal/Backdrop/Popup/Header/Content/Footer no Positioner, unlike Dialog) behind a simple `open`/`side`/`title`/`footer` API.
6
+ baseLibrary: '@primereact/ui/drawer'
7
+ relatedComponents: ['Modal', 'FilterPannel']
7
8
  relatedNextCore: []
8
9
  props:
9
- - { name: visible, type: boolean, required: true }
10
- - { name: onHide, type: '() => void', required: true }
11
- - { name: position, type: '''left'' | ''right'' | ''top'' | ''bottom''', required: false, default: '''right''' }
12
- - { name: header, type: ReactNode, required: false }
13
- - { name: className, type: string, required: false }
10
+ - { name: open, type: boolean, required: true, description: 'Controlled visibility.' }
11
+ - { name: onOpenChange, type: '(open: boolean) => void', required: true, description: 'Fires with the next open value when the backdrop/close toggles it.' }
12
+ - { name: side, type: "'left' | 'right' | 'top' | 'bottom'", required: false, default: "'right'", description: 'Edge the panel slides in from — maps to PR11 `position`.' }
13
+ - { name: title, type: ReactNode, required: false, description: 'Header title. Omit to render no header.' }
14
+ - { name: footer, type: ReactNode, required: false, description: 'Footer content. Omit to render no footer.' }
15
+ - { name: className, type: string, required: false, description: 'Extra class on the Popup element.' }
16
+ - { name: children, type: ReactNode, required: false }
14
17
  ---
18
+
15
19
  ## Example
16
20
 
17
21
  ```tsx
18
- <Drawer visible={open} onHide={() => setOpen(false)} header='Filtros'><FilterForm /></Drawer>
22
+ import Drawer from '@mantis-core/ui/components/overlays/Drawer';
23
+ import { useState } from 'react';
24
+
25
+ function Example() {
26
+ const [open, setOpen] = useState(false);
27
+ return (
28
+ <Drawer open={open} onOpenChange={setOpen} side='right' title='Filters'>
29
+ <p>Filter form</p>
30
+ </Drawer>
31
+ );
32
+ }
19
33
  ```
34
+
35
+ ## Notes
36
+
37
+ - Without a `title`, still renders a dismissable close (X) button (used e.g. by AppShell's mobile nav) — the panel is never un-dismissable.
38
+ - No `requiredStyles` — preset-themed.
@@ -2,8 +2,9 @@
2
2
  name: EmptyState
3
3
  category: feedback
4
4
  import: '@mantis-core/ui/components/feedback/EmptyState'
5
- whenToUse: 'Centered empty-state placeholder with icon, title, optional description, and action button.'
5
+ whenToUse: Centered empty-state placeholder with icon, title, optional description, and action button.
6
6
  baseLibrary: custom
7
+ relatedComponents: ['DataState']
7
8
  relatedNextCore: []
8
9
  props:
9
10
  - { name: title, type: ReactNode, required: true }
@@ -11,8 +12,17 @@ props:
11
12
  - { name: description, type: ReactNode, required: false }
12
13
  - { name: action, type: ReactNode, required: false }
13
14
  ---
15
+
14
16
  ## Example
15
17
 
16
18
  ```tsx
17
- <EmptyState icon={<i className='pi pi-inbox' />} title='Sin propiedades' description='Crea tu primera propiedad.' action={<Button label='Nueva' onClick={onCreate} />} />
19
+ import EmptyState from '@mantis-core/ui/components/feedback/EmptyState';
20
+
21
+ function Example() {
22
+ return <EmptyState title='No properties yet' description='Create your first property to get started.' />;
23
+ }
18
24
  ```
25
+
26
+ ## Notes
27
+
28
+ - Not re-exported from the package root — import the deep path shown above.
@@ -2,7 +2,7 @@
2
2
  name: ErrorBoundary
3
3
  category: feedback
4
4
  import: '@mantis-core/ui/components/feedback/ErrorBoundary'
5
- whenToUse: React error boundary; renders fallback UI on uncaught errors; fallback can be a ReactNode or render function.
5
+ whenToUse: React class error boundary; renders fallback UI on uncaught render errors in its children.
6
6
  baseLibrary: custom
7
7
  relatedNextCore: []
8
8
  props:
@@ -10,8 +10,22 @@ props:
10
10
  - { name: fallback, type: 'ReactNode | ((error: Error) => ReactNode)', required: false }
11
11
  - { name: onError, type: '(error: Error, info: ErrorInfo) => void', required: false }
12
12
  ---
13
+
13
14
  ## Example
14
15
 
15
16
  ```tsx
16
- <ErrorBoundary fallback={<p>Algo salió mal.</p>}><FeatureView /></ErrorBoundary>
17
+ import ErrorBoundary from '@mantis-core/ui/components/feedback/ErrorBoundary';
18
+
19
+ function Example() {
20
+ return (
21
+ <ErrorBoundary fallback={<p>Something went wrong.</p>}>
22
+ <div>Feature content</div>
23
+ </ErrorBoundary>
24
+ );
25
+ }
17
26
  ```
27
+
28
+ ## Notes
29
+
30
+ - Not re-exported from the package root — import the deep path shown above.
31
+ - `fallback` as a function receives the caught `Error`; as a plain node it renders as-is. Omitted entirely, it falls back to a minimal built-in message.
@@ -2,14 +2,33 @@
2
2
  name: ErrorMessage
3
3
  category: forms
4
4
  import: '@mantis-core/ui/components/Forms/ErrorMessage'
5
- whenToUse: Displays a validation error string; use standalone when not using FormFieldRender.
5
+ whenToUse: 'Standalone validation-error text for one named react-hook-form field, read from form context; use when composing a custom layout instead of FormFieldRender.'
6
6
  baseLibrary: '@hookform/error-message'
7
+ relatedComponents: ['FormFieldRender']
7
8
  relatedNextCore: []
8
9
  props:
9
- - { name: message, type: string, required: false }
10
+ - { name: name, type: string, required: true, description: 'The RHF field name to read the error for.' }
10
11
  ---
12
+
11
13
  ## Example
12
14
 
13
15
  ```tsx
14
- <ErrorMessage message={errors.email?.message} />
16
+ import ErrorMessage from '@mantis-core/ui/components/Forms/ErrorMessage';
17
+ import { FormProvider, useForm } from 'react-hook-form';
18
+
19
+ function Example() {
20
+ const methods = useForm({ defaultValues: { email: '' } });
21
+ return (
22
+ <FormProvider {...methods}>
23
+ <ErrorMessage name='email' />
24
+ </FormProvider>
25
+ );
26
+ }
15
27
  ```
28
+
29
+ ## Notes
30
+
31
+ - Reads `useFormState({ name })` with no explicit `control` — it resolves the form from React
32
+ context, so it must render inside a `<FormProvider>`.
33
+ - Pre-`FieldControllerProps` component: it only displays a message string, it does not wrap an
34
+ input or manage aria wiring itself (compare `FieldShell`, which owns aria via `useFieldController`).
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: FieldShell
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/FieldShell'
5
+ whenToUse: 'Presentation primitive for label + addon + help/error composition around one input; every FieldControllerProps-based field wrapper renders it internally — reach for it directly only when hand-building a new wrapper (see field-controller.md).'
6
+ baseLibrary: custom
7
+ formContract: FieldControllerProps
8
+ relatedComponents: ['TextField', 'useFieldController']
9
+ relatedNextCore: []
10
+ props:
11
+ - { name: id, type: string, required: true, description: 'Input id; also roots the generated help/error ids (`${id}-help` / `${id}-error`).' }
12
+ - { name: label, type: string, required: false }
13
+ - { name: required, type: boolean, required: false, description: 'Presentational ` *` marker on the label; validation is still driven by rules.' }
14
+ - { name: helpText, type: string, required: false }
15
+ - { name: errorMessage, type: string, required: false, description: 'Typically `useFieldController(...).errorMessage`.' }
16
+ - { name: labelMode, type: LabelMode, required: false, description: '''ifta'' | ''float'' | ''beside'' | ''top'' | ''none'' — defaults to MantisThemeProvider.' }
17
+ - { name: floatVariant, type: FloatVariant, required: false, description: '''over'' | ''in'' | ''on'' — only used when labelMode=''float''.' }
18
+ - { name: addonBefore, type: ReactNode, required: false }
19
+ - { name: addonAfter, type: ReactNode, required: false }
20
+ - { name: children, type: ReactNode, required: true, description: 'The input/trigger element.' }
21
+ ---
22
+
23
+ ## Example
24
+
25
+ ```tsx
26
+ import { FieldShell } from '@mantis-core/ui/components/Forms/FieldShell';
27
+
28
+ function Example() {
29
+ return (
30
+ <FieldShell id='email' label='Email' helpText='We will never share it.'>
31
+ <input id='email' type='email' />
32
+ </FieldShell>
33
+ );
34
+ }
35
+ ```
36
+
37
+ ## Notes
38
+
39
+ - Not itself a `FieldControllerProps` field — it takes `id`/`errorMessage`/`labelMode` etc. directly;
40
+ pair it with `useFieldController` to build a new RHF-bound wrapper (see
41
+ [`field-controller.md`](../contracts/field-controller.md)).
42
+ - `fluid` is read from `useFieldConfig()` context, not a shell prop — there is no per-shell fluid override.
43
+ - Renders inside PR11's `IftaLabel`/`FloatLabel` (label modes) and `InputGroup.Root` (addons); falls
44
+ back to `DEFAULT_FIELD_CONFIG` when no `MantisThemeProvider` is mounted, so it renders sanely
45
+ without a provider (e.g. isolated tests).
46
+ - Help and error `<small>` elements both render when both are truthy — there is no suppression; only
47
+ `aria-describedby` (computed by `useFieldController`, not by this component) prefers the error.
@@ -2,14 +2,14 @@
2
2
  name: FileDropzone
3
3
  category: forms
4
4
  import: '@mantis-core/ui/components/Forms/FileDropzone'
5
- whenToUse: Drag-and-drop file input with validation (type, size, count); supports react-hook-form mode and plain controlled mode.
5
+ whenToUse: Drag-and-drop file input with validation (type, size, count); supports a react-hook-form binding or plain controlled value/onChange.
6
6
  baseLibrary: custom
7
7
  requiredStyles: [scss/file-dropzone.scss]
8
8
  relatedComponents: [UploadFilesPreview]
9
9
  relatedNextCore: []
10
10
  props:
11
- - { name: controller, type: ControllerProps, required: false, description: 'When provided, wires to react-hook-form' }
12
- - { name: value, type: 'File[]', required: false, description: 'Controlled file list (plain mode)' }
11
+ - { name: controller, type: 'Pick<FieldControllerProps, "name" | "control" | "rules" | "defaultValue" | "shouldUnregister">', required: false, description: 'When provided, wires the dropzone to react-hook-form via this nested object.' }
12
+ - { name: value, type: 'File[]', required: false, description: 'Controlled file list (plain mode, when `controller` is omitted)' }
13
13
  - { name: onChange, type: '(files: File[]) => void', required: false, description: 'Change handler (plain mode)' }
14
14
  - { name: onFilesAccepted, type: '(files: File[]) => void', required: false, description: 'Called with accepted files after drop' }
15
15
  - { name: onFilesRejected, type: '(rejections: FileDropzoneRejectedFile[]) => void', required: false, description: 'Called with rejected files after drop' }
@@ -25,13 +25,29 @@ props:
25
25
  - { name: dragOverTitle, type: string, required: false, description: 'Title text while dragging over' }
26
26
  - { name: className, type: string, required: false, description: 'Additional CSS class on the root element' }
27
27
  ---
28
+
28
29
  ## Example
29
30
 
30
31
  ```tsx
31
- {/* TODO: add example */}
32
+ import FileDropzone from '@mantis-core/ui/components/Forms/FileDropzone';
33
+ import { useForm, type FieldValues } from 'react-hook-form';
34
+
35
+ function Example() {
36
+ const { control } = useForm<FieldValues>({ defaultValues: { documents: [] as File[] } });
37
+ return (
38
+ <FileDropzone
39
+ controller={{ name: 'documents', control }}
40
+ accept={['.pdf', '.jpg']}
41
+ maxFiles={5}
42
+ />
43
+ );
44
+ }
32
45
  ```
33
46
 
34
47
  ## Notes
35
48
 
36
- - Supports both `react-hook-form` mode and plain controlled mode with `value` and `onChange`.
37
- - Rejections are normalized into `FileDropzoneRejectedFile`.
49
+ - `controller` is a nested object (legacy pattern: `{ name, control, rules }`), not the flattened
50
+ `FieldControllerProps` other PR11 field wrappers accept as top-level props.
51
+ - Rejections are normalized into `FileDropzoneRejectedFile` (`{ file, code, message }`); the RHF
52
+ binding disables the dropzone during `formState.isSubmitting` in addition to the `disabled` prop.
53
+ - Omit `controller` to use it as a plain controlled input with `value`/`onChange`.
@@ -2,20 +2,47 @@
2
2
  name: FilterPannel
3
3
  category: tables
4
4
  import: '@mantis-core/ui/components/Tables/FilterPannel'
5
- whenToUse: Slide-in sidebar filter panel for tables; wraps children in FormProvider and calls onApplyFilter with cleaned form data.
6
- baseLibrary: primereact/sidebar
7
- relatedComponents: [PaginatedTable, MultiSelectFilter]
5
+ whenToUse: 'Slide-in filter sidebar for tables; wraps RHF-bound filter fields in their own `FormProvider` and calls `onApplyFilter` with the cleaned form data.'
6
+ baseLibrary: custom
7
+ relatedComponents: [PaginatedTable, MultiSelectFilter, TableFilterField]
8
8
  relatedNextCore: []
9
9
  props:
10
- - { name: onApplyFilter, type: '(data: T) => Promise<void>', required: true }
10
+ - { name: onApplyFilter, type: '(data: T) => Promise<void>', required: true, description: 'Called with the cleaned form data on submit (Aplicar), or `{}` on reset (Restaurar).' }
11
11
  ---
12
+
12
13
  ## Example
13
14
 
14
15
  ```tsx
15
- <FilterPannel onApplyFilter={pagination.applyFilters}><TableFilterField label='Search'><TextInput controller={{ name: 'search' }} /></TableFilterField></FilterPannel>
16
+ import FilterPannel from '@mantis-core/ui/components/Tables/FilterPannel';
17
+ import TableFilterField from '@mantis-core/ui/components/table-filter-field';
18
+ import { useFormContext } from 'react-hook-form';
19
+
20
+ interface Filters {
21
+ search: string;
22
+ }
23
+
24
+ function SearchField() {
25
+ const { register } = useFormContext<Filters>();
26
+ return (
27
+ <TableFilterField label='Search' htmlFor='search'>
28
+ <input id='search' {...register('search')} />
29
+ </TableFilterField>
30
+ );
31
+ }
32
+
33
+ function Example() {
34
+ const onApplyFilter = async (data: Filters) => console.log(data);
35
+ return (
36
+ <FilterPannel<Filters> onApplyFilter={onApplyFilter}>
37
+ <SearchField />
38
+ </FilterPannel>
39
+ );
40
+ }
16
41
  ```
17
42
 
18
43
  ## Notes
19
44
 
20
- - The component creates its own `FormProvider`.
21
- - Empty values are normalized to `null` before `onApplyFilter`.
45
+ - Not re-exported from the package root — import the deep path.
46
+ - Migrated to the PR11 `Drawer` (was PR10 `primereact/sidebar`, hence `baseLibrary: custom` — the sidebar itself is a Mantis wrapper, not a direct PrimeReact base) and the migrated `Button`.
47
+ - Children must read the panel's own `useForm` instance via `useFormContext` (a `FormProvider` is created internally) — do not pass an outer `control`.
48
+ - Empty (`""`/`null`/`undefined`) values are normalized to `null` before `onApplyFilter`; reset applies `{}`.