@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolkitSettings.js","sources":["../../src/toolkit/toolkitSettings.js"],"sourcesContent":["// La configuración del paquete: idioma, textos, zona horaria, moneda, nombre de la aplicación y navegación.\n//\n// La pone ToolkitProvider en cada render y la leen también las funciones que no son componentes (formatos de fecha y\n// número, avisos, errores del servidor). Sin proveedor valen los de omisión: español, la zona del navegador y la\n// navegación del navegador.\n//\n// Los textos se resuelven en este orden, para que cada proyecto cambie solo lo que necesite:\n// 1. translate del proyecto (por ejemplo el t de i18next), si regresa un texto;\n// 2. los textos que el proyecto pasó en `texts`, del idioma activo;\n// 3. los textos del paquete (locales/), del idioma activo y, si no está, en español.\n// Las llaves usan la forma de i18next: «namespace:llave.anidada», {{variable}} y plurales con _one / _other.\n//\n// Funciones puras, no renderizan: function (regla de la casa).\nimport es from '@/locales/es.js';\nimport en from '@/locales/en.js';\n\nexport const DEFAULT_LANGUAGE = 'es';\n// la moneda de los montos (código ISO 4217) cuando el proyecto no dice otra\nexport const DEFAULT_CURRENCY = 'MXN';\n\n/**\n * Cómo se escribe la hora: de 24 horas («15:10», la de omisión) o de 12 con a.m. y p.m. («3:10 p.m.»). Son los valores de\n * `hourCycle` de Intl, por eso se ven así.\n */\nexport const HOUR_CYCLE = Object.freeze({\n twentyFourHours: 'h23',\n twelveHours: 'h12',\n});\nexport const DEFAULT_HOUR_CYCLE = HOUR_CYCLE.twentyFourHours;\n\nconst PACKAGE_TEXTS_BY_LANGUAGE = Object.freeze({es, en});\n\n/**\n * Los idiomas que ofrece la app cuando el proyecto no dice otros: su código, su nombre en su propio idioma (así lo busca quien\n * lo habla) y cómo se escriben sus números y fechas (Intl). El proyecto agrega los suyos en ToolkitProvider `languages` y pone\n * sus traducciones en `texts` (lo que no traduzca sale en español); los textos del paquete solo vienen en español e inglés.\n */\nexport const DEFAULT_LANGUAGES = Object.freeze([\n Object.freeze({code: 'es', label: 'Español', locale: 'es-MX'}),\n Object.freeze({code: 'en', label: 'English', locale: 'en-US'}),\n]);\n\nconst NAMESPACE_SEPARATOR = ':';\nconst KEY_SEPARATOR = '.';\nconst PLURAL_SEPARATOR = '_';\nconst PLURAL_OTHER = 'other';\nconst INTERPOLATION = /\\{\\{\\s*(\\w+)\\s*\\}\\}/g;\n\n/**\n * La zona horaria del navegador; si el navegador no la sabe, la de la Ciudad de México.\n *\n * @returns {string}\n */\nexport function browserTimeZone() {\n return Intl.DateTimeFormat().resolvedOptions().timeZone ?? 'America/Mexico_City';\n}\n\nlet currentSettings = Object.freeze({\n language: DEFAULT_LANGUAGE,\n texts: {},\n translate: null,\n timeZone: browserTimeZone(),\n currency: DEFAULT_CURRENCY,\n // la hora de 24 o de 12 horas (HOUR_CYCLE)\n hourCycle: DEFAULT_HOUR_CYCLE,\n appName: '',\n // la compilación del front que corre en esta pestaña ('' en desarrollo): con ella se sabe si hay una versión nueva\n buildId: '',\n // los idiomas que ofrece la app (DEFAULT_LANGUAGES)\n languages: DEFAULT_LANGUAGES,\n});\n\n/**\n * Cambia la configuración que leen las funciones del paquete. La llama ToolkitProvider; un proyecto sin React (o una\n * prueba) la puede llamar directo.\n *\n * @param {{language?: string, texts?: object, translate?: Function|null, timeZone?: string, currency?: string, hourCycle?: 'h23'|'h12', appName?: string, buildId?: string, languages?: Array<{code: string, label: string, locale?: string}>}} settings\n * @returns {void}\n */\nexport function configureToolkit(settings) {\n currentSettings = Object.freeze({...currentSettings, ...settings});\n}\n\n/**\n * La configuración vigente.\n *\n * @returns {{language: string, texts: object, translate: Function|null, timeZone: string, currency: string, hourCycle: 'h23'|'h12', appName: string, buildId: string, languages: Array<{code: string, label: string, locale?: string}>}}\n */\nexport function toolkitSettings() {\n return currentSettings;\n}\n\n/**\n * El locale de Intl del idioma: el que dice su lista de idiomas (es → es-MX, pt → pt-BR) o, si no dice, el código mismo\n * (Intl entiende «pt»). OJO: antes un idioma que no fuera es ni en salía con los números y las fechas de México.\n *\n * @param {string} language\n * @param {Array<{code: string, locale?: string}>} [languages] por omisión los de la configuración vigente\n * @returns {string}\n */\nexport function intlLocaleOf(language, languages = currentSettings.languages) {\n const known = languages?.find((entry) => entry.code === language) ?? DEFAULT_LANGUAGES.find((entry) => entry.code === language);\n return known?.locale ?? language ?? DEFAULT_LANGUAGES[0].locale;\n}\n\n/**\n * Lo que hay en una ruta de llaves («toast.error») dentro de un objeto de textos.\n *\n * @param {object|undefined} texts\n * @param {string} path\n * @returns {unknown}\n */\nfunction valueAtPath(texts, path) {\n let value = texts;\n for (const part of path.split(KEY_SEPARATOR)) {\n if (value === null || typeof value !== 'object') {\n return undefined;\n }\n value = value[part];\n }\n\n return value;\n}\n\n/**\n * El texto de una llave en un objeto de textos, con su plural si trae count (como i18next: llave_one, llave_other).\n *\n * @param {object|undefined} texts los textos de un idioma, por namespace\n * @param {string} namespace\n * @param {string} key\n * @param {object|undefined} values\n * @param {string} language\n * @returns {string|undefined}\n */\nfunction textOf(texts, namespace, key, values, language) {\n const namespaceTexts = texts?.[namespace];\n if (typeof values?.count === 'number') {\n const pluralCategory = new Intl.PluralRules(intlLocaleOf(language)).select(values.count);\n const pluralText = valueAtPath(namespaceTexts, `${key}${PLURAL_SEPARATOR}${pluralCategory}`)\n ?? valueAtPath(namespaceTexts, `${key}${PLURAL_SEPARATOR}${PLURAL_OTHER}`);\n if (typeof pluralText === 'string') {\n return pluralText;\n }\n }\n\n const text = valueAtPath(namespaceTexts, key);\n\n return typeof text === 'string' ? text : undefined;\n}\n\n/**\n * Pone los valores en las {{variables}} del texto; una variable sin valor se queda como está.\n *\n * @param {string} text\n * @param {object|undefined} values\n * @returns {string}\n */\nfunction interpolate(text, values) {\n return text.replace(INTERPOLATION, (placeholder, name) => (values?.[name] === undefined ? placeholder : String(values[name])));\n}\n\n/**\n * El texto de una llave en los textos propios de los componentes (la prop `texts` de un componente y los de ComponentTexts\n * de afuera), si alguno la trae. Cada capa es {namespace, texts} con la misma forma que ese namespace en los textos del\n * paquete (es.js): plurales con _one/_other y {{variables}}. La primera capa que trae la llave gana.\n *\n * @param {Array<{namespace: string, texts: object|undefined}>} layers de la más cercana a la más lejana\n * @param {string} namespace el de la llave\n * @param {string} key la llave sin namespace\n * @param {object|undefined} values\n * @param {string} language para elegir el plural\n * @returns {string|undefined} el texto ya con sus variables, o undefined si ninguna capa lo trae\n */\nexport function componentTextOf(layers, namespace, key, values, language) {\n for (const layer of layers) {\n if (layer.namespace !== namespace || !layer.texts) {\n continue;\n }\n const text = textOf({[namespace]: layer.texts}, namespace, key, values, language);\n if (text !== undefined) {\n return interpolate(text, values);\n }\n }\n\n return undefined;\n}\n\n/**\n * El texto de una llave con una configuración dada (la del proveedor o la vigente).\n *\n * @param {{language: string, texts: object, translate: Function|null}} settings\n * @param {string} defaultNamespace el namespace cuando la llave no trae uno («table», «common», «problems»...)\n * @param {string} key «llave» o «namespace:llave»\n * @param {object} [values] las variables del texto y, para el plural, count\n * @returns {string} la llave misma si no hay texto, para que se note qué falta\n */\nexport function translateWith(settings, defaultNamespace, key, values) {\n const [namespace, plainKey] = key.includes(NAMESPACE_SEPARATOR) ? key.split(NAMESPACE_SEPARATOR, 2) : [defaultNamespace, key];\n const projectText = settings.translate?.(namespace, plainKey, values);\n if (typeof projectText === 'string') {\n return projectText;\n }\n\n const text = textOf(settings.texts?.[settings.language], namespace, plainKey, values, settings.language)\n ?? textOf(PACKAGE_TEXTS_BY_LANGUAGE[settings.language], namespace, plainKey, values, settings.language)\n ?? textOf(PACKAGE_TEXTS_BY_LANGUAGE[DEFAULT_LANGUAGE], namespace, plainKey, values, DEFAULT_LANGUAGE);\n\n if (text !== undefined) {\n return interpolate(text, values);\n }\n // como en i18next: sin la llave en ningún lado, el texto por omisión que pidió quien llama (un globo opcional pasa ''\n // y no se pinta); sin él, la llave tal cual, para que se note qué falta\n if (typeof values?.defaultValue === 'string') {\n return interpolate(values.defaultValue, values);\n }\n return `${namespace}${NAMESPACE_SEPARATOR}${plainKey}`;\n}\n\n/**\n * El texto de una llave con la configuración vigente, para lo que no es componente (avisos, errores del servidor).\n *\n * @param {string} defaultNamespace\n * @param {string} key\n * @param {object} [values]\n * @returns {string}\n */\nexport function translateToolkit(defaultNamespace, key, values) {\n return translateWith(currentSettings, defaultNamespace, key, values);\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"toolkitSettings.js","sources":["../../src/toolkit/toolkitSettings.js"],"sourcesContent":["// La configuración del paquete: idioma, textos, zona horaria, moneda, nombre de la aplicación y navegación.\n//\n// La pone ToolkitProvider en cada render y la leen también las funciones que no son componentes (formatos de fecha y\n// número, avisos, errores del servidor). Sin proveedor valen los de omisión: español, la zona del navegador y la\n// navegación del navegador.\n//\n// Los textos se resuelven en este orden, para que cada proyecto cambie solo lo que necesite:\n// 1. translate del proyecto (por ejemplo el t de i18next), si regresa un texto;\n// 2. los textos que el proyecto pasó en `texts`, del idioma activo;\n// 3. los textos del paquete (locales/), del idioma activo y, si no está, en español.\n// Las llaves usan la forma de i18next: «namespace:llave.anidada», {{variable}} y plurales con _one / _other.\n//\n// Funciones puras, no renderizan: function (regla de la casa).\nimport {createLogger} from '@/observability/logger.js';\nimport es from '@/locales/es.js';\nimport en from '@/locales/en.js';\n\nexport const DEFAULT_LANGUAGE = 'es';\n// la moneda de los montos (código ISO 4217) cuando el proyecto no dice otra\nexport const DEFAULT_CURRENCY = 'MXN';\n\n/**\n * Cómo se escribe la hora: de 24 horas («15:10», la de omisión) o de 12 con a.m. y p.m. («3:10 p.m.»). Son los valores de\n * `hourCycle` de Intl, por eso se ven así.\n */\nexport const HOUR_CYCLE = Object.freeze({\n twentyFourHours: 'h23',\n twelveHours: 'h12',\n});\nexport const DEFAULT_HOUR_CYCLE = HOUR_CYCLE.twentyFourHours;\n\nconst PACKAGE_TEXTS_BY_LANGUAGE = Object.freeze({es, en});\n\n/**\n * Los idiomas que ofrece la app cuando el proyecto no dice otros: su código, su nombre en su propio idioma (así lo busca quien\n * lo habla) y cómo se escriben sus números y fechas (Intl). El proyecto agrega los suyos en ToolkitProvider `languages` y pone\n * sus traducciones en `texts` (lo que no traduzca sale en español); los textos del paquete solo vienen en español e inglés.\n */\nexport const DEFAULT_LANGUAGES = Object.freeze([\n Object.freeze({code: 'es', label: 'Español', locale: 'es-MX'}),\n Object.freeze({code: 'en', label: 'English', locale: 'en-US'}),\n]);\n\nconst NAMESPACE_SEPARATOR = ':';\nconst KEY_SEPARATOR = '.';\nconst PLURAL_SEPARATOR = '_';\nconst PLURAL_OTHER = 'other';\nconst INTERPOLATION = /\\{\\{\\s*(\\w+)\\s*\\}\\}/g;\n\n/**\n * La zona horaria del navegador; si el navegador no la sabe, la de la Ciudad de México.\n *\n * @returns {string}\n */\nexport function browserTimeZone() {\n return Intl.DateTimeFormat().resolvedOptions().timeZone ?? 'America/Mexico_City';\n}\n\nlet currentSettings = Object.freeze({\n language: DEFAULT_LANGUAGE,\n texts: {},\n translate: null,\n timeZone: browserTimeZone(),\n currency: DEFAULT_CURRENCY,\n // la hora de 24 o de 12 horas (HOUR_CYCLE)\n hourCycle: DEFAULT_HOUR_CYCLE,\n appName: '',\n // la compilación del front que corre en esta pestaña ('' en desarrollo): con ella se sabe si hay una versión nueva\n buildId: '',\n // los idiomas que ofrece la app (DEFAULT_LANGUAGES)\n languages: DEFAULT_LANGUAGES,\n // a quién avisarle de un texto que no existe (reportMissingText); sin él, un aviso en la consola\n onMissingText: null,\n});\n\n/**\n * Cambia la configuración que leen las funciones del paquete. La llama ToolkitProvider; un proyecto sin React (o una\n * prueba) la puede llamar directo.\n *\n * @param {{language?: string, texts?: object, translate?: Function|null, timeZone?: string, currency?: string, hourCycle?: 'h23'|'h12', appName?: string, buildId?: string, languages?: Array<{code: string, label: string, locale?: string}>, onMissingText?: Function|null}} settings\n * @returns {void}\n */\nexport function configureToolkit(settings) {\n currentSettings = Object.freeze({...currentSettings, ...settings});\n}\n\n/**\n * La configuración vigente.\n *\n * @returns {{language: string, texts: object, translate: Function|null, timeZone: string, currency: string, hourCycle: 'h23'|'h12', appName: string, buildId: string, languages: Array<{code: string, label: string, locale?: string}>}}\n */\nexport function toolkitSettings() {\n return currentSettings;\n}\n\n/**\n * El locale de Intl del idioma: el que dice su lista de idiomas (es → es-MX, pt → pt-BR) o, si no dice, el código mismo\n * (Intl entiende «pt»). OJO: antes un idioma que no fuera es ni en salía con los números y las fechas de México.\n *\n * @param {string} language\n * @param {Array<{code: string, locale?: string}>} [languages] por omisión los de la configuración vigente\n * @returns {string}\n */\nexport function intlLocaleOf(language, languages = currentSettings.languages) {\n const known = languages?.find((entry) => entry.code === language) ?? DEFAULT_LANGUAGES.find((entry) => entry.code === language);\n return known?.locale ?? language ?? DEFAULT_LANGUAGES[0].locale;\n}\n\n/**\n * Lo que hay en una ruta de llaves («toast.error») dentro de un objeto de textos.\n *\n * @param {object|undefined} texts\n * @param {string} path\n * @returns {unknown}\n */\nfunction valueAtPath(texts, path) {\n let value = texts;\n for (const part of path.split(KEY_SEPARATOR)) {\n if (value === null || typeof value !== 'object') {\n return undefined;\n }\n value = value[part];\n }\n\n return value;\n}\n\n/**\n * El texto de una llave en un objeto de textos, con su plural si trae count (como i18next: llave_one, llave_other).\n *\n * @param {object|undefined} texts los textos de un idioma, por namespace\n * @param {string} namespace\n * @param {string} key\n * @param {object|undefined} values\n * @param {string} language\n * @returns {string|undefined}\n */\nfunction textOf(texts, namespace, key, values, language) {\n const namespaceTexts = texts?.[namespace];\n if (typeof values?.count === 'number') {\n const pluralCategory = new Intl.PluralRules(intlLocaleOf(language)).select(values.count);\n const pluralText = valueAtPath(namespaceTexts, `${key}${PLURAL_SEPARATOR}${pluralCategory}`)\n ?? valueAtPath(namespaceTexts, `${key}${PLURAL_SEPARATOR}${PLURAL_OTHER}`);\n if (typeof pluralText === 'string') {\n return pluralText;\n }\n }\n\n const text = valueAtPath(namespaceTexts, key);\n\n return typeof text === 'string' ? text : undefined;\n}\n\n/**\n * Pone los valores en las {{variables}} del texto; una variable sin valor se queda como está.\n *\n * @param {string} text\n * @param {object|undefined} values\n * @returns {string}\n */\nfunction interpolate(text, values) {\n return text.replace(INTERPOLATION, (placeholder, name) => (values?.[name] === undefined ? placeholder : String(values[name])));\n}\n\n/**\n * El texto de una llave en los textos propios de los componentes (la prop `texts` de un componente y los de ComponentTexts\n * de afuera), si alguno la trae. Cada capa es {namespace, texts} con la misma forma que ese namespace en los textos del\n * paquete (es.js): plurales con _one/_other y {{variables}}. La primera capa que trae la llave gana.\n *\n * @param {Array<{namespace: string, texts: object|undefined}>} layers de la más cercana a la más lejana\n * @param {string} namespace el de la llave\n * @param {string} key la llave sin namespace\n * @param {object|undefined} values\n * @param {string} language para elegir el plural\n * @returns {string|undefined} el texto ya con sus variables, o undefined si ninguna capa lo trae\n */\nexport function componentTextOf(layers, namespace, key, values, language) {\n for (const layer of layers) {\n if (layer.namespace !== namespace || !layer.texts) {\n continue;\n }\n const text = textOf({[namespace]: layer.texts}, namespace, key, values, language);\n if (text !== undefined) {\n return interpolate(text, values);\n }\n }\n\n return undefined;\n}\n\n/**\n * El texto de una llave con una configuración dada (la del proveedor o la vigente).\n *\n * @param {{language: string, texts: object, translate: Function|null, onMissingText?: Function|null}} settings\n * @param {string} defaultNamespace el namespace cuando la llave no trae uno («table», «common», «problems»...)\n * @param {string} key «llave» o «namespace:llave»\n * @param {object} [values] las variables del texto y, para el plural, count. Con `defaultValue` el texto es opcional: si no\n * existe se usa ese y no se avisa\n * @returns {string} la llave misma si no hay texto, para que se note qué falta (y se avisa: reportMissingText)\n */\nexport function translateWith(settings, defaultNamespace, key, values) {\n const [namespace, plainKey] = key.includes(NAMESPACE_SEPARATOR) ? key.split(NAMESPACE_SEPARATOR, 2) : [defaultNamespace, key];\n const projectText = settings.translate?.(namespace, plainKey, values);\n if (typeof projectText === 'string') {\n return projectText;\n }\n\n const text = textOf(settings.texts?.[settings.language], namespace, plainKey, values, settings.language)\n ?? textOf(PACKAGE_TEXTS_BY_LANGUAGE[settings.language], namespace, plainKey, values, settings.language)\n ?? textOf(PACKAGE_TEXTS_BY_LANGUAGE[DEFAULT_LANGUAGE], namespace, plainKey, values, DEFAULT_LANGUAGE);\n\n if (text !== undefined) {\n return interpolate(text, values);\n }\n // como en i18next: sin la llave en ningún lado, el texto por omisión que pidió quien llama (un globo opcional pasa ''\n // y no se pinta); sin él, la llave tal cual, para que se note qué falta\n if (typeof values?.defaultValue === 'string') {\n return interpolate(values.defaultValue, values);\n }\n reportMissingText(settings, namespace, plainKey);\n return `${namespace}${NAMESPACE_SEPARATOR}${plainKey}`;\n}\n\nconst log = createLogger('texts');\n// los textos que faltan de los que ya se avisó en la consola: uno por idioma y llave, no uno por cada pintada\nconst warnedMissingTexts = new Set();\n\n/**\n * Avisa que un texto no existe. Sin aviso, la pantalla enseñaba la llave («profile:tabs.documents») y nadie se enteraba\n * hasta verla. Con onMissingText del proyecto (ToolkitProvider) se le avisa a él cada vez y decide (mandarlo a Sentry,\n * tronar una prueba); sin él, un aviso en la consola, una sola vez por idioma y llave (el nivel lo pone setLogLevel).\n *\n * @param {{language: string, onMissingText?: Function|null}} settings\n * @param {string} namespace\n * @param {string} key\n * @returns {void}\n */\nfunction reportMissingText(settings, namespace, key) {\n if (settings.onMissingText) {\n settings.onMissingText({namespace, key, language: settings.language});\n return;\n }\n const missingId = `${settings.language}${NAMESPACE_SEPARATOR}${namespace}${NAMESPACE_SEPARATOR}${key}`;\n if (warnedMissingTexts.has(missingId)) {\n return;\n }\n warnedMissingTexts.add(missingId);\n log.warn(`No hay texto para «${namespace}${NAMESPACE_SEPARATOR}${key}» en «${settings.language}»: la pantalla enseña la llave`);\n}\n\n/**\n * El texto de una llave con la configuración vigente, para lo que no es componente (avisos, errores del servidor).\n *\n * @param {string} defaultNamespace\n * @param {string} key\n * @param {object} [values]\n * @returns {string}\n */\nexport function translateToolkit(defaultNamespace, key, values) {\n return translateWith(currentSettings, defaultNamespace, key, values);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* @param {object} props
|
|
3
|
-
* @param {boolean} props.open
|
|
4
|
-
* @param {() => void} props.onClose
|
|
5
|
-
* @param {string} props.title ya traducido («Historial de Q3 · ago 2026»)
|
|
6
|
-
* @param {import('react').ReactNode} [props.subtitle]
|
|
7
|
-
* @param {string} props.subjectKey
|
|
8
|
-
* @param {(tableRequest: object, signal: AbortSignal) => Promise<{rows: Array, total: number, facets?: object}>} props.fetchPage
|
|
9
|
-
* @param {Record<string, object>} props.eventDictionary
|
|
10
|
-
* @param {Record<string, object>} [props.resultDictionary]
|
|
11
|
-
* @param {Array<object>} [props.extraColumns]
|
|
12
|
-
* @param {import('react').ReactNode} [props.header] va entre el subtítulo y la tabla (p. ej. pestañas que cambian lo que se
|
|
13
|
-
* consulta)
|
|
14
|
-
* @param {(row: any) => string|null} [props.eventSuffixOf] complemento del evento de un renglón (AuditTrailTable)
|
|
15
|
-
*/
|
|
16
|
-
export default function AuditTrailDialog(props: {
|
|
1
|
+
declare const AuditTrailDialog: (props: {
|
|
17
2
|
open: boolean;
|
|
18
3
|
onClose: () => void;
|
|
19
4
|
title: string;
|
|
@@ -29,4 +14,8 @@ export default function AuditTrailDialog(props: {
|
|
|
29
14
|
extraColumns?: Array<object>;
|
|
30
15
|
header?: import('react').ReactNode;
|
|
31
16
|
eventSuffixOf?: (row: any) => string | null;
|
|
32
|
-
}
|
|
17
|
+
} & {
|
|
18
|
+
slots?: Record<string, import('react').ElementType>;
|
|
19
|
+
slotProps?: Record<string, object | ((partProps: object) => object)>;
|
|
20
|
+
}) => import("react").JSX.Element;
|
|
21
|
+
export default AuditTrailDialog;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
* @param {{activeCount?: number, onClear: () => void, children: import('react').ReactNode}} props children = el filtro
|
|
3
|
-
*/
|
|
4
|
-
export default function HeaderFilterPopover(props: {
|
|
1
|
+
declare const HeaderFilterPopover: (props: {
|
|
5
2
|
activeCount?: number;
|
|
6
3
|
onClear: () => void;
|
|
7
4
|
children: import('react').ReactNode;
|
|
8
|
-
}
|
|
5
|
+
} & {
|
|
6
|
+
slots?: Record<string, import('react').ElementType>;
|
|
7
|
+
slotProps?: Record<string, object | ((partProps: object) => object)>;
|
|
8
|
+
}) => import("react").JSX.Element;
|
|
9
|
+
export default HeaderFilterPopover;
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* @param {object} props
|
|
3
|
-
* @param {string[]} [props.value]
|
|
4
|
-
* @param {(value: string[]) => void} props.onChange
|
|
5
|
-
* @param {Array<{value: string, total: number}>} [props.options] faceta del servidor
|
|
6
|
-
* @param {(value: string) => import('react').ReactNode} [props.renderOption] cómo se lee el valor (diccionario)
|
|
7
|
-
*/
|
|
8
|
-
export default function MultiSelectColumnFilter(props: {
|
|
1
|
+
declare const MultiSelectColumnFilter: (props: {
|
|
9
2
|
value?: string[];
|
|
10
3
|
onChange: (value: string[]) => void;
|
|
11
4
|
options?: Array<{
|
|
@@ -13,4 +6,8 @@ export default function MultiSelectColumnFilter(props: {
|
|
|
13
6
|
total: number;
|
|
14
7
|
}>;
|
|
15
8
|
renderOption?: (value: string) => import('react').ReactNode;
|
|
16
|
-
}
|
|
9
|
+
} & {
|
|
10
|
+
slots?: Record<string, import('react').ElementType>;
|
|
11
|
+
slotProps?: Record<string, object | ((partProps: object) => object)>;
|
|
12
|
+
}) => import("react").JSX.Element;
|
|
13
|
+
export default MultiSelectColumnFilter;
|
|
@@ -1,16 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* @param {object} props
|
|
3
|
-
* @param {string} props.label
|
|
4
|
-
* @param {boolean} [props.sortable]
|
|
5
|
-
* @param {{column: string, direction: 'asc'|'desc'}} [props.sortEntry]
|
|
6
|
-
* @param {() => void} [props.onSort]
|
|
7
|
-
* @param {() => void} [props.onClearSort]
|
|
8
|
-
* @param {boolean} [props.filterable]
|
|
9
|
-
* @param {number} [props.activeCount]
|
|
10
|
-
* @param {() => void} [props.onClear]
|
|
11
|
-
* @param {import('react').ReactNode} [props.children] el filtro de la columna
|
|
12
|
-
*/
|
|
13
|
-
export default function SortableFilterHeader(props: {
|
|
1
|
+
declare const SortableFilterHeader: (props: {
|
|
14
2
|
label: string;
|
|
15
3
|
sortable?: boolean;
|
|
16
4
|
sortEntry?: {
|
|
@@ -23,4 +11,8 @@ export default function SortableFilterHeader(props: {
|
|
|
23
11
|
activeCount?: number;
|
|
24
12
|
onClear?: () => void;
|
|
25
13
|
children?: import('react').ReactNode;
|
|
26
|
-
}
|
|
14
|
+
} & {
|
|
15
|
+
slots?: Record<string, import('react').ElementType>;
|
|
16
|
+
slotProps?: Record<string, object | ((partProps: object) => object)>;
|
|
17
|
+
}) => import("react").JSX.Element;
|
|
18
|
+
export default SortableFilterHeader;
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
* @param {object} [props]
|
|
3
|
-
* @param {boolean} [props.filtered]
|
|
4
|
-
* @param {string} [props.label] ya traducido
|
|
5
|
-
* @param {() => void} [props.onClearFilters]
|
|
6
|
-
* @param {object} [props.texts] los textos que cambian, con la forma de `table` en los textos del paquete
|
|
7
|
-
*/
|
|
8
|
-
export default function EmptyState(props?: {
|
|
1
|
+
declare const EmptyState: (props: {
|
|
9
2
|
filtered?: boolean;
|
|
10
3
|
label?: string;
|
|
11
4
|
onClearFilters?: () => void;
|
|
12
5
|
texts?: object;
|
|
13
|
-
}
|
|
6
|
+
} & {
|
|
7
|
+
slots?: Record<string, import('react').ElementType>;
|
|
8
|
+
slotProps?: Record<string, object | ((partProps: object) => object)>;
|
|
9
|
+
}) => import("react").JSX.Element;
|
|
10
|
+
export default EmptyState;
|
|
@@ -1,17 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
* @param {object} props
|
|
3
|
-
* @param {Array<object>} props.chipConfig lo que arma buildChipConfig
|
|
4
|
-
* @param {object} props.filters
|
|
5
|
-
* @param {(field: string, value: unknown) => void} props.onSetFilter
|
|
6
|
-
* @param {() => void} props.onClearAll
|
|
7
|
-
* @param {number} [props.quickActiveCount] accesos rápidos puestos que no tienen chip aquí
|
|
8
|
-
* @param {object} [props.texts] los textos que cambian, con la forma de `table` en los textos del paquete
|
|
9
|
-
*/
|
|
10
|
-
export default function FilterChips(props: {
|
|
1
|
+
declare const FilterChips: (props: {
|
|
11
2
|
chipConfig: Array<object>;
|
|
12
3
|
filters: object;
|
|
13
4
|
onSetFilter: (field: string, value: unknown) => void;
|
|
14
5
|
onClearAll: () => void;
|
|
15
6
|
quickActiveCount?: number;
|
|
16
7
|
texts?: object;
|
|
17
|
-
}
|
|
8
|
+
} & {
|
|
9
|
+
slots?: Record<string, import('react').ElementType>;
|
|
10
|
+
slotProps?: Record<string, object | ((partProps: object) => object)>;
|
|
11
|
+
}) => import("react").JSX.Element | null;
|
|
12
|
+
export default FilterChips;
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
* @param {object} props
|
|
3
|
-
* @param {number} props.page cuenta desde 0
|
|
4
|
-
* @param {number} props.pageCount
|
|
5
|
-
* @param {(page: number) => void} props.onChange
|
|
6
|
-
* @param {object} [props.texts] los textos que cambian, con la forma de `table` en los textos del paquete
|
|
7
|
-
*/
|
|
8
|
-
export default function GoToPage(props: {
|
|
1
|
+
declare const GoToPage: (props: {
|
|
9
2
|
page: number;
|
|
10
3
|
pageCount: number;
|
|
11
4
|
onChange: (page: number) => void;
|
|
12
5
|
texts?: object;
|
|
13
|
-
}
|
|
6
|
+
} & {
|
|
7
|
+
slots?: Record<string, import('react').ElementType>;
|
|
8
|
+
slotProps?: Record<string, object | ((partProps: object) => object)>;
|
|
9
|
+
}) => import("react").JSX.Element | null;
|
|
10
|
+
export default GoToPage;
|
|
@@ -1,83 +1,7 @@
|
|
|
1
1
|
import { SELECTION_PHONE_LAYOUT } from '../ui/actions/SelectionActions.js';
|
|
2
2
|
export { SELECTION_PHONE_LAYOUT };
|
|
3
3
|
export type RowSelection = import('./rowSelection.js').RowSelection;
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @param {object} props
|
|
7
|
-
* @param {(params: {filters: Record<string, any>, sortOrders: Array<{column: string, direction: 'asc'|'desc'}>, page: number, pageSize: number}, signal: AbortSignal) => Promise<{rows: any[], total: number, facets?: Record<string, Array<{value: any, total: number}> | number>, capped?: boolean}>} props.fetchPage
|
|
8
|
-
* page cuenta desde 0; toServerTableParams lo convierte a la query del API
|
|
9
|
-
* @param {string} props.queryKey cambia cuando cambia el CONJUNTO (no los filtros): dispara recarga
|
|
10
|
-
* @param {boolean} [props.enabled] false mientras la sección está oculta: una tabla que nadie ve no consulta
|
|
11
|
-
* @param {Array<object>} props.columns textColumn / facetColumn / detailColumn o columnas del DataGrid
|
|
12
|
-
* @param {Record<string, string>} [props.filterKinds]
|
|
13
|
-
* @param {Record<string, unknown>} [props.filterDefaults]
|
|
14
|
-
* @param {Array<object>} [props.chipConfig] buildChipConfig
|
|
15
|
-
* @param {Array<object>} [props.quickFilters] {field, facetKey, caption, allLabel, renderLabel, order, clears,
|
|
16
|
-
* isOverridden, renderExtra, allCountKey, hideAllCount}
|
|
17
|
-
* @param {string|null} [props.searchField] filtro de texto que se saca a la barra; null quita la caja
|
|
18
|
-
* @param {string} [props.searchPlaceholder]
|
|
19
|
-
* @param {boolean} [props.searchInBar] la caja de búsqueda va arriba, en la barra de la app (BarActions): en escritorio,
|
|
20
|
-
* como el buscador de una ventana de macOS; en el teléfono con cápsulas flota arriba con las demás; sin cápsulas se
|
|
21
|
-
* queda aquí. Por omisión no
|
|
22
|
-
* @param {boolean} [props.collapseSearchInBar] en la barra, sin usar se encoge a la lupa y se estira al picarla; por
|
|
23
|
-
* omisión sí (false: siempre abierta)
|
|
24
|
-
* @param {string} [props.emptyLabel]
|
|
25
|
-
* @param {(total: number) => string} [props.countLabel] "12 pedidos"; por defecto "12 registros"
|
|
26
|
-
* @param {number[]} [props.pageSizeOptions]
|
|
27
|
-
* @param {number} [props.defaultPageSize]
|
|
28
|
-
* @param {(row: any) => string|number} [props.getRowId]
|
|
29
|
-
* @param {string} [props.prefix] estado en la URL con este prefijo (nuqs); sin él, en memoria
|
|
30
|
-
* @param {unknown} [props.refreshToken] cambia para volver a consultar la misma página (después de una acción)
|
|
31
|
-
* @param {(summary: {total: number, capped: boolean}) => import('react').ReactNode} [props.footer]
|
|
32
|
-
* @param {import('react').ReactNode} [props.toolbarExtra] a la derecha del conteo (p. ej. el selector de año)
|
|
33
|
-
* @param {(summary: {countText: string, total: number, capped: boolean}) => import('react').ReactNode} [props.header] reemplaza
|
|
34
|
-
* el renglón del conteo: la página pinta título, conteo y controles en uno solo. countText ya viene traducido y con
|
|
35
|
-
* el tope
|
|
36
|
-
* @param {import('react').ReactNode} [props.beforeQuickFilters] arriba de los accesos rápidos (p. ej. las pestañas de producto)
|
|
37
|
-
* @param {Array<object>} [props.columnGroupingModel] bandas que agrupan columnas bajo un nombre, arriba de sus
|
|
38
|
-
* encabezados (columnGroupingModel del DataGrid). Con ellas el encabezado mide un renglón más
|
|
39
|
-
* @param {(params: any) => string} [props.getRowClassName]
|
|
40
|
-
* @param {(row: any) => boolean} [props.isRowVisible] cuáles renglones de la página se pintan; los demás se esconden
|
|
41
|
-
* SIN volver a consultar (p. ej. plegar un grupo de renglones). Sin ella se pintan todos. OJO: va con useCallback;
|
|
42
|
-
* una función nueva en cada pintada haría filtrar la página cada vez
|
|
43
|
-
* @param {boolean} [props.striped] renglones alternos (cebra) con el color de hover del tema; al pasar el cursor se usa
|
|
44
|
-
* el de «seleccionado» para que el renglón bajo el cursor se siga distinguiendo
|
|
45
|
-
* @param {(params: any) => number|'auto'|null} [props.getRowHeight]
|
|
46
|
-
* @param {boolean} [props.hideFooterWhenAllRowsFit] esconde el pie (el paginador) mientras todo lo que hay cabe en la
|
|
47
|
-
* página; si un día no cabe, el pie vuelve solo. Para tablas que casi nunca pasan de una página
|
|
48
|
-
* @param {boolean} [props.showGoToPage] «Ir a página N» junto al paginador; por omisión escondido (con las flechas basta en
|
|
49
|
-
* casi todas las tablas). Para listas de muchas páginas que se recorren por número
|
|
50
|
-
* @param {object} [props.gridSx] estilos extra del DataGrid (clases de renglón)
|
|
51
|
-
* @param {number} [props.maxGridHeight] alto máximo del contenedor; sin él la tabla crece con sus renglones (default)
|
|
52
|
-
* @param {string} [props.ariaLabel] nombre de la tabla para lectores de pantalla
|
|
53
|
-
* @param {string} [props.fixedColumn] campo de la columna que se queda pegada a la izquierda al deslizar de lado (como
|
|
54
|
-
* fixedSelectColumn de mui-datatables)
|
|
55
|
-
* @param {Array<{key: string, label: string, icon?: import('react').ReactNode, color?: 'inherit'|'primary'|'secondary'|'error'|'info'|'success'|'warning', isDisabled?: (selection: RowSelection) => boolean, onClick: (selection: RowSelection, helpers: {clearSelection: () => void, refresh: () => void}) => unknown}>} [props.selectionActions]
|
|
56
|
-
* con ellas cada renglón lleva su casilla y, al elegir, sale la barra de los elegidos con estas acciones. label ya
|
|
57
|
-
* traducido; onClick recibe la selección (con isAllMatching mande `filters`, no `ids`) y cómo quitar la selección y volver
|
|
58
|
-
* a consultar después de actuar
|
|
59
|
-
* @param {(row: any) => boolean} [props.isRowSelectable] cuáles renglones se pueden elegir (un pedido entregado no se cancela)
|
|
60
|
-
* @param {boolean} [props.allowSelectAllMatching] la casilla de arriba elige todos los que coinciden (la acción recibe los
|
|
61
|
-
* filtros) y el aviso deja quedarse solo con la página; por omisión sí. false: la casilla elige la página y nunca se
|
|
62
|
-
* ofrece «todos»
|
|
63
|
-
* @param {(selection: RowSelection) => void} [props.onSelectionChange] cada que cambia la selección; también enciende las
|
|
64
|
-
* casillas sin barra de acciones (la pantalla pinta las suyas)
|
|
65
|
-
* @param {'top'|'split'} [props.selectionPhoneLayout] SELECTION_PHONE_LAYOUT: en el teléfono con vidrio o minimalista, todo
|
|
66
|
-
* arriba (por omisión) o el conteo arriba y las acciones abajo. Sin vidrio, en el renglón como en escritorio
|
|
67
|
-
* @param {(request: {filters: Record<string, any>, sortOrders: Array<{column: string, direction: 'asc'|'desc'}>, page: number, pageSize: number}) => void} [props.onQueryChange]
|
|
68
|
-
* cada que cambia lo que pide la tabla (un filtro, el orden, la página), antes de consultar: para la lógica de negocio que
|
|
69
|
-
* depende de lo filtrado («si eligió Cancelados, enseñe el motivo»)
|
|
70
|
-
* @param {(result: {rows: any[], total: number, facets: object, capped: boolean}) => void} [props.onLoaded] cada que llega una
|
|
71
|
-
* página del servidor
|
|
72
|
-
* @param {(error: unknown) => void} [props.onLoadError] cuando la consulta falla (la tabla ya enseña su aviso con «Reintentar»)
|
|
73
|
-
* @param {object} [props.gridProps] lo demás del DataGrid de MUI, sobre todo sus eventos (onRowClick, onRowDoubleClick,
|
|
74
|
-
* onCellKeyDown…). OJO: lo que la tabla controla (paginar, ordenar y filtrar en el servidor, el alto, la selección) no se
|
|
75
|
-
* reemplaza desde aquí: para eso están sus props
|
|
76
|
-
* @param {object} [props.texts] los textos de la tabla que cambian, con la forma de `table` en los textos del paquete
|
|
77
|
-
* (src/locales/es.js), ya en el idioma de la pantalla: {selection: {clear: 'Deseleccionar'}, empty: {filtered: '…'}}.
|
|
78
|
-
* También les llegan a sus filtros de columna, sus chips y su barra de elegidos
|
|
79
|
-
*/
|
|
80
|
-
export default function ServerTable(props: {
|
|
4
|
+
declare const ServerTable: (props: {
|
|
81
5
|
fetchPage: (params: {
|
|
82
6
|
filters: Record<string, any>;
|
|
83
7
|
sortOrders: Array<{
|
|
@@ -131,10 +55,10 @@ export default function ServerTable(props: {
|
|
|
131
55
|
getRowHeight?: (params: any) => number | 'auto' | null;
|
|
132
56
|
hideFooterWhenAllRowsFit?: boolean;
|
|
133
57
|
showGoToPage?: boolean;
|
|
134
|
-
gridSx?: object;
|
|
58
|
+
gridSx?: object | Array<object> | Function;
|
|
135
59
|
maxGridHeight?: number;
|
|
136
60
|
ariaLabel?: string;
|
|
137
|
-
fixedColumn?: string;
|
|
61
|
+
fixedColumn?: string | string[];
|
|
138
62
|
selectionActions?: Array<{
|
|
139
63
|
key: string;
|
|
140
64
|
label: string;
|
|
@@ -167,5 +91,17 @@ export default function ServerTable(props: {
|
|
|
167
91
|
}) => void;
|
|
168
92
|
onLoadError?: (error: unknown) => void;
|
|
169
93
|
gridProps?: object;
|
|
94
|
+
renderCard?: (row: any, helpers: {
|
|
95
|
+
index: number;
|
|
96
|
+
}) => import('react').ReactNode;
|
|
97
|
+
view?: 'table' | 'cards';
|
|
98
|
+
defaultView?: 'table' | 'cards';
|
|
99
|
+
onViewChange?: (view: 'table' | 'cards') => void;
|
|
100
|
+
showViewToggle?: boolean;
|
|
101
|
+
cardSkeleton?: import('react').ReactNode;
|
|
170
102
|
texts?: object;
|
|
171
|
-
}
|
|
103
|
+
} & {
|
|
104
|
+
slots?: Record<string, import('react').ElementType>;
|
|
105
|
+
slotProps?: Record<string, object | ((partProps: object) => object)>;
|
|
106
|
+
}) => import("react").JSX.Element;
|
|
107
|
+
export default ServerTable;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare const ServerTableFilterDrawer: (props: {
|
|
2
|
+
fields: object[];
|
|
3
|
+
anchor?: 'left' | 'right';
|
|
4
|
+
width?: number;
|
|
5
|
+
title?: string;
|
|
6
|
+
buttonLabel?: string;
|
|
7
|
+
onApply?: (values: Record<string, unknown>) => void;
|
|
8
|
+
children?: import('react').ReactNode;
|
|
9
|
+
texts?: object;
|
|
10
|
+
} & {
|
|
11
|
+
slots?: Record<string, import('react').ElementType>;
|
|
12
|
+
slotProps?: Record<string, object | ((partProps: object) => object)>;
|
|
13
|
+
}) => import("react").JSX.Element;
|
|
14
|
+
export default ServerTableFilterDrawer;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type StackedEntry = import('react').ReactNode | {
|
|
2
|
+
label?: import('react').ReactNode;
|
|
3
|
+
value: import('react').ReactNode;
|
|
4
|
+
note?: import('react').ReactNode;
|
|
5
|
+
};
|
|
6
|
+
declare const StackedCell: (props: {
|
|
7
|
+
entries: StackedEntry[];
|
|
8
|
+
} & {
|
|
9
|
+
slots?: Record<string, import('react').ElementType>;
|
|
10
|
+
slotProps?: Record<string, object | ((partProps: object) => object)>;
|
|
11
|
+
}) => import("react").JSX.Element;
|
|
12
|
+
export default StackedCell;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
declare const TableCardsView: (props: {
|
|
2
|
+
rows: any[];
|
|
3
|
+
renderCard: (row: any, helpers: {
|
|
4
|
+
index: number;
|
|
5
|
+
}) => import('react').ReactNode;
|
|
6
|
+
rowIdOf: (row: any) => string | number;
|
|
7
|
+
isLoading: boolean;
|
|
8
|
+
page: number;
|
|
9
|
+
pageCount: number;
|
|
10
|
+
onPageChange: (page: number) => void;
|
|
11
|
+
hasActiveFilters: boolean;
|
|
12
|
+
emptyLabel?: string;
|
|
13
|
+
onClearFilters: () => void;
|
|
14
|
+
skeleton?: import('react').ReactNode;
|
|
15
|
+
ariaLabel?: string;
|
|
16
|
+
} & {
|
|
17
|
+
slots?: Record<string, import('react').ElementType>;
|
|
18
|
+
slotProps?: Record<string, object | ((partProps: object) => object)>;
|
|
19
|
+
}) => import("react").JSX.Element;
|
|
20
|
+
export declare const TableViewToggle: (props: {
|
|
21
|
+
view: 'table' | 'cards';
|
|
22
|
+
onChange: (view: 'table' | 'cards') => void;
|
|
23
|
+
} & {
|
|
24
|
+
slots?: Record<string, import('react').ElementType>;
|
|
25
|
+
slotProps?: Record<string, object | ((partProps: object) => object)>;
|
|
26
|
+
}) => import("react").JSX.Element;
|
|
27
|
+
export default TableCardsView;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El ancho de un texto en px con la letra de la página; sin navegador, por número de letras.
|
|
3
|
+
*
|
|
4
|
+
* @param {string} text
|
|
5
|
+
* @param {{fontSize?: number, fontWeight?: number}} [options]
|
|
6
|
+
* @returns {number}
|
|
7
|
+
*/
|
|
8
|
+
export declare function textWidthOf(text: string, { fontSize, fontWeight }?: {
|
|
9
|
+
fontSize?: number;
|
|
10
|
+
fontWeight?: number;
|
|
11
|
+
}): number;
|
|
12
|
+
/**
|
|
13
|
+
* El ancho de una columna de estatus: el de su etiqueta más larga (o el del encabezado, con sus íconos) más lo de alrededor.
|
|
14
|
+
*
|
|
15
|
+
* @param {string[]} labels el encabezado primero y luego las etiquetas, ya traducidos
|
|
16
|
+
* @param {{variant?: 'dot'|'chip'}} [options]
|
|
17
|
+
* @returns {number} px, redondeado hacia arriba
|
|
18
|
+
*/
|
|
19
|
+
export declare function statusColumnWidthOf([header, ...labels]: string[], { variant }?: {
|
|
20
|
+
variant?: 'dot' | 'chip';
|
|
21
|
+
}): number;
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/** El campo de las columnas de la casa que no son datos: para nombrarlas en fixedColumn ({fixedColumn: [ACTIONS_COLUMN_FIELD, …]}). */
|
|
2
|
+
export declare const DETAIL_COLUMN_FIELD = "__detail";
|
|
3
|
+
export declare const ACTIONS_COLUMN_FIELD = "__actions";
|
|
4
|
+
export declare const COLUMN_STACKED_KEY = "calcitaStacked";
|
|
1
5
|
export type GridColumnProps = {
|
|
2
6
|
width?: number;
|
|
3
7
|
minWidth?: number;
|
|
@@ -93,3 +97,110 @@ export declare function detailColumn({ onOpen, ariaLabelOf, ...unknownOptions }:
|
|
|
93
97
|
row: any;
|
|
94
98
|
}) => import("react").JSX.Element;
|
|
95
99
|
};
|
|
100
|
+
/**
|
|
101
|
+
* Columna de datos apilados: los que se leen de corrido en un solo lugar, uno debajo del otro, los que hagan falta (la
|
|
102
|
+
* empresa, su RFC y su régimen; el contacto, su correo y su teléfono). El primero es el principal (en negritas) y los demás
|
|
103
|
+
* van en gris. Cada dato va solo, si el encabezado ya dice qué son, o con su etiqueta arriba ({label, value}) si el
|
|
104
|
+
* encabezado nombra al grupo. Con orden y filtro en el servidor como textColumn, por el campo de la columna. La tabla pone
|
|
105
|
+
* los renglones a su alto sola.
|
|
106
|
+
*
|
|
107
|
+
* stackedColumn({field: 'business_name', label: 'Empresa', entries: (row) => [row.business_name, row.rfc, row.regime]})
|
|
108
|
+
* stackedColumn({field: 'created_at', label: 'Fechas', entries: (row) => [
|
|
109
|
+
* {label: 'Alta', value: formatDate(row.created_at)},
|
|
110
|
+
* {label: 'Último cambio', value: formatDate(row.updated_at)},
|
|
111
|
+
* ]})
|
|
112
|
+
*
|
|
113
|
+
* @param {{field: string, label: string, entries: (row: any, value: any) => import('./StackedCell.js').StackedEntry[], sort?: boolean, filter?: boolean} & GridColumnProps} columnDeclaration
|
|
114
|
+
* entries: los datos de cada renglón en orden; `value` es el de la columna ya con su valueFormatter. Un dato vacío
|
|
115
|
+
* no se pinta (salvo el principal o uno con etiqueta: enseñan «—»)
|
|
116
|
+
*/
|
|
117
|
+
export declare function stackedColumn({ field, label, entries, sort, filter, ...gridColumnProps }: {
|
|
118
|
+
field: string;
|
|
119
|
+
label: string;
|
|
120
|
+
entries: (row: any, value: any) => import('./StackedCell.js').StackedEntry[];
|
|
121
|
+
sort?: boolean;
|
|
122
|
+
filter?: boolean;
|
|
123
|
+
} & GridColumnProps): {
|
|
124
|
+
width?: number;
|
|
125
|
+
minWidth?: number;
|
|
126
|
+
maxWidth?: number;
|
|
127
|
+
flex?: number;
|
|
128
|
+
align?: 'left' | 'center' | 'right';
|
|
129
|
+
headerAlign?: 'left' | 'center' | 'right';
|
|
130
|
+
valueFormatter?: (value: any, row: any) => string;
|
|
131
|
+
valueGetter?: (value: any, row: any) => any;
|
|
132
|
+
field: string;
|
|
133
|
+
headerName: string;
|
|
134
|
+
sortable: boolean;
|
|
135
|
+
filterable: boolean;
|
|
136
|
+
renderHeader: () => import("react").JSX.Element;
|
|
137
|
+
calcitaStacked: boolean;
|
|
138
|
+
renderCell: (params: any) => import("react").JSX.Element;
|
|
139
|
+
};
|
|
140
|
+
/**
|
|
141
|
+
* Columna de estatus desde un diccionario: el estatus con su color y su explicación (StatusChip), filtro con las facetas del
|
|
142
|
+
* servidor (como facetColumn) y un ancho que alcanza para la etiqueta más larga del diccionario. Con `t` el ancho se mide
|
|
143
|
+
* con las etiquetas en el idioma de la pantalla (sin él, 160 px o el `width` que se le dé).
|
|
144
|
+
*
|
|
145
|
+
* statusColumn({field: 'status', label: 'Estado', dictionary: ORDER_STATUS, t})
|
|
146
|
+
*
|
|
147
|
+
* @param {{field: string, label: string, dictionary: Record<string, object>, t?: (key: string) => string, short?: boolean, variant?: 'dot'|'chip', sort?: boolean, filter?: boolean, facetKey?: string} & GridColumnProps} columnDeclaration
|
|
148
|
+
* filter false: sin filtro en el encabezado (cuando el servidor no da facetas de este campo)
|
|
149
|
+
*/
|
|
150
|
+
export declare function statusColumn({ field, label, dictionary, t, short, variant, sort, filter, facetKey, ...gridColumnProps }: {
|
|
151
|
+
field: string;
|
|
152
|
+
label: string;
|
|
153
|
+
dictionary: Record<string, object>;
|
|
154
|
+
t?: (key: string) => string;
|
|
155
|
+
short?: boolean;
|
|
156
|
+
variant?: 'dot' | 'chip';
|
|
157
|
+
sort?: boolean;
|
|
158
|
+
filter?: boolean;
|
|
159
|
+
facetKey?: string;
|
|
160
|
+
} & GridColumnProps): {
|
|
161
|
+
width?: number;
|
|
162
|
+
minWidth?: number;
|
|
163
|
+
maxWidth?: number;
|
|
164
|
+
flex?: number;
|
|
165
|
+
align?: 'left' | 'center' | 'right';
|
|
166
|
+
headerAlign?: 'left' | 'center' | 'right';
|
|
167
|
+
valueFormatter?: (value: any, row: any) => string;
|
|
168
|
+
valueGetter?: (value: any, row: any) => any;
|
|
169
|
+
field: string;
|
|
170
|
+
headerName: string;
|
|
171
|
+
sortable: boolean;
|
|
172
|
+
filterable: boolean;
|
|
173
|
+
renderHeader: () => import("react").JSX.Element;
|
|
174
|
+
renderCell: ({ row }: {
|
|
175
|
+
row: any;
|
|
176
|
+
}) => import("react").JSX.Element;
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* Columna con el menú «⋯» de cada renglón (ActionsMenu): las acciones van en su columna con un ícono, no con clic en toda
|
|
180
|
+
* la fila. Va de un ancho fijo, así se puede dejar pegada al deslizar: fixedColumn={[ACTIONS_COLUMN_FIELD, 'company']}.
|
|
181
|
+
*
|
|
182
|
+
* actionsColumn({label: 'Acciones del cliente', actionsOf: (row) => [{key: 'open', label: 'Abrir', to: `/clientes/${row.id}`}]})
|
|
183
|
+
*
|
|
184
|
+
* @param {object} declaration
|
|
185
|
+
* @param {string} declaration.label el nombre del botón (lector de pantalla y su globo), ya traducido
|
|
186
|
+
* @param {(row: any) => Array<object>} declaration.actionsOf las acciones de ese renglón, con la forma de ActionsMenu
|
|
187
|
+
* @param {(row: any) => string} [declaration.labelOf] el nombre del botón por renglón («Acciones de Acme»)
|
|
188
|
+
* @param {number} [declaration.width] por omisión 56
|
|
189
|
+
*/
|
|
190
|
+
export declare function actionsColumn({ label, actionsOf, labelOf: labelOfRow, width, ...unknownOptions }: {
|
|
191
|
+
label: string;
|
|
192
|
+
actionsOf: (row: any) => Array<object>;
|
|
193
|
+
labelOf?: (row: any) => string;
|
|
194
|
+
width?: number;
|
|
195
|
+
}): {
|
|
196
|
+
field: string;
|
|
197
|
+
headerName: string;
|
|
198
|
+
sortable: boolean;
|
|
199
|
+
filterable: boolean;
|
|
200
|
+
disableColumnMenu: boolean;
|
|
201
|
+
width: number;
|
|
202
|
+
align: string;
|
|
203
|
+
renderCell: ({ row }: {
|
|
204
|
+
row: any;
|
|
205
|
+
}) => import("react").JSX.Element;
|
|
206
|
+
};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export declare const TableFilterContext: import("react").Context<null>;
|
|
2
2
|
/**
|
|
3
|
-
* @returns {{filters: object, setFilter: Function, clearFilter: Function, sortOrders: Array, toggleSort: Function, clearSort: Function, facets: object}}
|
|
3
|
+
* @returns {{filters: object, setFilter: Function, setFilters: Function, clearFilter: Function, sortOrders: Array, toggleSort: Function, clearSort: Function, facets: object}}
|
|
4
4
|
*/
|
|
5
5
|
export declare function useTableFilter(): {
|
|
6
6
|
filters: object;
|
|
7
7
|
setFilter: Function;
|
|
8
|
+
setFilters: Function;
|
|
8
9
|
clearFilter: Function;
|
|
9
10
|
sortOrders: any[];
|
|
10
11
|
toggleSort: Function;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Los campos fijos como lista, con el orden en que se dieron.
|
|
3
|
+
*
|
|
4
|
+
* @param {string|string[]|null|undefined} fixedColumn
|
|
5
|
+
* @returns {string[]}
|
|
6
|
+
*/
|
|
7
|
+
export declare function fixedFieldsOf(fixedColumn: string | string[] | null | undefined): string[];
|
|
8
|
+
/**
|
|
9
|
+
* Cada columna fija con su `left` en px.
|
|
10
|
+
*
|
|
11
|
+
* @param {string[]} fields los campos fijos, de izquierda a derecha
|
|
12
|
+
* @param {Array<{field: string, width?: number, minWidth?: number, flex?: number}>} columns las columnas de la tabla
|
|
13
|
+
* @param {{startLeft?: number}} [options] startLeft: lo que ya va pegado antes (la casilla de elegir renglones)
|
|
14
|
+
* @returns {Array<{field: string, left: number, isLast: boolean, hasUnknownWidth: boolean}>} hasUnknownWidth: no es la última
|
|
15
|
+
* y su ancho no es fijo (la siguiente podría encimarse)
|
|
16
|
+
*/
|
|
17
|
+
export declare function fixedColumnOffsetsOf(fields: string[], columns: Array<{
|
|
18
|
+
field: string;
|
|
19
|
+
width?: number;
|
|
20
|
+
minWidth?: number;
|
|
21
|
+
flex?: number;
|
|
22
|
+
}>, { startLeft }?: {
|
|
23
|
+
startLeft?: number;
|
|
24
|
+
}): Array<{
|
|
25
|
+
field: string;
|
|
26
|
+
left: number;
|
|
27
|
+
isLast: boolean;
|
|
28
|
+
hasUnknownWidth: boolean;
|
|
29
|
+
}>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {number} pageCount cuántas páginas tiene la tabla
|
|
3
|
+
* @returns {number[]} las páginas como las cuenta una persona: 1, 2, 3... pageCount
|
|
4
|
+
*/
|
|
5
|
+
export declare function pageNumbersOf(pageCount: number): number[];
|
|
6
|
+
/**
|
|
7
|
+
* filterOptions del Autocomplete.
|
|
8
|
+
*
|
|
9
|
+
* @param {number[]} pageNumbers todas las páginas
|
|
10
|
+
* @param {{inputValue: string}} state lo que lleva tecleado la persona
|
|
11
|
+
* @returns {number[]} sin teclear, todas; tecleando, primero las que empiezan así y luego las que lo contienen
|
|
12
|
+
*/
|
|
13
|
+
export declare function filterPages(pageNumbers: number[], { inputValue }: {
|
|
14
|
+
inputValue: string;
|
|
15
|
+
}): number[];
|
|
@@ -4,8 +4,14 @@ export { default as EmptyState } from './EmptyState.js';
|
|
|
4
4
|
export { default as FilterChips } from './FilterChips.js';
|
|
5
5
|
export { default as GoToPage } from './GoToPage.js';
|
|
6
6
|
export { SELECTION_PHONE_LAYOUT, default as ServerTable } from './ServerTable.js';
|
|
7
|
+
export { default as ServerTableFilterDrawer } from './ServerTableFilterDrawer.js';
|
|
7
8
|
export { buildChipConfig } from './buildChipConfig.js';
|
|
8
|
-
export { detailColumn, facetColumn, textColumn } from './columns.js';
|
|
9
|
+
export { ACTIONS_COLUMN_FIELD, DETAIL_COLUMN_FIELD, actionsColumn, detailColumn, facetColumn, stackedColumn, statusColumn, textColumn, } from './columns.js';
|
|
10
|
+
export { default as StackedCell } from './StackedCell.js';
|
|
11
|
+
export { statusColumnWidthOf, textWidthOf } from './columnWidths.js';
|
|
12
|
+
export { fixedColumnOffsetsOf, fixedFieldsOf } from './fixedColumns.js';
|
|
13
|
+
export { TableViewToggle, default as TableCardsView } from './TableCardsView.js';
|
|
14
|
+
export { TABLE_VIEW, useTableView } from './useTableView.js';
|
|
9
15
|
export { TableFilterContext, useTableFilter } from './filterContext.js';
|
|
10
16
|
export { toServerTableParams } from './serverTableParams.js';
|
|
11
17
|
export { buildTableActors, tableMachine } from './tableMachine.js';
|