mlform 0.1.14 → 0.1.16

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.
Files changed (40) hide show
  1. package/README.md +2 -2
  2. package/dist/{builtins-CcS-sHJa.js → builtins-DQTX_dwn.js} +9 -8
  3. package/dist/mlform/builtins.mjs +1 -1
  4. package/dist/mlform/kit.mjs +251 -231
  5. package/dist/mlform/primitives.mjs +1 -1
  6. package/dist/mlform/runtime.mjs +3 -3
  7. package/dist/mlform/schema.mjs +2 -2
  8. package/dist/mlform/transport.mjs +1 -1
  9. package/dist/{primitives-9obTthA6.js → primitives-BcXt2QWI.js} +83 -53
  10. package/dist/{runtime-Bn_x46y-.js → runtime-BxMSso-p.js} +630 -519
  11. package/dist/schema-D9V7-AkU.js +169 -0
  12. package/dist/{transport-D173EDlB.js → transport-BG3HPc3-.js} +196 -188
  13. package/dist/types/src/builtins/definitions/fields/series-helpers.d.ts +1 -0
  14. package/dist/types/src/builtins/definitions/shared.d.ts +1 -0
  15. package/dist/types/src/kit/mount-types.d.ts +2 -0
  16. package/dist/types/src/kit/view-core-types.d.ts +4 -1
  17. package/dist/types/src/primitives/components/form-root-templates.d.ts +3 -1
  18. package/dist/types/src/primitives/components/form-root.d.ts +3 -1
  19. package/dist/types/src/primitives/components/report-frame.d.ts +2 -1
  20. package/dist/types/src/primitives/controller-types.d.ts +44 -0
  21. package/dist/types/src/primitives/types.d.ts +6 -2
  22. package/dist/types/src/runtime/index.d.ts +4 -2
  23. package/dist/types/src/runtime/submission/index.d.ts +2 -0
  24. package/dist/types/src/runtime/submission/multi-backend.d.ts +25 -0
  25. package/dist/types/src/runtime/submission/request.d.ts +14 -0
  26. package/dist/types/src/runtime/submission/snapshot.d.ts +12 -0
  27. package/dist/types/src/runtime/types/behavior.d.ts +4 -0
  28. package/dist/types/src/runtime/types/field.d.ts +1 -0
  29. package/dist/types/src/runtime/types/form.d.ts +4 -0
  30. package/dist/types/src/runtime/types/transport.d.ts +11 -2
  31. package/dist/types/src/schema/index.d.ts +2 -0
  32. package/dist/types/src/schema/mapped-to.d.ts +9 -1
  33. package/dist/types/src/schema/onehot-display.d.ts +15 -0
  34. package/dist/types/src/schema/report-context.d.ts +17 -0
  35. package/dist/types/src/schema/types/field.d.ts +1 -0
  36. package/dist/types/src/schema/types/report.d.ts +6 -1
  37. package/dist/types/src/schema/types/submit.d.ts +30 -0
  38. package/dist/types/src/transport/types/core.d.ts +17 -0
  39. package/package.json +8 -8
  40. package/dist/schema-DYDo_1VV.js +0 -95
@@ -40,6 +40,7 @@ export declare const seriesFieldSchema: z.ZodObject<{
40
40
  "reset-on-hide": "reset-on-hide";
41
41
  }>>;
42
42
  includeInSubmission: z.ZodOptional<z.ZodBoolean>;
43
+ displayKey: z.ZodOptional<z.ZodString>;
43
44
  mappedTo: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>>]>>;
44
45
  valuePath: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
45
46
  defaultValue: z.ZodOptional<z.ZodUnknown>;
@@ -22,6 +22,7 @@ export declare const baseFieldShape: {
22
22
  "reset-on-hide": "reset-on-hide";
23
23
  }>>;
24
24
  includeInSubmission: z.ZodOptional<z.ZodBoolean>;
25
+ displayKey: z.ZodOptional<z.ZodString>;
25
26
  mappedTo: z.ZodOptional<z.ZodUnion<readonly [z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>>]>>;
26
27
  valuePath: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
27
28
  defaultValue: z.ZodOptional<z.ZodUnknown>;
@@ -2,6 +2,7 @@ import { AttachedDesignSystem, DesignSystemConfig, DesignSystemRegistry, Resolve
2
2
  import { FormController, FormHooks, FormSchema, FormValidator, InactiveFieldPolicy, Registry, RuntimeBehavior, Transport } from '../../runtime';
3
3
  import { PrimitiveContainerStrategy, PrimitiveRegistry, PrimitiveReportTransport, PrimitiveTextOverrides, PrimitiveDescriptorRegistry } from '../../primitives';
4
4
  import { FormLayoutConfig } from './layout-types';
5
+ export type MountedReportFetchMode = "lazy" | "all" | "none";
5
6
  export interface KitDesignSystemSnapshot extends Omit<DesignSystemConfig, "mode" | "theme" | "recipe"> {
6
7
  mode: NonNullable<DesignSystemConfig["mode"]>;
7
8
  theme: NonNullable<DesignSystemConfig["theme"]>;
@@ -35,6 +36,7 @@ export interface MountFormOptions {
35
36
  layout?: FormLayoutConfig;
36
37
  containerStrategy?: PrimitiveContainerStrategy;
37
38
  reportPane?: "auto" | "always" | "hidden";
39
+ reportFetchMode?: MountedReportFetchMode;
38
40
  reportTransport?: PrimitiveReportTransport;
39
41
  labels?: KitLabels;
40
42
  primitiveText?: PrimitiveTextOverrides;
@@ -1,8 +1,9 @@
1
1
  import { FieldDescriptor, PrimitiveDescriptorRegistry, ReportDescriptor } from '../../primitives';
2
- import { FieldController, FieldStateSnapshot, FormController, FormHooks, FormSchema, FormState, FormValidationResult, FormValidator, InactiveFieldPolicy, Registry, ReportController, ReportStateSnapshot, RuntimeBehavior, SubmitOptions, SubmitResult, Transport } from '../../runtime';
2
+ import { FieldController, FieldStateSnapshot, FormController, FormHooks, FormSchema, FormState, FormValidationResult, FormValidator, InactiveFieldPolicy, Registry, ReportController, ReportStateSnapshot, RuntimeBehavior, PipelineResult, SubmitOptions, SubmitResult, Transport } from '../../runtime';
3
3
  import { LayoutReferences } from './layout-utils';
4
4
  import { FormLayoutConfig, ResolvedFormLayout, ResolvedFormLayoutNode } from './layout-types';
5
5
  import { PanelState } from './panel-nav';
6
+ import { MountedReportFetchMode } from './mount-types';
6
7
  export interface WizardState {
7
8
  stepIndex: number;
8
9
  stepCount: number;
@@ -77,6 +78,7 @@ export interface CreateFormViewOptions {
77
78
  listenerErrorPolicy?: "ignore" | "throw-aggregate";
78
79
  onListenerError?: (error: unknown) => void;
79
80
  layout?: FormLayoutConfig;
81
+ reportFetchMode?: MountedReportFetchMode;
80
82
  }
81
83
  export interface FormViewController {
82
84
  readonly form: FormController;
@@ -93,6 +95,7 @@ export interface FormViewController {
93
95
  getLayoutReferences(): LayoutReferences;
94
96
  validate(): Promise<FormValidationResult>;
95
97
  submit(options?: SubmitOptions): Promise<SubmitResult>;
98
+ submitPipeline(options?: SubmitOptions): Promise<PipelineResult>;
96
99
  reset(): void;
97
100
  subscribe(listener: (snapshot: FormViewSnapshot) => void): () => void;
98
101
  nextStep(): Promise<boolean>;
@@ -2,7 +2,7 @@ import { TemplateResult } from 'lit';
2
2
  import { PrimitiveFormController } from '../controller-types';
3
3
  import { PrimitiveDescriptorRegistry } from '../descriptors';
4
4
  import { PrimitiveText } from '../constants';
5
- import { PrimitiveRegistry, PrimitiveReportTransport } from '../types';
5
+ import { PrimitiveRegistry, PrimitiveReportFetchMode, PrimitiveReportTransport } from '../types';
6
6
  import { FormRenderState } from './form-root-state';
7
7
  import { PresentedField, PresentedReport } from './form-root-presenters';
8
8
  export declare const renderStackedLayout: (options: {
@@ -20,6 +20,7 @@ export declare const renderStackedLayout: (options: {
20
20
  validatingLabel: string;
21
21
  submittingLabel: string;
22
22
  reportTransport: PrimitiveReportTransport | undefined;
23
+ reportFetchMode: PrimitiveReportFetchMode;
23
24
  onSubmitRequest: () => Promise<void>;
24
25
  }) => TemplateResult;
25
26
  export declare const renderSplitLayout: (options: {
@@ -37,5 +38,6 @@ export declare const renderSplitLayout: (options: {
37
38
  validatingLabel: string;
38
39
  submittingLabel: string;
39
40
  reportTransport: PrimitiveReportTransport | undefined;
41
+ reportFetchMode: PrimitiveReportFetchMode;
40
42
  onSubmitRequest: () => Promise<void>;
41
43
  }) => TemplateResult;
@@ -2,7 +2,7 @@ import { LitElement } from 'lit';
2
2
  import { PrimitiveDescriptorRegistry } from '../descriptors';
3
3
  import { PrimitiveFormController } from '../controller-types';
4
4
  import { primitiveTagNames, PrimitiveText } from '../constants';
5
- import { PrimitiveLayout, PrimitiveRegistry, PrimitiveReportTransport } from '../types';
5
+ import { PrimitiveLayout, PrimitiveRegistry, PrimitiveReportTransport, PrimitiveReportFetchMode, PrimitiveSubmitExecutionResult } from '../types';
6
6
  export declare class PrimitiveFormElement extends LitElement {
7
7
  #private;
8
8
  static styles: import('lit').CSSResult;
@@ -18,6 +18,8 @@ export declare class PrimitiveFormElement extends LitElement {
18
18
  accessor reportPane: "auto" | "always" | "hidden";
19
19
  accessor text: PrimitiveText;
20
20
  accessor reportTransport: PrimitiveReportTransport | undefined;
21
+ accessor reportFetchMode: PrimitiveReportFetchMode;
22
+ accessor submitHandler: (() => Promise<PrimitiveSubmitExecutionResult>) | undefined;
21
23
  private accessor formState;
22
24
  protected willUpdate(changedProperties: Map<string, unknown>): void;
23
25
  connectedCallback(): void;
@@ -2,7 +2,7 @@ import { LitElement } from 'lit';
2
2
  import { PrimitiveReportController, PrimitiveSubmitResult } from '../controller-types';
3
3
  import { ReportDescriptor } from '../descriptors';
4
4
  import { primitiveTagNames, PrimitiveText } from '../constants';
5
- import { PrimitiveReportTransport, PrimitiveRegistry } from '../types';
5
+ import { PrimitiveReportFetchMode, PrimitiveReportTransport, PrimitiveRegistry } from '../types';
6
6
  export declare class PrimitiveReportFrameElement extends LitElement {
7
7
  #private;
8
8
  static styles: import('lit').CSSResult;
@@ -10,6 +10,7 @@ export declare class PrimitiveReportFrameElement extends LitElement {
10
10
  accessor registry: PrimitiveRegistry | undefined;
11
11
  accessor text: PrimitiveText;
12
12
  accessor transport: PrimitiveReportTransport | undefined;
13
+ accessor fetchMode: PrimitiveReportFetchMode;
13
14
  accessor lastResult: PrimitiveSubmitResult | null;
14
15
  accessor descriptor: ReportDescriptor | null;
15
16
  private accessor resolvedDescriptor;
@@ -18,15 +18,50 @@ export interface PrimitiveReportStateSnapshot {
18
18
  }
19
19
  export interface PrimitiveSubmitResult {
20
20
  backend?: string;
21
+ inputs?: PrimitiveSubmissionInputRecord[];
22
+ displayValues?: Record<string, unknown>;
23
+ modelValues?: Record<string, unknown>;
21
24
  values: Record<string, unknown>;
22
25
  fieldValues: Record<string, unknown>;
23
26
  serializedValues: Record<string, unknown>;
24
27
  serializedFieldValues: Record<string, unknown>;
25
28
  reports: Record<string, unknown>;
29
+ reportContexts?: Record<string, PrimitiveReportContext>;
26
30
  reportStates: Record<string, unknown>;
27
31
  meta: Record<string, unknown>;
28
32
  raw: unknown;
29
33
  }
34
+ export interface PrimitivePipelineResult {
35
+ submitResult: PrimitiveSubmitResult;
36
+ reportFetchResults: Record<string, unknown>;
37
+ reportFetchErrors: Record<string, string>;
38
+ artifacts: Record<string, unknown>;
39
+ }
40
+ export interface PrimitiveSubmissionInputRecord {
41
+ fieldId: string;
42
+ displayKey?: string;
43
+ label: string;
44
+ value: unknown;
45
+ serializedValue: unknown;
46
+ mappedTo?: string | number;
47
+ modelValues: Record<string, unknown>;
48
+ visible: boolean;
49
+ disabled: boolean;
50
+ }
51
+ export interface PrimitiveReportContext {
52
+ reportId: string;
53
+ kind: string;
54
+ label?: string;
55
+ mappedTo?: unknown;
56
+ target?: string | number;
57
+ targetKey?: string;
58
+ backend?: string;
59
+ displayValues: Record<string, unknown>;
60
+ modelValues: Record<string, unknown>;
61
+ reports: Record<string, unknown>;
62
+ meta: Record<string, unknown>;
63
+ raw: unknown;
64
+ }
30
65
  export interface PrimitiveFormState {
31
66
  status: PrimitiveFormStatus;
32
67
  submitCount: number;
@@ -78,14 +113,23 @@ export interface PrimitiveFormController {
78
113
  equality?: (left: T, right: T) => boolean;
79
114
  }): () => void;
80
115
  }
116
+ export interface PrimitiveSubmitExecutionResult {
117
+ result: PrimitiveSubmitResult;
118
+ pipelineResult?: PrimitivePipelineResult;
119
+ }
81
120
  export interface PrimitiveReportRequest {
82
121
  reportId: string;
83
122
  backend?: string;
123
+ inputs?: PrimitiveSubmissionInputRecord[];
124
+ displayValues?: Record<string, unknown>;
125
+ modelValues?: Record<string, unknown>;
84
126
  values: Record<string, unknown>;
85
127
  fieldValues: Record<string, unknown>;
86
128
  serializedValues: Record<string, unknown>;
87
129
  serializedFieldValues: Record<string, unknown>;
88
130
  reports: Record<string, unknown>;
131
+ reportContext?: PrimitiveReportContext;
132
+ reportContexts?: Record<string, PrimitiveReportContext>;
89
133
  meta: Record<string, unknown>;
90
134
  raw: unknown;
91
135
  signal?: AbortSignal;
@@ -1,9 +1,10 @@
1
- import { PrimitiveFieldController, PrimitiveFormController, PrimitiveFormStatus, PrimitiveReportRequest, PrimitiveReportController, PrimitiveSubmitResult, PrimitiveFormState } from './controller-types';
1
+ import { PrimitiveFieldController, PrimitiveFormController, PrimitiveFormStatus, PrimitivePipelineResult, PrimitiveReportRequest, PrimitiveReportController, PrimitiveSubmitResult, PrimitiveSubmitExecutionResult, PrimitiveFormState } from './controller-types';
2
2
  import { PrimitiveText, PrimitiveTextOverrides } from './constants';
3
3
  import { FieldDescriptor, PrimitiveDescriptorRegistry, ReportDescriptor } from './descriptors';
4
4
  export type PrimitiveLayout = "stacked" | "split";
5
5
  export type PrimitiveContainerStrategy = "error" | "replace";
6
- export type { PrimitiveReportRequest };
6
+ export type PrimitiveReportFetchMode = "lazy" | "all" | "none";
7
+ export type { PrimitivePipelineResult, PrimitiveReportRequest, PrimitiveSubmitExecutionResult };
7
8
  export interface PrimitiveRegistry {
8
9
  registerField(component: string, tagName: string): PrimitiveRegistry;
9
10
  unregisterField(component: string): PrimitiveRegistry;
@@ -35,6 +36,8 @@ export interface MountFormOptions {
35
36
  text?: PrimitiveTextOverrides;
36
37
  /** Optional transport for report renderers that fetch extra data after submit. */
37
38
  reportTransport?: PrimitiveReportTransport;
39
+ reportFetchMode?: PrimitiveReportFetchMode;
40
+ submitHandler?: () => Promise<PrimitiveSubmitExecutionResult>;
38
41
  }
39
42
  export interface MountedForm {
40
43
  readonly form: PrimitiveFormController;
@@ -84,6 +87,7 @@ export interface PrimitiveSubmitSuccessDetail {
84
87
  form: PrimitiveFormController;
85
88
  state: PrimitiveFormState;
86
89
  result: PrimitiveSubmitResult;
90
+ pipelineResult?: PrimitivePipelineResult;
87
91
  }
88
92
  export interface PrimitiveSubmitErrorDetail {
89
93
  form: PrimitiveFormController;
@@ -1,10 +1,12 @@
1
- export { executeFormPipeline, executeReportFetches } from './submission';
1
+ export { createSubmissionSnapshot, executeFormPipeline, executeReportFetches } from './submission';
2
+ export { createMultiBackendSubmissionSnapshot, executeMultiBackendPipeline } from './submission';
3
+ export type { CreateMultiBackendSubmissionSnapshotOptions, CreateSubmissionSnapshotOptions, ExecuteMultiBackendPipelineOptions, MultiBackendPipelineResult, MultiBackendRunResult, MultiBackendSubmit, SubmissionSnapshot, } from './submission';
2
4
  export { EngineError, ReportPayloadError, RegistryError, SubmissionAbortedError, SubmitError, TransportError, transportErrorCodes, ValidationError, } from './errors';
3
5
  export type { TransportErrorCode } from './errors';
4
6
  export { createForm, createForm as createFormRuntime } from './form';
5
7
  export { defaultEquality, shallowArrayEquality, shallowEquality, shallowObjectEquality, } from './equality';
6
8
  export { identity, isPromiseLike } from './utils';
7
- export type { AllConditions, AfterSubmitContext, AfterValidateContext, AnyConditions, BaseFieldConfig, BaseReportConfig, BeforeSubmitContext, BeforeValidateContext, CreateFormConfig, DeclarativeFieldCondition, AfterReportFetchContext, FieldValidationFnContext, FieldValueAdapter, FieldConfig, FieldComparisonCondition, FieldCondition, FieldConditionContext, FieldController, FieldDefinition, FieldStateSnapshot, FieldStatus, FieldValueCondition, FieldValidationContext, FieldValidationResult, FormController, FormHooks, FormSchema, FormState, FormStatusCondition, FormStatus, FormValidator, FormValidationContext, FormValidationIssue, FormValidationResult, InactiveFieldPolicy, MaybePromise, NormalizedFieldConfig, NormalizedReportConfig, Registry, ReportConfig, ReportController, ReportDefinition, ReportFetchContext, ReportFetchErrorContext, ReportFetchExecutionContext, ReportFetchExecutionResult, ReportFetchFactory, ReportFetchRequest, ReportFetchStatus, ReportFetchTransport, ReportResolveContext, ReportStateSnapshot, ReportStatus, PipelineArtifactAdapter, PipelineArtifactContext, PipelineResult, ExecuteFormPipelineOptions, SelectorSubscriptionOptions, SubmitCountCondition, SubmitErrorContext, SubmitOptions, SubmitRequest, SubmitRequestTransportContext, SubmitResult, Transport, TransportAuthKind, TransportBackpressureMode, TransportCapabilities, TransportConsistency, TransportDeliveryMode, TransportPolicyContext, TransportSession, TransportSessionEvent, TransportSessionMessage, TransportStreamEvent, TransportResponse, NotCondition, RuntimeBehavior, RuntimeBehaviorContext, RuntimeBehaviorSubmissionRecords, RuntimeBehaviorValueChangeEvent, } from './types';
9
+ export type { AllConditions, AfterSubmitContext, AfterValidateContext, AnyConditions, BaseFieldConfig, BaseReportConfig, BeforeSubmitContext, BeforeValidateContext, CreateFormConfig, DeclarativeFieldCondition, AfterReportFetchContext, FieldValidationFnContext, FieldValueAdapter, FieldConfig, FieldComparisonCondition, FieldCondition, FieldConditionContext, FieldController, FieldDefinition, FieldStateSnapshot, FieldStatus, FieldValueCondition, FieldValidationContext, FieldValidationResult, FormController, FormHooks, FormSchema, FormState, FormStatusCondition, FormStatus, FormValidator, FormValidationContext, FormValidationIssue, FormValidationResult, InactiveFieldPolicy, MaybePromise, NormalizedFieldConfig, NormalizedReportConfig, Registry, ReportConfig, ReportController, ReportDefinition, ReportFetchContext, ReportFetchErrorContext, ReportFetchExecutionContext, ReportFetchExecutionResult, ReportFetchFactory, ReportFetchRequest, ReportFetchStatus, ReportFetchTransport, ReportResolveContext, ReportStateSnapshot, ReportStatus, PipelineArtifactAdapter, PipelineArtifactContext, PipelineResult, ExecuteFormPipelineOptions, SelectorSubscriptionOptions, SubmitCountCondition, SubmitErrorContext, SubmitOptions, SubmitRequest, SubmitRequestTransportContext, SubmitResult, SubmissionInputRecord, Transport, TransportAuthKind, TransportBackpressureMode, TransportCapabilities, TransportConsistency, TransportDeliveryMode, TransportPolicyContext, TransportSession, TransportSessionEvent, TransportSessionMessage, TransportStreamEvent, TransportResponse, NotCondition, RuntimeBehavior, RuntimeBehaviorContext, RuntimeBehaviorSubmissionRecords, RuntimeBehaviorValueChangeEvent, } from './types';
8
10
  export type FieldHandle = import('./types').FieldController;
9
11
  export type ReportHandle = import('./types').ReportController;
10
12
  export type FormRuntime = import('./types').FormController;
@@ -1,5 +1,7 @@
1
1
  export * from './pipeline';
2
+ export * from './multi-backend';
2
3
  export * from './report-fetches';
3
4
  export * from './request';
4
5
  export * from './reports';
6
+ export * from './snapshot';
5
7
  export * from './submitter';
@@ -0,0 +1,25 @@
1
+ import { FormController, SubmitResult } from '../types';
2
+ import { SubmissionSnapshot } from './snapshot';
3
+ export interface MultiBackendSubmit {
4
+ backend: string;
5
+ signal?: AbortSignal;
6
+ }
7
+ export interface MultiBackendRunResult {
8
+ backend: string;
9
+ snapshot: SubmissionSnapshot;
10
+ submitResult?: SubmitResult;
11
+ reportFetchResults: Record<string, unknown>;
12
+ reportFetchErrors: Record<string, string>;
13
+ skippedReportIds: string[];
14
+ error?: unknown;
15
+ }
16
+ export interface ExecuteMultiBackendPipelineOptions {
17
+ form: FormController;
18
+ backends: readonly (string | MultiBackendSubmit)[];
19
+ reportFetchMode?: "none" | "all";
20
+ continueOnError?: boolean;
21
+ }
22
+ export interface MultiBackendPipelineResult {
23
+ runs: Record<string, MultiBackendRunResult>;
24
+ }
25
+ export declare const executeMultiBackendPipeline: ({ form, backends, reportFetchMode, continueOnError, }: ExecuteMultiBackendPipelineOptions) => Promise<MultiBackendPipelineResult>;
@@ -9,7 +9,21 @@ type SubmissionField = {
9
9
  };
10
10
  serialize(): unknown;
11
11
  };
12
+ export type SubmissionInputRecord = {
13
+ fieldId: string;
14
+ displayKey?: string;
15
+ label: string;
16
+ value: unknown;
17
+ serializedValue: unknown;
18
+ mappedTo?: string | number;
19
+ modelValues: Record<string, unknown>;
20
+ visible: boolean;
21
+ disabled: boolean;
22
+ };
12
23
  export type SubmissionValueRecords = {
24
+ inputs: SubmissionInputRecord[];
25
+ displayValues: Record<string, unknown>;
26
+ modelValues: Record<string, unknown>;
13
27
  values: Record<string, unknown>;
14
28
  fieldValues: Record<string, unknown>;
15
29
  serializedValues: Record<string, unknown>;
@@ -0,0 +1,12 @@
1
+ import { FormController, InactiveFieldPolicy } from '../types';
2
+ import { SubmissionValueRecords } from './request';
3
+ export interface CreateSubmissionSnapshotOptions {
4
+ backend?: string;
5
+ inactiveFieldPolicy?: InactiveFieldPolicy;
6
+ }
7
+ export type SubmissionSnapshot = SubmissionValueRecords;
8
+ export declare const createSubmissionSnapshot: (form: Pick<FormController, "fields">, options?: CreateSubmissionSnapshotOptions) => SubmissionSnapshot;
9
+ export interface CreateMultiBackendSubmissionSnapshotOptions extends Omit<CreateSubmissionSnapshotOptions, "backend"> {
10
+ backends: readonly string[];
11
+ }
12
+ export declare const createMultiBackendSubmissionSnapshot: (form: Pick<FormController, "fields">, options: CreateMultiBackendSubmissionSnapshotOptions) => Record<string, SubmissionSnapshot>;
@@ -1,4 +1,5 @@
1
1
  import { Registry } from '../../../schema';
2
+ import { SubmissionInputRecord } from '../../../transport';
2
3
  import { FieldHandle } from './field';
3
4
  import { FormStatus } from './form';
4
5
  type MaybePromise<T> = T | PromiseLike<T>;
@@ -8,6 +9,9 @@ export interface RuntimeBehaviorValueChangeEvent {
8
9
  values: Record<string, unknown>;
9
10
  }
10
11
  export interface RuntimeBehaviorSubmissionRecords {
12
+ inputs: SubmissionInputRecord[];
13
+ displayValues: Record<string, unknown>;
14
+ modelValues: Record<string, unknown>;
11
15
  values: Record<string, unknown>;
12
16
  fieldValues: Record<string, unknown>;
13
17
  serializedValues: Record<string, unknown>;
@@ -8,6 +8,7 @@ export interface FieldHandle {
8
8
  setValue(value: unknown): void;
9
9
  blur(): void;
10
10
  focus(): void;
11
+ serialize(): unknown;
11
12
  validate(): Promise<FieldValidationResult>;
12
13
  reset(): void;
13
14
  subscribe(listener: (state: FieldStateSnapshot) => void): () => void;
@@ -100,6 +100,10 @@ export interface FormController {
100
100
  readonly reports: readonly ReportController[];
101
101
  readonly state: FormState;
102
102
  getField(id: string): FieldController | undefined;
103
+ getFieldByDisplayKey(displayKey: string): FieldController | undefined;
104
+ getFieldByMappedTo(target: string | number, options?: {
105
+ backend?: string;
106
+ }): FieldController | undefined;
103
107
  getReport(id: string): ReportController | undefined;
104
108
  getValues(): Record<string, unknown>;
105
109
  setValues(values: Record<string, unknown>): void;
@@ -1,8 +1,8 @@
1
- import { SubmitRequest as BaseSubmitRequest, Transport as BaseTransport, TransportStreamEvent as BaseTransportStreamEvent } from '../../../transport';
1
+ import { SubmitRequest as BaseSubmitRequest, Transport as BaseTransport, SubmissionInputRecord, TransportStreamEvent as BaseTransportStreamEvent } from '../../../transport';
2
2
  import { SubmitResult as SchemaSubmitResult } from '../../../schema';
3
3
  import { NormalizedFieldConfig } from './field';
4
4
  import { NormalizedReportConfig, ReportStateSnapshot } from './report';
5
- export type { CapabilityRequirement, CircuitBreakerSharedState, CircuitBreakerStateSnapshot, RateLimitLeaseRequest, SharedRateLimiter, SharedRateLimiterLease, SubmitRequestMetadata, SubmitRequestTransportContext, TransportAuthKind, TransportBackpressureMode, TransportCacheEntry, TransportCacheStore, TransportCapabilities, TransportCollection, TransportConsistency, TransportDeliveryMode, TransportHealthSnapshot, TransportHealthState, TransportPolicyContext, TransportResponse, TransportSession, TransportSessionCloseEvent, TransportSessionErrorEvent, TransportSessionEvent, TransportSessionMessage, TransportSessionMessageEvent, TransportSessionMetaEvent, TransportSessionProgressEvent, TransportSessionResultEvent, TransportStreamChunkEvent, TransportStreamErrorEvent, TransportStreamMetaEvent, TransportStreamProgressEvent, TransportStreamReportPatchEvent, TransportStreamReportReplaceEvent, } from '../../../transport';
5
+ export type { CapabilityRequirement, CircuitBreakerSharedState, CircuitBreakerStateSnapshot, RateLimitLeaseRequest, SharedRateLimiter, SharedRateLimiterLease, SubmissionInputRecord, SubmitRequestMetadata, SubmitRequestTransportContext, TransportAuthKind, TransportBackpressureMode, TransportCacheEntry, TransportCacheStore, TransportCapabilities, TransportCollection, TransportConsistency, TransportDeliveryMode, TransportHealthSnapshot, TransportHealthState, TransportPolicyContext, TransportResponse, TransportSession, TransportSessionCloseEvent, TransportSessionErrorEvent, TransportSessionEvent, TransportSessionMessage, TransportSessionMessageEvent, TransportSessionMetaEvent, TransportSessionProgressEvent, TransportSessionResultEvent, TransportStreamChunkEvent, TransportStreamErrorEvent, TransportStreamMetaEvent, TransportStreamProgressEvent, TransportStreamReportPatchEvent, TransportStreamReportReplaceEvent, } from '../../../transport';
6
6
  export type SubmitRequest = BaseSubmitRequest<NormalizedFieldConfig, NormalizedReportConfig>;
7
7
  export type SubmitResult = SchemaSubmitResult<ReportStateSnapshot>;
8
8
  export type Transport = BaseTransport<NormalizedFieldConfig, NormalizedReportConfig>;
@@ -13,6 +13,9 @@ export interface SubmitOptions {
13
13
  }
14
14
  export interface BeforeSubmitContext {
15
15
  backend?: string;
16
+ inputs: SubmissionInputRecord[];
17
+ displayValues: Record<string, unknown>;
18
+ modelValues: Record<string, unknown>;
16
19
  values: Record<string, unknown>;
17
20
  fieldValues: Record<string, unknown>;
18
21
  serializedValues: Record<string, unknown>;
@@ -22,6 +25,9 @@ export interface BeforeSubmitContext {
22
25
  }
23
26
  export interface AfterSubmitContext {
24
27
  backend?: string;
28
+ inputs: SubmissionInputRecord[];
29
+ displayValues: Record<string, unknown>;
30
+ modelValues: Record<string, unknown>;
25
31
  values: Record<string, unknown>;
26
32
  fieldValues: Record<string, unknown>;
27
33
  serializedValues: Record<string, unknown>;
@@ -31,6 +37,9 @@ export interface AfterSubmitContext {
31
37
  }
32
38
  export interface SubmitErrorContext {
33
39
  backend?: string;
40
+ inputs: SubmissionInputRecord[];
41
+ displayValues: Record<string, unknown>;
42
+ modelValues: Record<string, unknown>;
34
43
  values: Record<string, unknown>;
35
44
  fieldValues: Record<string, unknown>;
36
45
  serializedValues: Record<string, unknown>;
@@ -1,6 +1,8 @@
1
1
  export { normalizeSchemaId } from './ids';
2
2
  export * from './mapped-to';
3
3
  export * from './normalize';
4
+ export * from './onehot-display';
5
+ export * from './report-context';
4
6
  export { createReportFetchRequest } from './report-fetch-request';
5
7
  export * from './registry';
6
8
  export type * from './types/field';
@@ -1,11 +1,19 @@
1
1
  export type MappedToTarget = string | number;
2
2
  export type MappedTo = MappedToTarget | Record<string, MappedToTarget | null | undefined>;
3
+ export type ReportPayloadAliasOptions = {
4
+ aliases?: readonly MappedToTarget[];
5
+ onAlias?: (alias: MappedToTarget, target: MappedToTarget) => void;
6
+ };
3
7
  export declare const resolveMappedTo: (mappedTo: MappedTo | undefined, backend: string | undefined) => MappedToTarget | undefined;
4
8
  export declare const mappedToKey: (target: MappedToTarget) => string;
9
+ export declare class MissingReportMappedToError extends Error {
10
+ constructor();
11
+ }
5
12
  export declare const resolveMappedReportPayload: (report: {
13
+ id?: string;
6
14
  mappedTo?: MappedTo;
7
15
  }, result: {
8
16
  backend?: string;
9
17
  reports: Record<string, unknown>;
10
18
  raw: unknown;
11
- }) => unknown;
19
+ }, options?: ReportPayloadAliasOptions) => unknown;
@@ -0,0 +1,15 @@
1
+ import { MappedTo } from './mapped-to';
2
+ export type OneHotDisplayOption = {
3
+ label?: string;
4
+ value: string;
5
+ mappedTo?: MappedTo;
6
+ };
7
+ export type OneHotDisplayField = {
8
+ id?: string;
9
+ kind?: string;
10
+ options?: readonly OneHotDisplayOption[];
11
+ };
12
+ export interface ResolveOneHotDisplayValueOptions {
13
+ backend?: string;
14
+ }
15
+ export declare const resolveOneHotDisplayValue: (field: OneHotDisplayField, modelValues: Record<string, unknown>, options?: ResolveOneHotDisplayValueOptions) => string | undefined;
@@ -0,0 +1,17 @@
1
+ import { MappedTo } from './mapped-to';
2
+ import { NormalizedReportConfig } from './types/report';
3
+ import { ReportContext, SubmitResult } from './types/submit';
4
+ type ReportContextSource = Pick<SubmitResult, "backend"> & {
5
+ reportContexts?: Record<string, ReportContext>;
6
+ };
7
+ type ReportContextLookup = string | number | {
8
+ id?: string;
9
+ mappedTo?: MappedTo;
10
+ config?: {
11
+ id?: string;
12
+ mappedTo?: MappedTo;
13
+ };
14
+ };
15
+ export declare const createReportContexts: (reports: readonly NormalizedReportConfig[], result: Pick<SubmitResult, "backend" | "displayValues" | "modelValues" | "serializedValues" | "reports" | "meta" | "raw">) => Record<string, ReportContext>;
16
+ export declare const getReportContext: (source: ReportContextSource, lookup: ReportContextLookup) => ReportContext | undefined;
17
+ export {};
@@ -20,6 +20,7 @@ export interface BaseFieldConfig {
20
20
  asyncValidationDebounceMs?: number;
21
21
  inactiveFieldPolicy?: InactiveFieldPolicy;
22
22
  includeInSubmission?: boolean;
23
+ displayKey?: string;
23
24
  mappedTo?: MappedTo;
24
25
  valuePath?: string | string[];
25
26
  defaultValue?: unknown;
@@ -1,7 +1,7 @@
1
1
  import { ZodType } from 'zod';
2
2
  import { MaybePromise } from './field';
3
3
  import { MappedTo } from '../mapped-to';
4
- import { SubmitResult } from './submit';
4
+ import { ReportContext, SubmitResult, SubmissionInputRecord } from './submit';
5
5
  export type ReportStatus = "idle" | "loading" | "ready" | "error";
6
6
  export type ReportFetchStatus = ReportStatus;
7
7
  export type ReportPayloadValidationPolicy = "report-error" | "fail-submit";
@@ -36,11 +36,16 @@ export interface ReportResolveContext<TConfig extends ReportConfig = ReportConfi
36
36
  export interface ReportFetchRequest {
37
37
  reportId: string;
38
38
  backend?: string;
39
+ inputs?: SubmissionInputRecord[];
40
+ displayValues?: Record<string, unknown>;
41
+ modelValues?: Record<string, unknown>;
39
42
  values: Record<string, unknown>;
40
43
  fieldValues: Record<string, unknown>;
41
44
  serializedValues: Record<string, unknown>;
42
45
  serializedFieldValues: Record<string, unknown>;
43
46
  reports: Record<string, unknown>;
47
+ reportContext?: ReportContext;
48
+ reportContexts?: Record<string, ReportContext>;
44
49
  meta: Record<string, unknown>;
45
50
  raw: unknown;
46
51
  signal?: AbortSignal;
@@ -1,10 +1,40 @@
1
+ import { MappedTo } from '../mapped-to';
2
+ export interface SubmissionInputRecord {
3
+ fieldId: string;
4
+ displayKey?: string;
5
+ label: string;
6
+ value: unknown;
7
+ serializedValue: unknown;
8
+ mappedTo?: string | number;
9
+ modelValues: Record<string, unknown>;
10
+ visible: boolean;
11
+ disabled: boolean;
12
+ }
13
+ export interface ReportContext {
14
+ reportId: string;
15
+ kind: string;
16
+ label?: string;
17
+ mappedTo?: MappedTo;
18
+ target?: string | number;
19
+ targetKey?: string;
20
+ backend?: string;
21
+ displayValues: Record<string, unknown>;
22
+ modelValues: Record<string, unknown>;
23
+ reports: Record<string, unknown>;
24
+ meta: Record<string, unknown>;
25
+ raw: unknown;
26
+ }
1
27
  export interface SubmitResult<TReportState = unknown> {
2
28
  backend?: string;
29
+ inputs?: SubmissionInputRecord[];
30
+ displayValues?: Record<string, unknown>;
31
+ modelValues?: Record<string, unknown>;
3
32
  values: Record<string, unknown>;
4
33
  fieldValues: Record<string, unknown>;
5
34
  serializedValues: Record<string, unknown>;
6
35
  serializedFieldValues: Record<string, unknown>;
7
36
  reports: Record<string, unknown>;
37
+ reportContexts?: Record<string, ReportContext>;
8
38
  reportStates: Record<string, TReportState>;
9
39
  meta: Record<string, unknown>;
10
40
  raw: unknown;
@@ -17,8 +17,22 @@ export interface SubmitRequestTransportContext {
17
17
  export interface SubmitRequestMetadata {
18
18
  estimatedPayloadBytes?: number;
19
19
  }
20
+ export interface SubmissionInputRecord {
21
+ fieldId: string;
22
+ displayKey?: string;
23
+ label: string;
24
+ value: unknown;
25
+ serializedValue: unknown;
26
+ mappedTo?: string | number;
27
+ modelValues: Record<string, unknown>;
28
+ visible: boolean;
29
+ disabled: boolean;
30
+ }
20
31
  export interface SubmitRequest<TField extends Record<string, unknown> = Record<string, unknown>, TReport extends Record<string, unknown> = Record<string, unknown>> {
21
32
  backend?: string;
33
+ inputs?: SubmissionInputRecord[];
34
+ displayValues?: Record<string, unknown>;
35
+ modelValues?: Record<string, unknown>;
22
36
  values: Record<string, unknown>;
23
37
  fieldValues: Record<string, unknown>;
24
38
  serializedValues: Record<string, unknown>;
@@ -36,6 +50,9 @@ export interface TransportResponse {
36
50
  }
37
51
  export interface SubmitResult<TReportState extends Record<string, unknown> = Record<string, unknown>> {
38
52
  backend?: string;
53
+ inputs?: SubmissionInputRecord[];
54
+ displayValues?: Record<string, unknown>;
55
+ modelValues?: Record<string, unknown>;
39
56
  values: Record<string, unknown>;
40
57
  fieldValues: Record<string, unknown>;
41
58
  serializedValues: Record<string, unknown>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mlform",
3
- "version": "0.1.14",
3
+ "version": "0.1.16",
4
4
  "private": false,
5
5
  "description": "Composable form generation utilities for machine learning backend integration",
6
6
  "keywords": [
@@ -52,31 +52,31 @@
52
52
  "type": "module",
53
53
  "exports": {
54
54
  "./kit": {
55
- "types": "./dist/types/kit/index.d.ts",
55
+ "types": "./dist/types/src/kit/index.d.ts",
56
56
  "import": "./dist/mlform/kit.mjs"
57
57
  },
58
58
  "./runtime": {
59
- "types": "./dist/types/runtime/index.d.ts",
59
+ "types": "./dist/types/src/runtime/index.d.ts",
60
60
  "import": "./dist/mlform/runtime.mjs"
61
61
  },
62
62
  "./schema": {
63
- "types": "./dist/types/schema/index.d.ts",
63
+ "types": "./dist/types/src/schema/index.d.ts",
64
64
  "import": "./dist/mlform/schema.mjs"
65
65
  },
66
66
  "./builtins": {
67
- "types": "./dist/types/builtins/index.d.ts",
67
+ "types": "./dist/types/src/builtins/index.d.ts",
68
68
  "import": "./dist/mlform/builtins.mjs"
69
69
  },
70
70
  "./transport": {
71
- "types": "./dist/types/transport/index.d.ts",
71
+ "types": "./dist/types/src/transport/index.d.ts",
72
72
  "import": "./dist/mlform/transport.mjs"
73
73
  },
74
74
  "./primitives": {
75
- "types": "./dist/types/primitives/index.d.ts",
75
+ "types": "./dist/types/src/primitives/index.d.ts",
76
76
  "import": "./dist/mlform/primitives.mjs"
77
77
  },
78
78
  "./design": {
79
- "types": "./dist/types/design/index.d.ts",
79
+ "types": "./dist/types/src/design/index.d.ts",
80
80
  "import": "./dist/mlform/design.mjs"
81
81
  }
82
82
  },