@mantis-core/ui 0.4.0 → 0.6.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 (377) hide show
  1. package/CHANGELOG.md +144 -0
  2. package/COMPONENTS.md +113 -15
  3. package/README.md +13 -6
  4. package/catalog.json +3031 -0
  5. package/dist/components/Buttons/Button.d.ts +39 -9
  6. package/dist/components/Buttons/Button.d.ts.map +1 -1
  7. package/dist/components/Buttons/Button.js +21 -13
  8. package/dist/components/Buttons/Button.js.map +1 -1
  9. package/dist/components/Forms/AutoCompleteField.d.ts +60 -0
  10. package/dist/components/Forms/AutoCompleteField.d.ts.map +1 -0
  11. package/dist/components/Forms/AutoCompleteField.js +125 -0
  12. package/dist/components/Forms/AutoCompleteField.js.map +1 -0
  13. package/dist/components/Forms/CKEditorInput.d.ts +5 -2
  14. package/dist/components/Forms/CKEditorInput.d.ts.map +1 -1
  15. package/dist/components/Forms/CKEditorInput.js +5 -2
  16. package/dist/components/Forms/CKEditorInput.js.map +1 -1
  17. package/dist/components/Forms/CheckboxField.d.ts +14 -0
  18. package/dist/components/Forms/CheckboxField.d.ts.map +1 -0
  19. package/dist/components/Forms/CheckboxField.js +26 -0
  20. package/dist/components/Forms/CheckboxField.js.map +1 -0
  21. package/dist/components/Forms/ColorPickerInput.d.ts +27 -8
  22. package/dist/components/Forms/ColorPickerInput.d.ts.map +1 -1
  23. package/dist/components/Forms/ColorPickerInput.js +57 -11
  24. package/dist/components/Forms/ColorPickerInput.js.map +1 -1
  25. package/dist/components/Forms/DateField.d.ts +68 -0
  26. package/dist/components/Forms/DateField.d.ts.map +1 -0
  27. package/dist/components/Forms/DateField.js +108 -0
  28. package/dist/components/Forms/DateField.js.map +1 -0
  29. package/dist/components/Forms/DatePresets.d.ts.map +1 -1
  30. package/dist/components/Forms/DatePresets.js +6 -3
  31. package/dist/components/Forms/DatePresets.js.map +1 -1
  32. package/dist/components/Forms/FieldShell.d.ts +24 -0
  33. package/dist/components/Forms/FieldShell.d.ts.map +1 -0
  34. package/dist/components/Forms/FieldShell.js +39 -0
  35. package/dist/components/Forms/FieldShell.js.map +1 -0
  36. package/dist/components/Forms/FileDropzone.d.ts +4 -2
  37. package/dist/components/Forms/FileDropzone.d.ts.map +1 -1
  38. package/dist/components/Forms/FileDropzone.js.map +1 -1
  39. package/dist/components/Forms/FormActionsBar.js +2 -2
  40. package/dist/components/Forms/FormActionsBar.js.map +1 -1
  41. package/dist/components/Forms/FormWizard.d.ts +1 -1
  42. package/dist/components/Forms/FormWizard.d.ts.map +1 -1
  43. package/dist/components/Forms/FormWizard.js +4 -5
  44. package/dist/components/Forms/FormWizard.js.map +1 -1
  45. package/dist/components/Forms/HiddenField.d.ts +12 -6
  46. package/dist/components/Forms/HiddenField.d.ts.map +1 -1
  47. package/dist/components/Forms/HiddenField.js +14 -5
  48. package/dist/components/Forms/HiddenField.js.map +1 -1
  49. package/dist/components/Forms/MaskField.d.ts +28 -0
  50. package/dist/components/Forms/MaskField.d.ts.map +1 -0
  51. package/dist/components/Forms/MaskField.js +74 -0
  52. package/dist/components/Forms/MaskField.js.map +1 -0
  53. package/dist/components/Forms/NumberField.d.ts +14 -0
  54. package/dist/components/Forms/NumberField.d.ts.map +1 -0
  55. package/dist/components/Forms/NumberField.js +51 -0
  56. package/dist/components/Forms/NumberField.js.map +1 -0
  57. package/dist/components/Forms/OtpInput.d.ts +23 -8
  58. package/dist/components/Forms/OtpInput.d.ts.map +1 -1
  59. package/dist/components/Forms/OtpInput.js +37 -8
  60. package/dist/components/Forms/OtpInput.js.map +1 -1
  61. package/dist/components/Forms/PasswordInput.d.ts +22 -9
  62. package/dist/components/Forms/PasswordInput.d.ts.map +1 -1
  63. package/dist/components/Forms/PasswordInput.js +63 -28
  64. package/dist/components/Forms/PasswordInput.js.map +1 -1
  65. package/dist/components/Forms/PhoneInput.d.ts +16 -8
  66. package/dist/components/Forms/PhoneInput.d.ts.map +1 -1
  67. package/dist/components/Forms/PhoneInput.js +13 -6
  68. package/dist/components/Forms/PhoneInput.js.map +1 -1
  69. package/dist/components/Forms/RadioGroup.d.ts +34 -13
  70. package/dist/components/Forms/RadioGroup.d.ts.map +1 -1
  71. package/dist/components/Forms/RadioGroup.js +49 -6
  72. package/dist/components/Forms/RadioGroup.js.map +1 -1
  73. package/dist/components/Forms/RangeSlider.d.ts +26 -11
  74. package/dist/components/Forms/RangeSlider.d.ts.map +1 -1
  75. package/dist/components/Forms/RangeSlider.js +40 -7
  76. package/dist/components/Forms/RangeSlider.js.map +1 -1
  77. package/dist/components/Forms/RatingInput.d.ts +24 -8
  78. package/dist/components/Forms/RatingInput.d.ts.map +1 -1
  79. package/dist/components/Forms/RatingInput.js +41 -9
  80. package/dist/components/Forms/RatingInput.js.map +1 -1
  81. package/dist/components/Forms/SearchInput.d.ts +18 -10
  82. package/dist/components/Forms/SearchInput.d.ts.map +1 -1
  83. package/dist/components/Forms/SearchInput.js +44 -23
  84. package/dist/components/Forms/SearchInput.js.map +1 -1
  85. package/dist/components/Forms/SelectField.d.ts +41 -0
  86. package/dist/components/Forms/SelectField.d.ts.map +1 -0
  87. package/dist/components/Forms/SelectField.js +110 -0
  88. package/dist/components/Forms/SelectField.js.map +1 -0
  89. package/dist/components/Forms/SwitchField.d.ts +14 -0
  90. package/dist/components/Forms/SwitchField.d.ts.map +1 -0
  91. package/dist/components/Forms/SwitchField.js +26 -0
  92. package/dist/components/Forms/SwitchField.js.map +1 -0
  93. package/dist/components/Forms/TagsInput.d.ts +29 -8
  94. package/dist/components/Forms/TagsInput.d.ts.map +1 -1
  95. package/dist/components/Forms/TagsInput.js +53 -9
  96. package/dist/components/Forms/TagsInput.js.map +1 -1
  97. package/dist/components/Forms/TextArea.d.ts +13 -10
  98. package/dist/components/Forms/TextArea.d.ts.map +1 -1
  99. package/dist/components/Forms/TextArea.js +27 -9
  100. package/dist/components/Forms/TextArea.js.map +1 -1
  101. package/dist/components/Forms/TextField.d.ts +14 -0
  102. package/dist/components/Forms/TextField.d.ts.map +1 -0
  103. package/dist/components/Forms/TextField.js +29 -0
  104. package/dist/components/Forms/TextField.js.map +1 -0
  105. package/dist/components/Forms/ToggleInlineButton.d.ts +33 -12
  106. package/dist/components/Forms/ToggleInlineButton.d.ts.map +1 -1
  107. package/dist/components/Forms/ToggleInlineButton.js +56 -6
  108. package/dist/components/Forms/ToggleInlineButton.js.map +1 -1
  109. package/dist/components/Forms/UploadFilesPreview.js +3 -3
  110. package/dist/components/Forms/UploadFilesPreview.js.map +1 -1
  111. package/dist/components/Forms/field-typing.test-d.d.ts +2 -0
  112. package/dist/components/Forms/field-typing.test-d.d.ts.map +1 -0
  113. package/dist/components/Forms/field-typing.test-d.js +24 -0
  114. package/dist/components/Forms/field-typing.test-d.js.map +1 -0
  115. package/dist/components/Forms/useFieldController.d.ts +85 -0
  116. package/dist/components/Forms/useFieldController.d.ts.map +1 -0
  117. package/dist/components/Forms/useFieldController.js +54 -0
  118. package/dist/components/Forms/useFieldController.js.map +1 -0
  119. package/dist/components/Loaders/Loading.d.ts.map +1 -1
  120. package/dist/components/Loaders/Loading.js +3 -2
  121. package/dist/components/Loaders/Loading.js.map +1 -1
  122. package/dist/components/Tables/ActionColumn.d.ts +20 -4
  123. package/dist/components/Tables/ActionColumn.d.ts.map +1 -1
  124. package/dist/components/Tables/ActionColumn.js +24 -5
  125. package/dist/components/Tables/ActionColumn.js.map +1 -1
  126. package/dist/components/Tables/FilterPannel.d.ts +9 -2
  127. package/dist/components/Tables/FilterPannel.d.ts.map +1 -1
  128. package/dist/components/Tables/FilterPannel.js +15 -11
  129. package/dist/components/Tables/FilterPannel.js.map +1 -1
  130. package/dist/components/Tables/IndexColumn.d.ts +12 -3
  131. package/dist/components/Tables/IndexColumn.d.ts.map +1 -1
  132. package/dist/components/Tables/IndexColumn.js +21 -5
  133. package/dist/components/Tables/IndexColumn.js.map +1 -1
  134. package/dist/components/Tables/MantisDataTable.d.ts +45 -0
  135. package/dist/components/Tables/MantisDataTable.d.ts.map +1 -0
  136. package/dist/components/Tables/MantisDataTable.js +63 -0
  137. package/dist/components/Tables/MantisDataTable.js.map +1 -0
  138. package/dist/components/Tables/MenuButton.d.ts +28 -7
  139. package/dist/components/Tables/MenuButton.d.ts.map +1 -1
  140. package/dist/components/Tables/MenuButton.js +20 -10
  141. package/dist/components/Tables/MenuButton.js.map +1 -1
  142. package/dist/components/Tables/PaginatedTable.d.ts +26 -17
  143. package/dist/components/Tables/PaginatedTable.d.ts.map +1 -1
  144. package/dist/components/Tables/PaginatedTable.js +24 -22
  145. package/dist/components/Tables/PaginatedTable.js.map +1 -1
  146. package/dist/components/Tables/cell-presets.d.ts +35 -0
  147. package/dist/components/Tables/cell-presets.d.ts.map +1 -0
  148. package/dist/components/Tables/cell-presets.js +40 -0
  149. package/dist/components/Tables/cell-presets.js.map +1 -0
  150. package/dist/components/Tables/columns.d.ts +40 -0
  151. package/dist/components/Tables/columns.d.ts.map +1 -0
  152. package/dist/components/Tables/columns.js +2 -0
  153. package/dist/components/Tables/columns.js.map +1 -0
  154. package/dist/components/Tables/filters/MultiSelectFilter.d.ts +24 -6
  155. package/dist/components/Tables/filters/MultiSelectFilter.d.ts.map +1 -1
  156. package/dist/components/Tables/filters/MultiSelectFilter.js +19 -6
  157. package/dist/components/Tables/filters/MultiSelectFilter.js.map +1 -1
  158. package/dist/components/auth/ChangePasswordForm.d.ts.map +1 -1
  159. package/dist/components/auth/ChangePasswordForm.js +12 -12
  160. package/dist/components/auth/ChangePasswordForm.js.map +1 -1
  161. package/dist/components/auth/ForgotPasswordForm.d.ts.map +1 -1
  162. package/dist/components/auth/ForgotPasswordForm.js +7 -5
  163. package/dist/components/auth/ForgotPasswordForm.js.map +1 -1
  164. package/dist/components/auth/LoginForm.d.ts +2 -2
  165. package/dist/components/auth/LoginForm.d.ts.map +1 -1
  166. package/dist/components/auth/LoginForm.js +15 -15
  167. package/dist/components/auth/LoginForm.js.map +1 -1
  168. package/dist/components/auth/ResetPasswordForm.d.ts.map +1 -1
  169. package/dist/components/auth/ResetPasswordForm.js +11 -12
  170. package/dist/components/auth/ResetPasswordForm.js.map +1 -1
  171. package/dist/components/auth/UserMenu.d.ts +11 -1
  172. package/dist/components/auth/UserMenu.d.ts.map +1 -1
  173. package/dist/components/auth/UserMenu.js +30 -87
  174. package/dist/components/auth/UserMenu.js.map +1 -1
  175. package/dist/components/data/Timeline.d.ts +2 -2
  176. package/dist/components/data/Timeline.d.ts.map +1 -1
  177. package/dist/components/data/Timeline.js +17 -17
  178. package/dist/components/data/Timeline.js.map +1 -1
  179. package/dist/components/feedback/Avatar.d.ts +4 -2
  180. package/dist/components/feedback/Avatar.d.ts.map +1 -1
  181. package/dist/components/feedback/Avatar.js +4 -4
  182. package/dist/components/feedback/Avatar.js.map +1 -1
  183. package/dist/components/feedback/CardSkeleton.d.ts.map +1 -1
  184. package/dist/components/feedback/CardSkeleton.js +3 -3
  185. package/dist/components/feedback/CardSkeleton.js.map +1 -1
  186. package/dist/components/feedback/TableSkeleton.d.ts.map +1 -1
  187. package/dist/components/feedback/TableSkeleton.js +3 -3
  188. package/dist/components/feedback/TableSkeleton.js.map +1 -1
  189. package/dist/components/feedback/Tag.d.ts +4 -2
  190. package/dist/components/feedback/Tag.d.ts.map +1 -1
  191. package/dist/components/feedback/Tag.js +4 -4
  192. package/dist/components/feedback/Tag.js.map +1 -1
  193. package/dist/components/navigation/CommandPalette.d.ts.map +1 -1
  194. package/dist/components/navigation/CommandPalette.js +5 -2
  195. package/dist/components/navigation/CommandPalette.js.map +1 -1
  196. package/dist/components/navigation/PageTabs.d.ts +10 -8
  197. package/dist/components/navigation/PageTabs.d.ts.map +1 -1
  198. package/dist/components/navigation/PageTabs.js +17 -13
  199. package/dist/components/navigation/PageTabs.js.map +1 -1
  200. package/dist/components/overlays/Drawer.d.ts +16 -3
  201. package/dist/components/overlays/Drawer.d.ts.map +1 -1
  202. package/dist/components/overlays/Drawer.js +9 -5
  203. package/dist/components/overlays/Drawer.js.map +1 -1
  204. package/dist/components/overlays/Modal.d.ts +18 -3
  205. package/dist/components/overlays/Modal.d.ts.map +1 -1
  206. package/dist/components/overlays/Modal.js +13 -5
  207. package/dist/components/overlays/Modal.js.map +1 -1
  208. package/dist/components/pages/app-shell/AppShell.d.ts.map +1 -1
  209. package/dist/components/pages/app-shell/AppShell.js +6 -6
  210. package/dist/components/pages/app-shell/AppShell.js.map +1 -1
  211. package/dist/components/ui/ConfirmDialog.d.ts +1 -2
  212. package/dist/components/ui/ConfirmDialog.d.ts.map +1 -1
  213. package/dist/components/ui/ConfirmDialog.js +10 -4
  214. package/dist/components/ui/ConfirmDialog.js.map +1 -1
  215. package/dist/components/ui/DataState.js +2 -2
  216. package/dist/components/ui/DataState.js.map +1 -1
  217. package/dist/index.d.ts +71 -42
  218. package/dist/index.d.ts.map +1 -1
  219. package/dist/index.js +114 -22
  220. package/dist/index.js.map +1 -1
  221. package/docs/README.md +1 -1
  222. package/docs/components/action-column.md +39 -12
  223. package/docs/components/admin-page-configurator.md +42 -0
  224. package/docs/components/admin-page-header.md +32 -16
  225. package/docs/components/admin-page-layout-shell.md +36 -0
  226. package/docs/components/admin-page-layout.md +41 -21
  227. package/docs/components/app-shell.md +45 -0
  228. package/docs/components/auto-complete-field.md +60 -0
  229. package/docs/components/avatar.md +29 -0
  230. package/docs/components/bar-chart.md +39 -0
  231. package/docs/components/breadcrumbs.md +28 -0
  232. package/docs/components/button.md +41 -17
  233. package/docs/components/card-skeleton.md +21 -0
  234. package/docs/components/change-password-form.md +36 -0
  235. package/docs/components/checkbox-field.md +38 -0
  236. package/docs/components/ckeditor-input.md +47 -16
  237. package/docs/components/color-picker-input.md +30 -0
  238. package/docs/components/command-palette.md +38 -0
  239. package/docs/components/confirm-dialog.md +45 -16
  240. package/docs/components/data-state.md +39 -14
  241. package/docs/components/date-field.md +39 -0
  242. package/docs/components/date-presets.md +32 -0
  243. package/docs/components/description-list.md +34 -0
  244. package/docs/components/dirty-form-guard.md +28 -24
  245. package/docs/components/donut-chart.md +38 -0
  246. package/docs/components/drawer.md +38 -0
  247. package/docs/components/empty-state.md +28 -0
  248. package/docs/components/error-boundary.md +31 -0
  249. package/docs/components/error-message.md +29 -8
  250. package/docs/components/field-shell.md +47 -0
  251. package/docs/components/file-dropzone.md +45 -17
  252. package/docs/components/filter-pannel.md +40 -15
  253. package/docs/components/forgot-password-form.md +36 -0
  254. package/docs/components/form-actions-bar.md +47 -17
  255. package/docs/components/form-field-render.md +43 -15
  256. package/docs/components/form-section.md +26 -10
  257. package/docs/components/form-wizard.md +47 -0
  258. package/docs/components/hidden-field.md +27 -14
  259. package/docs/components/index-column.md +31 -8
  260. package/docs/components/line-chart.md +39 -0
  261. package/docs/components/loading.md +23 -12
  262. package/docs/components/login-form.md +47 -0
  263. package/docs/components/mantis-data-table.md +61 -0
  264. package/docs/components/map-picker-client.md +35 -14
  265. package/docs/components/map-picker-osm.md +33 -13
  266. package/docs/components/map-picker.md +34 -16
  267. package/docs/components/mask-field.md +31 -0
  268. package/docs/components/menu-button.md +28 -17
  269. package/docs/components/modal.md +45 -0
  270. package/docs/components/multi-select-filter.md +31 -15
  271. package/docs/components/number-field.md +40 -0
  272. package/docs/components/otp-input.md +31 -0
  273. package/docs/components/page-tabs.md +35 -0
  274. package/docs/components/page-title.md +15 -8
  275. package/docs/components/paginated-table.md +42 -26
  276. package/docs/components/pagination.md +28 -18
  277. package/docs/components/password-input.md +31 -0
  278. package/docs/components/phone-input.md +28 -0
  279. package/docs/components/radio-group.md +50 -0
  280. package/docs/components/range-slider.md +32 -0
  281. package/docs/components/rating-input.md +30 -0
  282. package/docs/components/render-field.md +41 -18
  283. package/docs/components/reset-password-form.md +37 -0
  284. package/docs/components/rich-text-preview.md +26 -13
  285. package/docs/components/search-input.md +30 -0
  286. package/docs/components/select-field.md +55 -0
  287. package/docs/components/stat-card.md +30 -0
  288. package/docs/components/status-badge.md +25 -9
  289. package/docs/components/switch-field.md +32 -0
  290. package/docs/components/table-filter-field.md +30 -16
  291. package/docs/components/table-skeleton.md +22 -0
  292. package/docs/components/table-toolbar.md +28 -14
  293. package/docs/components/tag.md +27 -0
  294. package/docs/components/tags-input.md +32 -0
  295. package/docs/components/text-area.md +25 -15
  296. package/docs/components/text-field.md +32 -0
  297. package/docs/components/timeline.md +31 -0
  298. package/docs/components/toggle-inline-button.md +48 -17
  299. package/docs/components/upload-files-preview.md +39 -20
  300. package/docs/components/use-field-controller.md +58 -0
  301. package/docs/components/user-menu.md +39 -0
  302. package/docs/contracts/STORYBOOK_IMPLEMENTATION_AND_VOBO.md +92 -0
  303. package/docs/contracts/STORYBOOK_VOBO_LEDGER.md +195 -0
  304. package/docs/contracts/component-doc-schema.md +120 -0
  305. package/docs/contracts/dependency-map.md +76 -39
  306. package/docs/contracts/field-controller.md +138 -0
  307. package/docs/contracts/style-imports.md +21 -14
  308. package/llms.txt +104 -0
  309. package/package.json +39 -10
  310. package/PRIMEREACT_MAPPING.md +0 -6
  311. package/dist/components/Forms/AsyncSelect.d.ts +0 -20
  312. package/dist/components/Forms/AsyncSelect.d.ts.map +0 -1
  313. package/dist/components/Forms/AsyncSelect.js +0 -77
  314. package/dist/components/Forms/AsyncSelect.js.map +0 -1
  315. package/dist/components/Forms/Combobox.d.ts +0 -10
  316. package/dist/components/Forms/Combobox.d.ts.map +0 -1
  317. package/dist/components/Forms/Combobox.js +0 -11
  318. package/dist/components/Forms/Combobox.js.map +0 -1
  319. package/dist/components/Forms/CurrencyInput.d.ts +0 -12
  320. package/dist/components/Forms/CurrencyInput.d.ts.map +0 -1
  321. package/dist/components/Forms/CurrencyInput.js +0 -9
  322. package/dist/components/Forms/CurrencyInput.js.map +0 -1
  323. package/dist/components/Forms/DateInput.d.ts +0 -10
  324. package/dist/components/Forms/DateInput.d.ts.map +0 -1
  325. package/dist/components/Forms/DateInput.js +0 -11
  326. package/dist/components/Forms/DateInput.js.map +0 -1
  327. package/dist/components/Forms/DateRangeInput.d.ts +0 -10
  328. package/dist/components/Forms/DateRangeInput.d.ts.map +0 -1
  329. package/dist/components/Forms/DateRangeInput.js +0 -13
  330. package/dist/components/Forms/DateRangeInput.js.map +0 -1
  331. package/dist/components/Forms/DropDown.d.ts +0 -10
  332. package/dist/components/Forms/DropDown.d.ts.map +0 -1
  333. package/dist/components/Forms/DropDown.js +0 -11
  334. package/dist/components/Forms/DropDown.js.map +0 -1
  335. package/dist/components/Forms/MultiSelect.d.ts +0 -10
  336. package/dist/components/Forms/MultiSelect.d.ts.map +0 -1
  337. package/dist/components/Forms/MultiSelect.js +0 -13
  338. package/dist/components/Forms/MultiSelect.js.map +0 -1
  339. package/dist/components/Forms/NumberInput.d.ts +0 -10
  340. package/dist/components/Forms/NumberInput.d.ts.map +0 -1
  341. package/dist/components/Forms/NumberInput.js +0 -16
  342. package/dist/components/Forms/NumberInput.js.map +0 -1
  343. package/dist/components/Forms/Select.d.ts +0 -15
  344. package/dist/components/Forms/Select.d.ts.map +0 -1
  345. package/dist/components/Forms/Select.js +0 -48
  346. package/dist/components/Forms/Select.js.map +0 -1
  347. package/dist/components/Forms/Switch.d.ts +0 -18
  348. package/dist/components/Forms/Switch.d.ts.map +0 -1
  349. package/dist/components/Forms/Switch.js +0 -30
  350. package/dist/components/Forms/Switch.js.map +0 -1
  351. package/dist/components/Forms/TextInput.d.ts +0 -11
  352. package/dist/components/Forms/TextInput.d.ts.map +0 -1
  353. package/dist/components/Forms/TextInput.js +0 -12
  354. package/dist/components/Forms/TextInput.js.map +0 -1
  355. package/dist/components/Forms/TimePicker.d.ts +0 -13
  356. package/dist/components/Forms/TimePicker.d.ts.map +0 -1
  357. package/dist/components/Forms/TimePicker.js +0 -19
  358. package/dist/components/Forms/TimePicker.js.map +0 -1
  359. package/dist/components/Forms/Toggle.d.ts +0 -14
  360. package/dist/components/Forms/Toggle.d.ts.map +0 -1
  361. package/dist/components/Forms/Toggle.js +0 -10
  362. package/dist/components/Forms/Toggle.js.map +0 -1
  363. package/dist/components/Forms/types.d.ts +0 -9
  364. package/dist/components/Forms/types.d.ts.map +0 -1
  365. package/dist/components/Forms/types.js +0 -2
  366. package/dist/components/Forms/types.js.map +0 -1
  367. package/docs/components/async-select.md +0 -26
  368. package/docs/components/date-input.md +0 -22
  369. package/docs/components/drop-down.md +0 -28
  370. package/docs/components/multi-select.md +0 -23
  371. package/docs/components/number-input.md +0 -20
  372. package/docs/components/select.md +0 -28
  373. package/docs/components/switch.md +0 -27
  374. package/docs/components/text-input.md +0 -23
  375. package/docs/components/time-picker.md +0 -22
  376. package/docs/components/toggle.md +0 -21
  377. package/docs/contracts/controller-props.md +0 -28
@@ -1,21 +1,50 @@
1
- # ConfirmDialog
2
-
3
- - Export: `ConfirmDialog`
4
- - Extra exports: `ConfirmDialogProps`, `ConfirmDialogSeverity`
5
- - Import: `import { ConfirmDialog } from "@mantis-core/ui";`
6
- - Base library: `primereact/dialog`
7
- - Base typing: explicit `ConfirmDialogProps`
8
- - Required styles: `@mantis-core/styles/scss/confirm-dialog.scss`
1
+ ---
2
+ name: ConfirmDialog
3
+ category: feedback
4
+ import: '@mantis-core/ui/components/ui/ConfirmDialog'
5
+ whenToUse: Confirm/cancel dialog for destructive or non-trivial actions; composed from the migrated Modal + Button.
6
+ baseLibrary: custom
7
+ requiredStyles: [scss/confirm-dialog.scss]
8
+ relatedComponents: ['Modal', 'Button']
9
+ relatedNextCore: []
10
+ props:
11
+ - { name: visible, type: boolean, required: true }
12
+ - { name: onConfirm, type: '() => void | Promise<void>', required: true }
13
+ - { name: onCancel, type: '() => void', required: true }
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 }
23
+ ---
9
24
 
10
25
  ## Example
11
26
 
12
27
  ```tsx
13
- <ConfirmDialog
14
- visible={open}
15
- title="Delete listing"
16
- message="This action cannot be undone."
17
- confirmSeverity="danger"
18
- onConfirm={handleDelete}
19
- onCancel={() => setOpen(false)}
20
- />
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
+ }
21
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.
@@ -1,19 +1,44 @@
1
- # DataState
2
-
3
- - Export: `DataState`
4
- - Extra exports: `DataStateProps`, `DataStateStatus`
5
- - Import: `import { DataState } from "@mantis-core/ui";`
6
- - Base library: custom state wrapper + `Button`
7
- - Base typing: explicit `DataStateProps`
8
- - Required styles: `@mantis-core/styles/scss/data-state.scss`
1
+ ---
2
+ name: DataState
3
+ category: feedback
4
+ import: '@mantis-core/ui/components/ui/DataState'
5
+ whenToUse: Loading/empty/error/ready placeholder for data-fetching views; renders `children` unchanged when `status="ready"`, otherwise a titled state panel.
6
+ baseLibrary: custom
7
+ requiredStyles: [scss/data-state.scss]
8
+ relatedComponents: ['StatusBadge', 'Loading']
9
+ relatedNextCore: []
10
+ props:
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'" }
25
+ ---
9
26
 
10
27
  ## Example
11
28
 
12
29
  ```tsx
13
- <DataState
14
- status={query.isError ? "error" : query.isLoading ? "loading" : rows.length === 0 ? "empty" : "ready"}
15
- onRetry={() => query.refetch()}
16
- >
17
- <PaginatedTable value={rows}>{/* columns */}</PaginatedTable>
18
- </DataState>
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.
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: DatePresets
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/DatePresets'
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']
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: onChange, type: '(range: [Date, Date]) => void', required: true }
11
+ - { name: presets, type: '{ label: string; resolve: () => [Date, Date] }[]', required: false, description: 'Defaults to Today / 7 días / 30 días / Este mes.' }
12
+ - { name: className, type: string, required: false }
13
+ - { name: disabled, type: boolean, required: false }
14
+ ---
15
+
16
+ ## Example
17
+
18
+ ```tsx
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
+ }
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.
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: DescriptionList
3
+ category: data
4
+ import: '@mantis-core/ui/components/data/DescriptionList'
5
+ whenToUse: Grid-based label/value list for detail views; supports 1, 2, or 3 columns.
6
+ baseLibrary: custom
7
+ relatedComponents: ['StatCard']
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: items, type: '{ label: string; value: ReactNode }[]', required: true }
11
+ - { name: columns, type: '1 | 2 | 3', required: false, default: '1' }
12
+ ---
13
+
14
+ ## Example
15
+
16
+ ```tsx
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
+ }
30
+ ```
31
+
32
+ ## Notes
33
+
34
+ - Not re-exported from the package root — import the deep path shown above.
@@ -1,31 +1,35 @@
1
- # DirtyFormGuard and useDirtyFormGuard
2
-
3
- - Exports: `DirtyFormGuard`, `useDirtyFormGuard`
4
- - Extra exports: `DirtyFormGuardProps`, `UseDirtyFormGuardOptions`, `UseDirtyFormGuardResult`
5
- - Base library: browser `beforeunload` + `window.confirm`
6
- - Required styles: none
7
-
8
- ## Component example
9
-
10
- ```tsx
11
- <DirtyFormGuard
12
- isDirty={form.formState.isDirty}
13
- message="You have unsaved changes."
14
- />
15
- ```
16
-
17
- ## Hook example
1
+ ---
2
+ name: DirtyFormGuard
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/DirtyFormGuard'
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
+ baseLibrary: custom
7
+ relatedComponents: [FormActionsBar]
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: isDirty, type: boolean, required: true, description: 'Pass formState.isDirty from react-hook-form' }
11
+ - { name: enabled, type: boolean, required: false, default: 'true', description: 'Set to false to temporarily disable the guard' }
12
+ - { name: message, type: string, required: false, description: 'Custom confirmation message shown to the user' }
13
+ ---
14
+
15
+ ## Example
18
16
 
19
17
  ```tsx
20
- const guard = useDirtyFormGuard({
21
- isDirty: form.formState.isDirty,
22
- message: "Leave without saving?",
23
- });
18
+ import DirtyFormGuard from '@mantis-core/ui/components/Forms/DirtyFormGuard';
19
+ import { useForm } from 'react-hook-form';
24
20
 
25
- void guard.confirmIfDirty(async () => router.push("/admin"));
21
+ function Example() {
22
+ const { formState } = useForm({ defaultValues: { name: '' } });
23
+ return <DirtyFormGuard isDirty={formState.isDirty} />;
24
+ }
26
25
  ```
27
26
 
28
27
  ## Notes
29
28
 
30
- - Use the component for declarative page guards.
31
- - 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.
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: DonutChart
3
+ category: charts
4
+ import: '@mantis-core/ui/components/charts/DonutChart'
5
+ whenToUse: Part-to-whole breakdown rendered as a doughnut chart, zero-config over chart.js defaults.
6
+ baseLibrary: chart.js
7
+ requiredStyles: []
8
+ relatedComponents: [LineChart, BarChart]
9
+ relatedNextCore: []
10
+ props:
11
+ - { name: labels, type: 'string[]', required: true }
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.' }
16
+ - { name: className, type: string, required: false }
17
+ ---
18
+
19
+ ## Example
20
+
21
+ ```tsx
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
+ }
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).
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: Drawer
3
+ category: overlays
4
+ import: '@mantis-core/ui/components/overlays/Drawer'
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']
8
+ relatedNextCore: []
9
+ props:
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 }
17
+ ---
18
+
19
+ ## Example
20
+
21
+ ```tsx
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
+ }
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.
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: EmptyState
3
+ category: feedback
4
+ import: '@mantis-core/ui/components/feedback/EmptyState'
5
+ whenToUse: Centered empty-state placeholder with icon, title, optional description, and action button.
6
+ baseLibrary: custom
7
+ relatedComponents: ['DataState']
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: title, type: ReactNode, required: true }
11
+ - { name: icon, type: ReactNode, required: false }
12
+ - { name: description, type: ReactNode, required: false }
13
+ - { name: action, type: ReactNode, required: false }
14
+ ---
15
+
16
+ ## Example
17
+
18
+ ```tsx
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
+ }
24
+ ```
25
+
26
+ ## Notes
27
+
28
+ - Not re-exported from the package root — import the deep path shown above.
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: ErrorBoundary
3
+ category: feedback
4
+ import: '@mantis-core/ui/components/feedback/ErrorBoundary'
5
+ whenToUse: React class error boundary; renders fallback UI on uncaught render errors in its children.
6
+ baseLibrary: custom
7
+ relatedNextCore: []
8
+ props:
9
+ - { name: children, type: ReactNode, required: true }
10
+ - { name: fallback, type: 'ReactNode | ((error: Error) => ReactNode)', required: false }
11
+ - { name: onError, type: '(error: Error, info: ErrorInfo) => void', required: false }
12
+ ---
13
+
14
+ ## Example
15
+
16
+ ```tsx
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
+ }
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.
@@ -1,13 +1,34 @@
1
- # ErrorMessage
2
-
3
- - Export: `ErrorMessage`
4
- - Import: `import { ErrorMessage } from "@mantis-core/ui";`
5
- - Base library: `@hookform/error-message`
6
- - Base typing: wrapper export around hook-form error rendering
7
- - Required styles: none
1
+ ---
2
+ name: ErrorMessage
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/ErrorMessage'
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
+ baseLibrary: '@hookform/error-message'
7
+ relatedComponents: ['FormFieldRender']
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: name, type: string, required: true, description: 'The RHF field name to read the error for.' }
11
+ ---
8
12
 
9
13
  ## Example
10
14
 
11
15
  ```tsx
12
- <ErrorMessage errors={form.formState.errors} name="title" />
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
+ }
13
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.
@@ -1,25 +1,53 @@
1
- # FileDropzone
2
-
3
- - Export: `FileDropzone`
4
- - Extra exports: `FileDropzoneProps`, `FileDropzoneRejectedFile`, `FileDropzoneRejectCode`
5
- - Import: `import { FileDropzone } from "@mantis-core/ui";`
6
- - Base library: custom drag-and-drop file input
7
- - Base typing: explicit `FileDropzoneProps`
8
- - Required styles: `@mantis-core/styles/scss/file-dropzone.scss`
1
+ ---
2
+ name: FileDropzone
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/FileDropzone'
5
+ whenToUse: Drag-and-drop file input with validation (type, size, count); supports a react-hook-form binding or plain controlled value/onChange.
6
+ baseLibrary: custom
7
+ requiredStyles: [scss/file-dropzone.scss]
8
+ relatedComponents: [UploadFilesPreview]
9
+ relatedNextCore: []
10
+ props:
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
+ - { name: onChange, type: '(files: File[]) => void', required: false, description: 'Change handler (plain mode)' }
14
+ - { name: onFilesAccepted, type: '(files: File[]) => void', required: false, description: 'Called with accepted files after drop' }
15
+ - { name: onFilesRejected, type: '(rejections: FileDropzoneRejectedFile[]) => void', required: false, description: 'Called with rejected files after drop' }
16
+ - { name: multiple, type: boolean, required: false, default: 'true', description: 'Allow multiple files' }
17
+ - { name: maxFiles, type: number, required: false, default: '10', description: 'Maximum number of files' }
18
+ - { name: maxSizeBytes, type: number, required: false, default: '10485760', description: 'Max file size in bytes (default 10 MB)' }
19
+ - { name: accept, type: 'string | string[]', required: false, description: 'Accepted MIME types or extensions' }
20
+ - { name: disabled, type: boolean, required: false, default: 'false', description: 'Disable the dropzone' }
21
+ - { name: block, type: boolean, required: false, default: 'true', description: 'Full-width layout' }
22
+ - { name: label, type: string, required: false, description: 'Optional label above the zone' }
23
+ - { name: hint, type: string, required: false, description: 'Hint text inside the zone' }
24
+ - { name: dropTitle, type: string, required: false, description: 'Title text when idle' }
25
+ - { name: dragOverTitle, type: string, required: false, description: 'Title text while dragging over' }
26
+ - { name: className, type: string, required: false, description: 'Additional CSS class on the root element' }
27
+ ---
9
28
 
10
29
  ## Example
11
30
 
12
31
  ```tsx
13
- <FileDropzone
14
- controller={{ name: "attachments", control: form.control, defaultValue: [] }}
15
- accept={["image/*", ".pdf"]}
16
- maxFiles={5}
17
- maxSizeBytes={5 * 1024 * 1024}
18
- label="Attachments"
19
- />
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
+ }
20
45
  ```
21
46
 
22
47
  ## Notes
23
48
 
24
- - Supports both `react-hook-form` mode and plain controlled mode with `value` and `onChange`.
25
- - 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`.