@stackcraftmx/calcita 0.0.0-stage → 0.25.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/LICENSE +110 -0
- package/README.md +700 -2
- package/cli/askQuestions.js +63 -0
- package/cli/calcita.js +150 -0
- package/cli/makeComponent.js +50 -0
- package/cli/makeForm.js +68 -0
- package/cli/makeModule.js +78 -0
- package/cli/makePage.js +62 -0
- package/cli/names.js +64 -0
- package/cli/newProject.js +103 -0
- package/cli/packageVersions.js +38 -0
- package/cli/projectAnswers.js +145 -0
- package/cli/projectConfig.js +38 -0
- package/cli/projectFiles.js +128 -0
- package/cli/screenLabels.js +41 -0
- package/cli/templateFiles.js +186 -0
- package/cli/templates/component/core/__ComponentName__.jsx.tpl +23 -0
- package/cli/templates/component/module/__ComponentName__.jsx.tpl +21 -0
- package/cli/templates/form/formik/__FormName__.jsx.tpl +50 -0
- package/cli/templates/form/hookForm/__FormName__.jsx.tpl +53 -0
- package/cli/templates/form/shared/__formName__Schema.js.tpl +20 -0
- package/cli/templates/form/shared/__formName__Texts.js.tpl +6 -0
- package/cli/templates/module/__Name__Page.jsx.tpl +75 -0
- package/cli/templates/module/__name__Api.js.tpl +39 -0
- package/cli/templates/module/__name__Texts.js.tpl +27 -0
- package/cli/templates/module/menu.js.tpl +21 -0
- package/cli/templates/module/routes.js.tpl +7 -0
- package/cli/templates/moduleServer/__name__Server.js.tpl +68 -0
- package/cli/templates/page/__PageName__Page.jsx.tpl +22 -0
- package/cli/templates/page/__pageName__PageTexts.js.tpl +23 -0
- package/cli/templates/project/README.md.tpl +83 -0
- package/cli/templates/project/dot-gitignore.tpl +11 -0
- package/cli/templates/project/index.html.tpl +20 -0
- package/cli/templates/project/jsconfig.json.tpl +16 -0
- package/cli/templates/project/pnpm-workspace.yaml.tpl +5 -0
- package/cli/templates/project/public/favicon.svg +1 -0
- package/cli/templates/project/public/icons/apple-touch-icon.png +0 -0
- package/cli/templates/project/public/icons/icon-192.png +0 -0
- package/cli/templates/project/public/icons/icon-512-maskable.png +0 -0
- package/cli/templates/project/public/icons/icon-512.png +0 -0
- package/cli/templates/project/public/manifest.webmanifest.tpl +17 -0
- package/cli/templates/project/src/app/AppProviders.jsx.tpl +107 -0
- package/cli/templates/project/src/app/AppShell.jsx.tpl +87 -0
- package/cli/templates/project/src/app/appRouter.jsx.tpl +51 -0
- package/cli/templates/project/src/app/appSettings.js.tpl +27 -0
- package/cli/templates/project/src/app/appTexts.js.tpl +15 -0
- package/cli/templates/project/src/app/combineTexts.js.tpl +31 -0
- package/cli/templates/project/src/app/i18n.js.tpl +19 -0
- package/cli/templates/project/src/app/shellTexts.js.tpl +16 -0
- package/cli/templates/project/src/core/AppLogo.jsx.tpl +14 -0
- package/cli/templates/project/src/core/accountConnector.js.tpl +36 -0
- package/cli/templates/project/src/core/apiClient.js.tpl +15 -0
- package/cli/templates/project/src/core/appPaths.js.tpl +11 -0
- package/cli/templates/project/src/core/index.js.tpl +9 -0
- package/cli/templates/project/src/core/publicPaths.js.tpl +24 -0
- package/cli/templates/project/src/fakeServer/networkDelay.js.tpl +40 -0
- package/cli/templates/project/src/fakeServer/serverText.js.tpl +20 -0
- package/cli/templates/project/src/main.jsx.tpl +24 -0
- package/cli/templates/project/src/modules/auth/ForgotPasswordPage.jsx.tpl +14 -0
- package/cli/templates/project/src/modules/auth/ResetPasswordPage.jsx.tpl +15 -0
- package/cli/templates/project/src/modules/auth/SignInPage.jsx.tpl +29 -0
- package/cli/templates/project/src/modules/auth/authTexts.js.tpl +6 -0
- package/cli/templates/project/src/modules/auth/routes.js.tpl +11 -0
- package/cli/templates/project/src/modules/home/HomePage.jsx.tpl +38 -0
- package/cli/templates/project/src/modules/home/homeTexts.js.tpl +29 -0
- package/cli/templates/project/src/modules/home/menu.js.tpl +17 -0
- package/cli/templates/project/src/modules/home/routes.js.tpl +4 -0
- package/cli/templates/project/src/modules/profile/ProfilePage.jsx.tpl +13 -0
- package/cli/templates/project/src/modules/profile/routes.js.tpl +6 -0
- package/cli/templates/project/vite.config.js.tpl +53 -0
- package/dist/DataTable/AuditTrailDialog.js +40 -0
- package/dist/DataTable/AuditTrailDialog.js.map +1 -0
- package/dist/DataTable/AuditTrailTable.js +89 -0
- package/dist/DataTable/AuditTrailTable.js.map +1 -0
- package/dist/DataTable/ColumnFilters/HeaderFilterPopover.js +71 -0
- package/dist/DataTable/ColumnFilters/HeaderFilterPopover.js.map +1 -0
- package/dist/DataTable/ColumnFilters/MultiSelectColumnFilter.js +51 -0
- package/dist/DataTable/ColumnFilters/MultiSelectColumnFilter.js.map +1 -0
- package/dist/DataTable/ColumnFilters/SortableFilterHeader.js +54 -0
- package/dist/DataTable/ColumnFilters/SortableFilterHeader.js.map +1 -0
- package/dist/DataTable/ColumnFilters/TextColumnFilter.js +24 -0
- package/dist/DataTable/ColumnFilters/TextColumnFilter.js.map +1 -0
- package/dist/DataTable/EmptyState.js +22 -0
- package/dist/DataTable/EmptyState.js.map +1 -0
- package/dist/DataTable/FilterChips.js +39 -0
- package/dist/DataTable/FilterChips.js.map +1 -0
- package/dist/DataTable/GoToPage.js +63 -0
- package/dist/DataTable/GoToPage.js.map +1 -0
- package/dist/DataTable/ServerTable.js +477 -0
- package/dist/DataTable/ServerTable.js.map +1 -0
- package/dist/DataTable/buildChipConfig.js +27 -0
- package/dist/DataTable/buildChipConfig.js.map +1 -0
- package/dist/DataTable/columns.js +122 -0
- package/dist/DataTable/columns.js.map +1 -0
- package/dist/DataTable/filterContext.js +15 -0
- package/dist/DataTable/filterContext.js.map +1 -0
- package/dist/DataTable/rowSelection.js +61 -0
- package/dist/DataTable/rowSelection.js.map +1 -0
- package/dist/DataTable/serverTableParams.js +19 -0
- package/dist/DataTable/serverTableParams.js.map +1 -0
- package/dist/DataTable/tableMachine.js +87 -0
- package/dist/DataTable/tableMachine.js.map +1 -0
- package/dist/DataTable/useDebouncedFilter.js +29 -0
- package/dist/DataTable/useDebouncedFilter.js.map +1 -0
- package/dist/DataTable/useTableState.js +132 -0
- package/dist/DataTable/useTableState.js.map +1 -0
- package/dist/access/Can.js +9 -0
- package/dist/access/Can.js.map +1 -0
- package/dist/access/PermissionMatrix.js +84 -0
- package/dist/access/PermissionMatrix.js.map +1 -0
- package/dist/access/RequireAccess.js +14 -0
- package/dist/access/RequireAccess.js.map +1 -0
- package/dist/access/accessRules.js +49 -0
- package/dist/access/accessRules.js.map +1 -0
- package/dist/access/permissionGroups.js +43 -0
- package/dist/access/permissionGroups.js.map +1 -0
- package/dist/access/useCan.js +12 -0
- package/dist/access/useCan.js.map +1 -0
- package/dist/account/AccountProvider.js +58 -0
- package/dist/account/AccountProvider.js.map +1 -0
- package/dist/account/AccountSecuritySection.js +81 -0
- package/dist/account/AccountSecuritySection.js.map +1 -0
- package/dist/account/DemoTotpCodeButton.js +26 -0
- package/dist/account/DemoTotpCodeButton.js.map +1 -0
- package/dist/account/ForgotPasswordScreen.js +27 -0
- package/dist/account/ForgotPasswordScreen.js.map +1 -0
- package/dist/account/ProfileScreen.js +134 -0
- package/dist/account/ProfileScreen.js.map +1 -0
- package/dist/account/ResetPasswordScreen.js +58 -0
- package/dist/account/ResetPasswordScreen.js.map +1 -0
- package/dist/account/SignInScreen.js +102 -0
- package/dist/account/SignInScreen.js.map +1 -0
- package/dist/account/accountConnector.js +31 -0
- package/dist/account/accountConnector.js.map +1 -0
- package/dist/account/demo/createDemoAccountConnector.js +368 -0
- package/dist/account/demo/createDemoAccountConnector.js.map +1 -0
- package/dist/account/demo/totp.js +61 -0
- package/dist/account/demo/totp.js.map +1 -0
- package/dist/account/restAccountConnector.js +118 -0
- package/dist/account/restAccountConnector.js.map +1 -0
- package/dist/account-demo.js +12 -0
- package/dist/account-demo.js.map +1 -0
- package/dist/account.js +25 -0
- package/dist/account.js.map +1 -0
- package/dist/adapters/i18next.js +7 -0
- package/dist/adapters/i18next.js.map +1 -0
- package/dist/adapters/nextNavigation.js +36 -0
- package/dist/adapters/nextNavigation.js.map +1 -0
- package/dist/adapters/reactRouter.js +7 -0
- package/dist/adapters/reactRouter.js.map +1 -0
- package/dist/adapters/reactRouterRoutes.js +49 -0
- package/dist/adapters/reactRouterRoutes.js.map +1 -0
- package/dist/api/ApiError.js +58 -0
- package/dist/api/ApiError.js.map +1 -0
- package/dist/api/createApiClient.js +256 -0
- package/dist/api/createApiClient.js.map +1 -0
- package/dist/api/staleChunks.js +47 -0
- package/dist/api/staleChunks.js.map +1 -0
- package/dist/appShell/AccountMenu.js +86 -0
- package/dist/appShell/AccountMenu.js.map +1 -0
- package/dist/appShell/AppLayout.js +513 -0
- package/dist/appShell/AppLayout.js.map +1 -0
- package/dist/appShell/AppearanceSettings.js +116 -0
- package/dist/appShell/AppearanceSettings.js.map +1 -0
- package/dist/appShell/AuthLayout.js +46 -0
- package/dist/appShell/AuthLayout.js.map +1 -0
- package/dist/appShell/BarActionButton.js +31 -0
- package/dist/appShell/BarActionButton.js.map +1 -0
- package/dist/appShell/BarActions.js +105 -0
- package/dist/appShell/BarActions.js.map +1 -0
- package/dist/appShell/BarCapsule.js +50 -0
- package/dist/appShell/BarCapsule.js.map +1 -0
- package/dist/appShell/BarSearch.js +92 -0
- package/dist/appShell/BarSearch.js.map +1 -0
- package/dist/appShell/HeaderTools.js +53 -0
- package/dist/appShell/HeaderTools.js.map +1 -0
- package/dist/appShell/MobileTabBar.js +348 -0
- package/dist/appShell/MobileTabBar.js.map +1 -0
- package/dist/appShell/SettingsMenu.js +41 -0
- package/dist/appShell/SettingsMenu.js.map +1 -0
- package/dist/appShell/SideMenu.js +217 -0
- package/dist/appShell/SideMenu.js.map +1 -0
- package/dist/appShell/SideMenuEntry.js +140 -0
- package/dist/appShell/SideMenuEntry.js.map +1 -0
- package/dist/appShell/SubmenuActionsMenu.js +71 -0
- package/dist/appShell/SubmenuActionsMenu.js.map +1 -0
- package/dist/appShell/TabBarEditor.js +55 -0
- package/dist/appShell/TabBarEditor.js.map +1 -0
- package/dist/appShell/TopMenu.js +80 -0
- package/dist/appShell/TopMenu.js.map +1 -0
- package/dist/appShell/appMenuContext.js +11 -0
- package/dist/appShell/appMenuContext.js.map +1 -0
- package/dist/appShell/barActionsSlot.js +26 -0
- package/dist/appShell/barActionsSlot.js.map +1 -0
- package/dist/appShell/barMenuPlacement.js +33 -0
- package/dist/appShell/barMenuPlacement.js.map +1 -0
- package/dist/appShell/menuItemText.js +33 -0
- package/dist/appShell/menuItemText.js.map +1 -0
- package/dist/appShell/pageTitle.js +45 -0
- package/dist/appShell/pageTitle.js.map +1 -0
- package/dist/appShell/shellSizes.js +40 -0
- package/dist/appShell/shellSizes.js.map +1 -0
- package/dist/appShell/tabBarRule.js +12 -0
- package/dist/appShell/tabBarRule.js.map +1 -0
- package/dist/appShell/tabBarScroll.js +23 -0
- package/dist/appShell/tabBarScroll.js.map +1 -0
- package/dist/appShell/useDrawerCollapsed.js +29 -0
- package/dist/appShell/useDrawerCollapsed.js.map +1 -0
- package/dist/appShell/useFittingActionCount.js +45 -0
- package/dist/appShell/useFittingActionCount.js.map +1 -0
- package/dist/appShell/usePinnedMobileTabs.js +32 -0
- package/dist/appShell/usePinnedMobileTabs.js.map +1 -0
- package/dist/appShell/useTabBarMinimized.js +33 -0
- package/dist/appShell/useTabBarMinimized.js.map +1 -0
- package/dist/auth/PasswordChecklist.js +44 -0
- package/dist/auth/PasswordChecklist.js.map +1 -0
- package/dist/auth/passwordRules.js +43 -0
- package/dist/auth/passwordRules.js.map +1 -0
- package/dist/calendar/EventCalendar.js +149 -0
- package/dist/calendar/EventCalendar.js.map +1 -0
- package/dist/calendar/EventDetails.js +74 -0
- package/dist/calendar/EventDetails.js.map +1 -0
- package/dist/calendar/calendarEvents.js +31 -0
- package/dist/calendar/calendarEvents.js.map +1 -0
- package/dist/calendar.js +13 -0
- package/dist/calendar.js.map +1 -0
- package/dist/charts.js +16 -0
- package/dist/charts.js.map +1 -0
- package/dist/date-pickers.js +8 -0
- package/dist/date-pickers.js.map +1 -0
- package/dist/datePickers/DateInput.js +76 -0
- package/dist/datePickers/DateInput.js.map +1 -0
- package/dist/datePickers/FormDateField.js +12 -0
- package/dist/datePickers/FormDateField.js.map +1 -0
- package/dist/dates.js +25 -0
- package/dist/dates.js.map +1 -0
- package/dist/dictionaries/dictionaries.js +48 -0
- package/dist/dictionaries/dictionaries.js.map +1 -0
- package/dist/downloads/DownloadManager.js +195 -0
- package/dist/downloads/DownloadManager.js.map +1 -0
- package/dist/downloads/downloadQueue.js +56 -0
- package/dist/downloads/downloadQueue.js.map +1 -0
- package/dist/downloads/downloadsMachine.js +80 -0
- package/dist/downloads/downloadsMachine.js.map +1 -0
- package/dist/downloads/fileTypes.js +22 -0
- package/dist/downloads/fileTypes.js.map +1 -0
- package/dist/excel/reportWorkbook.js +299 -0
- package/dist/excel/reportWorkbook.js.map +1 -0
- package/dist/excel.js +13 -0
- package/dist/excel.js.map +1 -0
- package/dist/feedback/ConfirmDialog.js +73 -0
- package/dist/feedback/ConfirmDialog.js.map +1 -0
- package/dist/feedback/ModalWaiting.js +23 -0
- package/dist/feedback/ModalWaiting.js.map +1 -0
- package/dist/feedback/NewBuildNotice.js +79 -0
- package/dist/feedback/NewBuildNotice.js.map +1 -0
- package/dist/feedback/StaleBuildBoundary.js +36 -0
- package/dist/feedback/StaleBuildBoundary.js.map +1 -0
- package/dist/feedback/Toaster.js +20 -0
- package/dist/feedback/Toaster.js.map +1 -0
- package/dist/feedback/confirmActionMachine.js +67 -0
- package/dist/feedback/confirmActionMachine.js.map +1 -0
- package/dist/feedback/toast.js +88 -0
- package/dist/feedback/toast.js.map +1 -0
- package/dist/feedback/useConfirmAction.js +40 -0
- package/dist/feedback/useConfirmAction.js.map +1 -0
- package/dist/filepond/FileDropzone.js +256 -0
- package/dist/filepond/FileDropzone.js.map +1 -0
- package/dist/filepond/pondServer.js +48 -0
- package/dist/filepond/pondServer.js.map +1 -0
- package/dist/filepond.js +10 -0
- package/dist/filepond.js.map +1 -0
- package/dist/files.js +43 -0
- package/dist/files.js.map +1 -0
- package/dist/formatting.js +205 -0
- package/dist/formatting.js.map +1 -0
- package/dist/forms/FormCatalogField.js +12 -0
- package/dist/forms/FormCatalogField.js.map +1 -0
- package/dist/forms/FormColorField.js +12 -0
- package/dist/forms/FormColorField.js.map +1 -0
- package/dist/forms/FormNumberField.js +12 -0
- package/dist/forms/FormNumberField.js.map +1 -0
- package/dist/forms/FormProblemAlert.js +15 -0
- package/dist/forms/FormProblemAlert.js.map +1 -0
- package/dist/forms/FormSelectField.js +12 -0
- package/dist/forms/FormSelectField.js.map +1 -0
- package/dist/forms/FormServerProblem.js +23 -0
- package/dist/forms/FormServerProblem.js.map +1 -0
- package/dist/forms/FormTextField.js +12 -0
- package/dist/forms/FormTextField.js.map +1 -0
- package/dist/forms/FormWizard.js +63 -0
- package/dist/forms/FormWizard.js.map +1 -0
- package/dist/forms/SubmitButton.js +14 -0
- package/dist/forms/SubmitButton.js.map +1 -0
- package/dist/forms/applyServerProblem.js +15 -0
- package/dist/forms/applyServerProblem.js.map +1 -0
- package/dist/forms/auth/ChangePasswordForm.js +47 -0
- package/dist/forms/auth/ChangePasswordForm.js.map +1 -0
- package/dist/forms/auth/ForgotPasswordForm.js +50 -0
- package/dist/forms/auth/ForgotPasswordForm.js.map +1 -0
- package/dist/forms/auth/SignInForm.js +48 -0
- package/dist/forms/auth/SignInForm.js.map +1 -0
- package/dist/forms/security/SecondStepForm.js +122 -0
- package/dist/forms/security/SecondStepForm.js.map +1 -0
- package/dist/forms/security/TwoStepVerificationCard.js +338 -0
- package/dist/forms/security/TwoStepVerificationCard.js.map +1 -0
- package/dist/forms/security/securityRules.js +28 -0
- package/dist/forms/security/securityRules.js.map +1 -0
- package/dist/forms/serverProblemFields.js +25 -0
- package/dist/forms/serverProblemFields.js.map +1 -0
- package/dist/forms/useFormikField.js +16 -0
- package/dist/forms/useFormikField.js.map +1 -0
- package/dist/forms/validation.js +55 -0
- package/dist/forms/validation.js.map +1 -0
- package/dist/forms/validationMessages.js +16 -0
- package/dist/forms/validationMessages.js.map +1 -0
- package/dist/forms.js +57 -0
- package/dist/forms.js.map +1 -0
- package/dist/hookForm/FormCatalogField.js +12 -0
- package/dist/hookForm/FormCatalogField.js.map +1 -0
- package/dist/hookForm/FormColorField.js +12 -0
- package/dist/hookForm/FormColorField.js.map +1 -0
- package/dist/hookForm/FormNumberField.js +12 -0
- package/dist/hookForm/FormNumberField.js.map +1 -0
- package/dist/hookForm/FormProblemAlert.js +17 -0
- package/dist/hookForm/FormProblemAlert.js.map +1 -0
- package/dist/hookForm/FormSelectField.js +12 -0
- package/dist/hookForm/FormSelectField.js.map +1 -0
- package/dist/hookForm/FormTextField.js +12 -0
- package/dist/hookForm/FormTextField.js.map +1 -0
- package/dist/hookForm/FormWizard.js +59 -0
- package/dist/hookForm/FormWizard.js.map +1 -0
- package/dist/hookForm/SubmitButton.js +15 -0
- package/dist/hookForm/SubmitButton.js.map +1 -0
- package/dist/hookForm/applyServerProblem.js +21 -0
- package/dist/hookForm/applyServerProblem.js.map +1 -0
- package/dist/hookForm/useHookFormField.js +19 -0
- package/dist/hookForm/useHookFormField.js.map +1 -0
- package/dist/i18next.js +5 -0
- package/dist/i18next.js.map +1 -0
- package/dist/identifiers.js +8 -0
- package/dist/identifiers.js.map +1 -0
- package/dist/inbox/InboxLayout.js +104 -0
- package/dist/inbox/InboxLayout.js.map +1 -0
- package/dist/inbox/MessageList.js +114 -0
- package/dist/inbox/MessageList.js.map +1 -0
- package/dist/inbox/MessageView.js +104 -0
- package/dist/inbox/MessageView.js.map +1 -0
- package/dist/inbox/inboxDates.js +9 -0
- package/dist/inbox/inboxDates.js.map +1 -0
- package/dist/index.js +407 -0
- package/dist/index.js.map +1 -0
- package/dist/inputs/CatalogInput.js +66 -0
- package/dist/inputs/CatalogInput.js.map +1 -0
- package/dist/inputs/ColorInput.js +109 -0
- package/dist/inputs/ColorInput.js.map +1 -0
- package/dist/inputs/FieldFrame.js +20 -0
- package/dist/inputs/FieldFrame.js.map +1 -0
- package/dist/inputs/FormSection.js +105 -0
- package/dist/inputs/FormSection.js.map +1 -0
- package/dist/inputs/NumberInput.js +70 -0
- package/dist/inputs/NumberInput.js.map +1 -0
- package/dist/inputs/SelectInput.js +84 -0
- package/dist/inputs/SelectInput.js.map +1 -0
- package/dist/inputs/TextInput.js +101 -0
- package/dist/inputs/TextInput.js.map +1 -0
- package/dist/inputs/WizardLayout.js +54 -0
- package/dist/inputs/WizardLayout.js.map +1 -0
- package/dist/inputs/colorContrast.js +46 -0
- package/dist/inputs/colorContrast.js.map +1 -0
- package/dist/inputs/formLayoutContext.js +9 -0
- package/dist/inputs/formLayoutContext.js.map +1 -0
- package/dist/inputs/numberText.js +48 -0
- package/dist/inputs/numberText.js.map +1 -0
- package/dist/kanban/KanbanBoard.js +338 -0
- package/dist/kanban/KanbanBoard.js.map +1 -0
- package/dist/kanban/kanbanCards.js +19 -0
- package/dist/kanban/kanbanCards.js.map +1 -0
- package/dist/kanban/kanbanMoves.js +29 -0
- package/dist/kanban/kanbanMoves.js.map +1 -0
- package/dist/kanban.js +15 -0
- package/dist/kanban.js.map +1 -0
- package/dist/laravel/csrfRetry.js +18 -0
- package/dist/laravel/csrfRetry.js.map +1 -0
- package/dist/laravel.js +6 -0
- package/dist/laravel.js.map +1 -0
- package/dist/lastListUrl.js +35 -0
- package/dist/lastListUrl.js.map +1 -0
- package/dist/locales/en.js +787 -0
- package/dist/locales/en.js.map +1 -0
- package/dist/locales/es.js +787 -0
- package/dist/locales/es.js.map +1 -0
- package/dist/maps/MapView.js +116 -0
- package/dist/maps/MapView.js.map +1 -0
- package/dist/maps/mapMarkers.js +19 -0
- package/dist/maps/mapMarkers.js.map +1 -0
- package/dist/maps.js +10 -0
- package/dist/maps.js.map +1 -0
- package/dist/money/money.js +380 -0
- package/dist/money/money.js.map +1 -0
- package/dist/money.js +6 -0
- package/dist/money.js.map +1 -0
- package/dist/navigation/appMenu.js +93 -0
- package/dist/navigation/appMenu.js.map +1 -0
- package/dist/navigation/useMenuBadges.js +45 -0
- package/dist/navigation/useMenuBadges.js.map +1 -0
- package/dist/navigation.js +30 -0
- package/dist/navigation.js.map +1 -0
- package/dist/navigationTrail.js +82 -0
- package/dist/navigationTrail.js.map +1 -0
- package/dist/next.js +5 -0
- package/dist/next.js.map +1 -0
- package/dist/observability/buildWatch.js +19 -0
- package/dist/observability/buildWatch.js.map +1 -0
- package/dist/observability/logger.js +43 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/publishedBuild.js +39 -0
- package/dist/observability/publishedBuild.js.map +1 -0
- package/dist/observability/usePublishedBuildWatch.js +77 -0
- package/dist/observability/usePublishedBuildWatch.js.map +1 -0
- package/dist/passkeys.js +7 -0
- package/dist/passkeys.js.map +1 -0
- package/dist/periodRanges.js +33 -0
- package/dist/periodRanges.js.map +1 -0
- package/dist/problems.js +51 -0
- package/dist/problems.js.map +1 -0
- package/dist/pwa/InstallAppSetting.js +34 -0
- package/dist/pwa/InstallAppSetting.js.map +1 -0
- package/dist/pwa/InstallInstructionsDialog.js +35 -0
- package/dist/pwa/InstallInstructionsDialog.js.map +1 -0
- package/dist/pwa/InstallPromptBanner.js +70 -0
- package/dist/pwa/InstallPromptBanner.js.map +1 -0
- package/dist/pwa/installInstructions.js +60 -0
- package/dist/pwa/installInstructions.js.map +1 -0
- package/dist/pwa/useInstallPrompt.js +71 -0
- package/dist/pwa/useInstallPrompt.js.map +1 -0
- package/dist/react-hook-form.js +32 -0
- package/dist/react-hook-form.js.map +1 -0
- package/dist/react-router.js +10 -0
- package/dist/react-router.js.map +1 -0
- package/dist/security/ActivityLog.js +80 -0
- package/dist/security/ActivityLog.js.map +1 -0
- package/dist/security/RecoveryCodesDialog.js +85 -0
- package/dist/security/RecoveryCodesDialog.js.map +1 -0
- package/dist/security/SessionsCard.js +83 -0
- package/dist/security/SessionsCard.js.map +1 -0
- package/dist/security/passkeys.js +39 -0
- package/dist/security/passkeys.js.map +1 -0
- package/dist/table.js +37 -0
- package/dist/table.js.map +1 -0
- package/dist/theme/androidDevice.js +16 -0
- package/dist/theme/androidDevice.js.map +1 -0
- package/dist/theme/appleTracking.js +34 -0
- package/dist/theme/appleTracking.js.map +1 -0
- package/dist/theme/components/MuiAppBar.js +27 -0
- package/dist/theme/components/MuiAppBar.js.map +1 -0
- package/dist/theme/components/MuiBackdrop.js +13 -0
- package/dist/theme/components/MuiBackdrop.js.map +1 -0
- package/dist/theme/components/MuiButton.js +25 -0
- package/dist/theme/components/MuiButton.js.map +1 -0
- package/dist/theme/components/MuiButtonBase.js +16 -0
- package/dist/theme/components/MuiButtonBase.js.map +1 -0
- package/dist/theme/components/MuiChip.js +30 -0
- package/dist/theme/components/MuiChip.js.map +1 -0
- package/dist/theme/components/MuiDataGrid.js +30 -0
- package/dist/theme/components/MuiDataGrid.js.map +1 -0
- package/dist/theme/components/MuiDialog.js +13 -0
- package/dist/theme/components/MuiDialog.js.map +1 -0
- package/dist/theme/components/MuiDrawer.js +18 -0
- package/dist/theme/components/MuiDrawer.js.map +1 -0
- package/dist/theme/components/MuiMenuItem.js +17 -0
- package/dist/theme/components/MuiMenuItem.js.map +1 -0
- package/dist/theme/components/MuiTypography.js +22 -0
- package/dist/theme/components/MuiTypography.js.map +1 -0
- package/dist/theme/components/glassComponents.js +885 -0
- package/dist/theme/components/glassComponents.js.map +1 -0
- package/dist/theme/components/minimalComponents.js +146 -0
- package/dist/theme/components/minimalComponents.js.map +1 -0
- package/dist/theme/components/paletteOf.js +7 -0
- package/dist/theme/components/paletteOf.js.map +1 -0
- package/dist/theme/createToolkitTheme.js +100 -0
- package/dist/theme/createToolkitTheme.js.map +1 -0
- package/dist/theme/glassSurface.js +328 -0
- package/dist/theme/glassSurface.js.map +1 -0
- package/dist/theme/glassToasterStyles.js +50 -0
- package/dist/theme/glassToasterStyles.js.map +1 -0
- package/dist/theme/mergeComponents.js +42 -0
- package/dist/theme/mergeComponents.js.map +1 -0
- package/dist/theme/stackcraftPalette.js +59 -0
- package/dist/theme/stackcraftPalette.js.map +1 -0
- package/dist/theme/toolkitComponents.js +28 -0
- package/dist/theme/toolkitComponents.js.map +1 -0
- package/dist/timeline.js +8 -0
- package/dist/timeline.js.map +1 -0
- package/dist/toolkit/ComponentTexts.js +13 -0
- package/dist/toolkit/ComponentTexts.js.map +1 -0
- package/dist/toolkit/ToolkitProvider.js +57 -0
- package/dist/toolkit/ToolkitProvider.js.map +1 -0
- package/dist/toolkit/browserNavigation.js +33 -0
- package/dist/toolkit/browserNavigation.js.map +1 -0
- package/dist/toolkit/componentTextsContext.js +15 -0
- package/dist/toolkit/componentTextsContext.js.map +1 -0
- package/dist/toolkit/hashNavigation.js +40 -0
- package/dist/toolkit/hashNavigation.js.map +1 -0
- package/dist/toolkit/navigationPaths.js +49 -0
- package/dist/toolkit/navigationPaths.js.map +1 -0
- package/dist/toolkit/toolkitContext.js +19 -0
- package/dist/toolkit/toolkitContext.js.map +1 -0
- package/dist/toolkit/toolkitSettings.js +107 -0
- package/dist/toolkit/toolkitSettings.js.map +1 -0
- package/dist/toolkit/useFormatters.js +12 -0
- package/dist/toolkit/useFormatters.js.map +1 -0
- package/dist/toolkit/useToolkitTranslation.js +22 -0
- package/dist/toolkit/useToolkitTranslation.js.map +1 -0
- package/dist/types/DataTable/AuditTrailDialog.d.ts +32 -0
- package/dist/types/DataTable/AuditTrailTable.d.ts +30 -0
- package/dist/types/DataTable/ColumnFilters/HeaderFilterPopover.d.ts +8 -0
- package/dist/types/DataTable/ColumnFilters/MultiSelectColumnFilter.d.ts +16 -0
- package/dist/types/DataTable/ColumnFilters/SortableFilterHeader.d.ts +26 -0
- package/dist/types/DataTable/ColumnFilters/TextColumnFilter.d.ts +8 -0
- package/dist/types/DataTable/ColumnFilters/index.d.ts +4 -0
- package/dist/types/DataTable/EmptyState.d.ts +13 -0
- package/dist/types/DataTable/FilterChips.d.ts +17 -0
- package/dist/types/DataTable/GoToPage.d.ts +13 -0
- package/dist/types/DataTable/SelectionBar.d.ts +32 -0
- package/dist/types/DataTable/ServerTable.d.ts +171 -0
- package/dist/types/DataTable/buildChipConfig.d.ts +22 -0
- package/dist/types/DataTable/columns.d.ts +93 -0
- package/dist/types/DataTable/filterContext.d.ts +13 -0
- package/dist/types/DataTable/index.d.ts +13 -0
- package/dist/types/DataTable/rowSelection.d.ts +113 -0
- package/dist/types/DataTable/serverTableParams.d.ts +16 -0
- package/dist/types/DataTable/tableMachine.d.ts +41 -0
- package/dist/types/DataTable/useDebouncedFilter.d.ts +8 -0
- package/dist/types/DataTable/useTableState.d.ts +93 -0
- package/dist/types/access/Can.d.ts +11 -0
- package/dist/types/access/PermissionMatrix.d.ts +23 -0
- package/dist/types/access/RequireAccess.d.ts +11 -0
- package/dist/types/access/accessRules.d.ts +24 -0
- package/dist/types/access/permissionGroups.d.ts +56 -0
- package/dist/types/access/useCan.d.ts +11 -0
- package/dist/types/account/AccountProvider.d.ts +27 -0
- package/dist/types/account/AccountSecuritySection.d.ts +9 -0
- package/dist/types/account/DemoTotpCodeButton.d.ts +6 -0
- package/dist/types/account/ForgotPasswordScreen.d.ts +17 -0
- package/dist/types/account/ProfileScreen.d.ts +43 -0
- package/dist/types/account/ResetPasswordScreen.d.ts +21 -0
- package/dist/types/account/SignInScreen.d.ts +27 -0
- package/dist/types/account/accountConnector.d.ts +268 -0
- package/dist/types/account/demo/createDemoAccountConnector.d.ts +30 -0
- package/dist/types/account/demo/totp.d.ts +45 -0
- package/dist/types/account/restAccountConnector.d.ts +49 -0
- package/dist/types/account-demo.d.ts +2 -0
- package/dist/types/account.d.ts +16 -0
- package/dist/types/adapters/i18next.d.ts +11 -0
- package/dist/types/adapters/nextNavigation.d.ts +33 -0
- package/dist/types/adapters/reactRouter.d.ts +6 -0
- package/dist/types/adapters/reactRouterRoutes.d.ts +42 -0
- package/dist/types/api/ApiError.d.ts +42 -0
- package/dist/types/api/createApiClient.d.ts +174 -0
- package/dist/types/api/staleChunks.d.ts +15 -0
- package/dist/types/appShell/AccountMenu.d.ts +28 -0
- package/dist/types/appShell/AppLayout.d.ts +76 -0
- package/dist/types/appShell/AppearanceSettings.d.ts +41 -0
- package/dist/types/appShell/AuthLayout.d.ts +21 -0
- package/dist/types/appShell/BarActionButton.d.ts +15 -0
- package/dist/types/appShell/BarActions.d.ts +23 -0
- package/dist/types/appShell/BarCapsule.d.ts +20 -0
- package/dist/types/appShell/BarSearch.d.ts +24 -0
- package/dist/types/appShell/HeaderTools.d.ts +27 -0
- package/dist/types/appShell/MobileTabBar.d.ts +20 -0
- package/dist/types/appShell/SettingsMenu.d.ts +13 -0
- package/dist/types/appShell/SideMenu.d.ts +31 -0
- package/dist/types/appShell/SideMenuEntry.d.ts +17 -0
- package/dist/types/appShell/SubmenuActionsMenu.d.ts +24 -0
- package/dist/types/appShell/TabBarEditor.d.ts +13 -0
- package/dist/types/appShell/TopMenu.d.ts +7 -0
- package/dist/types/appShell/appMenuContext.d.ts +9 -0
- package/dist/types/appShell/barActionsSlot.d.ts +35 -0
- package/dist/types/appShell/barMenuPlacement.d.ts +9 -0
- package/dist/types/appShell/menuItemText.d.ts +55 -0
- package/dist/types/appShell/pageTitle.d.ts +26 -0
- package/dist/types/appShell/shellSizes.d.ts +46 -0
- package/dist/types/appShell/tabBarRule.d.ts +5 -0
- package/dist/types/appShell/tabBarScroll.d.ts +26 -0
- package/dist/types/appShell/useDrawerCollapsed.d.ts +8 -0
- package/dist/types/appShell/useFittingActionCount.d.ts +7 -0
- package/dist/types/appShell/usePinnedMobileTabs.d.ts +7 -0
- package/dist/types/appShell/useTabBarMinimized.d.ts +8 -0
- package/dist/types/auth/PasswordChecklist.d.ts +13 -0
- package/dist/types/auth/passwordRules.d.ts +34 -0
- package/dist/types/calendar/EventCalendar.d.ts +63 -0
- package/dist/types/calendar/EventDetails.d.ts +36 -0
- package/dist/types/calendar/calendarEvents.d.ts +27 -0
- package/dist/types/calendar.d.ts +3 -0
- package/dist/types/charts.d.ts +6 -0
- package/dist/types/date-pickers.d.ts +2 -0
- package/dist/types/datePickers/DateInput.d.ts +41 -0
- package/dist/types/datePickers/FormDateField.d.ts +7 -0
- package/dist/types/dates.d.ts +18 -0
- package/dist/types/dictionaries/dictionaries.d.ts +54 -0
- package/dist/types/downloads/DownloadManager.d.ts +7 -0
- package/dist/types/downloads/downloadQueue.d.ts +50 -0
- package/dist/types/downloads/downloadsMachine.d.ts +10 -0
- package/dist/types/downloads/fileTypes.d.ts +39 -0
- package/dist/types/downloads/index.d.ts +4 -0
- package/dist/types/excel/reportWorkbook.d.ts +157 -0
- package/dist/types/excel.d.ts +1 -0
- package/dist/types/feedback/ConfirmDialog.d.ts +31 -0
- package/dist/types/feedback/ModalWaiting.d.ts +13 -0
- package/dist/types/feedback/NewBuildNotice.d.ts +20 -0
- package/dist/types/feedback/StaleBuildBoundary.d.ts +21 -0
- package/dist/types/feedback/Toaster.d.ts +1 -0
- package/dist/types/feedback/confirmActionMachine.d.ts +19 -0
- package/dist/types/feedback/index.d.ts +8 -0
- package/dist/types/feedback/toast.d.ts +100 -0
- package/dist/types/feedback/useConfirmAction.d.ts +33 -0
- package/dist/types/filepond/FileDropzone.d.ts +61 -0
- package/dist/types/filepond/pondServer.d.ts +17 -0
- package/dist/types/filepond.d.ts +3 -0
- package/dist/types/files.d.ts +29 -0
- package/dist/types/formatting.d.ts +61 -0
- package/dist/types/forms/FormCatalogField.d.ts +6 -0
- package/dist/types/forms/FormColorField.d.ts +6 -0
- package/dist/types/forms/FormNumberField.d.ts +6 -0
- package/dist/types/forms/FormProblemAlert.d.ts +6 -0
- package/dist/types/forms/FormSelectField.d.ts +6 -0
- package/dist/types/forms/FormServerProblem.d.ts +8 -0
- package/dist/types/forms/FormTextField.d.ts +6 -0
- package/dist/types/forms/FormWizard.d.ts +22 -0
- package/dist/types/forms/SubmitButton.d.ts +9 -0
- package/dist/types/forms/applyServerProblem.d.ts +9 -0
- package/dist/types/forms/auth/ChangePasswordForm.d.ts +17 -0
- package/dist/types/forms/auth/ForgotPasswordForm.d.ts +14 -0
- package/dist/types/forms/auth/SignInForm.d.ts +20 -0
- package/dist/types/forms/index.d.ts +19 -0
- package/dist/types/forms/security/SecondStepForm.d.ts +30 -0
- package/dist/types/forms/security/TwoStepVerificationCard.d.ts +83 -0
- package/dist/types/forms/security/securityRules.d.ts +24 -0
- package/dist/types/forms/serverProblemFields.d.ts +19 -0
- package/dist/types/forms/useFormikField.d.ts +11 -0
- package/dist/types/forms/validation.d.ts +251 -0
- package/dist/types/forms/validationMessages.d.ts +12 -0
- package/dist/types/forms.d.ts +2 -0
- package/dist/types/hookForm/FormCatalogField.d.ts +8 -0
- package/dist/types/hookForm/FormColorField.d.ts +8 -0
- package/dist/types/hookForm/FormNumberField.d.ts +8 -0
- package/dist/types/hookForm/FormProblemAlert.d.ts +7 -0
- package/dist/types/hookForm/FormSelectField.d.ts +8 -0
- package/dist/types/hookForm/FormTextField.d.ts +8 -0
- package/dist/types/hookForm/FormWizard.d.ts +22 -0
- package/dist/types/hookForm/SubmitButton.d.ts +21 -0
- package/dist/types/hookForm/applyServerProblem.d.ts +10 -0
- package/dist/types/hookForm/useHookFormField.d.ts +13 -0
- package/dist/types/i18next.d.ts +1 -0
- package/dist/types/identifiers.d.ts +2 -0
- package/dist/types/inbox/InboxLayout.d.ts +38 -0
- package/dist/types/inbox/MessageList.d.ts +52 -0
- package/dist/types/inbox/MessageView.d.ts +55 -0
- package/dist/types/inbox/inboxDates.d.ts +11 -0
- package/dist/types/index.d.ts +91 -0
- package/dist/types/inputs/CatalogInput.d.ts +45 -0
- package/dist/types/inputs/ColorInput.d.ts +30 -0
- package/dist/types/inputs/FieldFrame.d.ts +14 -0
- package/dist/types/inputs/FormSection.d.ts +29 -0
- package/dist/types/inputs/NumberInput.d.ts +38 -0
- package/dist/types/inputs/SelectInput.d.ts +38 -0
- package/dist/types/inputs/TextInput.d.ts +62 -0
- package/dist/types/inputs/WizardLayout.d.ts +34 -0
- package/dist/types/inputs/colorContrast.d.ts +18 -0
- package/dist/types/inputs/formLayoutContext.d.ts +3 -0
- package/dist/types/inputs/numberText.d.ts +25 -0
- package/dist/types/kanban/KanbanBoard.d.ts +88 -0
- package/dist/types/kanban/kanbanCards.d.ts +22 -0
- package/dist/types/kanban/kanbanMoves.d.ts +38 -0
- package/dist/types/kanban.d.ts +3 -0
- package/dist/types/laravel/csrfRetry.d.ts +21 -0
- package/dist/types/laravel.d.ts +1 -0
- package/dist/types/lastListUrl.d.ts +20 -0
- package/dist/types/locales/en.d.ts +788 -0
- package/dist/types/locales/es.d.ts +788 -0
- package/dist/types/maps/MapView.d.ts +41 -0
- package/dist/types/maps/mapMarkers.d.ts +23 -0
- package/dist/types/maps.d.ts +2 -0
- package/dist/types/money/money.d.ts +203 -0
- package/dist/types/money.d.ts +1 -0
- package/dist/types/navigation/appMenu.d.ts +92 -0
- package/dist/types/navigation/useMenuBadges.d.ts +16 -0
- package/dist/types/navigation.d.ts +22 -0
- package/dist/types/navigationTrail.d.ts +49 -0
- package/dist/types/next.d.ts +1 -0
- package/dist/types/observability/buildWatch.d.ts +28 -0
- package/dist/types/observability/logger.d.ts +19 -0
- package/dist/types/observability/publishedBuild.d.ts +35 -0
- package/dist/types/observability/usePublishedBuildWatch.d.ts +18 -0
- package/dist/types/passkeys.d.ts +1 -0
- package/dist/types/periodRanges.d.ts +32 -0
- package/dist/types/problems.d.ts +31 -0
- package/dist/types/pwa/InstallAppSetting.d.ts +7 -0
- package/dist/types/pwa/InstallInstructionsDialog.d.ts +20 -0
- package/dist/types/pwa/InstallPromptBanner.d.ts +16 -0
- package/dist/types/pwa/installInstructions.d.ts +52 -0
- package/dist/types/pwa/useInstallPrompt.d.ts +13 -0
- package/dist/types/react-hook-form.d.ts +12 -0
- package/dist/types/react-router.d.ts +2 -0
- package/dist/types/security/ActivityLog.d.ts +33 -0
- package/dist/types/security/RecoveryCodesDialog.d.ts +16 -0
- package/dist/types/security/SessionsCard.d.ts +24 -0
- package/dist/types/security/passkeys.d.ts +18 -0
- package/dist/types/table.d.ts +3 -0
- package/dist/types/theme/androidDevice.d.ts +11 -0
- package/dist/types/theme/appleTracking.d.ts +17 -0
- package/dist/types/theme/components/MuiAppBar.d.ts +13 -0
- package/dist/types/theme/components/MuiBackdrop.d.ts +11 -0
- package/dist/types/theme/components/MuiButton.d.ts +27 -0
- package/dist/types/theme/components/MuiButtonBase.d.ts +14 -0
- package/dist/types/theme/components/MuiChip.d.ts +29 -0
- package/dist/types/theme/components/MuiDataGrid.d.ts +45 -0
- package/dist/types/theme/components/MuiDialog.d.ts +9 -0
- package/dist/types/theme/components/MuiDrawer.d.ts +13 -0
- package/dist/types/theme/components/MuiMenuItem.d.ts +17 -0
- package/dist/types/theme/components/MuiTypography.d.ts +20 -0
- package/dist/types/theme/components/glassComponents.d.ts +8 -0
- package/dist/types/theme/components/minimalComponents.d.ts +22 -0
- package/dist/types/theme/components/paletteOf.d.ts +5 -0
- package/dist/types/theme/createToolkitTheme.d.ts +48 -0
- package/dist/types/theme/glassSurface.d.ts +247 -0
- package/dist/types/theme/glassToasterStyles.d.ts +7 -0
- package/dist/types/theme/mergeComponents.d.ts +15 -0
- package/dist/types/theme/stackcraftPalette.d.ts +142 -0
- package/dist/types/theme/toolkitComponents.d.ts +4 -0
- package/dist/types/timeline.d.ts +2 -0
- package/dist/types/toolkit/ComponentTexts.d.ts +11 -0
- package/dist/types/toolkit/ToolkitProvider.d.ts +47 -0
- package/dist/types/toolkit/browserNavigation.d.ts +27 -0
- package/dist/types/toolkit/componentTextsContext.d.ts +20 -0
- package/dist/types/toolkit/hashNavigation.d.ts +12 -0
- package/dist/types/toolkit/navigationPaths.d.ts +43 -0
- package/dist/types/toolkit/toolkitContext.d.ts +28 -0
- package/dist/types/toolkit/toolkitSettings.d.ts +113 -0
- package/dist/types/toolkit/useFormatters.d.ts +6 -0
- package/dist/types/toolkit/useToolkitTranslation.d.ts +11 -0
- package/dist/types/ui/actions/ActionsMenu.d.ts +20 -0
- package/dist/types/ui/actions/CopyButton.d.ts +15 -0
- package/dist/types/ui/actions/DownloadMenu.d.ts +55 -0
- package/dist/types/ui/actions/SecretField.d.ts +17 -0
- package/dist/types/ui/actions/SelectionActions.d.ts +39 -0
- package/dist/types/ui/filters/DateRangeFilter.d.ts +18 -0
- package/dist/types/ui/filters/PeriodRangeSelector.d.ts +28 -0
- package/dist/types/ui/filters/QuickFilters.d.ts +23 -0
- package/dist/types/ui/filters/SegmentedControl.d.ts +44 -0
- package/dist/types/ui/index.d.ts +33 -0
- package/dist/types/ui/labels/DictionaryText.d.ts +7 -0
- package/dist/types/ui/labels/StatusChip.d.ts +21 -0
- package/dist/types/ui/labels/Tag.d.ts +19 -0
- package/dist/types/ui/labels/tagOf.d.ts +13 -0
- package/dist/types/ui/layout/CollapsibleSection.d.ts +18 -0
- package/dist/types/ui/layout/ContentDialog.d.ts +15 -0
- package/dist/types/ui/layout/DefinitionList.d.ts +15 -0
- package/dist/types/ui/layout/DetailHeader.d.ts +15 -0
- package/dist/types/ui/layout/ErrorPage.d.ts +35 -0
- package/dist/types/ui/layout/FullPageLoader.d.ts +7 -0
- package/dist/types/ui/layout/GlassLensFilter.d.ts +1 -0
- package/dist/types/ui/layout/GlassPanel.d.ts +11 -0
- package/dist/types/ui/layout/PageHeader.d.ts +15 -0
- package/dist/types/ui/layout/PageHeading.d.ts +20 -0
- package/dist/types/ui/layout/ProfileHeader.d.ts +17 -0
- package/dist/types/ui/layout/ScrollableRow.d.ts +33 -0
- package/dist/types/ui/layout/SectionCard.d.ts +11 -0
- package/dist/types/ui/layout/appBarHeight.d.ts +13 -0
- package/dist/types/ui/metrics/BarList.d.ts +25 -0
- package/dist/types/ui/metrics/CalendarHeatmap.d.ts +34 -0
- package/dist/types/ui/metrics/ChartTooltip.d.ts +11 -0
- package/dist/types/ui/metrics/ColumnChart.d.ts +47 -0
- package/dist/types/ui/metrics/LineChart.d.ts +41 -0
- package/dist/types/ui/metrics/MetricCard.d.ts +39 -0
- package/dist/types/ui/metrics/TableToggle.d.ts +14 -0
- package/dist/types/ui/metrics/barListLabels.d.ts +17 -0
- package/dist/types/ui/metrics/chartParts.d.ts +112 -0
- package/dist/types/ui/metrics/heatmapScale.d.ts +45 -0
- package/dist/types/ui/navigation/BackButton.d.ts +13 -0
- package/dist/types/ui/navigation/ColorSchemeToggle.d.ts +13 -0
- package/dist/types/ui/navigation/DocumentTitle.d.ts +6 -0
- package/dist/types/ui/navigation/FontSizeToggle.d.ts +11 -0
- package/dist/types/ui/navigation/LanguageToggle.d.ts +13 -0
- package/dist/types/ui/navigation/PageBreadcrumbs.d.ts +12 -0
- package/dist/types/ui/navigation/colorMode.d.ts +18 -0
- package/dist/types/ui/navigation/fontSizeLevels.d.ts +25 -0
- package/dist/types/ui/navigation/useFontSize.d.ts +10 -0
- package/dist/types/ui/timeline/GroupedTimeline.d.ts +41 -0
- package/dist/types/ui/timeline/timelineDot.d.ts +19 -0
- package/dist/types/upload/FileDropzone.d.ts +36 -0
- package/dist/types/upload/fileRules.d.ts +51 -0
- package/dist/types/upload/uploadMachine.d.ts +23 -0
- package/dist/types/upload/uploadWithProgress.d.ts +16 -0
- package/dist/ui/actions/ActionsMenu.js +51 -0
- package/dist/ui/actions/ActionsMenu.js.map +1 -0
- package/dist/ui/actions/CopyButton.js +28 -0
- package/dist/ui/actions/CopyButton.js.map +1 -0
- package/dist/ui/actions/DownloadMenu.js +162 -0
- package/dist/ui/actions/DownloadMenu.js.map +1 -0
- package/dist/ui/actions/SecretField.js +61 -0
- package/dist/ui/actions/SecretField.js.map +1 -0
- package/dist/ui/actions/SelectionActions.js +142 -0
- package/dist/ui/actions/SelectionActions.js.map +1 -0
- package/dist/ui/filters/DateRangeFilter.js +87 -0
- package/dist/ui/filters/DateRangeFilter.js.map +1 -0
- package/dist/ui/filters/PeriodRangeSelector.js +56 -0
- package/dist/ui/filters/PeriodRangeSelector.js.map +1 -0
- package/dist/ui/filters/QuickFilters.js +91 -0
- package/dist/ui/filters/QuickFilters.js.map +1 -0
- package/dist/ui/filters/SegmentedControl.js +80 -0
- package/dist/ui/filters/SegmentedControl.js.map +1 -0
- package/dist/ui/labels/DictionaryText.js +11 -0
- package/dist/ui/labels/DictionaryText.js.map +1 -0
- package/dist/ui/labels/StatusChip.js +52 -0
- package/dist/ui/labels/StatusChip.js.map +1 -0
- package/dist/ui/labels/Tag.js +26 -0
- package/dist/ui/labels/Tag.js.map +1 -0
- package/dist/ui/labels/tagOf.js +7 -0
- package/dist/ui/labels/tagOf.js.map +1 -0
- package/dist/ui/layout/CollapsibleSection.js +52 -0
- package/dist/ui/layout/CollapsibleSection.js.map +1 -0
- package/dist/ui/layout/ContentDialog.js +97 -0
- package/dist/ui/layout/ContentDialog.js.map +1 -0
- package/dist/ui/layout/DefinitionList.js +30 -0
- package/dist/ui/layout/DefinitionList.js.map +1 -0
- package/dist/ui/layout/DetailHeader.js +27 -0
- package/dist/ui/layout/DetailHeader.js.map +1 -0
- package/dist/ui/layout/ErrorPage.js +54 -0
- package/dist/ui/layout/ErrorPage.js.map +1 -0
- package/dist/ui/layout/FullPageLoader.js +13 -0
- package/dist/ui/layout/FullPageLoader.js.map +1 -0
- package/dist/ui/layout/GlassLensFilter.js +53 -0
- package/dist/ui/layout/GlassLensFilter.js.map +1 -0
- package/dist/ui/layout/GlassPanel.js +18 -0
- package/dist/ui/layout/GlassPanel.js.map +1 -0
- package/dist/ui/layout/PageHeader.js +23 -0
- package/dist/ui/layout/PageHeader.js.map +1 -0
- package/dist/ui/layout/PageHeading.js +51 -0
- package/dist/ui/layout/PageHeading.js.map +1 -0
- package/dist/ui/layout/ProfileHeader.js +64 -0
- package/dist/ui/layout/ProfileHeader.js.map +1 -0
- package/dist/ui/layout/ScrollableRow.js +156 -0
- package/dist/ui/layout/ScrollableRow.js.map +1 -0
- package/dist/ui/layout/SectionCard.js +18 -0
- package/dist/ui/layout/SectionCard.js.map +1 -0
- package/dist/ui/layout/appBarHeight.js +42 -0
- package/dist/ui/layout/appBarHeight.js.map +1 -0
- package/dist/ui/metrics/BarList.js +94 -0
- package/dist/ui/metrics/BarList.js.map +1 -0
- package/dist/ui/metrics/CalendarHeatmap.js +136 -0
- package/dist/ui/metrics/CalendarHeatmap.js.map +1 -0
- package/dist/ui/metrics/ChartTooltip.js +16 -0
- package/dist/ui/metrics/ChartTooltip.js.map +1 -0
- package/dist/ui/metrics/ColumnChart.js +106 -0
- package/dist/ui/metrics/ColumnChart.js.map +1 -0
- package/dist/ui/metrics/LineChart.js +117 -0
- package/dist/ui/metrics/LineChart.js.map +1 -0
- package/dist/ui/metrics/MetricCard.js +97 -0
- package/dist/ui/metrics/MetricCard.js.map +1 -0
- package/dist/ui/metrics/TableToggle.js +15 -0
- package/dist/ui/metrics/TableToggle.js.map +1 -0
- package/dist/ui/metrics/barListLabels.js +9 -0
- package/dist/ui/metrics/barListLabels.js.map +1 -0
- package/dist/ui/metrics/chartParts.js +93 -0
- package/dist/ui/metrics/chartParts.js.map +1 -0
- package/dist/ui/metrics/heatmapScale.js +67 -0
- package/dist/ui/metrics/heatmapScale.js.map +1 -0
- package/dist/ui/navigation/BackButton.js +28 -0
- package/dist/ui/navigation/BackButton.js.map +1 -0
- package/dist/ui/navigation/ColorSchemeToggle.js +40 -0
- package/dist/ui/navigation/ColorSchemeToggle.js.map +1 -0
- package/dist/ui/navigation/DocumentTitle.js +11 -0
- package/dist/ui/navigation/DocumentTitle.js.map +1 -0
- package/dist/ui/navigation/FontSizeToggle.js +41 -0
- package/dist/ui/navigation/FontSizeToggle.js.map +1 -0
- package/dist/ui/navigation/LanguageToggle.js +48 -0
- package/dist/ui/navigation/LanguageToggle.js.map +1 -0
- package/dist/ui/navigation/PageBreadcrumbs.js +51 -0
- package/dist/ui/navigation/PageBreadcrumbs.js.map +1 -0
- package/dist/ui/navigation/colorMode.js +13 -0
- package/dist/ui/navigation/colorMode.js.map +1 -0
- package/dist/ui/navigation/fontSizeLevels.js +24 -0
- package/dist/ui/navigation/fontSizeLevels.js.map +1 -0
- package/dist/ui/navigation/useFontSize.js +44 -0
- package/dist/ui/navigation/useFontSize.js.map +1 -0
- package/dist/ui/timeline/GroupedTimeline.js +106 -0
- package/dist/ui/timeline/GroupedTimeline.js.map +1 -0
- package/dist/ui/timeline/timelineDot.js +20 -0
- package/dist/ui/timeline/timelineDot.js.map +1 -0
- package/dist/upload/FileDropzone.js +145 -0
- package/dist/upload/FileDropzone.js.map +1 -0
- package/dist/upload/fileRules.js +62 -0
- package/dist/upload/fileRules.js.map +1 -0
- package/dist/upload/uploadMachine.js +73 -0
- package/dist/upload/uploadMachine.js.map +1 -0
- package/dist/upload/uploadWithProgress.js +45 -0
- package/dist/upload/uploadWithProgress.js.map +1 -0
- package/package.json +311 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusChip.js","sources":["../../../src/ui/labels/StatusChip.jsx"],"sourcesContent":["// Estatus pintado desde un diccionario (dictionaries/dictionaries.js): etiqueta, tooltip y color salen del diccionario,\n// nunca del componente que lo usa. Un valor que no está en el diccionario se pinta con su código crudo.\n//\n// Dos formas:\n// - variant=\"dot\" (por defecto): punto de color + texto, sin fondo. Para la columna de estado de una tabla.\n// - variant=\"chip\": Chip de MUI con contorno, para formatos, hallazgos o encabezados.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useToolkitTranslation} from '@/toolkit/useToolkitTranslation.js';\nimport Box from '@mui/material/Box';\nimport Chip from '@mui/material/Chip';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport {labelOf, lookup, shortLabelOf} from '@/dictionaries/dictionaries.js';\n\n// color del diccionario → color de texto del punto (default no existe en la paleta)\nconst DOT_COLOR_BY_TONE = {\n success: 'success.main',\n warning: 'warning.main',\n error: 'error.main',\n info: 'info.main',\n default: 'text.disabled',\n};\n\n/**\n * @param {object} props\n * @param {Record<string, object>} props.dictionary p. ej. BATCH_STATUS\n * @param {string|null|undefined} props.value código del API\n * @param {'dot'|'chip'} [props.variant]\n * @param {boolean} [props.short] pinta la palabra corta de la entrada (shortLabelKey), para una columna angosta; el\n * nombre completo queda en el tooltip, antes de su explicación\n * @param {string} [props.suffix] texto que va después de la etiqueta con \" · \" (p. ej. un conteo ya formateado)\n * @param {import('react').ReactNode} [props.tooltip] SUSTITUYE al tooltip del diccionario; úsalo cuando el renglón tiene algo más\n * que decir. OJO: no envuelvas este componente en otro Tooltip, porque el suyo sigue ahí y se ven los dos encimados\n * @param {object} [props.sx] ajustes de estilo del Chip (solo variant=\"chip\")\n */\nexport default function StatusChip({dictionary, value, variant = 'dot', short = false, suffix, tooltip: customTooltip, sx}) {\n const {t} = useToolkitTranslation('dictionaries');\n const dictionaryEntry = lookup(dictionary, value);\n const fullLabel = labelOf(dictionaryEntry, t);\n const entryLabel = short ? shortLabelOf(dictionaryEntry, t) : fullLabel;\n const label = suffix ? `${entryLabel} · ${suffix}` : entryLabel;\n // el de quien lo usa gana: si pasa uno, el del diccionario no se pinta y no hay dos globos\n const explanation = customTooltip ?? t(dictionaryEntry.tooltipKey, {defaultValue: ''});\n // la palabra corta deja fuera parte del nombre: el tooltip lo dice completo y, debajo, su explicación\n const tooltip = entryLabel === fullLabel ? explanation : (\n <Box component=\"span\" sx={{display: 'flex', flexDirection: 'column', gap: 0.25}}>\n <Box component=\"span\" sx={{fontWeight: 700}}>{fullLabel}</Box>\n {explanation && <Box component=\"span\">{explanation}</Box>}\n </Box>\n );\n\n const content = variant === 'chip' ? (\n <Chip size=\"small\" label={label} color={dictionaryEntry.color} variant=\"outlined\" sx={sx} />\n ) : (\n <Box component=\"span\" sx={{\n display: 'inline-flex', alignItems: 'center', gap: 0.75,\n fontSize: 13, fontWeight: 500, whiteSpace: 'nowrap',\n color: dictionaryEntry.color === 'default' ? 'text.secondary' : `${dictionaryEntry.color}.dark`,\n }}>\n {/* OJO: flexShrink 0; en una celda angosta el punto se encogía a 0 px y el estado perdía su color */}\n <Box component=\"span\" aria-hidden=\"true\" sx={{\n width: 6, height: 6, flexShrink: 0, borderRadius: '50%',\n bgcolor: DOT_COLOR_BY_TONE[dictionaryEntry.color] ?? DOT_COLOR_BY_TONE.default,\n }} />\n {/* el texto en su propio span: un nodo de texto suelto dentro de un flex se corta sin «…» */}\n <Box component=\"span\" sx={{minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis'}}>{label}</Box>\n </Box>\n );\n\n // guard clause: sin tooltip no envolvemos (un Tooltip vacío igual agrega listeners)\n if (!tooltip) {\n return content;\n }\n return <Tooltip title={tooltip}>{content}</Tooltip>;\n}\n"],"names":[],"mappings":";;;;;;;AAgBA,MAAM,oBAAoB;AAAA,EACtB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AACb;AAcA,SAAwB,WAAW,EAAC,YAAY,OAAO,UAAU,OAAO,QAAQ,OAAO,QAAQ,SAAS,eAAe,GAAA,GAAK;AACxH,QAAM,EAAC,EAAA,IAAK,sBAAsB,cAAc;AAChD,QAAM,kBAAkB,OAAO,YAAY,KAAK;AAChD,QAAM,YAAY,QAAQ,iBAAiB,CAAC;AAC5C,QAAM,aAAa,QAAQ,aAAa,iBAAiB,CAAC,IAAI;AAC9D,QAAM,QAAQ,SAAS,GAAG,UAAU,MAAM,MAAM,KAAK;AAErD,QAAM,cAAc,iBAAiB,EAAE,gBAAgB,YAAY,EAAC,cAAc,IAAG;AAErF,QAAM,UAAU,eAAe,YAAY,cACvC,qBAAC,OAAI,WAAU,QAAO,IAAI,EAAC,SAAS,QAAQ,eAAe,UAAU,KAAK,QACtE,UAAA;AAAA,IAAA,oBAAC,KAAA,EAAI,WAAU,QAAO,IAAI,EAAC,YAAY,IAAA,GAAO,UAAA,UAAA,CAAU;AAAA,IACvD,eAAe,oBAAC,KAAA,EAAI,WAAU,QAAQ,UAAA,YAAA,CAAY;AAAA,EAAA,GACvD;AAGJ,QAAM,UAAU,YAAY,6BACvB,MAAA,EAAK,MAAK,SAAQ,OAAc,OAAO,gBAAgB,OAAO,SAAQ,YAAW,IAAQ,yBAEzF,KAAA,EAAI,WAAU,QAAO,IAAI;AAAA,IACtB,SAAS;AAAA,IAAe,YAAY;AAAA,IAAU,KAAK;AAAA,IACnD,UAAU;AAAA,IAAI,YAAY;AAAA,IAAK,YAAY;AAAA,IAC3C,OAAO,gBAAgB,UAAU,YAAY,mBAAmB,GAAG,gBAAgB,KAAK;AAAA,EAAA,GAGxF,UAAA;AAAA,IAAA,oBAAC,KAAA,EAAI,WAAU,QAAO,eAAY,QAAO,IAAI;AAAA,MACzC,OAAO;AAAA,MAAG,QAAQ;AAAA,MAAG,YAAY;AAAA,MAAG,cAAc;AAAA,MAClD,SAAS,kBAAkB,gBAAgB,KAAK,KAAK,kBAAkB;AAAA,IAAA,GACxE;AAAA,IAEH,oBAAC,KAAA,EAAI,WAAU,QAAO,IAAI,EAAC,UAAU,GAAG,UAAU,UAAU,cAAc,WAAA,GAAc,UAAA,MAAA,CAAM;AAAA,EAAA,GAClG;AAIJ,MAAI,CAAC,SAAS;AACV,WAAO;AAAA,EACX;AACA,SAAO,oBAAC,SAAA,EAAQ,OAAO,SAAU,UAAA,SAAQ;AAC7C;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import Chip from "@mui/material/Chip";
|
|
4
|
+
import Tooltip from "@mui/material/Tooltip";
|
|
5
|
+
function Tag({ label, tooltip, color = "default", variant = "outlined", size = "small", onDelete, sx, ...chipProps }) {
|
|
6
|
+
const chip = /* @__PURE__ */ jsx(
|
|
7
|
+
Chip,
|
|
8
|
+
{
|
|
9
|
+
label,
|
|
10
|
+
size,
|
|
11
|
+
variant,
|
|
12
|
+
color,
|
|
13
|
+
onDelete,
|
|
14
|
+
sx: { fontWeight: 500, ...sx },
|
|
15
|
+
...chipProps
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
if (!tooltip) {
|
|
19
|
+
return chip;
|
|
20
|
+
}
|
|
21
|
+
return /* @__PURE__ */ jsx(Tooltip, { title: tooltip, children: chip });
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
Tag as default
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=Tag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tag.js","sources":["../../../src/ui/labels/Tag.jsx"],"sourcesContent":["// El chip genérico: etiqueta + color + explicación, en un solo lugar.\n//\n// Para un valor que viene de un diccionario (estatus, formato, hallazgo) se usa StatusChip, que saca etiqueta, color y\n// tooltip del diccionario. Tag es para lo que no es un valor cerrado: un filtro puesto, \"total aproximado\", un conteo.\n//\n// Genérico del paquete: function (regla de la casa).\nimport Chip from '@mui/material/Chip';\nimport Tooltip from '@mui/material/Tooltip';\n\n/**\n * @param {object} props\n * @param {import('react').ReactNode} props.label texto visible, ya traducido\n * @param {string} [props.tooltip] qué significa (aparece al pasar el cursor)\n * @param {string} [props.color] color del tema de MUI\n * @param {'filled'|'outlined'} [props.variant]\n * @param {'small'|'medium'} [props.size]\n * @param {() => void} [props.onDelete]\n * @param {object} [props.sx]\n */\nexport default function Tag({label, tooltip, color = 'default', variant = 'outlined', size = 'small', onDelete, sx, ...chipProps}) {\n const chip = (\n <Chip label={label} size={size} variant={variant} color={color} onDelete={onDelete}\n sx={{fontWeight: 500, ...sx}} {...chipProps} />\n );\n\n // guard clause: sin tooltip no se envuelve (un Tooltip vacío se traga el cursor sin dar nada a cambio)\n if (!tooltip) {\n return chip;\n }\n return <Tooltip title={tooltip}>{chip}</Tooltip>;\n}\n"],"names":[],"mappings":";;;;AAmBA,SAAwB,IAAI,EAAC,OAAO,SAAS,QAAQ,WAAW,UAAU,YAAY,OAAO,SAAS,UAAU,IAAI,GAAG,aAAY;AAC/H,QAAM,OACF;AAAA,IAAC;AAAA,IAAA;AAAA,MAAK;AAAA,MAAc;AAAA,MAAY;AAAA,MAAkB;AAAA,MAAc;AAAA,MAC1D,IAAI,EAAC,YAAY,KAAK,GAAG,GAAA;AAAA,MAAM,GAAG;AAAA,IAAA;AAAA,EAAA;AAI5C,MAAI,CAAC,SAAS;AACV,WAAO;AAAA,EACX;AACA,SAAO,oBAAC,SAAA,EAAQ,OAAO,SAAU,UAAA,MAAK;AAC1C;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tagOf.js","sources":["../../../src/ui/labels/tagOf.js"],"sourcesContent":["// Una etiqueta de color como la reciben las piezas de la casa (la tarjeta del tablero, el mensaje de la bandeja): texto solo\n// («Clientes») o con su color del tema ({label: 'Alta', color: 'error'}). Función pura: se prueba sin navegador.\n//\n// Funciones puras, no renderizan: function (regla de la casa).\n\n/**\n * Una etiqueta como la pintan la tarjeta y el mensaje: un texto suelto o {label, color} (un color del tema: error, warning, info…).\n *\n * @param {string|{label: string, color?: string}} tag\n * @returns {{label: string, color: string}}\n */\nexport function tagOf(tag) {\n return typeof tag === 'string' ? {label: tag, color: 'default'} : {label: tag.label, color: tag.color ?? 'default'};\n}\n"],"names":[],"mappings":"AAWO,SAAS,MAAM,KAAK;AACvB,SAAO,OAAO,QAAQ,WAAW,EAAC,OAAO,KAAK,OAAO,UAAS,IAAI,EAAC,OAAO,IAAI,OAAO,OAAO,IAAI,SAAS,UAAS;AACtH;"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import Accordion from "@mui/material/Accordion";
|
|
5
|
+
import AccordionDetails from "@mui/material/AccordionDetails";
|
|
6
|
+
import AccordionSummary from "@mui/material/AccordionSummary";
|
|
7
|
+
import Box from "@mui/material/Box";
|
|
8
|
+
import Typography from "@mui/material/Typography";
|
|
9
|
+
import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
|
|
10
|
+
const CARD_BORDER_RADIUS_PIXELS = 10;
|
|
11
|
+
const HEADER_SX = {
|
|
12
|
+
// la flecha adelante del texto: al final del renglón quedaba lejos de lo que se lee y pasaba inadvertida
|
|
13
|
+
flexDirection: "row-reverse",
|
|
14
|
+
gap: 1,
|
|
15
|
+
px: 1.5,
|
|
16
|
+
minHeight: 44,
|
|
17
|
+
border: 1,
|
|
18
|
+
borderColor: "divider",
|
|
19
|
+
borderRadius: `${CARD_BORDER_RADIUS_PIXELS}px`,
|
|
20
|
+
bgcolor: "background.paper",
|
|
21
|
+
"&:hover": { bgcolor: "action.hover" },
|
|
22
|
+
"& .MuiAccordionSummary-content": { my: 0.75, minWidth: 0 }
|
|
23
|
+
};
|
|
24
|
+
function CollapsibleSection({ collapsedTitle, expandedTitle, hint = "", defaultExpanded = false, onExpandedChange, children }) {
|
|
25
|
+
const [isExpanded, setIsExpanded] = useState(defaultExpanded);
|
|
26
|
+
const changeExpanded = (nextIsExpanded) => {
|
|
27
|
+
setIsExpanded(nextIsExpanded);
|
|
28
|
+
onExpandedChange?.(nextIsExpanded);
|
|
29
|
+
};
|
|
30
|
+
return /* @__PURE__ */ jsx(Box, { sx: { minWidth: 0 }, children: /* @__PURE__ */ jsxs(
|
|
31
|
+
Accordion,
|
|
32
|
+
{
|
|
33
|
+
expanded: isExpanded,
|
|
34
|
+
onChange: (changeEvent, nextIsExpanded) => changeExpanded(nextIsExpanded),
|
|
35
|
+
disableGutters: true,
|
|
36
|
+
elevation: 0,
|
|
37
|
+
square: true,
|
|
38
|
+
sx: { bgcolor: "transparent", "&::before": { display: "none" } },
|
|
39
|
+
children: [
|
|
40
|
+
/* @__PURE__ */ jsx(AccordionSummary, { expandIcon: /* @__PURE__ */ jsx(ExpandMoreIcon, { color: "primary" }), sx: HEADER_SX, children: /* @__PURE__ */ jsxs(Box, { sx: { minWidth: 0 }, children: [
|
|
41
|
+
/* @__PURE__ */ jsx(Typography, { variant: "subtitle2", component: "span", color: "primary", sx: { display: "block" }, children: isExpanded ? expandedTitle : collapsedTitle }),
|
|
42
|
+
!isExpanded && hint && /* @__PURE__ */ jsx(Typography, { variant: "caption", component: "span", color: "text.secondary", sx: { display: "block" }, children: hint })
|
|
43
|
+
] }) }),
|
|
44
|
+
/* @__PURE__ */ jsx(AccordionDetails, { sx: { p: 0, pt: 2 }, children })
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
) });
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
CollapsibleSection as default
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=CollapsibleSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollapsibleSection.js","sources":["../../../src/ui/layout/CollapsibleSection.jsx"],"sourcesContent":["// Sección que se pliega: un encabezado que se toca y, debajo, el contenido, que se abre y se cierra.\n//\n// Para qué: en una página de detalle las cifras quedan a la vista y lo demás se guarda aquí; quien quiere más, lo abre.\n//\n// El encabezado se ve como lo que es, un botón a todo lo ancho: recuadro, la flecha ADELANTE del texto y otro fondo al pasar\n// el cursor. Su texto dice lo que va a pasar al tocarlo («Ver el detalle…» plegada, «Ocultar el detalle…» abierta) y,\n// plegada, un renglón más chico dice qué hay adentro: así nadie tiene que abrirla para saber si ahí está lo que busca.\n// No dice «dé clic»: en el teléfono no hay clic, y un tooltip tampoco se ve ahí.\n//\n// El contenido va sin fondo ni borde propios: adentro van tarjetas (SectionCard) y un recuadro alrededor se vería como\n// tarjeta dentro de tarjeta.\n//\n// OJO: el acordeón de MUI se quita el margen de arriba cuando está abierto y es el primero de su tipo entre sus hermanos.\n// Dentro de un Stack, que separa a sus hijos con margen, eso hacía brincar el encabezado 16 px al abrir y al cerrar. Por eso\n// va envuelto en una caja: el margen del Stack cae en la caja y el encabezado se queda quieto.\n//\n// Genérico del paquete: function (regla de la casa). No sabe de negocio: sus textos llegan ya traducidos.\nimport {useState} from 'react';\nimport Accordion from '@mui/material/Accordion';\nimport AccordionDetails from '@mui/material/AccordionDetails';\nimport AccordionSummary from '@mui/material/AccordionSummary';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\n\n// el mismo radio de las tarjetas (theme/components/surfaces.js): el encabezado se lee como una pieza más de la página\nconst CARD_BORDER_RADIUS_PIXELS = 10;\n\nconst HEADER_SX = {\n // la flecha adelante del texto: al final del renglón quedaba lejos de lo que se lee y pasaba inadvertida\n flexDirection: 'row-reverse', gap: 1, px: 1.5, minHeight: 44,\n border: 1, borderColor: 'divider', borderRadius: `${CARD_BORDER_RADIUS_PIXELS}px`, bgcolor: 'background.paper',\n '&:hover': {bgcolor: 'action.hover'},\n '& .MuiAccordionSummary-content': {my: 0.75, minWidth: 0},\n};\n\n/**\n * @param {object} props\n * @param {string} props.collapsedTitle lo que dice plegada, ya traducido («Ver el detalle de la validación»)\n * @param {string} props.expandedTitle lo que dice abierta («Ocultar el detalle de la validación»)\n * @param {string} [props.hint] plegada, qué hay adentro («Incluye resumen, motivos de rechazo y descargas.»)\n * @param {boolean} [props.defaultExpanded] si empieza abierta; por omisión empieza plegada\n * @param {(isExpanded: boolean) => void} [props.onExpandedChange] la persona la abrió o la plegó (por ejemplo, para pedir lo de\n * adentro hasta que se abre)\n * @param {import('react').ReactNode} props.children\n */\nexport default function CollapsibleSection({collapsedTitle, expandedTitle, hint = '', defaultExpanded = false, onExpandedChange, children}) {\n const [isExpanded, setIsExpanded] = useState(defaultExpanded);\n const changeExpanded = (nextIsExpanded) => {\n setIsExpanded(nextIsExpanded);\n onExpandedChange?.(nextIsExpanded);\n };\n\n return (\n <Box sx={{minWidth: 0}}>\n <Accordion expanded={isExpanded} onChange={(changeEvent, nextIsExpanded) => changeExpanded(nextIsExpanded)}\n disableGutters elevation={0} square sx={{bgcolor: 'transparent', '&::before': {display: 'none'}}}>\n {/* NOTA: el acordeón ya envuelve este renglón en un encabezado (h3); los textos van como span para no anidar dos */}\n <AccordionSummary expandIcon={<ExpandMoreIcon color=\"primary\" />} sx={HEADER_SX}>\n <Box sx={{minWidth: 0}}>\n <Typography variant=\"subtitle2\" component=\"span\" color=\"primary\" sx={{display: 'block'}}>\n {isExpanded ? expandedTitle : collapsedTitle}\n </Typography>\n {!isExpanded && hint && (\n <Typography variant=\"caption\" component=\"span\" color=\"text.secondary\" sx={{display: 'block'}}>{hint}</Typography>\n )}\n </Box>\n </AccordionSummary>\n <AccordionDetails sx={{p: 0, pt: 2}}>{children}</AccordionDetails>\n </Accordion>\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;AA0BA,MAAM,4BAA4B;AAElC,MAAM,YAAY;AAAA;AAAA,EAEd,eAAe;AAAA,EAAe,KAAK;AAAA,EAAG,IAAI;AAAA,EAAK,WAAW;AAAA,EAC1D,QAAQ;AAAA,EAAG,aAAa;AAAA,EAAW,cAAc,GAAG,yBAAyB;AAAA,EAAM,SAAS;AAAA,EAC5F,WAAW,EAAC,SAAS,eAAA;AAAA,EACrB,kCAAkC,EAAC,IAAI,MAAM,UAAU,EAAA;AAC3D;AAYA,SAAwB,mBAAmB,EAAC,gBAAgB,eAAe,OAAO,IAAI,kBAAkB,OAAO,kBAAkB,YAAW;AACxI,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,eAAe;AAC5D,QAAM,iBAAiB,CAAC,mBAAmB;AACvC,kBAAc,cAAc;AAC5B,uBAAmB,cAAc;AAAA,EACrC;AAEA,6BACK,KAAA,EAAI,IAAI,EAAC,UAAU,KAChB,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MAAU,UAAU;AAAA,MAAY,UAAU,CAAC,aAAa,mBAAmB,eAAe,cAAc;AAAA,MAC9F,gBAAc;AAAA,MAAC,WAAW;AAAA,MAAG,QAAM;AAAA,MAAC,IAAI,EAAC,SAAS,eAAe,aAAa,EAAC,SAAS,SAAM;AAAA,MAErG,UAAA;AAAA,QAAA,oBAAC,kBAAA,EAAiB,YAAY,oBAAC,gBAAA,EAAe,OAAM,UAAA,CAAU,GAAI,IAAI,WAClE,+BAAC,KAAA,EAAI,IAAI,EAAC,UAAU,KAChB,UAAA;AAAA,UAAA,oBAAC,YAAA,EAAW,SAAQ,aAAY,WAAU,QAAO,OAAM,WAAU,IAAI,EAAC,SAAS,QAAA,GAC1E,UAAA,aAAa,gBAAgB,gBAClC;AAAA,UACC,CAAC,cAAc,QACZ,oBAAC,YAAA,EAAW,SAAQ,WAAU,WAAU,QAAO,OAAM,kBAAiB,IAAI,EAAC,SAAS,QAAA,GAAW,UAAA,KAAA,CAAK;AAAA,QAAA,EAAA,CAE5G,EAAA,CACJ;AAAA,QACA,oBAAC,oBAAiB,IAAI,EAAC,GAAG,GAAG,IAAI,EAAA,GAAK,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEvD;AAER;"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useId } from "react";
|
|
4
|
+
import { useToolkitTranslation } from "../../toolkit/useToolkitTranslation.js";
|
|
5
|
+
import Box from "@mui/material/Box";
|
|
6
|
+
import Dialog from "@mui/material/Dialog";
|
|
7
|
+
import IconButton from "@mui/material/IconButton";
|
|
8
|
+
import Slide from "@mui/material/Slide";
|
|
9
|
+
import Typography from "@mui/material/Typography";
|
|
10
|
+
import CloseIcon from "@mui/icons-material/Close";
|
|
11
|
+
import { APP_BAR_HEIGHT } from "./appBarHeight.js";
|
|
12
|
+
const SHEET_MAX_WIDTH_PIXELS = 880;
|
|
13
|
+
const SHEET_GAP_PIXELS = 8;
|
|
14
|
+
const SHEET_PHONE_TOP_PIXELS = 24;
|
|
15
|
+
const SHEET_RADIUS_PIXELS = 20;
|
|
16
|
+
function sheetSxOf(theme) {
|
|
17
|
+
const palette = (theme.vars ?? theme).palette;
|
|
18
|
+
return {
|
|
19
|
+
position: "fixed",
|
|
20
|
+
m: 0,
|
|
21
|
+
height: "auto",
|
|
22
|
+
maxHeight: "none",
|
|
23
|
+
borderRadius: `${SHEET_RADIUS_PIXELS}px`,
|
|
24
|
+
// el que se desliza es el cuerpo, no la hoja: así el encabezado se queda quieto
|
|
25
|
+
display: "flex",
|
|
26
|
+
flexDirection: "column",
|
|
27
|
+
overflow: "hidden",
|
|
28
|
+
backgroundColor: palette.background.paper,
|
|
29
|
+
backgroundImage: "none",
|
|
30
|
+
boxShadow: `0 0 0 1px ${palette.divider}, 0 24px 64px rgba(0, 0, 0, 0.28)`,
|
|
31
|
+
// en oscuro, un poco más clara que lo de atrás: lo que va al frente se aclara (HIG «Dark Mode»)
|
|
32
|
+
...theme.applyStyles("dark", { backgroundColor: `color-mix(in srgb, ${palette.background.paper}, white 6%)` }),
|
|
33
|
+
// escritorio: centrada, debajo de la barra
|
|
34
|
+
top: `calc(${APP_BAR_HEIGHT} + ${SHEET_GAP_PIXELS}px)`,
|
|
35
|
+
bottom: SHEET_GAP_PIXELS,
|
|
36
|
+
left: 0,
|
|
37
|
+
right: 0,
|
|
38
|
+
mx: "auto",
|
|
39
|
+
width: `min(${SHEET_MAX_WIDTH_PIXELS}px, calc(100% - ${SHEET_GAP_PIXELS * 4}px))`,
|
|
40
|
+
maxWidth: "none",
|
|
41
|
+
// teléfono: separada de las orillas y casi de alto completo (la barra está abajo o es de MUI arriba: la hoja la tapa)
|
|
42
|
+
[theme.breakpoints.down("md")]: {
|
|
43
|
+
top: `calc(env(safe-area-inset-top) + ${SHEET_PHONE_TOP_PIXELS}px)`,
|
|
44
|
+
bottom: `calc(env(safe-area-inset-bottom) + ${SHEET_GAP_PIXELS}px)`,
|
|
45
|
+
width: `calc(100% - ${SHEET_GAP_PIXELS * 2}px)`
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function SlideUp(props) {
|
|
50
|
+
return /* @__PURE__ */ jsx(Slide, { direction: "up", ...props });
|
|
51
|
+
}
|
|
52
|
+
function ContentDialog({ open, onClose, title, children, texts }) {
|
|
53
|
+
const { t } = useToolkitTranslation("common", texts);
|
|
54
|
+
const titleId = useId();
|
|
55
|
+
return /* @__PURE__ */ jsxs(
|
|
56
|
+
Dialog,
|
|
57
|
+
{
|
|
58
|
+
open,
|
|
59
|
+
onClose,
|
|
60
|
+
"aria-labelledby": titleId,
|
|
61
|
+
fullScreen: true,
|
|
62
|
+
slots: { transition: SlideUp },
|
|
63
|
+
slotProps: { paper: { sx: sheetSxOf } },
|
|
64
|
+
children: [
|
|
65
|
+
/* @__PURE__ */ jsxs(Box, { sx: {
|
|
66
|
+
display: "flex",
|
|
67
|
+
alignItems: "center",
|
|
68
|
+
gap: 2,
|
|
69
|
+
flexShrink: 0,
|
|
70
|
+
minHeight: 60,
|
|
71
|
+
pl: { xs: 2.5, md: 4 },
|
|
72
|
+
pr: { xs: 1.5, md: 2 },
|
|
73
|
+
py: 1,
|
|
74
|
+
borderBottom: 1,
|
|
75
|
+
borderColor: "divider"
|
|
76
|
+
}, children: [
|
|
77
|
+
/* @__PURE__ */ jsx(Typography, { id: titleId, variant: "h6", component: "h2", sx: { flex: 1, minWidth: 0 }, children: title }),
|
|
78
|
+
/* @__PURE__ */ jsx(
|
|
79
|
+
IconButton,
|
|
80
|
+
{
|
|
81
|
+
onClick: onClose,
|
|
82
|
+
"aria-label": t("actions.close"),
|
|
83
|
+
size: "small",
|
|
84
|
+
sx: { bgcolor: "action.hover", "&:hover": { bgcolor: "action.selected" } },
|
|
85
|
+
children: /* @__PURE__ */ jsx(CloseIcon, { fontSize: "small" })
|
|
86
|
+
}
|
|
87
|
+
)
|
|
88
|
+
] }),
|
|
89
|
+
/* @__PURE__ */ jsx(Box, { sx: { flex: 1, minHeight: 0, overflow: "auto", px: { xs: 2.5, md: 4 }, py: { xs: 2, md: 3 } }, children })
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
export {
|
|
95
|
+
ContentDialog as default
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=ContentDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContentDialog.js","sources":["../../../src/ui/layout/ContentDialog.jsx"],"sourcesContent":["// Diálogo de contenido: la «hoja de lectura» (la «page sheet» de Apple) para una vista grande que se lee, como un historial\n// con su tabla. Las confirmaciones y los formularios cortos siguen en su recuadro al centro (ConfirmDialog): esto es para\n// leer, no para contestar una pregunta.\n//\n// Cómo se ve, como en el iPad y en la Mac: una hoja SÓLIDA (para leer no va vidrio) con esquinas redondas, que sube desde\n// abajo; en escritorio centrada, de un ancho que se lee cómodo (SHEET_MAX_WIDTH_PIXELS) y debajo de la barra de arriba, que se\n// queda a la vista (atenuada) para no perder dónde se está; en el teléfono, separada de las orillas y casi de alto completo.\n// Antes ocupaba la pantalla de orilla a orilla: un rectángulo gris plano con renglones larguísimos (lo reportaron).\n//\n// Cómo se arma: un encabezado que no se mueve (el título y la X para cerrar) y un cuerpo que se desliza si no cabe.\n//\n// OJO: el alto de la barra superior no es fijo (con un aviso adentro mide más): se usa el que publica el layout\n// (APP_BAR_HEIGHT), no un número.\n//\n// Solo abre una vista: se cierra con la X, con Escape o con un clic afuera, sin confirmación.\n//\n// Genérico del paquete: function (regla de la casa). No sabe de negocio: el título y el contenido llegan ya traducidos.\nimport {useId} from 'react';\nimport {useToolkitTranslation} from '@/toolkit/useToolkitTranslation.js';\nimport Box from '@mui/material/Box';\nimport Dialog from '@mui/material/Dialog';\nimport IconButton from '@mui/material/IconButton';\nimport Slide from '@mui/material/Slide';\nimport Typography from '@mui/material/Typography';\nimport CloseIcon from '@mui/icons-material/Close';\n\nimport {APP_BAR_HEIGHT} from '@/ui/layout/appBarHeight.js';\n\n// la hoja: lo ancho máximo en escritorio (un texto de 16 px se lee cómodo y cabe una tabla), su separación de las orillas y\n// la de su encabezado\nconst SHEET_MAX_WIDTH_PIXELS = 880;\nconst SHEET_GAP_PIXELS = 8;\nconst SHEET_PHONE_TOP_PIXELS = 24;\nconst SHEET_RADIUS_PIXELS = 20;\n\n/**\n * La hoja: fija a la ventana y centrada. Va como diálogo fullScreen (así el vidrio del tema la deja sólida y el fondo de\n * atrás no se desenfoca: la barra se sigue leyendo), con su tamaño y sus esquinas propios.\n * OJO: el alto del fullScreen de MUI es 100 %, que con top y bottom se saldría por abajo: va 'auto'.\n *\n * @param {object} theme\n * @returns {object}\n */\nfunction sheetSxOf(theme) {\n const palette = (theme.vars ?? theme).palette;\n return {\n position: 'fixed',\n m: 0,\n height: 'auto',\n maxHeight: 'none',\n borderRadius: `${SHEET_RADIUS_PIXELS}px`,\n // el que se desliza es el cuerpo, no la hoja: así el encabezado se queda quieto\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n backgroundColor: palette.background.paper,\n backgroundImage: 'none',\n boxShadow: `0 0 0 1px ${palette.divider}, 0 24px 64px rgba(0, 0, 0, 0.28)`,\n // en oscuro, un poco más clara que lo de atrás: lo que va al frente se aclara (HIG «Dark Mode»)\n ...theme.applyStyles('dark', {backgroundColor: `color-mix(in srgb, ${palette.background.paper}, white 6%)`}),\n // escritorio: centrada, debajo de la barra\n top: `calc(${APP_BAR_HEIGHT} + ${SHEET_GAP_PIXELS}px)`,\n bottom: SHEET_GAP_PIXELS,\n left: 0,\n right: 0,\n mx: 'auto',\n width: `min(${SHEET_MAX_WIDTH_PIXELS}px, calc(100% - ${SHEET_GAP_PIXELS * 4}px))`,\n maxWidth: 'none',\n // teléfono: separada de las orillas y casi de alto completo (la barra está abajo o es de MUI arriba: la hoja la tapa)\n [theme.breakpoints.down('md')]: {\n top: `calc(env(safe-area-inset-top) + ${SHEET_PHONE_TOP_PIXELS}px)`,\n bottom: `calc(env(safe-area-inset-bottom) + ${SHEET_GAP_PIXELS}px)`,\n width: `calc(100% - ${SHEET_GAP_PIXELS * 2}px)`,\n },\n };\n}\n\n/**\n * La animación de la hoja: entra desde abajo y sale por donde entró.\n *\n * @param {object} props lo que MUI le pasa a la animación de un diálogo (si está abierto, su contenido, sus tiempos)\n */\nfunction SlideUp(props) {\n return <Slide direction=\"up\" {...props} />;\n}\n\n/**\n * @param {object} props\n * @param {boolean} props.open\n * @param {() => void} props.onClose\n * @param {string} props.title texto ya traducido\n * @param {import('react').ReactNode} props.children\n * @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete\n */\nexport default function ContentDialog({open, onClose, title, children, texts}) {\n const {t} = useToolkitTranslation('common', texts);\n const titleId = useId();\n\n return (\n <Dialog open={open} onClose={onClose} aria-labelledby={titleId} fullScreen\n slots={{transition: SlideUp}} slotProps={{paper: {sx: sheetSxOf}}}>\n <Box sx={{\n display: 'flex', alignItems: 'center', gap: 2, flexShrink: 0, minHeight: 60, pl: {xs: 2.5, md: 4}, pr: {xs: 1.5, md: 2}, py: 1,\n borderBottom: 1, borderColor: 'divider',\n }}>\n <Typography id={titleId} variant=\"h6\" component=\"h2\" sx={{flex: 1, minWidth: 0}}>{title}</Typography>\n {/* la X de Apple: en un círculo gris tenue, no suelta */}\n <IconButton onClick={onClose} aria-label={t('actions.close')} size=\"small\"\n sx={{bgcolor: 'action.hover', '&:hover': {bgcolor: 'action.selected'}}}>\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n <Box sx={{flex: 1, minHeight: 0, overflow: 'auto', px: {xs: 2.5, md: 4}, py: {xs: 2, md: 3}}}>\n {children}\n </Box>\n </Dialog>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AA8BA,MAAM,yBAAyB;AAC/B,MAAM,mBAAmB;AACzB,MAAM,yBAAyB;AAC/B,MAAM,sBAAsB;AAU5B,SAAS,UAAU,OAAO;AACtB,QAAM,WAAW,MAAM,QAAQ,OAAO;AACtC,SAAO;AAAA,IACH,UAAU;AAAA,IACV,GAAG;AAAA,IACH,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,cAAc,GAAG,mBAAmB;AAAA;AAAA,IAEpC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,UAAU;AAAA,IACV,iBAAiB,QAAQ,WAAW;AAAA,IACpC,iBAAiB;AAAA,IACjB,WAAW,aAAa,QAAQ,OAAO;AAAA;AAAA,IAEvC,GAAG,MAAM,YAAY,QAAQ,EAAC,iBAAiB,sBAAsB,QAAQ,WAAW,KAAK,cAAA,CAAc;AAAA;AAAA,IAE3G,KAAK,QAAQ,cAAc,MAAM,gBAAgB;AAAA,IACjD,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,OAAO,OAAO,sBAAsB,mBAAmB,mBAAmB,CAAC;AAAA,IAC3E,UAAU;AAAA;AAAA,IAEV,CAAC,MAAM,YAAY,KAAK,IAAI,CAAC,GAAG;AAAA,MAC5B,KAAK,mCAAmC,sBAAsB;AAAA,MAC9D,QAAQ,sCAAsC,gBAAgB;AAAA,MAC9D,OAAO,eAAe,mBAAmB,CAAC;AAAA,IAAA;AAAA,EAC9C;AAER;AAOA,SAAS,QAAQ,OAAO;AACpB,SAAO,oBAAC,OAAA,EAAM,WAAU,MAAM,GAAG,OAAO;AAC5C;AAUA,SAAwB,cAAc,EAAC,MAAM,SAAS,OAAO,UAAU,SAAQ;AAC3E,QAAM,EAAC,EAAA,IAAK,sBAAsB,UAAU,KAAK;AACjD,QAAM,UAAU,MAAA;AAEhB,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MAAO;AAAA,MAAY;AAAA,MAAkB,mBAAiB;AAAA,MAAS,YAAU;AAAA,MAClE,OAAO,EAAC,YAAY,QAAA;AAAA,MAAU,WAAW,EAAC,OAAO,EAAC,IAAI,YAAS;AAAA,MACnE,UAAA;AAAA,QAAA,qBAAC,OAAI,IAAI;AAAA,UACL,SAAS;AAAA,UAAQ,YAAY;AAAA,UAAU,KAAK;AAAA,UAAG,YAAY;AAAA,UAAG,WAAW;AAAA,UAAI,IAAI,EAAC,IAAI,KAAK,IAAI,EAAA;AAAA,UAAI,IAAI,EAAC,IAAI,KAAK,IAAI,EAAA;AAAA,UAAI,IAAI;AAAA,UAC7H,cAAc;AAAA,UAAG,aAAa;AAAA,QAAA,GAE9B,UAAA;AAAA,UAAA,oBAAC,YAAA,EAAW,IAAI,SAAS,SAAQ,MAAK,WAAU,MAAK,IAAI,EAAC,MAAM,GAAG,UAAU,KAAK,UAAA,OAAM;AAAA,UAExF;AAAA,YAAC;AAAA,YAAA;AAAA,cAAW,SAAS;AAAA,cAAS,cAAY,EAAE,eAAe;AAAA,cAAG,MAAK;AAAA,cACvD,IAAI,EAAC,SAAS,gBAAgB,WAAW,EAAC,SAAS,oBAAiB;AAAA,cAC5E,UAAA,oBAAC,WAAA,EAAU,UAAS,QAAA,CAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,QAChC,GACJ;AAAA,QACA,oBAAC,KAAA,EAAI,IAAI,EAAC,MAAM,GAAG,WAAW,GAAG,UAAU,QAAQ,IAAI,EAAC,IAAI,KAAK,IAAI,EAAA,GAAI,IAAI,EAAC,IAAI,GAAG,IAAI,EAAA,EAAC,GACrF,SAAA,CACL;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGZ;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import Box from "@mui/material/Box";
|
|
4
|
+
import Typography from "@mui/material/Typography";
|
|
5
|
+
function DefinitionList({ entries, layout = "columns", labelWidth = 150 }) {
|
|
6
|
+
const isStacked = layout === "stacked";
|
|
7
|
+
return /* @__PURE__ */ jsx(Box, { component: "dl", sx: {
|
|
8
|
+
m: 0,
|
|
9
|
+
display: "grid",
|
|
10
|
+
gridTemplateColumns: isStacked ? "minmax(0, 1fr)" : `${labelWidth}px minmax(0, 1fr)`,
|
|
11
|
+
columnGap: 2,
|
|
12
|
+
rowGap: isStacked ? 0.25 : 1
|
|
13
|
+
}, children: entries.map(({ label, value }, entryPosition) => /* @__PURE__ */ jsxs(Box, { sx: { display: "contents" }, children: [
|
|
14
|
+
/* @__PURE__ */ jsx(
|
|
15
|
+
Typography,
|
|
16
|
+
{
|
|
17
|
+
component: "dt",
|
|
18
|
+
variant: isStacked ? "caption" : "body2",
|
|
19
|
+
color: "text.secondary",
|
|
20
|
+
sx: isStacked && entryPosition > 0 ? { mt: 1.25 } : void 0,
|
|
21
|
+
children: label
|
|
22
|
+
}
|
|
23
|
+
),
|
|
24
|
+
/* @__PURE__ */ jsx(Typography, { component: "dd", variant: "body2", sx: { m: 0, overflowWrap: "anywhere" }, children: value })
|
|
25
|
+
] }, label)) });
|
|
26
|
+
}
|
|
27
|
+
export {
|
|
28
|
+
DefinitionList as default
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=DefinitionList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefinitionList.js","sources":["../../../src/ui/layout/DefinitionList.jsx"],"sourcesContent":["// Lista de dato → valor (<dl>).\n//\n// Dos acomodos:\n// columns (por omisión) el dato en gris a la izquierda y su valor a la derecha; para tarjetas anchas\n// stacked el dato chico arriba de su valor; para columnas angostas, donde un nombre largo\n// («Codificación del archivo») se partiría en dos renglones al lado de su valor\n//\n// Genérico del paquete: function (regla de la casa). Los textos llegan ya traducidos y el valor puede ser cualquier nodo (un\n// chip, un texto en monoespaciada...).\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\n\n/**\n * @param {object} props\n * @param {Array<{label: string, value: import('react').ReactNode}>} props.entries en el orden en que se pintan; el label es la\n * llave\n * @param {'columns'|'stacked'} [props.layout]\n * @param {number} [props.labelWidth] ancho en px de la columna del dato (solo columns)\n */\nexport default function DefinitionList({entries, layout = 'columns', labelWidth = 150}) {\n const isStacked = layout === 'stacked';\n\n return (\n <Box component=\"dl\" sx={{\n m: 0, display: 'grid',\n gridTemplateColumns: isStacked ? 'minmax(0, 1fr)' : `${labelWidth}px minmax(0, 1fr)`,\n columnGap: 2, rowGap: isStacked ? 0.25 : 1,\n }}>\n {entries.map(({label, value}, entryPosition) => (\n <Box key={label} sx={{display: 'contents'}}>\n <Typography component=\"dt\" variant={isStacked ? 'caption' : 'body2'} color=\"text.secondary\"\n sx={isStacked && entryPosition > 0 ? {mt: 1.25} : undefined}>\n {label}\n </Typography>\n <Typography component=\"dd\" variant=\"body2\" sx={{m: 0, overflowWrap: 'anywhere'}}>{value}</Typography>\n </Box>\n ))}\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;AAmBA,SAAwB,eAAe,EAAC,SAAS,SAAS,WAAW,aAAa,OAAM;AACpF,QAAM,YAAY,WAAW;AAE7B,SACI,oBAAC,KAAA,EAAI,WAAU,MAAK,IAAI;AAAA,IACpB,GAAG;AAAA,IAAG,SAAS;AAAA,IACf,qBAAqB,YAAY,mBAAmB,GAAG,UAAU;AAAA,IACjE,WAAW;AAAA,IAAG,QAAQ,YAAY,OAAO;AAAA,EAAA,GAExC,UAAA,QAAQ,IAAI,CAAC,EAAC,OAAO,SAAQ,uCACzB,KAAA,EAAgB,IAAI,EAAC,SAAS,cAC3B,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QAAW,WAAU;AAAA,QAAK,SAAS,YAAY,YAAY;AAAA,QAAS,OAAM;AAAA,QAC/D,IAAI,aAAa,gBAAgB,IAAI,EAAC,IAAI,SAAQ;AAAA,QACzD,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEL,oBAAC,YAAA,EAAW,WAAU,MAAK,SAAQ,SAAQ,IAAI,EAAC,GAAG,GAAG,cAAc,WAAA,GAAc,UAAA,MAAA,CAAM;AAAA,EAAA,KALlF,KAMV,CACH,GACL;AAER;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useRef } from "react";
|
|
4
|
+
import Box from "@mui/material/Box";
|
|
5
|
+
import Stack from "@mui/material/Stack";
|
|
6
|
+
import Typography from "@mui/material/Typography";
|
|
7
|
+
import { useRegisterPageTitle } from "../../appShell/pageTitle.js";
|
|
8
|
+
import DocumentTitle from "../navigation/DocumentTitle.js";
|
|
9
|
+
function DetailHeader({ title, eyebrow, badges, actions, documentTitle }) {
|
|
10
|
+
const titleRef = useRef(null);
|
|
11
|
+
useRegisterPageTitle(title, titleRef);
|
|
12
|
+
return /* @__PURE__ */ jsxs(Box, { component: "header", sx: { display: "flex", flexWrap: "wrap", alignItems: "flex-end", justifyContent: "space-between", gap: 2, mb: 2.5 }, children: [
|
|
13
|
+
/* @__PURE__ */ jsx(DocumentTitle, { title: documentTitle ?? title }),
|
|
14
|
+
/* @__PURE__ */ jsxs(Box, { sx: { minWidth: 0 }, children: [
|
|
15
|
+
eyebrow && /* @__PURE__ */ jsx(Typography, { variant: "subtitle1", color: "text.secondary", component: "p", sx: { fontWeight: 700 }, children: eyebrow }),
|
|
16
|
+
/* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1.5, useFlexGap: true, sx: { alignItems: "center", flexWrap: "wrap" }, children: [
|
|
17
|
+
/* @__PURE__ */ jsx(Typography, { ref: titleRef, variant: "h5", component: "h1", children: title }),
|
|
18
|
+
badges
|
|
19
|
+
] })
|
|
20
|
+
] }),
|
|
21
|
+
actions && /* @__PURE__ */ jsx(Stack, { direction: "row", spacing: 1, useFlexGap: true, sx: { flexWrap: "wrap" }, children: actions })
|
|
22
|
+
] });
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
DetailHeader as default
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=DetailHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailHeader.js","sources":["../../../src/ui/layout/DetailHeader.jsx"],"sourcesContent":["// Encabezado de una página de detalle (un solo registro: un pedido, un usuario...): eyebrow con el contexto, el título\n// que dice QUÉ registro es, sus insignias a un lado del título (estatus, intento...) y las acciones a la derecha.\n//\n// Por qué aparte de PageHeader: ese es el encabezado centrado de un listado. En un detalle lo primero que se lee es qué\n// registro se está viendo y en qué estado está; por eso el título y sus insignias van juntos, arriba a la izquierda.\n//\n// También pone el título de la pestaña (DocumentTitle) y, dentro de AppLayout, sube el título a la barra al deslizar.\n//\n// Genérico del paquete: function (regla de la casa). No sabe de negocio: todo llega por props, ya traducido.\nimport {useRef} from 'react';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport {useRegisterPageTitle} from '@/appShell/pageTitle.jsx';\nimport DocumentTitle from '@/ui/navigation/DocumentTitle.jsx';\n\n/**\n * @param {object} props\n * @param {string} props.title texto ya traducido\n * @param {string} [props.eyebrow] contexto arriba del título (p. ej. el producto)\n * @param {import('react').ReactNode} [props.badges] insignias junto al título (chips de estatus, intento...)\n * @param {import('react').ReactNode} [props.actions] botones a la derecha\n * @param {string} [props.documentTitle] título de la pestaña si difiere del visible\n */\nexport default function DetailHeader({title, eyebrow, badges, actions, documentTitle}) {\n const titleRef = useRef(null);\n useRegisterPageTitle(title, titleRef);\n return (\n <Box component=\"header\" sx={{display: 'flex', flexWrap: 'wrap', alignItems: 'flex-end', justifyContent: 'space-between', gap: 2, mb: 2.5}}>\n <DocumentTitle title={documentTitle ?? title} />\n <Box sx={{minWidth: 0}}>\n {/* el contexto se lee de un vistazo (en overline se veía\n muy chico); text.secondary y no text.disabled: se lee (WCAG no lo exime) */}\n {eyebrow && <Typography variant=\"subtitle1\" color=\"text.secondary\" component=\"p\" sx={{fontWeight: 700}}>{eyebrow}</Typography>}\n <Stack direction=\"row\" spacing={1.5} useFlexGap sx={{alignItems: 'center', flexWrap: 'wrap'}}>\n <Typography ref={titleRef} variant=\"h5\" component=\"h1\">{title}</Typography>\n {badges}\n </Stack>\n </Box>\n {actions && <Stack direction=\"row\" spacing={1} useFlexGap sx={{flexWrap: 'wrap'}}>{actions}</Stack>}\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAyBA,SAAwB,aAAa,EAAC,OAAO,SAAS,QAAQ,SAAS,iBAAgB;AACnF,QAAM,WAAW,OAAO,IAAI;AAC5B,uBAAqB,OAAO,QAAQ;AACpC,8BACK,KAAA,EAAI,WAAU,UAAS,IAAI,EAAC,SAAS,QAAQ,UAAU,QAAQ,YAAY,YAAY,gBAAgB,iBAAiB,KAAK,GAAG,IAAI,OACjI,UAAA;AAAA,IAAA,oBAAC,eAAA,EAAc,OAAO,iBAAiB,MAAA,CAAO;AAAA,yBAC7C,KAAA,EAAI,IAAI,EAAC,UAAU,KAGf,UAAA;AAAA,MAAA,WAAW,oBAAC,YAAA,EAAW,SAAQ,aAAY,OAAM,kBAAiB,WAAU,KAAI,IAAI,EAAC,YAAY,IAAA,GAAO,UAAA,SAAQ;AAAA,MACjH,qBAAC,OAAA,EAAM,WAAU,OAAM,SAAS,KAAK,YAAU,MAAC,IAAI,EAAC,YAAY,UAAU,UAAU,UACjF,UAAA;AAAA,QAAA,oBAAC,cAAW,KAAK,UAAU,SAAQ,MAAK,WAAU,MAAM,UAAA,MAAA,CAAM;AAAA,QAC7D;AAAA,MAAA,EAAA,CACL;AAAA,IAAA,GACJ;AAAA,IACC,WAAW,oBAAC,OAAA,EAAM,WAAU,OAAM,SAAS,GAAG,YAAU,MAAC,IAAI,EAAC,UAAU,OAAA,GAAU,UAAA,QAAA,CAAQ;AAAA,EAAA,GAC/F;AAER;"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useToolkitTranslation } from "../../toolkit/useToolkitTranslation.js";
|
|
4
|
+
import { useToolkitNavigation } from "../../toolkit/toolkitContext.js";
|
|
5
|
+
import Button from "@mui/material/Button";
|
|
6
|
+
import Stack from "@mui/material/Stack";
|
|
7
|
+
import Typography from "@mui/material/Typography";
|
|
8
|
+
import ErrorOutlineOutlinedIcon from "@mui/icons-material/ErrorOutlineOutlined";
|
|
9
|
+
import LockOutlinedIcon from "@mui/icons-material/LockOutlined";
|
|
10
|
+
import SystemUpdateAltRoundedIcon from "@mui/icons-material/SystemUpdateAltRounded";
|
|
11
|
+
import TravelExploreOutlinedIcon from "@mui/icons-material/TravelExploreOutlined";
|
|
12
|
+
const ERROR_PAGE_KIND = Object.freeze({ notFound: "notFound", forbidden: "forbidden", serverError: "serverError", newVersion: "newVersion" });
|
|
13
|
+
const ERROR_PAGE_LOOK = Object.freeze({
|
|
14
|
+
[ERROR_PAGE_KIND.notFound]: { Icon: TravelExploreOutlinedIcon, color: "info", httpStatus: 404 },
|
|
15
|
+
[ERROR_PAGE_KIND.forbidden]: { Icon: LockOutlinedIcon, color: "warning", httpStatus: 403 },
|
|
16
|
+
[ERROR_PAGE_KIND.serverError]: { Icon: ErrorOutlineOutlinedIcon, color: "error", httpStatus: 500 },
|
|
17
|
+
// no es un error de nadie: se publicó otra versión; sin código, y el botón dice «Recargar»
|
|
18
|
+
[ERROR_PAGE_KIND.newVersion]: { Icon: SystemUpdateAltRoundedIcon, color: "info", httpStatus: null, retryKey: "reload" }
|
|
19
|
+
});
|
|
20
|
+
const ICON_PIXELS = 56;
|
|
21
|
+
function ErrorPage({
|
|
22
|
+
kind,
|
|
23
|
+
title,
|
|
24
|
+
text,
|
|
25
|
+
homePath = "/",
|
|
26
|
+
onRetry,
|
|
27
|
+
onGoHome,
|
|
28
|
+
extraActions,
|
|
29
|
+
actions,
|
|
30
|
+
icon,
|
|
31
|
+
children,
|
|
32
|
+
texts
|
|
33
|
+
}) {
|
|
34
|
+
const { t } = useToolkitTranslation("errorPage", texts);
|
|
35
|
+
const { Link } = useToolkitNavigation();
|
|
36
|
+
const look = ERROR_PAGE_LOOK[kind] ?? ERROR_PAGE_LOOK[ERROR_PAGE_KIND.serverError];
|
|
37
|
+
return /* @__PURE__ */ jsxs(Stack, { spacing: 2, sx: { alignItems: "center", textAlign: "center", py: { xs: 6, md: 10 }, px: 2, maxWidth: 560, mx: "auto" }, children: [
|
|
38
|
+
icon ?? /* @__PURE__ */ jsx(look.Icon, { color: look.color, sx: { fontSize: ICON_PIXELS } }),
|
|
39
|
+
/* @__PURE__ */ jsx(Typography, { variant: "h4", component: "h1", children: title ?? t(`${kind}.title`) }),
|
|
40
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body1", color: "text.secondary", children: text ?? t(`${kind}.text`) }),
|
|
41
|
+
children,
|
|
42
|
+
/* @__PURE__ */ jsx(Stack, { direction: { xs: "column", sm: "row" }, spacing: 1.5, useFlexGap: true, sx: { pt: 1, flexWrap: "wrap", justifyContent: "center" }, children: actions ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
43
|
+
onRetry && /* @__PURE__ */ jsx(Button, { variant: "contained", onClick: onRetry, children: t(look.retryKey ?? "retry") }),
|
|
44
|
+
/* @__PURE__ */ jsx(Button, { variant: onRetry ? "outlined" : "contained", component: Link, to: homePath, onClick: onGoHome, children: t("goHome") }),
|
|
45
|
+
extraActions
|
|
46
|
+
] }) }),
|
|
47
|
+
look.httpStatus && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "text.disabled", children: look.httpStatus })
|
|
48
|
+
] });
|
|
49
|
+
}
|
|
50
|
+
export {
|
|
51
|
+
ERROR_PAGE_KIND,
|
|
52
|
+
ErrorPage as default
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=ErrorPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorPage.js","sources":["../../../src/ui/layout/ErrorPage.jsx"],"sourcesContent":["// La pantalla de un error de navegación: la página no existe (404), no tiene permiso (403) o algo falló (500). Dice en\n// palabras normales qué pasó y qué hacer, con el número chico abajo como referencia técnica, y el botón para salir de ahí.\n//\n// <ErrorPage kind={ERROR_PAGE_KIND.notFound} /> el 404 del router (ruta '*')\n// <ErrorPage kind={ERROR_PAGE_KIND.serverError} onRetry={reload} /> la pantalla tronó (errorElement del router)\n// <ErrorPage kind={ERROR_PAGE_KIND.newVersion} onRetry={reload} /> se publicó otra versión con la pestaña abierta\n//\n// Los textos salen del paquete (namespace errorPage) en el idioma activo; title y text los cambian para un caso propio, y\n// `texts` cualquier otro («Ir al inicio», «Intentar de nuevo»).\n//\n// Se extiende sin tocar el framework: botones suyos junto a los de la casa (extraActions: «Contactar a soporte») o en lugar\n// de ellos (actions), algo debajo del texto (children: el teléfono de soporte, un folio), otro ícono (icon) y el evento de\n// «Ir al inicio» (onGoHome). La de «sin permiso» de las rutas se cambia con withAccess(…, {fallback}) y la de error de ruta\n// pasándole estas mismas props a RouteErrorScreen (/react-router).\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useToolkitTranslation} from '@/toolkit/useToolkitTranslation.js';\nimport {useToolkitNavigation} from '@/toolkit/toolkitContext.js';\nimport Button from '@mui/material/Button';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport ErrorOutlineOutlinedIcon from '@mui/icons-material/ErrorOutlineOutlined';\nimport LockOutlinedIcon from '@mui/icons-material/LockOutlined';\nimport SystemUpdateAltRoundedIcon from '@mui/icons-material/SystemUpdateAltRounded';\nimport TravelExploreOutlinedIcon from '@mui/icons-material/TravelExploreOutlined';\n\n/** Los errores que tiene pantalla propia. */\nexport const ERROR_PAGE_KIND = Object.freeze({notFound: 'notFound', forbidden: 'forbidden', serverError: 'serverError', newVersion: 'newVersion'});\n\n// el ícono, el color y el código HTTP de cada uno (el código va chico: es la referencia técnica, no el mensaje)\nconst ERROR_PAGE_LOOK = Object.freeze({\n [ERROR_PAGE_KIND.notFound]: {Icon: TravelExploreOutlinedIcon, color: 'info', httpStatus: 404},\n [ERROR_PAGE_KIND.forbidden]: {Icon: LockOutlinedIcon, color: 'warning', httpStatus: 403},\n [ERROR_PAGE_KIND.serverError]: {Icon: ErrorOutlineOutlinedIcon, color: 'error', httpStatus: 500},\n // no es un error de nadie: se publicó otra versión; sin código, y el botón dice «Recargar»\n [ERROR_PAGE_KIND.newVersion]: {Icon: SystemUpdateAltRoundedIcon, color: 'info', httpStatus: null, retryKey: 'reload'},\n});\nconst ICON_PIXELS = 56;\n\n/**\n * @param {object} props\n * @param {string} props.kind uno de ERROR_PAGE_KIND\n * @param {string} [props.title] ya traducido; por omisión el del paquete\n * @param {import('react').ReactNode} [props.text] ya traducido; por omisión el del paquete\n * @param {string} [props.homePath] a dónde lleva «Ir al inicio» (por omisión '/')\n * @param {() => void} [props.onRetry] con él sale «Intentar de nuevo»\n * @param {() => void} [props.onGoHome] al picar «Ir al inicio», antes de ir (para avisar o limpiar algo)\n * @param {import('react').ReactNode} [props.extraActions] botones suyos junto a los de la casa\n * @param {import('react').ReactNode} [props.actions] botones suyos EN LUGAR de los de la casa\n * @param {import('react').ReactNode} [props.icon] otro ícono; por omisión el de cada error\n * @param {import('react').ReactNode} [props.children] algo debajo del texto (el teléfono de soporte, un folio)\n * @param {object} [props.texts] los textos que cambian, con la forma de `errorPage` en los textos del paquete:\n * {goHome: 'Volver al tablero', notFound: {title: '…'}}\n */\nexport default function ErrorPage({\n kind, title, text, homePath = '/', onRetry, onGoHome, extraActions, actions, icon, children, texts,\n}) {\n const {t} = useToolkitTranslation('errorPage', texts);\n const {Link} = useToolkitNavigation();\n const look = ERROR_PAGE_LOOK[kind] ?? ERROR_PAGE_LOOK[ERROR_PAGE_KIND.serverError];\n\n return (\n <Stack spacing={2} sx={{alignItems: 'center', textAlign: 'center', py: {xs: 6, md: 10}, px: 2, maxWidth: 560, mx: 'auto'}}>\n {icon ?? <look.Icon color={look.color} sx={{fontSize: ICON_PIXELS}} />}\n <Typography variant=\"h4\" component=\"h1\">{title ?? t(`${kind}.title`)}</Typography>\n <Typography variant=\"body1\" color=\"text.secondary\">{text ?? t(`${kind}.text`)}</Typography>\n {children}\n <Stack direction={{xs: 'column', sm: 'row'}} spacing={1.5} useFlexGap sx={{pt: 1, flexWrap: 'wrap', justifyContent: 'center'}}>\n {actions ?? (\n <>\n {onRetry && <Button variant=\"contained\" onClick={onRetry}>{t(look.retryKey ?? 'retry')}</Button>}\n <Button variant={onRetry ? 'outlined' : 'contained'} component={Link} to={homePath} onClick={onGoHome}>{t('goHome')}</Button>\n {extraActions}\n </>\n )}\n </Stack>\n {look.httpStatus && <Typography variant=\"caption\" color=\"text.disabled\">{look.httpStatus}</Typography>}\n </Stack>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AA2BO,MAAM,kBAAkB,OAAO,OAAO,EAAC,UAAU,YAAY,WAAW,aAAa,aAAa,eAAe,YAAY,aAAA,CAAa;AAGjJ,MAAM,kBAAkB,OAAO,OAAO;AAAA,EAClC,CAAC,gBAAgB,QAAQ,GAAG,EAAC,MAAM,2BAA2B,OAAO,QAAQ,YAAY,IAAA;AAAA,EACzF,CAAC,gBAAgB,SAAS,GAAG,EAAC,MAAM,kBAAkB,OAAO,WAAW,YAAY,IAAA;AAAA,EACpF,CAAC,gBAAgB,WAAW,GAAG,EAAC,MAAM,0BAA0B,OAAO,SAAS,YAAY,IAAA;AAAA;AAAA,EAE5F,CAAC,gBAAgB,UAAU,GAAG,EAAC,MAAM,4BAA4B,OAAO,QAAQ,YAAY,MAAM,UAAU,SAAA;AAChH,CAAC;AACD,MAAM,cAAc;AAiBpB,SAAwB,UAAU;AAAA,EAC9B;AAAA,EAAM;AAAA,EAAO;AAAA,EAAM,WAAW;AAAA,EAAK;AAAA,EAAS;AAAA,EAAU;AAAA,EAAc;AAAA,EAAS;AAAA,EAAM;AAAA,EAAU;AACjG,GAAG;AACC,QAAM,EAAC,EAAA,IAAK,sBAAsB,aAAa,KAAK;AACpD,QAAM,EAAC,KAAA,IAAQ,qBAAA;AACf,QAAM,OAAO,gBAAgB,IAAI,KAAK,gBAAgB,gBAAgB,WAAW;AAEjF,SACI,qBAAC,SAAM,SAAS,GAAG,IAAI,EAAC,YAAY,UAAU,WAAW,UAAU,IAAI,EAAC,IAAI,GAAG,IAAI,GAAA,GAAK,IAAI,GAAG,UAAU,KAAK,IAAI,OAAA,GAC7G,UAAA;AAAA,IAAA,QAAQ,oBAAC,KAAK,MAAL,EAAU,OAAO,KAAK,OAAO,IAAI,EAAC,UAAU,YAAA,EAAW,CAAG;AAAA,IACpE,oBAAC,YAAA,EAAW,SAAQ,MAAK,WAAU,MAAM,UAAA,SAAS,EAAE,GAAG,IAAI,QAAQ,EAAA,CAAE;AAAA,IACrE,oBAAC,YAAA,EAAW,SAAQ,SAAQ,OAAM,kBAAkB,UAAA,QAAQ,EAAE,GAAG,IAAI,OAAO,EAAA,CAAE;AAAA,IAC7E;AAAA,IACD,oBAAC,SAAM,WAAW,EAAC,IAAI,UAAU,IAAI,MAAA,GAAQ,SAAS,KAAK,YAAU,MAAC,IAAI,EAAC,IAAI,GAAG,UAAU,QAAQ,gBAAgB,YAC/G,UAAA,WACG,qBAAA,UAAA,EACK,UAAA;AAAA,MAAA,WAAW,oBAAC,QAAA,EAAO,SAAQ,aAAY,SAAS,SAAU,UAAA,EAAE,KAAK,YAAY,OAAO,EAAA,CAAE;AAAA,MACvF,oBAAC,QAAA,EAAO,SAAS,UAAU,aAAa,aAAa,WAAW,MAAM,IAAI,UAAU,SAAS,UAAW,UAAA,EAAE,QAAQ,GAAE;AAAA,MACnH;AAAA,IAAA,EAAA,CACL,EAAA,CAER;AAAA,IACC,KAAK,cAAc,oBAAC,YAAA,EAAW,SAAQ,WAAU,OAAM,iBAAiB,UAAA,KAAK,WAAA,CAAW;AAAA,EAAA,GAC7F;AAER;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useToolkitTranslation } from "../../toolkit/useToolkitTranslation.js";
|
|
4
|
+
import Box from "@mui/material/Box";
|
|
5
|
+
import CircularProgress from "@mui/material/CircularProgress";
|
|
6
|
+
function FullPageLoader({ texts } = {}) {
|
|
7
|
+
const { t } = useToolkitTranslation("common", texts);
|
|
8
|
+
return /* @__PURE__ */ jsx(Box, { role: "status", "aria-live": "polite", sx: { display: "grid", placeItems: "center", minHeight: "100vh", bgcolor: "background.default" }, children: /* @__PURE__ */ jsx(CircularProgress, { "aria-label": t("status.loading") }) });
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
FullPageLoader as default
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=FullPageLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FullPageLoader.js","sources":["../../../src/ui/layout/FullPageLoader.jsx"],"sourcesContent":["// Indicador de carga a pantalla completa, mientras se sabe si hay sesión.\n// Sin él, el formulario de login parpadea medio segundo antes de que aparezca la pantalla de quien ya entró.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useToolkitTranslation} from '@/toolkit/useToolkitTranslation.js';\nimport Box from '@mui/material/Box';\nimport CircularProgress from '@mui/material/CircularProgress';\n\n/**\n * @param {object} [props]\n * @param {object} [props.texts] los textos que cambian, con la forma de `common` en los textos del paquete\n */\nexport default function FullPageLoader({texts} = {}) {\n const {t} = useToolkitTranslation('common', texts);\n\n return (\n <Box role=\"status\" aria-live=\"polite\" sx={{display: 'grid', placeItems: 'center', minHeight: '100vh', bgcolor: 'background.default'}}>\n <CircularProgress aria-label={t('status.loading')} />\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;AAYA,SAAwB,eAAe,EAAC,MAAA,IAAS,IAAI;AACjD,QAAM,EAAC,EAAA,IAAK,sBAAsB,UAAU,KAAK;AAEjD,SACI,oBAAC,OAAI,MAAK,UAAS,aAAU,UAAS,IAAI,EAAC,SAAS,QAAQ,YAAY,UAAU,WAAW,SAAS,SAAS,qBAAA,GAC3G,UAAA,oBAAC,oBAAiB,cAAY,EAAE,gBAAgB,EAAA,CAAG,EAAA,CACvD;AAER;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect } from "react";
|
|
4
|
+
import { useTheme } from "@mui/material/styles";
|
|
5
|
+
import { isGlassTheme, GLASS_LENS, lensDisplacementMapOf } from "../../theme/glassSurface.js";
|
|
6
|
+
let mountedFilterCount = 0;
|
|
7
|
+
function isChromiumBrowser() {
|
|
8
|
+
return Boolean(navigator.userAgentData?.brands?.some((entry) => entry.brand === "Chromium"));
|
|
9
|
+
}
|
|
10
|
+
function GlassLensFilter() {
|
|
11
|
+
const theme = useTheme();
|
|
12
|
+
const isGlass = isGlassTheme(theme);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (!isGlass || !isChromiumBrowser()) {
|
|
15
|
+
return void 0;
|
|
16
|
+
}
|
|
17
|
+
mountedFilterCount += 1;
|
|
18
|
+
document.body.dataset.glassLens = "on";
|
|
19
|
+
return () => {
|
|
20
|
+
mountedFilterCount -= 1;
|
|
21
|
+
if (mountedFilterCount === 0) {
|
|
22
|
+
delete document.body.dataset.glassLens;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}, [isGlass]);
|
|
26
|
+
if (!isGlass) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", focusable: "false", width: "0", height: "0", style: { position: "absolute", width: 0, height: 0, overflow: "hidden" }, children: Object.values(GLASS_LENS).map((lens) => (
|
|
30
|
+
// objectBoundingBox: el mapa se estira al tamaño de cada vidrio, sea un chip o la barra entera
|
|
31
|
+
/* @__PURE__ */ jsxs(
|
|
32
|
+
"filter",
|
|
33
|
+
{
|
|
34
|
+
id: lens.filterId,
|
|
35
|
+
x: "0",
|
|
36
|
+
y: "0",
|
|
37
|
+
width: "1",
|
|
38
|
+
height: "1",
|
|
39
|
+
primitiveUnits: "objectBoundingBox",
|
|
40
|
+
colorInterpolationFilters: "sRGB",
|
|
41
|
+
children: [
|
|
42
|
+
/* @__PURE__ */ jsx("feImage", { result: "lensMap", x: "0", y: "0", width: "1", height: "1", preserveAspectRatio: "none", href: lensDisplacementMapOf(lens.edgeFraction) }),
|
|
43
|
+
/* @__PURE__ */ jsx("feDisplacementMap", { in: "SourceGraphic", in2: "lensMap", scale: lens.scale, xChannelSelector: "R", yChannelSelector: "G" })
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
lens.filterId
|
|
47
|
+
)
|
|
48
|
+
)) });
|
|
49
|
+
}
|
|
50
|
+
export {
|
|
51
|
+
GlassLensFilter as default
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=GlassLensFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlassLensFilter.js","sources":["../../../src/ui/layout/GlassLensFilter.jsx"],"sourcesContent":["// El LENTE del vidrio líquido (glassSurface.js, lensRulesOf): los dos filtros SVG que doblan lo de atrás en la orilla del\n// vidrio, uno para los controles chicos y otro para los paneles, y la marca en <body> que prende el lente en el tema.\n//\n// Va una vez en la página: AppLayout y AuthLayout ya lo ponen; una pantalla propia fuera de ellos lo pone con\n// <GlassLensFilter />. Sin el vidrio en el tema no pinta nada.\n//\n// La marca solo se pone en Chrome y sus parientes (Edge, Brave, Arc), los únicos que pintan un filtro SVG en\n// backdrop-filter: Firefox lo acepta sin pintarlo (el vidrio se quedaría sin desenfoque) y Safari no lo entiende. En ellos\n// el vidrio sigue esmerilado.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useEffect} from 'react';\nimport {useTheme} from '@mui/material/styles';\n\nimport {GLASS_LENS, isGlassTheme, lensDisplacementMapOf} from '@/theme/glassSurface.js';\n\n// cuántos GlassLensFilter hay montados: la marca se quita hasta que se va el último\nlet mountedFilterCount = 0;\n\n/**\n * Si el navegador es de la familia de Chrome (Chromium), el único que pinta el lente.\n *\n * @returns {boolean}\n */\nfunction isChromiumBrowser() {\n return Boolean(navigator.userAgentData?.brands?.some((entry) => entry.brand === 'Chromium'));\n}\n\nexport default function GlassLensFilter() {\n const theme = useTheme();\n const isGlass = isGlassTheme(theme);\n\n useEffect(() => {\n if (!isGlass || !isChromiumBrowser()) {\n return undefined;\n }\n mountedFilterCount += 1;\n document.body.dataset.glassLens = 'on';\n return () => {\n mountedFilterCount -= 1;\n if (mountedFilterCount === 0) {\n delete document.body.dataset.glassLens;\n }\n };\n }, [isGlass]);\n\n // guard clause: sin vidrio en el tema no hace falta ningún filtro\n if (!isGlass) {\n return null;\n }\n\n return (\n <svg aria-hidden=\"true\" focusable=\"false\" width=\"0\" height=\"0\" style={{position: 'absolute', width: 0, height: 0, overflow: 'hidden'}}>\n {Object.values(GLASS_LENS).map((lens) => (\n // objectBoundingBox: el mapa se estira al tamaño de cada vidrio, sea un chip o la barra entera\n <filter key={lens.filterId} id={lens.filterId} x=\"0\" y=\"0\" width=\"1\" height=\"1\" primitiveUnits=\"objectBoundingBox\"\n colorInterpolationFilters=\"sRGB\">\n <feImage result=\"lensMap\" x=\"0\" y=\"0\" width=\"1\" height=\"1\" preserveAspectRatio=\"none\" href={lensDisplacementMapOf(lens.edgeFraction)} />\n <feDisplacementMap in=\"SourceGraphic\" in2=\"lensMap\" scale={lens.scale} xChannelSelector=\"R\" yChannelSelector=\"G\" />\n </filter>\n ))}\n </svg>\n );\n}\n"],"names":[],"mappings":";;;;;AAiBA,IAAI,qBAAqB;AAOzB,SAAS,oBAAoB;AACzB,SAAO,QAAQ,UAAU,eAAe,QAAQ,KAAK,CAAC,UAAU,MAAM,UAAU,UAAU,CAAC;AAC/F;AAEA,SAAwB,kBAAkB;AACtC,QAAM,QAAQ,SAAA;AACd,QAAM,UAAU,aAAa,KAAK;AAElC,YAAU,MAAM;AACZ,QAAI,CAAC,WAAW,CAAC,qBAAqB;AAClC,aAAO;AAAA,IACX;AACA,0BAAsB;AACtB,aAAS,KAAK,QAAQ,YAAY;AAClC,WAAO,MAAM;AACT,4BAAsB;AACtB,UAAI,uBAAuB,GAAG;AAC1B,eAAO,SAAS,KAAK,QAAQ;AAAA,MACjC;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,OAAO,CAAC;AAGZ,MAAI,CAAC,SAAS;AACV,WAAO;AAAA,EACX;AAEA,SACI,oBAAC,OAAA,EAAI,eAAY,QAAO,WAAU,SAAQ,OAAM,KAAI,QAAO,KAAI,OAAO,EAAC,UAAU,YAAY,OAAO,GAAG,QAAQ,GAAG,UAAU,SAAA,GACvH,UAAA,OAAO,OAAO,UAAU,EAAE,IAAI,CAAC;AAAA;AAAA,IAE5B;AAAA,MAAC;AAAA,MAAA;AAAA,QAA2B,IAAI,KAAK;AAAA,QAAU,GAAE;AAAA,QAAI,GAAE;AAAA,QAAI,OAAM;AAAA,QAAI,QAAO;AAAA,QAAI,gBAAe;AAAA,QACvF,2BAA0B;AAAA,QAC9B,UAAA;AAAA,UAAA,oBAAC,aAAQ,QAAO,WAAU,GAAE,KAAI,GAAE,KAAI,OAAM,KAAI,QAAO,KAAI,qBAAoB,QAAO,MAAM,sBAAsB,KAAK,YAAY,GAAG;AAAA,UACtI,oBAAC,qBAAA,EAAkB,IAAG,iBAAgB,KAAI,WAAU,OAAO,KAAK,OAAO,kBAAiB,KAAI,kBAAiB,IAAA,CAAI;AAAA,QAAA;AAAA,MAAA;AAAA,MAHxG,KAAK;AAAA,IAAA;AAAA,GAKrB,GACL;AAER;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import Paper from "@mui/material/Paper";
|
|
4
|
+
import { GLASS_PANEL_RADIUS_PIXELS, isGlassTheme, glassStylesOf } from "../../theme/glassSurface.js";
|
|
5
|
+
const SOLID_FLOATING_ELEVATION = 8;
|
|
6
|
+
function floatingSurfaceOf(theme) {
|
|
7
|
+
return {
|
|
8
|
+
borderRadius: `${GLASS_PANEL_RADIUS_PIXELS}px`,
|
|
9
|
+
...isGlassTheme(theme) ? glassStylesOf(theme) : { boxShadow: theme.shadows[SOLID_FLOATING_ELEVATION] }
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function GlassPanel({ children, sx, ...paperProps }) {
|
|
13
|
+
return /* @__PURE__ */ jsx(Paper, { elevation: 0, ...paperProps, sx: [floatingSurfaceOf, ...Array.isArray(sx) ? sx : [sx]], children });
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
GlassPanel as default
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=GlassPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlassPanel.js","sources":["../../../src/ui/layout/GlassPanel.jsx"],"sourcesContent":["// Un panel que flota sobre el contenido: los controles encima de un mapa, una barra de acciones pegada abajo, un letrero\n// encima de una foto. Es de vidrio si el tema lo trae prendido (createToolkitTheme({glass: true})) y una tarjeta con sombra\n// si no: la pantalla se escribe una vez y sirve con los dos temas.\n//\n// No es para el contenido (una ficha, un formulario, una tabla): la guía del vidrio pide el texto largo sobre superficies\n// sólidas. Para eso está SectionCard.\n//\n// <GlassPanel sx={{position: 'absolute', top: 16, right: 16, p: 1}}>…los botones del mapa…</GlassPanel>\n//\n// Genérico del paquete: function (regla de la casa).\nimport Paper from '@mui/material/Paper';\n\nimport {GLASS_PANEL_RADIUS_PIXELS, glassStylesOf, isGlassTheme} from '@/theme/glassSurface.js';\n\n// sin vidrio, la sombra de lo que flota (la misma de los menús de MUI)\nconst SOLID_FLOATING_ELEVATION = 8;\n\n/**\n * El panel con su superficie: vidrio o sombra, según el tema.\n *\n * @param {object} theme\n * @returns {object}\n */\nfunction floatingSurfaceOf(theme) {\n return {\n borderRadius: `${GLASS_PANEL_RADIUS_PIXELS}px`,\n ...(isGlassTheme(theme) ? glassStylesOf(theme) : {boxShadow: theme.shadows[SOLID_FLOATING_ELEVATION]}),\n };\n}\n\n/**\n * @param {object} props\n * @param {import('react').ReactNode} props.children\n * @param {object|Function|Array} [props.sx] estilos propios: se suman y ganan\n * @param {import('react').ElementType} [props.component] por omisión 'div'\n */\nexport default function GlassPanel({children, sx, ...paperProps}) {\n return (\n <Paper elevation={0} {...paperProps} sx={[floatingSurfaceOf, ...(Array.isArray(sx) ? sx : [sx])]}>\n {children}\n </Paper>\n );\n}\n"],"names":[],"mappings":";;;;AAeA,MAAM,2BAA2B;AAQjC,SAAS,kBAAkB,OAAO;AAC9B,SAAO;AAAA,IACH,cAAc,GAAG,yBAAyB;AAAA,IAC1C,GAAI,aAAa,KAAK,IAAI,cAAc,KAAK,IAAI,EAAC,WAAW,MAAM,QAAQ,wBAAwB,EAAA;AAAA,EAAC;AAE5G;AAQA,SAAwB,WAAW,EAAC,UAAU,IAAI,GAAG,cAAa;AAC9D,6BACK,OAAA,EAAM,WAAW,GAAI,GAAG,YAAY,IAAI,CAAC,mBAAmB,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,CAAC,EAAE,CAAE,GAC1F,UACL;AAER;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useRef } from "react";
|
|
4
|
+
import Box from "@mui/material/Box";
|
|
5
|
+
import Stack from "@mui/material/Stack";
|
|
6
|
+
import Typography from "@mui/material/Typography";
|
|
7
|
+
import { useRegisterPageTitle } from "../../appShell/pageTitle.js";
|
|
8
|
+
import DocumentTitle from "../navigation/DocumentTitle.js";
|
|
9
|
+
function PageHeader({ title, eyebrow, subtitle, action, documentTitle }) {
|
|
10
|
+
const titleRef = useRef(null);
|
|
11
|
+
useRegisterPageTitle(title, titleRef);
|
|
12
|
+
return /* @__PURE__ */ jsxs(Stack, { component: "header", spacing: 1.25, sx: { alignItems: "center", textAlign: "center", py: { xs: 3, md: 4 } }, children: [
|
|
13
|
+
/* @__PURE__ */ jsx(DocumentTitle, { title: documentTitle ?? title }),
|
|
14
|
+
eyebrow && /* @__PURE__ */ jsx(Typography, { variant: "overline", color: "text.secondary", children: eyebrow }),
|
|
15
|
+
/* @__PURE__ */ jsx(Typography, { ref: titleRef, variant: "h4", component: "h1", children: title }),
|
|
16
|
+
subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body1", color: "text.secondary", sx: { maxWidth: 640 }, children: subtitle }),
|
|
17
|
+
action && /* @__PURE__ */ jsx(Box, { sx: { pt: 1.5 }, children: action })
|
|
18
|
+
] });
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
PageHeader as default
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=PageHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageHeader.js","sources":["../../../src/ui/layout/PageHeader.jsx"],"sourcesContent":["// Encabezado centrado de una pantalla: eyebrow en versalitas, título, subtítulo y una acción en píldora\n// (p. ej. VENTAS · MÓDULO 1 / Pedidos del mes / ... / Nuevo pedido).\n//\n// También pone el título de la pestaña (DocumentTitle) y, dentro de AppLayout, sube el título a la barra al deslizar.\n// Para una pantalla de trabajo (lista, formulario) se ve mejor PageHeading, el de las plantillas de MUI.\n//\n// Genérico del paquete: function (regla de la casa).\nimport {useRef} from 'react';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport {useRegisterPageTitle} from '@/appShell/pageTitle.jsx';\nimport DocumentTitle from '@/ui/navigation/DocumentTitle.jsx';\n\n/**\n * @param {object} props\n * @param {string} props.title texto ya traducido\n * @param {string} [props.eyebrow]\n * @param {import('react').ReactNode} [props.subtitle]\n * @param {import('react').ReactNode} [props.action] normalmente un <Button variant=\"contained\" shape=\"pill\">\n * @param {string} [props.documentTitle] título de la pestaña si difiere del visible\n */\nexport default function PageHeader({title, eyebrow, subtitle, action, documentTitle}) {\n const titleRef = useRef(null);\n useRegisterPageTitle(title, titleRef);\n return (\n <Stack component=\"header\" spacing={1.25} sx={{alignItems: 'center', textAlign: 'center', py: {xs: 3, md: 4}}}>\n <DocumentTitle title={documentTitle ?? title} />\n {/* text.secondary y no text.disabled: el eyebrow se lee, WCAG no lo exime (disabled daba 2.57:1 sobre el lienzo) */}\n {eyebrow && (\n <Typography variant=\"overline\" color=\"text.secondary\">{eyebrow}</Typography>\n )}\n <Typography ref={titleRef} variant=\"h4\" component=\"h1\">{title}</Typography>\n {subtitle && (\n <Typography variant=\"body1\" color=\"text.secondary\" sx={{maxWidth: 640}}>{subtitle}</Typography>\n )}\n {action && <Box sx={{pt: 1.5}}>{action}</Box>}\n </Stack>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAuBA,SAAwB,WAAW,EAAC,OAAO,SAAS,UAAU,QAAQ,iBAAgB;AAClF,QAAM,WAAW,OAAO,IAAI;AAC5B,uBAAqB,OAAO,QAAQ;AACpC,8BACK,OAAA,EAAM,WAAU,UAAS,SAAS,MAAM,IAAI,EAAC,YAAY,UAAU,WAAW,UAAU,IAAI,EAAC,IAAI,GAAG,IAAI,OACrG,UAAA;AAAA,IAAA,oBAAC,eAAA,EAAc,OAAO,iBAAiB,MAAA,CAAO;AAAA,IAE7C,WACG,oBAAC,YAAA,EAAW,SAAQ,YAAW,OAAM,kBAAkB,UAAA,SAAQ;AAAA,IAEnE,oBAAC,cAAW,KAAK,UAAU,SAAQ,MAAK,WAAU,MAAM,UAAA,MAAA,CAAM;AAAA,IAC7D,YACG,oBAAC,YAAA,EAAW,SAAQ,SAAQ,OAAM,kBAAiB,IAAI,EAAC,UAAU,IAAA,GAAO,UAAA,SAAA,CAAS;AAAA,IAErF,8BAAW,KAAA,EAAI,IAAI,EAAC,IAAI,IAAA,GAAO,UAAA,OAAA,CAAO;AAAA,EAAA,GAC3C;AAER;"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useRef } from "react";
|
|
4
|
+
import { useToolkitTranslation } from "../../toolkit/useToolkitTranslation.js";
|
|
5
|
+
import { useToolkitNavigation } from "../../toolkit/toolkitContext.js";
|
|
6
|
+
import Box from "@mui/material/Box";
|
|
7
|
+
import Stack from "@mui/material/Stack";
|
|
8
|
+
import Typography from "@mui/material/Typography";
|
|
9
|
+
import { useAppMenu } from "../../appShell/appMenuContext.js";
|
|
10
|
+
import BarActions from "../../appShell/BarActions.js";
|
|
11
|
+
import { useBarActionsSlot } from "../../appShell/barActionsSlot.js";
|
|
12
|
+
import { menuItemLabelOf } from "../../appShell/menuItemText.js";
|
|
13
|
+
import { useRegisterPageTitle } from "../../appShell/pageTitle.js";
|
|
14
|
+
import { menuBreadcrumbsOf } from "../../navigation/appMenu.js";
|
|
15
|
+
import PageBreadcrumbs from "../navigation/PageBreadcrumbs.js";
|
|
16
|
+
import DocumentTitle from "../navigation/DocumentTitle.js";
|
|
17
|
+
const MIN_BREADCRUMBS = 2;
|
|
18
|
+
function PageHeading({ title, description, breadcrumbs, actions, documentTitle, texts }) {
|
|
19
|
+
const { t } = useToolkitTranslation("layout", texts);
|
|
20
|
+
const { useLocation } = useToolkitNavigation();
|
|
21
|
+
const { pathname } = useLocation();
|
|
22
|
+
const { menuItems } = useAppMenu();
|
|
23
|
+
const titleRef = useRef(null);
|
|
24
|
+
useRegisterPageTitle(title, titleRef);
|
|
25
|
+
const { usesCapsules } = useBarActionsSlot();
|
|
26
|
+
const inlineActionsSx = { display: "flex", gap: 1, flexWrap: "wrap", flex: { xs: "1 1 auto", sm: "0 0 auto" }, "& > .MuiButton-root": { width: { xs: "100%", sm: "auto" } } };
|
|
27
|
+
const isActionsCapsule = Boolean(actions) && usesCapsules;
|
|
28
|
+
const crumbs = breadcrumbs === false ? [] : breadcrumbs ?? menuBreadcrumbsOf(menuItems, pathname).map((menuItem) => ({ label: menuItemLabelOf(menuItem, t), to: menuItem.to }));
|
|
29
|
+
return /* @__PURE__ */ jsxs(Box, { component: "header", sx: { mb: 3 }, children: [
|
|
30
|
+
/* @__PURE__ */ jsx(DocumentTitle, { title: documentTitle ?? title }),
|
|
31
|
+
crumbs.length >= MIN_BREADCRUMBS && /* @__PURE__ */ jsx(Box, { sx: { mb: 1 }, children: /* @__PURE__ */ jsx(PageBreadcrumbs, { items: crumbs }) }),
|
|
32
|
+
/* @__PURE__ */ jsxs(
|
|
33
|
+
Stack,
|
|
34
|
+
{
|
|
35
|
+
direction: isActionsCapsule ? "row" : { xs: "column", sm: "row" },
|
|
36
|
+
spacing: { xs: 1.5, sm: 2 },
|
|
37
|
+
sx: { alignItems: isActionsCapsule ? "flex-start" : { xs: "stretch", sm: "flex-start" }, justifyContent: "space-between" },
|
|
38
|
+
children: [
|
|
39
|
+
/* @__PURE__ */ jsx(Typography, { ref: titleRef, variant: "h4", component: "h1", sx: { minWidth: 0 }, children: title }),
|
|
40
|
+
isActionsCapsule && /* @__PURE__ */ jsx(BarActions, { label: title, inlineSx: { flexShrink: 0 }, children: actions }),
|
|
41
|
+
actions && !usesCapsules && /* @__PURE__ */ jsx(Box, { sx: inlineActionsSx, children: actions })
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
),
|
|
45
|
+
description && /* @__PURE__ */ jsx(Typography, { variant: "body1", color: "text.secondary", component: "div", sx: { mt: 0.75, maxWidth: 760 }, children: description })
|
|
46
|
+
] });
|
|
47
|
+
}
|
|
48
|
+
export {
|
|
49
|
+
PageHeading as default
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=PageHeading.js.map
|