@getodk/xforms-engine 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/dist/client/BaseNode.d.ts +14 -3
  2. package/dist/client/BaseValueNode.d.ts +32 -0
  3. package/dist/client/EngineConfig.d.ts +49 -48
  4. package/dist/client/InputNode.d.ts +53 -0
  5. package/dist/client/ModelValueNode.d.ts +12 -7
  6. package/dist/client/NoteNode.d.ts +2 -2
  7. package/dist/client/RootNode.d.ts +34 -7
  8. package/dist/client/SelectNode.d.ts +2 -2
  9. package/dist/client/ValueType.d.ts +3 -0
  10. package/dist/client/constants.d.ts +50 -0
  11. package/dist/client/hierarchy.d.ts +4 -4
  12. package/dist/client/identity.d.ts +14 -0
  13. package/dist/client/node-types.d.ts +2 -1
  14. package/dist/client/resources.d.ts +93 -0
  15. package/dist/client/submission/SubmissionData.d.ts +7 -0
  16. package/dist/client/submission/SubmissionDefinition.d.ts +14 -0
  17. package/dist/client/submission/SubmissionInstanceFile.d.ts +6 -0
  18. package/dist/client/submission/SubmissionOptions.d.ts +23 -0
  19. package/dist/client/submission/SubmissionResult.d.ts +91 -0
  20. package/dist/client/submission/SubmissionState.d.ts +12 -0
  21. package/dist/client/validation.d.ts +2 -2
  22. package/dist/error/ErrorProductionDesignPendingError.d.ts +7 -0
  23. package/dist/error/ValueTypeInvariantError.d.ts +17 -0
  24. package/dist/error/XPathFunctionalityError.d.ts +14 -0
  25. package/dist/error/XPathFunctionalityNotSupportedError.d.ts +7 -0
  26. package/dist/error/XPathFunctionalityPendingError.d.ts +7 -0
  27. package/dist/index.d.ts +10 -1
  28. package/dist/index.js +10856 -8585
  29. package/dist/index.js.map +1 -1
  30. package/dist/instance/Group.d.ts +9 -4
  31. package/dist/instance/InputControl.d.ts +36 -0
  32. package/dist/instance/ModelValue.d.ts +16 -26
  33. package/dist/instance/Note.d.ts +10 -3
  34. package/dist/instance/PrimaryInstance.d.ts +84 -0
  35. package/dist/instance/Root.d.ts +29 -25
  36. package/dist/instance/SelectField.d.ts +10 -2
  37. package/dist/instance/Subtree.d.ts +10 -5
  38. package/dist/instance/TriggerControl.d.ts +10 -3
  39. package/dist/instance/abstract/DescendantNode.d.ts +31 -23
  40. package/dist/instance/abstract/InstanceNode.d.ts +49 -29
  41. package/dist/instance/abstract/UnsupportedControl.d.ts +10 -3
  42. package/dist/instance/abstract/ValueNode.d.ts +48 -0
  43. package/dist/instance/hierarchy.d.ts +9 -8
  44. package/dist/instance/identity.d.ts +2 -7
  45. package/dist/instance/internal-api/EvaluationContext.d.ts +53 -12
  46. package/dist/instance/internal-api/InstanceConfig.d.ts +8 -2
  47. package/dist/instance/internal-api/InstanceValueContext.d.ts +20 -0
  48. package/dist/instance/internal-api/PrimaryInstanceDocument.d.ts +36 -0
  49. package/dist/instance/internal-api/TranslationContext.d.ts +3 -2
  50. package/dist/instance/internal-api/ValidationContext.d.ts +3 -4
  51. package/dist/instance/internal-api/ValueContext.d.ts +2 -1
  52. package/dist/instance/internal-api/submission/ClientReactiveSubmittableInstance.d.ts +14 -0
  53. package/dist/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.d.ts +31 -0
  54. package/dist/instance/internal-api/submission/ClientReactiveSubmittableParentNode.d.ts +18 -0
  55. package/dist/instance/internal-api/submission/ClientReactiveSubmittableValueNode.d.ts +17 -0
  56. package/dist/instance/repeat/BaseRepeatRange.d.ts +39 -83
  57. package/dist/instance/repeat/RepeatInstance.d.ts +11 -29
  58. package/dist/instance/repeat/RepeatRangeControlled.d.ts +2 -2
  59. package/dist/instance/repeat/RepeatRangeUncontrolled.d.ts +2 -2
  60. package/dist/instance/resource.d.ts +1 -1
  61. package/dist/instance/text/TextRange.d.ts +1 -1
  62. package/dist/instance/unsupported/RangeControl.d.ts +3 -1
  63. package/dist/instance/unsupported/RankControl.d.ts +3 -1
  64. package/dist/instance/unsupported/UploadControl.d.ts +3 -1
  65. package/dist/integration/xpath/EngineXPathEvaluator.d.ts +14 -0
  66. package/dist/integration/xpath/adapter/XFormsXPathNode.d.ts +71 -0
  67. package/dist/integration/xpath/adapter/engineDOMAdapter.d.ts +5 -0
  68. package/dist/integration/xpath/adapter/kind.d.ts +32 -0
  69. package/dist/integration/xpath/adapter/names.d.ts +16 -0
  70. package/dist/integration/xpath/adapter/traversal.d.ts +25 -0
  71. package/dist/integration/xpath/adapter/values.d.ts +2 -0
  72. package/dist/integration/xpath/static-dom/StaticAttribute.d.ts +19 -0
  73. package/dist/integration/xpath/static-dom/StaticDocument.d.ts +16 -0
  74. package/dist/integration/xpath/static-dom/StaticElement.d.ts +40 -0
  75. package/dist/integration/xpath/static-dom/StaticNamedNode.d.ts +17 -0
  76. package/dist/integration/xpath/static-dom/StaticNode.d.ts +33 -0
  77. package/dist/integration/xpath/static-dom/StaticText.d.ts +16 -0
  78. package/dist/lib/client-reactivity/submission/createInstanceSubmissionState.d.ts +3 -0
  79. package/dist/lib/client-reactivity/submission/createLeafNodeSubmissionState.d.ts +3 -0
  80. package/dist/lib/client-reactivity/submission/createNodeRangeSubmissionState.d.ts +4 -0
  81. package/dist/lib/client-reactivity/submission/createParentNodeSubmissionState.d.ts +4 -0
  82. package/dist/lib/client-reactivity/submission/createValueNodeSubmissionState.d.ts +3 -0
  83. package/dist/lib/client-reactivity/submission/prepareSubmission.d.ts +8 -0
  84. package/dist/lib/codecs/DecimalValueCodec.d.ts +6 -0
  85. package/dist/lib/codecs/IntValueCodec.d.ts +6 -0
  86. package/dist/lib/codecs/StringValueCodec.d.ts +4 -0
  87. package/dist/lib/codecs/ValueCodec.d.ts +30 -0
  88. package/dist/lib/codecs/ValueTypePlaceholderCodec.d.ts +12 -0
  89. package/dist/lib/codecs/getSharedValueCodec.d.ts +47 -0
  90. package/dist/lib/dom/query.d.ts +3 -0
  91. package/dist/lib/reactivity/createChildrenState.d.ts +7 -5
  92. package/dist/lib/reactivity/createComputedExpression.d.ts +18 -5
  93. package/dist/lib/reactivity/createInstanceValueState.d.ts +40 -0
  94. package/dist/lib/reactivity/createNoteReadonlyThunk.d.ts +2 -2
  95. package/dist/lib/reactivity/createTranslationState.d.ts +19 -0
  96. package/dist/lib/reactivity/createValueState.d.ts +6 -10
  97. package/dist/lib/reactivity/materializeCurrentStateChildren.d.ts +4 -4
  98. package/dist/lib/xml-serialization.d.ts +41 -0
  99. package/dist/parse/XFormDOM.d.ts +18 -7
  100. package/dist/parse/XFormDefinition.d.ts +1 -2
  101. package/dist/parse/attachments/FormAttachmentResource.d.ts +27 -0
  102. package/dist/parse/body/BodyDefinition.d.ts +3 -3
  103. package/dist/parse/body/RepeatElementDefinition.d.ts +1 -1
  104. package/dist/parse/body/appearance/inputAppearanceParser.d.ts +1 -1
  105. package/dist/parse/body/control/{InputDefinition.d.ts → InputControlDefinition.d.ts} +1 -1
  106. package/dist/parse/body/control/select/ItemsetNodesetContext.d.ts +0 -2
  107. package/dist/parse/expression/abstract/DependencyContext.d.ts +0 -5
  108. package/dist/parse/expression/abstract/DependentExpression.d.ts +2 -3
  109. package/dist/parse/model/BindDefinition.d.ts +4 -5
  110. package/dist/parse/model/BindTypeDefinition.d.ts +20 -0
  111. package/dist/parse/model/DescendentNodeDefinition.d.ts +0 -1
  112. package/dist/parse/model/FormSubmissionDefinition.d.ts +8 -0
  113. package/dist/parse/model/ItextTranslation/ItextTranslationDefinition.d.ts +4 -0
  114. package/dist/parse/model/ItextTranslation/ItextTranslationRootDefinition.d.ts +8 -0
  115. package/dist/parse/model/ItextTranslation/ItextTranslationsDefinition.d.ts +8 -0
  116. package/dist/parse/model/LeafNodeDefinition.d.ts +3 -1
  117. package/dist/parse/model/ModelBindMap.d.ts +1 -1
  118. package/dist/parse/model/ModelDefinition.d.ts +2 -0
  119. package/dist/parse/model/NodeDefinition.d.ts +0 -1
  120. package/dist/parse/model/NoteNodeDefinition.d.ts +4 -4
  121. package/dist/parse/model/RootDefinition.d.ts +3 -2
  122. package/dist/parse/model/SecondaryInstance/SecondaryInstanceDefinition.d.ts +4 -0
  123. package/dist/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.d.ts +7 -0
  124. package/dist/parse/model/SecondaryInstance/SecondaryInstancesDefinition.d.ts +13 -0
  125. package/dist/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.d.ts +14 -0
  126. package/dist/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.d.ts +22 -0
  127. package/dist/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceResource.d.ts +23 -0
  128. package/dist/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceSource.d.ts +9 -0
  129. package/dist/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.d.ts +5 -0
  130. package/dist/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.d.ts +7 -0
  131. package/dist/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.d.ts +13 -0
  132. package/dist/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.d.ts +12 -0
  133. package/dist/parse/shared/parseStaticDocumentFromDOMSubtree.d.ts +24 -0
  134. package/dist/parse/text/abstract/TextRangeDefinition.d.ts +0 -2
  135. package/dist/parse/xpath/semantic-analysis.d.ts +5 -0
  136. package/dist/solid.js +8174 -5921
  137. package/dist/solid.js.map +1 -1
  138. package/package.json +13 -11
  139. package/src/client/BaseNode.ts +16 -6
  140. package/src/client/BaseValueNode.ts +35 -0
  141. package/src/client/EngineConfig.ts +52 -51
  142. package/src/client/InputNode.ts +77 -0
  143. package/src/client/ModelValueNode.ts +30 -7
  144. package/src/client/NoteNode.ts +2 -2
  145. package/src/client/RootNode.ts +37 -7
  146. package/src/client/SelectNode.ts +3 -3
  147. package/src/client/ValueType.ts +4 -0
  148. package/src/client/constants.ts +67 -0
  149. package/src/client/hierarchy.ts +5 -5
  150. package/src/client/identity.ts +16 -0
  151. package/src/client/node-types.ts +12 -6
  152. package/src/client/resources.ts +118 -0
  153. package/src/client/submission/SubmissionData.ts +12 -0
  154. package/src/client/submission/SubmissionDefinition.ts +16 -0
  155. package/src/client/submission/SubmissionInstanceFile.ts +9 -0
  156. package/src/client/submission/SubmissionOptions.ts +28 -0
  157. package/src/client/submission/SubmissionResult.ts +124 -0
  158. package/src/client/submission/SubmissionState.ts +14 -0
  159. package/src/client/validation.ts +2 -2
  160. package/src/error/ErrorProductionDesignPendingError.ts +6 -0
  161. package/src/error/ValueTypeInvariantError.ts +22 -0
  162. package/src/error/XPathFunctionalityError.ts +26 -0
  163. package/src/error/XPathFunctionalityNotSupportedError.ts +18 -0
  164. package/src/error/XPathFunctionalityPendingError.ts +18 -0
  165. package/src/index.ts +10 -1
  166. package/src/instance/Group.ts +17 -5
  167. package/src/instance/InputControl.ts +119 -0
  168. package/src/instance/ModelValue.ts +47 -54
  169. package/src/instance/Note.ts +24 -8
  170. package/src/instance/PrimaryInstance.ts +244 -0
  171. package/src/instance/Root.ts +62 -134
  172. package/src/instance/SelectField.ts +56 -19
  173. package/src/instance/Subtree.ts +19 -7
  174. package/src/instance/TriggerControl.ts +23 -6
  175. package/src/instance/abstract/DescendantNode.ts +90 -45
  176. package/src/instance/abstract/InstanceNode.ts +103 -105
  177. package/src/instance/abstract/UnsupportedControl.ts +28 -5
  178. package/src/instance/abstract/ValueNode.ts +127 -0
  179. package/src/instance/children.ts +9 -10
  180. package/src/instance/hierarchy.ts +19 -15
  181. package/src/instance/identity.ts +3 -9
  182. package/src/instance/index.ts +25 -7
  183. package/src/instance/internal-api/EvaluationContext.ts +60 -13
  184. package/src/instance/internal-api/InstanceConfig.ts +9 -2
  185. package/src/instance/internal-api/InstanceValueContext.ts +24 -0
  186. package/src/instance/internal-api/PrimaryInstanceDocument.ts +53 -0
  187. package/src/instance/internal-api/TranslationContext.ts +3 -2
  188. package/src/instance/internal-api/ValidationContext.ts +3 -4
  189. package/src/instance/internal-api/ValueContext.ts +2 -1
  190. package/src/instance/internal-api/submission/ClientReactiveSubmittableInstance.ts +20 -0
  191. package/src/instance/internal-api/submission/ClientReactiveSubmittableLeafNode.ts +42 -0
  192. package/src/instance/internal-api/submission/ClientReactiveSubmittableParentNode.ts +25 -0
  193. package/src/instance/internal-api/submission/ClientReactiveSubmittableValueNode.ts +23 -0
  194. package/src/instance/repeat/BaseRepeatRange.ts +50 -131
  195. package/src/instance/repeat/RepeatInstance.ts +20 -46
  196. package/src/instance/repeat/RepeatRangeControlled.ts +5 -5
  197. package/src/instance/repeat/RepeatRangeUncontrolled.ts +2 -4
  198. package/src/instance/resource.ts +1 -1
  199. package/src/instance/text/TextChunk.ts +1 -1
  200. package/src/instance/unsupported/RangeControl.ts +5 -1
  201. package/src/instance/unsupported/RankControl.ts +5 -1
  202. package/src/instance/unsupported/UploadControl.ts +5 -1
  203. package/src/integration/xpath/EngineXPathEvaluator.ts +22 -0
  204. package/src/integration/xpath/adapter/XFormsXPathNode.ts +126 -0
  205. package/src/integration/xpath/adapter/engineDOMAdapter.ts +57 -0
  206. package/src/integration/xpath/adapter/kind.ts +114 -0
  207. package/src/integration/xpath/adapter/names.ts +99 -0
  208. package/src/integration/xpath/adapter/traversal.ts +228 -0
  209. package/src/integration/xpath/adapter/values.ts +5 -0
  210. package/src/integration/xpath/static-dom/StaticAttribute.ts +33 -0
  211. package/src/integration/xpath/static-dom/StaticDocument.ts +38 -0
  212. package/src/integration/xpath/static-dom/StaticElement.ts +106 -0
  213. package/src/integration/xpath/static-dom/StaticNamedNode.ts +45 -0
  214. package/src/integration/xpath/static-dom/StaticNode.ts +68 -0
  215. package/src/integration/xpath/static-dom/StaticText.ts +28 -0
  216. package/src/lib/client-reactivity/README.md +0 -0
  217. package/src/lib/client-reactivity/submission/createInstanceSubmissionState.ts +12 -0
  218. package/src/lib/client-reactivity/submission/createLeafNodeSubmissionState.ts +20 -0
  219. package/src/lib/client-reactivity/submission/createNodeRangeSubmissionState.ts +17 -0
  220. package/src/lib/client-reactivity/submission/createParentNodeSubmissionState.ts +22 -0
  221. package/src/lib/client-reactivity/submission/createValueNodeSubmissionState.ts +21 -0
  222. package/src/lib/client-reactivity/submission/prepareSubmission.ts +172 -0
  223. package/src/lib/codecs/DecimalValueCodec.ts +46 -0
  224. package/src/lib/codecs/IntValueCodec.ts +100 -0
  225. package/src/lib/codecs/StringValueCodec.ts +11 -0
  226. package/src/lib/codecs/ValueCodec.ts +106 -0
  227. package/src/lib/codecs/ValueTypePlaceholderCodec.ts +19 -0
  228. package/src/lib/codecs/getSharedValueCodec.ts +77 -0
  229. package/src/lib/dom/query.ts +7 -0
  230. package/src/lib/reactivity/createChildrenState.ts +8 -6
  231. package/src/lib/reactivity/createComputedExpression.ts +57 -34
  232. package/src/lib/reactivity/createInstanceValueState.ts +166 -0
  233. package/src/lib/reactivity/createNoteReadonlyThunk.ts +12 -7
  234. package/src/lib/reactivity/createSelectItems.ts +21 -21
  235. package/src/lib/reactivity/createTranslationState.ts +61 -0
  236. package/src/lib/reactivity/createValueState.ts +62 -120
  237. package/src/lib/reactivity/materializeCurrentStateChildren.ts +7 -7
  238. package/src/lib/reactivity/text/createTextRange.ts +4 -3
  239. package/src/lib/reactivity/validation/createAggregatedViolations.ts +1 -1
  240. package/src/lib/reactivity/validation/createValidation.ts +2 -3
  241. package/src/lib/xml-serialization.ts +96 -0
  242. package/src/parse/XFormDOM.ts +110 -75
  243. package/src/parse/XFormDefinition.ts +1 -6
  244. package/src/parse/attachments/FormAttachmentResource.ts +40 -0
  245. package/src/parse/body/BodyDefinition.ts +3 -3
  246. package/src/parse/body/appearance/inputAppearanceParser.ts +1 -1
  247. package/src/parse/body/control/{InputDefinition.ts → InputControlDefinition.ts} +3 -5
  248. package/src/parse/body/control/select/ItemsetNodesetContext.ts +0 -5
  249. package/src/parse/expression/abstract/DependencyContext.ts +0 -26
  250. package/src/parse/expression/abstract/DependentExpression.ts +2 -13
  251. package/src/parse/model/BindDefinition.ts +5 -8
  252. package/src/parse/model/BindTypeDefinition.ts +175 -0
  253. package/src/parse/model/DescendentNodeDefinition.ts +0 -6
  254. package/src/parse/model/FormSubmissionDefinition.ts +44 -0
  255. package/src/parse/model/ItextTranslation/ItextTranslationDefinition.ts +4 -0
  256. package/src/parse/model/ItextTranslation/ItextTranslationRootDefinition.ts +41 -0
  257. package/src/parse/model/ItextTranslation/ItextTranslationsDefinition.ts +31 -0
  258. package/src/parse/model/LeafNodeDefinition.ts +4 -1
  259. package/src/parse/model/ModelBindMap.ts +6 -8
  260. package/src/parse/model/ModelDefinition.ts +6 -1
  261. package/src/parse/model/NodeDefinition.ts +0 -3
  262. package/src/parse/model/NoteNodeDefinition.ts +3 -3
  263. package/src/parse/model/RootDefinition.ts +2 -1
  264. package/src/parse/model/SecondaryInstance/SecondaryInstanceDefinition.ts +4 -0
  265. package/src/parse/model/SecondaryInstance/SecondaryInstanceRootDefinition.ts +12 -0
  266. package/src/parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts +102 -0
  267. package/src/parse/model/SecondaryInstance/sources/BlankSecondaryInstanceSource.ts +40 -0
  268. package/src/parse/model/SecondaryInstance/sources/CSVExternalSecondaryInstance.ts +288 -0
  269. package/src/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceResource.ts +222 -0
  270. package/src/parse/model/SecondaryInstance/sources/ExternalSecondaryInstanceSource.ts +22 -0
  271. package/src/parse/model/SecondaryInstance/sources/GeoJSONExternalSecondaryInstance.ts +414 -0
  272. package/src/parse/model/SecondaryInstance/sources/InternalSecondaryInstanceSource.ts +19 -0
  273. package/src/parse/model/SecondaryInstance/sources/SecondaryInstanceSource.ts +29 -0
  274. package/src/parse/model/SecondaryInstance/sources/XMLExternalSecondaryInstanceSource.ts +32 -0
  275. package/src/parse/shared/parseStaticDocumentFromDOMSubtree.ts +149 -0
  276. package/src/parse/text/abstract/TextRangeDefinition.ts +0 -6
  277. package/src/parse/xpath/semantic-analysis.ts +29 -0
  278. package/dist/client/StringNode.d.ts +0 -46
  279. package/dist/instance/StringField.d.ts +0 -44
  280. package/dist/instance/internal-api/SubscribableDependency.d.ts +0 -59
  281. package/dist/parse/XFormDataType.d.ts +0 -25
  282. package/src/client/StringNode.ts +0 -52
  283. package/src/instance/StringField.ts +0 -120
  284. package/src/instance/internal-api/SubscribableDependency.ts +0 -61
  285. package/src/parse/XFormDataType.ts +0 -62
@@ -1,31 +1,36 @@
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
1
2
  import { Accessor } from 'solid-js';
2
3
  import { GroupDefinition, GroupNode, GroupNodeAppearances } from '../client/GroupNode.ts';
4
+ import { FormNodeID } from '../client/identity.ts';
5
+ import { SubmissionState } from '../client/submission/SubmissionState.ts';
3
6
  import { TextRange } from '../client/TextRange.ts';
4
7
  import { AncestorNodeValidationState } from '../client/validation.ts';
8
+ import { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
5
9
  import { MaterializedChildren } from '../lib/reactivity/materializeCurrentStateChildren.ts';
6
10
  import { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
7
11
  import { EngineState } from '../lib/reactivity/node-state/createEngineState.ts';
8
12
  import { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
9
13
  import { DescendantNodeSharedStateSpec, DescendantNode } from './abstract/DescendantNode.ts';
10
14
  import { GeneralChildNode, GeneralParentNode } from './hierarchy.ts';
11
- import { NodeID } from './identity.ts';
12
15
  import { EvaluationContext } from './internal-api/EvaluationContext.ts';
13
- import { SubscribableDependency } from './internal-api/SubscribableDependency.ts';
16
+ import { ClientReactiveSubmittableParentNode } from './internal-api/submission/ClientReactiveSubmittableParentNode.ts';
14
17
  interface GroupStateSpec extends DescendantNodeSharedStateSpec {
15
18
  readonly label: Accessor<TextRange<'label'> | null>;
16
19
  readonly hint: null;
17
- readonly children: Accessor<readonly NodeID[]>;
20
+ readonly children: Accessor<readonly FormNodeID[]>;
18
21
  readonly valueOptions: null;
19
22
  readonly value: null;
20
23
  }
21
- export declare class Group extends DescendantNode<GroupDefinition, GroupStateSpec, GeneralChildNode> implements GroupNode, EvaluationContext, SubscribableDependency {
24
+ export declare class Group extends DescendantNode<GroupDefinition, GroupStateSpec, GeneralParentNode, GeneralChildNode> implements GroupNode, XFormsXPathElement, EvaluationContext, ClientReactiveSubmittableParentNode<GeneralChildNode> {
22
25
  private readonly childrenState;
26
+ readonly [XPathNodeKindKey] = "element";
23
27
  protected readonly state: SharedNodeState<GroupStateSpec>;
24
28
  protected engineState: EngineState<GroupStateSpec>;
25
29
  readonly nodeType = "group";
26
30
  readonly appearances: GroupNodeAppearances;
27
31
  readonly currentState: MaterializedChildren<CurrentState<GroupStateSpec>, GeneralChildNode>;
28
32
  readonly validationState: AncestorNodeValidationState;
33
+ readonly submissionState: SubmissionState;
29
34
  constructor(parent: GeneralParentNode, definition: GroupDefinition);
30
35
  getChildren(): readonly GeneralChildNode[];
31
36
  }
@@ -0,0 +1,36 @@
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
2
+ import { Accessor } from 'solid-js';
3
+ import { InputDefinition, InputNode, InputNodeAppearances, InputNodeInputValue } from '../client/InputNode.ts';
4
+ import { TextRange } from '../client/TextRange.ts';
5
+ import { ValueType } from '../client/ValueType.ts';
6
+ import { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
7
+ import { RuntimeInputValue, RuntimeValue } from '../lib/codecs/getSharedValueCodec.ts';
8
+ import { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
9
+ import { EngineState } from '../lib/reactivity/node-state/createEngineState.ts';
10
+ import { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
11
+ import { Root } from './Root.ts';
12
+ import { ValueNode, ValueNodeStateSpec } from './abstract/ValueNode.ts';
13
+ import { GeneralParentNode } from './hierarchy.ts';
14
+ import { EvaluationContext } from './internal-api/EvaluationContext.ts';
15
+ import { ValidationContext } from './internal-api/ValidationContext.ts';
16
+ import { ClientReactiveSubmittableValueNode } from './internal-api/submission/ClientReactiveSubmittableValueNode.ts';
17
+ export type AnyInputDefinition = {
18
+ [V in ValueType]: InputDefinition<V>;
19
+ }[ValueType];
20
+ interface InputControlStateSpec<V extends ValueType> extends ValueNodeStateSpec<RuntimeValue<V>> {
21
+ readonly label: Accessor<TextRange<'label'> | null>;
22
+ readonly hint: Accessor<TextRange<'hint'> | null>;
23
+ }
24
+ export declare class InputControl<V extends ValueType = ValueType> extends ValueNode<V, InputDefinition<V>, RuntimeValue<V>, RuntimeInputValue<V>> implements InputNode<V>, XFormsXPathElement, EvaluationContext, ValidationContext, ClientReactiveSubmittableValueNode {
25
+ static from(parent: GeneralParentNode, definition: InputDefinition): AnyInputControl;
26
+ readonly [XPathNodeKindKey] = "element";
27
+ protected readonly state: SharedNodeState<InputControlStateSpec<V>>;
28
+ protected readonly engineState: EngineState<InputControlStateSpec<V>>;
29
+ readonly nodeType = "input";
30
+ readonly appearances: InputNodeAppearances;
31
+ readonly currentState: CurrentState<InputControlStateSpec<V>>;
32
+ constructor(parent: GeneralParentNode, definition: InputDefinition<V>);
33
+ setValue(value: InputNodeInputValue<V>): Root;
34
+ }
35
+ export type AnyInputControl = InputControl<'barcode'> | InputControl<'binary'> | InputControl<'boolean'> | InputControl<'date'> | InputControl<'dateTime'> | InputControl<'decimal'> | InputControl<'geopoint'> | InputControl<'geoshape'> | InputControl<'geotrace'> | InputControl<'int'> | InputControl<'intent'> | InputControl<'string'> | InputControl<'time'>;
36
+ export {};
@@ -1,39 +1,29 @@
1
- import { ModelValueNode } from '../client/ModelValueNode.ts';
2
- import { AnyViolation, LeafNodeValidationState } from '../client/validation.ts';
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
2
+ import { ModelValueDefinition, ModelValueNode } from '../client/ModelValueNode.ts';
3
+ import { ValueType } from '../client/ValueType.ts';
4
+ import { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
5
+ import { RuntimeInputValue, RuntimeValue } from '../lib/codecs/getSharedValueCodec.ts';
3
6
  import { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
4
7
  import { EngineState } from '../lib/reactivity/node-state/createEngineState.ts';
5
8
  import { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
6
- import { SimpleAtomicState } from '../lib/reactivity/types.ts';
7
- import { LeafNodeDefinition } from '../parse/model/LeafNodeDefinition.ts';
8
- import { DescendantNodeStateSpec, DescendantNode } from './abstract/DescendantNode.ts';
9
+ import { ValueNode, ValueNodeStateSpec } from './abstract/ValueNode.ts';
9
10
  import { GeneralParentNode } from './hierarchy.ts';
10
11
  import { EvaluationContext } from './internal-api/EvaluationContext.ts';
11
- import { SubscribableDependency } from './internal-api/SubscribableDependency.ts';
12
12
  import { ValidationContext } from './internal-api/ValidationContext.ts';
13
- import { ValueContext } from './internal-api/ValueContext.ts';
14
- export interface ModelValueDefinition extends LeafNodeDefinition {
15
- readonly bodyElement: null;
16
- }
17
- interface ModelValueStateSpec extends DescendantNodeStateSpec<string> {
13
+ import { ClientReactiveSubmittableValueNode } from './internal-api/submission/ClientReactiveSubmittableValueNode.ts';
14
+ interface ModelValueStateSpec<V extends ValueType> extends ValueNodeStateSpec<RuntimeValue<V>> {
18
15
  readonly label: null;
19
16
  readonly hint: null;
20
- readonly children: null;
21
- readonly value: SimpleAtomicState<string>;
22
- readonly valueOptions: null;
23
17
  }
24
- export declare class ModelValue extends DescendantNode<ModelValueDefinition, ModelValueStateSpec, null> implements ModelValueNode, EvaluationContext, SubscribableDependency, ValidationContext, ValueContext<string> {
25
- private readonly validation;
26
- protected readonly state: SharedNodeState<ModelValueStateSpec>;
27
- protected engineState: EngineState<ModelValueStateSpec>;
18
+ export declare class ModelValue<V extends ValueType = ValueType> extends ValueNode<V, ModelValueDefinition<V>, RuntimeValue<V>, RuntimeInputValue<V>> implements ModelValueNode<V>, XFormsXPathElement, EvaluationContext, ValidationContext, ClientReactiveSubmittableValueNode {
19
+ static from(parent: GeneralParentNode, definition: ModelValueDefinition): AnyModelValue;
20
+ readonly [XPathNodeKindKey] = "element";
21
+ protected readonly state: SharedNodeState<ModelValueStateSpec<V>>;
22
+ protected readonly engineState: EngineState<ModelValueStateSpec<V>>;
28
23
  readonly nodeType = "model-value";
29
24
  readonly appearances: null;
30
- readonly currentState: CurrentState<ModelValueStateSpec>;
31
- get validationState(): LeafNodeValidationState;
32
- readonly encodeValue: (value: string) => string;
33
- readonly decodeValue: (value: string) => string;
34
- constructor(parent: GeneralParentNode, definition: ModelValueDefinition);
35
- getViolation(): AnyViolation | null;
36
- isBlank(): boolean;
37
- getChildren(): readonly [];
25
+ readonly currentState: CurrentState<ModelValueStateSpec<V>>;
26
+ constructor(parent: GeneralParentNode, definition: ModelValueDefinition<V>);
38
27
  }
28
+ export type AnyModelValue = ModelValue<'barcode'> | ModelValue<'binary'> | ModelValue<'boolean'> | ModelValue<'date'> | ModelValue<'dateTime'> | ModelValue<'decimal'> | ModelValue<'geopoint'> | ModelValue<'geoshape'> | ModelValue<'geotrace'> | ModelValue<'int'> | ModelValue<'intent'> | ModelValue<'string'> | ModelValue<'time'>;
39
29
  export {};
@@ -1,7 +1,10 @@
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
1
2
  import { Accessor } from 'solid-js';
2
3
  import { NoteNode, NoteNodeAppearances } from '../client/NoteNode.ts';
4
+ import { SubmissionState } from '../client/submission/SubmissionState.ts';
3
5
  import { TextRange } from '../client/TextRange.ts';
4
6
  import { AnyViolation, LeafNodeValidationState } from '../client/validation.ts';
7
+ import { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
5
8
  import { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
6
9
  import { EngineState } from '../lib/reactivity/node-state/createEngineState.ts';
7
10
  import { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
@@ -11,7 +14,7 @@ import { NoteNodeDefinition } from '../parse/model/NoteNodeDefinition.ts';
11
14
  import { DescendantNodeStateSpec, DescendantNode } from './abstract/DescendantNode.ts';
12
15
  import { GeneralParentNode } from './hierarchy.ts';
13
16
  import { EvaluationContext } from './internal-api/EvaluationContext.ts';
14
- import { SubscribableDependency } from './internal-api/SubscribableDependency.ts';
17
+ import { ClientReactiveSubmittableLeafNode } from './internal-api/submission/ClientReactiveSubmittableLeafNode.ts';
15
18
  import { ValidationContext } from './internal-api/ValidationContext.ts';
16
19
  import { ValueContext } from './internal-api/ValueContext.ts';
17
20
  interface NoteStateSpec extends DescendantNodeStateSpec<string> {
@@ -23,17 +26,21 @@ interface NoteStateSpec extends DescendantNodeStateSpec<string> {
23
26
  readonly value: SimpleAtomicState<string>;
24
27
  readonly valueOptions: null;
25
28
  }
26
- export declare class Note extends DescendantNode<NoteNodeDefinition, NoteStateSpec, null> implements NoteNode, EvaluationContext, SubscribableDependency, ValidationContext, ValueContext<string> {
29
+ export declare class Note extends DescendantNode<NoteNodeDefinition, NoteStateSpec, GeneralParentNode, null> implements NoteNode, XFormsXPathElement, EvaluationContext, ValidationContext, ValueContext<string>, ClientReactiveSubmittableLeafNode<string> {
27
30
  private readonly validation;
31
+ readonly [XPathNodeKindKey] = "element";
28
32
  protected readonly state: SharedNodeState<NoteStateSpec>;
29
- protected engineState: EngineState<NoteStateSpec>;
33
+ protected readonly engineState: EngineState<NoteStateSpec>;
30
34
  readonly nodeType = "note";
31
35
  readonly appearances: NoteNodeAppearances;
32
36
  readonly currentState: CurrentState<NoteStateSpec>;
33
37
  get validationState(): LeafNodeValidationState;
38
+ readonly submissionState: SubmissionState;
39
+ readonly contextNode: this;
34
40
  readonly encodeValue: (value: string) => string;
35
41
  readonly decodeValue: (value: string) => string;
36
42
  constructor(parent: GeneralParentNode, definition: NoteNodeDefinition);
43
+ getXPathValue(): string;
37
44
  getViolation(): AnyViolation | null;
38
45
  isBlank(): boolean;
39
46
  getChildren(): readonly [];
@@ -0,0 +1,84 @@
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
2
+ import { Accessor } from 'solid-js';
3
+ import { ActiveLanguage, FormLanguage, FormLanguages } from '../client/FormLanguage.ts';
4
+ import { FormNodeID } from '../client/identity.ts';
5
+ import { SubmissionChunkedType, SubmissionOptions } from '../client/submission/SubmissionOptions.ts';
6
+ import { SubmissionResult } from '../client/submission/SubmissionResult.ts';
7
+ import { SubmissionState } from '../client/submission/SubmissionState.ts';
8
+ import { AncestorNodeValidationState } from '../client/validation.ts';
9
+ import { XFormsXPathDocument } from '../integration/xpath/adapter/XFormsXPathNode.ts';
10
+ import { EngineXPathEvaluator } from '../integration/xpath/EngineXPathEvaluator.ts';
11
+ import { MaterializedChildren } from '../lib/reactivity/materializeCurrentStateChildren.ts';
12
+ import { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
13
+ import { EngineState } from '../lib/reactivity/node-state/createEngineState.ts';
14
+ import { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
15
+ import { ReactiveScope } from '../lib/reactivity/scope.ts';
16
+ import { BodyClassList } from '../parse/body/BodyDefinition.ts';
17
+ import { ModelDefinition } from '../parse/model/ModelDefinition.ts';
18
+ import { RootDefinition } from '../parse/model/RootDefinition.ts';
19
+ import { SecondaryInstancesDefinition } from '../parse/model/SecondaryInstance/SecondaryInstancesDefinition.ts';
20
+ import { InstanceNode } from './abstract/InstanceNode.ts';
21
+ import { EvaluationContext } from './internal-api/EvaluationContext.ts';
22
+ import { InstanceConfig } from './internal-api/InstanceConfig.ts';
23
+ import { PrimaryInstanceDocument } from './internal-api/PrimaryInstanceDocument.ts';
24
+ import { ClientReactiveSubmittableInstance } from './internal-api/submission/ClientReactiveSubmittableInstance.ts';
25
+ import { TranslationContext } from './internal-api/TranslationContext.ts';
26
+ import { Root } from './Root.ts';
27
+ interface PrimaryInstanceStateSpec {
28
+ readonly reference: string;
29
+ readonly readonly: boolean;
30
+ readonly relevant: boolean;
31
+ readonly required: boolean;
32
+ readonly label: null;
33
+ readonly hint: null;
34
+ readonly children: Accessor<readonly FormNodeID[]>;
35
+ readonly valueOptions: null;
36
+ readonly value: null;
37
+ readonly activeLanguage: Accessor<ActiveLanguage>;
38
+ }
39
+ export declare class PrimaryInstance extends InstanceNode<RootDefinition, PrimaryInstanceStateSpec, null, Root> implements PrimaryInstanceDocument, XFormsXPathDocument, TranslationContext, EvaluationContext, ClientReactiveSubmittableInstance {
40
+ protected readonly state: SharedNodeState<PrimaryInstanceStateSpec>;
41
+ protected readonly engineState: EngineState<PrimaryInstanceStateSpec>;
42
+ readonly getChildren: Accessor<readonly Root[]>;
43
+ readonly hasReadonlyAncestor: () => boolean;
44
+ readonly isReadonly: () => boolean;
45
+ readonly hasNonRelevantAncestor: () => boolean;
46
+ readonly isRelevant: () => boolean;
47
+ private readonly setActiveLanguage;
48
+ readonly [XPathNodeKindKey] = "document";
49
+ readonly nodeType = "primary-instance";
50
+ readonly appearances: null;
51
+ readonly classes: BodyClassList;
52
+ readonly root: Root;
53
+ readonly currentState: MaterializedChildren<CurrentState<PrimaryInstanceStateSpec>, Root>;
54
+ readonly validationState: AncestorNodeValidationState;
55
+ readonly submissionState: SubmissionState;
56
+ readonly languages: FormLanguages;
57
+ readonly getActiveLanguage: Accessor<ActiveLanguage>;
58
+ readonly isAttached: Accessor<boolean>;
59
+ readonly evaluator: EngineXPathEvaluator;
60
+ readonly contextNode: this;
61
+ constructor(scope: ReactiveScope, model: ModelDefinition, secondaryInstances: SecondaryInstancesDefinition, engineConfig: InstanceConfig);
62
+ /**
63
+ * @todo Note that this method's signature is intentionally derived from
64
+ * {@link RootNode.setLanguage}, but its return type differs! The design
65
+ * intent of returning {@link RootNode} from all of the client-facing state
66
+ * setter methods has proven… interesting philosophically. But nothing
67
+ * downstream has availed itself of that philosophy, and otherwise it's not
68
+ * particularly pragmatic or ergonomic (internally or for clients alike).
69
+ *
70
+ * Since this class is (currently) engine-internal, this seems like an
71
+ * excellent place to start a discussion around what we want longer term for
72
+ * state setter signatures in _client-facing_ APIs. As a first pass, it seems
73
+ * reasonable to borrow the idiomatic convention of returning the effective
74
+ * value assigned by the setter.
75
+ *
76
+ * @see
77
+ * {@link https://github.com/getodk/web-forms/issues/45#issuecomment-1967932261 | Initial read interface design between engine and UI - design summary comment}
78
+ * (and some of the comments leading up to it) for background on the
79
+ * philosophical reasoning behind the existing signature convention.
80
+ */
81
+ setLanguage(language: FormLanguage): FormLanguage;
82
+ prepareSubmission<ChunkedType extends SubmissionChunkedType = 'monolithic'>(options?: SubmissionOptions<ChunkedType>): Promise<SubmissionResult<ChunkedType>>;
83
+ }
84
+ export {};
@@ -1,57 +1,61 @@
1
- import { XFormsXPathEvaluator } from '@getodk/xpath';
2
- import { Accessor, Signal } from 'solid-js';
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
2
+ import { Accessor } from 'solid-js';
3
3
  import { ActiveLanguage, FormLanguage, FormLanguages } from '../client/FormLanguage.ts';
4
+ import { FormNodeID } from '../client/identity.ts';
4
5
  import { RootNode } from '../client/RootNode.ts';
6
+ import { SubmissionDefinition } from '../client/submission/SubmissionDefinition.ts';
7
+ import { SubmissionChunkedType, SubmissionOptions } from '../client/submission/SubmissionOptions.ts';
8
+ import { SubmissionResult } from '../client/submission/SubmissionResult.ts';
9
+ import { SubmissionState } from '../client/submission/SubmissionState.ts';
5
10
  import { AncestorNodeValidationState } from '../client/validation.ts';
11
+ import { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
6
12
  import { MaterializedChildren } from '../lib/reactivity/materializeCurrentStateChildren.ts';
7
13
  import { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
8
14
  import { EngineState } from '../lib/reactivity/node-state/createEngineState.ts';
9
15
  import { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
10
16
  import { BodyClassList } from '../parse/body/BodyDefinition.ts';
11
17
  import { RootDefinition } from '../parse/model/RootDefinition.ts';
12
- import { XFormDOM } from '../parse/XFormDOM.ts';
13
- import { InstanceNode } from './abstract/InstanceNode.ts';
18
+ import { DescendantNode } from './abstract/DescendantNode.ts';
14
19
  import { GeneralChildNode } from './hierarchy.ts';
15
- import { NodeID } from './identity.ts';
16
- import { EvaluationContext, EvaluationContextRoot } from './internal-api/EvaluationContext.ts';
17
- import { InstanceConfig } from './internal-api/InstanceConfig.ts';
18
- import { SubscribableDependency } from './internal-api/SubscribableDependency.ts';
20
+ import { EvaluationContext } from './internal-api/EvaluationContext.ts';
21
+ import { ClientReactiveSubmittableParentNode } from './internal-api/submission/ClientReactiveSubmittableParentNode.ts';
19
22
  import { TranslationContext } from './internal-api/TranslationContext.ts';
23
+ import { PrimaryInstance } from './PrimaryInstance.ts';
20
24
  interface RootStateSpec {
21
- readonly reference: string;
22
- readonly readonly: boolean;
23
- readonly relevant: boolean;
24
- readonly required: boolean;
25
+ readonly reference: Accessor<string>;
26
+ readonly readonly: Accessor<boolean>;
27
+ readonly relevant: Accessor<boolean>;
28
+ readonly required: Accessor<boolean>;
25
29
  readonly label: null;
26
30
  readonly hint: null;
27
- readonly children: Accessor<readonly NodeID[]>;
31
+ readonly children: Accessor<readonly FormNodeID[]>;
28
32
  readonly valueOptions: null;
29
33
  readonly value: null;
30
- readonly activeLanguage: Signal<ActiveLanguage>;
34
+ readonly activeLanguage: Accessor<ActiveLanguage>;
31
35
  }
32
- export declare class Root extends InstanceNode<RootDefinition, RootStateSpec, GeneralChildNode> implements RootNode, EvaluationContext, EvaluationContextRoot, SubscribableDependency, TranslationContext {
36
+ export declare class Root extends DescendantNode<RootDefinition, RootStateSpec, PrimaryInstance, GeneralChildNode> implements RootNode, XFormsXPathElement, EvaluationContext, TranslationContext, ClientReactiveSubmittableParentNode<GeneralChildNode> {
33
37
  private readonly childrenState;
38
+ readonly [XPathNodeKindKey] = "element";
39
+ protected readonly state: SharedNodeState<RootStateSpec>;
40
+ protected readonly engineState: EngineState<RootStateSpec>;
34
41
  readonly hasReadonlyAncestor: () => boolean;
42
+ readonly isSelfReadonly: () => boolean;
35
43
  readonly isReadonly: () => boolean;
36
44
  readonly hasNonRelevantAncestor: () => boolean;
45
+ readonly isSelfRelevant: () => boolean;
37
46
  readonly isRelevant: () => boolean;
38
- protected readonly state: SharedNodeState<RootStateSpec>;
39
- protected readonly engineState: EngineState<RootStateSpec>;
47
+ readonly isRequired: () => boolean;
40
48
  readonly nodeType = "root";
41
49
  readonly appearances: null;
42
50
  readonly classes: BodyClassList;
43
51
  readonly currentState: MaterializedChildren<CurrentState<RootStateSpec>, GeneralChildNode>;
44
52
  readonly validationState: AncestorNodeValidationState;
45
- protected readonly instanceDOM: XFormDOM;
46
- readonly root: this;
47
- readonly evaluator: XFormsXPathEvaluator;
48
- readonly contextNode: Element;
49
- readonly parent: null;
53
+ readonly submissionState: SubmissionState;
54
+ get submissionDefinition(): SubmissionDefinition;
50
55
  readonly languages: FormLanguages;
51
- get activeLanguage(): ActiveLanguage;
52
- constructor(xformDOM: XFormDOM, definition: RootDefinition, engineConfig: InstanceConfig);
56
+ constructor(parent: PrimaryInstance);
53
57
  getChildren(): readonly GeneralChildNode[];
54
58
  setLanguage(language: FormLanguage): Root;
55
- subscribe(): void;
59
+ prepareSubmission<ChunkedType extends SubmissionChunkedType = 'monolithic'>(options?: SubmissionOptions<ChunkedType>): Promise<SubmissionResult<ChunkedType>>;
56
60
  }
57
61
  export {};
@@ -1,7 +1,10 @@
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
1
2
  import { Accessor } from 'solid-js';
2
3
  import { SelectItem, SelectNode, SelectNodeAppearances } from '../client/SelectNode.ts';
3
4
  import { TextRange } from '../client/TextRange.ts';
5
+ import { SubmissionState } from '../client/submission/SubmissionState.ts';
4
6
  import { AnyViolation, LeafNodeValidationState } from '../client/validation.ts';
7
+ import { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
5
8
  import { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
6
9
  import { EngineState } from '../lib/reactivity/node-state/createEngineState.ts';
7
10
  import { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
@@ -12,9 +15,9 @@ import { Root } from './Root.ts';
12
15
  import { DescendantNodeStateSpec, DescendantNode } from './abstract/DescendantNode.ts';
13
16
  import { GeneralParentNode } from './hierarchy.ts';
14
17
  import { EvaluationContext } from './internal-api/EvaluationContext.ts';
15
- import { SubscribableDependency } from './internal-api/SubscribableDependency.ts';
16
18
  import { ValidationContext } from './internal-api/ValidationContext.ts';
17
19
  import { ValueContext } from './internal-api/ValueContext.ts';
20
+ import { ClientReactiveSubmittableLeafNode } from './internal-api/submission/ClientReactiveSubmittableLeafNode.ts';
18
21
  export interface SelectFieldDefinition extends LeafNodeDefinition {
19
22
  readonly bodyElement: AnySelectDefinition;
20
23
  }
@@ -25,22 +28,27 @@ interface SelectFieldStateSpec extends DescendantNodeStateSpec<readonly SelectIt
25
28
  readonly value: SimpleAtomicState<readonly SelectItem[]>;
26
29
  readonly valueOptions: Accessor<readonly SelectItem[]>;
27
30
  }
28
- export declare class SelectField extends DescendantNode<SelectFieldDefinition, SelectFieldStateSpec, null> implements SelectNode, EvaluationContext, SubscribableDependency, ValidationContext, ValueContext<readonly SelectItem[]> {
31
+ export declare class SelectField extends DescendantNode<SelectFieldDefinition, SelectFieldStateSpec, GeneralParentNode, null> implements SelectNode, XFormsXPathElement, EvaluationContext, ValidationContext, ValueContext<readonly SelectItem[]>, ClientReactiveSubmittableLeafNode<readonly SelectItem[]> {
29
32
  private readonly selectExclusive;
30
33
  private readonly validation;
34
+ readonly [XPathNodeKindKey] = "element";
31
35
  protected readonly state: SharedNodeState<SelectFieldStateSpec>;
32
36
  protected engineState: EngineState<SelectFieldStateSpec>;
33
37
  readonly nodeType = "select";
34
38
  readonly appearances: SelectNodeAppearances;
35
39
  readonly currentState: CurrentState<SelectFieldStateSpec>;
36
40
  get validationState(): LeafNodeValidationState;
41
+ readonly submissionState: SubmissionState;
42
+ readonly contextNode: this;
37
43
  readonly encodeValue: (runtimeValue: readonly SelectItem[]) => string;
38
44
  readonly decodeValue: (instanceValue: string) => readonly SelectItem[];
39
45
  protected readonly getValueOptions: Accessor<readonly SelectItem[]>;
46
+ protected readonly getValue: Accessor<readonly SelectItem[]>;
40
47
  constructor(parent: GeneralParentNode, definition: SelectFieldDefinition);
41
48
  protected getSelectItemsByValue(valueOptions?: readonly SelectItem[]): ReadonlyMap<string, SelectItem>;
42
49
  protected updateSelectedItemValues(values: readonly string[]): void;
43
50
  protected setSelectedItemValue(value: string | null): void;
51
+ getXPathValue(): string;
44
52
  select(selectedItem: SelectItem): Root;
45
53
  deselect(deselectedItem: SelectItem): Root;
46
54
  getChildren(): readonly [];
@@ -1,30 +1,35 @@
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
1
2
  import { Accessor } from 'solid-js';
3
+ import { FormNodeID } from '../client/identity.ts';
4
+ import { SubmissionState } from '../client/submission/SubmissionState.ts';
2
5
  import { SubtreeDefinition, SubtreeNode } from '../client/SubtreeNode.ts';
3
6
  import { AncestorNodeValidationState } from '../client/validation.ts';
7
+ import { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
4
8
  import { MaterializedChildren } from '../lib/reactivity/materializeCurrentStateChildren.ts';
5
9
  import { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
6
10
  import { EngineState } from '../lib/reactivity/node-state/createEngineState.ts';
7
11
  import { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
8
12
  import { DescendantNodeSharedStateSpec, DescendantNode } from './abstract/DescendantNode.ts';
9
13
  import { GeneralChildNode, GeneralParentNode } from './hierarchy.ts';
10
- import { NodeID } from './identity.ts';
11
14
  import { EvaluationContext } from './internal-api/EvaluationContext.ts';
12
- import { SubscribableDependency } from './internal-api/SubscribableDependency.ts';
15
+ import { ClientReactiveSubmittableParentNode } from './internal-api/submission/ClientReactiveSubmittableParentNode.ts';
13
16
  interface SubtreeStateSpec extends DescendantNodeSharedStateSpec {
14
17
  readonly label: null;
15
18
  readonly hint: null;
16
- readonly children: Accessor<readonly NodeID[]>;
19
+ readonly children: Accessor<readonly FormNodeID[]>;
17
20
  readonly valueOptions: null;
18
21
  readonly value: null;
19
22
  }
20
- export declare class Subtree extends DescendantNode<SubtreeDefinition, SubtreeStateSpec, GeneralChildNode> implements SubtreeNode, EvaluationContext, SubscribableDependency {
23
+ export declare class Subtree extends DescendantNode<SubtreeDefinition, SubtreeStateSpec, GeneralParentNode, GeneralChildNode> implements SubtreeNode, XFormsXPathElement, EvaluationContext, ClientReactiveSubmittableParentNode<GeneralChildNode> {
21
24
  private readonly childrenState;
25
+ readonly [XPathNodeKindKey] = "element";
22
26
  protected readonly state: SharedNodeState<SubtreeStateSpec>;
23
- protected engineState: EngineState<SubtreeStateSpec>;
27
+ protected readonly engineState: EngineState<SubtreeStateSpec>;
24
28
  readonly nodeType = "subtree";
25
29
  readonly appearances: null;
26
30
  readonly currentState: MaterializedChildren<CurrentState<SubtreeStateSpec>, GeneralChildNode>;
27
31
  readonly validationState: AncestorNodeValidationState;
32
+ readonly submissionState: SubmissionState;
28
33
  constructor(parent: GeneralParentNode, definition: SubtreeDefinition);
29
34
  getChildren(): readonly GeneralChildNode[];
30
35
  }
@@ -1,7 +1,10 @@
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
1
2
  import { Accessor } from 'solid-js';
2
3
  import { TextRange } from '../client/TextRange.ts';
3
4
  import { TriggerNode, TriggerNodeDefinition } from '../client/TriggerNode.ts';
5
+ import { SubmissionState } from '../client/submission/SubmissionState.ts';
4
6
  import { AnyViolation, LeafNodeValidationState } from '../client/validation.ts';
7
+ import { XFormsXPathElement } from '../integration/xpath/adapter/XFormsXPathNode.ts';
5
8
  import { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
6
9
  import { EngineState } from '../lib/reactivity/node-state/createEngineState.ts';
7
10
  import { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
@@ -11,9 +14,9 @@ import { Root } from './Root.ts';
11
14
  import { DescendantNodeStateSpec, DescendantNode } from './abstract/DescendantNode.ts';
12
15
  import { GeneralParentNode } from './hierarchy.ts';
13
16
  import { EvaluationContext } from './internal-api/EvaluationContext.ts';
14
- import { SubscribableDependency } from './internal-api/SubscribableDependency.ts';
15
17
  import { ValidationContext } from './internal-api/ValidationContext.ts';
16
18
  import { ValueContext } from './internal-api/ValueContext.ts';
19
+ import { ClientReactiveSubmittableLeafNode } from './internal-api/submission/ClientReactiveSubmittableLeafNode.ts';
17
20
  interface TriggerControlStateSpec extends DescendantNodeStateSpec<boolean> {
18
21
  readonly label: Accessor<TextRange<'label'> | null>;
19
22
  readonly hint: Accessor<TextRange<'hint'> | null>;
@@ -21,17 +24,21 @@ interface TriggerControlStateSpec extends DescendantNodeStateSpec<boolean> {
21
24
  readonly value: SimpleAtomicState<boolean>;
22
25
  readonly valueOptions: null;
23
26
  }
24
- export declare class TriggerControl extends DescendantNode<TriggerNodeDefinition, TriggerControlStateSpec, null> implements TriggerNode, EvaluationContext, SubscribableDependency, ValidationContext, ValueContext<boolean> {
27
+ export declare class TriggerControl extends DescendantNode<TriggerNodeDefinition, TriggerControlStateSpec, GeneralParentNode, null> implements TriggerNode, XFormsXPathElement, EvaluationContext, ValidationContext, ValueContext<boolean>, ClientReactiveSubmittableLeafNode<boolean> {
25
28
  private readonly validation;
29
+ readonly [XPathNodeKindKey] = "element";
26
30
  protected readonly state: SharedNodeState<TriggerControlStateSpec>;
27
- protected engineState: EngineState<TriggerControlStateSpec>;
31
+ protected readonly engineState: EngineState<TriggerControlStateSpec>;
28
32
  readonly nodeType = "trigger";
29
33
  readonly appearances: UnknownAppearanceDefinition;
30
34
  readonly currentState: CurrentState<TriggerControlStateSpec>;
31
35
  get validationState(): LeafNodeValidationState;
36
+ readonly submissionState: SubmissionState;
37
+ readonly contextNode: this;
32
38
  readonly encodeValue: (runtimeValue: boolean) => string;
33
39
  readonly decodeValue: (instanceValue: string) => boolean;
34
40
  constructor(parent: GeneralParentNode, definition: TriggerNodeDefinition);
41
+ getXPathValue(): string;
35
42
  getViolation(): AnyViolation | null;
36
43
  isBlank(): boolean;
37
44
  getChildren(): readonly [];
@@ -1,13 +1,15 @@
1
- import { XFormsXPathEvaluator } from '@getodk/xpath';
1
+ import { XPathNodeKindKey } from '@getodk/xpath';
2
2
  import { Accessor } from 'solid-js';
3
3
  import { BaseNode } from '../../client/BaseNode.ts';
4
+ import { ActiveLanguage } from '../../client/FormLanguage.ts';
5
+ import { InstanceNodeType } from '../../client/node-types.ts';
6
+ import { PrimaryInstanceXPathChildNode } from '../../integration/xpath/adapter/kind.ts';
7
+ import { XFormsXPathPrimaryInstanceDescendantNode, XFormsXPathPrimaryInstanceDescendantNodeKind } from '../../integration/xpath/adapter/XFormsXPathNode.ts';
8
+ import { EngineXPathEvaluator } from '../../integration/xpath/EngineXPathEvaluator.ts';
4
9
  import { AnyDescendantNodeDefinition } from '../../parse/model/DescendentNodeDefinition.ts';
5
- import { LeafNodeDefinition } from '../../parse/model/LeafNodeDefinition.ts';
6
10
  import { AnyNodeDefinition } from '../../parse/model/NodeDefinition.ts';
7
- import { RepeatInstanceDefinition } from '../../parse/model/RepeatInstanceDefinition.ts';
8
- import { AnyChildNode, GeneralParentNode, RepeatRange } from '../hierarchy.ts';
11
+ import { AnyChildNode, AnyParentNode } from '../hierarchy.ts';
9
12
  import { EvaluationContext } from '../internal-api/EvaluationContext.ts';
10
- import { SubscribableDependency } from '../internal-api/SubscribableDependency.ts';
11
13
  import { Root } from '../Root.ts';
12
14
  import { InstanceNodeStateSpec, InstanceNode } from './InstanceNode.ts';
13
15
  export interface DescendantNodeSharedStateSpec {
@@ -18,14 +20,18 @@ export interface DescendantNodeSharedStateSpec {
18
20
  }
19
21
  export type DescendantNodeStateSpec<Value = never> = InstanceNodeStateSpec<Value> & DescendantNodeSharedStateSpec;
20
22
  export type DescendantNodeDefinition = Extract<AnyNodeDefinition, AnyDescendantNodeDefinition>;
21
- export type DescendantNodeParent<Definition extends DescendantNodeDefinition> = Definition extends LeafNodeDefinition ? GeneralParentNode : Definition extends RepeatInstanceDefinition ? RepeatRange : GeneralParentNode;
22
- export type AnyDescendantNode = DescendantNode<DescendantNodeDefinition, DescendantNodeStateSpec<any>, any>;
23
+ export type AnyDescendantNode = DescendantNode<DescendantNodeDefinition, DescendantNodeStateSpec<any>, any, any>;
23
24
  interface DescendantNodeOptions {
24
25
  readonly computeReference?: Accessor<string>;
25
26
  }
26
- export declare abstract class DescendantNode<Definition extends DescendantNodeDefinition, Spec extends DescendantNodeStateSpec<any>, Child extends AnyChildNode | null = null> extends InstanceNode<Definition, Spec, Child> implements BaseNode, EvaluationContext, SubscribableDependency {
27
- readonly parent: DescendantNodeParent<Definition>;
27
+ export declare abstract class DescendantNode<Definition extends DescendantNodeDefinition, Spec extends DescendantNodeStateSpec<any>, Parent extends AnyParentNode, Child extends AnyChildNode | null = null> extends InstanceNode<Definition, Spec, Parent, Child> implements BaseNode, XFormsXPathPrimaryInstanceDescendantNode, EvaluationContext {
28
+ readonly parent: Parent;
28
29
  readonly definition: Definition;
30
+ /**
31
+ * Partial implementation of {@link isAttached}, used to check whether `this`
32
+ * is present in {@link parent}'s children state.
33
+ */
34
+ protected readonly isAttachedDescendant: Accessor<boolean>;
29
35
  readonly hasReadonlyAncestor: Accessor<boolean>;
30
36
  readonly isSelfReadonly: Accessor<boolean>;
31
37
  readonly isReadonly: Accessor<boolean>;
@@ -33,23 +39,25 @@ export declare abstract class DescendantNode<Definition extends DescendantNodeDe
33
39
  readonly isSelfRelevant: Accessor<boolean>;
34
40
  readonly isRelevant: Accessor<boolean>;
35
41
  readonly isRequired: Accessor<boolean>;
36
- readonly root: Root;
37
- readonly evaluator: XFormsXPathEvaluator;
38
- readonly contextNode: Element;
39
- constructor(parent: DescendantNodeParent<Definition>, definition: Definition, options?: DescendantNodeOptions);
40
- protected createContextNode(parentContextNode: Element, nodeName: string): Element;
41
42
  /**
42
- * Currently expected to be overridden by...
43
+ * WARNING! Ideally, this would be an abstract property, defined by each
44
+ * concrete subclass (or other intermediate abstract classes, where
45
+ * appropriate). Unfortunately it must be assigned here, so it will be present
46
+ * for certain XPath DOM adapter functionality **during** each concrete node's
47
+ * construction.
43
48
  *
44
- * - Repeat range: returns its parent's context node, because it doesn't have
45
- * a node in the primary instance tree.
46
- *
47
- * - Repeat instance: returns its created context node, but overrides handles
48
- * appending behavior separately (for inserting at the end of its parent
49
- * range, or even at an arbitrary index within the range, after instance
50
- * creation is has completed).
49
+ * Those subclasses nevertheless override this same property, assigning the
50
+ * same value, for the purposes of narrowing the XPath node kind semantics
51
+ * appropriate for each node type.
51
52
  */
52
- protected initializeContextNode(parentContextNode: Element, nodeName: string): Element;
53
+ readonly [XPathNodeKindKey]: XFormsXPathPrimaryInstanceDescendantNodeKind;
54
+ readonly root: Root;
55
+ abstract readonly nodeType: InstanceNodeType;
56
+ readonly isAttached: Accessor<boolean>;
57
+ readonly evaluator: EngineXPathEvaluator;
58
+ readonly contextNode: PrimaryInstanceXPathChildNode;
59
+ readonly getActiveLanguage: Accessor<ActiveLanguage>;
60
+ constructor(parent: Parent, definition: Definition, options?: DescendantNodeOptions);
53
61
  /**
54
62
  * @package
55
63
  *