@stackcraftmx/calcita 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/dist/api/createApiClient.js +5 -0
- package/dist/api/createApiClient.js.map +1 -1
- package/dist/appShell/AccountMenu.js +15 -23
- package/dist/appShell/AccountMenu.js.map +1 -1
- package/dist/appShell/AppLayout.js +15 -8
- package/dist/appShell/AppLayout.js.map +1 -1
- package/dist/appShell/HeaderTools.js +4 -2
- package/dist/appShell/HeaderTools.js.map +1 -1
- package/dist/appShell/MenuLinks.js +36 -0
- package/dist/appShell/MenuLinks.js.map +1 -0
- package/dist/appShell/MobileTabBar.js +3 -3
- package/dist/appShell/MobileTabBar.js.map +1 -1
- package/dist/appShell/SettingsMenu.js +10 -5
- package/dist/appShell/SettingsMenu.js.map +1 -1
- package/dist/appShell/SideMenu.js +5 -3
- package/dist/appShell/SideMenu.js.map +1 -1
- package/dist/appShell/SideMenuEntry.js +3 -3
- package/dist/appShell/SideMenuEntry.js.map +1 -1
- package/dist/appShell/SubmenuActionsMenu.js +3 -4
- package/dist/appShell/SubmenuActionsMenu.js.map +1 -1
- package/dist/appShell/TopMenu.js +5 -6
- package/dist/appShell/TopMenu.js.map +1 -1
- package/dist/appShell/Wordmark.js +11 -0
- package/dist/appShell/Wordmark.js.map +1 -0
- package/dist/appShell/menuItemText.js +4 -0
- package/dist/appShell/menuItemText.js.map +1 -1
- package/dist/index.js +8 -4
- package/dist/navigation/appMenu.js +13 -1
- package/dist/navigation/appMenu.js.map +1 -1
- package/dist/observability/logger.js +18 -0
- package/dist/observability/logger.js.map +1 -1
- package/dist/theme/components/MuiAppBar.js +6 -5
- package/dist/theme/components/MuiAppBar.js.map +1 -1
- package/dist/theme/components/glassComponents.js +32 -31
- package/dist/theme/components/glassComponents.js.map +1 -1
- package/dist/theme/components/minimalComponents.js +28 -9
- package/dist/theme/components/minimalComponents.js.map +1 -1
- package/dist/theme/createToolkitTheme.js +6 -3
- package/dist/theme/createToolkitTheme.js.map +1 -1
- package/dist/theme/glassSurface.js +36 -38
- package/dist/theme/glassSurface.js.map +1 -1
- package/dist/theme/lightDarkStyles.js +48 -0
- package/dist/theme/lightDarkStyles.js.map +1 -0
- package/dist/types/api/createApiClient.d.ts +17 -0
- package/dist/types/appShell/AppLayout.d.ts +5 -1
- package/dist/types/appShell/MenuLinks.d.ts +17 -0
- package/dist/types/appShell/SettingsMenu.d.ts +3 -1
- package/dist/types/appShell/SideMenu.d.ts +3 -1
- package/dist/types/appShell/Wordmark.d.ts +6 -0
- package/dist/types/appShell/menuItemText.d.ts +16 -0
- package/dist/types/index.d.ts +4 -4
- package/dist/types/navigation/appMenu.d.ts +8 -0
- package/dist/types/observability/logger.d.ts +13 -0
- package/dist/types/theme/components/MuiAppBar.d.ts +3 -1
- package/dist/types/theme/components/glassComponents.d.ts +5 -0
- package/dist/types/theme/components/minimalComponents.d.ts +49 -3
- package/dist/types/theme/createToolkitTheme.d.ts +21 -1
- package/dist/types/theme/lightDarkStyles.d.ts +8 -0
- package/package.json +3 -2
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
* @param {boolean} [props.showLanguage]
|
|
5
5
|
* @param {boolean} [props.showColorScheme]
|
|
6
6
|
* @param {import('react').ReactNode} [props.extraSettings] los ajustes del proyecto, debajo de los del paquete
|
|
7
|
+
* @param {object[]} [props.menuLinks] las ligas propias (accountMenuItems), al final
|
|
7
8
|
*/
|
|
8
|
-
export default function SettingsMenu({ showFontSize, showLanguage, showColorScheme, extraSettings }: {
|
|
9
|
+
export default function SettingsMenu({ showFontSize, showLanguage, showColorScheme, extraSettings, menuLinks }: {
|
|
9
10
|
showFontSize?: boolean;
|
|
10
11
|
showLanguage?: boolean;
|
|
11
12
|
showColorScheme?: boolean;
|
|
12
13
|
extraSettings?: import('react').ReactNode;
|
|
14
|
+
menuLinks?: object[];
|
|
13
15
|
}): import("react").JSX.Element;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @param {object} props
|
|
3
3
|
* @param {import('react').ReactNode} [props.logo] el logo chico (28 px), el que se queda con el menú encogido
|
|
4
|
+
* @param {import('react').ReactNode} [props.wordmark] el logo ancho (en lugar del logo y el nombre arriba)
|
|
4
5
|
* @param {string} props.brandName el nombre de la app
|
|
5
6
|
* @param {string} [props.brandCaption] el renglón chico debajo del nombre («Panel de administración»)
|
|
6
7
|
* @param {string} props.homePath
|
|
@@ -14,8 +15,9 @@
|
|
|
14
15
|
* @param {import('react').ReactNode} [props.railTop] arriba del menú encogido que hace de barra: la ☰ y el logo
|
|
15
16
|
* @param {import('react').ReactNode} [props.railBottom] abajo de ese menú: los ajustes y la cuenta
|
|
16
17
|
*/
|
|
17
|
-
export default function SideMenu({ logo, brandName, brandCaption, homePath, menuItems, activeItem, collapsed, footer, showBrand, onNavigate, railTop, railBottom, menuBadges, }: {
|
|
18
|
+
export default function SideMenu({ logo, wordmark, brandName, brandCaption, homePath, menuItems, activeItem, collapsed, footer, showBrand, onNavigate, railTop, railBottom, menuBadges, }: {
|
|
18
19
|
logo?: import('react').ReactNode;
|
|
20
|
+
wordmark?: import('react').ReactNode;
|
|
19
21
|
brandName: string;
|
|
20
22
|
brandCaption?: string;
|
|
21
23
|
homePath: string;
|
|
@@ -53,3 +53,19 @@ export declare function menuSectionsOf(menuItems: object[], t: (key: string) =>
|
|
|
53
53
|
* @returns {string}
|
|
54
54
|
*/
|
|
55
55
|
export declare function initialsOf(fullName: string | null | undefined): string;
|
|
56
|
+
/**
|
|
57
|
+
* Las props de la liga de una entrada: el router para una pantalla de la app (to) y una dirección normal para otro sistema
|
|
58
|
+
* (href: el sistema que ya existía, otra app de la empresa). Con href la página se carga completa, como cualquier liga.
|
|
59
|
+
*
|
|
60
|
+
* @param {{to?: string, href?: string}} menuItem
|
|
61
|
+
* @param {import('react').ElementType} RouterLink el Link de la navegación del proyecto
|
|
62
|
+
* @returns {{component: import('react').ElementType|string, to?: string, href?: string}}
|
|
63
|
+
*/
|
|
64
|
+
export declare function menuLinkPropsOf(menuItem: {
|
|
65
|
+
to?: string;
|
|
66
|
+
href?: string;
|
|
67
|
+
}, RouterLink: import('react').ElementType): {
|
|
68
|
+
component: import('react').ElementType | string;
|
|
69
|
+
to?: string;
|
|
70
|
+
href?: string;
|
|
71
|
+
};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export { ConfirmDialog, ModalWaiting, NEW_BUILD_NOTICE_VARIANT, NewBuildNotice,
|
|
|
11
11
|
export { DEFAULT_FILE_TYPES, DOWNLOAD_STATUS, DownloadManager, UNKNOWN_FILE_TYPE, cancelDownload, clearFinishedDownloads, downloadsMachine, startDownload, useFileTypes, } from './downloads/index.js';
|
|
12
12
|
export { THEME_LOOK, TOP_BAR, createToolkitTheme } from './theme/createToolkitTheme.js';
|
|
13
13
|
export { isAndroidDevice } from './theme/androidDevice.js';
|
|
14
|
-
export { MINIMAL_BACKGROUND } from './theme/components/minimalComponents.js';
|
|
14
|
+
export { MINIMAL_BACKGROUND, MINIMAL_TONES } from './theme/components/minimalComponents.js';
|
|
15
15
|
export { STACKCRAFT, stackcraftDarkPalette, stackcraftLightPalette } from './theme/stackcraftPalette.js';
|
|
16
16
|
export { toolkitComponents } from './theme/toolkitComponents.js';
|
|
17
17
|
export { mergeComponents } from './theme/mergeComponents.js';
|
|
@@ -32,7 +32,7 @@ export { DRAWER_WIDTH_COLLAPSED, DRAWER_WIDTH_EXPANDED, MAIN_CONTENT_ID } from '
|
|
|
32
32
|
export { useAppMenu } from './appShell/appMenuContext.js';
|
|
33
33
|
export { usePageTitle } from './appShell/pageTitle.js';
|
|
34
34
|
export { initialsOf, menuItemDescriptionOf, menuItemLabelOf, menuItemSectionOf, menuSectionsOf } from './appShell/menuItemText.js';
|
|
35
|
-
export { activeMenuItemOf, composeMenu, menuBadgeOf, menuBreadcrumbsOf, mobileTabsOf, parentMenuItemOf, screenMenuItemsOf } from './navigation/appMenu.js';
|
|
35
|
+
export { activeMenuItemOf, composeMenu, menuBadgeOf, menuBreadcrumbsOf, menuItemsWithIconsOf, mobileTabsOf, parentMenuItemOf, screenMenuItemsOf, } from './navigation/appMenu.js';
|
|
36
36
|
export { menuBadgesFrom, useMenuBadges } from './navigation/useMenuBadges.js';
|
|
37
37
|
export { allowOnlyUnrestricted, createAccessChecker } from './access/accessRules.js';
|
|
38
38
|
export { default as Can } from './access/Can.js';
|
|
@@ -70,12 +70,12 @@ export { REDIRECT_PARAM, readRedirectParam, safeInternalPath, withRedirect } fro
|
|
|
70
70
|
export { recallListUrl, rememberListUrl, useRememberListUrl } from './lastListUrl.js';
|
|
71
71
|
export { currentHistoryIndex, forgetPageName, pageNameAt, rememberPageName, useNavigationTrail, usePageName } from './navigationTrail.js';
|
|
72
72
|
export { periodRangeIsValid, rangeEndAfterStartChange, rangeEndOptionsOf } from './periodRanges.js';
|
|
73
|
-
export { createLogger, setLogLevel } from './observability/logger.js';
|
|
73
|
+
export { addLogSink, createLogger, setLogLevel } from './observability/logger.js';
|
|
74
74
|
export { isNewBuildPublished, reportPublishedBuild, useNewBuildPublished } from './observability/publishedBuild.js';
|
|
75
75
|
export { BUILD_WATCH_ACTION, buildWatchActionOf, publishedBuildIdOf } from './observability/buildWatch.js';
|
|
76
76
|
export { usePublishedBuildWatch } from './observability/usePublishedBuildWatch.js';
|
|
77
77
|
export { API_ERROR_STATUS, ApiError } from './api/ApiError.js';
|
|
78
|
-
export { API_RESPONSE_PARSE, apiUrlOf, createApiClient } from './api/createApiClient.js';
|
|
78
|
+
export { API_RESPONSE_PARSE, apiErrorOf, apiUrlOf, createApiClient } from './api/createApiClient.js';
|
|
79
79
|
export { isStaleChunkError, recoverFromStaleChunk } from './api/staleChunks.js';
|
|
80
80
|
export { ACCOUNT_EVENT_KIND, default as ActivityLog } from './security/ActivityLog.js';
|
|
81
81
|
export { default as RecoveryCodesDialog } from './security/RecoveryCodesDialog.js';
|
|
@@ -11,6 +11,14 @@ export declare function composeMenu(menuModules: Record<string, any> | any[], {
|
|
|
11
11
|
canAccess?: (access: object | undefined) => boolean;
|
|
12
12
|
context?: object;
|
|
13
13
|
}): object[];
|
|
14
|
+
/**
|
|
15
|
+
* Las entradas con su ícono como componente (Icon), que es lo que pintan las piezas del menú: el proyecto puede dar el
|
|
16
|
+
* componente o un ícono ya pintado (icon, por ejemplo <Iconify icon="mdi:bank" /> de un sistema que ya usaba iconify).
|
|
17
|
+
*
|
|
18
|
+
* @param {object[]} menuItems
|
|
19
|
+
* @returns {object[]}
|
|
20
|
+
*/
|
|
21
|
+
export declare function menuItemsWithIconsOf(menuItems: object[]): object[];
|
|
14
22
|
/**
|
|
15
23
|
* Las entradas que llevan a una pantalla, con las de los submenús (las de arriba primero).
|
|
16
24
|
*
|
|
@@ -6,6 +6,19 @@
|
|
|
6
6
|
* @returns {void}
|
|
7
7
|
*/
|
|
8
8
|
export declare function setLogLevel(level: 'error' | 'warn' | 'info' | 'debug'): void;
|
|
9
|
+
/**
|
|
10
|
+
* Una salida propia para lo que se anota (un reporte externo): recibe cada anotación que sale en consola, con su nivel.
|
|
11
|
+
*
|
|
12
|
+
* @param {(entry: {level: 'error'|'warn'|'info'|'debug', namespace: string, message: string, context?: object, timestamp: number}) => void} sink
|
|
13
|
+
* @returns {() => void} para quitarla
|
|
14
|
+
*/
|
|
15
|
+
export declare function addLogSink(sink: (entry: {
|
|
16
|
+
level: 'error' | 'warn' | 'info' | 'debug';
|
|
17
|
+
namespace: string;
|
|
18
|
+
message: string;
|
|
19
|
+
context?: object;
|
|
20
|
+
timestamp: number;
|
|
21
|
+
}) => void): () => void;
|
|
9
22
|
/**
|
|
10
23
|
* Logger que antepone [namespace] a cada mensaje.
|
|
11
24
|
*
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
export declare const WHITE_LABEL = "#FFFFFF";
|
|
2
|
+
export declare const MONOGRAM_GRAY: Readonly<{
|
|
3
|
+
light: "#6E6E73";
|
|
4
|
+
dark: "#636366";
|
|
5
|
+
}>;
|
|
1
6
|
/**
|
|
2
7
|
* @param {object} [options]
|
|
3
8
|
* @param {boolean} [options.surfaces] también el contenido (tarjetas, acordeón, avisos, tabla) con material; por omisión no
|
|
@@ -1,16 +1,62 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Los tonos del minimalista por omisión, los grises de Apple, en claro y en oscuro:
|
|
3
|
+
* - default: el fondo de la página (el gris agrupado);
|
|
4
|
+
* - paper: las tarjetas, un escalón arriba;
|
|
5
|
+
* - fill: el relleno de campos, grupos y botones sin color (más claro que el fondo en oscuro);
|
|
6
|
+
* - floating: lo que flota sobre el contenido (la barra de pestañas del teléfono, el aviso de versión nueva), un escalón
|
|
7
|
+
* más oscuro que las tarjetas. Del color de las tarjetas «se perdía» sobre ellas (lo dijo el autor de la primera barra
|
|
8
|
+
* de abajo del minimalista); así se distingue sin borde ni sombra, sobre tarjetas y sobre el fondo.
|
|
9
|
+
*/
|
|
10
|
+
export declare const MINIMAL_TONES: Readonly<{
|
|
11
|
+
light: Readonly<{
|
|
12
|
+
default: "#F2F2F7";
|
|
13
|
+
paper: "#FFFFFF";
|
|
14
|
+
fill: "rgba(118, 118, 128, 0.12)";
|
|
15
|
+
floating: "#E5E5EA";
|
|
16
|
+
}>;
|
|
17
|
+
dark: Readonly<{
|
|
18
|
+
default: "#000000";
|
|
19
|
+
paper: "#1C1C1E";
|
|
20
|
+
fill: "rgba(118, 118, 128, 0.24)";
|
|
21
|
+
floating: "#2C2C2E";
|
|
22
|
+
}>;
|
|
23
|
+
}>;
|
|
24
|
+
/** Los fondos del minimalista por omisión (los de MINIMAL_TONES): el gris agrupado de Apple y la tarjeta un escalón arriba. */
|
|
2
25
|
export declare const MINIMAL_BACKGROUND: Readonly<{
|
|
26
|
+
light: {
|
|
27
|
+
default: "#F2F2F7";
|
|
28
|
+
paper: "#FFFFFF";
|
|
29
|
+
};
|
|
30
|
+
dark: {
|
|
31
|
+
default: "#000000";
|
|
32
|
+
paper: "#1C1C1E";
|
|
33
|
+
};
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* Los tonos del minimalista con los del proyecto encima: lo que el proyecto no trae se queda con el gris de Apple.
|
|
37
|
+
*
|
|
38
|
+
* @param {{light?: object, dark?: object}} [projectTones] cualquiera de default, paper, fill y floating por modo
|
|
39
|
+
* @returns {{light: {default: string, paper: string, fill: string, floating: string}, dark: {default: string, paper: string, fill: string, floating: string}}}
|
|
40
|
+
*/
|
|
41
|
+
export declare function minimalTonesOf(projectTones?: {
|
|
42
|
+
light?: object;
|
|
43
|
+
dark?: object;
|
|
44
|
+
}): {
|
|
3
45
|
light: {
|
|
4
46
|
default: string;
|
|
5
47
|
paper: string;
|
|
48
|
+
fill: string;
|
|
49
|
+
floating: string;
|
|
6
50
|
};
|
|
7
51
|
dark: {
|
|
8
52
|
default: string;
|
|
9
53
|
paper: string;
|
|
54
|
+
fill: string;
|
|
55
|
+
floating: string;
|
|
10
56
|
};
|
|
11
|
-
}
|
|
57
|
+
};
|
|
12
58
|
/**
|
|
13
|
-
* La superficie de lo que flota en el minimalista, sólida, en claro y en oscuro.
|
|
59
|
+
* La superficie de lo que flota en el minimalista, sólida, en claro y en oscuro (el tono floating; ver MINIMAL_TONES).
|
|
14
60
|
*
|
|
15
61
|
* @param {object} theme
|
|
16
62
|
* @returns {object}
|
|
@@ -26,11 +26,17 @@ export declare const TOP_BAR: Readonly<{
|
|
|
26
26
|
* plano y tonal (sin bordes ni sombras: las superficies se separan por su tono; sin vidrio aunque se pida)
|
|
27
27
|
* @param {'capsules'|'band'} [options.bar] la barra de arriba con vidrio o con el minimalista (TOP_BAR): por omisión en
|
|
28
28
|
* cápsulas; 'band' la franja de lado a lado
|
|
29
|
+
* @param {{light?: {default?: string, paper?: string, fill?: string, floating?: string}, dark?: {default?: string, paper?: string, fill?: string, floating?: string}}} [options.minimalTones]
|
|
30
|
+
* los tonos del minimalista con los colores de la marca, por modo: default (el fondo de la página), paper (las tarjetas,
|
|
31
|
+
* un escalón arriba), fill (el relleno de campos, grupos y botones sin color) y floating (la barra de pestañas del
|
|
32
|
+
* teléfono y lo que flota). Lo que no se pase se queda con los grises de Apple (MINIMAL_TONES). OJO: con el minimalista
|
|
33
|
+
* el fondo de la página sale de aquí y no de la paleta (sin minimalTones, los grises de Apple aunque la paleta traiga
|
|
34
|
+
* su background)
|
|
29
35
|
* @param {object} [options.components] ajustes propios de componentes (se suman; en el mismo estilo ganan los del proyecto)
|
|
30
36
|
* @param {object} [options.overrides] cualquier otra cosa de createTheme (breakpoints, spacing…)
|
|
31
37
|
* @returns {object} el tema de MUI
|
|
32
38
|
*/
|
|
33
|
-
export declare function createToolkitTheme({ colorSchemes, colorSchemeSelector, fontFamily, glass, look, bar, components, overrides, }?: {
|
|
39
|
+
export declare function createToolkitTheme({ colorSchemes, colorSchemeSelector, fontFamily, glass, look, bar, minimalTones, components, overrides, }?: {
|
|
34
40
|
colorSchemes?: {
|
|
35
41
|
light?: object | boolean;
|
|
36
42
|
dark?: object | boolean;
|
|
@@ -43,6 +49,20 @@ export declare function createToolkitTheme({ colorSchemes, colorSchemeSelector,
|
|
|
43
49
|
};
|
|
44
50
|
look?: 'standard' | 'minimal';
|
|
45
51
|
bar?: 'capsules' | 'band';
|
|
52
|
+
minimalTones?: {
|
|
53
|
+
light?: {
|
|
54
|
+
default?: string;
|
|
55
|
+
paper?: string;
|
|
56
|
+
fill?: string;
|
|
57
|
+
floating?: string;
|
|
58
|
+
};
|
|
59
|
+
dark?: {
|
|
60
|
+
default?: string;
|
|
61
|
+
paper?: string;
|
|
62
|
+
fill?: string;
|
|
63
|
+
floating?: string;
|
|
64
|
+
};
|
|
65
|
+
};
|
|
46
66
|
components?: object;
|
|
47
67
|
overrides?: object;
|
|
48
68
|
}): object;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {object} theme el tema de MUI (su applyStyles sabe cómo se elige el modo: clase, atributo o media query)
|
|
3
|
+
* @param {object} lightStyles los estilos de claro (los de siempre)
|
|
4
|
+
* @param {object} darkStyles lo que cambia en oscuro
|
|
5
|
+
* @returns {object} los estilos para el tema: cada propiedad en la clase con su variable, y la regla de oscuro solo con las
|
|
6
|
+
* variables (más lo que no pudo ir en variable)
|
|
7
|
+
*/
|
|
8
|
+
export declare function lightDarkStylesOf(theme: object, lightStyles: object, darkStyles: object): object;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stackcraftmx/calcita",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"description": "Componentes y utilidades de React con MUI para arrancar proyectos rápido: tabla de servidor, diálogos, avisos, descargas, formularios, formatos y reportes en Excel.",
|
|
5
5
|
"license": "FSL-1.1-MIT",
|
|
6
6
|
"author": "calcifux",
|
|
@@ -130,7 +130,8 @@
|
|
|
130
130
|
"./kanban": {
|
|
131
131
|
"types": "./dist/types/kanban.d.ts",
|
|
132
132
|
"import": "./dist/kanban.js"
|
|
133
|
-
}
|
|
133
|
+
},
|
|
134
|
+
"./package.json": "./package.json"
|
|
134
135
|
},
|
|
135
136
|
"scripts": {
|
|
136
137
|
"prepublishOnly": "pnpm run check",
|