@mantis-core/ui 0.5.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.
- package/CHANGELOG.md +144 -0
- package/COMPONENTS.md +71 -73
- package/README.md +13 -6
- package/catalog.json +3031 -0
- package/dist/components/Buttons/Button.d.ts +39 -9
- package/dist/components/Buttons/Button.d.ts.map +1 -1
- package/dist/components/Buttons/Button.js +21 -13
- package/dist/components/Buttons/Button.js.map +1 -1
- package/dist/components/Forms/AutoCompleteField.d.ts +60 -0
- package/dist/components/Forms/AutoCompleteField.d.ts.map +1 -0
- package/dist/components/Forms/AutoCompleteField.js +125 -0
- package/dist/components/Forms/AutoCompleteField.js.map +1 -0
- package/dist/components/Forms/CKEditorInput.d.ts +5 -2
- package/dist/components/Forms/CKEditorInput.d.ts.map +1 -1
- package/dist/components/Forms/CKEditorInput.js +5 -2
- package/dist/components/Forms/CKEditorInput.js.map +1 -1
- package/dist/components/Forms/CheckboxField.d.ts +14 -0
- package/dist/components/Forms/CheckboxField.d.ts.map +1 -0
- package/dist/components/Forms/CheckboxField.js +26 -0
- package/dist/components/Forms/CheckboxField.js.map +1 -0
- package/dist/components/Forms/ColorPickerInput.d.ts +27 -8
- package/dist/components/Forms/ColorPickerInput.d.ts.map +1 -1
- package/dist/components/Forms/ColorPickerInput.js +57 -11
- package/dist/components/Forms/ColorPickerInput.js.map +1 -1
- package/dist/components/Forms/DateField.d.ts +68 -0
- package/dist/components/Forms/DateField.d.ts.map +1 -0
- package/dist/components/Forms/DateField.js +108 -0
- package/dist/components/Forms/DateField.js.map +1 -0
- package/dist/components/Forms/DatePresets.d.ts.map +1 -1
- package/dist/components/Forms/DatePresets.js +6 -3
- package/dist/components/Forms/DatePresets.js.map +1 -1
- package/dist/components/Forms/FieldShell.d.ts +24 -0
- package/dist/components/Forms/FieldShell.d.ts.map +1 -0
- package/dist/components/Forms/FieldShell.js +39 -0
- package/dist/components/Forms/FieldShell.js.map +1 -0
- package/dist/components/Forms/FileDropzone.d.ts +4 -2
- package/dist/components/Forms/FileDropzone.d.ts.map +1 -1
- package/dist/components/Forms/FileDropzone.js.map +1 -1
- package/dist/components/Forms/FormActionsBar.js +2 -2
- package/dist/components/Forms/FormActionsBar.js.map +1 -1
- package/dist/components/Forms/FormWizard.d.ts +1 -1
- package/dist/components/Forms/FormWizard.d.ts.map +1 -1
- package/dist/components/Forms/FormWizard.js +4 -5
- package/dist/components/Forms/FormWizard.js.map +1 -1
- package/dist/components/Forms/HiddenField.d.ts +12 -6
- package/dist/components/Forms/HiddenField.d.ts.map +1 -1
- package/dist/components/Forms/HiddenField.js +14 -5
- package/dist/components/Forms/HiddenField.js.map +1 -1
- package/dist/components/Forms/MaskField.d.ts +28 -0
- package/dist/components/Forms/MaskField.d.ts.map +1 -0
- package/dist/components/Forms/MaskField.js +74 -0
- package/dist/components/Forms/MaskField.js.map +1 -0
- package/dist/components/Forms/NumberField.d.ts +14 -0
- package/dist/components/Forms/NumberField.d.ts.map +1 -0
- package/dist/components/Forms/NumberField.js +51 -0
- package/dist/components/Forms/NumberField.js.map +1 -0
- package/dist/components/Forms/OtpInput.d.ts +23 -8
- package/dist/components/Forms/OtpInput.d.ts.map +1 -1
- package/dist/components/Forms/OtpInput.js +37 -8
- package/dist/components/Forms/OtpInput.js.map +1 -1
- package/dist/components/Forms/PasswordInput.d.ts +22 -9
- package/dist/components/Forms/PasswordInput.d.ts.map +1 -1
- package/dist/components/Forms/PasswordInput.js +63 -28
- package/dist/components/Forms/PasswordInput.js.map +1 -1
- package/dist/components/Forms/PhoneInput.d.ts +16 -8
- package/dist/components/Forms/PhoneInput.d.ts.map +1 -1
- package/dist/components/Forms/PhoneInput.js +13 -6
- package/dist/components/Forms/PhoneInput.js.map +1 -1
- package/dist/components/Forms/RadioGroup.d.ts +34 -13
- package/dist/components/Forms/RadioGroup.d.ts.map +1 -1
- package/dist/components/Forms/RadioGroup.js +49 -6
- package/dist/components/Forms/RadioGroup.js.map +1 -1
- package/dist/components/Forms/RangeSlider.d.ts +26 -11
- package/dist/components/Forms/RangeSlider.d.ts.map +1 -1
- package/dist/components/Forms/RangeSlider.js +40 -7
- package/dist/components/Forms/RangeSlider.js.map +1 -1
- package/dist/components/Forms/RatingInput.d.ts +24 -8
- package/dist/components/Forms/RatingInput.d.ts.map +1 -1
- package/dist/components/Forms/RatingInput.js +41 -9
- package/dist/components/Forms/RatingInput.js.map +1 -1
- package/dist/components/Forms/SearchInput.d.ts +18 -10
- package/dist/components/Forms/SearchInput.d.ts.map +1 -1
- package/dist/components/Forms/SearchInput.js +44 -23
- package/dist/components/Forms/SearchInput.js.map +1 -1
- package/dist/components/Forms/SelectField.d.ts +41 -0
- package/dist/components/Forms/SelectField.d.ts.map +1 -0
- package/dist/components/Forms/SelectField.js +110 -0
- package/dist/components/Forms/SelectField.js.map +1 -0
- package/dist/components/Forms/SwitchField.d.ts +14 -0
- package/dist/components/Forms/SwitchField.d.ts.map +1 -0
- package/dist/components/Forms/SwitchField.js +26 -0
- package/dist/components/Forms/SwitchField.js.map +1 -0
- package/dist/components/Forms/TagsInput.d.ts +29 -8
- package/dist/components/Forms/TagsInput.d.ts.map +1 -1
- package/dist/components/Forms/TagsInput.js +53 -9
- package/dist/components/Forms/TagsInput.js.map +1 -1
- package/dist/components/Forms/TextArea.d.ts +13 -10
- package/dist/components/Forms/TextArea.d.ts.map +1 -1
- package/dist/components/Forms/TextArea.js +27 -9
- package/dist/components/Forms/TextArea.js.map +1 -1
- package/dist/components/Forms/TextField.d.ts +14 -0
- package/dist/components/Forms/TextField.d.ts.map +1 -0
- package/dist/components/Forms/TextField.js +29 -0
- package/dist/components/Forms/TextField.js.map +1 -0
- package/dist/components/Forms/ToggleInlineButton.d.ts +33 -12
- package/dist/components/Forms/ToggleInlineButton.d.ts.map +1 -1
- package/dist/components/Forms/ToggleInlineButton.js +56 -6
- package/dist/components/Forms/ToggleInlineButton.js.map +1 -1
- package/dist/components/Forms/UploadFilesPreview.js +3 -3
- package/dist/components/Forms/UploadFilesPreview.js.map +1 -1
- package/dist/components/Forms/field-typing.test-d.d.ts +2 -0
- package/dist/components/Forms/field-typing.test-d.d.ts.map +1 -0
- package/dist/components/Forms/field-typing.test-d.js +24 -0
- package/dist/components/Forms/field-typing.test-d.js.map +1 -0
- package/dist/components/Forms/useFieldController.d.ts +85 -0
- package/dist/components/Forms/useFieldController.d.ts.map +1 -0
- package/dist/components/Forms/useFieldController.js +54 -0
- package/dist/components/Forms/useFieldController.js.map +1 -0
- package/dist/components/Loaders/Loading.d.ts.map +1 -1
- package/dist/components/Loaders/Loading.js +3 -2
- package/dist/components/Loaders/Loading.js.map +1 -1
- package/dist/components/Tables/ActionColumn.d.ts +20 -4
- package/dist/components/Tables/ActionColumn.d.ts.map +1 -1
- package/dist/components/Tables/ActionColumn.js +24 -5
- package/dist/components/Tables/ActionColumn.js.map +1 -1
- package/dist/components/Tables/FilterPannel.d.ts +9 -2
- package/dist/components/Tables/FilterPannel.d.ts.map +1 -1
- package/dist/components/Tables/FilterPannel.js +15 -11
- package/dist/components/Tables/FilterPannel.js.map +1 -1
- package/dist/components/Tables/IndexColumn.d.ts +12 -3
- package/dist/components/Tables/IndexColumn.d.ts.map +1 -1
- package/dist/components/Tables/IndexColumn.js +21 -5
- package/dist/components/Tables/IndexColumn.js.map +1 -1
- package/dist/components/Tables/MantisDataTable.d.ts +45 -0
- package/dist/components/Tables/MantisDataTable.d.ts.map +1 -0
- package/dist/components/Tables/MantisDataTable.js +63 -0
- package/dist/components/Tables/MantisDataTable.js.map +1 -0
- package/dist/components/Tables/MenuButton.d.ts +28 -7
- package/dist/components/Tables/MenuButton.d.ts.map +1 -1
- package/dist/components/Tables/MenuButton.js +20 -10
- package/dist/components/Tables/MenuButton.js.map +1 -1
- package/dist/components/Tables/PaginatedTable.d.ts +26 -17
- package/dist/components/Tables/PaginatedTable.d.ts.map +1 -1
- package/dist/components/Tables/PaginatedTable.js +24 -22
- package/dist/components/Tables/PaginatedTable.js.map +1 -1
- package/dist/components/Tables/cell-presets.d.ts +35 -0
- package/dist/components/Tables/cell-presets.d.ts.map +1 -0
- package/dist/components/Tables/cell-presets.js +40 -0
- package/dist/components/Tables/cell-presets.js.map +1 -0
- package/dist/components/Tables/columns.d.ts +40 -0
- package/dist/components/Tables/columns.d.ts.map +1 -0
- package/dist/components/Tables/columns.js +2 -0
- package/dist/components/Tables/columns.js.map +1 -0
- package/dist/components/Tables/filters/MultiSelectFilter.d.ts +24 -6
- package/dist/components/Tables/filters/MultiSelectFilter.d.ts.map +1 -1
- package/dist/components/Tables/filters/MultiSelectFilter.js +19 -6
- package/dist/components/Tables/filters/MultiSelectFilter.js.map +1 -1
- package/dist/components/auth/ChangePasswordForm.d.ts.map +1 -1
- package/dist/components/auth/ChangePasswordForm.js +12 -12
- package/dist/components/auth/ChangePasswordForm.js.map +1 -1
- package/dist/components/auth/ForgotPasswordForm.d.ts.map +1 -1
- package/dist/components/auth/ForgotPasswordForm.js +7 -5
- package/dist/components/auth/ForgotPasswordForm.js.map +1 -1
- package/dist/components/auth/LoginForm.d.ts +2 -2
- package/dist/components/auth/LoginForm.d.ts.map +1 -1
- package/dist/components/auth/LoginForm.js +15 -15
- package/dist/components/auth/LoginForm.js.map +1 -1
- package/dist/components/auth/ResetPasswordForm.d.ts.map +1 -1
- package/dist/components/auth/ResetPasswordForm.js +11 -12
- package/dist/components/auth/ResetPasswordForm.js.map +1 -1
- package/dist/components/auth/UserMenu.d.ts +11 -1
- package/dist/components/auth/UserMenu.d.ts.map +1 -1
- package/dist/components/auth/UserMenu.js +30 -87
- package/dist/components/auth/UserMenu.js.map +1 -1
- package/dist/components/data/Timeline.d.ts +2 -2
- package/dist/components/data/Timeline.d.ts.map +1 -1
- package/dist/components/data/Timeline.js +17 -17
- package/dist/components/data/Timeline.js.map +1 -1
- package/dist/components/feedback/Avatar.d.ts +4 -2
- package/dist/components/feedback/Avatar.d.ts.map +1 -1
- package/dist/components/feedback/Avatar.js +4 -4
- package/dist/components/feedback/Avatar.js.map +1 -1
- package/dist/components/feedback/CardSkeleton.d.ts.map +1 -1
- package/dist/components/feedback/CardSkeleton.js +3 -3
- package/dist/components/feedback/CardSkeleton.js.map +1 -1
- package/dist/components/feedback/TableSkeleton.d.ts.map +1 -1
- package/dist/components/feedback/TableSkeleton.js +3 -3
- package/dist/components/feedback/TableSkeleton.js.map +1 -1
- package/dist/components/feedback/Tag.d.ts +4 -2
- package/dist/components/feedback/Tag.d.ts.map +1 -1
- package/dist/components/feedback/Tag.js +4 -4
- package/dist/components/feedback/Tag.js.map +1 -1
- package/dist/components/navigation/CommandPalette.d.ts.map +1 -1
- package/dist/components/navigation/CommandPalette.js +5 -2
- package/dist/components/navigation/CommandPalette.js.map +1 -1
- package/dist/components/navigation/PageTabs.d.ts +10 -8
- package/dist/components/navigation/PageTabs.d.ts.map +1 -1
- package/dist/components/navigation/PageTabs.js +17 -13
- package/dist/components/navigation/PageTabs.js.map +1 -1
- package/dist/components/overlays/Drawer.d.ts +16 -3
- package/dist/components/overlays/Drawer.d.ts.map +1 -1
- package/dist/components/overlays/Drawer.js +9 -5
- package/dist/components/overlays/Drawer.js.map +1 -1
- package/dist/components/overlays/Modal.d.ts +18 -3
- package/dist/components/overlays/Modal.d.ts.map +1 -1
- package/dist/components/overlays/Modal.js +13 -5
- package/dist/components/overlays/Modal.js.map +1 -1
- package/dist/components/pages/app-shell/AppShell.d.ts.map +1 -1
- package/dist/components/pages/app-shell/AppShell.js +6 -6
- package/dist/components/pages/app-shell/AppShell.js.map +1 -1
- package/dist/components/ui/ConfirmDialog.d.ts +1 -2
- package/dist/components/ui/ConfirmDialog.d.ts.map +1 -1
- package/dist/components/ui/ConfirmDialog.js +10 -4
- package/dist/components/ui/ConfirmDialog.js.map +1 -1
- package/dist/components/ui/DataState.js +2 -2
- package/dist/components/ui/DataState.js.map +1 -1
- package/dist/index.d.ts +71 -42
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +114 -22
- package/dist/index.js.map +1 -1
- package/docs/README.md +1 -1
- package/docs/components/action-column.md +33 -7
- package/docs/components/admin-page-configurator.md +24 -5
- package/docs/components/admin-page-header.md +21 -3
- package/docs/components/admin-page-layout-shell.md +18 -4
- package/docs/components/admin-page-layout.md +34 -5
- package/docs/components/app-shell.md +31 -6
- package/docs/components/auto-complete-field.md +60 -0
- package/docs/components/avatar.md +18 -8
- package/docs/components/bar-chart.md +25 -7
- package/docs/components/breadcrumbs.md +15 -2
- package/docs/components/button.md +34 -15
- package/docs/components/card-skeleton.md +9 -3
- package/docs/components/change-password-form.md +23 -4
- package/docs/components/checkbox-field.md +38 -0
- package/docs/components/ckeditor-input.md +40 -8
- package/docs/components/color-picker-input.md +19 -8
- package/docs/components/command-palette.md +23 -2
- package/docs/components/confirm-dialog.md +36 -9
- package/docs/components/data-state.md +31 -6
- package/docs/components/date-field.md +39 -0
- package/docs/components/date-presets.md +19 -5
- package/docs/components/description-list.md +20 -2
- package/docs/components/dirty-form-guard.md +16 -4
- package/docs/components/donut-chart.md +24 -7
- package/docs/components/drawer.md +27 -8
- package/docs/components/empty-state.md +12 -2
- package/docs/components/error-boundary.md +16 -2
- package/docs/components/error-message.md +22 -3
- package/docs/components/field-shell.md +47 -0
- package/docs/components/file-dropzone.md +22 -6
- package/docs/components/filter-pannel.md +34 -7
- package/docs/components/forgot-password-form.md +23 -5
- package/docs/components/form-actions-bar.md +21 -2
- package/docs/components/form-field-render.md +36 -8
- package/docs/components/form-section.md +13 -1
- package/docs/components/form-wizard.md +34 -5
- package/docs/components/hidden-field.md +22 -6
- package/docs/components/index-column.md +25 -5
- package/docs/components/line-chart.md +25 -7
- package/docs/components/loading.md +14 -5
- package/docs/components/login-form.md +31 -6
- package/docs/components/mantis-data-table.md +61 -0
- package/docs/components/map-picker-client.md +29 -8
- package/docs/components/map-picker-osm.md +27 -9
- package/docs/components/map-picker.md +25 -4
- package/docs/components/mask-field.md +31 -0
- package/docs/components/menu-button.md +22 -7
- package/docs/components/modal.md +34 -9
- package/docs/components/multi-select-filter.md +25 -7
- package/docs/components/number-field.md +40 -0
- package/docs/components/otp-input.md +20 -7
- package/docs/components/page-tabs.md +23 -4
- package/docs/components/page-title.md +6 -1
- package/docs/components/paginated-table.md +36 -13
- package/docs/components/pagination.md +20 -7
- package/docs/components/password-input.md +20 -8
- package/docs/components/phone-input.md +17 -7
- package/docs/components/radio-group.md +39 -9
- package/docs/components/range-slider.md +18 -6
- package/docs/components/rating-input.md +19 -8
- package/docs/components/render-field.md +31 -3
- package/docs/components/reset-password-form.md +24 -4
- package/docs/components/rich-text-preview.md +17 -5
- package/docs/components/search-input.md +18 -7
- package/docs/components/select-field.md +55 -0
- package/docs/components/stat-card.md +14 -3
- package/docs/components/status-badge.md +17 -7
- package/docs/components/switch-field.md +32 -0
- package/docs/components/table-filter-field.md +22 -4
- package/docs/components/table-skeleton.md +9 -3
- package/docs/components/table-toolbar.md +18 -5
- package/docs/components/tag.md +16 -7
- package/docs/components/tags-input.md +21 -8
- package/docs/components/text-area.md +18 -8
- package/docs/components/text-field.md +32 -0
- package/docs/components/timeline.md +19 -3
- package/docs/components/toggle-inline-button.md +42 -10
- package/docs/components/upload-files-preview.md +23 -2
- package/docs/components/use-field-controller.md +58 -0
- package/docs/components/user-menu.md +26 -6
- package/docs/contracts/STORYBOOK_IMPLEMENTATION_AND_VOBO.md +92 -0
- package/docs/contracts/STORYBOOK_VOBO_LEDGER.md +195 -0
- package/docs/contracts/component-doc-schema.md +57 -15
- package/docs/contracts/dependency-map.md +50 -52
- package/docs/contracts/field-controller.md +138 -0
- package/docs/contracts/style-imports.md +1 -20
- package/llms.txt +70 -72
- package/package.json +39 -10
- package/dist/components/Forms/AsyncSelect.d.ts +0 -20
- package/dist/components/Forms/AsyncSelect.d.ts.map +0 -1
- package/dist/components/Forms/AsyncSelect.js +0 -77
- package/dist/components/Forms/AsyncSelect.js.map +0 -1
- package/dist/components/Forms/Combobox.d.ts +0 -10
- package/dist/components/Forms/Combobox.d.ts.map +0 -1
- package/dist/components/Forms/Combobox.js +0 -11
- package/dist/components/Forms/Combobox.js.map +0 -1
- package/dist/components/Forms/CurrencyInput.d.ts +0 -12
- package/dist/components/Forms/CurrencyInput.d.ts.map +0 -1
- package/dist/components/Forms/CurrencyInput.js +0 -9
- package/dist/components/Forms/CurrencyInput.js.map +0 -1
- package/dist/components/Forms/DateInput.d.ts +0 -10
- package/dist/components/Forms/DateInput.d.ts.map +0 -1
- package/dist/components/Forms/DateInput.js +0 -11
- package/dist/components/Forms/DateInput.js.map +0 -1
- package/dist/components/Forms/DateRangeInput.d.ts +0 -10
- package/dist/components/Forms/DateRangeInput.d.ts.map +0 -1
- package/dist/components/Forms/DateRangeInput.js +0 -13
- package/dist/components/Forms/DateRangeInput.js.map +0 -1
- package/dist/components/Forms/DropDown.d.ts +0 -10
- package/dist/components/Forms/DropDown.d.ts.map +0 -1
- package/dist/components/Forms/DropDown.js +0 -11
- package/dist/components/Forms/DropDown.js.map +0 -1
- package/dist/components/Forms/MultiSelect.d.ts +0 -10
- package/dist/components/Forms/MultiSelect.d.ts.map +0 -1
- package/dist/components/Forms/MultiSelect.js +0 -13
- package/dist/components/Forms/MultiSelect.js.map +0 -1
- package/dist/components/Forms/NumberInput.d.ts +0 -10
- package/dist/components/Forms/NumberInput.d.ts.map +0 -1
- package/dist/components/Forms/NumberInput.js +0 -16
- package/dist/components/Forms/NumberInput.js.map +0 -1
- package/dist/components/Forms/Select.d.ts +0 -15
- package/dist/components/Forms/Select.d.ts.map +0 -1
- package/dist/components/Forms/Select.js +0 -48
- package/dist/components/Forms/Select.js.map +0 -1
- package/dist/components/Forms/Switch.d.ts +0 -18
- package/dist/components/Forms/Switch.d.ts.map +0 -1
- package/dist/components/Forms/Switch.js +0 -30
- package/dist/components/Forms/Switch.js.map +0 -1
- package/dist/components/Forms/TextInput.d.ts +0 -11
- package/dist/components/Forms/TextInput.d.ts.map +0 -1
- package/dist/components/Forms/TextInput.js +0 -12
- package/dist/components/Forms/TextInput.js.map +0 -1
- package/dist/components/Forms/TimePicker.d.ts +0 -13
- package/dist/components/Forms/TimePicker.d.ts.map +0 -1
- package/dist/components/Forms/TimePicker.js +0 -19
- package/dist/components/Forms/TimePicker.js.map +0 -1
- package/dist/components/Forms/Toggle.d.ts +0 -14
- package/dist/components/Forms/Toggle.d.ts.map +0 -1
- package/dist/components/Forms/Toggle.js +0 -10
- package/dist/components/Forms/Toggle.js.map +0 -1
- package/dist/components/Forms/types.d.ts +0 -9
- package/dist/components/Forms/types.d.ts.map +0 -1
- package/dist/components/Forms/types.js +0 -2
- package/dist/components/Forms/types.js.map +0 -1
- package/docs/components/async-select.md +0 -27
- package/docs/components/combobox.md +0 -19
- package/docs/components/currency-input.md +0 -21
- package/docs/components/date-input.md +0 -21
- package/docs/components/date-range-input.md +0 -20
- package/docs/components/drop-down.md +0 -26
- package/docs/components/multi-select.md +0 -22
- package/docs/components/number-input.md +0 -21
- package/docs/components/select.md +0 -28
- package/docs/components/switch.md +0 -24
- package/docs/components/text-input.md +0 -24
- package/docs/components/time-picker.md +0 -25
- package/docs/components/toggle.md +0 -24
- package/docs/contracts/controller-props.md +0 -28
|
@@ -1,20 +1,49 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: AdminPageLayout
|
|
3
3
|
category: pages
|
|
4
|
-
whenToUse: Overview of the admin page layout system — Provider
|
|
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
5
|
baseLibrary: React context + custom shell
|
|
6
|
+
relatedComponents: ['AdminPageConfigurator', 'AdminPageLayoutShell', 'AdminPageHeader']
|
|
6
7
|
relatedNextCore: []
|
|
7
8
|
props: []
|
|
8
9
|
---
|
|
10
|
+
|
|
9
11
|
## Example
|
|
10
12
|
|
|
11
13
|
```tsx
|
|
12
|
-
{
|
|
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
|
+
}
|
|
13
35
|
```
|
|
14
36
|
|
|
15
37
|
## Notes
|
|
16
38
|
|
|
17
|
-
> Overview doc —
|
|
39
|
+
> Overview doc — each export below has its own entry with the full prop list.
|
|
18
40
|
|
|
19
|
-
- `
|
|
20
|
-
|
|
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.
|
|
@@ -2,19 +2,44 @@
|
|
|
2
2
|
name: AppShell
|
|
3
3
|
category: pages
|
|
4
4
|
import: '@mantis-core/ui/components/pages/app-shell/AppShell'
|
|
5
|
-
whenToUse:
|
|
5
|
+
whenToUse: Full-page app shell with responsive sidebar nav, topbar, and mobile drawer; use as the root layout wrapper for authenticated pages.
|
|
6
6
|
baseLibrary: custom
|
|
7
|
+
relatedComponents: ['Drawer', 'Breadcrumbs']
|
|
7
8
|
relatedNextCore: []
|
|
8
9
|
props:
|
|
9
|
-
- { name: navItems, type: 'AppNavItem[]', required: true }
|
|
10
|
+
- { name: navItems, type: 'AppNavItem[]', required: true, description: 'Each item: { label, href?, icon?, children? }. Items with children render as a collapsible group.' }
|
|
10
11
|
- { name: children, type: ReactNode, required: true }
|
|
11
|
-
- { name: brand, type: ReactNode, required: false }
|
|
12
|
+
- { name: brand, type: ReactNode, required: false, description: 'Logo/name slot rendered in the sidebar header and mobile topbar.' }
|
|
12
13
|
- { name: topbarActions, type: ReactNode, required: false }
|
|
13
|
-
- { name: user, type: ReactNode, required: false }
|
|
14
|
-
- { name: footer, 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 }
|
|
15
18
|
---
|
|
19
|
+
|
|
16
20
|
## Example
|
|
17
21
|
|
|
18
22
|
```tsx
|
|
19
|
-
|
|
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
|
+
}
|
|
20
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.
|
|
@@ -2,18 +2,28 @@
|
|
|
2
2
|
name: Avatar
|
|
3
3
|
category: feedback
|
|
4
4
|
import: '@mantis-core/ui/components/feedback/Avatar'
|
|
5
|
-
whenToUse: User avatar that
|
|
6
|
-
baseLibrary:
|
|
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']
|
|
7
8
|
relatedNextCore: []
|
|
8
9
|
props:
|
|
9
|
-
- { name: name, type: string, required: false }
|
|
10
|
-
- { name: image, type: string, required: false }
|
|
11
|
-
- { name: label, type: string, required: false }
|
|
12
|
-
- { name: size, type: '
|
|
13
|
-
- { name: shape, type: ''
|
|
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'" }
|
|
14
15
|
---
|
|
16
|
+
|
|
15
17
|
## Example
|
|
16
18
|
|
|
17
19
|
```tsx
|
|
18
|
-
|
|
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
|
+
}
|
|
19
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.
|
|
@@ -2,20 +2,38 @@
|
|
|
2
2
|
name: BarChart
|
|
3
3
|
category: charts
|
|
4
4
|
import: '@mantis-core/ui/components/charts/BarChart'
|
|
5
|
-
whenToUse: Categorical comparisons rendered as a bar chart
|
|
6
|
-
baseLibrary:
|
|
5
|
+
whenToUse: Categorical comparisons rendered as a bar chart, zero-config over chart.js defaults.
|
|
6
|
+
baseLibrary: chart.js
|
|
7
|
+
requiredStyles: []
|
|
7
8
|
relatedComponents: [LineChart, DonutChart]
|
|
8
9
|
relatedNextCore: []
|
|
9
10
|
props:
|
|
10
11
|
- { name: labels, type: 'string[]', required: true }
|
|
11
|
-
- { name: datasets, type: 'BarChartDataset[]', required: true }
|
|
12
|
-
- { name: options, type: 'ChartOptions<''bar''>', required: false }
|
|
13
|
-
- { name: colors, type: 'string[]', required: false, default: DEFAULT_COLORS palette }
|
|
14
|
-
- { name: height, type: number, required: false, default: '300' }
|
|
12
|
+
- { name: datasets, type: '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.' }
|
|
15
16
|
- { name: className, type: string, required: false }
|
|
16
17
|
---
|
|
18
|
+
|
|
17
19
|
## Example
|
|
18
20
|
|
|
19
21
|
```tsx
|
|
20
|
-
|
|
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
|
+
}
|
|
21
32
|
```
|
|
33
|
+
|
|
34
|
+
## Notes
|
|
35
|
+
|
|
36
|
+
- Not re-exported from the package root — import from the deep path above (`@mantis-core/ui/components/charts/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`.
|
|
@@ -4,12 +4,25 @@ category: pages
|
|
|
4
4
|
import: '@mantis-core/ui/components/pages/app-shell/Breadcrumbs'
|
|
5
5
|
whenToUse: Standalone breadcrumb nav; renders nothing when items is empty.
|
|
6
6
|
baseLibrary: custom
|
|
7
|
+
relatedComponents: ['AdminPageHeader']
|
|
7
8
|
relatedNextCore: []
|
|
8
9
|
props:
|
|
9
|
-
- { name: items, type: 'readonly AdminBreadcrumbItem[]', required: true }
|
|
10
|
+
- { name: items, type: 'readonly AdminBreadcrumbItem[]', required: true, description: 'Each item: { label, href? }. The last item never links even if it has an href.' }
|
|
10
11
|
---
|
|
12
|
+
|
|
11
13
|
## Example
|
|
12
14
|
|
|
13
15
|
```tsx
|
|
14
|
-
|
|
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
|
+
}
|
|
15
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.
|
|
@@ -2,29 +2,48 @@
|
|
|
2
2
|
name: Button
|
|
3
3
|
category: buttons
|
|
4
4
|
import: '@mantis-core/ui/components/Buttons/Button'
|
|
5
|
-
whenToUse: Primary action button; wraps
|
|
6
|
-
baseLibrary: primereact/button
|
|
7
|
-
|
|
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
8
|
relatedNextCore: []
|
|
9
9
|
props:
|
|
10
|
-
- { name: variant, type: '
|
|
11
|
-
- { name:
|
|
12
|
-
- { name:
|
|
13
|
-
- { name:
|
|
14
|
-
- { name:
|
|
15
|
-
- { name:
|
|
16
|
-
- { name:
|
|
17
|
-
- { name:
|
|
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'" }
|
|
18
22
|
- { name: disabled, type: boolean, required: false }
|
|
23
|
+
- { name: onClick, type: '(evt: MouseEvent<HTMLButtonElement>) => void', required: false }
|
|
24
|
+
- { name: children, type: ReactNode, required: false }
|
|
19
25
|
---
|
|
26
|
+
|
|
20
27
|
## Example
|
|
21
28
|
|
|
22
29
|
```tsx
|
|
23
|
-
|
|
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
|
+
}
|
|
24
43
|
```
|
|
25
44
|
|
|
26
45
|
## Notes
|
|
27
46
|
|
|
28
|
-
-
|
|
29
|
-
- `
|
|
30
|
-
-
|
|
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.
|
|
@@ -2,14 +2,20 @@
|
|
|
2
2
|
name: CardSkeleton
|
|
3
3
|
category: feedback
|
|
4
4
|
import: '@mantis-core/ui/components/feedback/CardSkeleton'
|
|
5
|
-
whenToUse: Animated skeleton for card
|
|
6
|
-
baseLibrary:
|
|
5
|
+
whenToUse: Animated skeleton for card-grid layouts while data loads; composes the PR11 Skeleton primitive.
|
|
6
|
+
baseLibrary: '@primereact/ui/skeleton'
|
|
7
|
+
relatedComponents: ['TableSkeleton']
|
|
7
8
|
relatedNextCore: []
|
|
8
9
|
props:
|
|
9
10
|
- { name: count, type: number, required: false, default: '3' }
|
|
10
11
|
---
|
|
12
|
+
|
|
11
13
|
## Example
|
|
12
14
|
|
|
13
15
|
```tsx
|
|
14
|
-
|
|
16
|
+
import CardSkeleton from '@mantis-core/ui/components/feedback/CardSkeleton';
|
|
17
|
+
|
|
18
|
+
function Example() {
|
|
19
|
+
return <CardSkeleton count={6} />;
|
|
20
|
+
}
|
|
15
21
|
```
|
|
@@ -2,16 +2,35 @@
|
|
|
2
2
|
name: ChangePasswordForm
|
|
3
3
|
category: auth
|
|
4
4
|
import: '@mantis-core/ui/components/auth/ChangePasswordForm'
|
|
5
|
-
whenToUse: Current + new + confirm password form for authenticated
|
|
5
|
+
whenToUse: Current + new + confirm password form for an authenticated user changing their own password.
|
|
6
6
|
baseLibrary: custom
|
|
7
|
+
requiredStyles: []
|
|
8
|
+
relatedComponents: [ResetPasswordForm, LoginForm]
|
|
7
9
|
relatedNextCore: []
|
|
8
10
|
props:
|
|
9
|
-
- { name: onSubmit, type: '(values: ChangePasswordFormValues) => void | Promise<void>', required: true }
|
|
10
|
-
- { name:
|
|
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.' }
|
|
11
15
|
- { name: className, type: string, required: false }
|
|
12
16
|
---
|
|
17
|
+
|
|
13
18
|
## Example
|
|
14
19
|
|
|
15
20
|
```tsx
|
|
16
|
-
|
|
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
|
+
}
|
|
17
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`.
|
|
@@ -2,22 +2,54 @@
|
|
|
2
2
|
name: CKEditorInput
|
|
3
3
|
category: forms
|
|
4
4
|
import: '@mantis-core/ui/components/Forms/CKEditorInput'
|
|
5
|
-
whenToUse: Rich-text WYSIWYG editor (CKEditor 5) wired to react-hook-form; emits HTML string.
|
|
6
|
-
baseLibrary:
|
|
7
|
-
formContract: ControllerProps
|
|
5
|
+
whenToUse: Rich-text WYSIWYG editor (CKEditor 5) wired to react-hook-form; emits an HTML string.
|
|
6
|
+
baseLibrary: ckeditor
|
|
8
7
|
requiredStyles: [scss/ckeditor.scss]
|
|
9
|
-
relatedComponents: [
|
|
8
|
+
relatedComponents: [RichTextPreview]
|
|
10
9
|
relatedNextCore: []
|
|
11
10
|
props:
|
|
12
|
-
- { name: controller, type:
|
|
13
|
-
- { name:
|
|
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 }`.' }
|
|
14
28
|
---
|
|
29
|
+
|
|
15
30
|
## Example
|
|
16
31
|
|
|
17
32
|
```tsx
|
|
18
|
-
|
|
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
|
+
}
|
|
19
45
|
```
|
|
20
46
|
|
|
21
47
|
## Notes
|
|
22
48
|
|
|
23
|
-
-
|
|
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.
|
|
@@ -2,18 +2,29 @@
|
|
|
2
2
|
name: ColorPickerInput
|
|
3
3
|
category: forms
|
|
4
4
|
import: '@mantis-core/ui/components/Forms/ColorPickerInput'
|
|
5
|
-
whenToUse:
|
|
6
|
-
baseLibrary:
|
|
7
|
-
formContract:
|
|
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: []
|
|
8
9
|
relatedNextCore: []
|
|
9
10
|
props:
|
|
10
|
-
- { name:
|
|
11
|
-
- { name: format, type: '''hex'' | ''rgb'' | ''hsb''', required: false, default: '''hex''' }
|
|
12
|
-
- { name: inline, type: boolean, required: false }
|
|
13
|
-
- { name: block, type: boolean, required: false }
|
|
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.' }
|
|
14
12
|
---
|
|
13
|
+
|
|
15
14
|
## Example
|
|
16
15
|
|
|
17
16
|
```tsx
|
|
18
|
-
|
|
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
|
+
}
|
|
19
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`.
|
|
@@ -2,16 +2,37 @@
|
|
|
2
2
|
name: CommandPalette
|
|
3
3
|
category: navigation
|
|
4
4
|
import: '@mantis-core/ui/components/navigation/CommandPalette'
|
|
5
|
-
whenToUse: Keyboard-driven command search overlay (Ctrl+K); pair with useCommandPalette hook to wire the shortcut.
|
|
5
|
+
whenToUse: Keyboard-driven command search overlay (Ctrl/Cmd+K); pair with the `useCommandPalette` hook to wire the shortcut.
|
|
6
6
|
baseLibrary: custom
|
|
7
|
+
relatedComponents: ['Modal']
|
|
7
8
|
relatedNextCore: []
|
|
8
9
|
props:
|
|
9
10
|
- { name: commands, type: '{ id: string; label: string; icon?: ReactNode; keywords?: string[]; onSelect: () => void }[]', required: true }
|
|
10
11
|
- { name: open, type: boolean, required: false, default: 'false' }
|
|
11
12
|
- { name: onOpenChange, type: '(open: boolean) => void', required: false }
|
|
12
13
|
---
|
|
14
|
+
|
|
13
15
|
## Example
|
|
14
16
|
|
|
15
17
|
```tsx
|
|
16
|
-
|
|
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
|
+
}
|
|
17
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.
|