@acvl/frontend-components 0.0.72 → 0.0.73

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/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _mui_material from '@mui/material';
2
- import { ButtonProps, ButtonGroupProps, IconButtonProps, MenuItemProps, AlertProps, BoxProps, AutocompleteProps, SliderProps, SwitchProps, GridProps, DrawerProps, SxProps, Theme, StackProps, TypographyProps, MenuProps, PaletteColorOptions, TextFieldProps as TextFieldProps$1, InputBaseProps, DialogProps, DialogContentProps } from '@mui/material';
2
+ import { ButtonProps, ButtonGroupProps, IconButtonProps, MenuItemProps, BoxProps, AutocompleteProps, SliderProps, SwitchProps, GridProps, DrawerProps, SxProps, Theme, StackProps, TypographyProps, MenuProps, PaletteColorOptions, TextFieldProps as TextFieldProps$1, InputBaseProps, DialogProps, DialogContentProps } from '@mui/material';
3
3
  import * as React from 'react';
4
4
  import React__default, { ReactNode, Dispatch, SetStateAction, JSX, RefObject, ReactElement, FC, BaseSyntheticEvent, JSXElementConstructor, ElementType } from 'react';
5
5
  import * as react_jsx_runtime from 'react/jsx-runtime';
@@ -127,13 +127,68 @@ interface ExtraButtonsProps {
127
127
  }
128
128
  declare const ExtraButtons: (props: ExtraButtonsProps) => react_jsx_runtime.JSX.Element;
129
129
 
130
+ /**
131
+ * Los colores de la paleta con los que se puede pintar un estado. Son los mismos que admite el
132
+ * chip de una tabla (`ChipCell`), y a propósito: así el mapa de colores de un catálogo —el que
133
+ * dice que el estado "2" es `info`— se declara una vez y sirve en la tabla y en la ficha.
134
+ */
135
+ type StatusColor = "primary" | "secondary" | "error" | "warning" | "info" | "success";
130
136
  interface StatusBadgeProps {
131
- severity?: AlertProps['severity'];
137
+ /**
138
+ * El color, no la gravedad, aunque se siga llamando así: las cuatro severidades de un
139
+ * `Alert` son también nombres de la paleta, y esto admite además `primary` y `secondary`.
140
+ *
141
+ * Rara vez se escribe a mano —lo normal es sacarlo de {@link resolveStatusColor}, que es
142
+ * quien sabe qué color le toca a cada estado del catálogo—.
143
+ */
144
+ severity?: StatusColor;
132
145
  title: string;
133
146
  slotProps?: {
134
147
  box?: Partial<BoxProps>;
135
148
  };
136
149
  }
150
+ /**
151
+ * Los dos colores de un estado: la tinta —texto y contorno— y el relleno.
152
+ *
153
+ * Salen del tema y no de una gama fija (`green[800]`, `yellow[100]`…), que es lo que hace que
154
+ * un mismo estado se vea igual en la pastilla de una ficha que en el chip de una tabla
155
+ * (`ChipCell`), y que los dos sigan al esquema de color activo en vez de quedarse en los tonos
156
+ * del claro. `severity` es además el nombre del color en la paleta —`success`, `warning`…—, así
157
+ * que no hay tabla de equivalencias que mantener: sin severidad se pinta neutro.
158
+ *
159
+ * El relleno es el mismo tono al 20%. Va escrito contra el canal (`mainChannel`) porque es la
160
+ * forma de que una transparencia siga a las variables CSS; `ChipCell` calcula ese mismo 20% con
161
+ * `alpha()`, que lo resuelve una sola vez y contra el esquema claro. Un tema sin variables se
162
+ * queda sin relleno —el contorno y el texto siguen en pie—.
163
+ *
164
+ * Se exporta porque el rótulo no siempre cabe: donde hay que reducirlo a un punto de color
165
+ * —un encabezado angosto— ese punto tiene que decir lo mismo, y la única forma de que no se
166
+ * separen con el tiempo es que el color salga de aquí.
167
+ */
168
+ declare const statusColors: (severity?: StatusColor) => {
169
+ /** Texto y contorno. */
170
+ ink: string;
171
+ /** Fondo. */
172
+ fill: string;
173
+ };
174
+ /**
175
+ * El color que le toca a un estado, según el mapa que declara el proyecto:
176
+ *
177
+ * const coloresDeEstado: Record<string, StatusColor> = { "1": "warning", "2": "info" };
178
+ *
179
+ * Es el mismo mapa que recibe `renderChipCell`, y esa es la idea: el estado "2" se ve igual en
180
+ * la columna de una tabla que en la cabecera de su ficha, sin declararlo dos veces.
181
+ *
182
+ * El estado llega como lo manda el backend —`{ value: "2", label: "Nueva" }`—, así que busca
183
+ * primero por código, que es lo estable, y después por etiqueta sin distinguir mayúsculas, para
184
+ * los endpoints que sólo mandan el texto. Sin mapa —o sin coincidencia— queda un último intento:
185
+ * que el propio valor sea ya un nombre de la paleta, que es como se pintaban los estados cuando
186
+ * el backend mandaba la severidad en vez del código.
187
+ *
188
+ * Devuelve `undefined` cuando no encuentra ninguno, y eso es una respuesta: la insignia se pinta
189
+ * neutra en vez de inventarle un color a un estado que nadie clasificó.
190
+ */
191
+ declare const resolveStatusColor: (estado: unknown, colors?: Record<string, StatusColor>) => StatusColor | undefined;
137
192
  declare const StatusBadge: React__default.FC<StatusBadgeProps>;
138
193
 
139
194
  interface CoverPageCardProps$1 {
@@ -737,6 +792,12 @@ interface MainDrawerV2Props {
737
792
  /** Radio de las esquinas del panel de contenido. Por defecto `theme.shape.borderRadius`. */
738
793
  contentBorderRadius?: number;
739
794
  slots?: {
795
+ /**
796
+ * Lo que califica al título y va pegado a él —el estado de un registro—. No se encoge:
797
+ * lo que cede ancho cuando el encabezado se queda corto es el título, que ya corta con
798
+ * elipsis.
799
+ */
800
+ badge?: ReactNode;
740
801
  /** Acciones del encabezado, a la izquierda del botón de cerrar. */
741
802
  headerActions?: ReactNode;
742
803
  /** Pie fijo — no scrollea con el cuerpo. Pensado para guardar/cancelar. */
@@ -828,6 +889,16 @@ declare module "@mui/x-data-grid" {
828
889
  pageType: PageType;
829
890
  }
830
891
  }
892
+ /**
893
+ * Campo del panel de edición. Es el mismo campo de un formulario, salvo que su `display` puede
894
+ * ser una función: la evalúa contra la fila que se está editando, así una fila pinta sólo los
895
+ * campos que le tocan según lo que ya tiene capturado —una condición de "primer envío" no lleva
896
+ * cantidad, y pedirla nada más para ignorarla al guardar confunde a quien la captura.
897
+ */
898
+ interface ArrayFieldItemProps extends Omit<FieldProps$1, "display"> {
899
+ /** Por defecto `true`. Como función, recibe la fila en edición y su índice. */
900
+ display?: boolean | ((row: any, index: number) => boolean);
901
+ }
831
902
  interface ArrayFieldProps {
832
903
  name: string;
833
904
  label: string;
@@ -838,7 +909,7 @@ interface ArrayFieldProps {
838
909
  gridProps?: GridProps;
839
910
  pageType?: PageType;
840
911
  parser?: JSONParserProps;
841
- fields: FieldProps$1[];
912
+ fields: ArrayFieldItemProps[];
842
913
  /**
843
914
  * What the edit panel's fields resolve their `size` breakpoints against. Defaults to
844
915
  * `"container"`: that panel is a drawer, narrow by construction. It needs its own setting
@@ -1803,7 +1874,7 @@ interface DeleteGridColumnsProps {
1803
1874
  */
1804
1875
  declare const deleteColumn: (props: DeleteGridColumnsProps) => GridColDefPropsOverrides[];
1805
1876
 
1806
- type ChipColor = "primary" | "secondary" | "error" | "warning" | "info" | "success";
1877
+ type ChipColor = StatusColor;
1807
1878
  type ChipOption = {
1808
1879
  value: string;
1809
1880
  label: string;
@@ -1943,6 +2014,75 @@ declare const ControlledAmountWithCurrency: {
1943
2014
  formatDetail({ fieldData, extraProps, data, name, }: DetailRenderProps): string;
1944
2015
  };
1945
2016
 
2017
+ /**
2018
+ * Helpers puros del `ControlledAutocomplete`: los argumentos de la consulta, la
2019
+ * lista que se muestra y las cuentas del "seleccionar todo". Viven fuera del
2020
+ * componente para poder probarlos sin montar MUI ni RTK Query.
2021
+ */
2022
+
2023
+ /** Una opción del desplegable, tal como la devuelve `como_opciones`. */
2024
+ interface AutocompleteOption {
2025
+ value: any;
2026
+ label: string;
2027
+ }
2028
+
2029
+ interface ControlledAutocompleteProps {
2030
+ name: string;
2031
+ label?: string;
2032
+ /** Control de react-hook-form; lo inyecta el `EditField` o el panel de filtros. */
2033
+ control?: any;
2034
+ /** Props que se pasan tal cual al `Autocomplete` (ganan sobre las de aquí). */
2035
+ fieldProps?: Partial<AutocompleteProps<any, any, any, any>>;
2036
+ extraProps?: {
2037
+ /** Selección múltiple con casillas y chips. Por defecto, simple. */
2038
+ multiple?: boolean;
2039
+ /** Opciones fijas. Con ellas no se consulta nada y filtra el navegador. */
2040
+ options?: AutocompleteOption[];
2041
+ /** Origen remoto de las opciones (endpoint `como_opciones`). */
2042
+ queryArgs?: ComoOpcionesProps;
2043
+ /** Filtro contra el que se busca el texto. Por defecto `nombre__icontains`. */
2044
+ searchField?: string;
2045
+ /** Retardo del tecleo antes de consultar. Por defecto 400 ms. */
2046
+ debounceMs?: number;
2047
+ /** Caracteres mínimos para consultar. Por defecto 0 (lista completa al abrir). */
2048
+ minChars?: number;
2049
+ /** Fila de "seleccionar todo" en el modo múltiple. Por defecto, sí. */
2050
+ selectAll?: boolean;
2051
+ /** Quita el hueco reservado para el mensaje de error debajo del campo. */
2052
+ disableHT?: boolean;
2053
+ };
2054
+ }
2055
+ /**
2056
+ * Desplegable de opciones para react-hook-form: simple o múltiple, con opciones
2057
+ * fijas o consultadas a `como_opciones` según lo que se escribe. Unifica los
2058
+ * `ControlledDropdown` (simple) y `ControlledSelect` (múltiple) de v1, que eran
2059
+ * el mismo componente duplicado.
2060
+ *
2061
+ * ```ts
2062
+ * {
2063
+ * name: "cliente",
2064
+ * label: "Cliente",
2065
+ * type: ControlledAutocomplete,
2066
+ * extraProps: { queryArgs: { endpoint: "clientes" } },
2067
+ * }
2068
+ * ```
2069
+ *
2070
+ * Sobre las peticiones, que era el punto flojo de v1:
2071
+ *
2072
+ * - **Una por apertura.** v1 pedía dos veces al abrir (el `onOpen` disparaba la
2073
+ * consulta y el efecto la repetía con retardo) y otra vez en cada render del
2074
+ * padre, porque `queryArgs` llega como objeto literal y su identidad cambiaba.
2075
+ * - **Elegir una opción no consulta.** Al elegir, MUI reescribe el texto del
2076
+ * campo con la etiqueta; v1 lo trataba como búsqueda nueva y volvía a pedir.
2077
+ * - **Sin parpadeo ni respuestas cruzadas.** La lista es la del hook de RTK
2078
+ * Query, que siempre corresponde a los últimos argumentos disparados; v1
2079
+ * guardaba las opciones en estado propio, las vaciaba en cada tecla y una
2080
+ * respuesta lenta podía pisar a una más nueva.
2081
+ * - **Repetir una búsqueda sale de la caché**, incluido borrar el texto para
2082
+ * volver al listado completo.
2083
+ */
2084
+ declare const ControlledAutocomplete: ControlledInput<ControlledAutocompleteProps>;
2085
+
1946
2086
  interface ControlledColorProps {
1947
2087
  /** Ruta del color en el formulario. */
1948
2088
  name: string;
@@ -1990,8 +2130,16 @@ declare const ControlledColor: ControlledInput<ControlledColorProps>;
1990
2130
  declare const ControlledDate: ControlledInput;
1991
2131
 
1992
2132
  /**
1993
- * `ControlledSelect` de v2. Reutiliza el renderizado de edición de v1 y añade el
1994
- * renderizado de detalle (une las etiquetas de las opciones seleccionadas).
2133
+ * `ControlledSelect` de v2: hoy es un `ControlledAutocomplete` en modo múltiple.
2134
+ *
2135
+ * Se conserva el nombre porque ya lo usan varias pantallas de los dos
2136
+ * proyectos; lo que cambia por dentro es cuándo y cuántas veces se piden las
2137
+ * opciones (ver `ControlledAutocomplete`). `disableHT` viene en `true` para no
2138
+ * mover el alto de esas pantallas: el select de v1 no reservaba el renglón del
2139
+ * mensaje de error. Quien lo necesite puede pasarlo en `false`.
2140
+ *
2141
+ * Para código nuevo conviene usar `ControlledAutocomplete` directamente, que
2142
+ * además cubre el modo simple.
1995
2143
  */
1996
2144
  declare const ControlledSelect: ControlledInput;
1997
2145
 
@@ -2049,6 +2197,17 @@ interface SubsectionProps {
2049
2197
  fields?: FieldProps[];
2050
2198
  arrayFields?: ArrayFieldProps[];
2051
2199
  content?: (data: any) => ReactNode;
2200
+ /**
2201
+ * Acciones de la subsección, alineadas a la derecha en el renglón del título.
2202
+ *
2203
+ * Son de la subsección, no de su contenido: viven fuera del `Collapse`, así que siguen a la
2204
+ * mano con la subsección plegada. Y son hermanas del título, no sus hijas: usarlas no la
2205
+ * pliega —plegar es del título y su flecha, que es donde se declara con el cursor.
2206
+ *
2207
+ * El hueco que les queda a la derecha del título es suyo, así que una barra que sepa medirse
2208
+ * —`ResponsiveActions`— puede encogerse ahí dentro en lugar de desbordar el renglón.
2209
+ */
2210
+ actions?: ReactNode | ((data: any) => ReactNode);
2052
2211
  }
2053
2212
 
2054
2213
  interface SectionProps extends Partial<Omit<MyTab, "children">> {
@@ -2368,6 +2527,13 @@ interface DetailFormDrawerProps {
2368
2527
  saveAndNext?: string;
2369
2528
  };
2370
2529
  slots?: {
2530
+ /**
2531
+ * Ruta al estado del registro —`"estado"`—, la misma que recibe `DetailPage_v2`: se
2532
+ * pinta junto al título, como en la página, y con el mismo mapa de colores.
2533
+ *
2534
+ * @see DetailPageV2Props.slots.badge
2535
+ */
2536
+ badge?: string;
2371
2537
  /** Extra actions rendered in the header, left of the close button (e.g. "open full page"). */
2372
2538
  headerActions?: ReactNode;
2373
2539
  };
@@ -2376,6 +2542,10 @@ interface DetailFormDrawerProps {
2376
2542
  saveButton?: Partial<ButtonProps>;
2377
2543
  cancelButton?: Partial<ButtonProps>;
2378
2544
  saveAndNextButton?: Partial<ButtonProps>;
2545
+ /** @see DetailPageV2Props.slotProps.badge */
2546
+ badge?: {
2547
+ colors?: Record<string, StatusColor>;
2548
+ };
2379
2549
  };
2380
2550
  }
2381
2551
  /**
@@ -2473,6 +2643,23 @@ interface DrawerGridDrawerConfig {
2473
2643
  * de abrirlo en su página.
2474
2644
  */
2475
2645
  extraButtons?: DetailExtraButton[];
2646
+ /**
2647
+ * El estado del registro, junto al título de la cabecera del cajón —igual que en su página
2648
+ * completa—. `path` es la ruta al campo dentro del dato, que el backend manda como
2649
+ * `{ value, label }`, y `colors` dice de qué color va cada código:
2650
+ *
2651
+ * badge: { path: "estado", colors: { "1": "warning", "2": "info" } }
2652
+ *
2653
+ * `colors` es el mismo mapa que recibe `renderChipCell`, así que lo natural es declararlo
2654
+ * junto al catálogo y pasárselo a los dos: el estado se ve igual en la columna de la tabla
2655
+ * que en el cajón que abre esa misma fila.
2656
+ *
2657
+ * @see DetailPageV2Props.slots.badge
2658
+ */
2659
+ badge?: {
2660
+ path: string;
2661
+ colors?: Record<string, StatusColor>;
2662
+ };
2476
2663
  /** Runs after any successful create/edit (e.g. side effects; the grid refetches via RTK tag invalidation). */
2477
2664
  onSaved?: (response: any) => void;
2478
2665
  /**
@@ -2582,7 +2769,132 @@ interface ConfirmDialogProps {
2582
2769
  * confirmar puede mostrar estado de carga mientras se resuelve la acción. */
2583
2770
  declare function ConfirmDialog({ open, titulo, mensaje, confirmLabel, cancelLabel, confirmColor, confirmIcon, isLoading, onConfirm, onClose, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
2584
2771
 
2585
- interface ActionsMenuProps {
2772
+ interface PulseDotProps {
2773
+ /** Cuando es `true`, el punto es verde y parpadea; si no, usa `inactiveColor`. */
2774
+ active: boolean;
2775
+ /** Color cuando no está activo. Por defecto `error.main`. */
2776
+ inactiveColor?: string;
2777
+ /** Tamaño del punto en px. Por defecto 10. */
2778
+ size?: number;
2779
+ /** Título opcional; si se pasa, envuelve el punto en un Tooltip. */
2780
+ title?: ReactNode;
2781
+ }
2782
+ /** Punto de estado: verde con animación de parpadeo cuando está activo, de lo
2783
+ * contrario un color fijo. Se usa para indicar conexión/actividad en vivo. */
2784
+ declare function PulseDot({ active, inactiveColor, size, title }: PulseDotProps): react_jsx_runtime.JSX.Element;
2785
+
2786
+ /**
2787
+ * El contenedor que declara todo renglón que lleve un título y sus adornos: el encabezado de
2788
+ * una página, el de un cajón y el de un diálogo.
2789
+ *
2790
+ * Se llama igual en los tres a propósito. Lo que aterriza en ese renglón —el estado de un
2791
+ * registro, una barra de acciones— tiene que encogerse cuando el renglón se queda corto, y con
2792
+ * un solo nombre esa regla se escribe una vez y sirve en los tres sitios: cada cosa mide contra
2793
+ * el renglón que la contiene, que en una página es el ancho de la página y en un cajón de 460px
2794
+ * es el del cajón. Los breakpoints del viewport no sabrían distinguirlos —la pantalla es la
2795
+ * misma— y `@container` sí.
2796
+ *
2797
+ * No se pisan entre ellos aunque compartan nombre: un cajón y un diálogo se pintan por portal,
2798
+ * fuera del árbol de la página, así que nunca hay uno dentro de otro. Y si lo hubiera, una
2799
+ * `@container` resuelve contra el contenedor ancestro más cercano, que es justo el que manda.
2800
+ */
2801
+ declare const HEADER_CONTAINER = "acv-header";
2802
+ /**
2803
+ * Debajo de este ancho el renglón se considera angosto y lo que viva en él debería encogerse:
2804
+ * la insignia de estado, por ejemplo, se queda en un punto de color con el rótulo en el globo.
2805
+ *
2806
+ * Se escribe como regla y no como número suelto para que quien la use no tenga que rearmar la
2807
+ * consulta —ni equivocarse al hacerlo—:
2808
+ *
2809
+ * sx={{ [HEADER_NARROW]: { display: "none" } }}
2810
+ */
2811
+ declare const HEADER_NARROW = "@container acv-header (max-width: 600px)";
2812
+ /**
2813
+ * Convierte un renglón en el contenedor contra el que se miden sus adornos.
2814
+ *
2815
+ * `inline-size`, nunca `size`: contener también el eje de bloque le fijaría la altura al
2816
+ * encabezado, que crece con lo que lleva dentro —un subtítulo, un título en dos renglones—.
2817
+ */
2818
+ declare const headerContainerSx: CSSObject;
2819
+
2820
+ /**
2821
+ * Cómo se está dibujando la barra. En orden de lo que ocupa: las acciones a la vista con su
2822
+ * etiqueta, las mismas sólo con el icono, sólo las fijadas, o ninguna.
2823
+ *
2824
+ * El modo dice qué se dibuja *fuera* del menú; lo que quede fuera de eso —y lo que sobre del
2825
+ * tope de `maxVisible`— está siempre dentro de él, así que hasta en `"full"` puede haber menú.
2826
+ *
2827
+ * `"pinned"` sólo es un escalón cuando hay alguna acción fijada; sin ellas la barra pasa de
2828
+ * `"icons"` derecho a `"menu"`.
2829
+ */
2830
+ declare const RESPONSIVE_ACTION_MODES: readonly ["full", "icons", "pinned", "menu"];
2831
+ type ResponsiveActionsMode = (typeof RESPONSIVE_ACTION_MODES)[number];
2832
+ interface ResponsiveAction {
2833
+ /** Texto del botón; también lo que se lee en el menú y en el tooltip del modo icono. */
2834
+ label: string;
2835
+ /** Se dibuja como `startIcon`, como el botón entero, o a la izquierda del renglón del menú. */
2836
+ icon: ReactNode;
2837
+ onClick: () => void;
2838
+ /** Ayuda larga. Sustituye a `label` como tooltip —el modo icono siempre lleva uno. */
2839
+ tooltip?: string;
2840
+ disabled?: boolean;
2841
+ /** Spinner en lugar del icono, y la acción bloqueada mientras tanto. */
2842
+ loading?: boolean;
2843
+ /** También tiñe el renglón del menú, para que la acción se vea igual se dibuje como se dibuje. */
2844
+ color?: ButtonProps["color"];
2845
+ /**
2846
+ * La última en esconderse: cuando el renglón deja de dar para todas, esta se queda a la vista
2847
+ * —como icono— y las demás se van al menú. Es para la que se usa siempre (editar, en una
2848
+ * ficha); fijar media barra no sirve de mucho, porque entonces ese escalón acaba pesando casi
2849
+ * lo mismo que el anterior y se salta solo.
2850
+ */
2851
+ pinned?: boolean;
2852
+ }
2853
+ interface ResponsiveActionsProps {
2854
+ actions: ResponsiveAction[];
2855
+ /**
2856
+ * Cuántas acciones se dibujan como botón, como mucho. Las demás se van al menú desde el
2857
+ * primer modo, quepan o no: es un tope de cuántas *merecen* estar a la vista, no de cuántas
2858
+ * caben —de eso ya se encarga la medición—. Sin él salen todas.
2859
+ *
2860
+ * Se queda con las primeras, así que el orden manda: lo importante va delante. Fijar una
2861
+ * acción (`pinned`) no la adelanta, sólo la hace la última en esconderse.
2862
+ */
2863
+ maxVisible?: number;
2864
+ /** @default "small" */
2865
+ size?: "small" | "medium";
2866
+ /** Fija el modo y apaga la medición. Para cuando el ancho no es quien debe decidir. */
2867
+ mode?: ResponsiveActionsMode;
2868
+ }
2869
+ /**
2870
+ * Una barra de acciones que se encoge sola cuando deja de caber: primero pierde las etiquetas y
2871
+ * se queda en iconos, después esconde en un menú de tres puntos todo menos lo fijado, y al final
2872
+ * se mete ahí entera.
2873
+ *
2874
+ * Encogerse es cosa del ancho; cuántas acciones merecen un botón, no. Para eso está `maxVisible`,
2875
+ * que manda al menú lo que pase de la cuenta aunque sobre sitio —una barra de ocho botones cabe
2876
+ * en una pantalla ancha y aun así no hay quien la lea—.
2877
+ *
2878
+ * Mide, no adivina. Los breakpoints del viewport no sirven aquí —la misma barra vive en una
2879
+ * página ancha y en un cajón de 460px, donde la pantalla es grande y el hueco no—, así que
2880
+ * compara el ancho que le dejaron con el que sus botones piden y baja un escalón cuando no
2881
+ * alcanza. Es el mismo motivo por el que el layout de los campos resuelve por `@container`.
2882
+ *
2883
+ * Para que la medición signifique algo, el padre tiene que ser un renglón flex que le deje
2884
+ * crecer al sobrante: la raíz se estira (`flexGrow`) para que su ancho *sea* el hueco, y los
2885
+ * botones van dentro sin encogerse, así que su ancho es lo que piden de verdad.
2886
+ */
2887
+ declare const ResponsiveActions: ({ actions, maxVisible, size, mode: forcedMode, }: ResponsiveActionsProps) => react_jsx_runtime.JSX.Element | null;
2888
+
2889
+ interface DetailActionsProps {
2890
+ /**
2891
+ * Editar. Va fijada, así que es la última en irse al menú cuando el renglón se estrecha: es
2892
+ * la acción de siempre en una ficha, y la que se busca sin leer. Se lleva consigo el Ctrl+E
2893
+ * que vivía en `EditButton`, el botón suelto que esta barra vino a sustituir.
2894
+ */
2895
+ edit?: {
2896
+ onClick: () => void;
2897
+ };
2586
2898
  delete?: {
2587
2899
  mutation: any;
2588
2900
  disableNavBack?: boolean;
@@ -2599,8 +2911,14 @@ interface ActionsMenuProps {
2599
2911
  icon: ReactNode;
2600
2912
  onClick: () => void;
2601
2913
  }[];
2602
- /** Tamaño del botón que abre el menú. `"small"` para las cabeceras del cajón. */
2914
+ /** Tamaño de los botones. `"small"` para las cabeceras del cajón. */
2603
2915
  size?: "small" | "medium";
2916
+ /**
2917
+ * Fija cómo se dibuja la barra en vez de dejar que se mida. El cajón lo usa para quedarse
2918
+ * siempre en el menú de tres puntos: su cabecera ya lleva sus propios botones al lado.
2919
+ * @see ResponsiveActionsProps.mode
2920
+ */
2921
+ mode?: ResponsiveActionsMode;
2604
2922
  }
2605
2923
 
2606
2924
  interface DetailPageV2Props {
@@ -2626,13 +2944,19 @@ interface DetailPageV2Props {
2626
2944
  slots?: {
2627
2945
  button?: ReactNode;
2628
2946
  /**
2629
- * Acciones propias del registro, junto a las del armazón. En `"detail"` viven dentro
2630
- * del menú de acciones; en alta y edición, como iconos al lado de Guardar.
2947
+ * Acciones propias del registro, junto a las del armazón. En `"detail"` entran en la
2948
+ * barra de acciones; en alta y edición, como iconos al lado de Guardar.
2631
2949
  *
2632
2950
  * Las mismas se le pueden pasar al cajón de `DrawerGrid_v2` (`drawer.extraButtons`),
2633
2951
  * para que el registro traiga sus acciones se abra donde se abra.
2634
2952
  */
2635
2953
  extraButtons?: DetailExtraButton[];
2954
+ /**
2955
+ * Ruta al estado del registro dentro del dato —`"estado"`—, que el backend manda como
2956
+ * `{ value, label }`: se lee la etiqueta y el código decide el color.
2957
+ *
2958
+ * @see DetailPageV2Props.slotProps.badge
2959
+ */
2636
2960
  badge?: string;
2637
2961
  };
2638
2962
  slotProps?: {
@@ -2645,15 +2969,30 @@ interface DetailPageV2Props {
2645
2969
  cancel?: Partial<ButtonProps>;
2646
2970
  };
2647
2971
  /**
2648
- * The history panel opened from the actions menu. It docks beside the page rather
2972
+ * The history panel opened from the actions bar. It docks beside the page rather
2649
2973
  * than floating over it, so the record stays readable next to what the history says
2650
- * about it — see `ActionsMenuProps.historial` for how to change that.
2974
+ * about it — see `DetailActionsProps.historial` for how to change that.
2651
2975
  */
2652
- historial?: ActionsMenuProps["historial"];
2976
+ historial?: DetailActionsProps["historial"];
2653
2977
  permissionsPath?: string;
2654
2978
  deleteButton?: {
2655
2979
  disableNavBack?: boolean;
2656
2980
  };
2981
+ badge?: {
2982
+ /**
2983
+ * De qué color se pinta cada estado, por código:
2984
+ *
2985
+ * colors: { "1": "warning", "2": "info", "3": "success" }
2986
+ *
2987
+ * Es el mismo mapa que recibe `renderChipCell` en las columnas de una tabla, así que
2988
+ * lo natural es declararlo junto al catálogo y pasarlo a los dos: el estado "2" se ve
2989
+ * igual en la lista que en la ficha.
2990
+ *
2991
+ * Sin mapa la insignia queda neutra —gris—, que es como se veían todos antes de que
2992
+ * hubiera con qué distinguirlos.
2993
+ */
2994
+ colors?: Record<string, StatusColor>;
2995
+ };
2657
2996
  };
2658
2997
  }
2659
2998
  declare function DetailPage(props: DetailPageV2Props): react_jsx_runtime.JSX.Element;
@@ -2684,11 +3023,27 @@ interface DetailFormDialogProps {
2684
3023
  save?: string;
2685
3024
  cancel?: string;
2686
3025
  };
3026
+ slots?: {
3027
+ /**
3028
+ * Ruta al estado del registro —`"estado"`—, la misma que recibe `DetailPage_v2`: se
3029
+ * pinta junto al título, con el mismo mapa de colores.
3030
+ *
3031
+ * Un diálogo es angosto por construcción, así que casi siempre se verá como el punto de
3032
+ * color con el rótulo en el globo.
3033
+ *
3034
+ * @see DetailPageV2Props.slots.badge
3035
+ */
3036
+ badge?: string;
3037
+ };
2687
3038
  slotProps?: {
2688
3039
  dialog?: Partial<DialogProps>;
2689
3040
  content?: Partial<DialogContentProps>;
2690
3041
  saveButton?: Partial<ButtonProps>;
2691
3042
  cancelButton?: Partial<ButtonProps>;
3043
+ /** @see DetailPageV2Props.slotProps.badge */
3044
+ badge?: {
3045
+ colors?: Record<string, StatusColor>;
3046
+ };
2692
3047
  };
2693
3048
  }
2694
3049
  /**
@@ -2697,7 +3052,7 @@ interface DetailFormDialogProps {
2697
3052
  * becomes a `DialogTitle` and the buttons move into `DialogActions`. The save button lives
2698
3053
  * outside the `<form>` tree, so it submits via the native `form={formId}` attribute.
2699
3054
  */
2700
- declare function DetailFormDialog({ open, onClose, title, api, form, sections, pageType, permissionsPath, onSuccess, responsiveTo, containerBreakpoints, labels, slotProps, }: DetailFormDialogProps): react_jsx_runtime.JSX.Element;
3055
+ declare function DetailFormDialog({ open, onClose, title, api, form, sections, pageType, permissionsPath, onSuccess, responsiveTo, containerBreakpoints, labels, slots, slotProps, }: DetailFormDialogProps): react_jsx_runtime.JSX.Element;
2701
3056
 
2702
3057
  /**
2703
3058
  * Encabezado por defecto del `PageContainer`: resuelve título y breadcrumbs a
@@ -2706,6 +3061,11 @@ declare function DetailFormDialog({ open, onClose, title, api, form, sections, p
2706
3061
  *
2707
3062
  * El título se lee de `state.header.title` (slice `headerReducer` de la librería)
2708
3063
  * cuando hay un id en la ruta; de lo contrario se deriva del título de la página.
3064
+ *
3065
+ * Pinta la misma estructura que el `PageHeader` de Toolpad —breadcrumbs arriba, título
3066
+ * y barra de acciones abajo— y no aquel componente, porque su título es un `string` y
3067
+ * aquí hace falta poder poner algo a su lado: el hueco donde aterriza la nota de la
3068
+ * página (ver `PageInfo`).
2709
3069
  **/
2710
3070
  /**
2711
3071
  * Página sin entrada en la navegación de Toolpad. Como `useActivePage` no la
@@ -2916,6 +3276,112 @@ interface MainLayoutProps {
2916
3276
  declare const SIDE_PANEL_WIDTH_VAR = "--acv-side-panel-width";
2917
3277
  declare const MainLayout: (props: MainLayoutProps) => react_jsx_runtime.JSX.Element;
2918
3278
 
3279
+ interface PageInfoProps {
3280
+ /**
3281
+ * La nota. Admite marcado —negritas, listas, enlaces—, así que puede ser lo mismo
3282
+ * que antes se pintaba en un `Alert` al principio del contenido.
3283
+ */
3284
+ children: ReactNode;
3285
+ /** Nombre accesible del botón. */
3286
+ label?: string;
3287
+ /** Ancho máximo del globo, en px. */
3288
+ maxWidth?: number;
3289
+ }
3290
+ /**
3291
+ * Explica la página desde un botón junto a su título, en vez de gastar un `Alert` en la
3292
+ * primera pantalla: el que ya sabe cómo funciona no vuelve a leerlo, pero sigue a mano
3293
+ * para el que llega nuevo.
3294
+ *
3295
+ * Se declara dentro de la página —no pinta nada donde se pone— y viaja por portal hasta
3296
+ * el hueco del encabezado (ver `PageInfoHostContext`). Sólo puede haber una nota por
3297
+ * página: dos `<PageInfo>` a la vez dejan los dos botones uno junto al otro.
3298
+ *
3299
+ * <PageInfo>
3300
+ * El tope limita la <strong>suma de los porcentajes</strong> del mes.
3301
+ * </PageInfo>
3302
+ *
3303
+ * El globo se abre al pasar el cursor y también al llegar al botón con el tabulador, y
3304
+ * es interactivo: se puede entrar en él a copiar el texto o a seguir un enlace.
3305
+ **/
3306
+ declare const PageInfo: ({ children, label, maxWidth }: PageInfoProps) => react_jsx_runtime.JSX.Element | null;
3307
+
3308
+ interface PageInfoHost {
3309
+ /**
3310
+ * El nodo que el encabezado reserva junto al título, o `null` mientras no haya uno
3311
+ * —pantalla completa, o un `pageHeader` propio que no lo reserve—.
3312
+ */
3313
+ element: HTMLElement | null;
3314
+ /** Lo publica el encabezado al montarse, y lo retira (`null`) al desmontarse. */
3315
+ publicar: (element: HTMLElement | null) => void;
3316
+ }
3317
+ /**
3318
+ * Cómo llega la nota de una página hasta el costado de su título.
3319
+ *
3320
+ * La nota la escribe la página —es texto suyo, no del cascarón— pero se pinta en el
3321
+ * encabezado, que ni siquiera es hijo suyo: `PageContainer` lo dibuja aparte del
3322
+ * `Outlet`. Así que `<PageInfo>` se declara donde se quiera dentro de la página y se
3323
+ * teletransporta (portal) hasta `element`.
3324
+ *
3325
+ * Fuera de un `MainLayout` el contexto es `null` y `<PageInfo>` no pinta nada, en vez de
3326
+ * soltar el botón en medio del contenido.
3327
+ */
3328
+ declare const PageInfoHostContext: React.Context<PageInfoHost | null>;
3329
+ /** El hueco de la nota del encabezado, o `null` si no hay ninguno arriba. */
3330
+ declare const usePageInfoHost: () => PageInfoHost | null;
3331
+
3332
+ interface PageActionsHost {
3333
+ /**
3334
+ * El nodo que el encabezado deja libre a la derecha del título, o `null` mientras no haya
3335
+ * uno —pantalla completa, o un `pageHeader` propio que no lo reserve—.
3336
+ */
3337
+ element: HTMLElement | null;
3338
+ /** Lo publica el encabezado al montarse, y lo retira (`null`) al desmontarse. */
3339
+ publicar: (element: HTMLElement | null) => void;
3340
+ }
3341
+ /**
3342
+ * Cómo llegan las acciones de una página hasta el renglón de su título.
3343
+ *
3344
+ * Mismo viaje que la nota de la página (ver `PageInfoHostContext`) y por la misma razón: las
3345
+ * acciones son de la página, pero se pintan en el encabezado, que ni siquiera es hijo suyo.
3346
+ * La diferencia está en para qué sirve el hueco. La nota sólo necesitaba dónde aterrizar; estas
3347
+ * necesitan además *cuánto espacio hay*, y por eso el hueco se queda con el sobrante del renglón
3348
+ * en vez de ceñirse a su contenido: así una barra que se mide sola (`ResponsiveActions`) puede
3349
+ * comparar lo que piden sus botones contra lo que el título le dejó, y encogerse cuando ya no
3350
+ * alcanza. Es la respuesta que la esquina flotante del `ContentLayout` no sabe dar: al estar
3351
+ * posicionada y ajustarse a su contenido, ahí el hueco y los botones miden siempre lo mismo.
3352
+ *
3353
+ * Fuera de un `MainLayout` el contexto es `null`, y quien lo use se las arregla por su cuenta
3354
+ * —la página de detalle vuelve a la esquina flotante de siempre—.
3355
+ */
3356
+ declare const PageActionsHostContext: React.Context<PageActionsHost | null>;
3357
+ /** El hueco de las acciones del encabezado, o `null` si no hay ninguno arriba. */
3358
+ declare const usePageActionsHost: () => PageActionsHost | null;
3359
+
3360
+ interface PageBadgeHost {
3361
+ /**
3362
+ * El nodo que el encabezado reserva al lado del título, o `null` mientras no haya uno
3363
+ * —pantalla completa, o un `pageHeader` propio que no lo reserve—.
3364
+ */
3365
+ element: HTMLElement | null;
3366
+ /** Lo publica el encabezado al montarse, y lo retira (`null`) al desmontarse. */
3367
+ publicar: (element: HTMLElement | null) => void;
3368
+ }
3369
+ /**
3370
+ * Cómo llega el estado de un registro hasta el lado de su título.
3371
+ *
3372
+ * Mismo viaje que la nota (ver `PageInfoHostContext`) y que las acciones
3373
+ * (`PageActionsHostContext`); lo que cambia es dónde aterriza y por qué. El estado califica al
3374
+ * registro igual que su nombre —"embarque 12345, cerrado"—, así que se lee junto a él y no en
3375
+ * la otra punta del renglón: allí quedaba pegado a los botones, como si fuera uno más, y encima
3376
+ * gastaba el ancho que las acciones necesitan para no encogerse.
3377
+ *
3378
+ * Fuera de un `MainLayout` el contexto es `null` y la página de detalle vuelve a colgar la
3379
+ * insignia de la esquina flotante del `ContentLayout`, que es donde vivía.
3380
+ */
3381
+ declare const PageBadgeHostContext: React.Context<PageBadgeHost | null>;
3382
+ /** El hueco de la insignia del encabezado, o `null` si no hay ninguno arriba. */
3383
+ declare const usePageBadgeHost: () => PageBadgeHost | null;
3384
+
2919
3385
  /**
2920
3386
  * Contenido por defecto de cada snack dentro de `ObjectProgressStack`.
2921
3387
  * Muestra una barra de progreso (determinada si `progress` viene definido,
@@ -3172,19 +3638,5 @@ interface UseColorModeResult {
3172
3638
  }
3173
3639
  declare function useColorMode(): UseColorModeResult;
3174
3640
 
3175
- interface PulseDotProps {
3176
- /** Cuando es `true`, el punto es verde y parpadea; si no, usa `inactiveColor`. */
3177
- active: boolean;
3178
- /** Color cuando no está activo. Por defecto `error.main`. */
3179
- inactiveColor?: string;
3180
- /** Tamaño del punto en px. Por defecto 10. */
3181
- size?: number;
3182
- /** Título opcional; si se pasa, envuelve el punto en un Tooltip. */
3183
- title?: ReactNode;
3184
- }
3185
- /** Punto de estado: verde con animación de parpadeo cuando está activo, de lo
3186
- * contrario un color fijo. Se usa para indicar conexión/actividad en vivo. */
3187
- declare function PulseDot({ active, inactiveColor, size, title }: PulseDotProps): react_jsx_runtime.JSX.Element;
3188
-
3189
- export { APIContext, APIProvider, AccountMenuContent, ActiveCell, ActiveIcon, Base, ButtonWithDrawer, COLOR_SCHEME_SELECTOR, CSVUpload, ChipCell, ConfirmDialog, ContentLayout, ControlledAddressAutocomplete, ControlledAmountWithCurrency, ControlledColor, ControlledDate$1 as ControlledDate, ControlledDate as ControlledDate_v2, ControlledDropdown, ControlledFileField$1 as ControlledFileField, ControlledFileField as ControlledFileField_v2, FileUploadBox as ControlledFileUploadBox, ControlledNumber, ControlledPhoneNumber, ControlledSelect$1 as ControlledSelect, ControlledSelect as ControlledSelect_v2, ControlledSlider as ControlledSimpleSlider, ControlledSlider$1 as ControlledSlider, ControlledSwitch, ControlledText, ControlledTimePicker, ControlledToggleButtons, CoverPage, CreateButtonBase, CreateButtonWithMenuOptions, CrudDropdown, CustomNoRows, DEFAULT_FORM_BREAKPOINTS, DEFAULT_PAGINATION, DeleteButton, DeleteConfirmationDialog, DetailFormDialog as DetailFormDialog_v2, DetailFormDrawer as DetailFormDrawer_v2, DetailForm as DetailForm_v2, DetailPage$1 as DetailPage, DetailPage as DetailPage_v2, DrawerGrid as DrawerGrid_v2, EditButton, ExportCSV$1 as ExportCSV, ExportCSV as ExportCSV_v2, ExtraButtons, FORM_CONTAINER_NAME, GlobalSearch, HistorialDrawer, KpiCard, LAYER_ORDER, ListPage, Loadable, LoadingComponent, Logo, MainDrawer, MainDrawer$1 as MainDrawer_v2, MainLayout, MenuItemWithLoading, ModuleCard, MoreOptions, MyGridEditSingleSelect, NavigationContext, NavigationProvider, NormalOrIcon, NotAllowed, NotFound, NotificationItem, NotificationsBell, ObjectProgressStack, PAGE_SIZE_OPTIONS, Panel, PollingCountdownChip, PulseDot, SIDE_PANEL_WIDTH_VAR, SaveCancelButton, ServerGrid as ServerGrid_v2, SidePanelHostContext, StatusBadge, StyledMenu, Tabs, Transitions, TrueFalse, UncontrolledText, changeTitle, closeProgressSnack, composeGridProps, deleteColumn$1 as deleteColumn, deleteColumn as deleteColumn_v2, editColumn, filterQuery, formContainerSx, formGridSx, formParser, _default as headerReducer, manualCacheRefresh, mergeSettings, openProgressSnack, query, renderChipCell, renderEditCellWithErrorTooltip, resolveChipOption, resolveInitialState, setErrors, _default$1 as snackProgressReducer, tags, theme, togglableFields, updateProgressSnackData, useAPI, useColorMode, useDetailForm, useHasPermission, useHasPermission_v2, useKeyboardShortcut, useMutationHandler, useNavigation, useServerGrid, useSidePanelHost, valueLabel };
3190
- export type { APIcontextProps, AccountMenuContentProps, AccountMenuItem, AddressValue, AppTheme, ChipCellProps, ChipColor, ChipOption, ColorMode, ComoOpcionesProps, ConfirmDialogProps, ControlledInput, CustomFilterDef, CustomToolbarProps, DeleteGridColumnsProps$1 as DeleteGridColumnsProps, DetachedPage, DetailExtraButton, DetailFormApi, DetailFormConfig, DetailFormController, DetailFormDialogProps, DetailFormDrawerNavigation, DetailFormDrawerProps, DetailFormProps, DetailFormStatus, DetailPageV2Props, DetailRenderProps, DrawerGridDrawerConfig, DrawerGridEditConfig, DrawerGridProps, EditGridColumnsProps, EditReadOnlyFields, ExportCSVProps as ExportCSVProps_v2, FieldFilter, FieldProps$1 as FieldProps, FieldValidationProps, FilterInput, FormBreakpoint, FormGridSxOptions, GlobalSearchOption, GlobalSearchProps, GridArgs, GridColDefPropsOverrides, GridLayerContribution, GridLayerId, GridLayerMap, JSONFormProps, JSONParserProps, KeyboardShortcut, KpiCardProps, MainDrawerV2Props, MainLayoutFooterConfig, MainLayoutPageHeaderProps, MainLayoutProps, MainLayoutSidebarFooterProps, MyDataGridProps, MyGridFilterModel, MyTab, MyTabProps, NotificationItemProps, NotificationsApi, NotificationsBellProps, PageType, PanelProps, PollingCountdownChipProps, ProgressStatusProps, PulseDotProps, RowsSnapshot, ServerGridArgs, ServerGridCreateApi, ServerGridDataApi, ServerGridDeleteApi, ServerGridEditApi, ServerGridEditToggleApi, ServerGridHandle, ServerGridProps, ServerGridSnapshot, ServerGridState, SidePanelHost, UseColorModeResult, UseServerGridOptions };
3641
+ export { APIContext, APIProvider, AccountMenuContent, ActiveCell, ActiveIcon, Base, ButtonWithDrawer, COLOR_SCHEME_SELECTOR, CSVUpload, ChipCell, ConfirmDialog, ContentLayout, ControlledAddressAutocomplete, ControlledAmountWithCurrency, ControlledAutocomplete, ControlledColor, ControlledDate$1 as ControlledDate, ControlledDate as ControlledDate_v2, ControlledDropdown, ControlledFileField$1 as ControlledFileField, ControlledFileField as ControlledFileField_v2, FileUploadBox as ControlledFileUploadBox, ControlledNumber, ControlledPhoneNumber, ControlledSelect$1 as ControlledSelect, ControlledSelect as ControlledSelect_v2, ControlledSlider as ControlledSimpleSlider, ControlledSlider$1 as ControlledSlider, ControlledSwitch, ControlledText, ControlledTimePicker, ControlledToggleButtons, CoverPage, CreateButtonBase, CreateButtonWithMenuOptions, CrudDropdown, CustomNoRows, DEFAULT_FORM_BREAKPOINTS, DEFAULT_PAGINATION, DeleteButton, DeleteConfirmationDialog, DetailFormDialog as DetailFormDialog_v2, DetailFormDrawer as DetailFormDrawer_v2, DetailForm as DetailForm_v2, DetailPage$1 as DetailPage, DetailPage as DetailPage_v2, DrawerGrid as DrawerGrid_v2, EditButton, ExportCSV$1 as ExportCSV, ExportCSV as ExportCSV_v2, ExtraButtons, FORM_CONTAINER_NAME, GlobalSearch, HEADER_CONTAINER, HEADER_NARROW, HistorialDrawer, KpiCard, LAYER_ORDER, ListPage, Loadable, LoadingComponent, Logo, MainDrawer, MainDrawer$1 as MainDrawer_v2, MainLayout, MenuItemWithLoading, ModuleCard, MoreOptions, MyGridEditSingleSelect, NavigationContext, NavigationProvider, NormalOrIcon, NotAllowed, NotFound, NotificationItem, NotificationsBell, ObjectProgressStack, PAGE_SIZE_OPTIONS, PageActionsHostContext, PageBadgeHostContext, PageInfo, PageInfoHostContext, Panel, PollingCountdownChip, PulseDot, RESPONSIVE_ACTION_MODES, ResponsiveActions, SIDE_PANEL_WIDTH_VAR, SaveCancelButton, ServerGrid as ServerGrid_v2, SidePanelHostContext, StatusBadge, StyledMenu, Tabs, Transitions, TrueFalse, UncontrolledText, changeTitle, closeProgressSnack, composeGridProps, deleteColumn$1 as deleteColumn, deleteColumn as deleteColumn_v2, editColumn, filterQuery, formContainerSx, formGridSx, formParser, headerContainerSx, _default as headerReducer, manualCacheRefresh, mergeSettings, openProgressSnack, query, renderChipCell, renderEditCellWithErrorTooltip, resolveChipOption, resolveInitialState, resolveStatusColor, setErrors, _default$1 as snackProgressReducer, statusColors, tags, theme, togglableFields, updateProgressSnackData, useAPI, useColorMode, useDetailForm, useHasPermission, useHasPermission_v2, useKeyboardShortcut, useMutationHandler, useNavigation, usePageActionsHost, usePageBadgeHost, usePageInfoHost, useServerGrid, useSidePanelHost, valueLabel };
3642
+ export type { APIcontextProps, AccountMenuContentProps, AccountMenuItem, AddressValue, AppTheme, AutocompleteOption, ChipCellProps, ChipColor, ChipOption, ColorMode, ComoOpcionesProps, ConfirmDialogProps, ControlledAutocompleteProps, ControlledInput, CustomFilterDef, CustomToolbarProps, DeleteGridColumnsProps$1 as DeleteGridColumnsProps, DetachedPage, DetailExtraButton, DetailFormApi, DetailFormConfig, DetailFormController, DetailFormDialogProps, DetailFormDrawerNavigation, DetailFormDrawerProps, DetailFormProps, DetailFormStatus, DetailPageV2Props, DetailRenderProps, DrawerGridDrawerConfig, DrawerGridEditConfig, DrawerGridProps, EditGridColumnsProps, EditReadOnlyFields, ExportCSVProps as ExportCSVProps_v2, FieldFilter, FieldProps$1 as FieldProps, FieldValidationProps, FilterInput, FormBreakpoint, FormGridSxOptions, GlobalSearchOption, GlobalSearchProps, GridArgs, GridColDefPropsOverrides, GridLayerContribution, GridLayerId, GridLayerMap, JSONFormProps, JSONParserProps, KeyboardShortcut, KpiCardProps, MainDrawerV2Props, MainLayoutFooterConfig, MainLayoutPageHeaderProps, MainLayoutProps, MainLayoutSidebarFooterProps, MyDataGridProps, MyGridFilterModel, MyTab, MyTabProps, NotificationItemProps, NotificationsApi, NotificationsBellProps, PageActionsHost, PageBadgeHost, PageInfoHost, PageInfoProps, PageType, PanelProps, PollingCountdownChipProps, ProgressStatusProps, PulseDotProps, ResponsiveAction, ResponsiveActionsMode, ResponsiveActionsProps, RowsSnapshot, ServerGridArgs, ServerGridCreateApi, ServerGridDataApi, ServerGridDeleteApi, ServerGridEditApi, ServerGridEditToggleApi, ServerGridHandle, ServerGridProps, ServerGridSnapshot, ServerGridState, SidePanelHost, StatusColor, UseColorModeResult, UseServerGridOptions };