@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,29 +1,49 @@
1
- # Admin Page Layout
2
-
3
- - Exports:
4
- - `AdminPageLayoutProvider`
5
- - `useAdminPageLayout`
6
- - `AdminPageConfigurator`
7
- - `AdminPageLayoutShell`
8
- - `AdminBreadcrumbItem`
9
- - `AdminPageLayoutConfig`
10
- - Import: `import { AdminPageLayoutProvider, AdminPageConfigurator, AdminPageLayoutShell } from "@mantis-core/ui";`
11
- - Base library: React context + custom shell
12
- - Required styles: none
1
+ ---
2
+ name: AdminPageLayout
3
+ category: pages
4
+ whenToUse: Overview of the admin page layout system — a context Provider plus a Configurator and a Shell that together compose admin pages without prop-drilling page title/description/breadcrumbs/actions.
5
+ baseLibrary: React context + custom shell
6
+ relatedComponents: ['AdminPageConfigurator', 'AdminPageLayoutShell', 'AdminPageHeader']
7
+ relatedNextCore: []
8
+ props: []
9
+ ---
13
10
 
14
11
  ## Example
15
12
 
16
13
  ```tsx
17
- <AdminPageLayoutProvider>
18
- <AdminPageLayoutShell>
19
- <AdminPageConfigurator config={{ title: "Leads" }}>
20
- <LeadsTable />
21
- </AdminPageConfigurator>
22
- </AdminPageLayoutShell>
23
- </AdminPageLayoutProvider>
14
+ import {
15
+ AdminPageLayoutProvider,
16
+ AdminPageConfigurator,
17
+ AdminPageLayoutShell,
18
+ } from '@mantis-core/ui';
19
+
20
+ function Example() {
21
+ return (
22
+ <AdminPageLayoutProvider>
23
+ <AdminPageConfigurator
24
+ config={{
25
+ title: 'Properties',
26
+ breadcrumbs: [{ label: 'Home', href: '/' }, { label: 'Properties' }],
27
+ }}>
28
+ <AdminPageLayoutShell>
29
+ <div>Page content</div>
30
+ </AdminPageLayoutShell>
31
+ </AdminPageConfigurator>
32
+ </AdminPageLayoutProvider>
33
+ );
34
+ }
24
35
  ```
25
36
 
26
37
  ## Notes
27
38
 
28
- - `useAdminPageLayout` must run inside `AdminPageLayoutProvider`.
29
- - `AdminPageLayoutShell` renders `AdminPageHeader` when `config.title` exists and `hideHeader` is not set.
39
+ > Overview doc each export below has its own entry with the full prop list.
40
+
41
+ - `AdminPageLayoutProvider` (root layout, once) holds the current `AdminPageLayoutConfig` in
42
+ context; `useAdminPageLayout()` reads/writes it and throws if called outside the provider.
43
+ - `AdminPageConfigurator` (per page) pushes its `config` into context via `useEffect` — it renders
44
+ no markup of its own, just `children`.
45
+ - `AdminPageLayoutShell` (root layout, once, inside the Provider) reads the context config and
46
+ renders `AdminPageHeader` when `config.title` is set and `config.hideHeader` is not, then renders
47
+ `children` below it.
48
+ - All four names (`AdminPageLayoutProvider`, `useAdminPageLayout`, `AdminPageConfigurator`,
49
+ `AdminPageLayoutShell`) are re-exported from the `@mantis-core/ui` package root.
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: AppShell
3
+ category: pages
4
+ import: '@mantis-core/ui/components/pages/app-shell/AppShell'
5
+ whenToUse: Full-page app shell with responsive sidebar nav, topbar, and mobile drawer; use as the root layout wrapper for authenticated pages.
6
+ baseLibrary: custom
7
+ relatedComponents: ['Drawer', 'Breadcrumbs']
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: navItems, type: 'AppNavItem[]', required: true, description: 'Each item: { label, href?, icon?, children? }. Items with children render as a collapsible group.' }
11
+ - { name: children, type: ReactNode, required: true }
12
+ - { name: brand, type: ReactNode, required: false, description: 'Logo/name slot rendered in the sidebar header and mobile topbar.' }
13
+ - { name: topbarActions, type: ReactNode, required: false }
14
+ - { name: user, type: ReactNode, required: false, description: 'Rendered at the end of the topbar.' }
15
+ - { name: footer, type: ReactNode, required: false, description: 'Rendered at the bottom of the sidebar and mobile drawer.' }
16
+ - { name: collapsible, type: boolean, required: false, default: false, description: 'Enables a toggle button to collapse the desktop sidebar to icons-only.' }
17
+ - { name: defaultCollapsed, type: boolean, required: false, default: false }
18
+ ---
19
+
20
+ ## Example
21
+
22
+ ```tsx
23
+ import AppShell from '@mantis-core/ui/components/pages/app-shell/AppShell';
24
+
25
+ function Example() {
26
+ return (
27
+ <AppShell
28
+ navItems={[
29
+ { label: 'Dashboard', href: '/admin' },
30
+ { label: 'Properties', href: '/admin/properties' },
31
+ ]}
32
+ brand={<span>Atlas</span>}>
33
+ <div>Page content</div>
34
+ </AppShell>
35
+ );
36
+ }
37
+ ```
38
+
39
+ ## Notes
40
+
41
+ - Requires Next.js App Router (`usePathname` drives active-link highlighting; nav item `href` links
42
+ render as `next/link`, items without `href` render as a `<button>`).
43
+ - Mobile nav is a left-side PR11 `Drawer` toggled by a hamburger button that only shows below the
44
+ `lg` breakpoint; the desktop `<aside>` sidebar is hidden below that breakpoint instead.
45
+ - `collapsible` only affects the desktop sidebar; the mobile drawer always renders expanded.
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: AutoCompleteField
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/AutoCompleteField'
5
+ whenToUse: Async (or sync) autocomplete text field wired to react-hook-form via `loadOptions`, with optional free-text `creatable` mode. Absorbs the former AsyncSelect + Combobox.
6
+ baseLibrary: '@primereact/ui/autocomplete'
7
+ formContract: FieldControllerProps
8
+ relatedComponents: ['SelectField', 'RadioGroup']
9
+ relatedNextCore: []
10
+ props:
11
+ - { name: loadOptions, type: '(query: string) => Promise<readonly Record<string, unknown>[]> | readonly Record<string, unknown>[]', required: true, description: 'Called on each query change (PR11 debounces via delay/minLength internally); replaces the old hand-rolled AsyncSelect debounce.' }
12
+ - { name: creatable, type: boolean, required: false, default: 'false', description: 'Allow committing free text matching no option; typed text commits on each keystroke instead of being cleared on blur.' }
13
+ - { name: optionLabel, type: string, required: false, default: '''label''', description: 'Key read for each option''s display label.' }
14
+ - { name: optionValue, type: string, required: false, description: 'Key read for each option''s bound scalar value.' }
15
+ - { name: placeholder, type: string, required: false }
16
+ - { name: optionTemplate, type: "'default' | 'twoLine'", required: false, default: '''default''', description: 'Named per-option render preset; ''twoLine'' adds a second line from `descriptionField`.' }
17
+ - { name: descriptionField, type: string, required: false, description: 'Row key for the second line when optionTemplate is ''twoLine''.' }
18
+ - { name: renderOption, type: '(option: Record<string, unknown>, index: number) => ReactNode', required: false, description: 'Escape hatch: full custom per-option render, overrides optionTemplate.' }
19
+ - { name: className, type: string, required: false }
20
+ ---
21
+
22
+ ## Example
23
+
24
+ ```tsx
25
+ import { AutoCompleteField } from '@mantis-core/ui/components/Forms/AutoCompleteField';
26
+ import { useForm } from 'react-hook-form';
27
+
28
+ const CITIES = [
29
+ { label: 'Quito', value: 'UIO' },
30
+ { label: 'Cuenca', value: 'CUE' },
31
+ ];
32
+
33
+ async function searchCities(query: string) {
34
+ return CITIES.filter((c) => c.label.toLowerCase().includes(query.toLowerCase()));
35
+ }
36
+
37
+ function Example() {
38
+ const { control } = useForm({ defaultValues: { city: null } });
39
+ return (
40
+ <AutoCompleteField
41
+ name='city'
42
+ control={control}
43
+ label='City'
44
+ optionLabel='label'
45
+ optionValue='value'
46
+ loadOptions={searchCities}
47
+ />
48
+ );
49
+ }
50
+ ```
51
+
52
+ ## Notes
53
+
54
+ - Value shape: selecting a listed option commits its scalar `optionValue`. In `creatable` mode, typed
55
+ free text that matches no option is committed as-is; with `creatable` off (default), PR11's
56
+ `forceSelection` clears unmatched text to `null` on blur.
57
+ - Async responses are guarded against out-of-order replies: a slower, stale `loadOptions` call is
58
+ dropped if a newer query has since started.
59
+ - The visible input is real (`AutoComplete.Input as={InputText}`), so PR11 emits `aria-invalid`
60
+ itself — no manual aria wiring like the portal-trigger components.
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: Avatar
3
+ category: feedback
4
+ import: '@mantis-core/ui/components/feedback/Avatar'
5
+ whenToUse: User avatar that renders an image or auto-derived initials; composes the PR11 headless Avatar (Root/Image/Fallback).
6
+ baseLibrary: '@primereact/ui/avatar'
7
+ relatedComponents: ['Tag', 'UserMenu']
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: name, type: string, required: false, description: 'Derives initials (first + last word) when no image/label is given.' }
11
+ - { name: image, type: string, required: false, description: 'Image source; when set, no fallback initials render.' }
12
+ - { name: label, type: string, required: false, description: 'Overrides the name-derived initials.' }
13
+ - { name: size, type: "'normal' | 'large' | 'xlarge'", required: false, default: "'normal'" }
14
+ - { name: shape, type: "'circle' | 'square'", required: false, default: "'square'" }
15
+ ---
16
+
17
+ ## Example
18
+
19
+ ```tsx
20
+ import Avatar from '@mantis-core/ui/components/feedback/Avatar';
21
+
22
+ function Example() {
23
+ return <Avatar name='Diego Condo' size='large' shape='circle' />;
24
+ }
25
+ ```
26
+
27
+ ## Notes
28
+
29
+ - PR11's `Avatar.Root` dropped the PR10 `label`/`image` props; the wrapper composes `Root`/`Image`/`Fallback` manually while keeping the old public API.
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: BarChart
3
+ category: charts
4
+ import: '@mantis-core/ui/components/charts/BarChart'
5
+ whenToUse: Categorical comparisons rendered as a bar chart, zero-config over chart.js defaults.
6
+ baseLibrary: chart.js
7
+ requiredStyles: []
8
+ relatedComponents: [LineChart, DonutChart]
9
+ relatedNextCore: []
10
+ props:
11
+ - { name: labels, type: 'string[]', required: true }
12
+ - { name: datasets, type: 'BarChartDataset[]', required: true, description: 'ChartDataset<''bar''> minus ''data'', plus data: number[].' }
13
+ - { name: options, type: 'ChartOptions<''bar''>', required: false, description: 'Deep-merged over defaultBarOptions (plugins/scales merge shallowly one level).' }
14
+ - { name: colors, type: 'string[]', required: false, default: 'DEFAULT_COLORS (8-color palette)', description: 'Applied per-dataset (cycled by index) to datasets that don''t specify their 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 BarChart from '@mantis-core/ui/components/charts/BarChart';
23
+
24
+ function Example() {
25
+ return (
26
+ <BarChart
27
+ labels={['Q1', 'Q2', 'Q3']}
28
+ datasets={[{ label: 'Sales', data: [40, 70, 55] }]}
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/BarChart`), not `@mantis-core/ui`.
37
+ - Calls `registerCharts()` (module-level, from `./chart-setup`) on import to register the chart.js
38
+ controllers/elements/plugins it needs — no separate `Chart.register(...)` call required by callers.
39
+ - Wraps `react-chartjs-2`'s `Bar`; any prop `Bar` accepts besides `data`/`options` passes through via `...rest`.
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: Breadcrumbs
3
+ category: pages
4
+ import: '@mantis-core/ui/components/pages/app-shell/Breadcrumbs'
5
+ whenToUse: Standalone breadcrumb nav; renders nothing when items is empty.
6
+ baseLibrary: custom
7
+ relatedComponents: ['AdminPageHeader']
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: items, type: 'readonly AdminBreadcrumbItem[]', required: true, description: 'Each item: { label, href? }. The last item never links even if it has an href.' }
11
+ ---
12
+
13
+ ## Example
14
+
15
+ ```tsx
16
+ import Breadcrumbs from '@mantis-core/ui/components/pages/app-shell/Breadcrumbs';
17
+
18
+ function Example() {
19
+ return <Breadcrumbs items={[{ label: 'Home', href: '/' }, { label: 'Settings' }]} />;
20
+ }
21
+ ```
22
+
23
+ ## Notes
24
+
25
+ - Links use `next/link`; the last (current) item always renders as plain text, styled with the
26
+ primary color, regardless of whether it has an `href`.
27
+ - `AdminPageHeader` renders this internally for its own `breadcrumbs` prop — most admin pages
28
+ configure breadcrumbs through `AdminPageConfigurator` rather than rendering this directly.
@@ -1,25 +1,49 @@
1
- # Button
2
-
3
- - Export: `Button`
4
- - Import: `import { Button } from "@mantis-core/ui";`
5
- - Base library: `primereact/button`
6
- - Base typing: `Omit<PrimeButtonProps, "onClick" | "ref">` plus `href`, `variant`, `block`, `sm`, `lg`, `outlined`, `text`, `rounded`
7
- - Required styles: `@mantis-core/styles/scss/buttons.scss`
1
+ ---
2
+ name: Button
3
+ category: buttons
4
+ import: '@mantis-core/ui/components/Buttons/Button'
5
+ whenToUse: Primary action button; wraps PR11's `@primereact/ui/button`, mapping the Mantis semantic `variant` to PR11 `severity` and restoring the `label`/`icon`/`loading` affordances PR11 dropped. Supports `href` for Next.js client navigation.
6
+ baseLibrary: '@primereact/ui/button'
7
+ relatedComponents: ['ConfirmDialog', 'DataState']
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: variant, type: "'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info' | 'gray' | 'danger'", required: false, default: "'primary'", description: 'Maps to PR11 `severity`: `primary` = PR11 default (no severity), `gray`→`contrast`, `warning`→`warn`, `error`/`danger`→`danger`.' }
11
+ - { name: outlined, type: boolean, required: false, default: 'false', description: 'PR11 `variant="outlined"`.' }
12
+ - { name: text, type: boolean, required: false, default: 'false', description: 'PR11 `variant="text"`; wins over `outlined` when both are set.' }
13
+ - { name: block, type: boolean, required: false, default: 'false', description: 'Full width — maps to PR11 `fluid`.' }
14
+ - { name: sm, type: boolean, required: false, default: 'false', description: "→ size='small'." }
15
+ - { name: lg, type: boolean, required: false, default: 'false', description: "→ size='large'." }
16
+ - { name: rounded, type: boolean, required: false, default: 'false' }
17
+ - { name: label, type: ReactNode, required: false, description: 'Rendered as a child span — PR11 Button has no `label` prop.' }
18
+ - { name: icon, type: string, required: false, description: 'PrimeIcons class string, e.g. `pi pi-filter`; rendered before the label.' }
19
+ - { name: loading, type: boolean, required: false, default: 'false', description: 'Shows a spinner icon and disables the button — PR11 Button has no `loading` prop.' }
20
+ - { name: href, type: string, required: false, description: 'Internal path; pushed with `next/navigation` router after `onClick` runs.' }
21
+ - { name: type, type: "'button' | 'submit' | 'reset'", required: false, default: "'button'" }
22
+ - { name: disabled, type: boolean, required: false }
23
+ - { name: onClick, type: '(evt: MouseEvent<HTMLButtonElement>) => void', required: false }
24
+ - { name: children, type: ReactNode, required: false }
25
+ ---
8
26
 
9
27
  ## Example
10
28
 
11
29
  ```tsx
12
- <Button
13
- label="Save"
14
- icon="pi pi-check"
15
- variant="primary"
16
- rounded
17
- onClick={() => console.log("saved")}
18
- />
30
+ import Button from '@mantis-core/ui/components/Buttons/Button';
31
+
32
+ function Example() {
33
+ return (
34
+ <Button
35
+ variant='danger'
36
+ outlined
37
+ label='Delete'
38
+ icon='pi pi-trash'
39
+ onClick={() => console.log('deleted')}
40
+ />
41
+ );
42
+ }
19
43
  ```
20
44
 
21
45
  ## Notes
22
46
 
23
- - PrimeReact props still pass through.
24
- - `href` triggers client navigation with `next/navigation`.
25
- - `ButtonVariant` accepts `danger`, but the tokenized SCSS loop is defined around `error`.
47
+ - No `requiredStyles`: fully preset-themed — `buttons.scss` was removed with the PR11 migration.
48
+ - `disabled` is forced `true` while `loading` is `true`.
49
+ - Native `<button>` attributes (except `onClick`/`type`, which are typed above) pass through.
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: CardSkeleton
3
+ category: feedback
4
+ import: '@mantis-core/ui/components/feedback/CardSkeleton'
5
+ whenToUse: Animated skeleton for card-grid layouts while data loads; composes the PR11 Skeleton primitive.
6
+ baseLibrary: '@primereact/ui/skeleton'
7
+ relatedComponents: ['TableSkeleton']
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: count, type: number, required: false, default: '3' }
11
+ ---
12
+
13
+ ## Example
14
+
15
+ ```tsx
16
+ import CardSkeleton from '@mantis-core/ui/components/feedback/CardSkeleton';
17
+
18
+ function Example() {
19
+ return <CardSkeleton count={6} />;
20
+ }
21
+ ```
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: ChangePasswordForm
3
+ category: auth
4
+ import: '@mantis-core/ui/components/auth/ChangePasswordForm'
5
+ whenToUse: Current + new + confirm password form for an authenticated user changing their own password.
6
+ baseLibrary: custom
7
+ requiredStyles: []
8
+ relatedComponents: [ResetPasswordForm, LoginForm]
9
+ relatedNextCore: []
10
+ props:
11
+ - { name: onSubmit, type: '(values: ChangePasswordFormValues) => void | Promise<void>', required: true, description: 'Receives { currentPassword, newPassword, confirmPassword }; form manages isSubmitting via RHF.' }
12
+ - { name: title, type: string, required: false, default: '"Cambiar contraseña"' }
13
+ - { name: submitLabel, type: string, required: false, default: '"Actualizar contraseña"' }
14
+ - { name: minPasswordLength, type: number, required: false, default: '8', description: 'Feeds minLengthRule for the newPassword field.' }
15
+ - { name: className, type: string, required: false }
16
+ ---
17
+
18
+ ## Example
19
+
20
+ ```tsx
21
+ import ChangePasswordForm from '@mantis-core/ui/components/auth/ChangePasswordForm';
22
+ import type { ChangePasswordFormValues } from '@mantis-core/ui/components/auth/ChangePasswordForm';
23
+
24
+ function Example() {
25
+ const handleSubmit = async (values: ChangePasswordFormValues) => {
26
+ await fetch('/api/auth/change-password', { method: 'POST', body: JSON.stringify(values) });
27
+ };
28
+
29
+ return <ChangePasswordForm onSubmit={handleSubmit} />;
30
+ }
31
+ ```
32
+
33
+ ## Notes
34
+
35
+ - `confirmPassword`'s match-check against `newPassword` is hardcoded in the component, not a prop.
36
+ - No `subtitle`/`backSlot` props (unlike ForgotPasswordForm) — this form has no "back" affordance.
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: CheckboxField
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/CheckboxField'
5
+ whenToUse: Single boolean checkbox wired to react-hook-form.
6
+ baseLibrary: '@primereact/ui/checkbox'
7
+ formContract: ChoiceFieldControllerProps
8
+ relatedComponents: ['SwitchField', 'RadioGroup']
9
+ relatedNextCore: []
10
+ props: []
11
+ ---
12
+
13
+ ## Example
14
+
15
+ ```tsx
16
+ import { CheckboxField } from '@mantis-core/ui/components/Forms/CheckboxField';
17
+ import { useForm } from 'react-hook-form';
18
+
19
+ function Example() {
20
+ const { control } = useForm({ defaultValues: { acceptsTerms: false } });
21
+ return (
22
+ <CheckboxField
23
+ name='acceptsTerms'
24
+ control={control}
25
+ label='I accept the terms'
26
+ rules={{ required: 'You must accept.' }}
27
+ />
28
+ );
29
+ }
30
+ ```
31
+
32
+ ## Notes
33
+
34
+ - Value is a plain `boolean` (`Boolean(field.value)`).
35
+ - `labelMode` defaults to `'beside'` (not the text-field default `'ifta'`) — `ChoiceFieldControllerProps`
36
+ only allows `'beside' | 'top' | 'none'`.
37
+ - Wraps PR11 compound `Checkbox.Root` (+ `Checkbox.Box`/`Checkbox.Indicator`); any remaining
38
+ `CheckboxRootProps` pass through via `...rest`.
@@ -1,24 +1,55 @@
1
- # CKEditorInput
2
-
3
- - Export: `CKEditorInput`
4
- - Extra exports: `CKEditorInputProps`, `CKEditorContentMetrics`
5
- - Import: `import { CKEditorInput } from "@mantis-core/ui";`
6
- - Base library: `@ckeditor/ckeditor5-react` + `ckeditor5`
7
- - Base typing: explicit `CKEditorInputProps`
8
- - Form contract: [`ControllerProps`](../contracts/controller-props.md)
9
- - Required styles: `@mantis-core/styles/scss/ckeditor.scss`
1
+ ---
2
+ name: CKEditorInput
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/CKEditorInput'
5
+ whenToUse: Rich-text WYSIWYG editor (CKEditor 5) wired to react-hook-form; emits an HTML string.
6
+ baseLibrary: ckeditor
7
+ requiredStyles: [scss/ckeditor.scss]
8
+ relatedComponents: [RichTextPreview]
9
+ relatedNextCore: []
10
+ props:
11
+ - { name: controller, type: 'Pick<FieldControllerProps, "name" | "control" | "rules" | "defaultValue" | "shouldUnregister">', required: true, description: 'Nested react-hook-form binding.' }
12
+ - { name: placeholder, type: string, required: false, default: '''Escribe aqui...''' }
13
+ - { name: disabled, type: boolean, required: false }
14
+ - { name: readOnly, type: boolean, required: false }
15
+ - { name: className, type: string, required: false }
16
+ - { name: preset, type: '''default'' | ''blog'' | ''property'' | ''note''', required: false, default: '''default''', description: 'Picks a bundled toolbar layout + min-height + stats visibility.' }
17
+ - { name: toolbarItems, type: 'string[]', required: false, description: 'Overrides the preset''s toolbar items.' }
18
+ - { name: minHeight, type: string, required: false, description: 'Overrides the preset''s min-height (CSS value).' }
19
+ - { name: maxHeight, type: string, required: false }
20
+ - { name: showStats, type: boolean, required: false, description: 'Overrides the preset''s word/character/read-time footer.' }
21
+ - { name: validateNonEmptyHtml, type: boolean, required: false, default: 'true', description: 'When `rules.required` is set, also rejects HTML that has no plain-text content.' }
22
+ - { name: requiredMessage, type: string, required: false, default: '''Este campo es obligatorio''' }
23
+ - { name: config, type: EditorConfig, required: false, description: 'Deep-merged on top of the preset''s CKEditor config (plugins/translations override rather than merge).' }
24
+ - { name: onReady, type: '(editor: any) => void', required: false }
25
+ - { name: onHtmlChange, type: '(html: string) => void', required: false }
26
+ - { name: onPlainTextChange, type: '(plainText: string) => void', required: false }
27
+ - { name: onMetricsChange, type: '(metrics: CKEditorContentMetrics) => void', required: false, description: '`{ plainText, words, characters, readTimeMinutes }`.' }
28
+ ---
10
29
 
11
30
  ## Example
12
31
 
13
32
  ```tsx
14
- <CKEditorInput
15
- controller={{ name: "body", control: form.control }}
16
- minHeight="20rem"
17
- showStats
18
- onMetricsChange={(metrics) => console.log(metrics.words)}
19
- />
33
+ import CKEditorInput from '@mantis-core/ui/components/Forms/CKEditorInput';
34
+ import { useForm, type FieldValues } from 'react-hook-form';
35
+
36
+ function Example() {
37
+ const { control } = useForm<FieldValues>({ defaultValues: { body: '' } });
38
+ return (
39
+ <CKEditorInput
40
+ controller={{ name: 'body', control, rules: { required: true } }}
41
+ preset='blog'
42
+ />
43
+ );
44
+ }
20
45
  ```
21
46
 
22
47
  ## Notes
23
48
 
24
- - This wrapper adds metrics, presets, and optional non-empty HTML validation on top of CKEditor.
49
+ - `controller` is a nested object (legacy pattern), not the flattened `FieldControllerProps` other
50
+ PR11 field wrappers accept as top-level props.
51
+ - Ships CKEditor's own stylesheet import (`ckeditor5/ckeditor5.css`) so the toolbar/editor render
52
+ themed with no consumer setup; `requiredStyles: ckeditor.scss` only layers Mantis's wrapper theming
53
+ (invalid/disabled states) on top.
54
+ - `validateNonEmptyHtml` only activates when `controller.rules.required` is truthy — it strips tags
55
+ and rejects content that decodes to empty plain text, catching "just an empty `<p></p>`" submits.
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: ColorPickerInput
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/ColorPickerInput'
5
+ whenToUse: RHF-bound color picker over PR11's compound InputColor (area + sliders + swatch + eyedropper + hex input); value is a hex string.
6
+ baseLibrary: '@primereact/ui/inputcolor'
7
+ formContract: ChoiceFieldControllerProps
8
+ relatedComponents: []
9
+ relatedNextCore: []
10
+ props:
11
+ - { name: format, type: 'ColorSpace', required: false, description: 'Picker color space (e.g. hsb, rgb) — the bound RHF value is always normalized to hex regardless.' }
12
+ ---
13
+
14
+ ## Example
15
+
16
+ ```tsx
17
+ import { ColorPickerInput } from '@mantis-core/ui/components/Forms/ColorPickerInput';
18
+ import { useForm } from 'react-hook-form';
19
+
20
+ function Example() {
21
+ const { control } = useForm({ defaultValues: { brand: '#276def' } });
22
+ return <ColorPickerInput name='brand' control={control} label='Color' />;
23
+ }
24
+ ```
25
+
26
+ ## Notes
27
+
28
+ - Value shape: a hex string (e.g. `"#276def"`) for storage/JSON portability — internally converted to/from PR11's `ColorInstance` via `parseColor`.
29
+ - An empty/invalid stored value falls back to `#276def` so `parseColor` never throws.
30
+ - Uses `ChoiceFieldControllerProps` (bucket B), defaults `labelMode` to `top`.
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: CommandPalette
3
+ category: navigation
4
+ import: '@mantis-core/ui/components/navigation/CommandPalette'
5
+ whenToUse: Keyboard-driven command search overlay (Ctrl/Cmd+K); pair with the `useCommandPalette` hook to wire the shortcut.
6
+ baseLibrary: custom
7
+ relatedComponents: ['Modal']
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: commands, type: '{ id: string; label: string; icon?: ReactNode; keywords?: string[]; onSelect: () => void }[]', required: true }
11
+ - { name: open, type: boolean, required: false, default: 'false' }
12
+ - { name: onOpenChange, type: '(open: boolean) => void', required: false }
13
+ ---
14
+
15
+ ## Example
16
+
17
+ ```tsx
18
+ import CommandPalette, { useCommandPalette } from '@mantis-core/ui/components/navigation/CommandPalette';
19
+ import { useState } from 'react';
20
+
21
+ function Example() {
22
+ const [open, setOpen] = useState(false);
23
+ useCommandPalette(() => setOpen(true));
24
+ return (
25
+ <CommandPalette
26
+ open={open}
27
+ onOpenChange={setOpen}
28
+ commands={[{ id: 'new', label: 'New property', onSelect: () => console.log('new') }]}
29
+ />
30
+ );
31
+ }
32
+ ```
33
+
34
+ ## Notes
35
+
36
+ - Renders inside a headerless `size="md"` Modal with a native filter input (no PrimeReact InputText) — filters `commands` by label or `keywords`.
37
+ - `useCommandPalette(onOpen)` is a separate hook export: it binds a `Ctrl/Cmd+K` `keydown` listener that calls `onOpen`; it does not manage the `open` state itself.
38
+ - No `requiredStyles` — preset-themed.