pixelon 0.3.77 → 0.3.79
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/components/atoms/lumi/FieldValue/FieldValue.d.ts +15 -0
- package/dist/components/atoms/lumi/FieldValue/index.d.ts +2 -0
- package/dist/components/atoms/lumi/FieldValue/types.d.ts +10 -0
- package/dist/components/atoms/lumi/Icon/Icon.d.ts +1 -0
- package/dist/components/molecules/chat/StructuredContent/components/ReactiveCrud/ChatLinkCell.d.ts +20 -0
- package/dist/components/molecules/chat/StructuredContent/components/ReactiveCrud/optionsLoader.d.ts +2 -1
- package/dist/components/molecules/chat/StructuredContent/components/ReactiveCrud/types.d.ts +6 -0
- package/dist/components/molecules/lumi/Drawer/Drawer.d.ts +8 -0
- package/dist/components/molecules/lumi/RecordCard/RecordCard.d.ts +14 -0
- package/dist/components/molecules/lumi/RecordCard/index.d.ts +2 -0
- package/dist/components/molecules/lumi/RecordCard/types.d.ts +16 -0
- package/dist/components/molecules/lumi/ScrollToEnd/ScrollToEnd.d.ts +21 -0
- package/dist/components/molecules/lumi/ScrollToEnd/index.d.ts +2 -0
- package/dist/components/templates/lumi/Crud/CardList.d.ts +34 -0
- package/dist/components/templates/lumi/Crud/Crud.d.ts +1 -1
- package/dist/components/templates/lumi/Crud/ScrollToEnd.d.ts +18 -0
- package/dist/components/templates/lumi/Crud/helpers/fieldValue.d.ts +12 -0
- package/dist/components/templates/lumi/Crud/types.d.ts +25 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.esm.js +566 -276
- package/dist/index.js +567 -275
- package/dist/styles.css +1 -1
- package/dist/styles.css.map +1 -1
- package/package.json +1 -1
- package/src/styles/index.scss +4 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { FieldValueProps } from './types';
|
|
3
|
+
import './FieldValue.scss';
|
|
4
|
+
/**
|
|
5
|
+
* SPEC-093 T2 — un dato con su nombre.
|
|
6
|
+
*
|
|
7
|
+
* Es lo que en una tabla hace la pareja cabecera + celda, pero sin tabla: cuando las columnas no
|
|
8
|
+
* caben, el nombre del dato tiene que viajar CON el dato. Sin él, «SOT093» o «En un parqueadero
|
|
9
|
+
* subterráneo» sueltos en una tarjeta no dicen de qué campo son.
|
|
10
|
+
*
|
|
11
|
+
* Tonto a propósito: recibe el valor YA pintado. Quién decide que un estado es un Badge o que una
|
|
12
|
+
* cifra lleva moneda es el mismo sitio que lo decide para la tabla (`renderFieldValue`), y este
|
|
13
|
+
* átomo no tiene por qué enterarse.
|
|
14
|
+
*/
|
|
15
|
+
export declare const FieldValue: React.FC<FieldValueProps>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface FieldValueProps {
|
|
3
|
+
/** Cómo se llama el dato. En una tabla sería la cabecera de la columna. */
|
|
4
|
+
label: string;
|
|
5
|
+
/** El valor ya pintado: texto, un Badge, una cifra con su moneda… */
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
/** `inline` pone etiqueta y valor en la misma línea; `stacked` uno debajo del otro. */
|
|
8
|
+
layout?: 'inline' | 'stacked';
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
@@ -37,6 +37,7 @@ export declare const LUMI_ICON_TYPES: {
|
|
|
37
37
|
readonly MENU: "menu";
|
|
38
38
|
readonly ARROW_UP: "arrow-up";
|
|
39
39
|
readonly ARROW_RIGHT: "arrow-right";
|
|
40
|
+
readonly ARROW_LEFT: "arrow-left";
|
|
40
41
|
readonly BUILDING: "building";
|
|
41
42
|
readonly MAP_PIN: "map-pin";
|
|
42
43
|
readonly USER_X: "user-x";
|
package/dist/components/molecules/chat/StructuredContent/components/ReactiveCrud/ChatLinkCell.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ChatEventBus } from '../../../../../../core/eventBus/chatEventBus';
|
|
3
|
+
export interface ChatTarget {
|
|
4
|
+
id: string;
|
|
5
|
+
label?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* SPEC-093 — un solo botón para abrir la conversación del registro.
|
|
9
|
+
*
|
|
10
|
+
* Antes se pintaba un botón por cada chat disponible (Aliado, Admin, Conductor). Con tres, la fila
|
|
11
|
+
* crecía de alto, la columna se comía el ancho de dos, y las filas quedaban desparejas según cuántos
|
|
12
|
+
* chats tuviera cada servicio.
|
|
13
|
+
*
|
|
14
|
+
* Con varios, el botón abre un menú y se elige. **Con uno solo NO hay menú**: se abre directo, que
|
|
15
|
+
* un desplegable de una sola opción es un clic de más y no informa de nada.
|
|
16
|
+
*/
|
|
17
|
+
export declare const ChatLinkCell: React.FC<{
|
|
18
|
+
targets: ChatTarget[];
|
|
19
|
+
eventBus?: ChatEventBus;
|
|
20
|
+
}>;
|
package/dist/components/molecules/chat/StructuredContent/components/ReactiveCrud/optionsLoader.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ import type { SelectOption } from '../../../../../organisms/lumi/DynamicForm/typ
|
|
|
2
2
|
import type { ChatEventBus } from '../../../../../../core/eventBus/chatEventBus';
|
|
3
3
|
import type { CrudFieldOptionsEndpoint } from './types';
|
|
4
4
|
export declare function unwrap(raw: unknown): unknown;
|
|
5
|
-
export declare function
|
|
5
|
+
export declare function resolveBody(body: Record<string, unknown> | undefined, ctx?: Record<string, unknown>): Record<string, unknown>;
|
|
6
|
+
export declare function loadOptions(eventBus: ChatEventBus, ep: CrudFieldOptionsEndpoint, ctx?: Record<string, unknown>): Promise<SelectOption[]>;
|
|
@@ -42,6 +42,8 @@ export interface ReactiveCrudField {
|
|
|
42
42
|
source?: string;
|
|
43
43
|
};
|
|
44
44
|
showInTable?: boolean;
|
|
45
|
+
/** SPEC-093 — se ve con la tarjeta plegada. Sin ninguno marcado, los tres primeros. */
|
|
46
|
+
summary?: boolean;
|
|
45
47
|
showInForm?: boolean;
|
|
46
48
|
showInModes?: Array<'create' | 'edit' | 'view'>;
|
|
47
49
|
required?: boolean;
|
|
@@ -144,6 +146,10 @@ export interface ReactiveCrudConfig {
|
|
|
144
146
|
x?: number | string;
|
|
145
147
|
y?: number | string;
|
|
146
148
|
};
|
|
149
|
+
/** SPEC-093 — `auto` (por defecto) pinta tarjetas cuando el contenedor baja de `cardsBelow`. */
|
|
150
|
+
layout?: 'auto' | 'table' | 'cards';
|
|
151
|
+
/** SPEC-093 — ancho (px) por debajo del cual `auto` pinta tarjetas. 768 por defecto. */
|
|
152
|
+
cardsBelow?: number;
|
|
147
153
|
/** SPEC-087 — cuenta atrás en el panel de un registro. Ver `DeadlineConfig`. */
|
|
148
154
|
deadline?: DeadlineConfig;
|
|
149
155
|
}
|
|
@@ -16,6 +16,14 @@ export interface DrawerProps {
|
|
|
16
16
|
fixedSize?: number;
|
|
17
17
|
/** Porcentaje de la pantalla cuando size='responsive' (default: 80) */
|
|
18
18
|
responsivePercentage?: number;
|
|
19
|
+
/**
|
|
20
|
+
* SPEC-093 — en móvil, HOJA por abajo con el alto de su contenido en vez de pantalla completa.
|
|
21
|
+
*
|
|
22
|
+
* Por defecto todo drawer se vuelve pantalla completa en móvil, que es lo correcto para un
|
|
23
|
+
* formulario. Para un contenido corto —una confirmación de dos líneas— no lo es: se come la
|
|
24
|
+
* pantalla entera, deja el 80% en blanco y los botones flotando a media altura.
|
|
25
|
+
*/
|
|
26
|
+
mobileSheet?: boolean;
|
|
19
27
|
/** Título del drawer (opcional) */
|
|
20
28
|
title?: string;
|
|
21
29
|
/** Contenido extra en el header (junto al botón de close) */
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { RecordCardProps } from './types';
|
|
3
|
+
import './RecordCard.scss';
|
|
4
|
+
/**
|
|
5
|
+
* SPEC-093 T3 — un registro como tarjeta plegable.
|
|
6
|
+
*
|
|
7
|
+
* Plegada enseña lo justo para reconocerlo y decidir si interesa; abierta, todo lo demás y sus
|
|
8
|
+
* acciones. Una lista de tarjetas todas abiertas es peor que la tabla que vino a sustituir: hay
|
|
9
|
+
* que desplazarse metros para comparar dos registros.
|
|
10
|
+
*
|
|
11
|
+
* Controlada desde fuera (`open` + `onToggle`) porque quién está abierto es decisión de la LISTA
|
|
12
|
+
* —solo una a la vez—, no de cada tarjeta por su cuenta.
|
|
13
|
+
*/
|
|
14
|
+
export declare const RecordCard: React.FC<RecordCardProps>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface RecordCardProps {
|
|
3
|
+
/** Lo que identifica al registro de un vistazo. Suele ser su número o su nombre. */
|
|
4
|
+
title: ReactNode;
|
|
5
|
+
/** Dos o tres datos que se ven SIN desplegar: el estado, el pago… */
|
|
6
|
+
summary?: ReactNode;
|
|
7
|
+
/** Todo lo demás. Solo se pinta cuando la tarjeta está abierta. */
|
|
8
|
+
children?: ReactNode;
|
|
9
|
+
/** Pie con las acciones del registro. También solo al abrir. */
|
|
10
|
+
actions?: ReactNode;
|
|
11
|
+
open?: boolean;
|
|
12
|
+
onToggle?: () => void;
|
|
13
|
+
/** Para la fila seleccionable de una lista; sin él la cabecera no es un botón. */
|
|
14
|
+
ariaLabel?: string;
|
|
15
|
+
className?: string;
|
|
16
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './ScrollToEnd.scss';
|
|
3
|
+
export interface ScrollToEndProps {
|
|
4
|
+
/** El área de datos; dentro de ella se busca quién tiene el scroll. Si nadie coincide con
|
|
5
|
+
* `selector`, se usa el propio host —que es el caso de una lista que se desplaza ella misma. */
|
|
6
|
+
hostRef: React.RefObject<HTMLElement | null>;
|
|
7
|
+
/** Con qué buscar al que se desplaza dentro del host. */
|
|
8
|
+
selector?: string;
|
|
9
|
+
/** Cambia cuando cambia el contenido o la forma (tabla ↔ tarjetas): obliga a volver a mirar. */
|
|
10
|
+
dep?: unknown;
|
|
11
|
+
label?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* SPEC-093 — «hay más abajo».
|
|
15
|
+
*
|
|
16
|
+
* Desde que la tabla se desplaza por dentro (para que el paginador no se vaya de la pantalla), no
|
|
17
|
+
* hay nada que avise de que la página tiene más filas de las que se ven: el borde inferior parece
|
|
18
|
+
* el final. Este botón aparece SOLO cuando queda contenido por debajo y desaparece al llegar al
|
|
19
|
+
* final, así que no es un adorno permanente: es el aviso, y de paso el atajo.
|
|
20
|
+
*/
|
|
21
|
+
export declare const ScrollToEnd: React.FC<ScrollToEndProps>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { RenderFieldConfig } from './types';
|
|
3
|
+
import './CardList.scss';
|
|
4
|
+
export interface CardListOption {
|
|
5
|
+
label: string;
|
|
6
|
+
onClick: () => void | Promise<void>;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
disabledReason?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface CardListProps<T extends Record<string, unknown>> {
|
|
11
|
+
fields: RenderFieldConfig[];
|
|
12
|
+
rows: T[];
|
|
13
|
+
rowKey: (row: T) => string;
|
|
14
|
+
/** Las mismas acciones que el menú de la tabla; aquí se pintan como botones. */
|
|
15
|
+
buildOptions?: (row: T) => CardListOption[];
|
|
16
|
+
loading?: boolean;
|
|
17
|
+
emptyText?: string;
|
|
18
|
+
}
|
|
19
|
+
/** SPEC-093 — qué se ve con la tarjeta plegada: lo marcado, o los tres primeros visibles. */
|
|
20
|
+
export declare function summaryFields(fields: RenderFieldConfig[]): RenderFieldConfig[];
|
|
21
|
+
/**
|
|
22
|
+
* SPEC-093 T4 — los mismos registros, en tarjetas.
|
|
23
|
+
*
|
|
24
|
+
* No es «la versión móvil de la tabla»: es la misma configuración pintada de otra forma cuando las
|
|
25
|
+
* columnas no caben. Los valores los pinta `renderFieldValue`, el mismo que la celda, para que un
|
|
26
|
+
* estado o una cifra no se vean distintos según el ancho de la pantalla.
|
|
27
|
+
*
|
|
28
|
+
* Una tarjeta abierta a la vez. Con todas abiertas hay que recorrer metros para comparar dos
|
|
29
|
+
* registros, que es peor que la tabla a la que vino a sustituir.
|
|
30
|
+
*/
|
|
31
|
+
export declare function CardList<T extends Record<string, unknown>>({ fields, rows, rowKey, buildOptions, loading, emptyText, }: CardListProps<T>): React.ReactElement;
|
|
32
|
+
export declare namespace CardList {
|
|
33
|
+
var displayName: string;
|
|
34
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CrudProps } from './types';
|
|
2
2
|
import './Crud.scss';
|
|
3
|
-
export declare function Crud<T extends Record<string, unknown>>({ size, showActionBar, actionBarMode, autoOpenCreate, formOnly, createDefaults, onCreateClose, renderByFields, dataSource, filters, total, onCreate, onEdit, onDelete, onView, onPaginationChange, onFilterChange, validationSchema, getRowKey, labels, disabledActions, loading, filterFields, defaultFilters, tableHeight, tableScroll, hidePagination, formDrawerWidth, formColumns, showRowActions, rowActionTypes, rowActions, customActions, customDrawers, onCustomAction, className, 'data-testid': testId, }: CrudProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export declare function Crud<T extends Record<string, unknown>>({ size, showActionBar, actionBarMode, autoOpenCreate, formOnly, createDefaults, onCreateClose, renderByFields, dataSource, filters, total, onCreate, onEdit, onDelete, onView, onPaginationChange, onFilterChange, validationSchema, getRowKey, labels, disabledActions, loading, filterFields, defaultFilters, tableHeight, tableScroll, layout, cardsBelow, hidePagination, formDrawerWidth, formColumns, showRowActions, rowActionTypes, rowActions, customActions, customDrawers, onCustomAction, className, 'data-testid': testId, }: CrudProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
export declare namespace Crud {
|
|
5
5
|
var displayName: string;
|
|
6
6
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './ScrollToEnd.scss';
|
|
3
|
+
export interface ScrollToEndProps {
|
|
4
|
+
/** El área de datos del Crud; dentro de ella se busca quién tiene el scroll. */
|
|
5
|
+
hostRef: React.RefObject<HTMLElement | null>;
|
|
6
|
+
/** Cambia cuando cambia el contenido o la forma (tabla ↔ tarjetas): obliga a volver a mirar. */
|
|
7
|
+
dep?: unknown;
|
|
8
|
+
label?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* SPEC-093 — «hay más abajo».
|
|
12
|
+
*
|
|
13
|
+
* Desde que la tabla se desplaza por dentro (para que el paginador no se vaya de la pantalla), no
|
|
14
|
+
* hay nada que avise de que la página tiene más filas de las que se ven: el borde inferior parece
|
|
15
|
+
* el final. Este botón aparece SOLO cuando queda contenido por debajo y desaparece al llegar al
|
|
16
|
+
* final, así que no es un adorno permanente: es el aviso, y de paso el atajo.
|
|
17
|
+
*/
|
|
18
|
+
export declare const ScrollToEnd: React.FC<ScrollToEndProps>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { RenderFieldConfig } from '../types';
|
|
3
|
+
export interface BadgeOption {
|
|
4
|
+
value: string;
|
|
5
|
+
label: string;
|
|
6
|
+
color?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function fieldOptions(field: RenderFieldConfig): BadgeOption[] | undefined;
|
|
9
|
+
/** El valor de `field` en `row`, ya pintado. `null` cuando no hay nada que mostrar. */
|
|
10
|
+
export declare function renderFieldValue(field: RenderFieldConfig, row: Record<string, unknown>): ReactNode;
|
|
11
|
+
/** ¿Hay algo que mostrar? Para no pintar una fila de tarjeta con la etiqueta y nada al lado. */
|
|
12
|
+
export declare function hasFieldValue(field: RenderFieldConfig, row: Record<string, unknown>): boolean;
|
|
@@ -11,6 +11,14 @@ export interface RenderFieldConfig {
|
|
|
11
11
|
moleculeType: 'INPUT' | 'INPUT_NUMBER' | 'INPUT_CURRENCY' | 'TEXTAREA' | 'SELECT' | 'DATE_INPUT' | 'TIME_INPUT' | 'CHECKBOX' | 'BADGE';
|
|
12
12
|
/** Mostrar en tabla (default: true) */
|
|
13
13
|
showInTable?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* SPEC-093 — se ve SIN desplegar la tarjeta.
|
|
16
|
+
*
|
|
17
|
+
* Cuando la tabla no cabe (tableta, móvil, la columna del chat) cada registro se pinta como una
|
|
18
|
+
* tarjeta plegable, y hay que elegir qué dos o tres datos bastan para reconocerlo. Sin ninguno
|
|
19
|
+
* marcado se toman los tres primeros visibles, que casi siempre es lo correcto.
|
|
20
|
+
*/
|
|
21
|
+
summary?: boolean;
|
|
14
22
|
/** Mostrar en formulario (default: true) */
|
|
15
23
|
showInForm?: boolean;
|
|
16
24
|
/**
|
|
@@ -210,6 +218,23 @@ export interface CrudProps<T extends Record<string, unknown>> {
|
|
|
210
218
|
x?: number | string;
|
|
211
219
|
y?: number | string;
|
|
212
220
|
};
|
|
221
|
+
/**
|
|
222
|
+
* SPEC-093 — cómo se pintan los registros.
|
|
223
|
+
*
|
|
224
|
+
* `auto` (por defecto) decide por el ANCHO DEL CONTENEDOR, no por el dispositivo: el mismo
|
|
225
|
+
* componente vive en una ruta a pantalla completa y en la columna estrecha del chat, y un móvil
|
|
226
|
+
* apaisado puede ser más ancho que ese chat en un escritorio.
|
|
227
|
+
*/
|
|
228
|
+
layout?: 'auto' | 'table' | 'cards';
|
|
229
|
+
/**
|
|
230
|
+
* SPEC-093 — por debajo de este ancho (px) `auto` pinta tarjetas. 768 por defecto: tableta en
|
|
231
|
+
* vertical y hacia abajo.
|
|
232
|
+
*
|
|
233
|
+
* NO se reutiliza `tableScroll.x`, que es el ancho del CONTENIDO de la tabla (1.620 px en
|
|
234
|
+
* servicios): con ese umbral cualquier portátil se llevaría tarjetas, y en un escritorio la
|
|
235
|
+
* tabla es justo lo que se quiere para comparar muchas filas de un vistazo.
|
|
236
|
+
*/
|
|
237
|
+
cardsBelow?: number;
|
|
213
238
|
/** Ocultar paginación incluso si all_data es false */
|
|
214
239
|
hidePagination?: boolean;
|
|
215
240
|
/** Ancho del drawer de formulario */
|
package/dist/index.d.ts
CHANGED
|
@@ -59,6 +59,8 @@ export { Popover as LumiPopover, type PopoverProps as LumiPopoverProps } from '.
|
|
|
59
59
|
export { QRCode as LumiQRCode, type QRCodeProps as LumiQRCodeProps } from './components/atoms/lumi/QRCode';
|
|
60
60
|
export { Tooltip as LumiTooltip, type TooltipProps as LumiTooltipProps } from './components/atoms/lumi/Tooltip';
|
|
61
61
|
export { Badge as LumiBadge, type BadgeProps as LumiBadgeProps, type BadgeVariant as LumiBadgeVariant, BADGE_VARIANTS as LUMI_BADGE_VARIANTS, } from './components/atoms/lumi/Badge';
|
|
62
|
+
export { FieldValue as LumiFieldValue, type FieldValueProps as LumiFieldValueProps, } from './components/atoms/lumi/FieldValue';
|
|
63
|
+
export { RecordCard as LumiRecordCard, type RecordCardProps as LumiRecordCardProps, } from './components/molecules/lumi/RecordCard';
|
|
62
64
|
export { Loader as LumiLoader, type LoaderProps as LumiLoaderProps } from './components/atoms/lumi/Loader';
|
|
63
65
|
export { TextArea as LumiTextArea, type TextAreaProps as LumiTextAreaProps, type TextAreaSize as LumiTextAreaSize, type TextAreaVariant as LumiTextAreaVariant, type TextAreaResize as LumiTextAreaResize, } from './components/atoms/lumi/TextArea';
|
|
64
66
|
export { Checkbox as LumiFormCheckbox, type FormCheckboxProps, Input as LumiFormInput, type FormInputProps, Select as LumiFormSelect, type FormSelectProps, DateInput as LumiFormDateInput, type DateInputProps as LumiFormDateInputProps, TimeInput as LumiFormTimeInput, type TimeInputProps as LumiFormTimeInputProps, } from './components/molecules/lumi';
|