@stackcraftmx/calcita 0.32.2 → 0.51.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/README.md +426 -4
- package/cli/calcita.js +15 -0
- package/cli/checkTexts.js +209 -0
- package/cli/packageVersions.js +17 -3
- package/cli/projectFiles.js +7 -2
- package/cli/templates/module/__Name__Page.test.jsx.tpl +24 -0
- package/cli/templates/project/README.md.tpl +35 -2
- package/cli/templates/project/eslint.config.js.tpl +27 -0
- package/cli/templates/project/src/app/appRouter.jsx.tpl +5 -2
- package/cli/templates/project/src/app/appTexts.js.tpl +2 -1
- package/cli/templates/project/src/core/accountConnector.js.tpl +4 -2
- package/cli/templates/project/src/core/publicPaths.js.tpl +10 -2
- package/cli/templates/project/src/modules/auth/SignInPage.test.jsx.tpl +20 -0
- package/cli/templates/project/src/modules/home/HomePage.test.jsx.tpl +16 -0
- package/cli/templates/project/src/testing/browserGaps.js.tpl +70 -0
- package/cli/templates/project/src/testing/openScreen.jsx.tpl +58 -0
- package/cli/templates/project/src/testing/setup.js.tpl +25 -0
- package/cli/templates/project/vite.config.js.tpl +20 -1
- package/dist/DataTable/AuditTrailDialog.js +3 -2
- package/dist/DataTable/AuditTrailDialog.js.map +1 -1
- package/dist/DataTable/ColumnFilters/HeaderFilterPopover.js +3 -2
- package/dist/DataTable/ColumnFilters/HeaderFilterPopover.js.map +1 -1
- package/dist/DataTable/ColumnFilters/MultiSelectColumnFilter.js +3 -2
- package/dist/DataTable/ColumnFilters/MultiSelectColumnFilter.js.map +1 -1
- package/dist/DataTable/ColumnFilters/SortableFilterHeader.js +3 -2
- package/dist/DataTable/ColumnFilters/SortableFilterHeader.js.map +1 -1
- package/dist/DataTable/EmptyState.js +3 -2
- package/dist/DataTable/EmptyState.js.map +1 -1
- package/dist/DataTable/FilterChips.js +3 -2
- package/dist/DataTable/FilterChips.js.map +1 -1
- package/dist/DataTable/GoToPage.js +71 -14
- package/dist/DataTable/GoToPage.js.map +1 -1
- package/dist/DataTable/ServerTable.js +97 -28
- package/dist/DataTable/ServerTable.js.map +1 -1
- package/dist/DataTable/ServerTableFilterDrawer.js +57 -0
- package/dist/DataTable/ServerTableFilterDrawer.js.map +1 -0
- package/dist/DataTable/StackedCell.js +60 -0
- package/dist/DataTable/StackedCell.js.map +1 -0
- package/dist/DataTable/TableCardsView.js +88 -0
- package/dist/DataTable/TableCardsView.js.map +1 -0
- package/dist/DataTable/columnWidths.js +30 -0
- package/dist/DataTable/columnWidths.js.map +1 -0
- package/dist/DataTable/columns.js +47 -1
- package/dist/DataTable/columns.js.map +1 -1
- package/dist/DataTable/filterContext.js.map +1 -1
- package/dist/DataTable/fixedColumns.js +24 -0
- package/dist/DataTable/fixedColumns.js.map +1 -0
- package/dist/DataTable/goToPageOptions.js +17 -0
- package/dist/DataTable/goToPageOptions.js.map +1 -0
- package/dist/DataTable/useTableView.js +29 -0
- package/dist/DataTable/useTableView.js.map +1 -0
- package/dist/access/PermissionMatrix.js +3 -2
- package/dist/access/PermissionMatrix.js.map +1 -1
- package/dist/account/AccountProvider.js +1 -1
- package/dist/account/AccountSecuritySection.js +3 -2
- package/dist/account/AccountSecuritySection.js.map +1 -1
- package/dist/account/DemoTotpCodeButton.js +3 -2
- package/dist/account/DemoTotpCodeButton.js.map +1 -1
- package/dist/account/ProfileScreen.js +3 -2
- package/dist/account/ProfileScreen.js.map +1 -1
- package/dist/account/SignInScreen.js +3 -2
- package/dist/account/SignInScreen.js.map +1 -1
- package/dist/appShell/AccountMenu.js +3 -2
- package/dist/appShell/AccountMenu.js.map +1 -1
- package/dist/appShell/AppLayout.js +3 -2
- package/dist/appShell/AppLayout.js.map +1 -1
- package/dist/appShell/AppearanceSettings.js +3 -2
- package/dist/appShell/AppearanceSettings.js.map +1 -1
- package/dist/appShell/AuthLayout.js +3 -2
- package/dist/appShell/AuthLayout.js.map +1 -1
- package/dist/appShell/BarActionButton.js +11 -4
- package/dist/appShell/BarActionButton.js.map +1 -1
- package/dist/appShell/BarActions.js +3 -2
- package/dist/appShell/BarActions.js.map +1 -1
- package/dist/appShell/BarCapsule.js +3 -2
- package/dist/appShell/BarCapsule.js.map +1 -1
- package/dist/appShell/BarSearch.js +3 -2
- package/dist/appShell/BarSearch.js.map +1 -1
- package/dist/appShell/HeaderTools.js +3 -2
- package/dist/appShell/HeaderTools.js.map +1 -1
- package/dist/appShell/MobileTabBar.js +3 -2
- package/dist/appShell/MobileTabBar.js.map +1 -1
- package/dist/appShell/SettingsMenu.js +3 -2
- package/dist/appShell/SettingsMenu.js.map +1 -1
- package/dist/appShell/SideMenu.js +3 -2
- package/dist/appShell/SideMenu.js.map +1 -1
- package/dist/appShell/SideMenuEntry.js +3 -2
- package/dist/appShell/SideMenuEntry.js.map +1 -1
- package/dist/appShell/SubmenuActionsMenu.js +3 -2
- package/dist/appShell/SubmenuActionsMenu.js.map +1 -1
- package/dist/appShell/TabBarEditor.js +3 -2
- package/dist/appShell/TabBarEditor.js.map +1 -1
- package/dist/appShell/TopMenu.js +3 -2
- package/dist/appShell/TopMenu.js.map +1 -1
- package/dist/appShell/Wordmark.js +3 -2
- package/dist/appShell/Wordmark.js.map +1 -1
- package/dist/auth/PasswordChecklist.js +3 -2
- package/dist/auth/PasswordChecklist.js.map +1 -1
- package/dist/calendar/EventCalendar.js +3 -2
- package/dist/calendar/EventCalendar.js.map +1 -1
- package/dist/calendar/EventDetails.js +3 -2
- package/dist/calendar/EventDetails.js.map +1 -1
- package/dist/date-pickers.js +28 -2
- package/dist/date-pickers.js.map +1 -1
- package/dist/datePickers/DateInput.js +41 -54
- package/dist/datePickers/DateInput.js.map +1 -1
- package/dist/datePickers/DateTimeInput.js +81 -0
- package/dist/datePickers/DateTimeInput.js.map +1 -0
- package/dist/datePickers/FormDateTimeField.js +12 -0
- package/dist/datePickers/FormDateTimeField.js.map +1 -0
- package/dist/datePickers/FormMonthField.js +12 -0
- package/dist/datePickers/FormMonthField.js.map +1 -0
- package/dist/datePickers/FormTimeField.js +12 -0
- package/dist/datePickers/FormTimeField.js.map +1 -0
- package/dist/datePickers/MonthInput.js +64 -0
- package/dist/datePickers/MonthInput.js.map +1 -0
- package/dist/datePickers/PickerFrame.js +27 -0
- package/dist/datePickers/PickerFrame.js.map +1 -0
- package/dist/datePickers/TimeInput.js +61 -0
- package/dist/datePickers/TimeInput.js.map +1 -0
- package/dist/datePickers/dateTimeRules.js +24 -0
- package/dist/datePickers/dateTimeRules.js.map +1 -0
- package/dist/datePickers/pickerValues.js +106 -0
- package/dist/datePickers/pickerValues.js.map +1 -0
- package/dist/datePickers/useCurrentMinute.js +28 -0
- package/dist/datePickers/useCurrentMinute.js.map +1 -0
- package/dist/datePickers/usePickerField.js +23 -0
- package/dist/datePickers/usePickerField.js.map +1 -0
- package/dist/dictionaries/dictionaries.js +3 -1
- package/dist/dictionaries/dictionaries.js.map +1 -1
- package/dist/downloads/DownloadManager.js +3 -2
- package/dist/downloads/DownloadManager.js.map +1 -1
- package/dist/feedback/ConfirmDialog.js +3 -2
- package/dist/feedback/ConfirmDialog.js.map +1 -1
- package/dist/feedback/ModalWaiting.js +3 -2
- package/dist/feedback/ModalWaiting.js.map +1 -1
- package/dist/feedback/NewBuildNotice.js +3 -2
- package/dist/feedback/NewBuildNotice.js.map +1 -1
- package/dist/filepond/FileDropzone.js +3 -2
- package/dist/filepond/FileDropzone.js.map +1 -1
- package/dist/forms/FormAttachmentsField.js +12 -0
- package/dist/forms/FormAttachmentsField.js.map +1 -0
- package/dist/forms/FormCheckboxGroupField.js +12 -0
- package/dist/forms/FormCheckboxGroupField.js.map +1 -0
- package/dist/forms/FormFileField.js +12 -0
- package/dist/forms/FormFileField.js.map +1 -0
- package/dist/forms/FormFileUploadField.js +12 -0
- package/dist/forms/FormFileUploadField.js.map +1 -0
- package/dist/forms/FormImageField.js +12 -0
- package/dist/forms/FormImageField.js.map +1 -0
- package/dist/forms/FormMaskedField.js +12 -0
- package/dist/forms/FormMaskedField.js.map +1 -0
- package/dist/forms/FormProblemAlert.js +3 -2
- package/dist/forms/FormProblemAlert.js.map +1 -1
- package/dist/forms/FormRepeatingFields.js +54 -0
- package/dist/forms/FormRepeatingFields.js.map +1 -0
- package/dist/forms/FormTransferListField.js +12 -0
- package/dist/forms/FormTransferListField.js.map +1 -0
- package/dist/forms/SubmitButton.js +7 -2
- package/dist/forms/SubmitButton.js.map +1 -1
- package/dist/forms/applyServerProblem.js +10 -3
- package/dist/forms/applyServerProblem.js.map +1 -1
- package/dist/forms/auth/SignInForm.js +3 -2
- package/dist/forms/auth/SignInForm.js.map +1 -1
- package/dist/forms/fieldRules.js +30 -0
- package/dist/forms/fieldRules.js.map +1 -0
- package/dist/forms/listRules.js +111 -0
- package/dist/forms/listRules.js.map +1 -0
- package/dist/forms/security/SecondStepForm.js +3 -2
- package/dist/forms/security/SecondStepForm.js.map +1 -1
- package/dist/forms/security/TwoStepVerificationCard.js +3 -2
- package/dist/forms/security/TwoStepVerificationCard.js.map +1 -1
- package/dist/forms/serverProblemFields.js +17 -0
- package/dist/forms/serverProblemFields.js.map +1 -1
- package/dist/forms/useValidationText.js +18 -0
- package/dist/forms/useValidationText.js.map +1 -0
- package/dist/forms/validation.js +35 -31
- package/dist/forms/validation.js.map +1 -1
- package/dist/forms/validationMessages.js +64 -7
- package/dist/forms/validationMessages.js.map +1 -1
- package/dist/forms.js +54 -29
- package/dist/forms.js.map +1 -1
- package/dist/hookForm/FormAttachmentsField.js +12 -0
- package/dist/hookForm/FormAttachmentsField.js.map +1 -0
- package/dist/hookForm/FormCheckboxGroupField.js +12 -0
- package/dist/hookForm/FormCheckboxGroupField.js.map +1 -0
- package/dist/hookForm/FormFileField.js +12 -0
- package/dist/hookForm/FormFileField.js.map +1 -0
- package/dist/hookForm/FormFileUploadField.js +12 -0
- package/dist/hookForm/FormFileUploadField.js.map +1 -0
- package/dist/hookForm/FormImageField.js +12 -0
- package/dist/hookForm/FormImageField.js.map +1 -0
- package/dist/hookForm/FormMaskedField.js +12 -0
- package/dist/hookForm/FormMaskedField.js.map +1 -0
- package/dist/hookForm/FormProblemAlert.js +3 -2
- package/dist/hookForm/FormProblemAlert.js.map +1 -1
- package/dist/hookForm/FormRepeatingFields.js +44 -0
- package/dist/hookForm/FormRepeatingFields.js.map +1 -0
- package/dist/hookForm/FormTransferListField.js +12 -0
- package/dist/hookForm/FormTransferListField.js.map +1 -0
- package/dist/hookForm/SubmitButton.js +7 -2
- package/dist/hookForm/SubmitButton.js.map +1 -1
- package/dist/hookForm/applyServerProblem.js +8 -3
- package/dist/hookForm/applyServerProblem.js.map +1 -1
- package/dist/inbox/InboxLayout.js +3 -2
- package/dist/inbox/InboxLayout.js.map +1 -1
- package/dist/inbox/MessageList.js +3 -2
- package/dist/inbox/MessageList.js.map +1 -1
- package/dist/inbox/MessageView.js +3 -2
- package/dist/inbox/MessageView.js.map +1 -1
- package/dist/index.js +235 -124
- package/dist/index.js.map +1 -1
- package/dist/inputs/CatalogInput.js +103 -29
- package/dist/inputs/CatalogInput.js.map +1 -1
- package/dist/inputs/CheckboxGroupInput.js +103 -0
- package/dist/inputs/CheckboxGroupInput.js.map +1 -0
- package/dist/inputs/ColorInput.js +7 -4
- package/dist/inputs/ColorInput.js.map +1 -1
- package/dist/inputs/FieldFrame.js +10 -4
- package/dist/inputs/FieldFrame.js.map +1 -1
- package/dist/inputs/FormSection.js +1 -1
- package/dist/inputs/MaskedInput.js +87 -0
- package/dist/inputs/MaskedInput.js.map +1 -0
- package/dist/inputs/NumberInput.js +41 -25
- package/dist/inputs/NumberInput.js.map +1 -1
- package/dist/inputs/RepeatingFields.js +180 -0
- package/dist/inputs/RepeatingFields.js.map +1 -0
- package/dist/inputs/SelectInput.js +50 -9
- package/dist/inputs/SelectInput.js.map +1 -1
- package/dist/inputs/TextInput.js +5 -3
- package/dist/inputs/TextInput.js.map +1 -1
- package/dist/inputs/TransferListInput.js +218 -0
- package/dist/inputs/TransferListInput.js.map +1 -0
- package/dist/inputs/WizardLayout.js +3 -2
- package/dist/inputs/WizardLayout.js.map +1 -1
- package/dist/inputs/inputMasks.js +84 -0
- package/dist/inputs/inputMasks.js.map +1 -0
- package/dist/inputs/selectAllState.js +20 -0
- package/dist/inputs/selectAllState.js.map +1 -0
- package/dist/inputs/useRowKeys.js +26 -0
- package/dist/inputs/useRowKeys.js.map +1 -0
- package/dist/kanban/KanbanBoard.js +3 -2
- package/dist/kanban/KanbanBoard.js.map +1 -1
- package/dist/legal/CookieNotice.js +80 -0
- package/dist/legal/CookieNotice.js.map +1 -0
- package/dist/legal/TermsAcceptanceDialog.js +130 -0
- package/dist/legal/TermsAcceptanceDialog.js.map +1 -0
- package/dist/legal/consentStorage.js +18 -0
- package/dist/legal/consentStorage.js.map +1 -0
- package/dist/legal/useCookieConsent.js +17 -0
- package/dist/legal/useCookieConsent.js.map +1 -0
- package/dist/locales/en.js +257 -1
- package/dist/locales/en.js.map +1 -1
- package/dist/locales/es.js +257 -1
- package/dist/locales/es.js.map +1 -1
- package/dist/maps/MapView.js +3 -2
- package/dist/maps/MapView.js.map +1 -1
- package/dist/mexico/CfdiSummary.js +82 -0
- package/dist/mexico/CfdiSummary.js.map +1 -0
- package/dist/mexico/EfirmaFields.js +168 -0
- package/dist/mexico/EfirmaFields.js.map +1 -0
- package/dist/mexico/certificateReader.js +79 -0
- package/dist/mexico/certificateReader.js.map +1 -0
- package/dist/mexico/cfdiReader.js +81 -0
- package/dist/mexico/cfdiReader.js.map +1 -0
- package/dist/mexico/derReader.js +81 -0
- package/dist/mexico/derReader.js.map +1 -0
- package/dist/mexico/efirmaKey.js +51 -0
- package/dist/mexico/efirmaKey.js.map +1 -0
- package/dist/mexico/mexicoIdentifiers.js +91 -0
- package/dist/mexico/mexicoIdentifiers.js.map +1 -0
- package/dist/mexico/mexicoRules.js +21 -0
- package/dist/mexico/mexicoRules.js.map +1 -0
- package/dist/mexico.js +34 -0
- package/dist/mexico.js.map +1 -0
- package/dist/pwa/InstallAppSetting.js +3 -2
- package/dist/pwa/InstallAppSetting.js.map +1 -1
- package/dist/pwa/InstallInstructionsDialog.js +3 -2
- package/dist/pwa/InstallInstructionsDialog.js.map +1 -1
- package/dist/pwa/InstallPromptBanner.js +3 -2
- package/dist/pwa/InstallPromptBanner.js.map +1 -1
- package/dist/react-hook-form.js +43 -17
- package/dist/react-hook-form.js.map +1 -1
- package/dist/rich-text.js +19 -0
- package/dist/rich-text.js.map +1 -0
- package/dist/richText/FormRichTextField.js +12 -0
- package/dist/richText/FormRichTextField.js.map +1 -0
- package/dist/richText/RichTextEditor.js +111 -0
- package/dist/richText/RichTextEditor.js.map +1 -0
- package/dist/richText/RichTextLinkPopover.js +57 -0
- package/dist/richText/RichTextLinkPopover.js.map +1 -0
- package/dist/richText/RichTextToolbar.js +189 -0
- package/dist/richText/RichTextToolbar.js.map +1 -0
- package/dist/richText/RichTextView.js +27 -0
- package/dist/richText/RichTextView.js.map +1 -0
- package/dist/richText/richTextContentSx.js +42 -0
- package/dist/richText/richTextContentSx.js.map +1 -0
- package/dist/richText/richTextExtensions.js +44 -0
- package/dist/richText/richTextExtensions.js.map +1 -0
- package/dist/richText/richTextRules.js +46 -0
- package/dist/richText/richTextRules.js.map +1 -0
- package/dist/security/ActivityLog.js +3 -2
- package/dist/security/ActivityLog.js.map +1 -1
- package/dist/security/RecoveryCodesDialog.js +3 -2
- package/dist/security/RecoveryCodesDialog.js.map +1 -1
- package/dist/security/SessionsCard.js +3 -2
- package/dist/security/SessionsCard.js.map +1 -1
- package/dist/table.js +23 -2
- package/dist/table.js.map +1 -1
- package/dist/theme/components/glassComponents.js +27 -0
- package/dist/theme/components/glassComponents.js.map +1 -1
- package/dist/theme/components/minimalComponents.js +12 -0
- package/dist/theme/components/minimalComponents.js.map +1 -1
- package/dist/theme/themePieces.js +70 -4
- package/dist/theme/themePieces.js.map +1 -1
- package/dist/toolkit/ToolkitProvider.js +8 -1
- package/dist/toolkit/ToolkitProvider.js.map +1 -1
- package/dist/toolkit/browserNavigation.js +19 -4
- package/dist/toolkit/browserNavigation.js.map +1 -1
- package/dist/toolkit/combineTexts.js +32 -0
- package/dist/toolkit/combineTexts.js.map +1 -0
- package/dist/toolkit/hashNavigation.js +17 -3
- package/dist/toolkit/hashNavigation.js.map +1 -1
- package/dist/toolkit/navigationPaths.js +15 -0
- package/dist/toolkit/navigationPaths.js.map +1 -1
- package/dist/toolkit/pathIndex.js +66 -0
- package/dist/toolkit/pathIndex.js.map +1 -0
- package/dist/toolkit/toolkitSettings.js +19 -1
- package/dist/toolkit/toolkitSettings.js.map +1 -1
- package/dist/types/DataTable/AuditTrailDialog.d.ts +6 -17
- package/dist/types/DataTable/ColumnFilters/HeaderFilterPopover.d.ts +6 -5
- package/dist/types/DataTable/ColumnFilters/MultiSelectColumnFilter.d.ts +6 -9
- package/dist/types/DataTable/ColumnFilters/SortableFilterHeader.d.ts +6 -14
- package/dist/types/DataTable/EmptyState.d.ts +6 -9
- package/dist/types/DataTable/FilterChips.d.ts +6 -11
- package/dist/types/DataTable/GoToPage.d.ts +6 -9
- package/dist/types/DataTable/ServerTable.d.ts +16 -80
- package/dist/types/DataTable/ServerTableFilterDrawer.d.ts +14 -0
- package/dist/types/DataTable/StackedCell.d.ts +12 -0
- package/dist/types/DataTable/TableCardsView.d.ts +27 -0
- package/dist/types/DataTable/columnWidths.d.ts +21 -0
- package/dist/types/DataTable/columns.d.ts +111 -0
- package/dist/types/DataTable/filterContext.d.ts +2 -1
- package/dist/types/DataTable/fixedColumns.d.ts +29 -0
- package/dist/types/DataTable/goToPageOptions.d.ts +15 -0
- package/dist/types/DataTable/index.d.ts +7 -1
- package/dist/types/DataTable/useTableView.d.ts +22 -0
- package/dist/types/access/PermissionMatrix.d.ts +6 -10
- package/dist/types/account/AccountSecuritySection.d.ts +6 -7
- package/dist/types/account/DemoTotpCodeButton.d.ts +6 -5
- package/dist/types/account/ProfileScreen.d.ts +6 -18
- package/dist/types/account/SignInScreen.d.ts +6 -13
- package/dist/types/appShell/AccountMenu.d.ts +6 -11
- package/dist/types/appShell/AppLayout.d.ts +3 -40
- package/dist/types/appShell/AppearanceSettings.d.ts +6 -12
- package/dist/types/appShell/AuthLayout.d.ts +3 -11
- package/dist/types/appShell/BarActionButton.d.ts +6 -10
- package/dist/types/appShell/BarActions.d.ts +6 -15
- package/dist/types/appShell/BarCapsule.d.ts +6 -9
- package/dist/types/appShell/BarSearch.d.ts +6 -15
- package/dist/types/appShell/HeaderTools.d.ts +6 -16
- package/dist/types/appShell/MobileTabBar.d.ts +6 -13
- package/dist/types/appShell/SettingsMenu.d.ts +6 -10
- package/dist/types/appShell/SideMenu.d.ts +6 -20
- package/dist/types/appShell/SideMenuEntry.d.ts +6 -11
- package/dist/types/appShell/SubmenuActionsMenu.d.ts +6 -12
- package/dist/types/appShell/TabBarEditor.d.ts +6 -9
- package/dist/types/appShell/TopMenu.d.ts +6 -5
- package/dist/types/appShell/Wordmark.d.ts +6 -7
- package/dist/types/auth/PasswordChecklist.d.ts +6 -9
- package/dist/types/calendar/EventCalendar.d.ts +6 -23
- package/dist/types/calendar/EventDetails.d.ts +6 -10
- package/dist/types/date-pickers.d.ts +10 -1
- package/dist/types/datePickers/DateInput.d.ts +10 -23
- package/dist/types/datePickers/DateTimeInput.d.ts +30 -0
- package/dist/types/datePickers/FormDateTimeField.d.ts +7 -0
- package/dist/types/datePickers/FormMonthField.d.ts +7 -0
- package/dist/types/datePickers/FormTimeField.d.ts +7 -0
- package/dist/types/datePickers/MonthInput.d.ts +25 -0
- package/dist/types/datePickers/PickerFrame.d.ts +22 -0
- package/dist/types/datePickers/TimeInput.d.ts +24 -0
- package/dist/types/datePickers/dateTimeRules.d.ts +31 -0
- package/dist/types/datePickers/pickerValues.d.ts +114 -0
- package/dist/types/datePickers/useCurrentMinute.d.ts +5 -0
- package/dist/types/datePickers/usePickerField.d.ts +28 -0
- package/dist/types/dictionaries/dictionaries.d.ts +6 -3
- package/dist/types/downloads/DownloadManager.d.ts +6 -6
- package/dist/types/feedback/ConfirmDialog.d.ts +6 -18
- package/dist/types/feedback/ModalWaiting.d.ts +6 -9
- package/dist/types/feedback/NewBuildNotice.d.ts +6 -10
- package/dist/types/filepond/FileDropzone.d.ts +6 -29
- package/dist/types/forms/FormAttachmentsField.d.ts +7 -0
- package/dist/types/forms/FormCheckboxGroupField.d.ts +7 -0
- package/dist/types/forms/FormFileField.d.ts +7 -0
- package/dist/types/forms/FormFileUploadField.d.ts +7 -0
- package/dist/types/forms/FormImageField.d.ts +7 -0
- package/dist/types/forms/FormMaskedField.d.ts +7 -0
- package/dist/types/forms/FormProblemAlert.d.ts +6 -5
- package/dist/types/forms/FormRepeatingFields.d.ts +25 -0
- package/dist/types/forms/FormTransferListField.d.ts +7 -0
- package/dist/types/forms/SubmitButton.d.ts +6 -6
- package/dist/types/forms/auth/SignInForm.d.ts +6 -11
- package/dist/types/forms/fieldRules.d.ts +44 -0
- package/dist/types/forms/index.d.ts +11 -1
- package/dist/types/forms/listRules.d.ts +48 -0
- package/dist/types/forms/security/SecondStepForm.d.ts +6 -14
- package/dist/types/forms/security/TwoStepVerificationCard.d.ts +6 -21
- package/dist/types/forms/serverProblemFields.d.ts +13 -0
- package/dist/types/forms/useValidationText.d.ts +12 -0
- package/dist/types/forms/validation.d.ts +117 -174
- package/dist/types/forms/validationMessages.d.ts +54 -6
- package/dist/types/forms.d.ts +1 -1
- package/dist/types/hookForm/FormAttachmentsField.d.ts +8 -0
- package/dist/types/hookForm/FormCheckboxGroupField.d.ts +8 -0
- package/dist/types/hookForm/FormFileField.d.ts +8 -0
- package/dist/types/hookForm/FormFileUploadField.d.ts +8 -0
- package/dist/types/hookForm/FormImageField.d.ts +8 -0
- package/dist/types/hookForm/FormMaskedField.d.ts +9 -0
- package/dist/types/hookForm/FormProblemAlert.d.ts +6 -5
- package/dist/types/hookForm/FormRepeatingFields.d.ts +27 -0
- package/dist/types/hookForm/FormTransferListField.d.ts +8 -0
- package/dist/types/hookForm/SubmitButton.d.ts +6 -13
- package/dist/types/inbox/InboxLayout.d.ts +6 -17
- package/dist/types/inbox/MessageList.d.ts +6 -18
- package/dist/types/inbox/MessageView.d.ts +6 -14
- package/dist/types/index.d.ts +33 -4
- package/dist/types/inputs/CatalogInput.d.ts +10 -21
- package/dist/types/inputs/CheckboxGroupInput.d.ts +28 -0
- package/dist/types/inputs/ColorInput.d.ts +7 -16
- package/dist/types/inputs/FieldFrame.d.ts +6 -10
- package/dist/types/inputs/MaskedInput.d.ts +38 -0
- package/dist/types/inputs/NumberInput.d.ts +7 -20
- package/dist/types/inputs/RepeatingFields.d.ts +31 -0
- package/dist/types/inputs/SelectInput.d.ts +10 -18
- package/dist/types/inputs/TextInput.d.ts +3 -0
- package/dist/types/inputs/TransferListInput.d.ts +30 -0
- package/dist/types/inputs/WizardLayout.d.ts +6 -19
- package/dist/types/inputs/inputMasks.d.ts +52 -0
- package/dist/types/inputs/selectAllState.d.ts +11 -0
- package/dist/types/inputs/useRowKeys.d.ts +11 -0
- package/dist/types/kanban/KanbanBoard.d.ts +6 -25
- package/dist/types/legal/CookieNotice.d.ts +20 -0
- package/dist/types/legal/TermsAcceptanceDialog.d.ts +20 -0
- package/dist/types/legal/consentStorage.d.ts +16 -0
- package/dist/types/legal/useCookieConsent.d.ts +13 -0
- package/dist/types/locales/en.d.ts +256 -0
- package/dist/types/locales/es.d.ts +256 -0
- package/dist/types/maps/MapView.d.ts +6 -17
- package/dist/types/mexico/CfdiSummary.d.ts +12 -0
- package/dist/types/mexico/EfirmaFields.d.ts +28 -0
- package/dist/types/mexico/certificateReader.d.ts +37 -0
- package/dist/types/mexico/cfdiReader.d.ts +95 -0
- package/dist/types/mexico/derReader.d.ts +54 -0
- package/dist/types/mexico/efirmaKey.d.ts +26 -0
- package/dist/types/mexico/mexicoIdentifiers.d.ts +68 -0
- package/dist/types/mexico/mexicoRules.d.ts +45 -0
- package/dist/types/mexico.d.ts +11 -0
- package/dist/types/pwa/InstallAppSetting.d.ts +6 -6
- package/dist/types/pwa/InstallInstructionsDialog.d.ts +6 -9
- package/dist/types/pwa/InstallPromptBanner.d.ts +6 -11
- package/dist/types/react-hook-form.d.ts +11 -1
- package/dist/types/rich-text.d.ts +5 -0
- package/dist/types/richText/FormRichTextField.d.ts +7 -0
- package/dist/types/richText/RichTextEditor.d.ts +27 -0
- package/dist/types/richText/RichTextLinkPopover.d.ts +17 -0
- package/dist/types/richText/RichTextToolbar.d.ts +15 -0
- package/dist/types/richText/RichTextView.d.ts +10 -0
- package/dist/types/richText/richTextContentSx.d.ts +7 -0
- package/dist/types/richText/richTextExtensions.d.ts +15 -0
- package/dist/types/richText/richTextRules.d.ts +41 -0
- package/dist/types/security/ActivityLog.d.ts +6 -9
- package/dist/types/security/RecoveryCodesDialog.d.ts +6 -11
- package/dist/types/security/SessionsCard.d.ts +6 -11
- package/dist/types/table.d.ts +3 -1
- package/dist/types/theme/themePieces.d.ts +55 -3
- package/dist/types/toolkit/ToolkitProvider.d.ts +13 -1
- package/dist/types/toolkit/browserNavigation.d.ts +7 -3
- package/dist/types/toolkit/combineTexts.d.ts +6 -0
- package/dist/types/toolkit/hashNavigation.d.ts +4 -2
- package/dist/types/toolkit/navigationPaths.d.ts +35 -0
- package/dist/types/toolkit/pathIndex.d.ts +27 -0
- package/dist/types/toolkit/toolkitSettings.d.ts +7 -4
- package/dist/types/ui/actions/ActionsMenu.d.ts +24 -11
- package/dist/types/ui/actions/CopyButton.d.ts +8 -11
- package/dist/types/ui/actions/DownloadMenu.d.ts +6 -29
- package/dist/types/ui/actions/SecretField.d.ts +6 -11
- package/dist/types/ui/actions/SelectionActions.d.ts +6 -13
- package/dist/types/ui/actions/tableRowText.d.ts +6 -0
- package/dist/types/ui/cards/RecordCard.d.ts +40 -0
- package/dist/types/ui/cards/RecordCardSkeleton.d.ts +12 -0
- package/dist/types/ui/countdown/Countdown.d.ts +22 -0
- package/dist/types/ui/countdown/countdownParts.d.ts +39 -0
- package/dist/types/ui/countdown/useCountdown.d.ts +14 -0
- package/dist/types/ui/documents/PdfViewerDialog.d.ts +14 -0
- package/dist/types/ui/filters/DateRangeFilter.d.ts +6 -10
- package/dist/types/ui/filters/FilterDrawer.d.ts +23 -0
- package/dist/types/ui/filters/PeriodRangeSelector.d.ts +6 -13
- package/dist/types/ui/filters/QuickFilters.d.ts +6 -12
- package/dist/types/ui/filters/filterDrawerFields.d.ts +139 -0
- package/dist/types/ui/help/HelpButton.d.ts +11 -0
- package/dist/types/ui/help/HelpCarouselDialog.d.ts +27 -0
- package/dist/types/ui/help/useHelpCarousel.d.ts +21 -0
- package/dist/types/ui/index.d.ts +10 -0
- package/dist/types/ui/labels/IconBadge.d.ts +34 -0
- package/dist/types/ui/labels/MarkedText.d.ts +10 -0
- package/dist/types/ui/labels/Tag.d.ts +6 -12
- package/dist/types/ui/labels/markedTextPieces.d.ts +22 -0
- package/dist/types/ui/layout/CollapsibleSection.d.ts +6 -12
- package/dist/types/ui/layout/ContentDialog.d.ts +6 -10
- package/dist/types/ui/layout/DefinitionList.d.ts +6 -9
- package/dist/types/ui/layout/DetailHeader.d.ts +6 -10
- package/dist/types/ui/layout/ErrorPage.d.ts +6 -17
- package/dist/types/ui/layout/FullPageLoader.d.ts +6 -6
- package/dist/types/ui/layout/GlassPanel.d.ts +6 -8
- package/dist/types/ui/layout/PageHeader.d.ts +6 -10
- package/dist/types/ui/layout/PageHeading.d.ts +6 -11
- package/dist/types/ui/layout/ProfileHeader.d.ts +6 -11
- package/dist/types/ui/layout/ScrollableRow.d.ts +6 -13
- package/dist/types/ui/layout/SectionCard.d.ts +6 -8
- package/dist/types/ui/metrics/BarList.d.ts +6 -12
- package/dist/types/ui/metrics/CalendarHeatmap.d.ts +6 -19
- package/dist/types/ui/metrics/ChartTooltip.d.ts +6 -6
- package/dist/types/ui/metrics/ColumnChart.d.ts +6 -25
- package/dist/types/ui/metrics/LineChart.d.ts +6 -20
- package/dist/types/ui/metrics/MetricCard.d.ts +6 -17
- package/dist/types/ui/metrics/TableToggle.d.ts +6 -6
- package/dist/types/ui/metrics/chartParts.d.ts +15 -30
- package/dist/types/ui/navigation/BackButton.d.ts +6 -9
- package/dist/types/ui/navigation/ColorSchemeToggle.d.ts +6 -9
- package/dist/types/ui/navigation/FontSizeToggle.d.ts +6 -8
- package/dist/types/ui/navigation/LanguageToggle.d.ts +6 -8
- package/dist/types/ui/navigation/PageBreadcrumbs.d.ts +6 -7
- package/dist/types/ui/navigation/RouteTabs.d.ts +39 -0
- package/dist/types/ui/navigation/routeTabMatching.d.ts +27 -0
- package/dist/types/ui/timeline/GroupedTimeline.d.ts +6 -23
- package/dist/types/upload/AttachmentsInput.d.ts +72 -0
- package/dist/types/upload/FileChip.d.ts +18 -0
- package/dist/types/upload/FileDropzone.d.ts +7 -19
- package/dist/types/upload/FileInput.d.ts +31 -0
- package/dist/types/upload/FileUploadInput.d.ts +56 -0
- package/dist/types/upload/ImageInput.d.ts +35 -0
- package/dist/types/upload/TemplateDownloadButton.d.ts +27 -0
- package/dist/types/upload/fileAppearance.d.ts +8 -0
- package/dist/types/upload/fileRules.d.ts +38 -0
- package/dist/types/upload/transferProgress.d.ts +18 -0
- package/dist/types/upload/uploadMachine.d.ts +6 -2
- package/dist/types/upload/uploadWithProgress.d.ts +6 -2
- package/dist/types/upload/useFilePicker.d.ts +39 -0
- package/dist/ui/actions/ActionsMenu.js +109 -17
- package/dist/ui/actions/ActionsMenu.js.map +1 -1
- package/dist/ui/actions/CopyButton.js +37 -12
- package/dist/ui/actions/CopyButton.js.map +1 -1
- package/dist/ui/actions/DownloadMenu.js +3 -2
- package/dist/ui/actions/DownloadMenu.js.map +1 -1
- package/dist/ui/actions/SecretField.js +8 -3
- package/dist/ui/actions/SecretField.js.map +1 -1
- package/dist/ui/actions/SelectionActions.js +3 -2
- package/dist/ui/actions/SelectionActions.js.map +1 -1
- package/dist/ui/actions/tableRowText.js +7 -0
- package/dist/ui/actions/tableRowText.js.map +1 -0
- package/dist/ui/cards/RecordCard.js +146 -0
- package/dist/ui/cards/RecordCard.js.map +1 -0
- package/dist/ui/cards/RecordCardSkeleton.js +38 -0
- package/dist/ui/cards/RecordCardSkeleton.js.map +1 -0
- package/dist/ui/countdown/Countdown.js +39 -0
- package/dist/ui/countdown/Countdown.js.map +1 -0
- package/dist/ui/countdown/countdownParts.js +34 -0
- package/dist/ui/countdown/countdownParts.js.map +1 -0
- package/dist/ui/countdown/useCountdown.js +35 -0
- package/dist/ui/countdown/useCountdown.js.map +1 -0
- package/dist/ui/documents/PdfViewerDialog.js +82 -0
- package/dist/ui/documents/PdfViewerDialog.js.map +1 -0
- package/dist/ui/filters/DateRangeFilter.js +3 -2
- package/dist/ui/filters/DateRangeFilter.js.map +1 -1
- package/dist/ui/filters/FilterDrawer.js +212 -0
- package/dist/ui/filters/FilterDrawer.js.map +1 -0
- package/dist/ui/filters/PeriodRangeSelector.js +3 -2
- package/dist/ui/filters/PeriodRangeSelector.js.map +1 -1
- package/dist/ui/filters/QuickFilters.js +3 -2
- package/dist/ui/filters/QuickFilters.js.map +1 -1
- package/dist/ui/filters/filterDrawerFields.js +119 -0
- package/dist/ui/filters/filterDrawerFields.js.map +1 -0
- package/dist/ui/help/HelpButton.js +22 -0
- package/dist/ui/help/HelpButton.js.map +1 -0
- package/dist/ui/help/HelpCarouselDialog.js +155 -0
- package/dist/ui/help/HelpCarouselDialog.js.map +1 -0
- package/dist/ui/help/useHelpCarousel.js +25 -0
- package/dist/ui/help/useHelpCarousel.js.map +1 -0
- package/dist/ui/labels/IconBadge.js +82 -0
- package/dist/ui/labels/IconBadge.js.map +1 -0
- package/dist/ui/labels/MarkedText.js +31 -0
- package/dist/ui/labels/MarkedText.js.map +1 -0
- package/dist/ui/labels/Tag.js +3 -2
- package/dist/ui/labels/Tag.js.map +1 -1
- package/dist/ui/labels/markedTextPieces.js +64 -0
- package/dist/ui/labels/markedTextPieces.js.map +1 -0
- package/dist/ui/layout/CollapsibleSection.js +3 -2
- package/dist/ui/layout/CollapsibleSection.js.map +1 -1
- package/dist/ui/layout/ContentDialog.js +3 -2
- package/dist/ui/layout/ContentDialog.js.map +1 -1
- package/dist/ui/layout/DefinitionList.js +3 -2
- package/dist/ui/layout/DefinitionList.js.map +1 -1
- package/dist/ui/layout/DetailHeader.js +3 -2
- package/dist/ui/layout/DetailHeader.js.map +1 -1
- package/dist/ui/layout/ErrorPage.js +3 -2
- package/dist/ui/layout/ErrorPage.js.map +1 -1
- package/dist/ui/layout/FullPageLoader.js +3 -2
- package/dist/ui/layout/FullPageLoader.js.map +1 -1
- package/dist/ui/layout/GlassPanel.js +3 -2
- package/dist/ui/layout/GlassPanel.js.map +1 -1
- package/dist/ui/layout/PageHeader.js +3 -2
- package/dist/ui/layout/PageHeader.js.map +1 -1
- package/dist/ui/layout/PageHeading.js +3 -2
- package/dist/ui/layout/PageHeading.js.map +1 -1
- package/dist/ui/layout/ProfileHeader.js +3 -2
- package/dist/ui/layout/ProfileHeader.js.map +1 -1
- package/dist/ui/layout/ScrollableRow.js +3 -2
- package/dist/ui/layout/ScrollableRow.js.map +1 -1
- package/dist/ui/layout/SectionCard.js +3 -2
- package/dist/ui/layout/SectionCard.js.map +1 -1
- package/dist/ui/metrics/BarList.js +3 -2
- package/dist/ui/metrics/BarList.js.map +1 -1
- package/dist/ui/metrics/CalendarHeatmap.js +3 -2
- package/dist/ui/metrics/CalendarHeatmap.js.map +1 -1
- package/dist/ui/metrics/ChartTooltip.js +3 -2
- package/dist/ui/metrics/ChartTooltip.js.map +1 -1
- package/dist/ui/metrics/ColumnChart.js +3 -2
- package/dist/ui/metrics/ColumnChart.js.map +1 -1
- package/dist/ui/metrics/LineChart.js +3 -2
- package/dist/ui/metrics/LineChart.js.map +1 -1
- package/dist/ui/metrics/MetricCard.js +3 -2
- package/dist/ui/metrics/MetricCard.js.map +1 -1
- package/dist/ui/metrics/TableToggle.js +3 -2
- package/dist/ui/metrics/TableToggle.js.map +1 -1
- package/dist/ui/metrics/chartParts.js +7 -4
- package/dist/ui/metrics/chartParts.js.map +1 -1
- package/dist/ui/navigation/BackButton.js +7 -2
- package/dist/ui/navigation/BackButton.js.map +1 -1
- package/dist/ui/navigation/ColorSchemeToggle.js +3 -2
- package/dist/ui/navigation/ColorSchemeToggle.js.map +1 -1
- package/dist/ui/navigation/FontSizeToggle.js +3 -2
- package/dist/ui/navigation/FontSizeToggle.js.map +1 -1
- package/dist/ui/navigation/LanguageToggle.js +3 -2
- package/dist/ui/navigation/LanguageToggle.js.map +1 -1
- package/dist/ui/navigation/PageBreadcrumbs.js +3 -2
- package/dist/ui/navigation/PageBreadcrumbs.js.map +1 -1
- package/dist/ui/navigation/RouteTabs.js +79 -0
- package/dist/ui/navigation/RouteTabs.js.map +1 -0
- package/dist/ui/navigation/routeTabMatching.js +23 -0
- package/dist/ui/navigation/routeTabMatching.js.map +1 -0
- package/dist/ui/timeline/GroupedTimeline.js +3 -2
- package/dist/ui/timeline/GroupedTimeline.js.map +1 -1
- package/dist/upload/AttachmentsInput.js +130 -0
- package/dist/upload/AttachmentsInput.js.map +1 -0
- package/dist/upload/FileChip.js +28 -0
- package/dist/upload/FileChip.js.map +1 -0
- package/dist/upload/FileDropzone.js +23 -87
- package/dist/upload/FileDropzone.js.map +1 -1
- package/dist/upload/FileInput.js +115 -0
- package/dist/upload/FileInput.js.map +1 -0
- package/dist/upload/FileUploadInput.js +288 -0
- package/dist/upload/FileUploadInput.js.map +1 -0
- package/dist/upload/ImageInput.js +128 -0
- package/dist/upload/ImageInput.js.map +1 -0
- package/dist/upload/TemplateDownloadButton.js +68 -0
- package/dist/upload/TemplateDownloadButton.js.map +1 -0
- package/dist/upload/fileAppearance.js +21 -0
- package/dist/upload/fileAppearance.js.map +1 -0
- package/dist/upload/fileRules.js +27 -1
- package/dist/upload/fileRules.js.map +1 -1
- package/dist/upload/transferProgress.js +23 -0
- package/dist/upload/transferProgress.js.map +1 -0
- package/dist/upload/uploadMachine.js +8 -8
- package/dist/upload/uploadMachine.js.map +1 -1
- package/dist/upload/uploadWithProgress.js +1 -1
- package/dist/upload/uploadWithProgress.js.map +1 -1
- package/dist/upload/useFilePicker.js +101 -0
- package/dist/upload/useFilePicker.js.map +1 -0
- package/package.json +44 -1
- package/cli/templates/project/src/app/combineTexts.js.tpl +0 -31
package/dist/forms/validation.js
CHANGED
|
@@ -1,47 +1,51 @@
|
|
|
1
1
|
import * as Yup from "yup";
|
|
2
2
|
const NAMESPACE = "validation";
|
|
3
|
-
function
|
|
4
|
-
return
|
|
3
|
+
function messageOf(name, rule, valuesOf) {
|
|
4
|
+
return (params = {}) => {
|
|
5
|
+
const values = { ...valuesOf ? valuesOf(params) : {}, ...params.label ? { label: params.label } : {} };
|
|
6
|
+
const fieldPath = params.originalPath ?? params.path;
|
|
7
|
+
return { key: `${NAMESPACE}:${name}`, values, rule, ...fieldPath ? { path: fieldPath } : {} };
|
|
8
|
+
};
|
|
5
9
|
}
|
|
6
10
|
const YUP_LOCALE = Object.freeze({
|
|
7
11
|
mixed: {
|
|
8
|
-
default:
|
|
9
|
-
required:
|
|
10
|
-
defined:
|
|
11
|
-
notNull:
|
|
12
|
-
notType:
|
|
13
|
-
oneOf: ({ values }) =>
|
|
14
|
-
notOneOf: ({ values }) =>
|
|
12
|
+
default: messageOf("default", "default"),
|
|
13
|
+
required: messageOf("required", "required"),
|
|
14
|
+
defined: messageOf("required", "defined"),
|
|
15
|
+
notNull: messageOf("required", "notNull"),
|
|
16
|
+
notType: messageOf("notType", "notType"),
|
|
17
|
+
oneOf: messageOf("oneOf", "oneOf", ({ values }) => ({ values: String(values) })),
|
|
18
|
+
notOneOf: messageOf("notOneOf", "notOneOf", ({ values }) => ({ values: String(values) }))
|
|
15
19
|
},
|
|
16
20
|
string: {
|
|
17
|
-
length: ({ length }) =>
|
|
18
|
-
min: ({ min }) =>
|
|
19
|
-
max: ({ max }) =>
|
|
20
|
-
matches:
|
|
21
|
-
email:
|
|
22
|
-
url:
|
|
23
|
-
uuid:
|
|
24
|
-
trim:
|
|
25
|
-
lowercase:
|
|
26
|
-
uppercase:
|
|
21
|
+
length: messageOf("stringLength", "length", ({ length }) => ({ count: length })),
|
|
22
|
+
min: messageOf("stringMin", "min", ({ min }) => ({ count: min })),
|
|
23
|
+
max: messageOf("stringMax", "max", ({ max }) => ({ count: max })),
|
|
24
|
+
matches: messageOf("matches", "matches"),
|
|
25
|
+
email: messageOf("email", "email"),
|
|
26
|
+
url: messageOf("url", "url"),
|
|
27
|
+
uuid: messageOf("uuid", "uuid"),
|
|
28
|
+
trim: messageOf("trim", "trim"),
|
|
29
|
+
lowercase: messageOf("lowercase", "lowercase"),
|
|
30
|
+
uppercase: messageOf("uppercase", "uppercase")
|
|
27
31
|
},
|
|
28
32
|
number: {
|
|
29
|
-
min: ({ min }) =>
|
|
30
|
-
max: ({ max }) =>
|
|
31
|
-
lessThan: ({ less }) =>
|
|
32
|
-
moreThan: ({ more }) =>
|
|
33
|
-
positive:
|
|
34
|
-
negative:
|
|
35
|
-
integer:
|
|
33
|
+
min: messageOf("numberMin", "min", ({ min }) => ({ min })),
|
|
34
|
+
max: messageOf("numberMax", "max", ({ max }) => ({ max })),
|
|
35
|
+
lessThan: messageOf("lessThan", "lessThan", ({ less }) => ({ less })),
|
|
36
|
+
moreThan: messageOf("moreThan", "moreThan", ({ more }) => ({ more })),
|
|
37
|
+
positive: messageOf("positive", "positive"),
|
|
38
|
+
negative: messageOf("negative", "negative"),
|
|
39
|
+
integer: messageOf("integer", "integer")
|
|
36
40
|
},
|
|
37
41
|
date: {
|
|
38
|
-
min: ({ min }) =>
|
|
39
|
-
max: ({ max }) =>
|
|
42
|
+
min: messageOf("dateMin", "min", ({ min }) => ({ min: String(min) })),
|
|
43
|
+
max: messageOf("dateMax", "max", ({ max }) => ({ max: String(max) }))
|
|
40
44
|
},
|
|
41
45
|
array: {
|
|
42
|
-
min: ({ min }) =>
|
|
43
|
-
max: ({ max }) =>
|
|
44
|
-
length: ({ length }) =>
|
|
46
|
+
min: messageOf("arrayMin", "min", ({ min }) => ({ count: min })),
|
|
47
|
+
max: messageOf("arrayMax", "max", ({ max }) => ({ count: max })),
|
|
48
|
+
length: messageOf("arrayLength", "length", ({ length }) => ({ count: length }))
|
|
45
49
|
}
|
|
46
50
|
});
|
|
47
51
|
function buildYupLocale() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sources":["../../src/forms/validation.js"],"sourcesContent":["// Mensajes por defecto de yup como LLAVES de i18n y no como texto.\n//\n// Por qué llaves: setLocale es global y se llama una sola vez. Con el texto en español, al cambiar a inglés los\n// errores seguirían en español hasta recargar. Con {key, values} el esquema no cambia y el texto se traduce al\n// PINTARLO (translateValidationMessage, lo usa FormTextField) en el idioma que esté activo en ese momento.\n//\n// Uso en un esquema: Yup.string().required().email() → sin textos pegados.\n// Mensaje propio de un campo: .required({key: 'auth:login.emailRequired'}) o .test('x', {key: 'modulo:llave'}, fn).\n//\n// IMPORTANTE: toda llave de aquí existe en los textos del paquete, namespace validation de locales/{es,en}.js (lo revisa\n// validation.test.js). La validación de aquí es para no gastar un viaje al servidor en lo obvio; la que protege es la\n// del backend.\n//\n// buildYupLocale() se llama UNA vez en la entrada de la aplicación, antes del primer esquema.\n//\n// Funciones puras, no renderizan: function (regla de la casa). Solo importa yup (se prueba con node --test).\nimport * as Yup from 'yup';\n\nconst NAMESPACE = 'validation';\n\n
|
|
1
|
+
{"version":3,"file":"validation.js","sources":["../../src/forms/validation.js"],"sourcesContent":["// Mensajes por defecto de yup como LLAVES de i18n y no como texto.\n//\n// Por qué llaves: setLocale es global y se llama una sola vez. Con el texto en español, al cambiar a inglés los\n// errores seguirían en español hasta recargar. Con {key, values} el esquema no cambia y el texto se traduce al\n// PINTARLO (translateValidationMessage, lo usa FormTextField) en el idioma que esté activo en ese momento.\n//\n// Uso en un esquema: Yup.string().required().email() → sin textos pegados.\n// Mensaje propio de un campo: .required({key: 'auth:login.emailRequired'}) o .test('x', {key: 'modulo:llave'}, fn).\n// O sin tocar el esquema: cada mensaje lleva su regla y su campo, y la pantalla (messages del campo) o los textos del\n// proyecto (validation:fields.<campo>.<regla>) ponen el suyo (translateValidationMessage, en validationMessages.js).\n//\n// IMPORTANTE: toda llave de aquí existe en los textos del paquete, namespace validation de locales/{es,en}.js (lo revisa\n// validation.test.js). La validación de aquí es para no gastar un viaje al servidor en lo obvio; la que protege es la\n// del backend.\n//\n// buildYupLocale() se llama UNA vez en la entrada de la aplicación, antes del primer esquema.\n//\n// Funciones puras, no renderizan: function (regla de la casa). Solo importa yup (se prueba con node --test).\nimport * as Yup from 'yup';\n\nconst NAMESPACE = 'validation';\n\n/**\n * Un mensaje de yup como llave: {key: 'validation:<nombre>', values, rule, path}.\n *\n * `rule` (la regla de yup que falló: required, min, matches…) y `path` (el campo) dejan que la pantalla o los textos del\n * proyecto pongan un mensaje propio para ese campo y esa regla sin tocar el esquema (translateValidationMessage). `label`\n * (el de .label('RFC') del esquema) va en los valores, para los textos que dicen el nombre del campo.\n *\n * @param {string} name el nombre del texto en el namespace validation\n * @param {string} rule la regla de yup\n * @param {(params: object) => object} [valuesOf] los valores del texto, sacados de lo que da yup (min, max…)\n * @returns {(params?: object) => {key: string, values: object, rule: string, path?: string}}\n */\nfunction messageOf(name, rule, valuesOf) {\n return (params = {}) => {\n const values = {...(valuesOf ? valuesOf(params) : {}), ...(params.label ? {label: params.label} : {})};\n // OJO: con .label('RFC') yup cambia params.path por el nombre visible; el campo de verdad viene en originalPath\n const fieldPath = params.originalPath ?? params.path;\n return {key: `${NAMESPACE}:${name}`, values, rule, ...(fieldPath ? {path: fieldPath} : {})};\n };\n}\n\n/** El locale de yup: cada mensaje por defecto es una llave del namespace validation, con su regla y su campo. */\nexport const YUP_LOCALE = Object.freeze({\n mixed: {\n default: messageOf('default', 'default'),\n required: messageOf('required', 'required'),\n defined: messageOf('required', 'defined'),\n notNull: messageOf('required', 'notNull'),\n notType: messageOf('notType', 'notType'),\n oneOf: messageOf('oneOf', 'oneOf', ({values}) => ({values: String(values)})),\n notOneOf: messageOf('notOneOf', 'notOneOf', ({values}) => ({values: String(values)})),\n },\n string: {\n length: messageOf('stringLength', 'length', ({length}) => ({count: length})),\n min: messageOf('stringMin', 'min', ({min}) => ({count: min})),\n max: messageOf('stringMax', 'max', ({max}) => ({count: max})),\n matches: messageOf('matches', 'matches'),\n email: messageOf('email', 'email'),\n url: messageOf('url', 'url'),\n uuid: messageOf('uuid', 'uuid'),\n trim: messageOf('trim', 'trim'),\n lowercase: messageOf('lowercase', 'lowercase'),\n uppercase: messageOf('uppercase', 'uppercase'),\n },\n number: {\n min: messageOf('numberMin', 'min', ({min}) => ({min})),\n max: messageOf('numberMax', 'max', ({max}) => ({max})),\n lessThan: messageOf('lessThan', 'lessThan', ({less}) => ({less})),\n moreThan: messageOf('moreThan', 'moreThan', ({more}) => ({more})),\n positive: messageOf('positive', 'positive'),\n negative: messageOf('negative', 'negative'),\n integer: messageOf('integer', 'integer'),\n },\n date: {\n min: messageOf('dateMin', 'min', ({min}) => ({min: String(min)})),\n max: messageOf('dateMax', 'max', ({max}) => ({max: String(max)})),\n },\n array: {\n min: messageOf('arrayMin', 'min', ({min}) => ({count: min})),\n max: messageOf('arrayMax', 'max', ({max}) => ({count: max})),\n length: messageOf('arrayLength', 'length', ({length}) => ({count: length})),\n },\n});\n\n/**\n * Instala el locale de llaves en yup. Se llama una vez en la entrada de la aplicación, antes del primer esquema.\n */\nexport function buildYupLocale() {\n Yup.setLocale(YUP_LOCALE);\n}\n\nexport {Yup};\n\n// el texto de un error en el idioma activo vive aparte (sin yup) para los campos sueltos; aquí se re-exporta\nexport {translateValidationMessage} from '@/forms/validationMessages.js';\n"],"names":[],"mappings":";AAoBA,MAAM,YAAY;AAclB,SAAS,UAAU,MAAM,MAAM,UAAU;AACrC,SAAO,CAAC,SAAS,OAAO;AACpB,UAAM,SAAS,EAAC,GAAI,WAAW,SAAS,MAAM,IAAI,IAAK,GAAI,OAAO,QAAQ,EAAC,OAAO,OAAO,MAAK,IAAI,CAAA,EAAG;AAErG,UAAM,YAAY,OAAO,gBAAgB,OAAO;AAChD,WAAO,EAAC,KAAK,GAAG,SAAS,IAAI,IAAI,IAAI,QAAQ,MAAM,GAAI,YAAY,EAAC,MAAM,UAAS,IAAI,CAAA,EAAG;AAAA,EAC9F;AACJ;AAGY,MAAC,aAAa,OAAO,OAAO;AAAA,EACpC,OAAO;AAAA,IACH,SAAS,UAAU,WAAW,SAAS;AAAA,IACvC,UAAU,UAAU,YAAY,UAAU;AAAA,IAC1C,SAAS,UAAU,YAAY,SAAS;AAAA,IACxC,SAAS,UAAU,YAAY,SAAS;AAAA,IACxC,SAAS,UAAU,WAAW,SAAS;AAAA,IACvC,OAAO,UAAU,SAAS,SAAS,CAAC,EAAC,OAAM,OAAO,EAAC,QAAQ,OAAO,MAAM,EAAC,EAAE;AAAA,IAC3E,UAAU,UAAU,YAAY,YAAY,CAAC,EAAC,OAAM,OAAO,EAAC,QAAQ,OAAO,MAAM,EAAC,EAAE;AAAA,EAC5F;AAAA,EACI,QAAQ;AAAA,IACJ,QAAQ,UAAU,gBAAgB,UAAU,CAAC,EAAC,OAAM,OAAO,EAAC,OAAO,OAAM,EAAE;AAAA,IAC3E,KAAK,UAAU,aAAa,OAAO,CAAC,EAAC,IAAG,OAAO,EAAC,OAAO,IAAG,EAAE;AAAA,IAC5D,KAAK,UAAU,aAAa,OAAO,CAAC,EAAC,IAAG,OAAO,EAAC,OAAO,IAAG,EAAE;AAAA,IAC5D,SAAS,UAAU,WAAW,SAAS;AAAA,IACvC,OAAO,UAAU,SAAS,OAAO;AAAA,IACjC,KAAK,UAAU,OAAO,KAAK;AAAA,IAC3B,MAAM,UAAU,QAAQ,MAAM;AAAA,IAC9B,MAAM,UAAU,QAAQ,MAAM;AAAA,IAC9B,WAAW,UAAU,aAAa,WAAW;AAAA,IAC7C,WAAW,UAAU,aAAa,WAAW;AAAA,EACrD;AAAA,EACI,QAAQ;AAAA,IACJ,KAAK,UAAU,aAAa,OAAO,CAAC,EAAC,IAAG,OAAO,EAAC,IAAG,EAAE;AAAA,IACrD,KAAK,UAAU,aAAa,OAAO,CAAC,EAAC,IAAG,OAAO,EAAC,IAAG,EAAE;AAAA,IACrD,UAAU,UAAU,YAAY,YAAY,CAAC,EAAC,KAAI,OAAO,EAAC,KAAI,EAAE;AAAA,IAChE,UAAU,UAAU,YAAY,YAAY,CAAC,EAAC,KAAI,OAAO,EAAC,KAAI,EAAE;AAAA,IAChE,UAAU,UAAU,YAAY,UAAU;AAAA,IAC1C,UAAU,UAAU,YAAY,UAAU;AAAA,IAC1C,SAAS,UAAU,WAAW,SAAS;AAAA,EAC/C;AAAA,EACI,MAAM;AAAA,IACF,KAAK,UAAU,WAAW,OAAO,CAAC,EAAC,IAAG,OAAO,EAAC,KAAK,OAAO,GAAG,EAAC,EAAE;AAAA,IAChE,KAAK,UAAU,WAAW,OAAO,CAAC,EAAC,IAAG,OAAO,EAAC,KAAK,OAAO,GAAG,EAAC,EAAE;AAAA,EACxE;AAAA,EACI,OAAO;AAAA,IACH,KAAK,UAAU,YAAY,OAAO,CAAC,EAAC,IAAG,OAAO,EAAC,OAAO,IAAG,EAAE;AAAA,IAC3D,KAAK,UAAU,YAAY,OAAO,CAAC,EAAC,IAAG,OAAO,EAAC,OAAO,IAAG,EAAE;AAAA,IAC3D,QAAQ,UAAU,eAAe,UAAU,CAAC,EAAC,OAAM,OAAO,EAAC,OAAO,OAAM,EAAE;AAAA,EAClF;AACA,CAAC;AAKM,SAAS,iBAAiB;AAC7B,MAAI,UAAU,UAAU;AAC5B;"}
|
|
@@ -1,16 +1,73 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { createLogger } from "../observability/logger.js";
|
|
2
|
+
const NAMESPACE = "validation";
|
|
3
|
+
const DEFAULT_MESSAGE_KEY = `${NAMESPACE}:default`;
|
|
4
|
+
const log = createLogger("forms");
|
|
5
|
+
const warnedShapes = /* @__PURE__ */ new Set();
|
|
6
|
+
function fieldKeyOf(path) {
|
|
7
|
+
return String(path).replace(/\[\d+\]/g, "").split(".").filter((step) => step !== "" && !/^\d+$/.test(step)).join(".");
|
|
8
|
+
}
|
|
9
|
+
function normalizedValidationMessage(error) {
|
|
10
|
+
if (typeof error === "string") {
|
|
11
|
+
return { text: error };
|
|
12
|
+
}
|
|
13
|
+
if (!error || typeof error !== "object") {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const key = typeof error.key === "string" ? error.key : typeof error.msg === "string" ? error.msg : null;
|
|
17
|
+
if (key) {
|
|
18
|
+
return { key, values: error.values ?? error.params ?? {}, rule: error.rule, path: error.path };
|
|
19
|
+
}
|
|
20
|
+
if (typeof error.message === "string") {
|
|
21
|
+
return { text: error.message };
|
|
22
|
+
}
|
|
23
|
+
if (error.message && typeof error.message === "object") {
|
|
24
|
+
const inner = normalizedValidationMessage(error.message);
|
|
25
|
+
return inner && "key" in inner && !inner.rule && error.type ? { ...inner, rule: error.type } : inner;
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
function warnUnknownShape(error) {
|
|
30
|
+
const shape = Object.keys(error).sort().join(",");
|
|
31
|
+
if (warnedShapes.has(shape)) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
warnedShapes.add(shape);
|
|
35
|
+
log.warn(`Un mensaje de validación con forma desconocida ({${shape}}): se enseña el mensaje general. Conéctelo con readValidationMessage de ToolkitProvider.`);
|
|
36
|
+
}
|
|
37
|
+
function translateValidationMessage(translate, error, { label, messages, readMessage, fieldName } = {}) {
|
|
38
|
+
if (error === void 0 || error === null || error === "" || error === false) {
|
|
3
39
|
return void 0;
|
|
4
40
|
}
|
|
5
|
-
|
|
6
|
-
|
|
41
|
+
const read = readMessage ? readMessage(error) : void 0;
|
|
42
|
+
const message = normalizedValidationMessage(read === void 0 || read === null ? error : read);
|
|
43
|
+
if (!message) {
|
|
44
|
+
warnUnknownShape(typeof error === "object" ? error : { value: error });
|
|
45
|
+
return translate(DEFAULT_MESSAGE_KEY);
|
|
7
46
|
}
|
|
8
|
-
if (
|
|
9
|
-
return
|
|
47
|
+
if ("text" in message) {
|
|
48
|
+
return message.text;
|
|
10
49
|
}
|
|
11
|
-
|
|
50
|
+
const values = label && message.values.label === void 0 ? { ...message.values, label } : message.values;
|
|
51
|
+
const ownMessage = message.rule ? messages?.[message.rule] : void 0;
|
|
52
|
+
if (ownMessage !== void 0 && ownMessage !== null) {
|
|
53
|
+
return translateValidationMessage(translate, ownMessage, { label });
|
|
54
|
+
}
|
|
55
|
+
const path = message.path ?? fieldName;
|
|
56
|
+
if (message.rule && path) {
|
|
57
|
+
const fieldText = translate(`${NAMESPACE}:fields.${fieldKeyOf(path)}.${message.rule}`, { ...values, defaultValue: "" });
|
|
58
|
+
if (fieldText) {
|
|
59
|
+
return fieldText;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return translate(message.key, values);
|
|
63
|
+
}
|
|
64
|
+
function ruleMessageOf(key, rule, values = {}) {
|
|
65
|
+
return { key, values, rule };
|
|
12
66
|
}
|
|
13
67
|
export {
|
|
68
|
+
fieldKeyOf,
|
|
69
|
+
normalizedValidationMessage,
|
|
70
|
+
ruleMessageOf,
|
|
14
71
|
translateValidationMessage
|
|
15
72
|
};
|
|
16
73
|
//# sourceMappingURL=validationMessages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validationMessages.js","sources":["../../src/forms/validationMessages.js"],"sourcesContent":["// El texto de un error de validación en el idioma activo. Aparte de validation.js a propósito: no importa yup, así lo usan\n// los campos sueltos de la puerta principal (inputs/) sin cargar yup en un proyecto que no valida con él.\n//\n//
|
|
1
|
+
{"version":3,"file":"validationMessages.js","sources":["../../src/forms/validationMessages.js"],"sourcesContent":["// El texto de un error de validación en el idioma activo. Aparte de validation.js a propósito: no importa yup, así lo usan\n// los campos sueltos de la puerta principal (inputs/) sin cargar yup en un proyecto que no valida con él.\n//\n// De dónde sale el texto, en este orden (el primero que exista gana):\n// 1. el de la pantalla para ese campo y esa regla: <TextInput messages={{matches: 'El RFC lleva 12 o 13 caracteres'}} />\n// 2. el de los textos del proyecto para ese campo y esa regla: validation:fields.<campo>.<regla>\n// ({es: {validation: {fields: {rfc: {matches: '…'}}}}}); el campo sin índices de lista (contacts[2].email → contacts.email)\n// 3. el del mensaje mismo: la llave que puso Calcita (buildYupLocale) o el esquema ({key: 'clientes:rfcLargo'})\n// Así el negocio pide un mensaje muy específico y se agrega un texto, sin tocar el esquema ni los mensajes de Calcita.\n//\n// Las formas de mensaje que entiende (readValidationMessage de ToolkitProvider lee cualquier otra, la de un sistema que ya\n// existe):\n// 'El correo ya existe.' un texto ya escrito (el del backend): tal cual\n// {key, values} la de Calcita (y rule y path, que pone buildYupLocale)\n// {msg, values} la de muchos sistemas con i18next (su setLocale de yup)\n// {message: 'texto'} un texto dentro de un objeto\n// {message: {…}, type} el error entero de react-hook-form: se lee su message\n// Una forma que no entiende NO se pinta como «[object Object]»: sale el mensaje general y se avisa en la consola.\n//\n// Funciones puras, no renderizan: function (regla de la casa).\nimport {createLogger} from '@/observability/logger.js';\n\nconst NAMESPACE = 'validation';\nconst DEFAULT_MESSAGE_KEY = `${NAMESPACE}:default`;\nconst log = createLogger('forms');\n// las formas de mensaje que no se entendieron y de las que ya se avisó (una vez por forma)\nconst warnedShapes = new Set();\n\n/**\n * El campo sin índices de lista, para buscar su texto propio: 'contacts[2].email' y 'contacts.2.email' son 'contacts.email'.\n *\n * @param {string} path\n * @returns {string}\n */\nexport function fieldKeyOf(path) {\n return String(path)\n .replace(/\\[\\d+\\]/g, '')\n .split('.')\n .filter((step) => step !== '' && !/^\\d+$/.test(step))\n .join('.');\n}\n\n/**\n * Un mensaje en la forma de Calcita, venga como venga.\n *\n * @param {unknown} error\n * @returns {{text: string}|{key: string, values: object, rule?: string, path?: string}|null} null: no se entendió\n */\nexport function normalizedValidationMessage(error) {\n if (typeof error === 'string') {\n return {text: error};\n }\n if (!error || typeof error !== 'object') {\n return null;\n }\n const key = typeof error.key === 'string' ? error.key : (typeof error.msg === 'string' ? error.msg : null);\n if (key) {\n return {key, values: error.values ?? error.params ?? {}, rule: error.rule, path: error.path};\n }\n if (typeof error.message === 'string') {\n return {text: error.message};\n }\n if (error.message && typeof error.message === 'object') {\n const inner = normalizedValidationMessage(error.message);\n // el error de react-hook-form trae la regla en `type`\n return inner && 'key' in inner && !inner.rule && error.type ? {...inner, rule: error.type} : inner;\n }\n return null;\n}\n\n/**\n * Avisa una vez por forma de un mensaje que no se entendió (sus llaves), en vez de pintar «[object Object]».\n *\n * @param {object} error\n * @returns {void}\n */\nfunction warnUnknownShape(error) {\n const shape = Object.keys(error).sort().join(',');\n if (warnedShapes.has(shape)) {\n return;\n }\n warnedShapes.add(shape);\n log.warn(`Un mensaje de validación con forma desconocida ({${shape}}): se enseña el mensaje general. Conéctelo con readValidationMessage de ToolkitProvider.`);\n}\n\n/**\n * Texto de un error de validación en el idioma activo.\n *\n * @param {(key: string, values?: object) => string} translate el t de useToolkitTranslation (respeta `defaultValue`, como el\n * de i18next: con él busca los textos opcionales sin avisar que faltan)\n * @param {unknown} error lo que dejó la validación en el campo\n * @param {object} [options]\n * @param {string} [options.label] el nombre del campo, para los textos que lo dicen ({{label}}: «Escriba {{label}}»)\n * @param {Record<string, string|object>} [options.messages] los textos de la pantalla para este campo, por regla\n * ({required: 'Escriba el RFC', matches: 'El RFC lleva 12 o 13 caracteres'}); ya traducidos o como {key, values}\n * @param {((error: unknown) => unknown)|null} [options.readMessage] cómo leer el mensaje de un sistema que ya existe\n * (readValidationMessage de ToolkitProvider): regresa un texto, {key, values} o undefined para la lectura de siempre\n * @param {string} [options.fieldName] el name del campo que pinta el error: para el texto propio de ese campo cuando el\n * mensaje no trae su campo (las reglas propias, los de un sistema que ya existe)\n * @returns {string|undefined}\n */\nexport function translateValidationMessage(translate, error, {label, messages, readMessage, fieldName} = {}) {\n if (error === undefined || error === null || error === '' || error === false) {\n return undefined;\n }\n const read = readMessage ? readMessage(error) : undefined;\n const message = normalizedValidationMessage(read === undefined || read === null ? error : read);\n if (!message) {\n warnUnknownShape(typeof error === 'object' ? error : {value: error});\n return translate(DEFAULT_MESSAGE_KEY);\n }\n if ('text' in message) {\n return message.text;\n }\n const values = label && message.values.label === undefined ? {...message.values, label} : message.values;\n\n // 1. el de la pantalla para esta regla\n const ownMessage = message.rule ? messages?.[message.rule] : undefined;\n if (ownMessage !== undefined && ownMessage !== null) {\n return translateValidationMessage(translate, ownMessage, {label});\n }\n // 2. el de los textos del proyecto para este campo y esta regla (opcional: sin él no se avisa que falta)\n const path = message.path ?? fieldName;\n if (message.rule && path) {\n const fieldText = translate(`${NAMESPACE}:fields.${fieldKeyOf(path)}.${message.rule}`, {...values, defaultValue: ''});\n if (fieldText) {\n return fieldText;\n }\n }\n // 3. el del mensaje\n return translate(message.key, values);\n}\n\n/**\n * El mensaje de una regla propia (.test) como lo dejan las de Calcita: su llave, sus valores y el nombre de la regla, para\n * que la pantalla (messages del campo) o los textos del proyecto (validation:fields.<campo>.<regla>) pongan el suyo sin\n * tocar el esquema. Es un objeto fijo: quien lo lea (rule.message.key) lo encuentra como siempre.\n *\n * {name: 'percent', message: ruleMessageOf('validation:percent', 'percent', {min: 0, max: 100}), test: …}\n *\n * @param {string} key la llave del texto ('validation:percent')\n * @param {string} rule el nombre de la regla\n * @param {object} [values] los valores del texto\n * @returns {{key: string, values: object, rule: string}}\n */\nexport function ruleMessageOf(key, rule, values = {}) {\n return {key, values, rule};\n}\n"],"names":[],"mappings":";AAsBA,MAAM,YAAY;AAClB,MAAM,sBAAsB,GAAG,SAAS;AACxC,MAAM,MAAM,aAAa,OAAO;AAEhC,MAAM,eAAe,oBAAI,IAAG;AAQrB,SAAS,WAAW,MAAM;AAC7B,SAAO,OAAO,IAAI,EACb,QAAQ,YAAY,EAAE,EACtB,MAAM,GAAG,EACT,OAAO,CAAC,SAAS,SAAS,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,EACnD,KAAK,GAAG;AACjB;AAQO,SAAS,4BAA4B,OAAO;AAC/C,MAAI,OAAO,UAAU,UAAU;AAC3B,WAAO,EAAC,MAAM,MAAK;AAAA,EACvB;AACA,MAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACrC,WAAO;AAAA,EACX;AACA,QAAM,MAAM,OAAO,MAAM,QAAQ,WAAW,MAAM,MAAO,OAAO,MAAM,QAAQ,WAAW,MAAM,MAAM;AACrG,MAAI,KAAK;AACL,WAAO,EAAC,KAAK,QAAQ,MAAM,UAAU,MAAM,UAAU,CAAA,GAAI,MAAM,MAAM,MAAM,MAAM,MAAM,KAAI;AAAA,EAC/F;AACA,MAAI,OAAO,MAAM,YAAY,UAAU;AACnC,WAAO,EAAC,MAAM,MAAM,QAAO;AAAA,EAC/B;AACA,MAAI,MAAM,WAAW,OAAO,MAAM,YAAY,UAAU;AACpD,UAAM,QAAQ,4BAA4B,MAAM,OAAO;AAEvD,WAAO,SAAS,SAAS,SAAS,CAAC,MAAM,QAAQ,MAAM,OAAO,EAAC,GAAG,OAAO,MAAM,MAAM,KAAI,IAAI;AAAA,EACjG;AACA,SAAO;AACX;AAQA,SAAS,iBAAiB,OAAO;AAC7B,QAAM,QAAQ,OAAO,KAAK,KAAK,EAAE,KAAI,EAAG,KAAK,GAAG;AAChD,MAAI,aAAa,IAAI,KAAK,GAAG;AACzB;AAAA,EACJ;AACA,eAAa,IAAI,KAAK;AACtB,MAAI,KAAK,oDAAoD,KAAK,2FAA2F;AACjK;AAkBO,SAAS,2BAA2B,WAAW,OAAO,EAAC,OAAO,UAAU,aAAa,UAAS,IAAI,IAAI;AACzG,MAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,MAAM,UAAU,OAAO;AAC1E,WAAO;AAAA,EACX;AACA,QAAM,OAAO,cAAc,YAAY,KAAK,IAAI;AAChD,QAAM,UAAU,4BAA4B,SAAS,UAAa,SAAS,OAAO,QAAQ,IAAI;AAC9F,MAAI,CAAC,SAAS;AACV,qBAAiB,OAAO,UAAU,WAAW,QAAQ,EAAC,OAAO,MAAK,CAAC;AACnE,WAAO,UAAU,mBAAmB;AAAA,EACxC;AACA,MAAI,UAAU,SAAS;AACnB,WAAO,QAAQ;AAAA,EACnB;AACA,QAAM,SAAS,SAAS,QAAQ,OAAO,UAAU,SAAY,EAAC,GAAG,QAAQ,QAAQ,MAAK,IAAI,QAAQ;AAGlG,QAAM,aAAa,QAAQ,OAAO,WAAW,QAAQ,IAAI,IAAI;AAC7D,MAAI,eAAe,UAAa,eAAe,MAAM;AACjD,WAAO,2BAA2B,WAAW,YAAY,EAAC,MAAK,CAAC;AAAA,EACpE;AAEA,QAAM,OAAO,QAAQ,QAAQ;AAC7B,MAAI,QAAQ,QAAQ,MAAM;AACtB,UAAM,YAAY,UAAU,GAAG,SAAS,WAAW,WAAW,IAAI,CAAC,IAAI,QAAQ,IAAI,IAAI,EAAC,GAAG,QAAQ,cAAc,GAAE,CAAC;AACpH,QAAI,WAAW;AACX,aAAO;AAAA,IACX;AAAA,EACJ;AAEA,SAAO,UAAU,QAAQ,KAAK,MAAM;AACxC;AAcO,SAAS,cAAc,KAAK,MAAM,SAAS,CAAA,GAAI;AAClD,SAAO,EAAC,KAAK,QAAQ,KAAI;AAC7B;"}
|
package/dist/forms.js
CHANGED
|
@@ -1,55 +1,80 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { FieldArray, Form, Formik, useField, useFormikContext } from "formik";
|
|
3
|
-
import { default as default2 } from "./forms/
|
|
4
|
-
import { default as default3 } from "./forms/
|
|
5
|
-
import { default as default4 } from "./forms/
|
|
6
|
-
import { default as default5 } from "./forms/
|
|
7
|
-
import { default as default6 } from "./forms/
|
|
8
|
-
import { default as default7 } from "./forms/
|
|
9
|
-
import { default as default8 } from "./forms/
|
|
10
|
-
import { default as default9 } from "./forms/
|
|
11
|
-
import { default as default10 } from "./forms/
|
|
12
|
-
import { default as default11 } from "./forms/
|
|
13
|
-
import { default as default12 } from "./forms/
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
3
|
+
import { default as default2 } from "./forms/FormAttachmentsField.js";
|
|
4
|
+
import { default as default3 } from "./forms/FormCatalogField.js";
|
|
5
|
+
import { default as default4 } from "./forms/FormCheckboxGroupField.js";
|
|
6
|
+
import { default as default5 } from "./forms/FormColorField.js";
|
|
7
|
+
import { default as default6 } from "./forms/FormFileField.js";
|
|
8
|
+
import { default as default7 } from "./forms/FormFileUploadField.js";
|
|
9
|
+
import { default as default8 } from "./forms/FormImageField.js";
|
|
10
|
+
import { default as default9 } from "./forms/FormMaskedField.js";
|
|
11
|
+
import { default as default10 } from "./forms/FormNumberField.js";
|
|
12
|
+
import { default as default11 } from "./forms/FormProblemAlert.js";
|
|
13
|
+
import { default as default12 } from "./forms/FormRepeatingFields.js";
|
|
14
|
+
import { default as default13 } from "./forms/FormTransferListField.js";
|
|
15
|
+
import { listTotalAtMostRule, listTotalOf, orderedInListRule, uniqueInListRule } from "./forms/listRules.js";
|
|
16
|
+
import { percentRule, sameAsFieldRule } from "./forms/fieldRules.js";
|
|
17
|
+
import { default as default14 } from "./forms/FormSelectField.js";
|
|
18
|
+
import { default as default15 } from "./forms/FormServerProblem.js";
|
|
19
|
+
import { default as default16 } from "./forms/FormTextField.js";
|
|
20
|
+
import { default as default17 } from "./forms/FormWizard.js";
|
|
21
|
+
import { default as default18 } from "./forms/auth/ChangePasswordForm.js";
|
|
22
|
+
import { default as default19 } from "./forms/auth/ForgotPasswordForm.js";
|
|
23
|
+
import { default as default20 } from "./forms/auth/SignInForm.js";
|
|
24
|
+
import { SECOND_STEP_METHOD, default as default21 } from "./forms/security/SecondStepForm.js";
|
|
25
|
+
import { default as default22 } from "./forms/security/TwoStepVerificationCard.js";
|
|
16
26
|
import { RECOVERY_CODE_PATTERN, TOTP_CODE_PATTERN, normalizeRecoveryCode, normalizeTotpCode } from "./forms/security/securityRules.js";
|
|
17
|
-
import { default as
|
|
27
|
+
import { default as default23 } from "./forms/SubmitButton.js";
|
|
18
28
|
import { applyServerProblem } from "./forms/applyServerProblem.js";
|
|
19
|
-
import { formLevelMessageOf, splitServerFieldErrors } from "./forms/serverProblemFields.js";
|
|
29
|
+
import { formLevelMessageOf, splitRowFieldErrors, splitServerFieldErrors } from "./forms/serverProblemFields.js";
|
|
20
30
|
import { useFormikField } from "./forms/useFormikField.js";
|
|
21
31
|
import { buildYupLocale } from "./forms/validation.js";
|
|
22
32
|
import * as Yup from "yup";
|
|
23
33
|
import { translateValidationMessage } from "./forms/validationMessages.js";
|
|
24
34
|
export {
|
|
25
|
-
|
|
35
|
+
default18 as ChangePasswordForm,
|
|
26
36
|
FieldArray,
|
|
27
|
-
|
|
37
|
+
default19 as ForgotPasswordForm,
|
|
28
38
|
Form,
|
|
29
|
-
default2 as
|
|
30
|
-
default3 as
|
|
31
|
-
default4 as
|
|
32
|
-
default5 as
|
|
33
|
-
default6 as
|
|
34
|
-
default7 as
|
|
35
|
-
default8 as
|
|
36
|
-
default9 as
|
|
39
|
+
default2 as FormAttachmentsField,
|
|
40
|
+
default3 as FormCatalogField,
|
|
41
|
+
default4 as FormCheckboxGroupField,
|
|
42
|
+
default5 as FormColorField,
|
|
43
|
+
default6 as FormFileField,
|
|
44
|
+
default7 as FormFileUploadField,
|
|
45
|
+
default8 as FormImageField,
|
|
46
|
+
default9 as FormMaskedField,
|
|
47
|
+
default10 as FormNumberField,
|
|
48
|
+
default11 as FormProblemAlert,
|
|
49
|
+
default12 as FormRepeatingFields,
|
|
50
|
+
default14 as FormSelectField,
|
|
51
|
+
default15 as FormServerProblem,
|
|
52
|
+
default16 as FormTextField,
|
|
53
|
+
default13 as FormTransferListField,
|
|
54
|
+
default17 as FormWizard,
|
|
37
55
|
Formik,
|
|
38
56
|
RECOVERY_CODE_PATTERN,
|
|
39
57
|
SECOND_STEP_METHOD,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
58
|
+
default21 as SecondStepForm,
|
|
59
|
+
default20 as SignInForm,
|
|
60
|
+
default23 as SubmitButton,
|
|
43
61
|
TOTP_CODE_PATTERN,
|
|
44
|
-
|
|
62
|
+
default22 as TwoStepVerificationCard,
|
|
45
63
|
Yup,
|
|
46
64
|
applyServerProblem,
|
|
47
65
|
buildYupLocale,
|
|
48
66
|
formLevelMessageOf,
|
|
67
|
+
listTotalAtMostRule,
|
|
68
|
+
listTotalOf,
|
|
49
69
|
normalizeRecoveryCode,
|
|
50
70
|
normalizeTotpCode,
|
|
71
|
+
orderedInListRule,
|
|
72
|
+
percentRule,
|
|
73
|
+
sameAsFieldRule,
|
|
74
|
+
splitRowFieldErrors,
|
|
51
75
|
splitServerFieldErrors,
|
|
52
76
|
translateValidationMessage,
|
|
77
|
+
uniqueInListRule,
|
|
53
78
|
useField,
|
|
54
79
|
useFormikContext,
|
|
55
80
|
useFormikField
|
package/dist/forms.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forms.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"forms.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useHookFormField } from "./useHookFormField.js";
|
|
4
|
+
import AttachmentsInput from "../upload/AttachmentsInput.js";
|
|
5
|
+
function FormAttachmentsField({ name, control, ...inputProps }) {
|
|
6
|
+
const fieldProps = useHookFormField(name, control);
|
|
7
|
+
return /* @__PURE__ */ jsx(AttachmentsInput, { ...inputProps, ...fieldProps });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
FormAttachmentsField as default
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=FormAttachmentsField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormAttachmentsField.js","sources":["../../src/hookForm/FormAttachmentsField.jsx"],"sourcesContent":["// Campo de varios archivos de react-hook-form: AttachmentsInput (upload/) conectado a su campo con useController. Se ve y\n// se porta igual que el FormAttachmentsField de formik (@stackcraftmx/calcita/forms).\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useHookFormField} from '@/hookForm/useHookFormField.js';\nimport AttachmentsInput from '@/upload/AttachmentsInput.jsx';\n\n/**\n * @param {{name: string, control?: object} & Omit<Parameters<typeof import('@/upload/AttachmentsInput.jsx').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las del campo de la casa, sin\n * value / onChange / onBlur / error; control: el de useForm, si la pantalla no usa FormProvider\n */\nexport default function FormAttachmentsField({name, control, ...inputProps}) {\n const fieldProps = useHookFormField(name, control);\n return <AttachmentsInput {...inputProps} {...fieldProps} />;\n}\n"],"names":[],"mappings":";;;;AAWA,SAAwB,qBAAqB,EAAC,MAAM,SAAS,GAAG,cAAa;AACzE,QAAM,aAAa,iBAAiB,MAAM,OAAO;AACjD,SAAO,oBAAC,kBAAA,EAAkB,GAAG,YAAa,GAAG,WAAA,CAAY;AAC7D;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useHookFormField } from "./useHookFormField.js";
|
|
4
|
+
import CheckboxGroupInput from "../inputs/CheckboxGroupInput.js";
|
|
5
|
+
function FormCheckboxGroupField({ name, control, ...inputProps }) {
|
|
6
|
+
const fieldProps = useHookFormField(name, control);
|
|
7
|
+
return /* @__PURE__ */ jsx(CheckboxGroupInput, { ...inputProps, ...fieldProps });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
FormCheckboxGroupField as default
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=FormCheckboxGroupField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormCheckboxGroupField.js","sources":["../../src/hookForm/FormCheckboxGroupField.jsx"],"sourcesContent":["// El grupo de casillas de react-hook-form: CheckboxGroupInput (inputs/) conectado con useController. Se ve y se porta\n// igual que el de formik (@stackcraftmx/calcita/forms).\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useHookFormField} from '@/hookForm/useHookFormField.js';\nimport CheckboxGroupInput from '@/inputs/CheckboxGroupInput.jsx';\n\n/**\n * @param {{name: string, control?: object} & Omit<Parameters<typeof import('@/inputs/CheckboxGroupInput.jsx').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las del campo de la casa, sin\n * value / onChange / onBlur / error; control: el de useForm, si la pantalla no usa FormProvider\n */\nexport default function FormCheckboxGroupField({name, control, ...inputProps}) {\n const fieldProps = useHookFormField(name, control);\n return <CheckboxGroupInput {...inputProps} {...fieldProps} />;\n}\n"],"names":[],"mappings":";;;;AAWA,SAAwB,uBAAuB,EAAC,MAAM,SAAS,GAAG,cAAa;AAC3E,QAAM,aAAa,iBAAiB,MAAM,OAAO;AACjD,SAAO,oBAAC,oBAAA,EAAoB,GAAG,YAAa,GAAG,WAAA,CAAY;AAC/D;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useHookFormField } from "./useHookFormField.js";
|
|
4
|
+
import FileInput from "../upload/FileInput.js";
|
|
5
|
+
function FormFileField({ name, control, ...inputProps }) {
|
|
6
|
+
const fieldProps = useHookFormField(name, control);
|
|
7
|
+
return /* @__PURE__ */ jsx(FileInput, { ...inputProps, ...fieldProps });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
FormFileField as default
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=FormFileField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormFileField.js","sources":["../../src/hookForm/FormFileField.jsx"],"sourcesContent":["// Campo de un archivo de react-hook-form: FileInput (upload/) conectado a su campo con useController. Se ve y se porta igual\n// que el FormFileField de formik (@stackcraftmx/calcita/forms).\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useHookFormField} from '@/hookForm/useHookFormField.js';\nimport FileInput from '@/upload/FileInput.jsx';\n\n/**\n * @param {{name: string, control?: object} & Omit<Parameters<typeof import('@/upload/FileInput.jsx').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las del campo de la casa, sin\n * value / onChange / onBlur / error; control: el de useForm, si la pantalla no usa FormProvider\n */\nexport default function FormFileField({name, control, ...inputProps}) {\n const fieldProps = useHookFormField(name, control);\n return <FileInput {...inputProps} {...fieldProps} />;\n}\n"],"names":[],"mappings":";;;;AAWA,SAAwB,cAAc,EAAC,MAAM,SAAS,GAAG,cAAa;AAClE,QAAM,aAAa,iBAAiB,MAAM,OAAO;AACjD,SAAO,oBAAC,WAAA,EAAW,GAAG,YAAa,GAAG,WAAA,CAAY;AACtD;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useHookFormField } from "./useHookFormField.js";
|
|
4
|
+
import FileUploadInput from "../upload/FileUploadInput.js";
|
|
5
|
+
function FormFileUploadField({ name, control, ...inputProps }) {
|
|
6
|
+
const fieldProps = useHookFormField(name, control);
|
|
7
|
+
return /* @__PURE__ */ jsx(FileUploadInput, { ...inputProps, ...fieldProps });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
FormFileUploadField as default
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=FormFileUploadField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormFileUploadField.js","sources":["../../src/hookForm/FormFileUploadField.jsx"],"sourcesContent":["// El cargador mini de react-hook-form: FileUploadInput (upload/) conectado a su campo con useController. Se ve y se porta\n// igual que el FormFileUploadField de formik (@stackcraftmx/calcita/forms).\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useHookFormField} from '@/hookForm/useHookFormField.js';\nimport FileUploadInput from '@/upload/FileUploadInput.jsx';\n\n/**\n * @param {{name: string, control?: object} & Omit<Parameters<typeof import('@/upload/FileUploadInput.jsx').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las del campo de la casa, sin\n * value / onChange / onBlur / error; control: el de useForm, si la pantalla no usa FormProvider\n */\nexport default function FormFileUploadField({name, control, ...inputProps}) {\n const fieldProps = useHookFormField(name, control);\n return <FileUploadInput {...inputProps} {...fieldProps} />;\n}\n"],"names":[],"mappings":";;;;AAWA,SAAwB,oBAAoB,EAAC,MAAM,SAAS,GAAG,cAAa;AACxE,QAAM,aAAa,iBAAiB,MAAM,OAAO;AACjD,SAAO,oBAAC,iBAAA,EAAiB,GAAG,YAAa,GAAG,WAAA,CAAY;AAC5D;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useHookFormField } from "./useHookFormField.js";
|
|
4
|
+
import ImageInput from "../upload/ImageInput.js";
|
|
5
|
+
function FormImageField({ name, control, ...inputProps }) {
|
|
6
|
+
const fieldProps = useHookFormField(name, control);
|
|
7
|
+
return /* @__PURE__ */ jsx(ImageInput, { ...inputProps, ...fieldProps });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
FormImageField as default
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=FormImageField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormImageField.js","sources":["../../src/hookForm/FormImageField.jsx"],"sourcesContent":["// Campo de una imagen de react-hook-form: ImageInput (upload/) conectado a su campo con useController. Se ve y se porta igual\n// que el FormImageField de formik (@stackcraftmx/calcita/forms).\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useHookFormField} from '@/hookForm/useHookFormField.js';\nimport ImageInput from '@/upload/ImageInput.jsx';\n\n/**\n * @param {{name: string, control?: object} & Omit<Parameters<typeof import('@/upload/ImageInput.jsx').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las del campo de la casa, sin\n * value / onChange / onBlur / error; control: el de useForm, si la pantalla no usa FormProvider\n */\nexport default function FormImageField({name, control, ...inputProps}) {\n const fieldProps = useHookFormField(name, control);\n return <ImageInput {...inputProps} {...fieldProps} />;\n}\n"],"names":[],"mappings":";;;;AAWA,SAAwB,eAAe,EAAC,MAAM,SAAS,GAAG,cAAa;AACnE,QAAM,aAAa,iBAAiB,MAAM,OAAO;AACjD,SAAO,oBAAC,YAAA,EAAY,GAAG,YAAa,GAAG,WAAA,CAAY;AACvD;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useHookFormField } from "./useHookFormField.js";
|
|
4
|
+
import MaskedInput from "../inputs/MaskedInput.js";
|
|
5
|
+
function FormMaskedField({ name, control, ...inputProps }) {
|
|
6
|
+
const fieldProps = useHookFormField(name, control);
|
|
7
|
+
return /* @__PURE__ */ jsx(MaskedInput, { ...inputProps, ...fieldProps });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
FormMaskedField as default
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=FormMaskedField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormMaskedField.js","sources":["../../src/hookForm/FormMaskedField.jsx"],"sourcesContent":["// Campo con máscara de react-hook-form: MaskedInput (inputs/) conectado a su campo. Al formulario llega el valor LIMPIO (sin\n// separadores, en mayúsculas): «5551234567», no «555 123 4567».\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useHookFormField} from '@/hookForm/useHookFormField.js';\nimport MaskedInput from '@/inputs/MaskedInput.jsx';\n\n/**\n * @param {{name: string, control?: object} & Omit<Parameters<typeof import('@/inputs/MaskedInput.jsx').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props\n * las de MaskedInput (mask, label, helperText, placeholder…), sin value / onChange / onBlur / error; control: el de useForm,\n * si la pantalla no usa FormProvider\n */\nexport default function FormMaskedField({name, control, ...inputProps}) {\n const fieldProps = useHookFormField(name, control);\n return <MaskedInput {...inputProps} {...fieldProps} />;\n}\n"],"names":[],"mappings":";;;;AAYA,SAAwB,gBAAgB,EAAC,MAAM,SAAS,GAAG,cAAa;AACpE,QAAM,aAAa,iBAAiB,MAAM,OAAO;AACjD,SAAO,oBAAC,aAAA,EAAa,GAAG,YAAa,GAAG,WAAA,CAAY;AACxD;"}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
import { useFormContext, useFormState } from "react-hook-form";
|
|
4
4
|
import Alert from "@mui/material/Alert";
|
|
5
|
-
import { piecePart } from "../theme/themePieces.js";
|
|
5
|
+
import { piecePart, withPieceSlots } from "../theme/themePieces.js";
|
|
6
6
|
import { warnUnknownProps } from "../toolkit/unknownProps.js";
|
|
7
7
|
const THEME_NAME = "CalcitaFormProblemAlert";
|
|
8
8
|
const ProblemAlert = piecePart(THEME_NAME, "Root", Alert);
|
|
9
|
-
function
|
|
9
|
+
function FormProblemAlertContent({ control, sx, ...unknownProps }) {
|
|
10
10
|
warnUnknownProps("FormProblemAlert", unknownProps);
|
|
11
11
|
const formContext = useFormContext();
|
|
12
12
|
const { errors } = useFormState({ control: control ?? formContext?.control });
|
|
@@ -16,6 +16,7 @@ function FormProblemAlert({ control, sx, ...unknownProps }) {
|
|
|
16
16
|
}
|
|
17
17
|
return /* @__PURE__ */ jsx(ProblemAlert, { severity: "error", role: "alert", sx, children: message });
|
|
18
18
|
}
|
|
19
|
+
const FormProblemAlert = withPieceSlots(FormProblemAlertContent, THEME_NAME);
|
|
19
20
|
export {
|
|
20
21
|
FormProblemAlert as default
|
|
21
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormProblemAlert.js","sources":["../../src/hookForm/FormProblemAlert.jsx"],"sourcesContent":["// El aviso de arriba del formulario de react-hook-form: lo que el servidor dijo que no es de un campo. applyServerProblem\n// lo deja en errors.root.server; aquí se pinta. Sin mensaje no pinta nada ni ocupa lugar.\n//\n// Se cambia desde el tema del proyecto: components.CalcitaFormProblemAlert con styleOverrides.root.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useFormContext, useFormState} from 'react-hook-form';\nimport Alert from '@mui/material/Alert';\nimport {piecePart} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y su parte (theme.components.CalcitaFormProblemAlert): el estilo del proyecto va\n// después del de MUI y el sx de la pantalla al final\nconst THEME_NAME = 'CalcitaFormProblemAlert';\nconst ProblemAlert = piecePart(THEME_NAME, 'Root', Alert);\n\n/**\n * @param {{control?: object, sx?: object}} props control: el de useForm, si la pantalla no usa FormProvider\n */\
|
|
1
|
+
{"version":3,"file":"FormProblemAlert.js","sources":["../../src/hookForm/FormProblemAlert.jsx"],"sourcesContent":["// El aviso de arriba del formulario de react-hook-form: lo que el servidor dijo que no es de un campo. applyServerProblem\n// lo deja en errors.root.server; aquí se pinta. Sin mensaje no pinta nada ni ocupa lugar.\n//\n// Se cambia desde el tema del proyecto: components.CalcitaFormProblemAlert con styleOverrides.root.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useFormContext, useFormState} from 'react-hook-form';\nimport Alert from '@mui/material/Alert';\nimport {piecePart, withPieceSlots} from '@/theme/themePieces.js';\nimport {warnUnknownProps} from '@/toolkit/unknownProps.js';\n\n// el nombre de la pieza en el tema y su parte (theme.components.CalcitaFormProblemAlert): el estilo del proyecto va\n// después del de MUI y el sx de la pantalla al final\nconst THEME_NAME = 'CalcitaFormProblemAlert';\nconst ProblemAlert = piecePart(THEME_NAME, 'Root', Alert);\n\n/**\n * @param {{control?: object, sx?: object}} props control: el de useForm, si la pantalla no usa FormProvider\n */\nfunction FormProblemAlertContent({control, sx, ...unknownProps}) {\n warnUnknownProps('FormProblemAlert', unknownProps);\n const formContext = useFormContext();\n const {errors} = useFormState({control: control ?? formContext?.control});\n const message = errors.root?.server?.message;\n\n // guard clause: sin aviso del servidor\n if (!message) {\n return null;\n }\n return <ProblemAlert severity=\"error\" role=\"alert\" sx={sx}>{message}</ProblemAlert>;\n}\n\nconst FormProblemAlert = withPieceSlots(FormProblemAlertContent, THEME_NAME);\nexport default FormProblemAlert;\n"],"names":[],"mappings":";;;;;;AAaA,MAAM,aAAa;AACnB,MAAM,eAAe,UAAU,YAAY,QAAQ,KAAK;AAKxD,SAAS,wBAAwB,EAAC,SAAS,IAAI,GAAG,gBAAe;AAC7D,mBAAiB,oBAAoB,YAAY;AACjD,QAAM,cAAc,eAAA;AACpB,QAAM,EAAC,WAAU,aAAa,EAAC,SAAS,WAAW,aAAa,SAAQ;AACxE,QAAM,UAAU,OAAO,MAAM,QAAQ;AAGrC,MAAI,CAAC,SAAS;AACV,WAAO;AAAA,EACX;AACA,6BAAQ,cAAA,EAAa,UAAS,SAAQ,MAAK,SAAQ,IAAS,UAAA,SAAQ;AACxE;AAEA,MAAM,mBAAmB,eAAe,yBAAyB,UAAU;"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useFormContext, useFieldArray, useWatch, useFormState } from "react-hook-form";
|
|
4
|
+
import RepeatingFields from "../inputs/RepeatingFields.js";
|
|
5
|
+
const EMPTY_ROWS = Object.freeze([]);
|
|
6
|
+
function FormRepeatingFields({ name, control, emptyRow, renderRow, removeBlockedReason, confirmRemove, onAdd, onRemove, ...viewProps }) {
|
|
7
|
+
const formContext = useFormContext();
|
|
8
|
+
const formControl = control ?? formContext?.control;
|
|
9
|
+
const { fields, append, remove: removeAt, update } = useFieldArray({ name, control: formControl });
|
|
10
|
+
const rows = useWatch({ name, control: formControl }) ?? EMPTY_ROWS;
|
|
11
|
+
const { errors } = useFormState({ name, control: formControl });
|
|
12
|
+
const listErrors = name.split(".").reduce((branch, part) => branch?.[part], errors);
|
|
13
|
+
const listErrorMessage = listErrors?.root?.message ?? listErrors?.message;
|
|
14
|
+
return /* @__PURE__ */ jsx(
|
|
15
|
+
RepeatingFields,
|
|
16
|
+
{
|
|
17
|
+
...viewProps,
|
|
18
|
+
rowKeys: fields.map((field) => field.id),
|
|
19
|
+
renderRow: (index) => renderRow({ index, row: rows[index] ?? emptyRow, nameOf: (field) => `${name}.${index}.${field}` }),
|
|
20
|
+
onAdd: () => {
|
|
21
|
+
append({ ...emptyRow });
|
|
22
|
+
onAdd?.(fields.length);
|
|
23
|
+
},
|
|
24
|
+
onRemove: (index) => {
|
|
25
|
+
const removedRow = rows[index];
|
|
26
|
+
removeAt(index);
|
|
27
|
+
onRemove?.(removedRow, index);
|
|
28
|
+
},
|
|
29
|
+
onClear: (index) => {
|
|
30
|
+
const clearedRow = rows[index];
|
|
31
|
+
update(index, { ...emptyRow });
|
|
32
|
+
onRemove?.(clearedRow, index);
|
|
33
|
+
},
|
|
34
|
+
removeBlockedReasonOf: removeBlockedReason ? (index) => removeBlockedReason(rows[index], index) : void 0,
|
|
35
|
+
confirmRemoveOf: confirmRemove ? (index) => confirmRemove(rows[index], index) : void 0,
|
|
36
|
+
rowHasErrorOf: (index) => Boolean(listErrors?.[index]),
|
|
37
|
+
error: listErrorMessage
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
FormRepeatingFields as default
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=FormRepeatingFields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormRepeatingFields.js","sources":["../../src/hookForm/FormRepeatingFields.jsx"],"sourcesContent":["// Renglones que se repiten en react-hook-form: RepeatingFields (inputs/) conectado con useFieldArray. Se usa igual que el\n// FormRepeatingFields de formik (@stackcraftmx/calcita/forms): name, emptyRow, renderRow con nameOf, y lo mismo para decidir\n// si un renglón se puede quitar.\n//\n// El error de toda la lista llega de yup (yupResolver lo pone en errors.<name>.root) o de las reglas del campo.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useFieldArray, useFormContext, useFormState, useWatch} from 'react-hook-form';\n\nimport RepeatingFields from '@/inputs/RepeatingFields.jsx';\n\nconst EMPTY_ROWS = Object.freeze([]);\n\n/**\n * @param {{\n * name: string,\n * control?: object,\n * emptyRow: object,\n * renderRow: (row: {index: number, row: any, nameOf: (field: string) => string}) => import('react').ReactNode,\n * removeBlockedReason?: (row: any, index: number) => string|null,\n * confirmRemove?: (row: any, index: number) => boolean,\n * onAdd?: (index: number) => void,\n * onRemove?: (row: any, index: number) => void,\n * } & Omit<Parameters<typeof import('@/inputs/RepeatingFields.jsx').default>[0], 'rowKeys'|'renderRow'|'onAdd'|'onRemove'|'onClear'|'removeBlockedReasonOf'|'confirmRemoveOf'|'rowHasErrorOf'|'error'>} props\n * control: el de useForm, si la pantalla no usa FormProvider\n */\nexport default function FormRepeatingFields({name, control, emptyRow, renderRow, removeBlockedReason, confirmRemove, onAdd, onRemove, ...viewProps}) {\n const formContext = useFormContext();\n const formControl = control ?? formContext?.control;\n const {fields, append, remove: removeAt, update} = useFieldArray({name, control: formControl});\n const rows = useWatch({name, control: formControl}) ?? EMPTY_ROWS;\n const {errors} = useFormState({name, control: formControl});\n const listErrors = name.split('.').reduce((branch, part) => branch?.[part], errors);\n const listErrorMessage = listErrors?.root?.message ?? listErrors?.message;\n\n return (\n <RepeatingFields\n {...viewProps}\n rowKeys={fields.map((field) => field.id)}\n renderRow={(index) => renderRow({index, row: rows[index] ?? emptyRow, nameOf: (field) => `${name}.${index}.${field}`})}\n onAdd={() => {\n append({...emptyRow});\n onAdd?.(fields.length);\n }}\n onRemove={(index) => {\n const removedRow = rows[index];\n removeAt(index);\n onRemove?.(removedRow, index);\n }}\n onClear={(index) => {\n const clearedRow = rows[index];\n update(index, {...emptyRow});\n onRemove?.(clearedRow, index);\n }}\n removeBlockedReasonOf={removeBlockedReason ? (index) => removeBlockedReason(rows[index], index) : undefined}\n confirmRemoveOf={confirmRemove ? (index) => confirmRemove(rows[index], index) : undefined}\n rowHasErrorOf={(index) => Boolean(listErrors?.[index])}\n error={listErrorMessage}\n />\n );\n}\n"],"names":[],"mappings":";;;;AAWA,MAAM,aAAa,OAAO,OAAO,EAAE;AAenC,SAAwB,oBAAoB,EAAC,MAAM,SAAS,UAAU,WAAW,qBAAqB,eAAe,OAAO,UAAU,GAAG,UAAA,GAAY;AACjJ,QAAM,cAAc,eAAA;AACpB,QAAM,cAAc,WAAW,aAAa;AAC5C,QAAM,EAAC,QAAQ,QAAQ,QAAQ,UAAU,WAAU,cAAc,EAAC,MAAM,SAAS,YAAA,CAAY;AAC7F,QAAM,OAAO,SAAS,EAAC,MAAM,SAAS,YAAA,CAAY,KAAK;AACvD,QAAM,EAAC,WAAU,aAAa,EAAC,MAAM,SAAS,aAAY;AAC1D,QAAM,aAAa,KAAK,MAAM,GAAG,EAAE,OAAO,CAAC,QAAQ,SAAS,SAAS,IAAI,GAAG,MAAM;AAClF,QAAM,mBAAmB,YAAY,MAAM,WAAW,YAAY;AAElE,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACI,GAAG;AAAA,MACJ,SAAS,OAAO,IAAI,CAAC,UAAU,MAAM,EAAE;AAAA,MACvC,WAAW,CAAC,UAAU,UAAU,EAAC,OAAO,KAAK,KAAK,KAAK,KAAK,UAAU,QAAQ,CAAC,UAAU,GAAG,IAAI,IAAI,KAAK,IAAI,KAAK,IAAG;AAAA,MACrH,OAAO,MAAM;AACT,eAAO,EAAC,GAAG,UAAS;AACpB,gBAAQ,OAAO,MAAM;AAAA,MACzB;AAAA,MACA,UAAU,CAAC,UAAU;AACjB,cAAM,aAAa,KAAK,KAAK;AAC7B,iBAAS,KAAK;AACd,mBAAW,YAAY,KAAK;AAAA,MAChC;AAAA,MACA,SAAS,CAAC,UAAU;AAChB,cAAM,aAAa,KAAK,KAAK;AAC7B,eAAO,OAAO,EAAC,GAAG,UAAS;AAC3B,mBAAW,YAAY,KAAK;AAAA,MAChC;AAAA,MACA,uBAAuB,sBAAsB,CAAC,UAAU,oBAAoB,KAAK,KAAK,GAAG,KAAK,IAAI;AAAA,MAClG,iBAAiB,gBAAgB,CAAC,UAAU,cAAc,KAAK,KAAK,GAAG,KAAK,IAAI;AAAA,MAChF,eAAe,CAAC,UAAU,QAAQ,aAAa,KAAK,CAAC;AAAA,MACrD,OAAO;AAAA,IAAA;AAAA,EAAA;AAGnB;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useHookFormField } from "./useHookFormField.js";
|
|
4
|
+
import TransferListInput from "../inputs/TransferListInput.js";
|
|
5
|
+
function FormTransferListField({ name, control, ...inputProps }) {
|
|
6
|
+
const fieldProps = useHookFormField(name, control);
|
|
7
|
+
return /* @__PURE__ */ jsx(TransferListInput, { ...inputProps, ...fieldProps });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
FormTransferListField as default
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=FormTransferListField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormTransferListField.js","sources":["../../src/hookForm/FormTransferListField.jsx"],"sourcesContent":["// La lista de transferencia de react-hook-form: TransferListInput (inputs/) conectada con useController. Se ve y se porta\n// igual que la de formik (@stackcraftmx/calcita/forms).\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useHookFormField} from '@/hookForm/useHookFormField.js';\nimport TransferListInput from '@/inputs/TransferListInput.jsx';\n\n/**\n * @param {{name: string, control?: object} & Omit<Parameters<typeof import('@/inputs/TransferListInput.jsx').default>[0], 'name'|'value'|'onChange'|'onBlur'|'error'>} props las del campo de la casa, sin\n * value / onChange / onBlur / error; control: el de useForm, si la pantalla no usa FormProvider\n */\nexport default function FormTransferListField({name, control, ...inputProps}) {\n const fieldProps = useHookFormField(name, control);\n return <TransferListInput {...inputProps} {...fieldProps} />;\n}\n"],"names":[],"mappings":";;;;AAWA,SAAwB,sBAAsB,EAAC,MAAM,SAAS,GAAG,cAAa;AAC1E,QAAM,aAAa,iBAAiB,MAAM,OAAO;AACjD,SAAO,oBAAC,mBAAA,EAAmB,GAAG,YAAa,GAAG,WAAA,CAAY;AAC9D;"}
|
|
@@ -3,12 +3,17 @@ import { jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import { useFormContext, useFormState } from "react-hook-form";
|
|
4
4
|
import Button from "@mui/material/Button";
|
|
5
5
|
import CircularProgress from "@mui/material/CircularProgress";
|
|
6
|
-
|
|
6
|
+
import { piecePart, withPieceSlots, usePieceProps } from "../theme/themePieces.js";
|
|
7
|
+
const THEME_NAME = "CalcitaSubmitButton";
|
|
8
|
+
const SubmitButtonRoot = piecePart(THEME_NAME, "Root", Button);
|
|
9
|
+
function SubmitButtonContent(props) {
|
|
10
|
+
const { children, disabled, isPending, control, ...buttonProps } = usePieceProps(props, THEME_NAME);
|
|
7
11
|
const formContext = useFormContext();
|
|
8
12
|
const { isSubmitting } = useFormState({ control: control ?? formContext?.control });
|
|
9
13
|
const isBusy = Boolean(isPending ?? isSubmitting);
|
|
10
|
-
return /* @__PURE__ */ jsx(
|
|
14
|
+
return /* @__PURE__ */ jsx(SubmitButtonRoot, { type: "submit", variant: "contained", size: "large", disabled: disabled || isBusy, "aria-busy": isBusy, ...buttonProps, children: isBusy ? /* @__PURE__ */ jsx(CircularProgress, { size: 22, color: "inherit" }) : children });
|
|
11
15
|
}
|
|
16
|
+
const SubmitButton = withPieceSlots(SubmitButtonContent, THEME_NAME);
|
|
12
17
|
export {
|
|
13
18
|
SubmitButton as default
|
|
14
19
|
};
|