mlform 0.1.2 → 0.1.4
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/README.md +241 -88
- package/dist/design-system-CrrSGfFB.js +1352 -0
- package/dist/engine-nnhWPT2L.js +5301 -0
- package/dist/kit-Dt_1Fxlc.js +76 -0
- package/dist/mlform/design-system.mjs +2 -0
- package/dist/mlform/engine.mjs +3 -0
- package/dist/mlform/kit.mjs +3 -0
- package/dist/mlform/primitives.mjs +2 -0
- package/dist/mlform/questionnaire.mjs +640 -0
- package/dist/mlform/transport.mjs +2 -0
- package/dist/mlform.mjs +4 -709
- package/dist/primitives-Pi-ztAr6.js +5063 -0
- package/dist/transport-A1RsnZhD.js +2143 -0
- package/dist/types/src/design-system/constants.d.ts +34 -0
- package/dist/types/src/design-system/contract/component-keys.d.ts +2 -0
- package/dist/types/src/design-system/contract/component-tokens.d.ts +5 -0
- package/dist/types/src/design-system/contract/global-tokens.d.ts +7 -0
- package/dist/types/src/design-system/contract/index.d.ts +4 -0
- package/dist/types/src/design-system/contract/token-keys.d.ts +12 -0
- package/dist/types/src/design-system/index.d.ts +8 -0
- package/dist/types/src/design-system/recipes/contrast.d.ts +2 -0
- package/dist/types/src/design-system/recipes/default.d.ts +2 -0
- package/dist/types/src/design-system/recipes/index.d.ts +4 -0
- package/dist/types/src/design-system/recipes/minimal.d.ts +2 -0
- package/dist/types/src/design-system/recipes/soft.d.ts +2 -0
- package/dist/types/src/design-system/registry/builtins.d.ts +5 -0
- package/dist/types/src/design-system/registry/create-registry.d.ts +2 -0
- package/dist/types/src/design-system/registry/deep-freeze.d.ts +5 -0
- package/dist/types/src/design-system/registry/define-recipe.d.ts +2 -0
- package/dist/types/src/design-system/registry/define-theme.d.ts +2 -0
- package/dist/types/src/design-system/registry/define-token-maps.d.ts +6 -0
- package/dist/types/src/design-system/registry/index.d.ts +5 -0
- package/dist/types/src/design-system/resolve/diagnostics.d.ts +9 -0
- package/dist/types/src/design-system/resolve/index.d.ts +5 -0
- package/dist/types/src/design-system/resolve/merge-config.d.ts +2 -0
- package/dist/types/src/design-system/resolve/migrate-tokens.d.ts +44 -0
- package/dist/types/src/design-system/resolve/resolve-mode.d.ts +6 -0
- package/dist/types/src/design-system/resolve/resolve-recipe.d.ts +2 -0
- package/dist/types/src/design-system/resolve/resolve-theme.d.ts +2 -0
- package/dist/types/src/design-system/resolve/resolve-tokens.d.ts +2 -0
- package/dist/types/src/design-system/runtime/apply-tokens.d.ts +4 -0
- package/dist/types/src/design-system/runtime/attach-design-system.d.ts +11 -0
- package/dist/types/src/design-system/runtime/create-stylesheet.d.ts +11 -0
- package/dist/types/src/design-system/runtime/declarations.d.ts +5 -0
- package/dist/types/src/design-system/runtime/design-system-controller.d.ts +9 -0
- package/dist/types/src/design-system/runtime/host-state.d.ts +3 -0
- package/dist/types/src/design-system/runtime/hydrate-design-system.d.ts +25 -0
- package/dist/types/src/design-system/runtime/index.d.ts +8 -0
- package/dist/types/src/design-system/themes/cobalt.d.ts +2 -0
- package/dist/types/src/design-system/themes/graphite.d.ts +2 -0
- package/dist/types/src/design-system/themes/index.d.ts +5 -0
- package/dist/types/src/design-system/themes/neutral.d.ts +2 -0
- package/dist/types/src/design-system/themes/sage.d.ts +2 -0
- package/dist/types/src/design-system/themes/sunset.d.ts +2 -0
- package/dist/types/src/design-system/tokens/base.d.ts +5 -0
- package/dist/types/src/design-system/tokens/contrast.d.ts +8 -0
- package/dist/types/src/design-system/tokens/density.d.ts +9 -0
- package/dist/types/src/design-system/tokens/forced-colors.d.ts +12 -0
- package/dist/types/src/design-system/tokens/index.d.ts +5 -0
- package/dist/types/src/design-system/tokens/motion.d.ts +2 -0
- package/dist/types/src/design-system/types.d.ts +225 -0
- package/dist/types/src/engine/builtins/fields/boolean.d.ts +8 -0
- package/dist/types/src/engine/builtins/fields/category.d.ts +11 -0
- package/dist/types/src/engine/builtins/fields/date.d.ts +9 -0
- package/dist/types/src/engine/builtins/fields/long-text.d.ts +10 -0
- package/dist/types/src/engine/builtins/fields/multi-choice.d.ts +12 -0
- package/dist/types/src/engine/builtins/fields/number.d.ts +11 -0
- package/dist/types/src/engine/builtins/fields/rating.d.ts +9 -0
- package/dist/types/src/engine/builtins/fields/series.d.ts +20 -0
- package/dist/types/src/engine/builtins/fields/single-choice.d.ts +12 -0
- package/dist/types/src/engine/builtins/fields/text.d.ts +10 -0
- package/dist/types/src/engine/builtins/index.d.ts +97 -0
- package/dist/types/src/engine/builtins/reports/classifier.d.ts +8 -0
- package/dist/types/src/engine/builtins/reports/regressor.d.ts +8 -0
- package/dist/types/src/engine/builtins/shared.d.ts +49 -0
- package/dist/types/src/engine/comparison.d.ts +2 -0
- package/dist/types/src/engine/constants.d.ts +51 -0
- package/dist/types/src/engine/declarative/explanation.d.ts +2 -0
- package/dist/types/src/engine/declarative/field.d.ts +2 -0
- package/dist/types/src/engine/declarative/presentation.d.ts +61 -0
- package/dist/types/src/engine/declarative/report.d.ts +2 -0
- package/dist/types/src/engine/equality.d.ts +4 -0
- package/dist/types/src/engine/errors.d.ts +28 -0
- package/dist/types/src/engine/explanations/controller.d.ts +13 -0
- package/dist/types/src/engine/explanations/index.d.ts +1 -0
- package/dist/types/src/engine/fields/controller.d.ts +30 -0
- package/dist/types/src/engine/fields/index.d.ts +1 -0
- package/dist/types/src/engine/form.d.ts +2 -0
- package/dist/types/src/engine/index.d.ts +11 -0
- package/dist/types/src/engine/paths.d.ts +2 -0
- package/dist/types/src/engine/registry/index.d.ts +26 -0
- package/dist/types/src/engine/reports/controller.d.ts +19 -0
- package/dist/types/src/engine/reports/index.d.ts +1 -0
- package/dist/types/src/engine/schema/index.d.ts +7 -0
- package/dist/types/src/engine/state/engine.d.ts +60 -0
- package/dist/types/src/engine/state/index.d.ts +3 -0
- package/dist/types/src/engine/state/snapshots.d.ts +5 -0
- package/dist/types/src/engine/state/store.d.ts +13 -0
- package/dist/types/src/engine/submission/abort.d.ts +15 -0
- package/dist/types/src/engine/submission/explanations.d.ts +2 -0
- package/dist/types/src/engine/submission/index.d.ts +5 -0
- package/dist/types/src/engine/submission/lifecycle.d.ts +16 -0
- package/dist/types/src/engine/submission/pipeline.d.ts +2 -0
- package/dist/types/src/engine/submission/reports.d.ts +12 -0
- package/dist/types/src/engine/submission/request.d.ts +23 -0
- package/dist/types/src/engine/submission/result.d.ts +4 -0
- package/dist/types/src/engine/submission/submitter.d.ts +40 -0
- package/dist/types/src/engine/types/explanation.d.ts +109 -0
- package/dist/types/src/engine/types/field.d.ts +172 -0
- package/dist/types/src/engine/types/form.d.ts +120 -0
- package/dist/types/src/engine/types/index.d.ts +9 -0
- package/dist/types/src/engine/types/pipeline.d.ts +31 -0
- package/dist/types/src/engine/types/registry.d.ts +17 -0
- package/dist/types/src/engine/types/report.d.ts +87 -0
- package/dist/types/src/engine/types/transport.d.ts +41 -0
- package/dist/types/src/engine/utils.d.ts +9 -0
- package/dist/types/src/engine/validation/conditions.d.ts +11 -0
- package/dist/types/src/engine/validation/field.d.ts +29 -0
- package/dist/types/src/engine/validation/form.d.ts +35 -0
- package/dist/types/src/engine/validation/index.d.ts +3 -0
- package/dist/types/src/engine/values.d.ts +2 -0
- package/dist/types/src/index.d.ts +7 -0
- package/dist/types/src/kit/constants.d.ts +4 -0
- package/dist/types/src/kit/defaults.d.ts +11 -0
- package/dist/types/src/kit/index.d.ts +4 -0
- package/dist/types/src/kit/mount-form.d.ts +3 -0
- package/dist/types/src/kit/types.d.ts +52 -0
- package/dist/types/src/primitives/base-async-report-element.d.ts +19 -0
- package/dist/types/src/primitives/base-explanation-element.d.ts +21 -0
- package/dist/types/src/primitives/base-field-element.d.ts +21 -0
- package/dist/types/src/primitives/base-report-element.d.ts +15 -0
- package/dist/types/src/primitives/components/declarative-explanation.d.ts +5 -0
- package/dist/types/src/primitives/components/declarative-field.d.ts +6 -0
- package/dist/types/src/primitives/components/declarative-report.d.ts +5 -0
- package/dist/types/src/primitives/components/explanation-panel.d.ts +22 -0
- package/dist/types/src/primitives/components/field-frame.d.ts +21 -0
- package/dist/types/src/primitives/components/form-errors.d.ts +19 -0
- package/dist/types/src/primitives/components/form-root.d.ts +29 -0
- package/dist/types/src/primitives/components/presentation.d.ts +4 -0
- package/dist/types/src/primitives/components/report-frame.d.ts +22 -0
- package/dist/types/src/primitives/components/submit-button.d.ts +21 -0
- package/dist/types/src/primitives/components/unsupported-component.d.ts +14 -0
- package/dist/types/src/primitives/constants.d.ts +94 -0
- package/dist/types/src/primitives/controller-binding.d.ts +32 -0
- package/dist/types/src/primitives/fields/boolean-field.d.ts +6 -0
- package/dist/types/src/primitives/fields/category-field.d.ts +6 -0
- package/dist/types/src/primitives/fields/date-field.d.ts +6 -0
- package/dist/types/src/primitives/fields/long-text-field.d.ts +6 -0
- package/dist/types/src/primitives/fields/multi-choice-field.d.ts +6 -0
- package/dist/types/src/primitives/fields/number-field.d.ts +8 -0
- package/dist/types/src/primitives/fields/rating-field.d.ts +6 -0
- package/dist/types/src/primitives/fields/series-field.d.ts +8 -0
- package/dist/types/src/primitives/fields/single-choice-field.d.ts +6 -0
- package/dist/types/src/primitives/fields/text-field.d.ts +6 -0
- package/dist/types/src/primitives/index.d.ts +8 -0
- package/dist/types/src/primitives/mount-form.d.ts +4 -0
- package/dist/types/src/primitives/register.d.ts +0 -0
- package/dist/types/src/primitives/registry.d.ts +3 -0
- package/dist/types/src/primitives/reports/classifier-report.d.ts +5 -0
- package/dist/types/src/primitives/reports/regressor-report.d.ts +5 -0
- package/dist/types/src/primitives/types.d.ts +128 -0
- package/dist/types/src/primitives/utils.d.ts +3 -0
- package/dist/types/src/questionnaire/constants.d.ts +31 -0
- package/dist/types/src/questionnaire/defaults.d.ts +8 -0
- package/dist/types/src/questionnaire/engine/controller.d.ts +12 -0
- package/dist/types/src/questionnaire/engine/schema.d.ts +9 -0
- package/dist/types/src/questionnaire/errors.d.ts +3 -0
- package/dist/types/src/questionnaire/index.d.ts +6 -0
- package/dist/types/src/questionnaire/mount.d.ts +3 -0
- package/dist/types/src/questionnaire/primitives/components/questionnaire-root.d.ts +23 -0
- package/dist/types/src/questionnaire/primitives/components/step-indicator.d.ts +14 -0
- package/dist/types/src/questionnaire/primitives/register.d.ts +0 -0
- package/dist/types/src/questionnaire/types.d.ts +69 -0
- package/dist/types/src/shared/errors.d.ts +3 -0
- package/dist/types/src/shared/index.d.ts +1 -0
- package/dist/types/src/transport/capabilities.d.ts +7 -0
- package/dist/types/src/transport/clone.d.ts +6 -0
- package/dist/types/src/transport/composition/fallback.d.ts +2 -0
- package/dist/types/src/transport/composition/fanout.d.ts +3 -0
- package/dist/types/src/transport/composition/hedged.d.ts +2 -0
- package/dist/types/src/transport/composition/index.d.ts +7 -0
- package/dist/types/src/transport/composition/load-balancing.d.ts +2 -0
- package/dist/types/src/transport/composition/pipeline.d.ts +2 -0
- package/dist/types/src/transport/composition/racing.d.ts +2 -0
- package/dist/types/src/transport/composition/routing.d.ts +3 -0
- package/dist/types/src/transport/constants.d.ts +34 -0
- package/dist/types/src/transport/errors.d.ts +36 -0
- package/dist/types/src/transport/index.d.ts +9 -0
- package/dist/types/src/transport/internal.d.ts +110 -0
- package/dist/types/src/transport/middleware/auth.d.ts +2 -0
- package/dist/types/src/transport/middleware/cache.d.ts +2 -0
- package/dist/types/src/transport/middleware/circuit-breaker.d.ts +2 -0
- package/dist/types/src/transport/middleware/dedup.d.ts +2 -0
- package/dist/types/src/transport/middleware/index.d.ts +12 -0
- package/dist/types/src/transport/middleware/logging.d.ts +2 -0
- package/dist/types/src/transport/middleware/metrics.d.ts +2 -0
- package/dist/types/src/transport/middleware/pipe.d.ts +2 -0
- package/dist/types/src/transport/middleware/rate-limit.d.ts +2 -0
- package/dist/types/src/transport/middleware/retry.d.ts +2 -0
- package/dist/types/src/transport/middleware/timeout.d.ts +2 -0
- package/dist/types/src/transport/middleware/tracing.d.ts +2 -0
- package/dist/types/src/transport/middleware/transform.d.ts +3 -0
- package/dist/types/src/transport/policy-context.d.ts +3 -0
- package/dist/types/src/transport/protocols/graphql.d.ts +2 -0
- package/dist/types/src/transport/protocols/grpc.d.ts +5 -0
- package/dist/types/src/transport/protocols/index.d.ts +5 -0
- package/dist/types/src/transport/protocols/json.d.ts +2 -0
- package/dist/types/src/transport/protocols/sse.d.ts +2 -0
- package/dist/types/src/transport/protocols/websocket.d.ts +2 -0
- package/dist/types/src/transport/runtime.d.ts +4 -0
- package/dist/types/src/transport/state/cache-store.d.ts +2 -0
- package/dist/types/src/transport/state/circuit-breaker.d.ts +2 -0
- package/dist/types/src/transport/state/health.d.ts +2 -0
- package/dist/types/src/transport/state/index.d.ts +5 -0
- package/dist/types/src/transport/state/rate-limiter.d.ts +2 -0
- package/dist/types/src/transport/state/session.d.ts +2 -0
- package/dist/types/src/transport/types/capabilities.d.ts +35 -0
- package/dist/types/src/transport/types/core.d.ts +57 -0
- package/dist/types/src/transport/types/events.d.ts +50 -0
- package/dist/types/src/transport/types/index.d.ts +7 -0
- package/dist/types/src/transport/types/middleware.d.ts +3 -0
- package/dist/types/src/transport/types/options.d.ts +258 -0
- package/dist/types/src/transport/types/session.d.ts +48 -0
- package/dist/types/src/transport/types/state.d.ts +46 -0
- package/package.json +93 -37
- package/dist/FieldStrategy-pPekBtH-.js +0 -2318
- package/dist/ModelTypes-B9_veCKB.js +0 -5
- package/dist/ReportStrategy-DY3GC_mJ.js +0 -23
- package/dist/boolean-field-Cd3uhIPj.js +0 -104
- package/dist/category-field-D_Ms1x9u.js +0 -73
- package/dist/classifier-prediction-C5QzorTo.js +0 -193
- package/dist/custom-element-ttkHUa8w.js +0 -13
- package/dist/date-field-Cg_ja679.js +0 -162
- package/dist/error-card-BwjPChwf.js +0 -195
- package/dist/field-wrapper-DqIQl76d.js +0 -177
- package/dist/ml-layout-Dx63KKf7.js +0 -332
- package/dist/mlform/extensions.mjs +0 -38
- package/dist/mlform/strategies.mjs +0 -292
- package/dist/number-field-CC2DrVEb.js +0 -165
- package/dist/property-jKFNMQpR.js +0 -561
- package/dist/range-field-Cr7LEtsJ.js +0 -98
- package/dist/regressor-prediction-C18dHlfK.js +0 -236
- package/dist/src/core/app/DescriptorItem.d.ts +0 -6
- package/dist/src/core/app/DescriptorRegistry.d.ts +0 -13
- package/dist/src/core/app/DescriptorService.d.ts +0 -22
- package/dist/src/core/app/DescriptorStrategy.d.ts +0 -11
- package/dist/src/core/app/index.d.ts +0 -4
- package/dist/src/core/domain/index.d.ts +0 -24
- package/dist/src/core/index.d.ts +0 -3
- package/dist/src/core/ui/error-card.d.ts +0 -38
- package/dist/src/core/ui/field-wrapper.d.ts +0 -23
- package/dist/src/core/ui/index.d.ts +0 -3
- package/dist/src/core/ui/ml-layout.d.ts +0 -23
- package/dist/src/extensions/app/FieldStrategy.d.ts +0 -10
- package/dist/src/extensions/app/ReportStrategy.d.ts +0 -9
- package/dist/src/extensions/app/index.d.ts +0 -2
- package/dist/src/extensions/domain/BaseField.d.ts +0 -7
- package/dist/src/extensions/domain/BaseModel.d.ts +0 -6
- package/dist/src/extensions/domain/index.d.ts +0 -2
- package/dist/src/extensions/index.d.ts +0 -3
- package/dist/src/extensions/ui/field-element.d.ts +0 -9
- package/dist/src/extensions/ui/index.d.ts +0 -1
- package/dist/src/index.d.ts +0 -1
- package/dist/src/mlform/index.d.ts +0 -1
- package/dist/src/mlform/mlform.d.ts +0 -27
- package/dist/src/mlform/mlform.types.d.ts +0 -11
- package/dist/src/strategies/app/BooleanStrategy.d.ts +0 -12
- package/dist/src/strategies/app/CategoryStrategy.d.ts +0 -13
- package/dist/src/strategies/app/ClassifierStrategy.d.ts +0 -15
- package/dist/src/strategies/app/DateStrategy.d.ts +0 -15
- package/dist/src/strategies/app/NumberStrategy.d.ts +0 -29
- package/dist/src/strategies/app/RegressorStrategy.d.ts +0 -15
- package/dist/src/strategies/app/TextStrategy.d.ts +0 -16
- package/dist/src/strategies/app/index.d.ts +0 -7
- package/dist/src/strategies/domain/BooleanField.d.ts +0 -10
- package/dist/src/strategies/domain/CategoryField.d.ts +0 -11
- package/dist/src/strategies/domain/ClassifierModel.d.ts +0 -11
- package/dist/src/strategies/domain/DateField.d.ts +0 -13
- package/dist/src/strategies/domain/FieldTypes.d.ts +0 -7
- package/dist/src/strategies/domain/ModelTypes.d.ts +0 -4
- package/dist/src/strategies/domain/NumberField.d.ts +0 -15
- package/dist/src/strategies/domain/RegressorModel.d.ts +0 -11
- package/dist/src/strategies/domain/TextField.d.ts +0 -14
- package/dist/src/strategies/domain/index.d.ts +0 -9
- package/dist/src/strategies/index.d.ts +0 -1
- package/dist/src/strategies/ui/boolean-field.d.ts +0 -13
- package/dist/src/strategies/ui/category-field.d.ts +0 -14
- package/dist/src/strategies/ui/classifier-prediction.d.ts +0 -39
- package/dist/src/strategies/ui/date-field.d.ts +0 -18
- package/dist/src/strategies/ui/index.d.ts +0 -8
- package/dist/src/strategies/ui/number-field.d.ts +0 -19
- package/dist/src/strategies/ui/range-field.d.ts +0 -17
- package/dist/src/strategies/ui/regressor-prediction.d.ts +0 -29
- package/dist/src/strategies/ui/text-field.d.ts +0 -17
- package/dist/state-CLlTRyl1.js +0 -12
- package/dist/test/_fixtures/DummyField.d.ts +0 -9
- package/dist/test/setup.d.ts +0 -1
- package/dist/test/unit/DummyField.test.d.ts +0 -1
- package/dist/text-field-DwP-Fa1w.js +0 -114
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { MLFormError } from '../../shared';
|
|
2
|
+
import { FormValidationResult } from './types';
|
|
3
|
+
export declare class EngineError extends MLFormError {
|
|
4
|
+
constructor(message: string);
|
|
5
|
+
}
|
|
6
|
+
export declare class RegistryError extends EngineError {
|
|
7
|
+
constructor(message: string);
|
|
8
|
+
}
|
|
9
|
+
export declare class ValidationError extends EngineError {
|
|
10
|
+
readonly result: FormValidationResult;
|
|
11
|
+
constructor(result: FormValidationResult);
|
|
12
|
+
}
|
|
13
|
+
export declare class SubmitError extends EngineError {
|
|
14
|
+
readonly cause: unknown;
|
|
15
|
+
constructor(message: string, cause: unknown);
|
|
16
|
+
}
|
|
17
|
+
export declare class ReportPayloadError extends SubmitError {
|
|
18
|
+
readonly reportId: string;
|
|
19
|
+
constructor(reportId: string, message: string, cause: unknown);
|
|
20
|
+
}
|
|
21
|
+
export declare class SubmissionAbortedError extends SubmitError {
|
|
22
|
+
readonly code: "ABORTED";
|
|
23
|
+
constructor(message?: string, cause?: unknown);
|
|
24
|
+
}
|
|
25
|
+
export declare const createAbortError: (reason?: string) => SubmissionAbortedError;
|
|
26
|
+
export declare const isAbortLikeError: (error: unknown) => boolean;
|
|
27
|
+
export { TransportError, transportErrorCodes } from '../../transport';
|
|
28
|
+
export type { TransportErrorCode } from '../../transport';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { EngineStore } from '../state';
|
|
2
|
+
import { ExplanationController, ExplanationDefinition, FormHooks, NormalizedExplanationConfig } from '../types';
|
|
3
|
+
type CreateExplanationControllerOptions = {
|
|
4
|
+
config: NormalizedExplanationConfig;
|
|
5
|
+
definition: ExplanationDefinition;
|
|
6
|
+
store: EngineStore;
|
|
7
|
+
hooks: FormHooks | undefined;
|
|
8
|
+
};
|
|
9
|
+
export type InternalExplanationController = ExplanationController & {
|
|
10
|
+
reset(): void;
|
|
11
|
+
};
|
|
12
|
+
export declare const createExplanationController: ({ config, definition, store, hooks, }: CreateExplanationControllerOptions) => InternalExplanationController;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './controller';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { EngineStore, InternalFieldState } from '../state';
|
|
2
|
+
import { FieldController, FieldDefinition, FieldValidationResult, FormStatus, InactiveFieldPolicy, NormalizedFieldConfig } from '../types';
|
|
3
|
+
type CreateFieldControllerOptions = {
|
|
4
|
+
config: NormalizedFieldConfig;
|
|
5
|
+
definition: FieldDefinition;
|
|
6
|
+
store: EngineStore;
|
|
7
|
+
getValues: () => Record<string, unknown>;
|
|
8
|
+
getSubmitCount: () => number;
|
|
9
|
+
getFormStatus: () => FormStatus;
|
|
10
|
+
onValueChange?: (fieldId: string, values: Record<string, unknown>) => void;
|
|
11
|
+
};
|
|
12
|
+
export type RefreshOptions = {
|
|
13
|
+
values?: Record<string, unknown>;
|
|
14
|
+
preserveValidationErrors?: boolean;
|
|
15
|
+
preserveExternalErrors?: boolean;
|
|
16
|
+
resetInactiveToInitial?: boolean;
|
|
17
|
+
inactiveFieldPolicy?: InactiveFieldPolicy;
|
|
18
|
+
};
|
|
19
|
+
export type InternalFieldController = FieldController & {
|
|
20
|
+
serialize(): unknown;
|
|
21
|
+
refresh(options?: RefreshOptions): InternalFieldState;
|
|
22
|
+
applyValue(value: unknown, values: Record<string, unknown>): void;
|
|
23
|
+
prepareValue(value: unknown, values: Record<string, unknown>): InternalFieldState;
|
|
24
|
+
commitState(state: InternalFieldState): void;
|
|
25
|
+
setExternalErrors(errors: string[]): void;
|
|
26
|
+
coerceValue(value: unknown): unknown;
|
|
27
|
+
validate(validationVersion?: number): Promise<FieldValidationResult>;
|
|
28
|
+
};
|
|
29
|
+
export declare const createFieldController: ({ config, definition, store, getValues, getSubmitCount, getFormStatus, onValueChange, }: CreateFieldControllerOptions) => InternalFieldController;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './controller';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { createBuiltinRegistry } from './builtins';
|
|
2
|
+
export { booleanFieldDefinition, categoryFieldDefinition, classifierReportDefinition, dateFieldDefinition, longTextFieldDefinition, multiChoiceFieldDefinition, numberFieldDefinition, ratingFieldDefinition, regressorReportDefinition, seriesFieldDefinition, singleChoiceFieldDefinition, textFieldDefinition, } from './builtins';
|
|
3
|
+
export { createExplanationController } from './explanations';
|
|
4
|
+
export { executeExplanations, executeFormPipeline } from './submission';
|
|
5
|
+
export { EngineError, ReportPayloadError, RegistryError, SubmissionAbortedError, SubmitError, TransportError, transportErrorCodes, ValidationError, } from './errors';
|
|
6
|
+
export type { TransportErrorCode } from './errors';
|
|
7
|
+
export { createForm } from './form';
|
|
8
|
+
export { createRegistry, defineExplanationDefinition, defineExplanationKind, defineFieldKind, defineFieldDefinition, defineReportKind, defineReportDefinition, EngineRegistry, } from './registry';
|
|
9
|
+
export { defaultEquality, shallowArrayEquality, shallowEquality, shallowObjectEquality, } from './equality';
|
|
10
|
+
export { identity, isPromiseLike } from './utils';
|
|
11
|
+
export type { AfterExplanationContext, AllConditions, AfterSubmitContext, AfterValidateContext, AnyConditions, BaseExplanationConfig, BaseFieldConfig, BaseReportConfig, DeclarativeExplanationKind, DeclarativeFieldKind, DeclarativeReportKind, BeforeSubmitContext, BeforeValidateContext, ExplanationFetchContext, ExplanationFetchFactory, CreateFormConfig, DeclarativeFieldCondition, ExplanationConfig, ExplanationController, ExplanationDefinition, ExplanationDescriptor, ExplanationDescriptorContext, ExplanationErrorContext, ExplanationExecutionContext, ExplanationExecutionResult, ExplanationFetchRequest, ExplanationFetchTransport, ExplanationRenderSpec, ExplanationRenderSpecContext, ExplanationStateSnapshot, ExplanationStatus, FieldRenderHints, FieldRenderSpec, FieldRenderSpecContext, FieldValidationFnContext, FieldValueAdapter, FieldWidget, FieldConfig, FieldComparisonCondition, FieldCondition, FieldConditionContext, FieldController, FieldDefinition, FieldDescriptor, FieldStateSnapshot, FieldStatus, FieldValueCondition, FieldValidationContext, FieldValidationResult, FormController, FormHooks, FormSchema, FormState, FormStatusCondition, FormStatus, FormValidator, FormValidationContext, FormValidationIssue, FormValidationResult, InactiveFieldPolicy, MaybePromise, NormalizedExplanationConfig, NormalizedFieldConfig, NormalizedReportConfig, Registry, ReportConfig, ReportController, ReportDefinition, ReportDescriptor, ReportRenderSpec, ReportRenderSpecContext, ReportResolveContext, ReportStateSnapshot, ReportStatus, PresentationNode, PresentationSummary, PipelineArtifactAdapter, PipelineArtifactContext, PipelineResult, ExecuteFormPipelineOptions, SelectorSubscriptionOptions, SubmitCountCondition, SubmitErrorContext, SubmitOptions, SubmitRequest, SubmitRequestTransportContext, SubmitResult, Transport, TransportAuthKind, TransportBackpressureMode, TransportCapabilities, TransportConsistency, TransportDeliveryMode, TransportPolicyContext, TransportSession, TransportSessionEvent, TransportSessionMessage, TransportStreamEvent, TransportResponse, NotCondition, } from './types';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { defineExplanationKind } from '../declarative/explanation';
|
|
2
|
+
import { defineFieldKind } from '../declarative/field';
|
|
3
|
+
import { defineReportKind } from '../declarative/report';
|
|
4
|
+
import { ExplanationConfig, ExplanationDefinition, FieldConfig, FieldDefinition, Registry, ReportConfig, ReportDefinition } from '../types';
|
|
5
|
+
export declare class EngineRegistry implements Registry {
|
|
6
|
+
private readonly fieldDefinitions;
|
|
7
|
+
private readonly reportDefinitions;
|
|
8
|
+
private readonly explanationDefinitions;
|
|
9
|
+
registerField<TConfig extends FieldConfig, TValue>(definition: FieldDefinition<TConfig, TValue>): Registry;
|
|
10
|
+
unregisterField(kind: string): Registry;
|
|
11
|
+
registerReport<TConfig extends ReportConfig>(definition: ReportDefinition<TConfig>): Registry;
|
|
12
|
+
unregisterReport(kind: string): Registry;
|
|
13
|
+
registerExplanation<TConfig extends ExplanationConfig>(definition: ExplanationDefinition<TConfig>): Registry;
|
|
14
|
+
unregisterExplanation(kind: string): Registry;
|
|
15
|
+
getField<TConfig extends FieldConfig = FieldConfig, TValue = unknown>(kind: string): FieldDefinition<TConfig, TValue> | undefined;
|
|
16
|
+
getReport<TConfig extends ReportConfig = ReportConfig>(kind: string): ReportDefinition<TConfig> | undefined;
|
|
17
|
+
getExplanation<TConfig extends ExplanationConfig = ExplanationConfig>(kind: string): ExplanationDefinition<TConfig> | undefined;
|
|
18
|
+
listFields(): FieldDefinition<FieldConfig, unknown>[];
|
|
19
|
+
listReports(): ReportDefinition<ReportConfig>[];
|
|
20
|
+
listExplanations(): ExplanationDefinition<ExplanationConfig>[];
|
|
21
|
+
}
|
|
22
|
+
export declare const createRegistry: () => Registry;
|
|
23
|
+
export declare const defineFieldDefinition: <TConfig extends FieldConfig, TValue>(definition: FieldDefinition<TConfig, TValue>) => FieldDefinition<TConfig, TValue>;
|
|
24
|
+
export declare const defineReportDefinition: <TConfig extends ReportConfig>(definition: ReportDefinition<TConfig>) => ReportDefinition<TConfig>;
|
|
25
|
+
export declare const defineExplanationDefinition: <TConfig extends ExplanationConfig>(definition: ExplanationDefinition<TConfig>) => ExplanationDefinition<TConfig>;
|
|
26
|
+
export { defineExplanationKind, defineFieldKind, defineReportKind };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { EngineStore } from '../state';
|
|
2
|
+
import { NormalizedReportConfig, PartialReportUpdatePolicy, ReportController, ReportDefinition, ReportStateSnapshot, SubmitResult } from '../types';
|
|
3
|
+
type CreateReportControllerOptions = {
|
|
4
|
+
config: NormalizedReportConfig;
|
|
5
|
+
definition: ReportDefinition;
|
|
6
|
+
store: EngineStore;
|
|
7
|
+
};
|
|
8
|
+
export declare const cloneReportStateSnapshot: (definition: ReportDefinition, config: NormalizedReportConfig, state: ReportStateSnapshot) => ReportStateSnapshot;
|
|
9
|
+
export type InternalReportController = ReportController & {
|
|
10
|
+
cloneState(state: ReportStateSnapshot): ReportStateSnapshot;
|
|
11
|
+
prepareState(result: SubmitResult): Promise<ReportStateSnapshot>;
|
|
12
|
+
commitState(state: ReportStateSnapshot): void;
|
|
13
|
+
update(result: SubmitResult): Promise<void>;
|
|
14
|
+
markLoading(): void;
|
|
15
|
+
reset(): void;
|
|
16
|
+
readonly partialUpdatePolicy: PartialReportUpdatePolicy;
|
|
17
|
+
};
|
|
18
|
+
export declare const createReportController: ({ config, definition, store, }: CreateReportControllerOptions) => InternalReportController;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './controller';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FormSchema, NormalizedExplanationConfig, NormalizedFieldConfig, NormalizedReportConfig, Registry } from '../types';
|
|
2
|
+
export interface NormalizedFormSchema {
|
|
3
|
+
fields: NormalizedFieldConfig[];
|
|
4
|
+
reports: NormalizedReportConfig[];
|
|
5
|
+
explanations: NormalizedExplanationConfig[];
|
|
6
|
+
}
|
|
7
|
+
export declare const normalizeSchema: (schema: FormSchema, registry: Registry) => NormalizedFormSchema;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { ExplanationStateSnapshot, FieldStateSnapshot, FormStatus, ReportStateSnapshot, SubmissionProgressState, SubmitResult } from '../types';
|
|
2
|
+
import { Store } from './store';
|
|
3
|
+
export interface InternalFieldState extends FieldStateSnapshot {
|
|
4
|
+
syncErrors: string[];
|
|
5
|
+
validationErrors: string[];
|
|
6
|
+
externalErrors: string[];
|
|
7
|
+
validationVersion: number;
|
|
8
|
+
}
|
|
9
|
+
export interface EngineState {
|
|
10
|
+
status: FormStatus;
|
|
11
|
+
submitCount: number;
|
|
12
|
+
lastResult: SubmitResult | null;
|
|
13
|
+
formErrors: string[];
|
|
14
|
+
fieldStates: Record<string, InternalFieldState>;
|
|
15
|
+
reportStates: Record<string, ReportStateSnapshot>;
|
|
16
|
+
explanationStates: Record<string, ExplanationStateSnapshot>;
|
|
17
|
+
submissionProgress: SubmissionProgressState | null;
|
|
18
|
+
lifecycleVersion: number;
|
|
19
|
+
activeValidationVersion: number;
|
|
20
|
+
activeSubmissionVersion: number | null;
|
|
21
|
+
}
|
|
22
|
+
export type EngineStore = Store<EngineState>;
|
|
23
|
+
export type EngineTransition = {
|
|
24
|
+
type: "bump-lifecycle";
|
|
25
|
+
} | {
|
|
26
|
+
type: "rest";
|
|
27
|
+
status: "idle" | "editing";
|
|
28
|
+
} | {
|
|
29
|
+
type: "editing";
|
|
30
|
+
clearFormErrors?: boolean;
|
|
31
|
+
bumpLifecycle?: boolean;
|
|
32
|
+
} | {
|
|
33
|
+
type: "start-validation";
|
|
34
|
+
validationVersion: number;
|
|
35
|
+
} | {
|
|
36
|
+
type: "validation-error";
|
|
37
|
+
message: string;
|
|
38
|
+
} | {
|
|
39
|
+
type: "start-submission";
|
|
40
|
+
submissionVersion: number;
|
|
41
|
+
} | {
|
|
42
|
+
type: "submission-stream-update";
|
|
43
|
+
progress: SubmissionProgressState;
|
|
44
|
+
} | {
|
|
45
|
+
type: "submission-success";
|
|
46
|
+
result: SubmitResult;
|
|
47
|
+
} | {
|
|
48
|
+
type: "submission-aborted";
|
|
49
|
+
message: string;
|
|
50
|
+
} | {
|
|
51
|
+
type: "submission-error";
|
|
52
|
+
message: string;
|
|
53
|
+
} | {
|
|
54
|
+
type: "clear-active-submission";
|
|
55
|
+
submissionVersion: number;
|
|
56
|
+
} | {
|
|
57
|
+
type: "reset";
|
|
58
|
+
};
|
|
59
|
+
export declare const createInitialEngineState: () => EngineState;
|
|
60
|
+
export declare const transitionEngineState: (current: EngineState, transition: EngineTransition) => EngineState;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { FieldStateSnapshot, FormState } from '../types';
|
|
2
|
+
import { EngineState, InternalFieldState } from './engine';
|
|
3
|
+
export declare const toFieldStateSnapshot: (state: InternalFieldState) => FieldStateSnapshot;
|
|
4
|
+
export declare const toFieldStateSnapshots: (fieldStates: Record<string, InternalFieldState>) => Record<string, FieldStateSnapshot>;
|
|
5
|
+
export declare const toFormState: (state: EngineState) => FormState;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface Store<T> {
|
|
2
|
+
getState(): T;
|
|
3
|
+
setState(nextState: T): void;
|
|
4
|
+
update(updater: (current: T) => T): void;
|
|
5
|
+
batch(callback: () => void): void;
|
|
6
|
+
subscribe(listener: (state: T) => void): () => void;
|
|
7
|
+
}
|
|
8
|
+
type StoreOptions<T> = {
|
|
9
|
+
listenerErrorPolicy?: "ignore" | "throw-aggregate";
|
|
10
|
+
onListenerError?: (error: unknown, state: T) => void;
|
|
11
|
+
};
|
|
12
|
+
export declare const createStore: <T>(initialState: T, options?: StoreOptions<T>) => Store<T>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SubmitOptions } from '../types';
|
|
2
|
+
export type SubmissionAbortManager = {
|
|
3
|
+
ensureIdle(): void;
|
|
4
|
+
begin(): number;
|
|
5
|
+
getCurrentRequestId(): number | null;
|
|
6
|
+
getAbortReason(requestId: number): string;
|
|
7
|
+
isAborted(requestId: number): boolean;
|
|
8
|
+
setActiveController(requestId: number, controller: AbortController | null): void;
|
|
9
|
+
createSignal(options?: SubmitOptions): AbortSignal;
|
|
10
|
+
attachExternalSignal(options: SubmitOptions | undefined, requestId: number): void;
|
|
11
|
+
abort(reason?: string): void;
|
|
12
|
+
clear(requestId: number): void;
|
|
13
|
+
reset(): void;
|
|
14
|
+
};
|
|
15
|
+
export declare const createSubmissionAbortManager: () => SubmissionAbortManager;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { EngineStore } from '../state';
|
|
2
|
+
import { SubmitResult } from '../types';
|
|
3
|
+
type SubmissionTransitionOptions = {
|
|
4
|
+
store: EngineStore;
|
|
5
|
+
resetReports: () => void;
|
|
6
|
+
resetExplanations: () => void;
|
|
7
|
+
syncAfterSubmissionTransition: () => void;
|
|
8
|
+
};
|
|
9
|
+
export declare const createSubmissionLifecycle: ({ store, resetReports, resetExplanations, syncAfterSubmissionTransition, }: SubmissionTransitionOptions) => {
|
|
10
|
+
start(submissionVersion: number): void;
|
|
11
|
+
succeed(result: SubmitResult): void;
|
|
12
|
+
abort(message: string): void;
|
|
13
|
+
fail(message: string): void;
|
|
14
|
+
clear(submissionVersion: number): void;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { ExecuteFormPipelineOptions, PipelineResult } from '../types';
|
|
2
|
+
export declare const executeFormPipeline: <TArtifacts extends Record<string, unknown> = Record<string, never>>({ form, submit, artifactAdapter, explanationMode, }: ExecuteFormPipelineOptions<TArtifacts>) => Promise<PipelineResult<TArtifacts>>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { NormalizedReportConfig, PartialReportUpdatePolicy, ReportStateSnapshot, SubmitResult } from '../types';
|
|
2
|
+
export type SubmissionReport = {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly config: NormalizedReportConfig;
|
|
5
|
+
readonly partialUpdatePolicy: PartialReportUpdatePolicy;
|
|
6
|
+
cloneState(state: ReportStateSnapshot): ReportStateSnapshot;
|
|
7
|
+
prepareState(result: SubmitResult): Promise<ReportStateSnapshot>;
|
|
8
|
+
commitState(state: ReportStateSnapshot): void;
|
|
9
|
+
};
|
|
10
|
+
export declare const prepareReportStates: (reports: readonly SubmissionReport[], baseResult: SubmitResult) => Promise<Map<string, ReportStateSnapshot>>;
|
|
11
|
+
export declare const commitReportStates: (reports: readonly SubmissionReport[], nextReportStates: Map<string, ReportStateSnapshot>) => void;
|
|
12
|
+
export declare const toSubmissionReportStates: (reports: readonly SubmissionReport[], nextReportStates: Map<string, ReportStateSnapshot>) => Record<string, ReportStateSnapshot>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { NormalizedFieldConfig, TransportResponse } from '../types';
|
|
2
|
+
type SubmissionField = {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly config: NormalizedFieldConfig;
|
|
5
|
+
readonly state: {
|
|
6
|
+
value: unknown;
|
|
7
|
+
visible: boolean;
|
|
8
|
+
disabled: boolean;
|
|
9
|
+
};
|
|
10
|
+
serialize(): unknown;
|
|
11
|
+
};
|
|
12
|
+
export type SubmissionValueRecords = {
|
|
13
|
+
values: Record<string, unknown>;
|
|
14
|
+
fieldValues: Record<string, unknown>;
|
|
15
|
+
serializedValues: Record<string, unknown>;
|
|
16
|
+
serializedFieldValues: Record<string, unknown>;
|
|
17
|
+
};
|
|
18
|
+
export declare const estimatePayloadBytes: (value: unknown) => number | undefined;
|
|
19
|
+
export declare const cloneSubmissionValueRecords: (records: SubmissionValueRecords) => SubmissionValueRecords;
|
|
20
|
+
export declare const shouldIncludeFieldInSubmission: (field: SubmissionField, resolveInactiveFieldPolicy: (field: SubmissionField) => "include" | "omit" | "reset-on-hide") => boolean;
|
|
21
|
+
export declare const buildSubmissionValueRecords: (fields: readonly SubmissionField[], resolveInactiveFieldPolicy: (field: SubmissionField) => "include" | "omit" | "reset-on-hide") => SubmissionValueRecords;
|
|
22
|
+
export declare const normalizeTransportResponse: (response: unknown) => TransportResponse;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { SubmitResult } from '../types';
|
|
2
|
+
import { SubmissionReport } from './reports';
|
|
3
|
+
export declare const createSubmissionResult: (reports: readonly SubmissionReport[], baseResult: Omit<SubmitResult, "reportStates">, nextReportStates: Map<string, SubmitResult["reportStates"][string]>) => SubmitResult;
|
|
4
|
+
export declare const cloneSubmissionResult: (reports: readonly SubmissionReport[], result: SubmitResult) => SubmitResult;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { NormalizedFormSchema } from '../schema';
|
|
2
|
+
import { EngineStore } from '../state';
|
|
3
|
+
import { FormHooks, FormValidationResult, InactiveFieldPolicy, SubmitOptions, SubmitResult, Transport } from '../types';
|
|
4
|
+
import { buildSubmissionValueRecords } from './request';
|
|
5
|
+
import { SubmissionReport } from './reports';
|
|
6
|
+
type SubmissionField = Parameters<typeof buildSubmissionValueRecords>[0][number];
|
|
7
|
+
type SyncDerivedFieldStateOptions = {
|
|
8
|
+
values?: Record<string, unknown>;
|
|
9
|
+
preserveValidationErrors?: boolean;
|
|
10
|
+
preserveExternalErrors?: boolean;
|
|
11
|
+
resetInactiveToInitial?: boolean;
|
|
12
|
+
inactiveFieldPolicy?: InactiveFieldPolicy;
|
|
13
|
+
};
|
|
14
|
+
type CreateFormSubmitterOptions = {
|
|
15
|
+
store: EngineStore;
|
|
16
|
+
transport: Transport;
|
|
17
|
+
hooks?: FormHooks;
|
|
18
|
+
hookFailurePolicy?: {
|
|
19
|
+
afterSubmit?: "fail-submit" | "preserve-success";
|
|
20
|
+
};
|
|
21
|
+
normalizedSchema: NormalizedFormSchema;
|
|
22
|
+
fields: readonly SubmissionField[];
|
|
23
|
+
reports: readonly SubmissionReport[];
|
|
24
|
+
validate: () => Promise<FormValidationResult>;
|
|
25
|
+
getSubmitCount: () => number;
|
|
26
|
+
markReportsLoading: () => void;
|
|
27
|
+
resetReports: () => void;
|
|
28
|
+
resetExplanations: () => void;
|
|
29
|
+
syncDerivedFieldState: (options?: SyncDerivedFieldStateOptions) => void;
|
|
30
|
+
shouldResetInactiveFields: () => boolean;
|
|
31
|
+
resolveInactiveFieldPolicy: (field: SubmissionField) => InactiveFieldPolicy;
|
|
32
|
+
inactiveFieldPolicy?: InactiveFieldPolicy;
|
|
33
|
+
};
|
|
34
|
+
export type FormSubmitter = {
|
|
35
|
+
submit(options?: SubmitOptions): Promise<SubmitResult>;
|
|
36
|
+
abort(reason?: string): void;
|
|
37
|
+
reset(): void;
|
|
38
|
+
};
|
|
39
|
+
export declare const createFormSubmitter: ({ store, transport, hooks, hookFailurePolicy, normalizedSchema, fields, reports, validate, getSubmitCount, markReportsLoading, resetReports, resetExplanations, syncDerivedFieldState, shouldResetInactiveFields, resolveInactiveFieldPolicy, inactiveFieldPolicy, }: CreateFormSubmitterOptions) => FormSubmitter;
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { ZodType } from 'zod';
|
|
2
|
+
import { PresentationContent, PresentationSummary } from '../declarative/presentation';
|
|
3
|
+
export type ExplanationStatus = "idle" | "loading" | "done" | "error";
|
|
4
|
+
export interface BaseExplanationConfig {
|
|
5
|
+
id?: string;
|
|
6
|
+
kind: string;
|
|
7
|
+
label?: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
export type ExplanationConfig = BaseExplanationConfig;
|
|
12
|
+
export type NormalizedExplanationConfig<TConfig extends ExplanationConfig = ExplanationConfig> = TConfig & {
|
|
13
|
+
id: string;
|
|
14
|
+
};
|
|
15
|
+
export interface ExplanationStateSnapshot {
|
|
16
|
+
status: ExplanationStatus;
|
|
17
|
+
result: unknown;
|
|
18
|
+
error: string | null;
|
|
19
|
+
}
|
|
20
|
+
export interface ExplanationDescriptor {
|
|
21
|
+
component: string;
|
|
22
|
+
props: Record<string, unknown>;
|
|
23
|
+
meta?: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
export interface ExplanationDescriptorContext {
|
|
26
|
+
explanationId: string;
|
|
27
|
+
state: ExplanationStateSnapshot;
|
|
28
|
+
}
|
|
29
|
+
export interface ExplanationFetchContext<TConfig extends ExplanationConfig = ExplanationConfig> {
|
|
30
|
+
config: NormalizedExplanationConfig<TConfig>;
|
|
31
|
+
explanationId: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Minimal transport interface used to fetch explanation data from an external
|
|
35
|
+
* service. Defined in engine types so ExplanationController can reference it
|
|
36
|
+
* without a circular dependency on the primitives layer.
|
|
37
|
+
*/
|
|
38
|
+
export interface ExplanationFetchRequest {
|
|
39
|
+
explanationId: string;
|
|
40
|
+
backend?: string;
|
|
41
|
+
values: Record<string, unknown>;
|
|
42
|
+
fieldValues: Record<string, unknown>;
|
|
43
|
+
serializedValues: Record<string, unknown>;
|
|
44
|
+
serializedFieldValues: Record<string, unknown>;
|
|
45
|
+
reports: Record<string, unknown>;
|
|
46
|
+
meta: Record<string, unknown>;
|
|
47
|
+
raw: unknown;
|
|
48
|
+
signal?: AbortSignal;
|
|
49
|
+
}
|
|
50
|
+
export interface ExplanationFetchTransport {
|
|
51
|
+
submit: (request: ExplanationFetchRequest) => Promise<unknown>;
|
|
52
|
+
}
|
|
53
|
+
export type ExplanationFetchFactory<TConfig extends ExplanationConfig = ExplanationConfig> = (context: ExplanationFetchContext<TConfig>) => ExplanationFetchTransport;
|
|
54
|
+
export interface ExplanationRenderSpecContext<TConfig extends ExplanationConfig = ExplanationConfig, TResult = unknown> {
|
|
55
|
+
config: NormalizedExplanationConfig<TConfig>;
|
|
56
|
+
explanationId: string;
|
|
57
|
+
state: ExplanationStateSnapshot;
|
|
58
|
+
result: TResult;
|
|
59
|
+
}
|
|
60
|
+
export interface ExplanationRenderSpec<TConfig extends ExplanationConfig = ExplanationConfig, TResult = unknown> {
|
|
61
|
+
summary?: (context: ExplanationRenderSpecContext<TConfig, TResult>) => PresentationSummary | undefined;
|
|
62
|
+
content: (context: ExplanationRenderSpecContext<TConfig, TResult>) => PresentationContent;
|
|
63
|
+
}
|
|
64
|
+
export interface DeclarativeExplanationKind<TConfig extends ExplanationConfig = ExplanationConfig, TResult = unknown> {
|
|
65
|
+
kind: string;
|
|
66
|
+
schema: ZodType<TConfig>;
|
|
67
|
+
fetch: ExplanationFetchFactory<TConfig>;
|
|
68
|
+
render: ExplanationRenderSpec<TConfig, TResult>;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Plugin definition for an explanation kind. Each explanation plugin must
|
|
72
|
+
* provide a Zod schema for its config, a transport factory, and a describe
|
|
73
|
+
* function that returns a descriptor for primitive rendering.
|
|
74
|
+
*/
|
|
75
|
+
export interface ExplanationDefinition<TConfig extends ExplanationConfig = ExplanationConfig> {
|
|
76
|
+
kind: string;
|
|
77
|
+
schema: ZodType<TConfig>;
|
|
78
|
+
/**
|
|
79
|
+
* Factory that returns the transport used to fetch this explanation's data.
|
|
80
|
+
* Called with the normalized explanation config when a fetch is triggered.
|
|
81
|
+
*/
|
|
82
|
+
transport: (config: TConfig) => ExplanationFetchTransport;
|
|
83
|
+
describe: (config: TConfig, context: ExplanationDescriptorContext) => ExplanationDescriptor | null;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Runtime controller for a single explanation instance. Tracks fetch
|
|
87
|
+
* lifecycle state and exposes a subscribe API consistent with
|
|
88
|
+
* FieldController / ReportController.
|
|
89
|
+
*/
|
|
90
|
+
export interface ExplanationController {
|
|
91
|
+
readonly id: string;
|
|
92
|
+
readonly kind: string;
|
|
93
|
+
readonly config: NormalizedExplanationConfig;
|
|
94
|
+
readonly state: ExplanationStateSnapshot;
|
|
95
|
+
readonly descriptor: ExplanationDescriptor | null;
|
|
96
|
+
/**
|
|
97
|
+
* Trigger an explanation fetch using the definition's transport. The
|
|
98
|
+
* request must contain the full submit result context; the controller
|
|
99
|
+
* appends an AbortSignal internally and combines it with any caller-provided
|
|
100
|
+
* signal.
|
|
101
|
+
* Idempotent when status is not "idle" — call reset() first to refetch.
|
|
102
|
+
*/
|
|
103
|
+
fetch(request: ExplanationFetchRequest): Promise<void>;
|
|
104
|
+
/** Abort any in-flight fetch and reset state to "idle". */
|
|
105
|
+
abort(): void;
|
|
106
|
+
/** Reset state to "idle" without aborting (use before re-submission). */
|
|
107
|
+
reset(): void;
|
|
108
|
+
subscribe(listener: (state: ExplanationStateSnapshot) => void): () => void;
|
|
109
|
+
}
|