@asteby/metacore-runtime-react 39.3.0 → 42.0.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/CHANGELOG.md +47 -0
- package/dist/agent-result-registry.d.ts +44 -0
- package/dist/agent-result-registry.d.ts.map +1 -0
- package/dist/agent-result-registry.js +78 -0
- package/dist/attribute-classes.d.ts +18 -3
- package/dist/attribute-classes.d.ts.map +1 -1
- package/dist/attribute-classes.js +47 -6
- package/dist/dialogs/dynamic-record.d.ts.map +1 -1
- package/dist/dialogs/dynamic-record.js +3 -2
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/motion.d.ts +19 -0
- package/dist/motion.d.ts.map +1 -0
- package/dist/motion.js +35 -0
- package/dist/use-flip-animation.d.ts +30 -0
- package/dist/use-flip-animation.d.ts.map +1 -0
- package/dist/use-flip-animation.js +123 -0
- package/dist/use-optimistic-mutation.d.ts +73 -0
- package/dist/use-optimistic-mutation.d.ts.map +1 -0
- package/dist/use-optimistic-mutation.js +153 -0
- package/dist/use-persisted-query.d.ts +53 -0
- package/dist/use-persisted-query.d.ts.map +1 -0
- package/dist/use-persisted-query.js +92 -0
- package/package.json +5 -5
- package/src/__tests__/motion.test.ts +29 -0
- package/src/__tests__/use-flip-animation.test.tsx +109 -0
- package/src/__tests__/use-optimistic-mutation.test.tsx +201 -0
- package/src/__tests__/use-persisted-query.test.tsx +132 -0
- package/src/agent-result-registry.test.tsx +52 -0
- package/src/agent-result-registry.tsx +129 -0
- package/src/attribute-classes.test.ts +37 -1
- package/src/attribute-classes.ts +47 -5
- package/src/dialogs/dynamic-record.tsx +3 -2
- package/src/index.ts +35 -0
- package/src/motion.ts +47 -0
- package/src/use-flip-animation.ts +157 -0
- package/src/use-optimistic-mutation.ts +218 -0
- package/src/use-persisted-query.ts +152 -0
- package/tsconfig.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,52 @@
|
|
|
1
1
|
# @asteby/metacore-runtime-react
|
|
2
2
|
|
|
3
|
+
## 42.0.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 7128a39: Primer pintado estable del shell al recargar.
|
|
8
|
+
|
|
9
|
+
- runtime-react: `usePersistedQuery` y `createPersistedSnapshot`. Una query sembrada desde localStorage (versionada y con scope por org/usuario): el primer render ya tiene el último valor, se revalida una vez por carga en segundo plano y cada valor nuevo (refetch o `setQueryData`) se vuelve a guardar.
|
|
10
|
+
- ui: `resolveIconName` guarda los datos de cada glifo Lucide cargado y en la siguiente carga lo dibuja sin Suspense, sin pasar por el ícono de reserva. Los nombres con dígito (`Undo2`) resuelven a su glifo (`undo-2`). Las carpetas del sidebar que el usuario dejó abiertas siguen abiertas al recargar.
|
|
11
|
+
- sdk: `MetacoreProvider` acepta `cacheScope` y exporta `catalogCacheKey(scope)`, para que el catálogo persistido no se comparta entre orgs o usuarios del mismo origen.
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Updated dependencies [7128a39]
|
|
16
|
+
- Updated dependencies [9292ef9]
|
|
17
|
+
- @asteby/metacore-ui@2.22.0
|
|
18
|
+
- @asteby/metacore-sdk@3.9.0
|
|
19
|
+
|
|
20
|
+
## 41.0.0
|
|
21
|
+
|
|
22
|
+
### Minor Changes
|
|
23
|
+
|
|
24
|
+
- bd81d54: Superficies semánticas y registro de resultados del agente.
|
|
25
|
+
|
|
26
|
+
- `@asteby/metacore-theme`: tokens de estado `--success`, `--warning`, `--info` (claro y oscuro) y tokens `--surface-panel`, `--surface-raised`, `--surface-field`, `--border-rim`, `--elevation-raised|panel|float`, `--backdrop-panel`, `--radius-panel` y `--radius-field` con defaults en `tokens.css`; `glass.css` los redefine con la receta de vidrio. Una pantalla que pinta con ellos hereda cualquier theme pack sin saber cuál está activo.
|
|
27
|
+
- `@asteby/metacore-runtime-react`: `registerAgentResultRenderer(kind, Component, { model? })` y `<AgentResultView result />`. Cada resultado de herramienta que muestra un agente (registro, vista, conteo, plan, acción…) se pinta con el renderer registrado para su `kind` (o `kind` + modelo); un addon puede registrar el suyo y un `kind` sin renderer no muestra nada, nunca el payload crudo.
|
|
28
|
+
|
|
29
|
+
### Patch Changes
|
|
30
|
+
|
|
31
|
+
- Updated dependencies [bd81d54]
|
|
32
|
+
- @asteby/metacore-ui@2.21.0
|
|
33
|
+
|
|
34
|
+
## 40.0.0
|
|
35
|
+
|
|
36
|
+
### Minor Changes
|
|
37
|
+
|
|
38
|
+
- 38537d4: `useOptimisticMutation` (runtime-react): escritura optimista sobre una entrada de caché de TanStack Query con rollback al último valor confirmado, escrituras serializadas por `queryKey` (el último clic es la última escritura), descarte de dobles clics, `debounceMs` para ráfagas (arrastrar y soltar) con flush al desmontar, `reconcile` para escribir la respuesta del servidor sin refetch y `retry()` para el toast "Reintentar".
|
|
39
|
+
|
|
40
|
+
`useFlipAnimation` (runtime-react): animación FLIP de reordenamiento de cualquier lista (Web Animations API sobre `transform`), con snapshots en reposo fuera del render y respeto a `prefers-reduced-motion`.
|
|
41
|
+
|
|
42
|
+
Tokens de motion (theme): `motionTokens` y variables `--motion-duration-{instant,fast,moderate,slow}` / `--motion-ease-{standard,emphasized,exit}` en `tokens.css` (duraciones en 0 con `prefers-reduced-motion: reduce`). runtime-react los lee con `motionDuration()` / `motionEasing()` y cae a los mismos valores si el host no los define.
|
|
43
|
+
|
|
44
|
+
### Patch Changes
|
|
45
|
+
|
|
46
|
+
- 17684fb: `visible_when.class`: un registro guardado que ya tiene datos en los campos de una clase los sigue mostrando aunque su categoría no tenga la clase (p. ej. una llanta con ficha pero sin categoría). Ocultar por clase nunca oculta datos existentes.
|
|
47
|
+
- Updated dependencies [d78aacf]
|
|
48
|
+
- @asteby/metacore-ui@2.20.0
|
|
49
|
+
|
|
3
50
|
## 39.3.0
|
|
4
51
|
|
|
5
52
|
### Minor Changes
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/** A structured tool result shown under an agent reply. */
|
|
3
|
+
export interface AgentResult {
|
|
4
|
+
/** Result type, e.g. record | view | count | chart | image | plan | proposal | action. */
|
|
5
|
+
kind: string;
|
|
6
|
+
/** Model key the result belongs to, when it has one. */
|
|
7
|
+
model?: string;
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
}
|
|
10
|
+
export interface AgentResultRendererProps<R extends AgentResult = AgentResult> {
|
|
11
|
+
result: R;
|
|
12
|
+
/**
|
|
13
|
+
* Interactive results (approve a plan, launch a guide) report back through
|
|
14
|
+
* here; the host decides what an action means.
|
|
15
|
+
*/
|
|
16
|
+
onAction?: (action: string, payload?: unknown) => void;
|
|
17
|
+
/** Host is processing an action for this result. */
|
|
18
|
+
busy?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export type AgentResultRenderer<R extends AgentResult = AgentResult> = React.ComponentType<AgentResultRendererProps<R>>;
|
|
21
|
+
export interface AgentResultRendererOptions {
|
|
22
|
+
/** Only for results of this model (overrides the generic renderer of the kind). */
|
|
23
|
+
model?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Registers the component that renders results of `kind` (optionally only
|
|
27
|
+
* for one model). Returns an unregister function; a later registration for
|
|
28
|
+
* the same key replaces the earlier one.
|
|
29
|
+
*/
|
|
30
|
+
export declare function registerAgentResultRenderer<R extends AgentResult = AgentResult>(kind: string, renderer: AgentResultRenderer<R>, options?: AgentResultRendererOptions): () => void;
|
|
31
|
+
/** Most specific renderer for a result: kind+model, then kind. */
|
|
32
|
+
export declare function resolveAgentResultRenderer(result: Pick<AgentResult, 'kind' | 'model'>): AgentResultRenderer | undefined;
|
|
33
|
+
/** Registered keys (`kind` or `kind:model`), for diagnostics. */
|
|
34
|
+
export declare function listAgentResultRenderers(): string[];
|
|
35
|
+
export declare function clearAgentResultRenderers(): void;
|
|
36
|
+
/** Re-renders the caller whenever a renderer is (un)registered. */
|
|
37
|
+
export declare function useAgentResultRegistryVersion(): number;
|
|
38
|
+
export interface AgentResultViewProps extends AgentResultRendererProps {
|
|
39
|
+
/** Rendered when no renderer matches. Defaults to nothing. */
|
|
40
|
+
fallback?: React.ReactNode;
|
|
41
|
+
}
|
|
42
|
+
/** Renders one agent result through the registry. */
|
|
43
|
+
export declare function AgentResultView({ result, fallback, ...rest }: AgentResultViewProps): React.JSX.Element;
|
|
44
|
+
//# sourceMappingURL=agent-result-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-result-registry.d.ts","sourceRoot":"","sources":["../src/agent-result-registry.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IACxB,0FAA0F;IAC1F,IAAI,EAAE,MAAM,CAAA;IACZ,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACzE,MAAM,EAAE,CAAC,CAAA;IACT;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IACtD,oDAAoD;IACpD,IAAI,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI,KAAK,CAAC,aAAa,CACtF,wBAAwB,CAAC,CAAC,CAAC,CAC9B,CAAA;AAED,MAAM,WAAW,0BAA0B;IACvC,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAeD;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAC3E,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAChC,OAAO,GAAE,0BAA+B,GACzC,MAAM,IAAI,CAUZ;AAED,kEAAkE;AAClE,wBAAgB,0BAA0B,CACtC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAC5C,mBAAmB,GAAG,SAAS,CAGjC;AAED,iEAAiE;AACjE,wBAAgB,wBAAwB,IAAI,MAAM,EAAE,CAEnD;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAGhD;AAOD,mEAAmE;AACnE,wBAAgB,6BAA6B,IAAI,MAAM,CAMtD;AAED,MAAM,WAAW,oBAAqB,SAAQ,wBAAwB;IAClE,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC7B;AAED,qDAAqD;AACrD,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,QAAe,EAAE,GAAG,IAAI,EAAE,EAAE,oBAAoB,qBAKzF"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// Agent result renderer registry. An agent reply carries structured tool
|
|
3
|
+
// results (a record, a filtered view, a count, a chart, a plan of changes, a
|
|
4
|
+
// suggested action…) next to its prose. Each result declares a `kind`; the
|
|
5
|
+
// host renders it through whatever component is registered for that kind, so
|
|
6
|
+
// the chat never prints a raw tool payload and an addon can teach the chat
|
|
7
|
+
// to render its own results without touching the host:
|
|
8
|
+
//
|
|
9
|
+
// import { registerAgentResultRenderer } from '@asteby/metacore-runtime-react'
|
|
10
|
+
//
|
|
11
|
+
// registerAgentResultRenderer('record', RecordCard) // any model
|
|
12
|
+
// registerAgentResultRenderer('record', InvoiceCard, { model: 'invoices' })
|
|
13
|
+
// registerAgentResultRenderer('shipment_quote', QuoteCard) // addon kind
|
|
14
|
+
//
|
|
15
|
+
// Resolution is most specific first: `kind` + `model`, then `kind`. A result
|
|
16
|
+
// with no renderer renders nothing (never a JSON dump) unless the caller
|
|
17
|
+
// passes a fallback.
|
|
18
|
+
//
|
|
19
|
+
// Module-level singleton like the model-extension registry, but observable:
|
|
20
|
+
// federated addons register after the host has already painted, so views
|
|
21
|
+
// subscribe and re-render when a renderer lands.
|
|
22
|
+
import * as React from 'react';
|
|
23
|
+
const renderers = new Map();
|
|
24
|
+
const listeners = new Set();
|
|
25
|
+
let version = 0;
|
|
26
|
+
function keyOf(kind, model) {
|
|
27
|
+
return model ? `${kind}:${model}` : kind;
|
|
28
|
+
}
|
|
29
|
+
function emit() {
|
|
30
|
+
version++;
|
|
31
|
+
listeners.forEach((l) => l());
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Registers the component that renders results of `kind` (optionally only
|
|
35
|
+
* for one model). Returns an unregister function; a later registration for
|
|
36
|
+
* the same key replaces the earlier one.
|
|
37
|
+
*/
|
|
38
|
+
export function registerAgentResultRenderer(kind, renderer, options = {}) {
|
|
39
|
+
const key = keyOf(kind, options.model);
|
|
40
|
+
renderers.set(key, renderer);
|
|
41
|
+
emit();
|
|
42
|
+
return () => {
|
|
43
|
+
if (renderers.get(key) === renderer) {
|
|
44
|
+
renderers.delete(key);
|
|
45
|
+
emit();
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** Most specific renderer for a result: kind+model, then kind. */
|
|
50
|
+
export function resolveAgentResultRenderer(result) {
|
|
51
|
+
if (!result?.kind)
|
|
52
|
+
return undefined;
|
|
53
|
+
return (result.model && renderers.get(keyOf(result.kind, result.model))) || renderers.get(result.kind);
|
|
54
|
+
}
|
|
55
|
+
/** Registered keys (`kind` or `kind:model`), for diagnostics. */
|
|
56
|
+
export function listAgentResultRenderers() {
|
|
57
|
+
return [...renderers.keys()];
|
|
58
|
+
}
|
|
59
|
+
export function clearAgentResultRenderers() {
|
|
60
|
+
renderers.clear();
|
|
61
|
+
emit();
|
|
62
|
+
}
|
|
63
|
+
function subscribe(listener) {
|
|
64
|
+
listeners.add(listener);
|
|
65
|
+
return () => listeners.delete(listener);
|
|
66
|
+
}
|
|
67
|
+
/** Re-renders the caller whenever a renderer is (un)registered. */
|
|
68
|
+
export function useAgentResultRegistryVersion() {
|
|
69
|
+
return React.useSyncExternalStore(subscribe, () => version, () => version);
|
|
70
|
+
}
|
|
71
|
+
/** Renders one agent result through the registry. */
|
|
72
|
+
export function AgentResultView({ result, fallback = null, ...rest }) {
|
|
73
|
+
useAgentResultRegistryVersion();
|
|
74
|
+
const Renderer = resolveAgentResultRenderer(result);
|
|
75
|
+
if (!Renderer)
|
|
76
|
+
return _jsx(_Fragment, { children: fallback });
|
|
77
|
+
return _jsx(Renderer, { result: result, ...rest });
|
|
78
|
+
}
|
|
@@ -17,8 +17,23 @@ export declare function resolveAttributeClasses(api: ApiClient, model: string, i
|
|
|
17
17
|
/** Test hook: forget cached category lookups. */
|
|
18
18
|
export declare function resetAttributeClassCache(): void;
|
|
19
19
|
/**
|
|
20
|
-
* The classes
|
|
21
|
-
*
|
|
20
|
+
* The classes a saved record already carries by its own data: a class whose
|
|
21
|
+
* section fields hold a value in the record. Its fields stay visible even when
|
|
22
|
+
* the category lacks the class (a tire with a spec sheet but no category, or a
|
|
23
|
+
* category the org has not tagged yet) — hiding a class must never hide data
|
|
24
|
+
* that exists. Field keys are matched as served, bare or `<Extension>.<column>`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function classesCarriedByRecord(meta: {
|
|
27
|
+
attribute_classes?: AttributeClass[];
|
|
28
|
+
fields?: {
|
|
29
|
+
key: string;
|
|
30
|
+
}[];
|
|
31
|
+
} | null | undefined, record: Record<string, unknown> | null | undefined): string[];
|
|
32
|
+
/**
|
|
33
|
+
* The classes that apply to the form: those of its current category plus
|
|
34
|
+
* those the saved record carries by its data (classesCarriedByRecord). `meta`
|
|
35
|
+
* is the modal metadata; `fields` its field list (to find the class field's
|
|
36
|
+
* ref). `record` is the record as loaded (null on create).
|
|
22
37
|
*/
|
|
23
38
|
export declare function useAttributeClasses(api: ApiClient, meta: {
|
|
24
39
|
attribute_classes?: AttributeClass[];
|
|
@@ -27,5 +42,5 @@ export declare function useAttributeClasses(api: ApiClient, meta: {
|
|
|
27
42
|
key: string;
|
|
28
43
|
ref?: string;
|
|
29
44
|
}[];
|
|
30
|
-
} | null | undefined, formValues: Record<string, unknown>): string[];
|
|
45
|
+
} | null | undefined, formValues: Record<string, unknown>, record?: Record<string, unknown> | null): string[];
|
|
31
46
|
//# sourceMappingURL=attribute-classes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attribute-classes.d.ts","sourceRoot":"","sources":["../src/attribute-classes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attribute-classes.d.ts","sourceRoot":"","sources":["../src/attribute-classes.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,WAAW,qBAAqB;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,qBAAqB,EAAE,CAAA;CACpC;AAgCD;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAS1G;AAED,iDAAiD;AACjD,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAYD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAClC,IAAI,EAAE;IAAE,iBAAiB,CAAC,EAAE,cAAc,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EAC7F,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GACnD,MAAM,EAAE,CAeV;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAC/B,GAAG,EAAE,SAAS,EACd,IAAI,EAAE;IAAE,iBAAiB,CAAC,EAAE,cAAc,EAAE,CAAC;IAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EAC3I,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACxC,MAAM,EAAE,CAsBV"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
// Attribute classes (CONTRACT-item-master §3.2): an extension table's columns
|
|
2
2
|
// are grouped into classes, and each organization assigns classes to its
|
|
3
3
|
// categories. A field with `visible_when.class` shows when the record's
|
|
4
|
-
// category (or one of its parents) carries the class
|
|
4
|
+
// category (or one of its parents) carries the class, or when the saved record
|
|
5
|
+
// already has data in the class's fields (existing data is never hidden).
|
|
5
6
|
//
|
|
6
7
|
// The host serves the classes on the modal metadata (`attribute_classes`) and,
|
|
7
8
|
// optionally, the field whose referenced record carries them
|
|
8
9
|
// (`attribute_class_field`, default `category_id`). The referenced record
|
|
9
10
|
// exposes its classes as `attribute_classes` (array of keys) and its parent as
|
|
10
11
|
// `parent_id`.
|
|
11
|
-
import { useEffect, useState } from 'react';
|
|
12
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
12
13
|
/** How many parent hops the class lookup walks (a category tree is shallow). */
|
|
13
14
|
const MAX_PARENT_HOPS = 5;
|
|
14
15
|
const cache = new Map();
|
|
@@ -54,11 +55,50 @@ export async function resolveAttributeClasses(api, model, id) {
|
|
|
54
55
|
export function resetAttributeClassCache() {
|
|
55
56
|
cache.clear();
|
|
56
57
|
}
|
|
58
|
+
function readPath(rec, key) {
|
|
59
|
+
if (key in rec)
|
|
60
|
+
return rec[key];
|
|
61
|
+
let cur = rec;
|
|
62
|
+
for (const part of key.split('.')) {
|
|
63
|
+
if (cur == null || typeof cur !== 'object')
|
|
64
|
+
return undefined;
|
|
65
|
+
cur = cur[part];
|
|
66
|
+
}
|
|
67
|
+
return cur;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The classes a saved record already carries by its own data: a class whose
|
|
71
|
+
* section fields hold a value in the record. Its fields stay visible even when
|
|
72
|
+
* the category lacks the class (a tire with a spec sheet but no category, or a
|
|
73
|
+
* category the org has not tagged yet) — hiding a class must never hide data
|
|
74
|
+
* that exists. Field keys are matched as served, bare or `<Extension>.<column>`.
|
|
75
|
+
*/
|
|
76
|
+
export function classesCarriedByRecord(meta, record) {
|
|
77
|
+
if (!record || !Array.isArray(meta?.attribute_classes))
|
|
78
|
+
return [];
|
|
79
|
+
const keys = (meta?.fields ?? []).map((f) => f.key);
|
|
80
|
+
const out = [];
|
|
81
|
+
for (const cls of meta.attribute_classes) {
|
|
82
|
+
const cols = new Set((cls.sections ?? []).flatMap((s) => s.fields ?? []));
|
|
83
|
+
const carried = keys.some((k) => {
|
|
84
|
+
const col = k.includes('.') ? k.slice(k.lastIndexOf('.') + 1) : k;
|
|
85
|
+
if (!cols.has(col) && !cols.has(k))
|
|
86
|
+
return false;
|
|
87
|
+
const v = readPath(record, k);
|
|
88
|
+
return v != null && v !== '';
|
|
89
|
+
});
|
|
90
|
+
if (carried)
|
|
91
|
+
out.push(cls.key);
|
|
92
|
+
}
|
|
93
|
+
return out;
|
|
94
|
+
}
|
|
57
95
|
/**
|
|
58
|
-
* The classes that apply to the form
|
|
59
|
-
*
|
|
96
|
+
* The classes that apply to the form: those of its current category plus
|
|
97
|
+
* those the saved record carries by its data (classesCarriedByRecord). `meta`
|
|
98
|
+
* is the modal metadata; `fields` its field list (to find the class field's
|
|
99
|
+
* ref). `record` is the record as loaded (null on create).
|
|
60
100
|
*/
|
|
61
|
-
export function useAttributeClasses(api, meta, formValues) {
|
|
101
|
+
export function useAttributeClasses(api, meta, formValues, record) {
|
|
62
102
|
const hasClasses = Array.isArray(meta?.attribute_classes) && meta.attribute_classes.length > 0;
|
|
63
103
|
const classField = meta?.attribute_class_field || 'category_id';
|
|
64
104
|
const model = refModel(meta?.fields?.find((f) => f.key === classField)?.ref) ?? 'Category';
|
|
@@ -79,5 +119,6 @@ export function useAttributeClasses(api, meta, formValues) {
|
|
|
79
119
|
alive = false;
|
|
80
120
|
};
|
|
81
121
|
}, [api, model, idStr]);
|
|
82
|
-
|
|
122
|
+
const carried = useMemo(() => classesCarriedByRecord(meta, record), [meta, record]);
|
|
123
|
+
return useMemo(() => (carried.length ? [...new Set([...classes, ...carried])] : classes), [classes, carried]);
|
|
83
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-record.d.ts","sourceRoot":"","sources":["../../src/dialogs/dynamic-record.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dynamic-record.d.ts","sourceRoot":"","sources":["../../src/dialogs/dynamic-record.tsx"],"names":[],"mappings":"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"}
|
|
@@ -338,8 +338,9 @@ export function DynamicRecordDialog({ open, onOpenChange, nestedInlineCreateSelf
|
|
|
338
338
|
const [relations, setRelations] = useState([]);
|
|
339
339
|
const [record, setRecord] = useState(null);
|
|
340
340
|
const [formValues, setFormValues] = useState({});
|
|
341
|
-
// Classes of the record's category, for
|
|
342
|
-
|
|
341
|
+
// Classes of the record's category (plus those its saved data carries), for
|
|
342
|
+
// `visible_when.class` fields.
|
|
343
|
+
const attributeClasses = useAttributeClasses(api, modalMeta, formValues, record);
|
|
343
344
|
// Per-field validation errors (localized strings), keyed by field.key. Shown
|
|
344
345
|
// inline under each input; populated from a 422 `errors` map or the client
|
|
345
346
|
// required-field check, cleared per-field on change and wholesale on reopen.
|
package/dist/index.d.ts
CHANGED
|
@@ -15,6 +15,10 @@ export { useStageOverrides, type StageOverridePatch, type UseStageOverridesResul
|
|
|
15
15
|
export { DynamicView, resolveViewRenderer, readViewFromSearch, resolveActiveView, type DynamicViewProps, } from './dynamic-view';
|
|
16
16
|
export { useDynamicFilters, type UseDynamicFiltersOptions, type UseDynamicFiltersResult, } from './use-dynamic-filters';
|
|
17
17
|
export { useDebouncedValue, SEARCH_DEBOUNCE_MS } from './use-debounced-value';
|
|
18
|
+
export { useOptimisticMutation, type UseOptimisticMutationOptions, type UseOptimisticMutationResult, } from './use-optimistic-mutation';
|
|
19
|
+
export { useFlipAnimation, type UseFlipAnimationOptions } from './use-flip-animation';
|
|
20
|
+
export { usePersistedQuery, createPersistedSnapshot, type UsePersistedQueryOptions, type PersistedSnapshot, type PersistedSnapshotOptions, type PersistedEntry, } from './use-persisted-query';
|
|
21
|
+
export { motionDuration, motionEasing, prefersReducedMotion, MOTION_DEFAULTS, type MotionDuration, type MotionEasing, } from './motion';
|
|
18
22
|
export { useResource, useMutation, type ResourceState, type MutationState, } from './use-resource';
|
|
19
23
|
export * from './dynamic-form';
|
|
20
24
|
export { FilePickButton, type FilePickButtonProps, } from './file-pick-button';
|
|
@@ -73,6 +77,7 @@ export { DynamicCRUDPage, type DynamicCRUDPageProps, type DynamicCRUDPageStrings
|
|
|
73
77
|
export { DynamicRelation, type DynamicRelationProps, type DynamicRelationStrings, type DynamicRelationKind, buildRelationFilterParams, buildCreatePayload, deriveRelationFormFields, relationRowKey, } from './dynamic-relation';
|
|
74
78
|
export { DynamicRelations, resolveParentId, buildRelationFilters, isEmbedded, type DynamicRelationsProps, } from './dynamic-relations';
|
|
75
79
|
export { registerModelExtension, getModelExtension, clearModelExtensions, type ModelExtension, type ModelExtensionProps, } from './model-extension-registry';
|
|
80
|
+
export { registerAgentResultRenderer, resolveAgentResultRenderer, listAgentResultRenderers, clearAgentResultRenderers, useAgentResultRegistryVersion, AgentResultView, type AgentResult, type AgentResultRenderer, type AgentResultRendererOptions, type AgentResultRendererProps, type AgentResultViewProps, } from './agent-result-registry';
|
|
76
81
|
export { isColumnVisibleInTable, isColumnVisibleInModal, isColumnVisibleInLineSubtable, AUDIT_SUBTABLE_COLUMN_KEYS, getSearchableColumnKeys, } from './column-visibility';
|
|
77
82
|
export { batchGet, loadQueryPart, nameBatchTokens, narrowInToken, optionsBatchToken, optionsModelFromUrl, rememberInRows, invalidateQueryBatchData, resetQueryBatchCache, splitInToken, tokenForGet, type InListToken, type NarrowedIn, type QueryPart, } from './query-batch';
|
|
78
83
|
export { useOptionsResolver, invalidateOptionsCache, projectOption, type ResolvedOption, type OptionsMeta, type UseOptionsResolverArgs, type UseOptionsResolverResult, } from './use-options-resolver';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -20,6 +20,10 @@ export { useStageOverrides, } from './stage-overrides';
|
|
|
20
20
|
export { DynamicView, resolveViewRenderer, readViewFromSearch, resolveActiveView, } from './dynamic-view';
|
|
21
21
|
export { useDynamicFilters, } from './use-dynamic-filters';
|
|
22
22
|
export { useDebouncedValue, SEARCH_DEBOUNCE_MS } from './use-debounced-value';
|
|
23
|
+
export { useOptimisticMutation, } from './use-optimistic-mutation';
|
|
24
|
+
export { useFlipAnimation } from './use-flip-animation';
|
|
25
|
+
export { usePersistedQuery, createPersistedSnapshot, } from './use-persisted-query';
|
|
26
|
+
export { motionDuration, motionEasing, prefersReducedMotion, MOTION_DEFAULTS, } from './motion';
|
|
23
27
|
export { useResource, useMutation, } from './use-resource';
|
|
24
28
|
export * from './dynamic-form';
|
|
25
29
|
export { FilePickButton, } from './file-pick-button';
|
|
@@ -73,6 +77,7 @@ export { DynamicCRUDPage, } from './dynamic-crud-page';
|
|
|
73
77
|
export { DynamicRelation, buildRelationFilterParams, buildCreatePayload, deriveRelationFormFields, relationRowKey, } from './dynamic-relation';
|
|
74
78
|
export { DynamicRelations, resolveParentId, buildRelationFilters, isEmbedded, } from './dynamic-relations';
|
|
75
79
|
export { registerModelExtension, getModelExtension, clearModelExtensions, } from './model-extension-registry';
|
|
80
|
+
export { registerAgentResultRenderer, resolveAgentResultRenderer, listAgentResultRenderers, clearAgentResultRenderers, useAgentResultRegistryVersion, AgentResultView, } from './agent-result-registry';
|
|
76
81
|
export { isColumnVisibleInTable, isColumnVisibleInModal, isColumnVisibleInLineSubtable, AUDIT_SUBTABLE_COLUMN_KEYS, getSearchableColumnKeys, } from './column-visibility';
|
|
77
82
|
export { batchGet, loadQueryPart, nameBatchTokens, narrowInToken, optionsBatchToken, optionsModelFromUrl, rememberInRows, invalidateQueryBatchData, resetQueryBatchCache, splitInToken, tokenForGet, } from './query-batch';
|
|
78
83
|
export { useOptionsResolver, invalidateOptionsCache, projectOption, } from './use-options-resolver';
|
package/dist/motion.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime access to the theme's motion tokens (`--motion-duration-*`,
|
|
3
|
+
* `--motion-ease-*` from @asteby/metacore-theme/tokens.css). Hosts that do
|
|
4
|
+
* not ship those variables get the same defaults, so JS-driven animations
|
|
5
|
+
* (WAAPI, dnd-kit) and CSS transitions stay on one scale.
|
|
6
|
+
*/
|
|
7
|
+
export type MotionDuration = 'instant' | 'fast' | 'moderate' | 'slow';
|
|
8
|
+
export type MotionEasing = 'standard' | 'emphasized' | 'exit';
|
|
9
|
+
export declare const MOTION_DEFAULTS: {
|
|
10
|
+
duration: Record<MotionDuration, number>;
|
|
11
|
+
easing: Record<MotionEasing, string>;
|
|
12
|
+
};
|
|
13
|
+
/** True when the user asked the OS for reduced motion. */
|
|
14
|
+
export declare function prefersReducedMotion(): boolean;
|
|
15
|
+
/** Duration token in ms (0 under prefers-reduced-motion). */
|
|
16
|
+
export declare function motionDuration(token: MotionDuration): number;
|
|
17
|
+
/** Easing token as a CSS timing function. */
|
|
18
|
+
export declare function motionEasing(token: MotionEasing): string;
|
|
19
|
+
//# sourceMappingURL=motion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion.d.ts","sourceRoot":"","sources":["../src/motion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAA;AACrE,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,CAAA;AAE7D,eAAO,MAAM,eAAe;cACyC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC;YAK5F,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC;CAClC,CAAA;AAOD,0DAA0D;AAC1D,wBAAgB,oBAAoB,IAAI,OAAO,CAM9C;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAQ5D;AAED,6CAA6C;AAC7C,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAExD"}
|
package/dist/motion.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export const MOTION_DEFAULTS = {
|
|
2
|
+
duration: { instant: 100, fast: 150, moderate: 220, slow: 320 },
|
|
3
|
+
easing: {
|
|
4
|
+
standard: 'cubic-bezier(0.2, 0, 0, 1)',
|
|
5
|
+
emphasized: 'cubic-bezier(0.3, 0, 0, 1)',
|
|
6
|
+
exit: 'cubic-bezier(0.4, 0, 1, 1)',
|
|
7
|
+
},
|
|
8
|
+
};
|
|
9
|
+
function cssVar(name) {
|
|
10
|
+
if (typeof document === 'undefined' || typeof getComputedStyle !== 'function')
|
|
11
|
+
return '';
|
|
12
|
+
return getComputedStyle(document.documentElement).getPropertyValue(name).trim();
|
|
13
|
+
}
|
|
14
|
+
/** True when the user asked the OS for reduced motion. */
|
|
15
|
+
export function prefersReducedMotion() {
|
|
16
|
+
return (typeof window !== 'undefined' &&
|
|
17
|
+
typeof window.matchMedia === 'function' &&
|
|
18
|
+
window.matchMedia('(prefers-reduced-motion: reduce)').matches);
|
|
19
|
+
}
|
|
20
|
+
/** Duration token in ms (0 under prefers-reduced-motion). */
|
|
21
|
+
export function motionDuration(token) {
|
|
22
|
+
if (prefersReducedMotion())
|
|
23
|
+
return 0;
|
|
24
|
+
const raw = cssVar(`--motion-duration-${token}`);
|
|
25
|
+
if (raw) {
|
|
26
|
+
const n = parseFloat(raw);
|
|
27
|
+
if (Number.isFinite(n))
|
|
28
|
+
return raw.endsWith('ms') || !raw.endsWith('s') ? n : n * 1000;
|
|
29
|
+
}
|
|
30
|
+
return MOTION_DEFAULTS.duration[token];
|
|
31
|
+
}
|
|
32
|
+
/** Easing token as a CSS timing function. */
|
|
33
|
+
export function motionEasing(token) {
|
|
34
|
+
return cssVar(`--motion-ease-${token}`) || MOTION_DEFAULTS.easing[token];
|
|
35
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type RefObject } from 'react';
|
|
2
|
+
import { type MotionDuration, type MotionEasing } from './motion';
|
|
3
|
+
export interface UseFlipAnimationOptions {
|
|
4
|
+
/** Elements to animate, queried inside the root. */
|
|
5
|
+
selector?: string;
|
|
6
|
+
/** Stable identity of an element across renders. Default: data-flip-key, then href, then text. */
|
|
7
|
+
keyOf?: (el: HTMLElement) => string | null;
|
|
8
|
+
/**
|
|
9
|
+
* Scroll container used as the coordinate origin, so scrolling between two
|
|
10
|
+
* snapshots does not read as movement. Default: the root.
|
|
11
|
+
*/
|
|
12
|
+
scrollContainer?: (root: HTMLElement) => HTMLElement | null;
|
|
13
|
+
/** Motion token (default `moderate`) or explicit ms. */
|
|
14
|
+
duration?: MotionDuration | number;
|
|
15
|
+
/** Motion token (default `standard`) or a CSS timing function. */
|
|
16
|
+
easing?: MotionEasing | string;
|
|
17
|
+
/** Off switch; the hook also stays still under prefers-reduced-motion. */
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* FLIP reorder animation: when `trigger` changes, elements that exist before
|
|
22
|
+
* and after the change glide from their old position to the new one.
|
|
23
|
+
*
|
|
24
|
+
* Positions are snapshotted when the list is at rest (after mount, after each
|
|
25
|
+
* animation, and after pointer interaction inside the root), never in the
|
|
26
|
+
* render path, so a re-render costs nothing. Uses the Web Animations API on
|
|
27
|
+
* `transform` only; with prefers-reduced-motion the change is instant.
|
|
28
|
+
*/
|
|
29
|
+
export declare function useFlipAnimation(rootRef: RefObject<HTMLElement | null>, trigger: unknown, options?: UseFlipAnimationOptions): void;
|
|
30
|
+
//# sourceMappingURL=use-flip-animation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-flip-animation.d.ts","sourceRoot":"","sources":["../src/use-flip-animation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1E,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,uBAAuB;IACtC,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kGAAkG;IAClG,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,MAAM,GAAG,IAAI,CAAA;IAC1C;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,WAAW,GAAG,IAAI,CAAA;IAC3D,wDAAwD;IACxD,QAAQ,CAAC,EAAE,cAAc,GAAG,MAAM,CAAA;IAClC,kEAAkE;IAClE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAUD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EACtC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,uBAA4B,GACpC,IAAI,CA4GN"}
|