@mantis-core/ui 0.3.0 → 0.5.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 (234) hide show
  1. package/COMPONENTS.md +115 -15
  2. package/dist/components/Forms/ColorPickerInput.d.ts +10 -0
  3. package/dist/components/Forms/ColorPickerInput.d.ts.map +1 -0
  4. package/dist/components/Forms/ColorPickerInput.js +13 -0
  5. package/dist/components/Forms/ColorPickerInput.js.map +1 -0
  6. package/dist/components/Forms/Combobox.d.ts +10 -0
  7. package/dist/components/Forms/Combobox.d.ts.map +1 -0
  8. package/dist/components/Forms/Combobox.js +11 -0
  9. package/dist/components/Forms/Combobox.js.map +1 -0
  10. package/dist/components/Forms/DatePresets.d.ts +14 -0
  11. package/dist/components/Forms/DatePresets.d.ts.map +1 -0
  12. package/dist/components/Forms/DatePresets.js +55 -0
  13. package/dist/components/Forms/DatePresets.js.map +1 -0
  14. package/dist/components/Forms/OtpInput.d.ts +11 -0
  15. package/dist/components/Forms/OtpInput.d.ts.map +1 -0
  16. package/dist/components/Forms/OtpInput.js +11 -0
  17. package/dist/components/Forms/OtpInput.js.map +1 -0
  18. package/dist/components/Forms/PasswordInput.d.ts +12 -0
  19. package/dist/components/Forms/PasswordInput.d.ts.map +1 -0
  20. package/dist/components/Forms/PasswordInput.js +31 -0
  21. package/dist/components/Forms/PasswordInput.js.map +1 -0
  22. package/dist/components/Forms/RatingInput.d.ts +11 -0
  23. package/dist/components/Forms/RatingInput.d.ts.map +1 -0
  24. package/dist/components/Forms/RatingInput.js +11 -0
  25. package/dist/components/Forms/RatingInput.js.map +1 -0
  26. package/dist/components/Forms/TagsInput.d.ts +10 -0
  27. package/dist/components/Forms/TagsInput.d.ts.map +1 -0
  28. package/dist/components/Forms/TagsInput.js +11 -0
  29. package/dist/components/Forms/TagsInput.js.map +1 -0
  30. package/dist/components/auth/ChangePasswordForm.d.ts +16 -0
  31. package/dist/components/auth/ChangePasswordForm.d.ts.map +1 -0
  32. package/dist/components/auth/ChangePasswordForm.js +23 -0
  33. package/dist/components/auth/ChangePasswordForm.js.map +1 -0
  34. package/dist/components/auth/ForgotPasswordForm.d.ts +15 -0
  35. package/dist/components/auth/ForgotPasswordForm.d.ts.map +1 -0
  36. package/dist/components/auth/ForgotPasswordForm.js +14 -0
  37. package/dist/components/auth/ForgotPasswordForm.js.map +1 -0
  38. package/dist/components/auth/LoginForm.d.ts +22 -0
  39. package/dist/components/auth/LoginForm.d.ts.map +1 -0
  40. package/dist/components/auth/LoginForm.js +20 -0
  41. package/dist/components/auth/LoginForm.js.map +1 -0
  42. package/dist/components/auth/ResetPasswordForm.d.ts +16 -0
  43. package/dist/components/auth/ResetPasswordForm.d.ts.map +1 -0
  44. package/dist/components/auth/ResetPasswordForm.js +23 -0
  45. package/dist/components/auth/ResetPasswordForm.js.map +1 -0
  46. package/dist/components/auth/UserMenu.d.ts +22 -0
  47. package/dist/components/auth/UserMenu.d.ts.map +1 -0
  48. package/dist/components/auth/UserMenu.js +95 -0
  49. package/dist/components/auth/UserMenu.js.map +1 -0
  50. package/dist/components/auth/index.d.ts +11 -0
  51. package/dist/components/auth/index.d.ts.map +1 -0
  52. package/dist/components/auth/index.js +6 -0
  53. package/dist/components/auth/index.js.map +1 -0
  54. package/dist/components/charts/BarChart.d.ts +20 -0
  55. package/dist/components/charts/BarChart.d.ts.map +1 -0
  56. package/dist/components/charts/BarChart.js +28 -0
  57. package/dist/components/charts/BarChart.js.map +1 -0
  58. package/dist/components/charts/DonutChart.d.ts +21 -0
  59. package/dist/components/charts/DonutChart.d.ts.map +1 -0
  60. package/dist/components/charts/DonutChart.js +26 -0
  61. package/dist/components/charts/DonutChart.js.map +1 -0
  62. package/dist/components/charts/LineChart.d.ts +20 -0
  63. package/dist/components/charts/LineChart.d.ts.map +1 -0
  64. package/dist/components/charts/LineChart.js +27 -0
  65. package/dist/components/charts/LineChart.js.map +1 -0
  66. package/dist/components/charts/chart-setup.d.ts +3 -0
  67. package/dist/components/charts/chart-setup.d.ts.map +1 -0
  68. package/dist/components/charts/chart-setup.js +10 -0
  69. package/dist/components/charts/chart-setup.js.map +1 -0
  70. package/dist/components/charts/defaults.d.ts +13 -0
  71. package/dist/components/charts/defaults.d.ts.map +1 -0
  72. package/dist/components/charts/defaults.js +54 -0
  73. package/dist/components/charts/defaults.js.map +1 -0
  74. package/dist/components/charts/index.d.ts +9 -0
  75. package/dist/components/charts/index.d.ts.map +1 -0
  76. package/dist/components/charts/index.js +6 -0
  77. package/dist/components/charts/index.js.map +1 -0
  78. package/dist/components/data/DescriptionList.d.ts +11 -0
  79. package/dist/components/data/DescriptionList.d.ts.map +1 -0
  80. package/dist/components/data/DescriptionList.js +23 -0
  81. package/dist/components/data/DescriptionList.js.map +1 -0
  82. package/dist/components/data/StatCard.d.ts +14 -0
  83. package/dist/components/data/StatCard.d.ts.map +1 -0
  84. package/dist/components/data/StatCard.js +39 -0
  85. package/dist/components/data/StatCard.js.map +1 -0
  86. package/dist/components/data/Timeline.d.ts +15 -0
  87. package/dist/components/data/Timeline.d.ts.map +1 -0
  88. package/dist/components/data/Timeline.js +20 -0
  89. package/dist/components/data/Timeline.js.map +1 -0
  90. package/dist/components/feedback/Avatar.d.ts +9 -0
  91. package/dist/components/feedback/Avatar.d.ts.map +1 -0
  92. package/dist/components/feedback/Avatar.js +15 -0
  93. package/dist/components/feedback/Avatar.js.map +1 -0
  94. package/dist/components/feedback/CardSkeleton.d.ts +6 -0
  95. package/dist/components/feedback/CardSkeleton.d.ts.map +1 -0
  96. package/dist/components/feedback/CardSkeleton.js +7 -0
  97. package/dist/components/feedback/CardSkeleton.js.map +1 -0
  98. package/dist/components/feedback/EmptyState.d.ts +9 -0
  99. package/dist/components/feedback/EmptyState.d.ts.map +1 -0
  100. package/dist/components/feedback/EmptyState.js +6 -0
  101. package/dist/components/feedback/EmptyState.js.map +1 -0
  102. package/dist/components/feedback/ErrorBoundary.d.ts +18 -0
  103. package/dist/components/feedback/ErrorBoundary.d.ts.map +1 -0
  104. package/dist/components/feedback/ErrorBoundary.js +24 -0
  105. package/dist/components/feedback/ErrorBoundary.js.map +1 -0
  106. package/dist/components/feedback/TableSkeleton.d.ts +7 -0
  107. package/dist/components/feedback/TableSkeleton.d.ts.map +1 -0
  108. package/dist/components/feedback/TableSkeleton.js +7 -0
  109. package/dist/components/feedback/TableSkeleton.js.map +1 -0
  110. package/dist/components/feedback/Tag.d.ts +6 -0
  111. package/dist/components/feedback/Tag.d.ts.map +1 -0
  112. package/dist/components/feedback/Tag.js +7 -0
  113. package/dist/components/feedback/Tag.js.map +1 -0
  114. package/dist/components/navigation/CommandPalette.d.ts +17 -0
  115. package/dist/components/navigation/CommandPalette.d.ts.map +1 -0
  116. package/dist/components/navigation/CommandPalette.js +73 -0
  117. package/dist/components/navigation/CommandPalette.js.map +1 -0
  118. package/dist/components/navigation/PageTabs.d.ts +14 -0
  119. package/dist/components/navigation/PageTabs.d.ts.map +1 -0
  120. package/dist/components/navigation/PageTabs.js +21 -0
  121. package/dist/components/navigation/PageTabs.js.map +1 -0
  122. package/dist/components/overlays/Drawer.d.ts +6 -0
  123. package/dist/components/overlays/Drawer.d.ts.map +1 -0
  124. package/dist/components/overlays/Drawer.js +8 -0
  125. package/dist/components/overlays/Drawer.js.map +1 -0
  126. package/dist/components/overlays/Modal.d.ts +6 -0
  127. package/dist/components/overlays/Modal.d.ts.map +1 -0
  128. package/dist/components/overlays/Modal.js +8 -0
  129. package/dist/components/overlays/Modal.js.map +1 -0
  130. package/dist/components/pages/app-shell/AppShell.d.ts.map +1 -1
  131. package/dist/components/pages/app-shell/AppShell.js +11 -9
  132. package/dist/components/pages/app-shell/AppShell.js.map +1 -1
  133. package/dist/components/pages/app-shell/types.d.ts +4 -0
  134. package/dist/components/pages/app-shell/types.d.ts.map +1 -1
  135. package/dist/validation/index.d.ts +2 -0
  136. package/dist/validation/index.d.ts.map +1 -0
  137. package/dist/validation/index.js +3 -0
  138. package/dist/validation/index.js.map +1 -0
  139. package/dist/validation/rules.d.ts +10 -0
  140. package/dist/validation/rules.d.ts.map +1 -0
  141. package/dist/validation/rules.js +39 -0
  142. package/dist/validation/rules.js.map +1 -0
  143. package/dist/validation/zod.d.ts +2 -0
  144. package/dist/validation/zod.d.ts.map +1 -0
  145. package/dist/validation/zod.js +3 -0
  146. package/dist/validation/zod.js.map +1 -0
  147. package/docs/components/action-column.md +14 -13
  148. package/docs/components/admin-page-configurator.md +23 -0
  149. package/docs/components/admin-page-header.md +15 -17
  150. package/docs/components/admin-page-layout-shell.md +22 -0
  151. package/docs/components/admin-page-layout.md +11 -20
  152. package/docs/components/app-shell.md +20 -0
  153. package/docs/components/async-select.md +18 -17
  154. package/docs/components/avatar.md +19 -0
  155. package/docs/components/bar-chart.md +21 -0
  156. package/docs/components/breadcrumbs.md +15 -0
  157. package/docs/components/button.md +20 -15
  158. package/docs/components/card-skeleton.md +15 -0
  159. package/docs/components/change-password-form.md +17 -0
  160. package/docs/components/ckeditor-input.md +15 -16
  161. package/docs/components/color-picker-input.md +19 -0
  162. package/docs/components/combobox.md +19 -0
  163. package/docs/components/command-palette.md +17 -0
  164. package/docs/components/confirm-dialog.md +19 -17
  165. package/docs/components/currency-input.md +21 -0
  166. package/docs/components/data-state.md +15 -15
  167. package/docs/components/date-input.md +17 -18
  168. package/docs/components/date-presets.md +18 -0
  169. package/docs/components/date-range-input.md +20 -0
  170. package/docs/components/description-list.md +16 -0
  171. package/docs/components/dirty-form-guard.md +15 -23
  172. package/docs/components/donut-chart.md +21 -0
  173. package/docs/components/drawer.md +19 -0
  174. package/docs/components/drop-down.md +18 -20
  175. package/docs/components/empty-state.md +18 -0
  176. package/docs/components/error-boundary.md +17 -0
  177. package/docs/components/error-message.md +11 -9
  178. package/docs/components/file-dropzone.md +28 -16
  179. package/docs/components/filter-pannel.md +12 -14
  180. package/docs/components/forgot-password-form.md +18 -0
  181. package/docs/components/form-actions-bar.md +29 -18
  182. package/docs/components/form-field-render.md +16 -16
  183. package/docs/components/form-section.md +15 -11
  184. package/docs/components/form-wizard.md +18 -0
  185. package/docs/components/hidden-field.md +12 -15
  186. package/docs/components/index-column.md +12 -9
  187. package/docs/components/line-chart.md +21 -0
  188. package/docs/components/loading.md +14 -12
  189. package/docs/components/login-form.md +22 -0
  190. package/docs/components/map-picker-client.md +14 -14
  191. package/docs/components/map-picker-osm.md +16 -14
  192. package/docs/components/map-picker.md +14 -17
  193. package/docs/components/menu-button.md +14 -18
  194. package/docs/components/modal.md +20 -0
  195. package/docs/components/multi-select-filter.md +14 -16
  196. package/docs/components/multi-select.md +18 -19
  197. package/docs/components/number-input.md +17 -16
  198. package/docs/components/otp-input.md +18 -0
  199. package/docs/components/page-tabs.md +16 -0
  200. package/docs/components/page-title.md +11 -9
  201. package/docs/components/paginated-table.md +19 -26
  202. package/docs/components/pagination.md +15 -18
  203. package/docs/components/password-input.md +19 -0
  204. package/docs/components/phone-input.md +18 -0
  205. package/docs/components/radio-group.md +20 -0
  206. package/docs/components/range-slider.md +20 -0
  207. package/docs/components/rating-input.md +19 -0
  208. package/docs/components/render-field.md +15 -20
  209. package/docs/components/reset-password-form.md +17 -0
  210. package/docs/components/rich-text-preview.md +15 -14
  211. package/docs/components/search-input.md +19 -0
  212. package/docs/components/select.md +19 -19
  213. package/docs/components/stat-card.md +19 -0
  214. package/docs/components/status-badge.md +16 -10
  215. package/docs/components/switch.md +16 -19
  216. package/docs/components/table-filter-field.md +13 -17
  217. package/docs/components/table-skeleton.md +16 -0
  218. package/docs/components/table-toolbar.md +16 -15
  219. package/docs/components/tag.md +18 -0
  220. package/docs/components/tags-input.md +19 -0
  221. package/docs/components/text-area.md +16 -16
  222. package/docs/components/text-input.md +16 -15
  223. package/docs/components/time-picker.md +17 -14
  224. package/docs/components/timeline.md +15 -0
  225. package/docs/components/toggle-inline-button.md +17 -18
  226. package/docs/components/toggle.md +20 -17
  227. package/docs/components/upload-files-preview.md +20 -22
  228. package/docs/components/user-menu.md +19 -0
  229. package/docs/contracts/component-doc-schema.md +78 -0
  230. package/docs/contracts/dependency-map.md +68 -29
  231. package/docs/contracts/style-imports.md +38 -12
  232. package/llms.txt +106 -0
  233. package/package.json +40 -4
  234. package/PRIMEREACT_MAPPING.md +0 -6
@@ -1,19 +1,16 @@
1
- # HiddenField
2
-
3
- - Export: `HiddenField`
4
- - Extra exports: `HiddenFieldProps`
5
- - Import: `import { HiddenField } from "@mantis-core/ui";`
6
- - Base library: `react-hook-form`
7
- - Base typing: `ControllerProps & { hidden?: boolean }`
8
- - Form contract: [`ControllerProps`](../contracts/controller-props.md)
9
- - Required styles: none
10
-
1
+ ---
2
+ name: HiddenField
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/HiddenField'
5
+ whenToUse: Registers a hidden value in react-hook-form without rendering any UI.
6
+ baseLibrary: react-hook-form
7
+ formContract: ControllerProps
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: controller, type: ControllerProps, required: true }
11
+ ---
11
12
  ## Example
12
13
 
13
14
  ```tsx
14
- <HiddenField
15
- name="tenantId"
16
- control={form.control}
17
- defaultValue={tenantId}
18
- />
15
+ <HiddenField controller={{ name: 'id' }} />
19
16
  ```
@@ -1,13 +1,16 @@
1
- # IndexColumn
2
-
3
- - Export: `IndexColumn`
4
- - Import: `import { IndexColumn } from "@mantis-core/ui";`
5
- - Base library: `primereact/column`
6
- - Base typing: `(props?: ColumnProps) => JSX.Element`
7
- - Required styles: none beyond table context
8
-
1
+ ---
2
+ name: IndexColumn
3
+ category: tables
4
+ import: '@mantis-core/ui/components/Tables/IndexColumn'
5
+ whenToUse: Returns a PrimeReact Column that renders the row's 1-based visual index; call as IndexColumn(colProps).
6
+ baseLibrary: primereact/column
7
+ relatedComponents: [PaginatedTable]
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: props, type: ColumnProps, required: false }
11
+ ---
9
12
  ## Example
10
13
 
11
14
  ```tsx
12
- <IndexColumn style={{ width: "4rem" }} />
15
+ {IndexColumn({ style: { width: '50px' } })}
13
16
  ```
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: LineChart
3
+ category: charts
4
+ import: '@mantis-core/ui/components/charts/LineChart'
5
+ whenToUse: Time-series or trend data rendered as a line chart. Zero-config defaults with full options override.
6
+ baseLibrary: custom
7
+ relatedComponents: [BarChart, DonutChart]
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: labels, type: 'string[]', required: true }
11
+ - { name: datasets, type: 'LineChartDataset[]', required: true, description: 'Array of ChartDataset<''line''> minus ''data'' field, which is number[]' }
12
+ - { name: options, type: 'ChartOptions<''line''>', required: false, description: Deep-merged over defaults }
13
+ - { name: colors, type: 'string[]', required: false, default: DEFAULT_COLORS palette }
14
+ - { name: height, type: number, required: false, default: '300' }
15
+ - { name: className, type: string, required: false }
16
+ ---
17
+ ## Example
18
+
19
+ ```tsx
20
+ <LineChart labels={['Jan','Feb','Mar']} datasets={[{ label: 'Revenue', data: [100,200,150] }]} height={250} />
21
+ ```
@@ -1,18 +1,20 @@
1
- # Loading
2
-
3
- - Export: `Loading`
4
- - Extra exports: `LoadingWrapperProps`
5
- - Import: `import { Loading } from "@mantis-core/ui";`
6
- - Base library: custom full-screen overlay
7
- - Base typing: `PropsWithChildren<{ loading?: boolean; texto?: string; className?: string }>`
8
- - Required styles: none
9
-
1
+ ---
2
+ name: Loading
3
+ category: feedback
4
+ import: '@mantis-core/ui/components/Loaders/Loading'
5
+ whenToUse: 'Full-screen loading overlay with animated spinner; renders children when loading=false.'
6
+ baseLibrary: custom
7
+ relatedNextCore: []
8
+ props:
9
+ - { name: loading, type: boolean, required: false, default: 'false' }
10
+ - { name: texto, type: string, required: false, default: '''Cargando...''' }
11
+ - { name: className, type: string, required: false }
12
+ - { name: children, type: ReactNode, required: false }
13
+ ---
10
14
  ## Example
11
15
 
12
16
  ```tsx
13
- <Loading loading={isSubmitting} texto="Saving changes...">
14
- <FormScreen />
15
- </Loading>
17
+ <Loading loading={isLoading}><PageContent /></Loading>
16
18
  ```
17
19
 
18
20
  ## Notes
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: LoginForm
3
+ category: auth
4
+ import: '@mantis-core/ui/components/auth/LoginForm'
5
+ whenToUse: Self-contained login form with email/username + password fields; pass onSubmit to wire signIn/Supabase from the app layer.
6
+ baseLibrary: custom
7
+ relatedNextCore: []
8
+ props:
9
+ - { name: onSubmit, type: '(values: LoginFormValues) => void | Promise<void>', required: true }
10
+ - { name: brand, type: ReactNode, required: false }
11
+ - { name: title, type: string, required: false, default: '"Iniciar sesión"' }
12
+ - { name: subtitle, type: string, required: false }
13
+ - { name: footer, type: ReactNode, required: false }
14
+ - { name: identifierField, type: '''email'' | ''username''', required: false, default: '"email"' }
15
+ - { name: submitLabel, type: string, required: false, default: '"Ingresar"' }
16
+ - { name: className, type: string, required: false }
17
+ ---
18
+ ## Example
19
+
20
+ ```tsx
21
+ <LoginForm onSubmit={async (v) => { await signIn('credentials', { email: v.identifier, password: v.password }); }} brand={<Logo />} />
22
+ ```
@@ -1,20 +1,20 @@
1
- # MapPickerClient
2
-
3
- - Export: `MapPickerClient`
4
- - Extra exports: `MapPickerClientProps`
5
- - Import: `import { MapPickerClient } from "@mantis-core/ui";`
6
- - Base library: `react-leaflet` + `leaflet`
7
- - Base typing: `{ onLocationSelect: (lat: number, lng: number) => void; initialLat?: number | null; initialLng?: number | null }`
8
- - Required styles: Leaflet CSS is imported by the component
9
-
1
+ ---
2
+ name: MapPickerClient
3
+ category: maps
4
+ import: '@mantis-core/ui/components/Maps/MapPickerClient'
5
+ whenToUse: Client-only Leaflet map that lets the user click to pick a coordinate; controlled via initialLat/initialLng.
6
+ baseLibrary: react-leaflet
7
+ relatedComponents: [MapPicker]
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: onLocationSelect, type: '(lat: number, lng: number) => void', required: true, description: 'Callback fired on map click with the selected coordinates' }
11
+ - { name: initialLat, type: 'number | null', required: false, description: 'Initial latitude for the marker and map center' }
12
+ - { name: initialLng, type: 'number | null', required: false, description: 'Initial longitude for the marker and map center' }
13
+ ---
10
14
  ## Example
11
15
 
12
16
  ```tsx
13
- <MapPickerClient
14
- initialLat={-2.9}
15
- initialLng={-79.0}
16
- onLocationSelect={(lat, lng) => console.log(lat, lng)}
17
- />
17
+ {/* TODO: add example */}
18
18
  ```
19
19
 
20
20
  ## Notes
@@ -1,18 +1,20 @@
1
- # MapPickerOSM
2
-
3
- - Export: `MapPickerOSM`
4
- - Extra exports: `MapPickerOSMProps`, `LatLng`
5
- - Import: `import { MapPickerOSM } from "@mantis-core/ui";`
6
- - Base library: Leaflet loaded from CDN
7
- - Base typing: `{ initialPosition?: LatLng; zoom?: number; height?: string; onChange?: (pos: LatLng) => void; onSave?: (pos: LatLng) => void }`
8
- - Required styles: no `@mantis-core/styles` partial; Leaflet CSS is injected from CDN
9
-
1
+ ---
2
+ name: MapPickerOSM
3
+ category: maps
4
+ import: '@mantis-core/ui/components/Maps/MapPickerOSM'
5
+ whenToUse: Script-injected Leaflet map (no SSR bundle cost) with click/drag marker and a save-location button.
6
+ baseLibrary: custom
7
+ relatedComponents: [MapPicker]
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: initialPosition, type: LatLng, required: false, default: '{ lat: -12.0464, lng: -77.0428 }', description: 'Initial marker and center position' }
11
+ - { name: zoom, type: number, required: false, default: '12', description: 'Initial zoom level' }
12
+ - { name: height, type: string, required: false, default: '''400px''', description: 'CSS height of the map container' }
13
+ - { name: onChange, type: '(pos: LatLng) => void', required: false, description: 'Called on every click or marker drag' }
14
+ - { name: onSave, type: '(pos: LatLng) => void', required: false, description: 'Called when user clicks "Guardar ubicación"' }
15
+ ---
10
16
  ## Example
11
17
 
12
18
  ```tsx
13
- <MapPickerOSM
14
- initialPosition={{ lat: -12.0464, lng: -77.0428 }}
15
- onChange={(pos) => console.log(pos)}
16
- onSave={(pos) => saveCoordinates(pos)}
17
- />
19
+ {/* TODO: add example */}
18
20
  ```
@@ -1,21 +1,18 @@
1
- # MapPicker
2
-
3
- - Export: `MapPicker`
4
- - Extra exports: `MapPickerProps`
5
- - Import: `import { MapPicker } from "@mantis-core/ui";`
6
- - Base library: `next/dynamic` wrapper over `MapPickerClient`
7
- - Base typing: `{ onLocationSelect: (lat: number, lng: number) => void; initialLat?: number | null; initialLng?: number | null }`
8
- - Required styles: Leaflet CSS comes from the client implementation
9
-
1
+ ---
2
+ name: MapPicker
3
+ category: maps
4
+ import: '@mantis-core/ui/components/Maps/MapPicker'
5
+ whenToUse: Interactive Leaflet map that lets the user click to select a lat/lng coordinate; SSR-safe via next/dynamic.
6
+ baseLibrary: next/dynamic
7
+ relatedComponents: [MapPickerClient, MapPickerOSM]
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: onLocationSelect, type: '(lat: number, lng: number) => void', required: true }
11
+ - { name: initialLat, type: 'number | null', required: false }
12
+ - { name: initialLng, type: 'number | null', required: false }
13
+ ---
10
14
  ## Example
11
15
 
12
16
  ```tsx
13
- <MapPicker
14
- initialLat={-2.9}
15
- initialLng={-79.0}
16
- onLocationSelect={(lat, lng) => {
17
- form.setValue("lat", lat);
18
- form.setValue("lng", lng);
19
- }}
20
- />
17
+ <MapPicker onLocationSelect={(lat, lng) => setValue('coords', { lat, lng })} initialLat={-3.26} initialLng={-79.28} />
21
18
  ```
@@ -1,22 +1,18 @@
1
- # MenuButton
2
-
3
- - Export: `MenuButton`
4
- - Extra exports: `MenuButtonProps`, `ActionMenuItem`
5
- - Import: `import { MenuButton } from "@mantis-core/ui";`
6
- - Base library: `primereact/tieredmenu`
7
- - Base typing:
8
- - `ActionMenuItem extends MenuItem { route?: string; items?: ActionMenuItem[] | ActionMenuItem[][] }`
9
- - `MenuButtonProps = { label?: string; icon?: string; items?: ActionMenuItem[] }`
10
- - Required styles: [`buttons.scss`](../../../../packages/mantis-core-styles/docs/styles/buttons.md) indirectly through `Button`
11
-
1
+ ---
2
+ name: MenuButton
3
+ category: tables
4
+ import: '@mantis-core/ui/components/Tables/MenuButton'
5
+ whenToUse: Dropdown button with a list of actions; used inside table rows.
6
+ baseLibrary: primereact/tieredmenu
7
+ relatedComponents: [ActionColumn]
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: items, type: 'ActionMenuItem[]', required: true }
11
+ - { name: label, type: string, required: false }
12
+ - { name: icon, type: string, required: false }
13
+ ---
12
14
  ## Example
13
15
 
14
16
  ```tsx
15
- <MenuButton
16
- label="Actions"
17
- items={[
18
- { label: "Edit", icon: "pi pi-pencil", route: "/admin/listings/1" },
19
- { label: "Delete", icon: "pi pi-trash", command: () => setOpen(true) },
20
- ]}
21
- />
17
+ <MenuButton items={[{ label: 'Edit', command: onEdit }, { label: 'Delete', command: onDelete }]} />
22
18
  ```
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: Modal
3
+ category: overlays
4
+ import: '@mantis-core/ui/components/overlays/Modal'
5
+ whenToUse: Dialog/modal (PrimeReact Dialog wrapper); dismissable mask and non-draggable by default.
6
+ baseLibrary: custom
7
+ relatedNextCore: []
8
+ props:
9
+ - { name: visible, type: boolean, required: true }
10
+ - { name: onHide, type: '() => void', required: true }
11
+ - { name: header, type: ReactNode, required: false }
12
+ - { name: footer, type: ReactNode, required: false }
13
+ - { name: style, type: CSSProperties, required: false }
14
+ - { name: className, type: string, required: false }
15
+ ---
16
+ ## Example
17
+
18
+ ```tsx
19
+ <Modal visible={showModal} onHide={() => setShowModal(false)} header='Editar propiedad' style={{ width: '40rem' }}><PropertyForm /></Modal>
20
+ ```
@@ -1,20 +1,18 @@
1
- # MultiSelectFilter
2
-
3
- - Export: `MultiSelectFilter`
4
- - Import: `import { MultiSelectFilter } from "@mantis-core/ui";`
5
- - Base library: `primereact/multiselect`
6
- - Base typing: `Omit<MultiSelectProps, "value" | "onChange"> & { filterProps: ColumnFilterElementTemplateOptions }`
7
- - Required styles: `@mantis-core/styles/scss/inputs.scss`
8
-
1
+ ---
2
+ name: MultiSelectFilter
3
+ category: tables
4
+ import: '@mantis-core/ui/components/Tables/filters/MultiSelectFilter'
5
+ whenToUse: PrimeReact MultiSelect wired for use as a DataTable column filter template.
6
+ baseLibrary: primereact/multiselect
7
+ relatedComponents: [FilterPannel]
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: filterProps, type: ColumnFilterElementTemplateOptions, required: true }
11
+ - { name: options, type: 'any[]', required: false }
12
+ - { name: loading, type: boolean, required: false }
13
+ ---
9
14
  ## Example
10
15
 
11
16
  ```tsx
12
- filterElement={(filterProps) => (
13
- <MultiSelectFilter
14
- filterProps={filterProps}
15
- options={statusOptions}
16
- optionLabel="label"
17
- optionValue="value"
18
- />
19
- )}
17
+ <Column field='status' filterElement={(opts) => <MultiSelectFilter filterProps={opts} options={statusOptions} />} />
20
18
  ```
@@ -1,23 +1,22 @@
1
- # MultiSelect
2
-
3
- - Export: `MultiSelect`
4
- - Import: `import { MultiSelect } from "@mantis-core/ui";`
5
- - Base library: `primereact/multiselect`
6
- - Base typing: `Omit<PrimeMultiSelectProps, "name" | "defaultValue"> & { controller: ControllerProps; block?: boolean }`
7
- - Form contract: [`ControllerProps`](../contracts/controller-props.md)
8
- - Required styles: `@mantis-core/styles/scss/inputs.scss`
9
-
1
+ ---
2
+ name: MultiSelect
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/MultiSelect'
5
+ whenToUse: Multi-value select (PrimeReact) wired to react-hook-form.
6
+ baseLibrary: primereact/multiselect
7
+ formContract: ControllerProps
8
+ requiredStyles: [scss/inputs.scss]
9
+ relatedComponents: [FormFieldRender, MultiSelectFilter]
10
+ relatedNextCore: []
11
+ props:
12
+ - { name: controller, type: ControllerProps, required: true }
13
+ - { name: options, type: 'any[]', required: false }
14
+ - { name: optionLabel, type: string, required: false }
15
+ - { name: optionValue, type: string, required: false }
16
+ - { name: block, type: boolean, required: false }
17
+ ---
10
18
  ## Example
11
19
 
12
20
  ```tsx
13
- <MultiSelect
14
- controller={{ name: "tags", control: form.control }}
15
- block
16
- options={[
17
- { label: "Featured", value: "featured" },
18
- { label: "Luxury", value: "luxury" },
19
- ]}
20
- optionLabel="label"
21
- optionValue="value"
22
- />
21
+ <MultiSelect controller={{ name: 'tags' }} options={tagOptions} optionLabel='name' optionValue='id' block />
23
22
  ```
@@ -1,20 +1,21 @@
1
- # NumberInput
2
-
3
- - Export: `NumberInput`
4
- - Extra exports: `NumberInputProps`
5
- - Import: `import { NumberInput } from "@mantis-core/ui";`
6
- - Base library: `primereact/inputnumber`
7
- - Base typing: `Omit<InputNumberProps, "name" | "defaultValue"> & { controller: ControllerProps; block?: boolean }`
8
- - Form contract: [`ControllerProps`](../contracts/controller-props.md)
9
- - Required styles: `@mantis-core/styles/scss/inputs.scss`
10
-
1
+ ---
2
+ name: NumberInput
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/NumberInput'
5
+ whenToUse: Numeric input (integer or decimal) wired to react-hook-form.
6
+ baseLibrary: primereact/inputnumber
7
+ formContract: ControllerProps
8
+ requiredStyles: [scss/inputs.scss]
9
+ relatedComponents: [FormFieldRender]
10
+ relatedNextCore: []
11
+ props:
12
+ - { name: controller, type: ControllerProps, required: true }
13
+ - { name: block, type: boolean, required: false }
14
+ - { name: min, type: number, required: false }
15
+ - { name: max, type: number, required: false }
16
+ ---
11
17
  ## Example
12
18
 
13
19
  ```tsx
14
- <NumberInput
15
- controller={{ name: "price", control: form.control }}
16
- block
17
- mode="currency"
18
- currency="USD"
19
- />
20
+ <NumberInput controller={{ name: 'price', rules: { min: 0 } }} block />
20
21
  ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ name: OtpInput
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/OtpInput'
5
+ whenToUse: One-time password input (PrimeReact InputOtp) wired to react-hook-form.
6
+ baseLibrary: custom
7
+ formContract: ControllerProps
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: controller, type: ControllerProps, required: true }
11
+ - { name: length, type: number, required: false, default: '6' }
12
+ - { name: block, type: boolean, required: false }
13
+ ---
14
+ ## Example
15
+
16
+ ```tsx
17
+ <OtpInput controller={{ name: 'otp', rules: { required: true } }} length={6} />
18
+ ```
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: PageTabs
3
+ category: navigation
4
+ import: '@mantis-core/ui/components/navigation/PageTabs'
5
+ whenToUse: Tab menu bar for page-level navigation; auto-detects active tab from Next.js pathname when tabs have href.
6
+ baseLibrary: custom
7
+ relatedNextCore: []
8
+ props:
9
+ - { name: tabs, type: '{ label: string; icon?: ReactNode; href?: string; command?: () => void }[]', required: true }
10
+ - { name: activeIndex, type: number, required: false }
11
+ ---
12
+ ## Example
13
+
14
+ ```tsx
15
+ <PageTabs tabs={[{ label: 'General', href: '/admin/settings' }, { label: 'Seguridad', href: '/admin/settings/security' }]} />
16
+ ```
@@ -1,13 +1,15 @@
1
- # PageTitle
2
-
3
- - Export: `PageTitle`
4
- - Import: `import { PageTitle } from "@mantis-core/ui";`
5
- - Base library: custom typographic wrapper
6
- - Base typing: `PropsWithChildren`
7
- - Required styles: none
8
-
1
+ ---
2
+ name: PageTitle
3
+ category: pages
4
+ import: '@mantis-core/ui/components/pages/PageTitle'
5
+ whenToUse: Centered display-font heading for public-facing pages.
6
+ baseLibrary: custom
7
+ relatedNextCore: []
8
+ props:
9
+ - { name: children, type: ReactNode, required: true }
10
+ ---
9
11
  ## Example
10
12
 
11
13
  ```tsx
12
- <PageTitle>Inventory Overview</PageTitle>
14
+ <PageTitle>Propiedades en Venta</PageTitle>
13
15
  ```
@@ -1,32 +1,25 @@
1
- # PaginatedTable
2
-
3
- - Export: `PaginatedTable`
4
- - Extra exports: `PaginatedTableProps`
5
- - Import: `import { PaginatedTable } from "@mantis-core/ui";`
6
- - Base library: `primereact/datatable` + `primereact/column`
7
- - Base typing: `DataTableBaseProps<TValue> & { showIndexColumn?; showActionColumn?; useMantisCoreStyles?; indexColumnProps?; actionColumnProps?; actionColumnItems? }`
8
- - Required styles: `@mantis-core/styles/scss/table.scss`
9
-
1
+ ---
2
+ name: PaginatedTable
3
+ category: tables
4
+ import: '@mantis-core/ui/components/Tables/PaginatedTable'
5
+ whenToUse: 'Generic server-side paginated DataTable with built-in index column, action column, and Mantis Core CSS. Wraps PrimeReact DataTable.'
6
+ baseLibrary: primereact/datatable
7
+ requiredStyles: [scss/table.scss]
8
+ relatedComponents: [ActionColumn, IndexColumn, TableToolbar, FilterPannel]
9
+ relatedNextCore: []
10
+ props:
11
+ - { name: value, type: TValue, required: true }
12
+ - { name: totalRecords, type: number, required: false }
13
+ - { name: showIndexColumn, type: boolean, required: false, default: 'true' }
14
+ - { name: showActionColumn, type: boolean, required: false, default: 'false' }
15
+ - { name: actionColumnItems, type: '(rowData: TValue[number]) => ActionMenuItem[]', required: false }
16
+ - { name: useMantisCoreStyles, type: boolean, required: false, default: 'true' }
17
+ - { name: lazy, type: boolean, required: false, default: 'true' }
18
+ ---
10
19
  ## Example
11
20
 
12
21
  ```tsx
13
- import { Column } from "primereact/column";
14
-
15
- <PaginatedTable
16
- value={rows}
17
- totalRecords={total}
18
- lazy
19
- first={first}
20
- rows={pageSize}
21
- onPage={onPage}
22
- showActionColumn
23
- actionColumnItems={(row) => [
24
- { label: "Edit", icon: "pi pi-pencil", route: `/admin/listings/${row.id}` },
25
- ]}
26
- >
27
- <Column field="name" header="Name" sortable />
28
- <Column field="status" header="Status" />
29
- </PaginatedTable>
22
+ <PaginatedTable value={rows} totalRecords={total} showActionColumn actionColumnItems={(row) => [{ label: 'Edit', command: () => edit(row) }]}><Column field='name' header='Name' /></PaginatedTable>
30
23
  ```
31
24
 
32
25
  ## Notes
@@ -1,24 +1,21 @@
1
- # Pagination, PaginationInfo, and PageSizeSelector
2
-
3
- - Exports: `Pagination`, `PaginationInfo`, `PageSizeSelector`
4
- - Extra exports: `PaginationProps`, `PaginationInfoProps`, `PageSizeSelectorProps`
5
- - Import: `import { Pagination, PaginationInfo, PageSizeSelector } from "@mantis-core/ui";`
6
- - Base library: custom pagination UI using `@mantis-core/utils`
7
- - Required styles: none
8
-
1
+ ---
2
+ name: Pagination
3
+ category: feedback
4
+ import: '@mantis-core/ui/components/ui/Pagination'
5
+ whenToUse: Standalone pagination control; use when not relying on PaginatedTable's built-in paginator.
6
+ baseLibrary: custom
7
+ relatedComponents: [PaginationInfo, PageSizeSelector]
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: totalRecords, type: number, required: true }
11
+ - { name: pageSize, type: number, required: true }
12
+ - { name: currentPage, type: number, required: true }
13
+ - { name: onPageChange, type: '(page: number) => void', required: true }
14
+ ---
9
15
  ## Example
10
16
 
11
17
  ```tsx
12
- <Pagination
13
- currentPage={page}
14
- totalPages={totalPages}
15
- onPageChange={setPage}
16
- maxVisible={5}
17
- />
18
-
19
- <PaginationInfo currentPage={page} pageSize={pageSize} totalCount={total} />
20
-
21
- <PageSizeSelector pageSize={pageSize} onPageSizeChange={setPageSize} />
18
+ <Pagination totalRecords={200} pageSize={20} currentPage={page} onPageChange={setPage} />
22
19
  ```
23
20
 
24
21
  ## Notes
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: PasswordInput
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/PasswordInput'
5
+ whenToUse: 'Password field with show/hide toggle; Controller pattern, same API as TextInput.'
6
+ baseLibrary: custom
7
+ formContract: ControllerProps
8
+ requiredStyles: [scss/inputs.scss]
9
+ relatedNextCore: []
10
+ props:
11
+ - { name: controller, type: ControllerProps, required: true }
12
+ - { name: block, type: boolean, required: false }
13
+ - { name: showToggle, type: boolean, required: false, default: 'true' }
14
+ ---
15
+ ## Example
16
+
17
+ ```tsx
18
+ <PasswordInput controller={{ name: 'password', rules: notEmptyRule() }} block />
19
+ ```
@@ -0,0 +1,18 @@
1
+ ---
2
+ name: PhoneInput
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/PhoneInput'
5
+ whenToUse: Masked phone number input; default mask (999) 999-9999.
6
+ baseLibrary: custom
7
+ formContract: ControllerProps
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: controller, type: ControllerProps, required: true }
11
+ - { name: mask, type: string, required: false, default: '''(999) 999-9999''' }
12
+ - { name: block, type: boolean, required: false }
13
+ ---
14
+ ## Example
15
+
16
+ ```tsx
17
+ <PhoneInput controller={{ name: 'phone', rules: { required: true } }} block />
18
+ ```
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: RadioGroup
3
+ category: forms
4
+ import: '@mantis-core/ui/components/Forms/RadioGroup'
5
+ whenToUse: Renders a set of radio buttons from an options array; value is the selected option's value.
6
+ baseLibrary: custom
7
+ formContract: ControllerProps
8
+ relatedNextCore: []
9
+ props:
10
+ - { name: controller, type: ControllerProps, required: true }
11
+ - { name: options, type: '{ label: string; value: any }[]', required: true }
12
+ - { name: block, type: boolean, required: false }
13
+ - { name: disabled, type: boolean, required: false }
14
+ - { name: className, type: string, required: false }
15
+ ---
16
+ ## Example
17
+
18
+ ```tsx
19
+ <RadioGroup controller={{ name: 'role' }} options={[{ label: 'Admin', value: 'admin' }, { label: 'User', value: 'user' }]} />
20
+ ```