@acvl/frontend-components 0.0.94 → 0.0.96

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[];
@@ -2988,6 +3024,20 @@ interface DetailFormApi {
2988
3024
  args?: any;
2989
3025
  disable?: boolean;
2990
3026
  successMessage?: string | ((response: any) => string);
3027
+ /**
3028
+ * Intercepts a 400 before the engine turns it into field errors and the generic
3029
+ * "validation error" notification. Return `true` when the form has handled it.
3030
+ *
3031
+ * For the rejections that are **a question, not a failure** — the server refusing an
3032
+ * action and telling the user how to insist. The case that asked for it: committing a
3033
+ * trip segment over a colleague's soft hold answers 400 naming who holds it, and the
3034
+ * screen has to offer "take it from them"; swallowed into the generic notification, that
3035
+ * second step disappears and with it the whole point of the soft hold.
3036
+ *
3037
+ * `useMutationHandler` already had the hook — this only passes it through, which is what
3038
+ * kept a form that needs it from using this engine at all.
3039
+ */
3040
+ onInvalidParams?: (error: any) => boolean;
2991
3041
  postAction?: {
2992
3042
  after: "create" | "edit" | "both";
2993
3043
  type: string;
@@ -3124,6 +3174,20 @@ interface DetailFormProps {
3124
3174
  formId?: string;
3125
3175
  /** Persist-tab key for multi-section forms. Defaults to `formId`. */
3126
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;
3127
3191
  /** Height factor passed to the loading spinner. Defaults to `0.7`. */
3128
3192
  loadingHeight?: number;
3129
3193
  /**
@@ -3154,7 +3218,7 @@ interface DetailFormProps {
3154
3218
  * element and the section/tab render tree — no page layout, no header buttons. Compose it
3155
3219
  * inside a page, dialog or drawer shell that supplies the surrounding chrome.
3156
3220
  */
3157
- 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;
3158
3222
 
3159
3223
  /**
3160
3224
  * An action the consumer hangs off a record's chrome — cerrar, revertir, descargar el PDF —
@@ -3779,6 +3843,20 @@ interface DetailFormDrawerProps {
3779
3843
  * página. `display` y `onClick` reciben el registro cargado.
3780
3844
  */
3781
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"];
3782
3860
  /**
3783
3861
  * Footer record navigator: prev/next arrows (Alt+↑ / Alt+↓) that step through a list of
3784
3862
  * sibling records — e.g. the rows of the grid the drawer was opened from — without
@@ -3824,6 +3902,13 @@ interface DetailFormDrawerProps {
3824
3902
  responsiveTo?: DetailFormProps["responsiveTo"];
3825
3903
  /** @see DetailFormProps.containerBreakpoints */
3826
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"];
3827
3912
  labels?: {
3828
3913
  save?: string;
3829
3914
  cancel?: string;
@@ -3875,7 +3960,7 @@ interface DetailFormDrawerProps {
3875
3960
  * deja el registro en pantalla y editando — para formularios que se capturan de a poco o que
3876
3961
  * llevan una grilla adentro.
3877
3962
  */
3878
- 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;
3879
3964
 
3880
3965
  interface DrawerGridDrawerConfig {
3881
3966
  /** Shared field layout, used by every mode. Same shape as `DetailPage_v2`'s `form`/`sections`. */
@@ -3957,6 +4042,19 @@ interface DrawerGridDrawerConfig {
3957
4042
  * de abrirlo en su página.
3958
4043
  */
3959
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"];
3960
4058
  /**
3961
4059
  * El estado del registro, junto al título de la cabecera del cajón —igual que en su página
3962
4060
  * completa—. `path` es la ruta al campo dentro del dato, que el backend manda como
@@ -4163,6 +4261,25 @@ interface DetailFormDialogProps {
4163
4261
  responsiveTo?: DetailFormProps["responsiveTo"];
4164
4262
  /** @see DetailFormProps.containerBreakpoints */
4165
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"];
4166
4283
  labels?: {
4167
4284
  save?: string;
4168
4285
  cancel?: string;
@@ -4196,7 +4313,7 @@ interface DetailFormDialogProps {
4196
4313
  * becomes a `DialogTitle` and the buttons move into `DialogActions`. The save button lives
4197
4314
  * outside the `<form>` tree, so it submits via the native `form={formId}` attribute.
4198
4315
  */
4199
- 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;
4200
4317
 
4201
4318
  /**
4202
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.94",
3
+ "version": "0.0.96",
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",