frontend-plus-react 0.7.0 → 0.8.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/CLAUDE.md +17 -1
- package/README.md +1 -0
- package/dist/index.cjs +614 -261
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +8 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +10 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.js +687 -334
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.css
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
/* src/components/grid/GenericDataGrid.css */
|
|
2
|
+
.rdg-light {
|
|
3
|
+
--rdg-border-color: #e0e0e0;
|
|
4
|
+
--rdg-header-background-color: #eceff1;
|
|
5
|
+
--rdg-row-hover-background-color: rgba(var(--primary-rgb, 25, 118, 210), 0.06);
|
|
6
|
+
--rdg-row-selected-background-color: rgba(var(--primary-rgb, 25, 118, 210), 0.12);
|
|
7
|
+
--rdg-row-selected-hover-background-color: rgba(var(--primary-rgb, 25, 118, 210), 0.16);
|
|
8
|
+
--rdg-selection-color: rgb(var(--primary-rgb, 25, 118, 210));
|
|
9
|
+
}
|
|
2
10
|
.fpr-celda {
|
|
3
11
|
position: absolute;
|
|
4
12
|
inset: 0;
|
package/dist/index.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/grid/GenericDataGrid.css","../src/App.css"],"sourcesContent":["/* src/components/grid/GenericDataGrid.css */\n\n/* Celda de datos (reemplaza al Box + Typography de MUI que se armaba en cada celda) */\n.fpr-celda {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 0 12px 0 8px;\n box-sizing: border-box;\n font-size: 0.875rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n transition: background-color 0.3s ease-in-out;\n}\n\n.fpr-celda-numerica {\n justify-content: flex-end;\n}\n\n/* Fila que se está borrando (antes era un style copiado en cada fila) */\n.fpr-fila-saliendo {\n opacity: 0;\n transition: opacity 0.4s ease-in-out;\n}\n\n/* Fila de detalle desplegada: una sola celda (colSpan) con la grilla anidada adentro */\n.fpr-fila-detalle > .rdg-cell {\n padding: 0;\n background-color: #f3f6fa;\n white-space: normal;\n /* react-data-grid recorta las celdas (overflow: clip, en un @layer): la grilla anidada\n puede ser más ancha que las columnas del padre, como el td de detalle de backend-plus */\n overflow: visible;\n}\n\n.fpr-detalle {\n position: sticky; /* queda a la vista aunque la grilla de arriba esté scrolleada a la derecha */\n left: 0;\n height: 100%;\n /* el ancho lo da el contenido (las columnas de la grilla anidada), hasta lo visible */\n width: max-content;\n box-sizing: border-box;\n padding: 4px 8px 4px 28px; /* sangría: se ve de qué fila es el detalle */\n border-left: 3px solid #90caf9;\n background-color: #f3f6fa;\n}\n\n/* Detalle que es una pantalla propia (wScreen): el contenido se mide y la fila toma su alto */\n.fpr-detalle-wscreen {\n height: 100%;\n overflow: auto;\n}\n\n.fpr-detalle-wscreen-contenido {\n width: max-content;\n max-width: 100%;\n}\n\n.fpr-boton-detalle {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n}\n\n/* Estas clases estaban solo en index.css, que la librería no importa */\n.typed-controls-signal-no-data {\n background-color: #fff9c4 !important;\n color: #fbc02d;\n font-weight: bold;\n}\n\n.typed-controls-signal-unknown-data {\n background-color: #ffe0b2 !important;\n color: #fb8c00;\n font-weight: bold;\n}\n","/* src/app.css */\n\n/* Estilos globales para asegurar que la aplicación ocupe el 100% del viewport\n y que el scroll sea gestionado por componentes específicos, no por la página. */\n html, body, #root {\n height: 100%; /* Ocupa el 100% del alto del viewport */\n margin: 0; /* Elimina márgenes por defecto del navegador */\n padding: 0; /* Elimina rellenos por defecto del navegador */\n overflow: hidden; /* ¡CLAVE! Previene scrolls a nivel de la página (horizontal y vertical) */\n box-sizing: border-box; /* Asegura que padding y border se incluyan en el width/height */\n}\n\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n/* El contenedor principal de tu aplicación (si es <App />) */\n.App {\n height: 100%; /* Asegura que la App ocupe el 100% del alto de #root */\n display: flex; /* Utiliza flexbox para su contenido (MainLayout) */\n flex-direction: column; /* Los hijos se apilan verticalmente */\n}\n\n/* Otros estilos que tenías en tu archivo */\n.App-logo {\n height: 40vmin;\n pointer-events: none;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .App-logo {\n animation: App-logo-spin infinite 20s linear;\n }\n}\n\n.App-header {\n background-color: #282c34;\n min-height: 100vh; /* Revisa si esto es necesario o si causa desbordamiento */\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: calc(10px + 2vmin);\n color: white;\n}\n\n.App-link {\n color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n\n/* Estilos base para las filas de react-data-grid */\n.rdg-row {\n /* La transición debe ser lo suficientemente larga para ser visible */\n transition: opacity 0.5s ease-out, transform 0.5s ease-out;\n}\n\n/* Esta clase se aplica a la fila cuando se va a borrar */\n.deleting-row {\n opacity: 0; /* Hace que la fila se desvanezca */\n transform: translateX(-100%); /* Mueve la fila hacia la izquierda */\n pointer-events: none; /* Evita interacciones mientras se desvanece */\n}"],"mappings":";AAGA,CAAC;AACC,YAAU;AACV,SAAO;AACP,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,WAAS,EAAE,KAAK,EAAE;AAClB,cAAY;AACZ,aAAW;AACX,eAAa;AACb,YAAU;AACV,iBAAe;AACf,cAAY,iBAAiB,KAAK;AACpC;AAEA,CAAC;AACC,mBAAiB;AACnB;AAGA,CAAC;AACC,WAAS;AACT,cAAY,QAAQ,KAAK;AAC3B;AAGA,CAAC,iBAAiB,EAAE,CAAC;AACnB,WAAS;AACT,oBAAkB;AAClB,eAAa;AAGb,YAAU;AACZ;AAEA,CAAC;AACC,YAAU;AACV,QAAM;AACN,UAAQ;AAER,SAAO;AACP,cAAY;AACZ,WAAS,IAAI,IAAI,IAAI;AACrB,eAAa,IAAI,MAAM;AACvB,oBAAkB;AACpB;AAGA,CAAC;AACC,UAAQ;AACR,YAAU;AACZ;AAEA,CAAC;AACC,SAAO;AACP,aAAW;AACb;AAEA,CAAC;AACC,WAAS;AACT,mBAAiB;AACjB,eAAa;AACb,UAAQ;AACV;AAGA,CAAC;AACC,oBAAkB;AAClB,SAAO;AACP,eAAa;AACf;AAEA,CAAC;AACC,oBAAkB;AAClB,SAAO;AACP,eAAa;AACf;;;
|
|
1
|
+
{"version":3,"sources":["../src/components/grid/GenericDataGrid.css","../src/App.css"],"sourcesContent":["/* src/components/grid/GenericDataGrid.css */\n\n/* Colores alineados con el skin \"modern\" de backend-skins (my-tables.styl), para que una grilla de\n backend-plus que entra por el puente se parezca a esta. Si el CSS del skin está cargado se usa su\n --primary-rgb; si no, el azul de MUI (el mismo valor). */\n.rdg-light {\n --rdg-border-color: #e0e0e0;\n --rdg-header-background-color: #eceff1;\n --rdg-row-hover-background-color: rgba(var(--primary-rgb, 25, 118, 210), 0.06);\n --rdg-row-selected-background-color: rgba(var(--primary-rgb, 25, 118, 210), 0.12);\n --rdg-row-selected-hover-background-color: rgba(var(--primary-rgb, 25, 118, 210), 0.16);\n --rdg-selection-color: rgb(var(--primary-rgb, 25, 118, 210));\n}\n\n/* Celda de datos (reemplaza al Box + Typography de MUI que se armaba en cada celda) */\n.fpr-celda {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 0 12px 0 8px;\n box-sizing: border-box;\n font-size: 0.875rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n transition: background-color 0.3s ease-in-out;\n}\n\n.fpr-celda-numerica {\n justify-content: flex-end;\n}\n\n/* Fila que se está borrando (antes era un style copiado en cada fila) */\n.fpr-fila-saliendo {\n opacity: 0;\n transition: opacity 0.4s ease-in-out;\n}\n\n/* Fila de detalle desplegada: una sola celda (colSpan) con la grilla anidada adentro */\n.fpr-fila-detalle > .rdg-cell {\n padding: 0;\n background-color: #f3f6fa;\n white-space: normal;\n /* react-data-grid recorta las celdas (overflow: clip, en un @layer): la grilla anidada\n puede ser más ancha que las columnas del padre, como el td de detalle de backend-plus */\n overflow: visible;\n}\n\n.fpr-detalle {\n position: sticky; /* queda a la vista aunque la grilla de arriba esté scrolleada a la derecha */\n left: 0;\n height: 100%;\n /* el ancho lo da el contenido (las columnas de la grilla anidada), hasta lo visible */\n width: max-content;\n box-sizing: border-box;\n padding: 4px 8px 4px 28px; /* sangría: se ve de qué fila es el detalle */\n border-left: 3px solid #90caf9;\n background-color: #f3f6fa;\n}\n\n/* Detalle que es una pantalla propia (wScreen): el contenido se mide y la fila toma su alto */\n.fpr-detalle-wscreen {\n height: 100%;\n overflow: auto;\n}\n\n.fpr-detalle-wscreen-contenido {\n width: max-content;\n max-width: 100%;\n}\n\n.fpr-boton-detalle {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n}\n\n/* Estas clases estaban solo en index.css, que la librería no importa */\n.typed-controls-signal-no-data {\n background-color: #fff9c4 !important;\n color: #fbc02d;\n font-weight: bold;\n}\n\n.typed-controls-signal-unknown-data {\n background-color: #ffe0b2 !important;\n color: #fb8c00;\n font-weight: bold;\n}\n","/* src/app.css */\n\n/* Estilos globales para asegurar que la aplicación ocupe el 100% del viewport\n y que el scroll sea gestionado por componentes específicos, no por la página. */\n html, body, #root {\n height: 100%; /* Ocupa el 100% del alto del viewport */\n margin: 0; /* Elimina márgenes por defecto del navegador */\n padding: 0; /* Elimina rellenos por defecto del navegador */\n overflow: hidden; /* ¡CLAVE! Previene scrolls a nivel de la página (horizontal y vertical) */\n box-sizing: border-box; /* Asegura que padding y border se incluyan en el width/height */\n}\n\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n/* El contenedor principal de tu aplicación (si es <App />) */\n.App {\n height: 100%; /* Asegura que la App ocupe el 100% del alto de #root */\n display: flex; /* Utiliza flexbox para su contenido (MainLayout) */\n flex-direction: column; /* Los hijos se apilan verticalmente */\n}\n\n/* Otros estilos que tenías en tu archivo */\n.App-logo {\n height: 40vmin;\n pointer-events: none;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .App-logo {\n animation: App-logo-spin infinite 20s linear;\n }\n}\n\n.App-header {\n background-color: #282c34;\n min-height: 100vh; /* Revisa si esto es necesario o si causa desbordamiento */\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: calc(10px + 2vmin);\n color: white;\n}\n\n.App-link {\n color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n\n/* Estilos base para las filas de react-data-grid */\n.rdg-row {\n /* La transición debe ser lo suficientemente larga para ser visible */\n transition: opacity 0.5s ease-out, transform 0.5s ease-out;\n}\n\n/* Esta clase se aplica a la fila cuando se va a borrar */\n.deleting-row {\n opacity: 0; /* Hace que la fila se desvanezca */\n transform: translateX(-100%); /* Mueve la fila hacia la izquierda */\n pointer-events: none; /* Evita interacciones mientras se desvanece */\n}"],"mappings":";AAKA,CAAC;AACC,sBAAoB;AACpB,iCAA+B;AAC/B,oCAAkC,KAAK,IAAI,aAAa,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;AACzE,uCAAqC,KAAK,IAAI,aAAa,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;AAC5E,6CAA2C,KAAK,IAAI,aAAa,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;AAClF,yBAAuB,IAAI,IAAI,aAAa,EAAE,EAAE,EAAE,GAAG,EAAE;AACzD;AAGA,CAAC;AACC,YAAU;AACV,SAAO;AACP,WAAS;AACT,eAAa;AACb,mBAAiB;AACjB,WAAS,EAAE,KAAK,EAAE;AAClB,cAAY;AACZ,aAAW;AACX,eAAa;AACb,YAAU;AACV,iBAAe;AACf,cAAY,iBAAiB,KAAK;AACpC;AAEA,CAAC;AACC,mBAAiB;AACnB;AAGA,CAAC;AACC,WAAS;AACT,cAAY,QAAQ,KAAK;AAC3B;AAGA,CAAC,iBAAiB,EAAE,CAAC;AACnB,WAAS;AACT,oBAAkB;AAClB,eAAa;AAGb,YAAU;AACZ;AAEA,CAAC;AACC,YAAU;AACV,QAAM;AACN,UAAQ;AAER,SAAO;AACP,cAAY;AACZ,WAAS,IAAI,IAAI,IAAI;AACrB,eAAa,IAAI,MAAM;AACvB,oBAAkB;AACpB;AAGA,CAAC;AACC,UAAQ;AACR,YAAU;AACZ;AAEA,CAAC;AACC,SAAO;AACP,aAAW;AACb;AAEA,CAAC;AACC,WAAS;AACT,mBAAiB;AACjB,eAAa;AACb,UAAQ;AACV;AAGA,CAAC;AACC,oBAAkB;AAClB,SAAO;AACP,eAAa;AACf;AAEA,CAAC;AACC,oBAAkB;AAClB,SAAO;AACP,eAAa;AACf;;;ACvFE;AAAM;AAAM,CAAC;AACb,UAAQ;AACR,UAAQ;AACR,WAAS;AACT,YAAU;AACV,cAAY;AACd;AAEA;AACE;AAAA,IAAa,aAAa;AAAA,IAAE,kBAAkB;AAAA,IAAE,UAAU;AAAA,IAAE,QAAQ;AAAA,IAAE,QAAQ;AAAA,IAC5E,QAAQ;AAAA,IAAE,WAAW;AAAA,IAAE,WAAW;AAAA,IAAE,YAAY;AAAA,IAAE,gBAAgB;AAAA,IAClE;AACF,0BAAwB;AACxB,2BAAyB;AAC3B;AAGA,CAAC;AACC,UAAQ;AACR,WAAS;AACT,kBAAgB;AAClB;AAGA,CAAC;AACC,UAAQ;AACR,kBAAgB;AAClB;AAEA,OAAO,CAAC,sBAAsB,EAAE;AAC9B,GAND;AAOG,eAAW,cAAc,SAAS,IAAI;AACxC;AACF;AAEA,CAAC;AACC,oBAAkB;AAClB,cAAY;AACZ,WAAS;AACT,kBAAgB;AAChB,eAAa;AACb,mBAAiB;AACjB,aAAW,KAAK,KAAK,EAAE;AACvB,SAAO;AACT;AAEA,CAAC;AACC,SAAO;AACT;AAEA,WAnBe;AAoBb;AACE,eAAW,OAAO;AACpB;AACA;AACE,eAAW,OAAO;AACpB;AACF;AAEA;AACE;AAAA,IAAa,eAAe;AAAA,IAAE,KAAK;AAAA,IAAE,MAAM;AAAA,IAAE,QAAQ;AAAA,IAAE,aAAa;AAAA,IAClE;AACJ;AAGA,CAAC;AAEC,cAAY,QAAQ,KAAK,QAAQ,EAAE,UAAU,KAAK;AACpD;AAGA,CAAC;AACC,WAAS;AACT,aAAW,WAAW;AACtB,kBAAgB;AAClB;","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -147,6 +147,8 @@ interface MenuListItemProps {
|
|
|
147
147
|
level: number;
|
|
148
148
|
/** Los grupos de menú que contienen al ítem (para distinguir ítems de igual nombre en grupos distintos). */
|
|
149
149
|
grupos?: string[];
|
|
150
|
+
/** Las claves (`claveDeMenu`) de los ítems de su mismo nivel: el acordeón los cierra al abrir un grupo. */
|
|
151
|
+
hermanos?: string[];
|
|
150
152
|
onMenuItemClick?: () => void;
|
|
151
153
|
}
|
|
152
154
|
interface CustomCellProps<R extends FilaDeDatos, SR> extends RenderCellProps<R, SR> {
|
|
@@ -166,6 +168,8 @@ interface AppContextType {
|
|
|
166
168
|
showSessionExpiredMessage: boolean;
|
|
167
169
|
setShowSessionExpiredMessage: (show: boolean) => void;
|
|
168
170
|
handleExpiredSessionRedirect: () => void;
|
|
171
|
+
/** Salir o cambiar la contraseña: la sesión se cierra a propósito y no corresponde avisar que expiró. `false` al volver a iniciar sesión. */
|
|
172
|
+
avisarCierreVoluntario: (activo: boolean) => void;
|
|
169
173
|
}
|
|
170
174
|
interface AppProviderProps {
|
|
171
175
|
children: ReactNode;
|
|
@@ -224,6 +228,8 @@ interface RouterState {
|
|
|
224
228
|
currentPath: string;
|
|
225
229
|
previousPath: string | null;
|
|
226
230
|
redirectPath: string | null;
|
|
231
|
+
/** Si la sesión se perdió (cookie vencida), el usuario que la tenía: solo ese vuelve a la ruta guardada al ingresar de nuevo. */
|
|
232
|
+
redirectUsername?: string | null;
|
|
227
233
|
}
|
|
228
234
|
interface FetchApiOptions extends RequestInit {
|
|
229
235
|
/** No poner Content-Type: lo arma el navegador (por ejemplo con un FormData, que lleva su boundary) */
|
|
@@ -298,9 +304,11 @@ declare const FrontendPlusProviders: React$1.FC<{
|
|
|
298
304
|
children: React$1.ReactNode;
|
|
299
305
|
publicPaths: string[];
|
|
300
306
|
}>;
|
|
301
|
-
declare const App: ({ myRoutes, myUnloggedRoutes, unloggedLayout, myWScreens, myClientSides, myResultsOk, myConditions, puenteBP }: AppProps & {
|
|
307
|
+
declare const App: ({ myRoutes, myUnloggedRoutes, unloggedLayout, myWScreens, myClientSides, myResultsOk, myConditions, puenteBP, recuperarClave }: AppProps & {
|
|
302
308
|
/** Las wScreens que la aplicación no registró se piden al cliente de backend-plus (mismo origen que el backend) */
|
|
303
309
|
puenteBP?: boolean;
|
|
310
|
+
/** Muestra en el login el enlace «me olvidé la clave»: `true` para `/new-pass` (el de backend-plus por omisión) o la ruta que el backend declare en `login.forget.urlPath` */
|
|
311
|
+
recuperarClave?: boolean | string;
|
|
304
312
|
}) => react_jsx_runtime.JSX.Element;
|
|
305
313
|
|
|
306
314
|
declare const MainLayout: React$1.FC;
|
|
@@ -316,6 +324,7 @@ declare const useApp: () => {
|
|
|
316
324
|
showSessionExpiredMessage: boolean;
|
|
317
325
|
setShowSessionExpiredMessage: (show: boolean) => void;
|
|
318
326
|
handleExpiredSessionRedirect: () => void;
|
|
327
|
+
avisarCierreVoluntario: (activo: boolean) => void;
|
|
319
328
|
};
|
|
320
329
|
declare const AppProvider: React$1.FC<AppProviderProps>;
|
|
321
330
|
|
package/dist/index.d.ts
CHANGED
|
@@ -147,6 +147,8 @@ interface MenuListItemProps {
|
|
|
147
147
|
level: number;
|
|
148
148
|
/** Los grupos de menú que contienen al ítem (para distinguir ítems de igual nombre en grupos distintos). */
|
|
149
149
|
grupos?: string[];
|
|
150
|
+
/** Las claves (`claveDeMenu`) de los ítems de su mismo nivel: el acordeón los cierra al abrir un grupo. */
|
|
151
|
+
hermanos?: string[];
|
|
150
152
|
onMenuItemClick?: () => void;
|
|
151
153
|
}
|
|
152
154
|
interface CustomCellProps<R extends FilaDeDatos, SR> extends RenderCellProps<R, SR> {
|
|
@@ -166,6 +168,8 @@ interface AppContextType {
|
|
|
166
168
|
showSessionExpiredMessage: boolean;
|
|
167
169
|
setShowSessionExpiredMessage: (show: boolean) => void;
|
|
168
170
|
handleExpiredSessionRedirect: () => void;
|
|
171
|
+
/** Salir o cambiar la contraseña: la sesión se cierra a propósito y no corresponde avisar que expiró. `false` al volver a iniciar sesión. */
|
|
172
|
+
avisarCierreVoluntario: (activo: boolean) => void;
|
|
169
173
|
}
|
|
170
174
|
interface AppProviderProps {
|
|
171
175
|
children: ReactNode;
|
|
@@ -224,6 +228,8 @@ interface RouterState {
|
|
|
224
228
|
currentPath: string;
|
|
225
229
|
previousPath: string | null;
|
|
226
230
|
redirectPath: string | null;
|
|
231
|
+
/** Si la sesión se perdió (cookie vencida), el usuario que la tenía: solo ese vuelve a la ruta guardada al ingresar de nuevo. */
|
|
232
|
+
redirectUsername?: string | null;
|
|
227
233
|
}
|
|
228
234
|
interface FetchApiOptions extends RequestInit {
|
|
229
235
|
/** No poner Content-Type: lo arma el navegador (por ejemplo con un FormData, que lleva su boundary) */
|
|
@@ -298,9 +304,11 @@ declare const FrontendPlusProviders: React$1.FC<{
|
|
|
298
304
|
children: React$1.ReactNode;
|
|
299
305
|
publicPaths: string[];
|
|
300
306
|
}>;
|
|
301
|
-
declare const App: ({ myRoutes, myUnloggedRoutes, unloggedLayout, myWScreens, myClientSides, myResultsOk, myConditions, puenteBP }: AppProps & {
|
|
307
|
+
declare const App: ({ myRoutes, myUnloggedRoutes, unloggedLayout, myWScreens, myClientSides, myResultsOk, myConditions, puenteBP, recuperarClave }: AppProps & {
|
|
302
308
|
/** Las wScreens que la aplicación no registró se piden al cliente de backend-plus (mismo origen que el backend) */
|
|
303
309
|
puenteBP?: boolean;
|
|
310
|
+
/** Muestra en el login el enlace «me olvidé la clave»: `true` para `/new-pass` (el de backend-plus por omisión) o la ruta que el backend declare en `login.forget.urlPath` */
|
|
311
|
+
recuperarClave?: boolean | string;
|
|
304
312
|
}) => react_jsx_runtime.JSX.Element;
|
|
305
313
|
|
|
306
314
|
declare const MainLayout: React$1.FC;
|
|
@@ -316,6 +324,7 @@ declare const useApp: () => {
|
|
|
316
324
|
showSessionExpiredMessage: boolean;
|
|
317
325
|
setShowSessionExpiredMessage: (show: boolean) => void;
|
|
318
326
|
handleExpiredSessionRedirect: () => void;
|
|
327
|
+
avisarCierreVoluntario: (activo: boolean) => void;
|
|
319
328
|
};
|
|
320
329
|
declare const AppProvider: React$1.FC<AppProviderProps>;
|
|
321
330
|
|