@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.
- package/CHANGELOG.md +144 -0
- package/COMPONENTS.md +113 -15
- 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 +39 -12
- package/docs/components/admin-page-configurator.md +42 -0
- package/docs/components/admin-page-header.md +32 -16
- package/docs/components/admin-page-layout-shell.md +36 -0
- package/docs/components/admin-page-layout.md +41 -21
- package/docs/components/app-shell.md +45 -0
- package/docs/components/auto-complete-field.md +60 -0
- package/docs/components/avatar.md +29 -0
- package/docs/components/bar-chart.md +39 -0
- package/docs/components/breadcrumbs.md +28 -0
- package/docs/components/button.md +41 -17
- package/docs/components/card-skeleton.md +21 -0
- package/docs/components/change-password-form.md +36 -0
- package/docs/components/checkbox-field.md +38 -0
- package/docs/components/ckeditor-input.md +47 -16
- package/docs/components/color-picker-input.md +30 -0
- package/docs/components/command-palette.md +38 -0
- package/docs/components/confirm-dialog.md +45 -16
- package/docs/components/data-state.md +39 -14
- package/docs/components/date-field.md +39 -0
- package/docs/components/date-presets.md +32 -0
- package/docs/components/description-list.md +34 -0
- package/docs/components/dirty-form-guard.md +28 -24
- package/docs/components/donut-chart.md +38 -0
- package/docs/components/drawer.md +38 -0
- package/docs/components/empty-state.md +28 -0
- package/docs/components/error-boundary.md +31 -0
- package/docs/components/error-message.md +29 -8
- package/docs/components/field-shell.md +47 -0
- package/docs/components/file-dropzone.md +45 -17
- package/docs/components/filter-pannel.md +40 -15
- package/docs/components/forgot-password-form.md +36 -0
- package/docs/components/form-actions-bar.md +47 -17
- package/docs/components/form-field-render.md +43 -15
- package/docs/components/form-section.md +26 -10
- package/docs/components/form-wizard.md +47 -0
- package/docs/components/hidden-field.md +27 -14
- package/docs/components/index-column.md +31 -8
- package/docs/components/line-chart.md +39 -0
- package/docs/components/loading.md +23 -12
- package/docs/components/login-form.md +47 -0
- package/docs/components/mantis-data-table.md +61 -0
- package/docs/components/map-picker-client.md +35 -14
- package/docs/components/map-picker-osm.md +33 -13
- package/docs/components/map-picker.md +34 -16
- package/docs/components/mask-field.md +31 -0
- package/docs/components/menu-button.md +28 -17
- package/docs/components/modal.md +45 -0
- package/docs/components/multi-select-filter.md +31 -15
- package/docs/components/number-field.md +40 -0
- package/docs/components/otp-input.md +31 -0
- package/docs/components/page-tabs.md +35 -0
- package/docs/components/page-title.md +15 -8
- package/docs/components/paginated-table.md +42 -26
- package/docs/components/pagination.md +28 -18
- package/docs/components/password-input.md +31 -0
- package/docs/components/phone-input.md +28 -0
- package/docs/components/radio-group.md +50 -0
- package/docs/components/range-slider.md +32 -0
- package/docs/components/rating-input.md +30 -0
- package/docs/components/render-field.md +41 -18
- package/docs/components/reset-password-form.md +37 -0
- package/docs/components/rich-text-preview.md +26 -13
- package/docs/components/search-input.md +30 -0
- package/docs/components/select-field.md +55 -0
- package/docs/components/stat-card.md +30 -0
- package/docs/components/status-badge.md +25 -9
- package/docs/components/switch-field.md +32 -0
- package/docs/components/table-filter-field.md +30 -16
- package/docs/components/table-skeleton.md +22 -0
- package/docs/components/table-toolbar.md +28 -14
- package/docs/components/tag.md +27 -0
- package/docs/components/tags-input.md +32 -0
- package/docs/components/text-area.md +25 -15
- package/docs/components/text-field.md +32 -0
- package/docs/components/timeline.md +31 -0
- package/docs/components/toggle-inline-button.md +48 -17
- package/docs/components/upload-files-preview.md +39 -20
- package/docs/components/use-field-controller.md +58 -0
- package/docs/components/user-menu.md +39 -0
- 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 +120 -0
- package/docs/contracts/dependency-map.md +76 -39
- package/docs/contracts/field-controller.md +138 -0
- package/docs/contracts/style-imports.md +21 -14
- package/llms.txt +104 -0
- package/package.json +39 -10
- package/PRIMEREACT_MAPPING.md +0 -6
- 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 -26
- package/docs/components/date-input.md +0 -22
- package/docs/components/drop-down.md +0 -28
- package/docs/components/multi-select.md +0 -23
- package/docs/components/number-input.md +0 -20
- package/docs/components/select.md +0 -28
- package/docs/components/switch.md +0 -27
- package/docs/components/text-input.md +0 -23
- package/docs/components/time-picker.md +0 -22
- package/docs/components/toggle.md +0 -21
- package/docs/contracts/controller-props.md +0 -28
|
@@ -1,21 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
---
|
|
2
|
+
name: ConfirmDialog
|
|
3
|
+
category: feedback
|
|
4
|
+
import: '@mantis-core/ui/components/ui/ConfirmDialog'
|
|
5
|
+
whenToUse: Confirm/cancel dialog for destructive or non-trivial actions; composed from the migrated Modal + Button.
|
|
6
|
+
baseLibrary: custom
|
|
7
|
+
requiredStyles: [scss/confirm-dialog.scss]
|
|
8
|
+
relatedComponents: ['Modal', 'Button']
|
|
9
|
+
relatedNextCore: []
|
|
10
|
+
props:
|
|
11
|
+
- { name: visible, type: boolean, required: true }
|
|
12
|
+
- { name: onConfirm, type: '() => void | Promise<void>', required: true }
|
|
13
|
+
- { name: onCancel, type: '() => void', required: true }
|
|
14
|
+
- { name: title, type: ReactNode, required: false, default: "'Confirmar accion'" }
|
|
15
|
+
- { name: message, type: ReactNode, required: false, default: "'Esta accion no se puede deshacer.'" }
|
|
16
|
+
- { name: icon, type: ReactNode, required: false }
|
|
17
|
+
- { name: confirmLabel, type: string, required: false, default: "'Confirmar'" }
|
|
18
|
+
- { name: cancelLabel, type: string, required: false, default: "'Cancelar'" }
|
|
19
|
+
- { name: confirmSeverity, type: "'primary' | 'info' | 'success' | 'warning' | 'danger'", required: false, default: "'danger'" }
|
|
20
|
+
- { name: loading, type: boolean, required: false, default: 'false' }
|
|
21
|
+
- { name: disabled, type: boolean, required: false, default: 'false' }
|
|
22
|
+
- { name: className, type: string, required: false }
|
|
23
|
+
---
|
|
9
24
|
|
|
10
25
|
## Example
|
|
11
26
|
|
|
12
27
|
```tsx
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
28
|
+
import ConfirmDialog from '@mantis-core/ui/components/ui/ConfirmDialog';
|
|
29
|
+
import { useState } from 'react';
|
|
30
|
+
|
|
31
|
+
function Example() {
|
|
32
|
+
const [visible, setVisible] = useState(false);
|
|
33
|
+
return (
|
|
34
|
+
<ConfirmDialog
|
|
35
|
+
visible={visible}
|
|
36
|
+
title='Delete property?'
|
|
37
|
+
message='This cannot be undone.'
|
|
38
|
+
confirmSeverity='danger'
|
|
39
|
+
onConfirm={() => setVisible(false)}
|
|
40
|
+
onCancel={() => setVisible(false)}
|
|
41
|
+
/>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
21
44
|
```
|
|
45
|
+
|
|
46
|
+
## Notes
|
|
47
|
+
|
|
48
|
+
- Renders headerless inside a `size="sm"` Modal — title/message live in the body, actions in the footer.
|
|
49
|
+
- Backdrop/close dismissal is treated as cancel, unless `loading` is `true` — dismissal is blocked while an action is in flight.
|
|
50
|
+
- Default copy is Spanish; override `title`/`message`/`confirmLabel`/`cancelLabel` for other locales.
|
|
@@ -1,19 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
---
|
|
2
|
+
name: DataState
|
|
3
|
+
category: feedback
|
|
4
|
+
import: '@mantis-core/ui/components/ui/DataState'
|
|
5
|
+
whenToUse: Loading/empty/error/ready placeholder for data-fetching views; renders `children` unchanged when `status="ready"`, otherwise a titled state panel.
|
|
6
|
+
baseLibrary: custom
|
|
7
|
+
requiredStyles: [scss/data-state.scss]
|
|
8
|
+
relatedComponents: ['StatusBadge', 'Loading']
|
|
9
|
+
relatedNextCore: []
|
|
10
|
+
props:
|
|
11
|
+
- { name: status, type: "'ready' | 'loading' | 'empty' | 'error'", required: true }
|
|
12
|
+
- { name: className, type: string, required: false }
|
|
13
|
+
- { name: children, type: ReactNode, required: false, description: 'Rendered as-is only when `status` is `"ready"`.' }
|
|
14
|
+
- { name: icon, type: ReactNode, required: false, description: 'Overrides the default per-status icon (spinner/inbox/triangle).' }
|
|
15
|
+
- { name: loadingTitle, type: ReactNode, required: false, default: "'Cargando informacion'" }
|
|
16
|
+
- { name: loadingDescription, type: ReactNode, required: false, default: "'Espera un momento mientras consultamos los datos.'" }
|
|
17
|
+
- { name: emptyTitle, type: ReactNode, required: false, default: "'Sin resultados'" }
|
|
18
|
+
- { name: emptyDescription, type: ReactNode, required: false, default: "'No hay registros para mostrar con los filtros actuales.'" }
|
|
19
|
+
- { name: emptyAction, type: ReactNode, required: false }
|
|
20
|
+
- { name: errorTitle, type: ReactNode, required: false, default: "'No se pudo cargar la informacion'" }
|
|
21
|
+
- { name: errorDescription, type: ReactNode, required: false, default: "'Ocurrio un error al consultar los datos.'" }
|
|
22
|
+
- { name: errorAction, type: ReactNode, required: false, description: 'Overrides the default retry Button built from `onRetry`.' }
|
|
23
|
+
- { name: onRetry, type: '() => void', required: false, description: 'Renders a default retry Button on `error` when `errorAction` is not given.' }
|
|
24
|
+
- { name: retryLabel, type: string, required: false, default: "'Reintentar'" }
|
|
25
|
+
---
|
|
9
26
|
|
|
10
27
|
## Example
|
|
11
28
|
|
|
12
29
|
```tsx
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
30
|
+
import DataState from '@mantis-core/ui/components/ui/DataState';
|
|
31
|
+
|
|
32
|
+
function Example() {
|
|
33
|
+
return (
|
|
34
|
+
<DataState status='empty' emptyTitle='No properties found' emptyDescription='Try adjusting your filters.'>
|
|
35
|
+
<ul />
|
|
36
|
+
</DataState>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
19
39
|
```
|
|
40
|
+
|
|
41
|
+
## Notes
|
|
42
|
+
|
|
43
|
+
- `status="ready"` short-circuits to `<>{children}</>` — every other prop is ignored in that case.
|
|
44
|
+
- Default copy is Spanish; override the `*Title`/`*Description` props for other locales.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: DateField
|
|
3
|
+
category: forms
|
|
4
|
+
import: '@mantis-core/ui/components/Forms/DateField'
|
|
5
|
+
whenToUse: Single date, date-range, or time-only picker wired to react-hook-form; one wrapper covers all three via `selectionMode`/`timeOnly`/`showTime`.
|
|
6
|
+
baseLibrary: '@primereact/ui/datepicker'
|
|
7
|
+
formContract: FieldControllerProps
|
|
8
|
+
relatedComponents: ['DatePresets', 'MaskField']
|
|
9
|
+
relatedNextCore: []
|
|
10
|
+
props:
|
|
11
|
+
- { name: selectionMode, type: "'single' | 'multiple' | 'range'", required: false, default: "'single'", description: 'Drives the value shape: Date for single, Date[] for multiple, (Date|null)[] for range.' }
|
|
12
|
+
- { name: showTime, type: boolean, required: false, default: 'false', description: 'Adds hour/minute pickers alongside the calendar.' }
|
|
13
|
+
- { name: timeOnly, type: boolean, required: false, default: 'false', description: 'Hides the calendar, showing only the time pickers.' }
|
|
14
|
+
- { name: hourFormat, type: "'12' | '24'", required: false, default: "'24'", description: 'Adds an AM/PM picker when set to 12.' }
|
|
15
|
+
- { name: showSeconds, type: boolean, required: false, default: 'false', description: 'Adds a seconds picker (with showTime/timeOnly).' }
|
|
16
|
+
- { name: minDate, type: Date, required: false }
|
|
17
|
+
- { name: maxDate, type: Date, required: false }
|
|
18
|
+
- { name: placeholder, type: string, required: false }
|
|
19
|
+
- { name: showButtonBar, type: boolean, required: false, default: 'false', description: 'Renders a Today + Clear footer inside the panel.' }
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Example
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
import { DateField } from '@mantis-core/ui/components/Forms/DateField';
|
|
26
|
+
import { useForm } from 'react-hook-form';
|
|
27
|
+
|
|
28
|
+
function Example() {
|
|
29
|
+
const { control } = useForm({ defaultValues: { fecha: null as Date | null } });
|
|
30
|
+
return <DateField name='fecha' control={control} label='Fecha' />;
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Notes
|
|
35
|
+
|
|
36
|
+
- Folds the three former PR10 date components: single date (default), range (`selectionMode="range"`, value `[start, end]`), and time (`timeOnly`/`showTime`). `react-datepicker` is gone.
|
|
37
|
+
- Value collapses every PR11 "empty" shape (`[]`, `[null, null]`) to a canonical `null` — a partial in-progress range (`[Date, null]`) passes through untouched.
|
|
38
|
+
- Built-in clear affordance (✕ in the input) and, when `showButtonBar`, a Today/Clear footer — both route through the same empty-value normalization.
|
|
39
|
+
- Pair with `DatePresets` for a quick-range button row above a `selectionMode="range"` field.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: DatePresets
|
|
3
|
+
category: forms
|
|
4
|
+
import: '@mantis-core/ui/components/Forms/DatePresets'
|
|
5
|
+
whenToUse: Row of quick-range preset buttons (Today, 7 days, 30 days, This month) that fire onChange with a [Date, Date] tuple. Not RHF-bound — pair with a `DateField` in `selectionMode="range"`.
|
|
6
|
+
baseLibrary: '@primereact/ui/button'
|
|
7
|
+
relatedComponents: ['DateField']
|
|
8
|
+
relatedNextCore: []
|
|
9
|
+
props:
|
|
10
|
+
- { name: onChange, type: '(range: [Date, Date]) => void', required: true }
|
|
11
|
+
- { name: presets, type: '{ label: string; resolve: () => [Date, Date] }[]', required: false, description: 'Defaults to Today / 7 días / 30 días / Este mes.' }
|
|
12
|
+
- { name: className, type: string, required: false }
|
|
13
|
+
- { name: disabled, type: boolean, required: false }
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Example
|
|
17
|
+
|
|
18
|
+
```tsx
|
|
19
|
+
import DatePresets from '@mantis-core/ui/components/Forms/DatePresets';
|
|
20
|
+
import { useState } from 'react';
|
|
21
|
+
|
|
22
|
+
function Example() {
|
|
23
|
+
const [range, setRange] = useState<[Date, Date] | null>(null);
|
|
24
|
+
return <DatePresets onChange={setRange} />;
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Notes
|
|
29
|
+
|
|
30
|
+
- Default export, not a named export.
|
|
31
|
+
- Purely presentational: each preset renders as a PR11 `Button` (`type="button"`, `variant="outlined"`, `size="small"`) and calls `onChange` with its `resolve()` result — it does not read or write any form state itself.
|
|
32
|
+
- Default preset labels are hardcoded in Spanish ("Hoy", "7 días", "30 días", "Este mes") — pass your own `presets` for other locales.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: DescriptionList
|
|
3
|
+
category: data
|
|
4
|
+
import: '@mantis-core/ui/components/data/DescriptionList'
|
|
5
|
+
whenToUse: Grid-based label/value list for detail views; supports 1, 2, or 3 columns.
|
|
6
|
+
baseLibrary: custom
|
|
7
|
+
relatedComponents: ['StatCard']
|
|
8
|
+
relatedNextCore: []
|
|
9
|
+
props:
|
|
10
|
+
- { name: items, type: '{ label: string; value: ReactNode }[]', required: true }
|
|
11
|
+
- { name: columns, type: '1 | 2 | 3', required: false, default: '1' }
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Example
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
import DescriptionList from '@mantis-core/ui/components/data/DescriptionList';
|
|
18
|
+
|
|
19
|
+
function Example() {
|
|
20
|
+
return (
|
|
21
|
+
<DescriptionList
|
|
22
|
+
columns={2}
|
|
23
|
+
items={[
|
|
24
|
+
{ label: 'Name', value: 'Jane Doe' },
|
|
25
|
+
{ label: 'Email', value: 'jane@example.com' },
|
|
26
|
+
]}
|
|
27
|
+
/>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Notes
|
|
33
|
+
|
|
34
|
+
- Not re-exported from the package root — import the deep path shown above.
|
|
@@ -1,31 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
## Hook example
|
|
1
|
+
---
|
|
2
|
+
name: DirtyFormGuard
|
|
3
|
+
category: forms
|
|
4
|
+
import: '@mantis-core/ui/components/Forms/DirtyFormGuard'
|
|
5
|
+
whenToUse: Blocks tab-close/reload when a react-hook-form has unsaved changes; render it declaratively, or use the underlying useDirtyFormGuard hook to also guard programmatic navigation.
|
|
6
|
+
baseLibrary: custom
|
|
7
|
+
relatedComponents: [FormActionsBar]
|
|
8
|
+
relatedNextCore: []
|
|
9
|
+
props:
|
|
10
|
+
- { name: isDirty, type: boolean, required: true, description: 'Pass formState.isDirty from react-hook-form' }
|
|
11
|
+
- { name: enabled, type: boolean, required: false, default: 'true', description: 'Set to false to temporarily disable the guard' }
|
|
12
|
+
- { name: message, type: string, required: false, description: 'Custom confirmation message shown to the user' }
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Example
|
|
18
16
|
|
|
19
17
|
```tsx
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
message: "Leave without saving?",
|
|
23
|
-
});
|
|
18
|
+
import DirtyFormGuard from '@mantis-core/ui/components/Forms/DirtyFormGuard';
|
|
19
|
+
import { useForm } from 'react-hook-form';
|
|
24
20
|
|
|
25
|
-
|
|
21
|
+
function Example() {
|
|
22
|
+
const { formState } = useForm({ defaultValues: { name: '' } });
|
|
23
|
+
return <DirtyFormGuard isDirty={formState.isDirty} />;
|
|
24
|
+
}
|
|
26
25
|
```
|
|
27
26
|
|
|
28
27
|
## Notes
|
|
29
28
|
|
|
30
|
-
-
|
|
31
|
-
|
|
29
|
+
- Renders nothing (`return null`) — it only attaches a `beforeunload` listener while
|
|
30
|
+
`enabled && isDirty`.
|
|
31
|
+
- Also exported as the `useDirtyFormGuard(options)` hook, returning `{ shouldProceed,
|
|
32
|
+
confirmIfDirty }`: `shouldProceed()` runs `window.confirm(message)` and `confirmIfDirty(action)`
|
|
33
|
+
runs `action()` only if the user confirms (or the form isn't dirty). Use the hook to guard
|
|
34
|
+
programmatic navigation (router pushes, tab switches, discard buttons) that `beforeunload` can't
|
|
35
|
+
catch; use the component for the tab-close/reload case.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: DonutChart
|
|
3
|
+
category: charts
|
|
4
|
+
import: '@mantis-core/ui/components/charts/DonutChart'
|
|
5
|
+
whenToUse: Part-to-whole breakdown rendered as a doughnut chart, zero-config over chart.js defaults.
|
|
6
|
+
baseLibrary: chart.js
|
|
7
|
+
requiredStyles: []
|
|
8
|
+
relatedComponents: [LineChart, BarChart]
|
|
9
|
+
relatedNextCore: []
|
|
10
|
+
props:
|
|
11
|
+
- { name: labels, type: 'string[]', required: true }
|
|
12
|
+
- { name: datasets, type: '{ data: number[]; label?: string }[]', required: true, description: 'Typically a single-entry array — one value per label/slice.' }
|
|
13
|
+
- { name: options, type: 'ChartOptions<''doughnut''>', required: false, description: 'Deep-merged over defaultDonutOptions (plugins merge shallowly one level).' }
|
|
14
|
+
- { name: colors, type: 'string[]', required: false, default: 'DEFAULT_COLORS (8-color palette)', description: 'Applied per-slice (cycled by label index) unless the dataset supplies its own backgroundColor/borderColor.' }
|
|
15
|
+
- { name: height, type: number, required: false, default: '300', description: 'Container height in px.' }
|
|
16
|
+
- { name: className, type: string, required: false }
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Example
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import DonutChart from '@mantis-core/ui/components/charts/DonutChart';
|
|
23
|
+
|
|
24
|
+
function Example() {
|
|
25
|
+
return (
|
|
26
|
+
<DonutChart
|
|
27
|
+
labels={['Leads', 'Closed', 'Lost']}
|
|
28
|
+
datasets={[{ data: [60, 25, 15] }]}
|
|
29
|
+
/>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Notes
|
|
35
|
+
|
|
36
|
+
- Not re-exported from the package root — import from the deep path above (`@mantis-core/ui/components/charts/DonutChart`), not `@mantis-core/ui`.
|
|
37
|
+
- Calls `registerCharts()` (module-level, from `./chart-setup`) on import — no separate chart.js registration needed.
|
|
38
|
+
- Legend defaults to `position: 'right'` (vs. `'top'` for Bar/Line).
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Drawer
|
|
3
|
+
category: overlays
|
|
4
|
+
import: '@mantis-core/ui/components/overlays/Drawer'
|
|
5
|
+
whenToUse: Controlled slide-in side panel; composes PR11's headless Drawer compound (Root/Portal/Backdrop/Popup/Header/Content/Footer — no Positioner, unlike Dialog) behind a simple `open`/`side`/`title`/`footer` API.
|
|
6
|
+
baseLibrary: '@primereact/ui/drawer'
|
|
7
|
+
relatedComponents: ['Modal', 'FilterPannel']
|
|
8
|
+
relatedNextCore: []
|
|
9
|
+
props:
|
|
10
|
+
- { name: open, type: boolean, required: true, description: 'Controlled visibility.' }
|
|
11
|
+
- { name: onOpenChange, type: '(open: boolean) => void', required: true, description: 'Fires with the next open value when the backdrop/close toggles it.' }
|
|
12
|
+
- { name: side, type: "'left' | 'right' | 'top' | 'bottom'", required: false, default: "'right'", description: 'Edge the panel slides in from — maps to PR11 `position`.' }
|
|
13
|
+
- { name: title, type: ReactNode, required: false, description: 'Header title. Omit to render no header.' }
|
|
14
|
+
- { name: footer, type: ReactNode, required: false, description: 'Footer content. Omit to render no footer.' }
|
|
15
|
+
- { name: className, type: string, required: false, description: 'Extra class on the Popup element.' }
|
|
16
|
+
- { name: children, type: ReactNode, required: false }
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Example
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import Drawer from '@mantis-core/ui/components/overlays/Drawer';
|
|
23
|
+
import { useState } from 'react';
|
|
24
|
+
|
|
25
|
+
function Example() {
|
|
26
|
+
const [open, setOpen] = useState(false);
|
|
27
|
+
return (
|
|
28
|
+
<Drawer open={open} onOpenChange={setOpen} side='right' title='Filters'>
|
|
29
|
+
<p>Filter form</p>
|
|
30
|
+
</Drawer>
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Notes
|
|
36
|
+
|
|
37
|
+
- Without a `title`, still renders a dismissable close (X) button (used e.g. by AppShell's mobile nav) — the panel is never un-dismissable.
|
|
38
|
+
- No `requiredStyles` — preset-themed.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: EmptyState
|
|
3
|
+
category: feedback
|
|
4
|
+
import: '@mantis-core/ui/components/feedback/EmptyState'
|
|
5
|
+
whenToUse: Centered empty-state placeholder with icon, title, optional description, and action button.
|
|
6
|
+
baseLibrary: custom
|
|
7
|
+
relatedComponents: ['DataState']
|
|
8
|
+
relatedNextCore: []
|
|
9
|
+
props:
|
|
10
|
+
- { name: title, type: ReactNode, required: true }
|
|
11
|
+
- { name: icon, type: ReactNode, required: false }
|
|
12
|
+
- { name: description, type: ReactNode, required: false }
|
|
13
|
+
- { name: action, type: ReactNode, required: false }
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Example
|
|
17
|
+
|
|
18
|
+
```tsx
|
|
19
|
+
import EmptyState from '@mantis-core/ui/components/feedback/EmptyState';
|
|
20
|
+
|
|
21
|
+
function Example() {
|
|
22
|
+
return <EmptyState title='No properties yet' description='Create your first property to get started.' />;
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Notes
|
|
27
|
+
|
|
28
|
+
- Not re-exported from the package root — import the deep path shown above.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ErrorBoundary
|
|
3
|
+
category: feedback
|
|
4
|
+
import: '@mantis-core/ui/components/feedback/ErrorBoundary'
|
|
5
|
+
whenToUse: React class error boundary; renders fallback UI on uncaught render errors in its children.
|
|
6
|
+
baseLibrary: custom
|
|
7
|
+
relatedNextCore: []
|
|
8
|
+
props:
|
|
9
|
+
- { name: children, type: ReactNode, required: true }
|
|
10
|
+
- { name: fallback, type: 'ReactNode | ((error: Error) => ReactNode)', required: false }
|
|
11
|
+
- { name: onError, type: '(error: Error, info: ErrorInfo) => void', required: false }
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Example
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
import ErrorBoundary from '@mantis-core/ui/components/feedback/ErrorBoundary';
|
|
18
|
+
|
|
19
|
+
function Example() {
|
|
20
|
+
return (
|
|
21
|
+
<ErrorBoundary fallback={<p>Something went wrong.</p>}>
|
|
22
|
+
<div>Feature content</div>
|
|
23
|
+
</ErrorBoundary>
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Notes
|
|
29
|
+
|
|
30
|
+
- Not re-exported from the package root — import the deep path shown above.
|
|
31
|
+
- `fallback` as a function receives the caught `Error`; as a plain node it renders as-is. Omitted entirely, it falls back to a minimal built-in message.
|
|
@@ -1,13 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
---
|
|
2
|
+
name: ErrorMessage
|
|
3
|
+
category: forms
|
|
4
|
+
import: '@mantis-core/ui/components/Forms/ErrorMessage'
|
|
5
|
+
whenToUse: 'Standalone validation-error text for one named react-hook-form field, read from form context; use when composing a custom layout instead of FormFieldRender.'
|
|
6
|
+
baseLibrary: '@hookform/error-message'
|
|
7
|
+
relatedComponents: ['FormFieldRender']
|
|
8
|
+
relatedNextCore: []
|
|
9
|
+
props:
|
|
10
|
+
- { name: name, type: string, required: true, description: 'The RHF field name to read the error for.' }
|
|
11
|
+
---
|
|
8
12
|
|
|
9
13
|
## Example
|
|
10
14
|
|
|
11
15
|
```tsx
|
|
12
|
-
|
|
16
|
+
import ErrorMessage from '@mantis-core/ui/components/Forms/ErrorMessage';
|
|
17
|
+
import { FormProvider, useForm } from 'react-hook-form';
|
|
18
|
+
|
|
19
|
+
function Example() {
|
|
20
|
+
const methods = useForm({ defaultValues: { email: '' } });
|
|
21
|
+
return (
|
|
22
|
+
<FormProvider {...methods}>
|
|
23
|
+
<ErrorMessage name='email' />
|
|
24
|
+
</FormProvider>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
13
27
|
```
|
|
28
|
+
|
|
29
|
+
## Notes
|
|
30
|
+
|
|
31
|
+
- Reads `useFormState({ name })` with no explicit `control` — it resolves the form from React
|
|
32
|
+
context, so it must render inside a `<FormProvider>`.
|
|
33
|
+
- Pre-`FieldControllerProps` component: it only displays a message string, it does not wrap an
|
|
34
|
+
input or manage aria wiring itself (compare `FieldShell`, which owns aria via `useFieldController`).
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: FieldShell
|
|
3
|
+
category: forms
|
|
4
|
+
import: '@mantis-core/ui/components/Forms/FieldShell'
|
|
5
|
+
whenToUse: 'Presentation primitive for label + addon + help/error composition around one input; every FieldControllerProps-based field wrapper renders it internally — reach for it directly only when hand-building a new wrapper (see field-controller.md).'
|
|
6
|
+
baseLibrary: custom
|
|
7
|
+
formContract: FieldControllerProps
|
|
8
|
+
relatedComponents: ['TextField', 'useFieldController']
|
|
9
|
+
relatedNextCore: []
|
|
10
|
+
props:
|
|
11
|
+
- { name: id, type: string, required: true, description: 'Input id; also roots the generated help/error ids (`${id}-help` / `${id}-error`).' }
|
|
12
|
+
- { name: label, type: string, required: false }
|
|
13
|
+
- { name: required, type: boolean, required: false, description: 'Presentational ` *` marker on the label; validation is still driven by rules.' }
|
|
14
|
+
- { name: helpText, type: string, required: false }
|
|
15
|
+
- { name: errorMessage, type: string, required: false, description: 'Typically `useFieldController(...).errorMessage`.' }
|
|
16
|
+
- { name: labelMode, type: LabelMode, required: false, description: '''ifta'' | ''float'' | ''beside'' | ''top'' | ''none'' — defaults to MantisThemeProvider.' }
|
|
17
|
+
- { name: floatVariant, type: FloatVariant, required: false, description: '''over'' | ''in'' | ''on'' — only used when labelMode=''float''.' }
|
|
18
|
+
- { name: addonBefore, type: ReactNode, required: false }
|
|
19
|
+
- { name: addonAfter, type: ReactNode, required: false }
|
|
20
|
+
- { name: children, type: ReactNode, required: true, description: 'The input/trigger element.' }
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Example
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
import { FieldShell } from '@mantis-core/ui/components/Forms/FieldShell';
|
|
27
|
+
|
|
28
|
+
function Example() {
|
|
29
|
+
return (
|
|
30
|
+
<FieldShell id='email' label='Email' helpText='We will never share it.'>
|
|
31
|
+
<input id='email' type='email' />
|
|
32
|
+
</FieldShell>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Notes
|
|
38
|
+
|
|
39
|
+
- Not itself a `FieldControllerProps` field — it takes `id`/`errorMessage`/`labelMode` etc. directly;
|
|
40
|
+
pair it with `useFieldController` to build a new RHF-bound wrapper (see
|
|
41
|
+
[`field-controller.md`](../contracts/field-controller.md)).
|
|
42
|
+
- `fluid` is read from `useFieldConfig()` context, not a shell prop — there is no per-shell fluid override.
|
|
43
|
+
- Renders inside PR11's `IftaLabel`/`FloatLabel` (label modes) and `InputGroup.Root` (addons); falls
|
|
44
|
+
back to `DEFAULT_FIELD_CONFIG` when no `MantisThemeProvider` is mounted, so it renders sanely
|
|
45
|
+
without a provider (e.g. isolated tests).
|
|
46
|
+
- Help and error `<small>` elements both render when both are truthy — there is no suppression; only
|
|
47
|
+
`aria-describedby` (computed by `useFieldController`, not by this component) prefers the error.
|
|
@@ -1,25 +1,53 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
---
|
|
2
|
+
name: FileDropzone
|
|
3
|
+
category: forms
|
|
4
|
+
import: '@mantis-core/ui/components/Forms/FileDropzone'
|
|
5
|
+
whenToUse: Drag-and-drop file input with validation (type, size, count); supports a react-hook-form binding or plain controlled value/onChange.
|
|
6
|
+
baseLibrary: custom
|
|
7
|
+
requiredStyles: [scss/file-dropzone.scss]
|
|
8
|
+
relatedComponents: [UploadFilesPreview]
|
|
9
|
+
relatedNextCore: []
|
|
10
|
+
props:
|
|
11
|
+
- { name: controller, type: 'Pick<FieldControllerProps, "name" | "control" | "rules" | "defaultValue" | "shouldUnregister">', required: false, description: 'When provided, wires the dropzone to react-hook-form via this nested object.' }
|
|
12
|
+
- { name: value, type: 'File[]', required: false, description: 'Controlled file list (plain mode, when `controller` is omitted)' }
|
|
13
|
+
- { name: onChange, type: '(files: File[]) => void', required: false, description: 'Change handler (plain mode)' }
|
|
14
|
+
- { name: onFilesAccepted, type: '(files: File[]) => void', required: false, description: 'Called with accepted files after drop' }
|
|
15
|
+
- { name: onFilesRejected, type: '(rejections: FileDropzoneRejectedFile[]) => void', required: false, description: 'Called with rejected files after drop' }
|
|
16
|
+
- { name: multiple, type: boolean, required: false, default: 'true', description: 'Allow multiple files' }
|
|
17
|
+
- { name: maxFiles, type: number, required: false, default: '10', description: 'Maximum number of files' }
|
|
18
|
+
- { name: maxSizeBytes, type: number, required: false, default: '10485760', description: 'Max file size in bytes (default 10 MB)' }
|
|
19
|
+
- { name: accept, type: 'string | string[]', required: false, description: 'Accepted MIME types or extensions' }
|
|
20
|
+
- { name: disabled, type: boolean, required: false, default: 'false', description: 'Disable the dropzone' }
|
|
21
|
+
- { name: block, type: boolean, required: false, default: 'true', description: 'Full-width layout' }
|
|
22
|
+
- { name: label, type: string, required: false, description: 'Optional label above the zone' }
|
|
23
|
+
- { name: hint, type: string, required: false, description: 'Hint text inside the zone' }
|
|
24
|
+
- { name: dropTitle, type: string, required: false, description: 'Title text when idle' }
|
|
25
|
+
- { name: dragOverTitle, type: string, required: false, description: 'Title text while dragging over' }
|
|
26
|
+
- { name: className, type: string, required: false, description: 'Additional CSS class on the root element' }
|
|
27
|
+
---
|
|
9
28
|
|
|
10
29
|
## Example
|
|
11
30
|
|
|
12
31
|
```tsx
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
32
|
+
import FileDropzone from '@mantis-core/ui/components/Forms/FileDropzone';
|
|
33
|
+
import { useForm, type FieldValues } from 'react-hook-form';
|
|
34
|
+
|
|
35
|
+
function Example() {
|
|
36
|
+
const { control } = useForm<FieldValues>({ defaultValues: { documents: [] as File[] } });
|
|
37
|
+
return (
|
|
38
|
+
<FileDropzone
|
|
39
|
+
controller={{ name: 'documents', control }}
|
|
40
|
+
accept={['.pdf', '.jpg']}
|
|
41
|
+
maxFiles={5}
|
|
42
|
+
/>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
20
45
|
```
|
|
21
46
|
|
|
22
47
|
## Notes
|
|
23
48
|
|
|
24
|
-
-
|
|
25
|
-
|
|
49
|
+
- `controller` is a nested object (legacy pattern: `{ name, control, rules }`), not the flattened
|
|
50
|
+
`FieldControllerProps` other PR11 field wrappers accept as top-level props.
|
|
51
|
+
- Rejections are normalized into `FileDropzoneRejectedFile` (`{ file, code, message }`); the RHF
|
|
52
|
+
binding disables the dropzone during `formState.isSubmitting` in addition to the `disabled` prop.
|
|
53
|
+
- Omit `controller` to use it as a plain controlled input with `value`/`onChange`.
|