@acvl/frontend-components 0.0.95 → 0.0.97

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
@@ -2937,6 +2937,32 @@ interface SubsectionProps {
2937
2937
  bgColor?: string;
2938
2938
  title?: string;
2939
2939
  description?: string;
2940
+ /**
2941
+ * Deja plegar la subsección desde su título: la flecha aparece a su izquierda y el renglón
2942
+ * entero se vuelve el interruptor.
2943
+ *
2944
+ * Apagado por defecto. Plegar es una decisión de la ficha —un bloque largo, o uno que casi
2945
+ * nunca se mira—, no una consecuencia de ponerle título: antes bastaba con titularla para
2946
+ * que apareciera la flecha, así que un clic distraído en el encabezado escondía campos que
2947
+ * nadie pidió esconder.
2948
+ *
2949
+ * Plegada mide sólo su encabezado, así que deja de estirarse a lo alto del renglón que
2950
+ * comparte con sus hermanas: el hueco que ocupaba se lo queda lo que siga.
2951
+ *
2952
+ * Sin `title` no hay de dónde plegar —la flecha vive en su renglón—, así que se ignora.
2953
+ * @default false
2954
+ */
2955
+ collapsible?: boolean;
2956
+ /**
2957
+ * Arranca plegada. Sólo aplica con `collapsible` —si no, no habría flecha con que abrirla—.
2958
+ *
2959
+ * Es el arranque, no una orden: en cuanto el usuario la pliega o la despliega manda su
2960
+ * elección, que se recuerda mientras dure la sesión y para todas las fichas del mismo tipo
2961
+ * (ver `DetailFormProps.storageScope`). Así que esto es para lo que casi nunca se mira
2962
+ * —auditoría, totales de detalle— y no para esconder algo que el usuario va a necesitar.
2963
+ * @default false
2964
+ */
2965
+ defaultCollapsed?: boolean;
2940
2966
  first?: boolean;
2941
2967
  slotProps?: {
2942
2968
  /**
@@ -2945,8 +2971,9 @@ interface SubsectionProps {
2945
2971
  * que un `{ xs: 12, md: 6 }` parte el formulario en dos columnas cuando *el formulario*
2946
2972
  * es ancho, no cuando lo es la pantalla.
2947
2973
  *
2948
- * La subsección se estira a lo alto del renglón que comparte con sus hermanas; un
2949
- * `alignSelf: "flex-start"` aquí la devuelve a medir solo lo que su contenido.
2974
+ * La subsección se estira a lo alto del renglón que comparte con sus hermanas —salvo
2975
+ * plegada, que mide su encabezado—; un `alignSelf: "flex-start"` aquí la devuelve a
2976
+ * medir solo lo que su contenido.
2950
2977
  */
2951
2978
  parentGrid?: Partial<GridProps>;
2952
2979
  };
@@ -2966,7 +2993,16 @@ interface SubsectionProps {
2966
2993
  actions?: ReactNode | ((data: any) => ReactNode);
2967
2994
  }
2968
2995
 
2969
- interface SectionProps extends Partial<Omit<MyTab, "children">> {
2996
+ /**
2997
+ * Una sección de la ficha. Cuando hay más de una visible se vuelven pestañas, y el número de
2998
+ * cada una lo pone `DetailForm` por su orden entre las visibles —"1", "2", "3"—.
2999
+ *
3000
+ * De ahí que no lleve `value`: la posición en la lista ya es su identidad, y escribirlo a mano
3001
+ * era repetirla con otra letra. Repetida se desincroniza —una sección escondida dejaba huecos
3002
+ * ("1" y "3") y la ficha abría en una pestaña que no estaba; una sección nueva al principio
3003
+ * obligaba a renumerar a las de abajo—.
3004
+ */
3005
+ interface SectionProps extends Partial<Omit<MyTab, "children" | "value">> {
2970
3006
  pageType?: PageType;
2971
3007
  display?: boolean;
2972
3008
  subsections: SubsectionProps[];
@@ -3138,6 +3174,20 @@ interface DetailFormProps {
3138
3174
  formId?: string;
3139
3175
  /** Persist-tab key for multi-section forms. Defaults to `formId`. */
3140
3176
  storageKey?: string;
3177
+ /**
3178
+ * Bajo qué nombre recuerda el formulario lo que el usuario acomoda en él: hoy, cuáles
3179
+ * subsecciones dejó plegadas (ver `SubsectionProps.collapsible`).
3180
+ *
3181
+ * Es a propósito más grueso que `storageKey`: este no lleva el registro, así que plegar una
3182
+ * subsección en un embarque la deja plegada en todos. `DetailPage_v2` lo arma solo, con su
3183
+ * ruta sin los parámetros.
3184
+ *
3185
+ * Sin esto no se recuerda nada —las subsecciones abren como diga `defaultCollapsed` y ya—.
3186
+ * Ese es el default en un cajón o un diálogo, donde el `formId` es generado (`useId`) y la
3187
+ * ruta es la del listado de atrás: ninguno de los dos nombra la ficha. Dales uno estable
3188
+ * aquí —`"/embarques/bultos"`— y sus subsecciones empiezan a recordar.
3189
+ */
3190
+ storageScope?: string;
3141
3191
  /** Height factor passed to the loading spinner. Defaults to `0.7`. */
3142
3192
  loadingHeight?: number;
3143
3193
  /**
@@ -3168,7 +3218,7 @@ interface DetailFormProps {
3168
3218
  * element and the section/tab render tree — no page layout, no header buttons. Compose it
3169
3219
  * inside a page, dialog or drawer shell that supplies the surrounding chrome.
3170
3220
  */
3171
- declare function DetailForm({ controller, formId, storageKey, loadingHeight, responsiveTo, containerBreakpoints, slotProps, }: DetailFormProps): react_jsx_runtime.JSX.Element;
3221
+ declare function DetailForm({ controller, formId, storageKey, storageScope, loadingHeight, responsiveTo, containerBreakpoints, slotProps, }: DetailFormProps): react_jsx_runtime.JSX.Element;
3172
3222
 
3173
3223
  /**
3174
3224
  * An action the consumer hangs off a record's chrome — cerrar, revertir, descargar el PDF —
@@ -3793,6 +3843,20 @@ interface DetailFormDrawerProps {
3793
3843
  * página. `display` y `onClick` reciben el registro cargado.
3794
3844
  */
3795
3845
  extraButtons?: DetailExtraButton[];
3846
+ /**
3847
+ * El historial del registro, igual que en su página completa: se ofrece sólo cuando el
3848
+ * registro dice traerlo (`has_history`), abre el mismo panel y atiende el mismo
3849
+ * Ctrl+Shift+H.
3850
+ *
3851
+ * `endpoint` es obligatorio en la práctica aunque el tipo lo deje pasar: el panel lo
3852
+ * adivina de la ruta, y la ruta de un cajón es la del listado de atrás —`/embarques`, no
3853
+ * `/embarques/123`—, así que sin él pediría el historial del listado. Sin `endpoint` no
3854
+ * hay nada que ofrecer. `DrawerGrid_v2` lo arma solo con la ruta del registro.
3855
+ *
3856
+ * El panel hereda la colocación del cajón: acoplado si el cajón lo está, flotando si no
3857
+ * —ver `variant`—.
3858
+ */
3859
+ historial?: DetailActionsProps["historial"];
3796
3860
  /**
3797
3861
  * Footer record navigator: prev/next arrows (Alt+↑ / Alt+↓) that step through a list of
3798
3862
  * sibling records — e.g. the rows of the grid the drawer was opened from — without
@@ -3838,6 +3902,13 @@ interface DetailFormDrawerProps {
3838
3902
  responsiveTo?: DetailFormProps["responsiveTo"];
3839
3903
  /** @see DetailFormProps.containerBreakpoints */
3840
3904
  containerBreakpoints?: DetailFormProps["containerBreakpoints"];
3905
+ /**
3906
+ * Enciende la memoria de las subsecciones plegadas, bajo este nombre. Aquí no hay default
3907
+ * que valga: el `formId` es generado y la ruta es la del listado de atrás, así que la
3908
+ * ficha tiene que nombrarse a mano —`"/embarques/bultos"`—.
3909
+ * @see DetailFormProps.storageScope
3910
+ */
3911
+ storageScope?: DetailFormProps["storageScope"];
3841
3912
  labels?: {
3842
3913
  save?: string;
3843
3914
  cancel?: string;
@@ -3889,7 +3960,7 @@ interface DetailFormDrawerProps {
3889
3960
  * deja el registro en pantalla y editando — para formularios que se capturan de a poco o que
3890
3961
  * llevan una grilla adentro.
3891
3962
  */
3892
- declare function DetailFormDrawer({ open, onClose, title, api, form, sections, pageType, startInEdit, recordKey, permissionsPath, onSuccess, keepOpenOnSave, extraButtons, navigation, width, anchor, variant, resizable, minWidth, maxWidth, widthStorageKey, onWidthChange, responsiveTo, containerBreakpoints, labels, slots, slotProps, }: DetailFormDrawerProps): react_jsx_runtime.JSX.Element;
3963
+ declare function DetailFormDrawer({ open, onClose, title, api, form, sections, pageType, startInEdit, recordKey, permissionsPath, onSuccess, keepOpenOnSave, extraButtons, historial, navigation, width, anchor, variant, resizable, minWidth, maxWidth, widthStorageKey, onWidthChange, responsiveTo, containerBreakpoints, storageScope, labels, slots, slotProps, }: DetailFormDrawerProps): react_jsx_runtime.JSX.Element;
3893
3964
 
3894
3965
  interface DrawerGridDrawerConfig {
3895
3966
  /** Shared field layout, used by every mode. Same shape as `DetailPage_v2`'s `form`/`sections`. */
@@ -3971,6 +4042,19 @@ interface DrawerGridDrawerConfig {
3971
4042
  * de abrirlo en su página.
3972
4043
  */
3973
4044
  extraButtons?: DetailExtraButton[];
4045
+ /**
4046
+ * Afina el historial del registro en la cabecera del cajón — el ancho del panel, o la ruta
4047
+ * cuando no es la del registro. No hace falta declararlo para tenerlo: se ofrece solo en
4048
+ * cuanto el registro dice traerlo (`has_history`).
4049
+ *
4050
+ * La ruta sale sola de la del registro, la misma que abre "ver en página completa" — que es
4051
+ * de donde la saca también la página, del `pathname`. En una grilla con
4052
+ * `showOpenFullPage: false` no hay ruta de la que sacarla, así que ahí hay que darla a mano
4053
+ * o el historial no se ofrece.
4054
+ *
4055
+ * @see DetailFormDrawerProps.historial
4056
+ */
4057
+ historial?: DetailFormDrawerProps["historial"];
3974
4058
  /**
3975
4059
  * El estado del registro, junto al título de la cabecera del cajón —igual que en su página
3976
4060
  * completa—. `path` es la ruta al campo dentro del dato, que el backend manda como
@@ -4177,6 +4261,25 @@ interface DetailFormDialogProps {
4177
4261
  responsiveTo?: DetailFormProps["responsiveTo"];
4178
4262
  /** @see DetailFormProps.containerBreakpoints */
4179
4263
  containerBreakpoints?: DetailFormProps["containerBreakpoints"];
4264
+ /**
4265
+ * Enciende la memoria de las subsecciones plegadas, bajo este nombre. Aquí no hay default
4266
+ * que valga: el `formId` es generado y la ruta es la del listado de atrás, así que la
4267
+ * ficha tiene que nombrarse a mano —`"/embarques/bultos"`—.
4268
+ * @see DetailFormProps.storageScope
4269
+ */
4270
+ storageScope?: DetailFormProps["storageScope"];
4271
+ /**
4272
+ * El historial del registro, igual que en su página completa: un botón en el renglón del
4273
+ * título, con su Ctrl+Shift+H, que abre el mismo panel. Se ofrece sólo cuando el registro
4274
+ * dice traerlo (`has_history`).
4275
+ *
4276
+ * `endpoint` es obligatorio en la práctica aunque el tipo lo deje pasar: el panel lo adivina
4277
+ * de la ruta, y la ruta de un diálogo es la de la pantalla de atrás, no la del registro.
4278
+ *
4279
+ * El panel va flotando por fuerza: un diálogo es modal, y uno acoplado se pintaría en el
4280
+ * hueco del layout, o sea por debajo de su backdrop.
4281
+ */
4282
+ historial?: DetailActionsProps["historial"];
4180
4283
  labels?: {
4181
4284
  save?: string;
4182
4285
  cancel?: string;
@@ -4210,7 +4313,7 @@ interface DetailFormDialogProps {
4210
4313
  * becomes a `DialogTitle` and the buttons move into `DialogActions`. The save button lives
4211
4314
  * outside the `<form>` tree, so it submits via the native `form={formId}` attribute.
4212
4315
  */
4213
- declare function DetailFormDialog({ open, onClose, title, api, form, sections, pageType, permissionsPath, onSuccess, responsiveTo, containerBreakpoints, labels, slots, slotProps, }: DetailFormDialogProps): react_jsx_runtime.JSX.Element;
4316
+ declare function DetailFormDialog({ open, onClose, title, api, form, sections, pageType, permissionsPath, onSuccess, responsiveTo, containerBreakpoints, storageScope, historial, labels, slots, slotProps, }: DetailFormDialogProps): react_jsx_runtime.JSX.Element;
4214
4317
 
4215
4318
  /**
4216
4319
  * Encabezado por defecto del `PageContainer`: resuelve título y breadcrumbs a
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acvl/frontend-components",
3
- "version": "0.0.95",
3
+ "version": "0.0.97",
4
4
  "description": "Component library for ACV frontend projects.",
5
5
  "homepage": "https://github.com/ACV-Logistics/acv-frontend-components#readme",
6
6
  "access": "public",