@getodk/xforms-engine 0.15.0 → 0.16.1

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 (111) hide show
  1. package/dist/client/AttributeNode.d.ts +4 -6
  2. package/dist/client/BaseNode.d.ts +5 -0
  3. package/dist/client/form/FormInstanceConfig.d.ts +15 -0
  4. package/dist/index.js +654 -429
  5. package/dist/index.js.map +1 -1
  6. package/dist/instance/Attribute.d.ts +13 -19
  7. package/dist/instance/Group.d.ts +2 -1
  8. package/dist/instance/InputControl.d.ts +5 -0
  9. package/dist/instance/ModelValue.d.ts +4 -0
  10. package/dist/instance/Note.d.ts +4 -0
  11. package/dist/instance/PrimaryInstance.d.ts +3 -2
  12. package/dist/instance/RangeControl.d.ts +4 -0
  13. package/dist/instance/RankControl.d.ts +5 -1
  14. package/dist/instance/Root.d.ts +2 -1
  15. package/dist/instance/SelectControl.d.ts +5 -1
  16. package/dist/instance/TriggerControl.d.ts +4 -0
  17. package/dist/instance/UploadControl.d.ts +3 -2
  18. package/dist/instance/abstract/DescendantNode.d.ts +5 -4
  19. package/dist/instance/abstract/InstanceNode.d.ts +6 -5
  20. package/dist/instance/abstract/ValueNode.d.ts +2 -1
  21. package/dist/instance/attachments/buildAttributes.d.ts +6 -2
  22. package/dist/instance/hierarchy.d.ts +2 -2
  23. package/dist/instance/internal-api/AttributeContext.d.ts +6 -0
  24. package/dist/instance/internal-api/InstanceConfig.d.ts +2 -0
  25. package/dist/instance/internal-api/InstanceValueContext.d.ts +6 -0
  26. package/dist/instance/internal-api/serialization/ClientReactiveSerializableAttributeNode.d.ts +0 -1
  27. package/dist/instance/internal-api/serialization/ClientReactiveSerializableValueNode.d.ts +4 -0
  28. package/dist/integration/xpath/adapter/XFormsXPathNode.d.ts +1 -1
  29. package/dist/integration/xpath/adapter/kind.d.ts +5 -3
  30. package/dist/integration/xpath/adapter/traversal.d.ts +3 -3
  31. package/dist/integration/xpath/static-dom/StaticAttribute.d.ts +1 -0
  32. package/dist/lib/codecs/items/SingleValueItemCodec.d.ts +1 -1
  33. package/dist/lib/reactivity/createInstanceValueState.d.ts +4 -1
  34. package/dist/lib/reactivity/node-state/createSharedNodeState.d.ts +2 -2
  35. package/dist/lib/xml-serialization.d.ts +1 -1
  36. package/dist/parse/XFormDOM.d.ts +3 -0
  37. package/dist/parse/expression/ActionComputationExpression.d.ts +4 -0
  38. package/dist/parse/model/ActionDefinition.d.ts +15 -0
  39. package/dist/parse/model/AttributeDefinition.d.ts +5 -1
  40. package/dist/parse/model/BindPreloadDefinition.d.ts +6 -10
  41. package/dist/parse/model/Event.d.ts +8 -0
  42. package/dist/parse/model/LeafNodeDefinition.d.ts +5 -2
  43. package/dist/parse/model/ModelActionMap.d.ts +9 -0
  44. package/dist/parse/model/ModelDefinition.d.ts +8 -1
  45. package/dist/parse/model/NoteNodeDefinition.d.ts +3 -2
  46. package/dist/parse/model/RangeNodeDefinition.d.ts +2 -1
  47. package/dist/parse/model/RootDefinition.d.ts +1 -0
  48. package/dist/solid.js +654 -429
  49. package/dist/solid.js.map +1 -1
  50. package/package.json +21 -17
  51. package/src/client/AttributeNode.ts +4 -6
  52. package/src/client/BaseNode.ts +6 -0
  53. package/src/client/form/FormInstanceConfig.ts +17 -0
  54. package/src/client/validation.ts +1 -1
  55. package/src/entrypoints/FormInstance.ts +1 -0
  56. package/src/instance/Attribute.ts +43 -59
  57. package/src/instance/Group.ts +5 -6
  58. package/src/instance/InputControl.ts +16 -1
  59. package/src/instance/ModelValue.ts +16 -1
  60. package/src/instance/Note.ts +15 -1
  61. package/src/instance/PrimaryInstance.ts +8 -10
  62. package/src/instance/RangeControl.ts +15 -1
  63. package/src/instance/RankControl.ts +17 -2
  64. package/src/instance/Root.ts +5 -6
  65. package/src/instance/SelectControl.ts +16 -2
  66. package/src/instance/TriggerControl.ts +15 -1
  67. package/src/instance/UploadControl.ts +9 -8
  68. package/src/instance/abstract/DescendantNode.ts +4 -8
  69. package/src/instance/abstract/InstanceNode.ts +7 -5
  70. package/src/instance/abstract/ValueNode.ts +2 -1
  71. package/src/instance/attachments/buildAttributes.ts +15 -4
  72. package/src/instance/children/childrenInitOptions.ts +2 -1
  73. package/src/instance/children/normalizeChildInitOptions.ts +1 -1
  74. package/src/instance/hierarchy.ts +2 -2
  75. package/src/instance/internal-api/AttributeContext.ts +6 -0
  76. package/src/instance/internal-api/InstanceConfig.ts +6 -1
  77. package/src/instance/internal-api/InstanceValueContext.ts +6 -0
  78. package/src/instance/internal-api/serialization/ClientReactiveSerializableAttributeNode.ts +0 -1
  79. package/src/instance/internal-api/serialization/ClientReactiveSerializableValueNode.ts +4 -0
  80. package/src/instance/repeat/RepeatInstance.ts +3 -4
  81. package/src/integration/xpath/adapter/XFormsXPathNode.ts +1 -0
  82. package/src/integration/xpath/adapter/engineDOMAdapter.ts +2 -2
  83. package/src/integration/xpath/adapter/kind.ts +6 -1
  84. package/src/integration/xpath/adapter/names.ts +1 -0
  85. package/src/integration/xpath/adapter/traversal.ts +5 -6
  86. package/src/integration/xpath/static-dom/StaticAttribute.ts +1 -0
  87. package/src/lib/client-reactivity/instance-state/createValueNodeInstanceState.ts +2 -1
  88. package/src/lib/client-reactivity/instance-state/prepareInstancePayload.ts +1 -0
  89. package/src/lib/codecs/NoteCodec.ts +1 -1
  90. package/src/lib/codecs/items/SingleValueItemCodec.ts +1 -3
  91. package/src/lib/reactivity/createInstanceValueState.ts +177 -52
  92. package/src/lib/reactivity/node-state/createSharedNodeState.ts +2 -2
  93. package/src/lib/xml-serialization.ts +9 -1
  94. package/src/parse/XFormDOM.ts +9 -0
  95. package/src/parse/body/GroupElementDefinition.ts +1 -1
  96. package/src/parse/body/control/InputControlDefinition.ts +1 -1
  97. package/src/parse/expression/ActionComputationExpression.ts +12 -0
  98. package/src/parse/model/ActionDefinition.ts +70 -0
  99. package/src/parse/model/AttributeDefinition.ts +10 -2
  100. package/src/parse/model/AttributeDefinitionMap.ts +1 -1
  101. package/src/parse/model/BindDefinition.ts +1 -6
  102. package/src/parse/model/BindPreloadDefinition.ts +44 -12
  103. package/src/parse/model/Event.ts +9 -0
  104. package/src/parse/model/LeafNodeDefinition.ts +5 -1
  105. package/src/parse/model/ModelActionMap.ts +37 -0
  106. package/src/parse/model/ModelDefinition.ts +18 -3
  107. package/src/parse/model/NoteNodeDefinition.ts +5 -2
  108. package/src/parse/model/RangeNodeDefinition.ts +5 -2
  109. package/src/parse/model/RootDefinition.ts +22 -4
  110. package/dist/lib/reactivity/createAttributeValueState.d.ts +0 -15
  111. package/src/lib/reactivity/createAttributeValueState.ts +0 -189
@@ -64,7 +64,7 @@ export type XFormsXPathPrimaryInstanceNodeKind = XPathDocumentKind | XFormsXPath
64
64
  export interface XFormsXPathPrimaryInstanceNode extends XFormsXPathNode {
65
65
  readonly [XPathNodeKindKey]: XFormsXPathPrimaryInstanceNodeKind;
66
66
  }
67
- export type XFormsXPathPrimaryInstanceDescendantNodeKind = XFormsXPathNodeRangeKind | XPathElementKind | XPathTextKind;
67
+ export type XFormsXPathPrimaryInstanceDescendantNodeKind = XFormsXPathNodeRangeKind | XPathAttributeKind | XPathElementKind | XPathTextKind;
68
68
  export interface XFormsXPathPrimaryInstanceDescendantNode extends XFormsXPathNode {
69
69
  readonly [XPathNodeKindKey]: XFormsXPathPrimaryInstanceDescendantNodeKind;
70
70
  }
@@ -1,19 +1,21 @@
1
1
  import { XPathNodeKind } from '@getodk/xpath';
2
+ import { Attribute } from '../../../instance/Attribute.ts';
2
3
  import { AnyChildNode, AnyNode, AnyParentNode } from '../../../instance/hierarchy.ts';
3
4
  import { PrimaryInstance } from '../../../instance/PrimaryInstance.ts';
4
5
  import { StaticAttribute } from '../static-dom/StaticAttribute.ts';
5
6
  import { StaticDocument } from '../static-dom/StaticDocument.ts';
6
7
  import { StaticElement } from '../static-dom/StaticElement.ts';
7
8
  import { StaticText } from '../static-dom/StaticText.ts';
8
- import { XFormsXPathComment, XFormsXPathDocument, XFormsXPathElement, XFormsXPathPrimaryInstanceNode } from './XFormsXPathNode.ts';
9
+ import { XFormsXPathAttribute, XFormsXPathComment, XFormsXPathDocument, XFormsXPathElement, XFormsXPathPrimaryInstanceNode } from './XFormsXPathNode.ts';
9
10
  export type PrimaryInstanceXPathNode = Extract<AnyNode, XFormsXPathPrimaryInstanceNode>;
10
11
  export type PrimaryInstanceXPathElement = Extract<AnyChildNode, XFormsXPathElement>;
12
+ export type PrimaryInstanceXPathAttribute = Extract<Attribute, XFormsXPathAttribute>;
11
13
  export type PrimaryInstanceXPathComment = Extract<AnyChildNode, XFormsXPathComment>;
12
- export type PrimaryInstanceXPathChildNode = PrimaryInstanceXPathElement | PrimaryInstanceXPathComment;
14
+ export type PrimaryInstanceXPathChildNode = PrimaryInstanceXPathElement | PrimaryInstanceXPathAttribute | PrimaryInstanceXPathComment;
13
15
  export type EngineXPathDocument = PrimaryInstance | StaticDocument;
14
16
  export type EngineXPathElement = PrimaryInstanceXPathElement | StaticElement;
15
17
  export type EngineXPathComment = PrimaryInstanceXPathComment;
16
- export type EngineXPathAttribute = StaticAttribute;
18
+ export type EngineXPathAttribute = PrimaryInstanceXPathAttribute | StaticAttribute;
17
19
  export type EngineXPathText = StaticText;
18
20
  export type XFormsXPathChildNode = EngineXPathElement | EngineXPathText | EngineXPathComment;
19
21
  type XPathAdapterParentNode = XFormsXPathDocument | XFormsXPathElement;
@@ -1,6 +1,6 @@
1
- import { EngineXPathAttribute, EngineXPathDocument, EngineXPathElement, EngineXPathNode, EngineXPathParentNode, XFormsXPathChildNode } from './kind.ts';
1
+ import { EngineXPathAttribute, EngineXPathDocument, EngineXPathElement, EngineXPathNode, XFormsXPathChildNode } from './kind.ts';
2
2
  export declare const getContainingEngineXPathDocument: (node: EngineXPathNode) => EngineXPathDocument;
3
- export declare const getEngineXPathAttributes: (node: EngineXPathNode) => readonly EngineXPathAttribute[];
3
+ export declare const getAttributes: (node: EngineXPathNode) => readonly EngineXPathAttribute[];
4
4
  /**
5
5
  * @todo We've now laid most of the groundwork necessary to implement this
6
6
  * properly. At time of writing it has still been deferred because:
@@ -15,7 +15,7 @@ export declare const getEngineXPathAttributes: (node: EngineXPathNode) => readon
15
15
  * are somehow wrong (or become wrong).
16
16
  */
17
17
  export declare const getNamespaceDeclarations: () => readonly [];
18
- export declare const getParentNode: (node: EngineXPathNode) => EngineXPathParentNode | null;
18
+ export declare const getParentNode: (node: EngineXPathNode) => EngineXPathNode | null;
19
19
  export declare const getChildNodes: (node: EngineXPathNode) => readonly XFormsXPathChildNode[];
20
20
  export declare const getChildElements: (node: EngineXPathNode) => readonly EngineXPathElement[];
21
21
  export declare const getPreviousSiblingNode: (node: EngineXPathNode) => XFormsXPathChildNode | null;
@@ -19,6 +19,7 @@ export declare class StaticAttribute extends StaticNode<'attribute'> implements
19
19
  readonly nodeset: string;
20
20
  readonly attributes: readonly [];
21
21
  readonly children: null;
22
+ readonly childElements: never[];
22
23
  readonly value: string;
23
24
  constructor(parent: StaticElement, options: StaticAttributeOptions);
24
25
  getXPathValue(): string;
@@ -4,7 +4,7 @@ export type SingleValueSelectRuntimeValues = readonly [] | readonly [string];
4
4
  /**
5
5
  * @see {@link encodeValueFactory}
6
6
  */
7
- type SingleValueSelectCodecValues = SingleValueSelectRuntimeValues | readonly string[];
7
+ type SingleValueSelectCodecValues = readonly string[];
8
8
  /**
9
9
  * Value codec implementation for `<select1>` controls.
10
10
  *
@@ -1,5 +1,7 @@
1
+ import { AttributeContext } from '../../instance/internal-api/AttributeContext.ts';
1
2
  import { InstanceValueContext } from '../../instance/internal-api/InstanceValueContext.ts';
2
3
  import { SimpleAtomicState } from './types.ts';
4
+ type ValueContext = AttributeContext | InstanceValueContext;
3
5
  export type InstanceValueState = SimpleAtomicState<string>;
4
6
  /**
5
7
  * Provides a consistent interface for value nodes of any type which:
@@ -12,4 +14,5 @@ export type InstanceValueState = SimpleAtomicState<string>;
12
14
  * nodes defined with one
13
15
  * - prevents downstream writes to nodes in a readonly state
14
16
  */
15
- export declare const createInstanceValueState: (context: InstanceValueContext) => InstanceValueState;
17
+ export declare const createInstanceValueState: (context: ValueContext) => InstanceValueState;
18
+ export {};
@@ -5,8 +5,8 @@ import { CurrentState } from './createCurrentState.ts';
5
5
  import { EngineState } from './createEngineState.ts';
6
6
  import { MutablePropertySpec, SpecifiedState, StateSpec } from './createSpecifiedState.ts';
7
7
  type MutableKeyOf<Spec extends StateSpec> = {
8
- [K in string & keyof Spec]: Spec[K] extends MutablePropertySpec<any> ? K : never;
9
- }[string & keyof Spec];
8
+ [K in Extract<keyof Spec, string>]: Spec[K] extends MutablePropertySpec<any> ? K : never;
9
+ }[Extract<keyof Spec, string>];
10
10
  type SetEnginePropertyState<Spec extends StateSpec> = <K extends MutableKeyOf<Spec>>(key: K, newValue: SpecifiedState<Spec>[K]) => SpecifiedState<Spec>[K];
11
11
  export interface SharedNodeState<Spec extends StateSpec> {
12
12
  readonly spec: Spec;
@@ -42,5 +42,5 @@ export type EscapedXMLText = string & {
42
42
  export declare const escapeXMLText: <Text extends string>(text: Exclude<Text, EscapedXMLText>, attr?: boolean) => EscapedXMLText;
43
43
  export declare const serializeAttributeXML: (qualifiedName: QualifiedName, xmlValue: EscapedXMLText) => string;
44
44
  export declare const serializeParentElementXML: (qualifiedName: QualifiedName, children: readonly GeneralChildNode[], attributes: readonly Attribute[], namespaceDeclarations?: NamespaceDeclarationMap) => string;
45
- export declare const serializeLeafElementXML: (qualifiedName: QualifiedName, xmlValue: EscapedXMLText, namespaceDeclarations?: NamespaceDeclarationMap) => string;
45
+ export declare const serializeLeafElementXML: (qualifiedName: QualifiedName, xmlValue: EscapedXMLText, attributes: readonly Attribute[], namespaceDeclarations?: NamespaceDeclarationMap) => string;
46
46
  export {};
@@ -1,6 +1,8 @@
1
1
  import { KnownAttributeLocalNamedElement } from '../../../common/types/dom.ts';
2
2
  interface DOMBindElement extends KnownAttributeLocalNamedElement<'bind', 'nodeset'> {
3
3
  }
4
+ interface DOMSetValueElement extends KnownAttributeLocalNamedElement<'setvalue', 'event'> {
5
+ }
4
6
  export interface DOMItextTranslationElement extends KnownAttributeLocalNamedElement<'translation', 'lang'> {
5
7
  }
6
8
  export interface DOMSecondaryInstanceElement extends KnownAttributeLocalNamedElement<'instance', 'id'> {
@@ -23,6 +25,7 @@ export declare class XFormDOM {
23
25
  readonly title: Element;
24
26
  readonly model: Element;
25
27
  readonly binds: readonly DOMBindElement[];
28
+ readonly setValues: readonly DOMSetValueElement[];
26
29
  readonly primaryInstance: Element;
27
30
  readonly primaryInstanceRoot: Element;
28
31
  readonly itextTranslationElements: readonly DOMItextTranslationElement[];
@@ -0,0 +1,4 @@
1
+ import { DependentExpression, DependentExpressionResultType } from './abstract/DependentExpression.ts';
2
+ export declare class ActionComputationExpression<Type extends DependentExpressionResultType> extends DependentExpression<Type> {
3
+ constructor(resultType: Type, expression: string);
4
+ }
@@ -0,0 +1,15 @@
1
+ import { ActionComputationExpression } from '../expression/ActionComputationExpression.ts';
2
+ import { XFormEvent } from './Event.ts';
3
+ import { ModelDefinition } from './ModelDefinition.ts';
4
+ export declare class ActionDefinition {
5
+ readonly element: Element;
6
+ static getRef(model: ModelDefinition, setValueElement: Element): string | null;
7
+ static getValue(element: Element): string;
8
+ static isKnownEvent: (event: XFormEvent) => event is XFormEvent;
9
+ static getEvents(element: Element): XFormEvent[];
10
+ readonly ref: string;
11
+ readonly events: XFormEvent[];
12
+ readonly computation: ActionComputationExpression<'string'>;
13
+ readonly source: string | undefined;
14
+ constructor(model: ModelDefinition, element: Element, source?: string);
15
+ }
@@ -2,13 +2,16 @@ import { StaticAttribute } from '../../integration/xpath/static-dom/StaticAttrib
2
2
  import { NamespaceDeclarationMap, NamedNodeDefinition } from '../../lib/names/NamespaceDeclarationMap.ts';
3
3
  import { QualifiedName } from '../../lib/names/QualifiedName.ts';
4
4
  import { BindDefinition } from './BindDefinition.ts';
5
+ import { ModelDefinition } from './ModelDefinition.ts';
5
6
  import { NodeDefinition } from './NodeDefinition.ts';
6
7
  import { RootDefinition } from './RootDefinition.ts';
7
8
  export declare class AttributeDefinition extends NodeDefinition<'attribute'> implements NamedNodeDefinition {
9
+ readonly model: ModelDefinition;
8
10
  readonly template: StaticAttribute;
9
11
  private readonly serializedXML;
10
12
  readonly value: string;
11
13
  readonly type = "attribute";
14
+ readonly valueType = "string";
12
15
  readonly namespaceDeclarations: NamespaceDeclarationMap;
13
16
  readonly bodyElement: null;
14
17
  readonly root: RootDefinition;
@@ -17,6 +20,7 @@ export declare class AttributeDefinition extends NodeDefinition<'attribute'> imp
17
20
  readonly children: null;
18
21
  readonly attributes: null;
19
22
  readonly qualifiedName: QualifiedName;
20
- constructor(root: RootDefinition, bind: BindDefinition, template: StaticAttribute);
23
+ constructor(model: ModelDefinition, bind: BindDefinition, template: StaticAttribute);
21
24
  serializeAttributeXML(): string;
25
+ toJSON(): Omit<this, "parent" | "toJSON" | "bind" | "root" | "bodyElement" | "serializeAttributeXML">;
22
26
  }
@@ -1,6 +1,9 @@
1
1
  import { PartiallyKnownString } from '../../../../common/types/string/PartiallyKnownString.ts';
2
+ import { AttributeContext } from '../../instance/internal-api/AttributeContext.ts';
3
+ import { InstanceValueContext } from '../../instance/internal-api/InstanceValueContext.ts';
2
4
  import { BindElement } from './BindElement.ts';
3
- type PartiallyKnownPreloadParameter<Known extends string> = PartiallyKnownString<NonNullable<Known>> | Extract<Known, null>;
5
+ import { XFormEvent } from './Event.ts';
6
+ type PartiallyKnownPreloadParameter<Known extends string> = PartiallyKnownString<NonNullable<Known>>;
4
7
  interface PreloadParametersByType {
5
8
  readonly uid: string | null;
6
9
  readonly date: PartiallyKnownPreloadParameter<'today'>;
@@ -22,20 +25,13 @@ interface PreloadInput<Type extends PreloadType> {
22
25
  *
23
26
  * - {@link type}, a `jr:preload`
24
27
  * - {@link parameter}, an associated `jr:preloadParams` value
25
- *
26
- * @todo It would probably make sense for the _definition_ to also convey:
27
- *
28
- * 1. Which {@link https://getodk.github.io/xforms-spec/#events | event} the
29
- * preload is semantically associated with (noting that the spec may be a tad
30
- * overzealous about this association).
31
- *
32
- * 2. The constant XPath expression (or other computation?) expressed by the
33
- * combined {@link type} and {@link parameter}.
34
28
  */
35
29
  export declare class BindPreloadDefinition<Type extends PreloadType> implements PreloadInput<Type> {
36
30
  static from(bindElement: BindElement): AnyBindPreloadDefinition | null;
37
31
  readonly type: Type;
38
32
  readonly parameter: PreloadParameter<Type>;
33
+ readonly event: XFormEvent;
34
+ getValue(context: AttributeContext | InstanceValueContext): string | undefined;
39
35
  private constructor();
40
36
  }
41
37
  export type AnyBindPreloadDefinition = BindPreloadDefinition<'uid'> | BindPreloadDefinition<'timestamp'> | BindPreloadDefinition<'property'> | BindPreloadDefinition<string>;
@@ -0,0 +1,8 @@
1
+ export declare const XFORM_EVENT: {
2
+ readonly odkInstanceLoad: "odk-instance-load";
3
+ readonly odkInstanceFirstLoad: "odk-instance-first-load";
4
+ readonly odkNewRepeat: "odk-new-repeat";
5
+ readonly xformsRevalidate: "xforms-revalidate";
6
+ readonly xformsValueChanged: "xforms-value-changed";
7
+ };
8
+ export type XFormEvent = (typeof XFORM_EVENT)[keyof typeof XFORM_EVENT];
@@ -3,17 +3,20 @@ import { StaticLeafElement } from '../../integration/xpath/static-dom/StaticElem
3
3
  import { NamespaceDeclarationMap, NamedSubtreeDefinition } from '../../lib/names/NamespaceDeclarationMap.ts';
4
4
  import { QualifiedName } from '../../lib/names/QualifiedName.ts';
5
5
  import { AnyBodyElementDefinition, ControlElementDefinition } from '../body/BodyDefinition.ts';
6
+ import { AttributeDefinitionMap } from './AttributeDefinitionMap.ts';
6
7
  import { BindDefinition } from './BindDefinition.ts';
7
8
  import { DescendentNodeDefinition } from './DescendentNodeDefinition.ts';
9
+ import { ModelDefinition } from './ModelDefinition.ts';
8
10
  import { ParentNodeDefinition } from './NodeDefinition.ts';
9
11
  export declare class LeafNodeDefinition<V extends ValueType = ValueType> extends DescendentNodeDefinition<'leaf-node', ControlElementDefinition | null> implements NamedSubtreeDefinition {
12
+ readonly model: ModelDefinition;
10
13
  readonly template: StaticLeafElement;
11
14
  readonly type = "leaf-node";
12
15
  readonly valueType: V;
13
16
  readonly namespaceDeclarations: NamespaceDeclarationMap;
14
17
  readonly qualifiedName: QualifiedName;
15
18
  readonly children: null;
16
- readonly attributes: null;
17
- constructor(parent: ParentNodeDefinition, bind: BindDefinition, bodyElement: AnyBodyElementDefinition | null, template: StaticLeafElement);
19
+ readonly attributes: AttributeDefinitionMap;
20
+ constructor(model: ModelDefinition, parent: ParentNodeDefinition, bind: BindDefinition, bodyElement: AnyBodyElementDefinition | null, template: StaticLeafElement);
18
21
  toJSON(): Omit<this, "parent" | "toJSON" | "bind" | "root" | "bodyElement">;
19
22
  }
@@ -0,0 +1,9 @@
1
+ import { ActionDefinition } from './ActionDefinition.ts';
2
+ import { ModelDefinition } from './ModelDefinition.ts';
3
+ export declare class ModelActionMap extends Map<string, ActionDefinition> {
4
+ static fromModel(model: ModelDefinition): ModelActionMap;
5
+ static getKey(ref: string): string;
6
+ protected constructor(model: ModelDefinition);
7
+ get(ref: string): ActionDefinition | undefined;
8
+ add(action: ActionDefinition): void;
9
+ }
@@ -4,21 +4,28 @@ import { TextChunkExpression } from '../expression/TextChunkExpression.ts';
4
4
  import { XFormDefinition } from '../XFormDefinition.ts';
5
5
  import { ChunkExpressionsByItextId } from './generateItextChunks.ts';
6
6
  import { ItextTranslationsDefinition } from './ItextTranslationsDefinition.ts';
7
+ import { ModelActionMap } from './ModelActionMap.ts';
7
8
  import { ModelBindMap } from './ModelBindMap.ts';
8
9
  import { AnyNodeDefinition } from './NodeDefinition.ts';
9
10
  import { NodeDefinitionMap } from './nodeDefinitionMap.ts';
10
11
  import { RootDefinition } from './RootDefinition.ts';
12
+ type XformsRevalidateListener = () => void;
11
13
  export declare class ModelDefinition {
12
14
  readonly form: XFormDefinition;
13
15
  readonly binds: ModelBindMap;
16
+ readonly actions: ModelActionMap;
14
17
  readonly root: RootDefinition;
15
18
  readonly nodes: NodeDefinitionMap;
16
19
  readonly instance: StaticDocument;
17
20
  readonly itextTranslations: ItextTranslationsDefinition;
18
21
  readonly itextChunks: Map<string, ChunkExpressionsByItextId>;
22
+ readonly xformsRevalidateListeners: Map<string, XformsRevalidateListener>;
19
23
  constructor(form: XFormDefinition);
20
24
  getNodeDefinition(nodeset: string): AnyNodeDefinition;
21
25
  getRootDefinition(instance: StaticDocument): RootDefinition;
22
- toJSON(): Omit<this, "form" | "toJSON" | "getNodeDefinition" | "getRootDefinition" | "getTranslationChunks">;
26
+ registerXformsRevalidateListener(ref: string, listener: XformsRevalidateListener): void;
27
+ triggerXformsRevalidateListeners(): void;
23
28
  getTranslationChunks(itextId: string, activeLanguage: ActiveLanguage): ReadonlyArray<TextChunkExpression<'string'>>;
29
+ toJSON(): Omit<this, "form" | "toJSON" | "getNodeDefinition" | "getRootDefinition" | "registerXformsRevalidateListener" | "triggerXformsRevalidateListeners" | "getTranslationChunks">;
24
30
  }
31
+ export {};
@@ -8,6 +8,7 @@ import { HintDefinition } from '../text/HintDefinition.ts';
8
8
  import { LabelDefinition } from '../text/LabelDefinition.ts';
9
9
  import { BindDefinition } from './BindDefinition.ts';
10
10
  import { LeafNodeDefinition } from './LeafNodeDefinition.ts';
11
+ import { ModelDefinition } from './ModelDefinition.ts';
11
12
  import { ParentNodeDefinition } from './NodeDefinition.ts';
12
13
  export type NoteReadonlyDefinition = BindComputationExpression<'readonly'> & ConstantTruthyDependentExpression;
13
14
  export interface NoteBindDefinition<V extends ValueType> extends BindDefinition<V> {
@@ -27,6 +28,6 @@ export declare class NoteNodeDefinition<V extends ValueType = ValueType> extends
27
28
  readonly bind: NoteBindDefinition<V>;
28
29
  readonly bodyElement: InputControlDefinition;
29
30
  readonly noteTextDefinition: NoteTextDefinition;
30
- static from<V extends ValueType>(parent: ParentNodeDefinition, bind: BindDefinition<V>, bodyElement: AnyBodyElementDefinition | null, node: StaticLeafElement): NoteNodeDefinition<V> | null;
31
- constructor(parent: ParentNodeDefinition, bind: NoteBindDefinition<V>, bodyElement: InputControlDefinition, noteTextDefinition: NoteTextDefinition, template: StaticLeafElement);
31
+ static from<V extends ValueType>(model: ModelDefinition, parent: ParentNodeDefinition, bind: BindDefinition<V>, bodyElement: AnyBodyElementDefinition | null, node: StaticLeafElement): NoteNodeDefinition<V> | null;
32
+ constructor(model: ModelDefinition, parent: ParentNodeDefinition, bind: NoteBindDefinition<V>, bodyElement: InputControlDefinition, noteTextDefinition: NoteTextDefinition, template: StaticLeafElement);
32
33
  }
@@ -4,6 +4,7 @@ import { RuntimeValue } from '../../lib/codecs/getSharedValueCodec.ts';
4
4
  import { RangeControlBoundsDefinition, RangeControlDefinition } from '../body/control/RangeControlDefinition.ts';
5
5
  import { BindDefinition } from './BindDefinition.ts';
6
6
  import { LeafNodeDefinition } from './LeafNodeDefinition.ts';
7
+ import { ModelDefinition } from './ModelDefinition.ts';
7
8
  import { ParentNodeDefinition } from './NodeDefinition.ts';
8
9
  declare const RANGE_VALUE_TYPES: readonly ["decimal", "int"];
9
10
  export type RangeValueType = (typeof RANGE_VALUE_TYPES)[number];
@@ -34,7 +35,7 @@ declare class RangeNodeBoundsDefinition<V extends RangeValueType = RangeValueTyp
34
35
  export declare class RangeNodeDefinition<V extends RangeValueType = RangeValueType> extends LeafNodeDefinition<V> implements RangeLeafNodeDefinition<V> {
35
36
  readonly bind: BindDefinition<V>;
36
37
  readonly bodyElement: RangeControlDefinition;
37
- static from<V extends ValueType>(parent: ParentNodeDefinition, bind: BindDefinition<V>, bodyElement: RangeControlDefinition, node: StaticLeafElement): RangeNodeDefinition<Extract<V, RangeValueType>>;
38
+ static from<V extends ValueType>(model: ModelDefinition, parent: ParentNodeDefinition, bind: BindDefinition<V>, bodyElement: RangeControlDefinition, node: StaticLeafElement): RangeNodeDefinition<Extract<V, RangeValueType>>;
38
39
  readonly bounds: RangeNodeBoundsDefinition<V>;
39
40
  private constructor();
40
41
  }
@@ -23,6 +23,7 @@ export declare class RootDefinition extends NodeDefinition<'root'> {
23
23
  readonly children: readonly ChildNodeDefinition[];
24
24
  readonly isTranslated = false;
25
25
  constructor(form: XFormDefinition, model: ModelDefinition, submission: SubmissionDefinition, classes: BodyClassList);
26
+ private mapActions;
26
27
  buildSubtree(parent: ParentNodeDefinition, node: StaticElement): readonly ChildNodeDefinition[];
27
28
  toJSON(): Omit<this, "form" | "toJSON" | "bind" | "model" | "root" | "bodyElement" | "buildSubtree">;
28
29
  }