@stackcraftmx/calcita 0.32.1 → 0.47.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 +263 -2
- package/cli/packageVersions.js +12 -3
- package/cli/projectFiles.js +5 -2
- package/cli/templates/module/__Name__Page.test.jsx.tpl +24 -0
- package/cli/templates/project/README.md.tpl +14 -1
- package/cli/templates/project/src/app/appRouter.jsx.tpl +5 -2
- package/cli/templates/project/src/core/accountConnector.js.tpl +4 -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 +12 -0
- package/dist/DataTable/GoToPage.js +69 -13
- package/dist/DataTable/GoToPage.js.map +1 -1
- package/dist/DataTable/ServerTable.js +2 -0
- package/dist/DataTable/ServerTable.js.map +1 -1
- package/dist/DataTable/ServerTableFilterDrawer.js +52 -0
- package/dist/DataTable/ServerTableFilterDrawer.js.map +1 -0
- package/dist/DataTable/filterContext.js.map +1 -1
- package/dist/DataTable/goToPageOptions.js +17 -0
- package/dist/DataTable/goToPageOptions.js.map +1 -0
- package/dist/date-pickers.js +28 -2
- package/dist/date-pickers.js.map +1 -1
- package/dist/datePickers/DateInput.js +15 -34
- package/dist/datePickers/DateInput.js.map +1 -1
- package/dist/datePickers/DateTimeInput.js +75 -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 +58 -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 +55 -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 +22 -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/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/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/applyServerProblem.js +10 -3
- package/dist/forms/applyServerProblem.js.map +1 -1
- package/dist/forms/listRules.js +111 -0
- package/dist/forms/listRules.js.map +1 -0
- package/dist/forms/serverProblemFields.js +17 -0
- package/dist/forms/serverProblemFields.js.map +1 -1
- package/dist/forms.js +51 -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/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/applyServerProblem.js +8 -3
- package/dist/hookForm/applyServerProblem.js.map +1 -1
- package/dist/index.js +188 -100
- package/dist/index.js.map +1 -1
- package/dist/inputs/CatalogInput.js +74 -7
- package/dist/inputs/CatalogInput.js.map +1 -1
- package/dist/inputs/CheckboxGroupInput.js +100 -0
- package/dist/inputs/CheckboxGroupInput.js.map +1 -0
- package/dist/inputs/MaskedInput.js +86 -0
- package/dist/inputs/MaskedInput.js.map +1 -0
- package/dist/inputs/NumberInput.js +12 -1
- package/dist/inputs/NumberInput.js.map +1 -1
- package/dist/inputs/RepeatingFields.js +177 -0
- package/dist/inputs/RepeatingFields.js.map +1 -0
- package/dist/inputs/SelectInput.js +43 -5
- package/dist/inputs/SelectInput.js.map +1 -1
- package/dist/inputs/TransferListInput.js +215 -0
- package/dist/inputs/TransferListInput.js.map +1 -0
- 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/legal/CookieNotice.js +79 -0
- package/dist/legal/CookieNotice.js.map +1 -0
- package/dist/legal/TermsAcceptanceDialog.js +129 -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 +233 -1
- package/dist/locales/en.js.map +1 -1
- package/dist/locales/es.js +233 -1
- package/dist/locales/es.js.map +1 -1
- package/dist/mexico/CfdiSummary.js +81 -0
- package/dist/mexico/CfdiSummary.js.map +1 -0
- package/dist/mexico/EfirmaFields.js +167 -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 +86 -0
- package/dist/mexico/mexicoIdentifiers.js.map +1 -0
- package/dist/mexico/mexicoRules.js +16 -0
- package/dist/mexico/mexicoRules.js.map +1 -0
- package/dist/mexico.js +32 -0
- package/dist/mexico.js.map +1 -0
- package/dist/react-hook-form.js +40 -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 +108 -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 +26 -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/SessionsCard.js +11 -7
- package/dist/security/SessionsCard.js.map +1 -1
- package/dist/table.js +2 -0
- 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/types/DataTable/ServerTableFilterDrawer.d.ts +21 -0
- package/dist/types/DataTable/filterContext.d.ts +2 -1
- package/dist/types/DataTable/goToPageOptions.d.ts +15 -0
- package/dist/types/DataTable/index.d.ts +1 -0
- package/dist/types/date-pickers.d.ts +10 -1
- package/dist/types/datePickers/DateInput.d.ts +6 -4
- package/dist/types/datePickers/DateTimeInput.d.ts +50 -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 +39 -0
- package/dist/types/datePickers/PickerFrame.d.ts +22 -0
- package/dist/types/datePickers/TimeInput.d.ts +38 -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 +24 -0
- package/dist/types/dictionaries/dictionaries.d.ts +6 -3
- 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/FormRepeatingFields.d.ts +25 -0
- package/dist/types/forms/FormTransferListField.d.ts +7 -0
- package/dist/types/forms/index.d.ts +10 -1
- package/dist/types/forms/listRules.d.ts +48 -0
- package/dist/types/forms/serverProblemFields.d.ts +13 -0
- 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/FormRepeatingFields.d.ts +27 -0
- package/dist/types/hookForm/FormTransferListField.d.ts +8 -0
- package/dist/types/index.d.ts +25 -3
- package/dist/types/inputs/CatalogInput.d.ts +7 -1
- package/dist/types/inputs/CheckboxGroupInput.d.ts +39 -0
- package/dist/types/inputs/MaskedInput.d.ts +35 -0
- package/dist/types/inputs/RepeatingFields.d.ts +52 -0
- package/dist/types/inputs/SelectInput.d.ts +6 -1
- package/dist/types/inputs/TransferListInput.d.ts +43 -0
- 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/legal/CookieNotice.d.ts +30 -0
- package/dist/types/legal/TermsAcceptanceDialog.d.ts +32 -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 +232 -0
- package/dist/types/locales/es.d.ts +232 -0
- package/dist/types/mexico/CfdiSummary.d.ts +17 -0
- package/dist/types/mexico/EfirmaFields.d.ts +38 -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 +61 -0
- package/dist/types/mexico/mexicoRules.d.ts +29 -0
- package/dist/types/mexico.d.ts +11 -0
- package/dist/types/react-hook-form.d.ts +10 -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 +42 -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 +13 -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/table.d.ts +1 -1
- package/dist/types/ui/actions/ActionsMenu.d.ts +18 -3
- package/dist/types/ui/actions/CopyButton.d.ts +7 -4
- package/dist/types/ui/actions/tableRowText.d.ts +6 -0
- package/dist/types/ui/cards/RecordCard.d.ts +65 -0
- package/dist/types/ui/cards/RecordCardSkeleton.d.ts +17 -0
- package/dist/types/ui/countdown/Countdown.d.ts +31 -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 +21 -0
- package/dist/types/ui/filters/FilterDrawer.d.ts +34 -0
- package/dist/types/ui/filters/filterDrawerFields.d.ts +139 -0
- package/dist/types/ui/help/HelpButton.d.ts +15 -0
- package/dist/types/ui/help/HelpCarouselDialog.d.ts +35 -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/navigation/RouteTabs.d.ts +44 -0
- package/dist/types/ui/navigation/routeTabMatching.d.ts +27 -0
- package/dist/types/upload/AttachmentsInput.d.ts +62 -0
- package/dist/types/upload/FileChip.d.ts +18 -0
- package/dist/types/upload/FileDropzone.d.ts +3 -0
- package/dist/types/upload/FileInput.d.ts +48 -0
- package/dist/types/upload/FileUploadInput.d.ts +80 -0
- package/dist/types/upload/ImageInput.d.ts +53 -0
- package/dist/types/upload/TemplateDownloadButton.d.ts +39 -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 +98 -15
- package/dist/ui/actions/ActionsMenu.js.map +1 -1
- package/dist/ui/actions/CopyButton.js +31 -11
- package/dist/ui/actions/CopyButton.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 +145 -0
- package/dist/ui/cards/RecordCard.js.map +1 -0
- package/dist/ui/cards/RecordCardSkeleton.js +33 -0
- package/dist/ui/cards/RecordCardSkeleton.js.map +1 -0
- package/dist/ui/countdown/Countdown.js +38 -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 +81 -0
- package/dist/ui/documents/PdfViewerDialog.js.map +1 -0
- package/dist/ui/filters/FilterDrawer.js +211 -0
- package/dist/ui/filters/FilterDrawer.js.map +1 -0
- package/dist/ui/filters/filterDrawerFields.js +119 -0
- package/dist/ui/filters/filterDrawerFields.js.map +1 -0
- package/dist/ui/help/HelpButton.js +17 -0
- package/dist/ui/help/HelpButton.js.map +1 -0
- package/dist/ui/help/HelpCarouselDialog.js +154 -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/navigation/RouteTabs.js +75 -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/upload/AttachmentsInput.js +127 -0
- package/dist/upload/AttachmentsInput.js.map +1 -0
- package/dist/upload/FileChip.js +27 -0
- package/dist/upload/FileChip.js.map +1 -0
- package/dist/upload/FileDropzone.js +19 -84
- package/dist/upload/FileDropzone.js.map +1 -1
- package/dist/upload/FileInput.js +112 -0
- package/dist/upload/FileInput.js.map +1 -0
- package/dist/upload/FileUploadInput.js +285 -0
- package/dist/upload/FileUploadInput.js.map +1 -0
- package/dist/upload/ImageInput.js +125 -0
- package/dist/upload/ImageInput.js.map +1 -0
- package/dist/upload/TemplateDownloadButton.js +67 -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
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {object} props
|
|
3
|
+
* @param {string|number|Date} props.until el momento: un instante en texto, un Date o milisegundos
|
|
4
|
+
* @param {string} [props.label] ya traducido: qué se cuenta («Tiempo para que cierren las inscripciones»), para un lector de pantalla
|
|
5
|
+
* @param {() => void} [props.onComplete] al llegar a cero (una vez)
|
|
6
|
+
* @param {import('react').ReactNode} [props.completedText] lo que dice al terminar; por omisión «Ya terminó»
|
|
7
|
+
* @param {boolean} [props.showSeconds] por omisión, sí
|
|
8
|
+
* @param {(parts: {days: number, hours: number, minutes: number, seconds: number, totalSeconds: number, isOver: boolean}) => import('react').ReactNode} [props.children]
|
|
9
|
+
* para pintarla a su manera
|
|
10
|
+
* @param {import('@mui/material/Typography').TypographyProps['variant']} [props.variant] por omisión body1
|
|
11
|
+
* @param {object} [props.sx]
|
|
12
|
+
* @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete
|
|
13
|
+
*/
|
|
14
|
+
export default function Countdown(props: {
|
|
15
|
+
until: string | number | Date;
|
|
16
|
+
label?: string;
|
|
17
|
+
onComplete?: () => void;
|
|
18
|
+
completedText?: import('react').ReactNode;
|
|
19
|
+
showSeconds?: boolean;
|
|
20
|
+
children?: (parts: {
|
|
21
|
+
days: number;
|
|
22
|
+
hours: number;
|
|
23
|
+
minutes: number;
|
|
24
|
+
seconds: number;
|
|
25
|
+
totalSeconds: number;
|
|
26
|
+
isOver: boolean;
|
|
27
|
+
}) => import('react').ReactNode;
|
|
28
|
+
variant?: import('@mui/material/Typography').TypographyProps['variant'];
|
|
29
|
+
sx?: object;
|
|
30
|
+
texts?: object;
|
|
31
|
+
}): string | number | bigint | boolean | import("react").JSX.Element | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | Iterable<import("react").ReactNode> | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | import("react").ReactPortal | null | undefined> | null | undefined;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* El momento en milisegundos: un instante en texto ('2026-11-01T18:30:00Z'), un Date o milisegundos.
|
|
3
|
+
*
|
|
4
|
+
* @param {string|number|Date} until
|
|
5
|
+
* @returns {number} NaN si no se entiende
|
|
6
|
+
*/
|
|
7
|
+
export declare function instantMillisecondsOf(until: string | number | Date): number;
|
|
8
|
+
/**
|
|
9
|
+
* Lo que falta, partido. Ya pasado (o un momento que no se entiende) es todo en cero con isOver.
|
|
10
|
+
*
|
|
11
|
+
* @param {string|number|Date} until
|
|
12
|
+
* @param {number} now milisegundos de ahora (Date.now())
|
|
13
|
+
* @returns {{days: number, hours: number, minutes: number, seconds: number, totalSeconds: number, isOver: boolean}}
|
|
14
|
+
*/
|
|
15
|
+
export declare function countdownPartsOf(until: string | number | Date, now: number): {
|
|
16
|
+
days: number;
|
|
17
|
+
hours: number;
|
|
18
|
+
minutes: number;
|
|
19
|
+
seconds: number;
|
|
20
|
+
totalSeconds: number;
|
|
21
|
+
isOver: boolean;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Lo que falta como reloj: «02:14:30»; con días, «3 d 02:14:30» (la letra del día la da el idioma); sin segundos,
|
|
25
|
+
* «02:14».
|
|
26
|
+
*
|
|
27
|
+
* @param {{days: number, hours: number, minutes: number, seconds: number}} parts
|
|
28
|
+
* @param {{daysLabel?: string, showSeconds?: boolean}} [options] daysLabel: la abreviatura de días ya traducida ('d')
|
|
29
|
+
* @returns {string}
|
|
30
|
+
*/
|
|
31
|
+
export declare function countdownClockOf({ days, hours, minutes, seconds }: {
|
|
32
|
+
days: number;
|
|
33
|
+
hours: number;
|
|
34
|
+
minutes: number;
|
|
35
|
+
seconds: number;
|
|
36
|
+
}, { daysLabel, showSeconds }?: {
|
|
37
|
+
daysLabel?: string;
|
|
38
|
+
showSeconds?: boolean;
|
|
39
|
+
}): string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { countdownPartsOf } from './countdownParts.js';
|
|
2
|
+
/**
|
|
3
|
+
* @param {string|number|Date} until el momento: un instante en texto, un Date o milisegundos
|
|
4
|
+
* @param {{onComplete?: () => void, now?: () => number}} [options] onComplete: al llegar a cero (una vez); now: el reloj
|
|
5
|
+
* (para probar con una hora fija)
|
|
6
|
+
* @returns {{parts: ReturnType<typeof countdownPartsOf>, isOver: boolean}}
|
|
7
|
+
*/
|
|
8
|
+
export declare function useCountdown(until: string | number | Date, { onComplete, now }?: {
|
|
9
|
+
onComplete?: () => void;
|
|
10
|
+
now?: () => number;
|
|
11
|
+
}): {
|
|
12
|
+
parts: ReturnType<typeof countdownPartsOf>;
|
|
13
|
+
isOver: boolean;
|
|
14
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {object} props
|
|
3
|
+
* @param {boolean} props.open
|
|
4
|
+
* @param {() => void} props.onClose
|
|
5
|
+
* @param {string} props.title ya traducido: qué documento es
|
|
6
|
+
* @param {string|Blob|null} props.src la dirección del PDF o el archivo (Blob o File)
|
|
7
|
+
* @param {string} [props.fileName] con qué nombre se descarga (por omisión, el título con .pdf)
|
|
8
|
+
* @param {import('react').ReactNode} [props.actions] botones suyos junto a «Abrir en otra pestaña» y «Descargar»
|
|
9
|
+
* @param {() => void} [props.onDownload] al descargar (para registrarlo, por ejemplo)
|
|
10
|
+
* @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete
|
|
11
|
+
*/
|
|
12
|
+
export default function PdfViewerDialog(props: {
|
|
13
|
+
open: boolean;
|
|
14
|
+
onClose: () => void;
|
|
15
|
+
title: string;
|
|
16
|
+
src: string | Blob | null;
|
|
17
|
+
fileName?: string;
|
|
18
|
+
actions?: import('react').ReactNode;
|
|
19
|
+
onDownload?: () => void;
|
|
20
|
+
texts?: object;
|
|
21
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** De qué lado sale el cajón. */
|
|
2
|
+
export declare const FILTER_DRAWER_ANCHOR: Readonly<{
|
|
3
|
+
left: "left";
|
|
4
|
+
right: "right";
|
|
5
|
+
}>;
|
|
6
|
+
/**
|
|
7
|
+
* @param {object} props
|
|
8
|
+
* @param {boolean} props.open
|
|
9
|
+
* @param {() => void} props.onClose
|
|
10
|
+
* @param {object[]} props.fields los campos (filterDrawerFields.js): {name, label, kind, options?, keys?, prefix?, suffix?, decimals?, operators?, render?…}
|
|
11
|
+
* @param {Record<string, unknown>} props.values los filtros puestos hoy (de ahí sale el borrador al abrir)
|
|
12
|
+
* @param {(values: Record<string, unknown>) => void} props.onApply todos los campos del cajón juntos, al picar «Buscar»
|
|
13
|
+
* @param {'left'|'right'} [props.anchor] de qué lado sale (FILTER_DRAWER_ANCHOR); por omisión la derecha
|
|
14
|
+
* @param {number} [props.width] su ancho en escritorio, en px
|
|
15
|
+
* @param {string} [props.title] ya traducido; por omisión «Filtros»
|
|
16
|
+
* @param {string} [props.applyLabel] ya traducido; por omisión «Buscar»
|
|
17
|
+
* @param {boolean} [props.closeOnApply] por omisión sí
|
|
18
|
+
* @param {import('react').ReactNode} [props.children] algo más abajo de los campos (una nota, un enlace)
|
|
19
|
+
* @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete
|
|
20
|
+
*/
|
|
21
|
+
export default function FilterDrawer(props: {
|
|
22
|
+
open: boolean;
|
|
23
|
+
onClose: () => void;
|
|
24
|
+
fields: object[];
|
|
25
|
+
values: Record<string, unknown>;
|
|
26
|
+
onApply: (values: Record<string, unknown>) => void;
|
|
27
|
+
anchor?: 'left' | 'right';
|
|
28
|
+
width?: number;
|
|
29
|
+
title?: string;
|
|
30
|
+
applyLabel?: string;
|
|
31
|
+
closeOnApply?: boolean;
|
|
32
|
+
children?: import('react').ReactNode;
|
|
33
|
+
texts?: object;
|
|
34
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/** Los tipos de campo del cajón. */
|
|
2
|
+
export declare const FILTER_FIELD_KIND: Readonly<{
|
|
3
|
+
text: "text";
|
|
4
|
+
select: "select";
|
|
5
|
+
multiSelect: "multiSelect";
|
|
6
|
+
catalog: "catalog";
|
|
7
|
+
checkboxes: "checkboxes";
|
|
8
|
+
numberRange: "numberRange";
|
|
9
|
+
dateRange: "dateRange";
|
|
10
|
+
comparison: "comparison";
|
|
11
|
+
custom: "custom";
|
|
12
|
+
}>;
|
|
13
|
+
/** Los operadores de un campo de comparación, como viajan ('gte:500'). */
|
|
14
|
+
export declare const COMPARISON_OPERATOR: Readonly<{
|
|
15
|
+
equals: "eq";
|
|
16
|
+
greaterThan: "gt";
|
|
17
|
+
greaterOrEqual: "gte";
|
|
18
|
+
lessThan: "lt";
|
|
19
|
+
lessOrEqual: "lte";
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* ¿El campo guarda una lista?
|
|
23
|
+
*
|
|
24
|
+
* @param {{kind: string, multiple?: boolean}} field
|
|
25
|
+
* @returns {boolean}
|
|
26
|
+
*/
|
|
27
|
+
export declare function isListField(field: {
|
|
28
|
+
kind: string;
|
|
29
|
+
multiple?: boolean;
|
|
30
|
+
}): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Los nombres con que viaja un campo en los filtros: uno, o dos para un rango.
|
|
33
|
+
*
|
|
34
|
+
* @param {{name: string, kind: string, keys?: {from?: string, to?: string}}} field
|
|
35
|
+
* @returns {string[]}
|
|
36
|
+
*/
|
|
37
|
+
export declare function filterKeysOf(field: {
|
|
38
|
+
name: string;
|
|
39
|
+
kind: string;
|
|
40
|
+
keys?: {
|
|
41
|
+
from?: string;
|
|
42
|
+
to?: string;
|
|
43
|
+
};
|
|
44
|
+
}): string[];
|
|
45
|
+
/**
|
|
46
|
+
* Un valor de comparación ('gte:500') en sus partes; null si viene vacío o no se entiende.
|
|
47
|
+
*
|
|
48
|
+
* @param {unknown} text
|
|
49
|
+
* @returns {{operator: string, value: string}|null}
|
|
50
|
+
*/
|
|
51
|
+
export declare function comparisonOf(text: unknown): {
|
|
52
|
+
operator: string;
|
|
53
|
+
value: string;
|
|
54
|
+
} | null;
|
|
55
|
+
/**
|
|
56
|
+
* Las partes de una comparación como viajan; '' si falta el número.
|
|
57
|
+
*
|
|
58
|
+
* @param {string} operator COMPARISON_OPERATOR
|
|
59
|
+
* @param {string} value
|
|
60
|
+
* @returns {string}
|
|
61
|
+
*/
|
|
62
|
+
export declare function comparisonTextOf(operator: string, value: string): string;
|
|
63
|
+
/**
|
|
64
|
+
* ¿Ese valor de filtro está puesto? Un texto vacío o una lista vacía no cuentan.
|
|
65
|
+
*
|
|
66
|
+
* @param {unknown} value
|
|
67
|
+
* @returns {boolean}
|
|
68
|
+
*/
|
|
69
|
+
export declare function isFilterValueSet(value: unknown): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Los tipos de filtro para ServerTable (filterKinds): los de lista se leen como lista en la dirección.
|
|
72
|
+
*
|
|
73
|
+
* @param {object[]} fields
|
|
74
|
+
* @returns {Record<string, string>}
|
|
75
|
+
*/
|
|
76
|
+
export declare function filterDrawerKindsOf(fields: object[]): Record<string, string>;
|
|
77
|
+
/**
|
|
78
|
+
* Lo que hay en los filtros para los campos del cajón (lo demás no se toca).
|
|
79
|
+
*
|
|
80
|
+
* @param {object[]} fields
|
|
81
|
+
* @param {Record<string, unknown>} filters
|
|
82
|
+
* @returns {Record<string, unknown>}
|
|
83
|
+
*/
|
|
84
|
+
export declare function drawerValuesOf(fields: object[], filters: Record<string, unknown>): Record<string, unknown>;
|
|
85
|
+
/**
|
|
86
|
+
* Los campos del cajón vacíos: lo que deja «Limpiar».
|
|
87
|
+
*
|
|
88
|
+
* @param {object[]} fields
|
|
89
|
+
* @returns {Record<string, unknown>}
|
|
90
|
+
*/
|
|
91
|
+
export declare function emptyDrawerValuesOf(fields: object[]): Record<string, unknown>;
|
|
92
|
+
/**
|
|
93
|
+
* Los campos del cajón vacíos, para sumarlos a filterDefaults de ServerTable: la tabla solo guarda en la dirección los
|
|
94
|
+
* filtros que declara ahí.
|
|
95
|
+
*
|
|
96
|
+
* @param {object[]} fields
|
|
97
|
+
* @returns {Record<string, unknown>}
|
|
98
|
+
*/
|
|
99
|
+
export declare function filterDrawerDefaultsOf(fields: object[]): Record<string, unknown>;
|
|
100
|
+
/**
|
|
101
|
+
* Cuántos campos del cajón tienen algo puesto (un rango con «desde» y «hasta» cuenta uno): el número del botón «Filtros».
|
|
102
|
+
*
|
|
103
|
+
* @param {object[]} fields
|
|
104
|
+
* @param {Record<string, unknown>} filters
|
|
105
|
+
* @returns {number}
|
|
106
|
+
*/
|
|
107
|
+
export declare function activeDrawerFilterCountOf(fields: object[], filters: Record<string, unknown>): number;
|
|
108
|
+
/**
|
|
109
|
+
* Los rangos que no tienen sentido («hasta» menor que «desde»): {llave de «hasta»: true}.
|
|
110
|
+
*
|
|
111
|
+
* @param {object[]} fields
|
|
112
|
+
* @param {Record<string, unknown>} values
|
|
113
|
+
* @returns {Record<string, boolean>}
|
|
114
|
+
*/
|
|
115
|
+
export declare function invalidRangesOf(fields: object[], values: Record<string, unknown>): Record<string, boolean>;
|
|
116
|
+
/**
|
|
117
|
+
* Los chips de los campos del cajón, con la forma de buildChipConfig: cada valor con su etiqueta, ya dicho en palabras.
|
|
118
|
+
*
|
|
119
|
+
* @param {object[]} fields
|
|
120
|
+
* @param {object} helpers
|
|
121
|
+
* @param {(key: string, values?: object) => string} helpers.t el de common (filterDrawer.chipFrom, chipTo)
|
|
122
|
+
* @param {(date: string) => string} [helpers.formatDate] cómo se ve una fecha
|
|
123
|
+
* @returns {{text: Array<{key: string, label: string, format?: (value: string) => string}>, multiSelect: Array<{key: string, label: string, itemLabel?: (value: string) => string}>}}
|
|
124
|
+
*/
|
|
125
|
+
export declare function filterDrawerChipsOf(fields: object[], { t, formatDate }: {
|
|
126
|
+
t: (key: string, values?: object) => string;
|
|
127
|
+
formatDate?: (date: string) => string;
|
|
128
|
+
}): {
|
|
129
|
+
text: Array<{
|
|
130
|
+
key: string;
|
|
131
|
+
label: string;
|
|
132
|
+
format?: (value: string) => string;
|
|
133
|
+
}>;
|
|
134
|
+
multiSelect: Array<{
|
|
135
|
+
key: string;
|
|
136
|
+
label: string;
|
|
137
|
+
itemLabel?: (value: string) => string;
|
|
138
|
+
}>;
|
|
139
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {object} props
|
|
3
|
+
* @param {() => void} props.onClick
|
|
4
|
+
* @param {string} [props.label] ya traducido; por omisión «Ayuda de esta pantalla»
|
|
5
|
+
* @param {'small'|'medium'|'large'} [props.size]
|
|
6
|
+
* @param {object} [props.sx]
|
|
7
|
+
* @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete
|
|
8
|
+
*/
|
|
9
|
+
export default function HelpButton({ onClick, label, size, sx, texts, ...unknownProps }: {
|
|
10
|
+
onClick: () => void;
|
|
11
|
+
label?: string;
|
|
12
|
+
size?: 'small' | 'medium' | 'large';
|
|
13
|
+
sx?: object;
|
|
14
|
+
texts?: object;
|
|
15
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** Por qué se cerró la ayuda. */
|
|
2
|
+
export declare const HELP_CLOSE_REASON: Readonly<{
|
|
3
|
+
finished: "finished";
|
|
4
|
+
closed: "closed";
|
|
5
|
+
}>;
|
|
6
|
+
/**
|
|
7
|
+
* @param {object} props
|
|
8
|
+
* @param {boolean} props.open
|
|
9
|
+
* @param {(reason: string, details: {dontShowAgain: boolean}) => void} props.onClose HELP_CLOSE_REASON y si marcó «No volver a mostrar»
|
|
10
|
+
* @param {Array<{title: string, content: import('react').ReactNode, image?: string, imageAlt?: string, media?: import('react').ReactNode}>} props.steps
|
|
11
|
+
* title y content ya traducidos; image (una dirección) o media (una ilustración propia) arriba
|
|
12
|
+
* @param {string} [props.title] ya traducido: de qué es la ayuda («Cómo usar el tablero»), arriba de los pasos
|
|
13
|
+
* @param {boolean} [props.showDontShowAgain] la casilla «No volver a mostrar al entrar» (por omisión sí)
|
|
14
|
+
* @param {(index: number) => void} [props.onStepChange]
|
|
15
|
+
* @param {number} [props.initialStep]
|
|
16
|
+
* @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete
|
|
17
|
+
*/
|
|
18
|
+
export default function HelpCarouselDialog(props: {
|
|
19
|
+
open: boolean;
|
|
20
|
+
onClose: (reason: string, details: {
|
|
21
|
+
dontShowAgain: boolean;
|
|
22
|
+
}) => void;
|
|
23
|
+
steps: Array<{
|
|
24
|
+
title: string;
|
|
25
|
+
content: import('react').ReactNode;
|
|
26
|
+
image?: string;
|
|
27
|
+
imageAlt?: string;
|
|
28
|
+
media?: import('react').ReactNode;
|
|
29
|
+
}>;
|
|
30
|
+
title?: string;
|
|
31
|
+
showDontShowAgain?: boolean;
|
|
32
|
+
onStepChange?: (index: number) => void;
|
|
33
|
+
initialStep?: number;
|
|
34
|
+
texts?: object;
|
|
35
|
+
}): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {object} options
|
|
3
|
+
* @param {string} options.helpKey de qué pantalla es la ayuda ('tasks'): una llave por ayuda
|
|
4
|
+
* @param {string} [options.version] súbala cuando la ayuda cambie y deba volver a salir
|
|
5
|
+
* @param {boolean} [options.autoOpen] que salga sola la primera vez (por omisión sí)
|
|
6
|
+
* @param {boolean} [options.seen] lo que sabe el servidor del proyecto: true = ya la vio (no sale sola)
|
|
7
|
+
* @returns {{open: boolean, openHelp: () => void, closeHelp: (reason?: string, details?: {dontShowAgain: boolean}) => void, wasSeen: boolean}}
|
|
8
|
+
*/
|
|
9
|
+
export declare function useHelpCarousel({ helpKey, version, autoOpen, seen }: {
|
|
10
|
+
helpKey: string;
|
|
11
|
+
version?: string;
|
|
12
|
+
autoOpen?: boolean;
|
|
13
|
+
seen?: boolean;
|
|
14
|
+
}): {
|
|
15
|
+
open: boolean;
|
|
16
|
+
openHelp: () => void;
|
|
17
|
+
closeHelp: (reason?: string, details?: {
|
|
18
|
+
dontShowAgain: boolean;
|
|
19
|
+
}) => void;
|
|
20
|
+
wasSeen: boolean;
|
|
21
|
+
};
|
package/dist/types/ui/index.d.ts
CHANGED
|
@@ -18,14 +18,24 @@ export { LANGUAGES, default as LanguageToggle } from './navigation/LanguageToggl
|
|
|
18
18
|
export { default as FontSizeToggle } from './navigation/FontSizeToggle.js';
|
|
19
19
|
export { FONT_SIZE_LEVELS } from './navigation/fontSizeLevels.js';
|
|
20
20
|
export { default as PageBreadcrumbs } from './navigation/PageBreadcrumbs.js';
|
|
21
|
+
export { ROUTE_TABS_MODE, default as RouteTabs, useActiveRouteTab } from './navigation/RouteTabs.js';
|
|
22
|
+
export { default as HelpButton } from './help/HelpButton.js';
|
|
23
|
+
export { HELP_CLOSE_REASON, default as HelpCarouselDialog } from './help/HelpCarouselDialog.js';
|
|
24
|
+
export { default as RecordCard } from './cards/RecordCard.js';
|
|
25
|
+
export { default as RecordCardSkeleton } from './cards/RecordCardSkeleton.js';
|
|
26
|
+
export { useHelpCarousel } from './help/useHelpCarousel.js';
|
|
21
27
|
export { default as DateRangeFilter } from './filters/DateRangeFilter.js';
|
|
28
|
+
export { FILTER_DRAWER_ANCHOR, default as FilterDrawer } from './filters/FilterDrawer.js';
|
|
29
|
+
export { COMPARISON_OPERATOR, FILTER_FIELD_KIND, activeDrawerFilterCountOf, comparisonOf, comparisonTextOf, filterDrawerChipsOf, filterDrawerDefaultsOf, filterDrawerKindsOf, filterKeysOf, } from './filters/filterDrawerFields.js';
|
|
22
30
|
export { default as PeriodRangeSelector } from './filters/PeriodRangeSelector.js';
|
|
23
31
|
export { default as QuickFilters } from './filters/QuickFilters.js';
|
|
24
32
|
export { default as SegmentedControl, SEGMENTED_CONTROL_SX } from './filters/SegmentedControl.js';
|
|
25
33
|
export { default as DictionaryText } from './labels/DictionaryText.js';
|
|
26
34
|
export { default as StatusChip } from './labels/StatusChip.js';
|
|
35
|
+
export { ICON_BADGE_CLASSES, ICON_BADGE_VARIANT, default as IconBadge } from './labels/IconBadge.js';
|
|
27
36
|
export { default as Tag } from './labels/Tag.js';
|
|
28
37
|
export { default as CopyButton } from './actions/CopyButton.js';
|
|
38
|
+
export { tableRowTextOf } from './actions/tableRowText.js';
|
|
29
39
|
export { default as DownloadMenu } from './actions/DownloadMenu.js';
|
|
30
40
|
export { default as SecretField } from './actions/SecretField.js';
|
|
31
41
|
export { default as CalendarHeatmap } from './metrics/CalendarHeatmap.js';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Los estilos de la insignia. */
|
|
2
|
+
export declare const ICON_BADGE_VARIANT: Readonly<{
|
|
3
|
+
outlined: "outlined";
|
|
4
|
+
soft: "soft";
|
|
5
|
+
plain: "plain";
|
|
6
|
+
}>;
|
|
7
|
+
export declare const ICON_BADGE_CLASSES: Readonly<{
|
|
8
|
+
root: "CalcitaIconBadge-root";
|
|
9
|
+
icon: "CalcitaIconBadge-icon";
|
|
10
|
+
label: "CalcitaIconBadge-label";
|
|
11
|
+
}>;
|
|
12
|
+
/**
|
|
13
|
+
* @param {object} props
|
|
14
|
+
* @param {Record<string, object>} [props.dictionary] de donde sale la etiqueta, el tooltip, el color y el ícono
|
|
15
|
+
* @param {string|null} [props.value] con dictionary: el código del API
|
|
16
|
+
* @param {import('react').ElementType} [props.icon] suelta: el ícono (un componente, p. ej. VerifiedUserOutlinedIcon)
|
|
17
|
+
* @param {import('react').ReactNode} [props.label] suelta: el texto, ya traducido
|
|
18
|
+
* @param {'primary'|'secondary'|'success'|'warning'|'error'|'info'|'default'} [props.tone] suelta: el color
|
|
19
|
+
* @param {'outlined'|'soft'|'plain'} [props.variant] ICON_BADGE_VARIANT
|
|
20
|
+
* @param {'small'|'medium'} [props.size]
|
|
21
|
+
* @param {import('react').ReactNode} [props.tooltip] lo que explica al pasar el cursor (con dictionary, el del diccionario)
|
|
22
|
+
* @param {object} [props.sx]
|
|
23
|
+
*/
|
|
24
|
+
export default function IconBadge(props: {
|
|
25
|
+
dictionary?: Record<string, object>;
|
|
26
|
+
value?: string | null;
|
|
27
|
+
icon?: import('react').ElementType;
|
|
28
|
+
label?: import('react').ReactNode;
|
|
29
|
+
tone?: 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info' | 'default';
|
|
30
|
+
variant?: 'outlined' | 'soft' | 'plain';
|
|
31
|
+
size?: 'small' | 'medium';
|
|
32
|
+
tooltip?: import('react').ReactNode;
|
|
33
|
+
sx?: object;
|
|
34
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** Dónde vive la pestaña: en la ruta o en la consulta. */
|
|
2
|
+
export declare const ROUTE_TABS_MODE: Readonly<{
|
|
3
|
+
path: "path";
|
|
4
|
+
query: "query";
|
|
5
|
+
}>;
|
|
6
|
+
/**
|
|
7
|
+
* La pestaña activa, para que la pantalla pinte lo suyo (sobre todo con mode query: la pantalla es una sola).
|
|
8
|
+
*
|
|
9
|
+
* @param {object[]} tabs las mismas de RouteTabs
|
|
10
|
+
* @param {{mode?: string, paramName?: string}} [options]
|
|
11
|
+
* @returns {string|null} el `to` (por ruta) o el `value` (por consulta) de la activa
|
|
12
|
+
*/
|
|
13
|
+
export declare function useActiveRouteTab(tabs: object[], { mode, paramName }?: {
|
|
14
|
+
mode?: string;
|
|
15
|
+
paramName?: string;
|
|
16
|
+
}): string | null;
|
|
17
|
+
/**
|
|
18
|
+
* @param {object} props
|
|
19
|
+
* @param {Array<{to?: string, value?: string, label: import('react').ReactNode, icon?: import('react').ReactElement, badge?: import('react').ReactNode, access?: object, exact?: boolean, disabled?: boolean, hidden?: boolean}>} props.tabs
|
|
20
|
+
* to (por ruta) o value (por consulta); label ya traducido; badge: un conteo o un texto corto junto a la etiqueta
|
|
21
|
+
* @param {string} props.ariaLabel ya traducido: de qué son estas pestañas (para el lector de pantalla)
|
|
22
|
+
* @param {'path'|'query'} [props.mode] ROUTE_TABS_MODE
|
|
23
|
+
* @param {string} [props.paramName] con mode query: el nombre en la consulta (por omisión 'tab')
|
|
24
|
+
* @param {(tab: object) => void} [props.onChange] avisa la pestaña que se eligió (la navegación ya la hace la liga)
|
|
25
|
+
* @param {object} [props.sx]
|
|
26
|
+
*/
|
|
27
|
+
export default function RouteTabs(props: {
|
|
28
|
+
tabs: Array<{
|
|
29
|
+
to?: string;
|
|
30
|
+
value?: string;
|
|
31
|
+
label: import('react').ReactNode;
|
|
32
|
+
icon?: import('react').ReactElement;
|
|
33
|
+
badge?: import('react').ReactNode;
|
|
34
|
+
access?: object;
|
|
35
|
+
exact?: boolean;
|
|
36
|
+
disabled?: boolean;
|
|
37
|
+
hidden?: boolean;
|
|
38
|
+
}>;
|
|
39
|
+
ariaLabel: string;
|
|
40
|
+
mode?: 'path' | 'query';
|
|
41
|
+
paramName?: string;
|
|
42
|
+
onChange?: (tab: object) => void;
|
|
43
|
+
sx?: object;
|
|
44
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {Array<{to: string, exact?: boolean}>} tabs
|
|
3
|
+
* @param {string} pathname
|
|
4
|
+
* @returns {string|null} el `to` de la pestaña activa
|
|
5
|
+
*/
|
|
6
|
+
export declare function activeRouteTabOf(tabs: Array<{
|
|
7
|
+
to: string;
|
|
8
|
+
exact?: boolean;
|
|
9
|
+
}>, pathname: string): string | null;
|
|
10
|
+
/**
|
|
11
|
+
* @param {Array<{value: string}>} tabs
|
|
12
|
+
* @param {string} search la consulta de la dirección ('?tab=pagos&page=2')
|
|
13
|
+
* @param {string} paramName 'tab'
|
|
14
|
+
* @returns {string|null} la pestaña de la consulta si existe; si no, la primera
|
|
15
|
+
*/
|
|
16
|
+
export declare function queryTabOf(tabs: Array<{
|
|
17
|
+
value: string;
|
|
18
|
+
}>, search: string, paramName: string): string | null;
|
|
19
|
+
/**
|
|
20
|
+
* La consulta con otra pestaña, sin perder lo demás que traía (?page=2 se queda).
|
|
21
|
+
*
|
|
22
|
+
* @param {string} search
|
|
23
|
+
* @param {string} paramName
|
|
24
|
+
* @param {string} value
|
|
25
|
+
* @returns {string} '?tab=pagos&page=2'
|
|
26
|
+
*/
|
|
27
|
+
export declare function searchWithTab(search: string, paramName: string, value: string): string;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* La lista conserva el tipo que usa la pantalla para lo ya guardado (T): onChange regresa esos mismos y los File nuevos.
|
|
3
|
+
*
|
|
4
|
+
* @template {File|{id?: string, name: string, size?: number}} T
|
|
5
|
+
* @param {object} props
|
|
6
|
+
* @param {string} [props.name]
|
|
7
|
+
* @param {import('react').ReactNode} [props.label] ya traducida; sin ella, va sin etiqueta (dentro de un correo, por ejemplo)
|
|
8
|
+
* @param {T[]} [props.value] los nuevos y los que ya están guardados
|
|
9
|
+
* @param {(files: Array<T|File>) => void} props.onChange la lista completa
|
|
10
|
+
* @param {() => void} [props.onBlur] se llama al agregar o quitar (para que el formulario lo marque como tocado)
|
|
11
|
+
* @param {(file: T) => void} [props.onRemove] al quitar uno (antes de onChange)
|
|
12
|
+
* @param {string|string[]} [props.accept] 'excel' | ['pdf', 'image'] | '.xlsx,.xls' | 'image/*'
|
|
13
|
+
* @param {number|string} [props.maxSize] el peso máximo de cada archivo: bytes o '10 MB'
|
|
14
|
+
* @param {number} [props.maxFiles] cuántos como máximo
|
|
15
|
+
* @param {number|string} [props.maxTotalSize] cuánto pueden pesar todos juntos
|
|
16
|
+
* @param {string|{key: string, values?: object}} [props.error]
|
|
17
|
+
* @param {string} [props.helperText] ya traducida
|
|
18
|
+
* @param {string} [props.buttonLabel] ya traducido; por omisión «Adjuntar»
|
|
19
|
+
* @param {boolean} [props.showButton] false esconde «Adjuntar» (la ventana se abre con pickerRef desde un botón suyo)
|
|
20
|
+
* @param {import('react').Ref<{open: () => void}>} [props.pickerRef] recibe {open} para abrir la ventana de archivos
|
|
21
|
+
* @param {boolean} [props.disabled]
|
|
22
|
+
* @param {boolean} [props.busy] candado mientras se sube: no se puede agregar ni quitar
|
|
23
|
+
* @param {(file: File, reason: string) => void} [props.onReject] reason es uno de FILE_REJECTION; sin él, un aviso
|
|
24
|
+
* @param {Parameters<typeof import('./TemplateDownloadButton.js').default>[0]} [props.template] «Descargar la
|
|
25
|
+
* plantilla» junto a «Adjuntar»
|
|
26
|
+
* @param {import('react').ReactNode} [props.actions] botones suyos junto a «Adjuntar»
|
|
27
|
+
* @param {object} [props.sx]
|
|
28
|
+
* @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete
|
|
29
|
+
*/
|
|
30
|
+
export default function AttachmentsInput<T extends File | {
|
|
31
|
+
id?: string;
|
|
32
|
+
name: string;
|
|
33
|
+
size?: number;
|
|
34
|
+
}>(props: {
|
|
35
|
+
name?: string;
|
|
36
|
+
label?: import('react').ReactNode;
|
|
37
|
+
value?: T[];
|
|
38
|
+
onChange: (files: Array<T | File>) => void;
|
|
39
|
+
onBlur?: () => void;
|
|
40
|
+
onRemove?: (file: T) => void;
|
|
41
|
+
accept?: string | string[];
|
|
42
|
+
maxSize?: number | string;
|
|
43
|
+
maxFiles?: number;
|
|
44
|
+
maxTotalSize?: number | string;
|
|
45
|
+
error?: string | {
|
|
46
|
+
key: string;
|
|
47
|
+
values?: object;
|
|
48
|
+
};
|
|
49
|
+
helperText?: string;
|
|
50
|
+
buttonLabel?: string;
|
|
51
|
+
showButton?: boolean;
|
|
52
|
+
pickerRef?: import('react').Ref<{
|
|
53
|
+
open: () => void;
|
|
54
|
+
}>;
|
|
55
|
+
disabled?: boolean;
|
|
56
|
+
busy?: boolean;
|
|
57
|
+
onReject?: (file: File, reason: string) => void;
|
|
58
|
+
template?: Parameters<typeof import('./TemplateDownloadButton.js').default>[0];
|
|
59
|
+
actions?: import('react').ReactNode;
|
|
60
|
+
sx?: object;
|
|
61
|
+
texts?: object;
|
|
62
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {object} props
|
|
3
|
+
* @param {{name: string, size?: number}} props.file
|
|
4
|
+
* @param {(() => void)|undefined} [props.onRemove] sin él no hay × (con el candado puesto, por ejemplo)
|
|
5
|
+
* @param {string} props.removeLabel ya traducido: «Quitar contrato.pdf»
|
|
6
|
+
* @param {import('react').ElementType} [props.ChipComponent] la parte del tema del cargador (por omisión, el Chip de MUI)
|
|
7
|
+
* @param {object} [props.ownSx] el estilo de la casa, debajo del tema del proyecto
|
|
8
|
+
*/
|
|
9
|
+
export default function FileChip({ file, onRemove, removeLabel, ChipComponent, ownSx }: {
|
|
10
|
+
file: {
|
|
11
|
+
name: string;
|
|
12
|
+
size?: number;
|
|
13
|
+
};
|
|
14
|
+
onRemove?: (() => void) | undefined;
|
|
15
|
+
removeLabel: string;
|
|
16
|
+
ChipComponent?: import('react').ElementType;
|
|
17
|
+
ownSx?: object;
|
|
18
|
+
}): import("react").JSX.Element;
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
* @param {boolean} [props.busy] candado mientras se sube: no se puede soltar, elegir ni quitar
|
|
11
11
|
* @param {boolean|{title?: string, text?: string}} [props.busyModal] además bloquea la pantalla mientras busy
|
|
12
12
|
* @param {(file: File, reason: string) => void} [props.onReject] reason es uno de FILE_REJECTION; sin él, un aviso
|
|
13
|
+
* @param {Parameters<typeof import('./TemplateDownloadButton.js').default>[0]} [props.template] «Descargar la
|
|
14
|
+
* plantilla» junto a «Elegir archivo»: {href} de un archivo fijo o {request} al API
|
|
13
15
|
* @param {import('react').ReactNode} [props.actions]
|
|
14
16
|
* @param {import('react').ReactNode} [props.children]
|
|
15
17
|
* @param {object} [props.sx] ajustes del recuadro
|
|
@@ -29,6 +31,7 @@ export default function FileDropzone(props: {
|
|
|
29
31
|
text?: string;
|
|
30
32
|
};
|
|
31
33
|
onReject?: (file: File, reason: string) => void;
|
|
34
|
+
template?: Parameters<typeof import('./TemplateDownloadButton.js').default>[0];
|
|
32
35
|
actions?: import('react').ReactNode;
|
|
33
36
|
children?: import('react').ReactNode;
|
|
34
37
|
sx?: object;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {object} props
|
|
3
|
+
* @param {string} [props.name]
|
|
4
|
+
* @param {import('react').ReactNode} [props.label] ya traducida
|
|
5
|
+
* @param {File|{name: string, size?: number}|null} [props.value] el archivo nuevo o el que ya está guardado
|
|
6
|
+
* @param {(file: File|null) => void} props.onChange null al quitarlo
|
|
7
|
+
* @param {() => void} [props.onBlur] se llama al elegir o quitar (para que el formulario lo marque como tocado)
|
|
8
|
+
* @param {string|string[]} [props.accept] 'excel' | ['pdf', 'image'] | '.xlsx,.xls' | 'image/*'
|
|
9
|
+
* @param {number|string} [props.maxSize] bytes o '10 MB'
|
|
10
|
+
* @param {string|{key: string, values?: object}} [props.error]
|
|
11
|
+
* @param {string} [props.helperText] ya traducida
|
|
12
|
+
* @param {string} [props.buttonLabel] ya traducido; por omisión «Elegir archivo»
|
|
13
|
+
* @param {string} [props.emptyText] ya traducido; por omisión «Ningún archivo elegido»
|
|
14
|
+
* @param {boolean} [props.disabled]
|
|
15
|
+
* @param {boolean} [props.busy] candado mientras se sube: no se puede elegir, soltar ni quitar
|
|
16
|
+
* @param {(file: File, reason: string) => void} [props.onReject] reason es uno de FILE_REJECTION; sin él, un aviso
|
|
17
|
+
* @param {Parameters<typeof import('./TemplateDownloadButton.js').default>[0]} [props.template] «Descargar la
|
|
18
|
+
* plantilla» junto al botón
|
|
19
|
+
* @param {import('react').ReactNode} [props.actions] botones suyos en el mismo renglón
|
|
20
|
+
* @param {object} [props.sx] ajustes del renglón
|
|
21
|
+
* @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete
|
|
22
|
+
*/
|
|
23
|
+
export default function FileInput(props: {
|
|
24
|
+
name?: string;
|
|
25
|
+
label?: import('react').ReactNode;
|
|
26
|
+
value?: File | {
|
|
27
|
+
name: string;
|
|
28
|
+
size?: number;
|
|
29
|
+
} | null;
|
|
30
|
+
onChange: (file: File | null) => void;
|
|
31
|
+
onBlur?: () => void;
|
|
32
|
+
accept?: string | string[];
|
|
33
|
+
maxSize?: number | string;
|
|
34
|
+
error?: string | {
|
|
35
|
+
key: string;
|
|
36
|
+
values?: object;
|
|
37
|
+
};
|
|
38
|
+
helperText?: string;
|
|
39
|
+
buttonLabel?: string;
|
|
40
|
+
emptyText?: string;
|
|
41
|
+
disabled?: boolean;
|
|
42
|
+
busy?: boolean;
|
|
43
|
+
onReject?: (file: File, reason: string) => void;
|
|
44
|
+
template?: Parameters<typeof import('./TemplateDownloadButton.js').default>[0];
|
|
45
|
+
actions?: import('react').ReactNode;
|
|
46
|
+
sx?: object;
|
|
47
|
+
texts?: object;
|
|
48
|
+
}): import("react").JSX.Element;
|