@getodk/xforms-engine 0.2.0 → 0.4.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 (292) hide show
  1. package/dist/client/BaseNode.d.ts +69 -4
  2. package/dist/client/EngineConfig.d.ts +0 -1
  3. package/dist/client/GroupNode.d.ts +4 -3
  4. package/dist/client/ModelValueNode.d.ts +36 -0
  5. package/dist/client/NodeAppearances.d.ts +1 -2
  6. package/dist/client/NoteNode.d.ts +52 -0
  7. package/dist/client/RootNode.d.ts +4 -3
  8. package/dist/client/SelectNode.d.ts +6 -5
  9. package/dist/client/StringNode.d.ts +6 -5
  10. package/dist/client/SubtreeNode.d.ts +3 -2
  11. package/dist/client/TextRange.d.ts +85 -3
  12. package/dist/client/TriggerNode.d.ts +25 -0
  13. package/dist/client/constants.d.ts +8 -0
  14. package/dist/client/hierarchy.d.ts +19 -10
  15. package/dist/client/index.d.ts +0 -1
  16. package/dist/client/node-types.d.ts +3 -1
  17. package/dist/client/{RepeatRangeNode.d.ts → repeat/BaseRepeatRangeNode.d.ts} +18 -18
  18. package/dist/client/{RepeatInstanceNode.d.ts → repeat/RepeatInstanceNode.d.ts} +9 -9
  19. package/dist/client/repeat/RepeatRangeControlledNode.d.ts +18 -0
  20. package/dist/client/repeat/RepeatRangeUncontrolledNode.d.ts +19 -0
  21. package/dist/client/unsupported/RangeNode.d.ts +9 -0
  22. package/dist/client/unsupported/RankNode.d.ts +9 -0
  23. package/dist/client/unsupported/UnsupportedControlNode.d.ts +32 -0
  24. package/dist/client/unsupported/UploadNode.d.ts +9 -0
  25. package/dist/client/validation.d.ts +162 -0
  26. package/dist/index.d.ts +14 -6
  27. package/dist/index.js +39696 -36151
  28. package/dist/index.js.map +1 -1
  29. package/dist/instance/Group.d.ts +3 -2
  30. package/dist/instance/ModelValue.d.ts +39 -0
  31. package/dist/instance/Note.d.ts +41 -0
  32. package/dist/instance/Root.d.ts +5 -4
  33. package/dist/instance/SelectField.d.ts +11 -6
  34. package/dist/instance/StringField.d.ts +12 -7
  35. package/dist/instance/Subtree.d.ts +2 -1
  36. package/dist/instance/TriggerControl.d.ts +40 -0
  37. package/dist/instance/abstract/DescendantNode.d.ts +8 -10
  38. package/dist/instance/abstract/InstanceNode.d.ts +3 -2
  39. package/dist/instance/abstract/UnsupportedControl.d.ts +46 -0
  40. package/dist/instance/children.d.ts +0 -1
  41. package/dist/instance/hierarchy.d.ts +15 -6
  42. package/dist/instance/index.d.ts +0 -1
  43. package/dist/instance/internal-api/EvaluationContext.d.ts +0 -1
  44. package/dist/instance/internal-api/InstanceConfig.d.ts +0 -1
  45. package/dist/instance/internal-api/SubscribableDependency.d.ts +0 -1
  46. package/dist/instance/internal-api/TranslationContext.d.ts +0 -1
  47. package/dist/instance/internal-api/ValidationContext.d.ts +28 -0
  48. package/dist/instance/internal-api/ValueContext.d.ts +3 -4
  49. package/dist/instance/{RepeatRange.d.ts → repeat/BaseRepeatRange.d.ts} +46 -46
  50. package/dist/instance/{RepeatInstance.d.ts → repeat/RepeatInstance.d.ts} +13 -13
  51. package/dist/instance/repeat/RepeatRangeControlled.d.ts +15 -0
  52. package/dist/instance/repeat/RepeatRangeUncontrolled.d.ts +34 -0
  53. package/dist/instance/resource.d.ts +0 -1
  54. package/dist/instance/text/TextChunk.d.ts +0 -1
  55. package/dist/instance/text/TextRange.d.ts +4 -5
  56. package/dist/instance/unsupported/RangeControl.d.ts +4 -0
  57. package/dist/instance/unsupported/RankControl.d.ts +4 -0
  58. package/dist/instance/unsupported/UploadControl.d.ts +4 -0
  59. package/dist/lib/TokenListParser.d.ts +3 -3
  60. package/dist/lib/dom/query.d.ts +1 -2
  61. package/dist/lib/reactivity/createChildrenState.d.ts +0 -1
  62. package/dist/lib/reactivity/createComputedExpression.d.ts +7 -3
  63. package/dist/lib/reactivity/createNoteReadonlyThunk.d.ts +4 -0
  64. package/dist/lib/reactivity/createSelectItems.d.ts +0 -1
  65. package/dist/lib/reactivity/createValueState.d.ts +0 -1
  66. package/dist/lib/reactivity/materializeCurrentStateChildren.d.ts +0 -1
  67. package/dist/lib/reactivity/node-state/createClientState.d.ts +0 -1
  68. package/dist/lib/reactivity/node-state/createCurrentState.d.ts +0 -1
  69. package/dist/lib/reactivity/node-state/createEngineState.d.ts +0 -1
  70. package/dist/lib/reactivity/node-state/createSharedNodeState.d.ts +1 -2
  71. package/dist/lib/reactivity/node-state/createSpecifiedPropertyDescriptor.d.ts +0 -1
  72. package/dist/lib/reactivity/node-state/createSpecifiedState.d.ts +1 -2
  73. package/dist/lib/reactivity/node-state/representations.d.ts +0 -1
  74. package/dist/lib/reactivity/scope.d.ts +0 -1
  75. package/dist/lib/reactivity/text/createFieldHint.d.ts +3 -4
  76. package/dist/lib/reactivity/text/createNodeLabel.d.ts +3 -4
  77. package/dist/lib/reactivity/text/createNoteText.d.ts +24 -0
  78. package/dist/lib/reactivity/text/createTextRange.d.ts +5 -8
  79. package/dist/lib/reactivity/types.d.ts +0 -1
  80. package/dist/lib/reactivity/validation/createAggregatedViolations.d.ts +8 -0
  81. package/dist/lib/reactivity/validation/createValidation.d.ts +17 -0
  82. package/dist/{XFormDOM.d.ts → parse/XFormDOM.d.ts} +1 -2
  83. package/dist/{XFormDataType.d.ts → parse/XFormDataType.d.ts} +2 -4
  84. package/dist/{XFormDefinition.d.ts → parse/XFormDefinition.d.ts} +2 -3
  85. package/dist/{body → parse/body}/BodyDefinition.d.ts +15 -10
  86. package/dist/{body → parse/body}/BodyElementDefinition.d.ts +8 -7
  87. package/dist/{body → parse/body}/RepeatElementDefinition.d.ts +4 -5
  88. package/dist/{body → parse/body}/UnsupportedBodyElementDefinition.d.ts +0 -1
  89. package/dist/{body → parse/body}/appearance/inputAppearanceParser.d.ts +1 -2
  90. package/dist/{body → parse/body}/appearance/selectAppearanceParser.d.ts +1 -2
  91. package/dist/{body → parse/body}/appearance/structureElementAppearanceParser.d.ts +1 -2
  92. package/dist/parse/body/appearance/unknownAppearanceParser.d.ts +3 -0
  93. package/dist/{body → parse/body}/control/ControlDefinition.d.ts +3 -4
  94. package/dist/{body → parse/body}/control/InputDefinition.d.ts +1 -2
  95. package/dist/parse/body/control/RangeControlDefinition.d.ts +11 -0
  96. package/dist/parse/body/control/RankControlDefinition.d.ts +11 -0
  97. package/dist/parse/body/control/TriggerControlDefinition.d.ts +11 -0
  98. package/dist/parse/body/control/UploadControlDefinition.d.ts +11 -0
  99. package/dist/{body → parse/body}/control/select/ItemDefinition.d.ts +3 -4
  100. package/dist/{body → parse/body}/control/select/ItemsetDefinition.d.ts +7 -7
  101. package/dist/{body → parse/body}/control/select/ItemsetNodesetContext.d.ts +2 -3
  102. package/dist/{body → parse/body}/control/select/SelectDefinition.d.ts +3 -12
  103. package/dist/{body → parse/body}/group/BaseGroupDefinition.d.ts +3 -5
  104. package/dist/{body → parse/body}/group/LogicalGroupDefinition.d.ts +0 -1
  105. package/dist/{body → parse/body}/group/PresentationGroupDefinition.d.ts +1 -2
  106. package/dist/{body → parse/body}/group/StructuralGroupDefinition.d.ts +0 -1
  107. package/dist/{model/BindComputation.d.ts → parse/expression/BindComputationExpression.d.ts} +5 -6
  108. package/dist/{body/control/select → parse/expression}/ItemsetNodesetExpression.d.ts +2 -3
  109. package/dist/{body/control/select → parse/expression}/ItemsetValueExpression.d.ts +2 -3
  110. package/dist/parse/expression/RepeatCountControlExpression.d.ts +18 -0
  111. package/dist/parse/expression/TextLiteralExpression.d.ts +9 -0
  112. package/dist/parse/expression/TextOutputExpression.d.ts +7 -0
  113. package/dist/parse/expression/TextReferenceExpression.d.ts +7 -0
  114. package/dist/parse/expression/TextTranslationExpression.d.ts +8 -0
  115. package/dist/{expression → parse/expression/abstract}/DependencyContext.d.ts +0 -1
  116. package/dist/{expression → parse/expression/abstract}/DependentExpression.d.ts +13 -10
  117. package/dist/parse/expression/abstract/TextChunkExpression.d.ts +17 -0
  118. package/dist/parse/model/BindDefinition.d.ts +39 -0
  119. package/dist/{model → parse/model}/BindElement.d.ts +1 -0
  120. package/dist/{model → parse/model}/DescendentNodeDefinition.d.ts +0 -1
  121. package/dist/{model/ValueNodeDefinition.d.ts → parse/model/LeafNodeDefinition.d.ts} +3 -4
  122. package/dist/{model → parse/model}/ModelBindMap.d.ts +0 -1
  123. package/dist/{model → parse/model}/ModelDefinition.d.ts +1 -2
  124. package/dist/{model → parse/model}/NodeDefinition.d.ts +8 -9
  125. package/dist/parse/model/NoteNodeDefinition.d.ts +30 -0
  126. package/dist/{model → parse/model}/RepeatInstanceDefinition.d.ts +3 -4
  127. package/dist/{model → parse/model}/RepeatRangeDefinition.d.ts +14 -5
  128. package/dist/{model → parse/model}/RepeatTemplateDefinition.d.ts +2 -3
  129. package/dist/{model → parse/model}/RootDefinition.d.ts +2 -3
  130. package/dist/{model → parse/model}/SubtreeDefinition.d.ts +1 -2
  131. package/dist/parse/text/HintDefinition.d.ts +8 -0
  132. package/dist/parse/text/ItemLabelDefinition.d.ts +8 -0
  133. package/dist/parse/text/ItemsetLabelDefinition.d.ts +12 -0
  134. package/dist/parse/text/LabelDefinition.d.ts +14 -0
  135. package/dist/parse/text/MessageDefinition.d.ts +14 -0
  136. package/dist/parse/text/abstract/TextElementDefinition.d.ts +22 -0
  137. package/dist/parse/text/abstract/TextRangeDefinition.d.ts +34 -0
  138. package/dist/parse/xpath/dependency-analysis.d.ts +40 -0
  139. package/dist/parse/xpath/path-resolution.d.ts +69 -0
  140. package/dist/parse/xpath/predicate-analysis.d.ts +29 -0
  141. package/dist/parse/xpath/reference-parsing.d.ts +17 -0
  142. package/dist/parse/xpath/semantic-analysis.d.ts +97 -0
  143. package/dist/parse/xpath/syntax-traversal.d.ts +68 -0
  144. package/dist/solid.js +8745 -5186
  145. package/dist/solid.js.map +1 -1
  146. package/package.json +15 -16
  147. package/src/client/BaseNode.ts +74 -8
  148. package/src/client/GroupNode.ts +4 -2
  149. package/src/client/ModelValueNode.ts +40 -0
  150. package/src/client/NodeAppearances.ts +1 -1
  151. package/src/client/NoteNode.ts +74 -0
  152. package/src/client/README.md +1 -0
  153. package/src/client/RootNode.ts +4 -2
  154. package/src/client/SelectNode.ts +6 -4
  155. package/src/client/StringNode.ts +6 -4
  156. package/src/client/SubtreeNode.ts +3 -1
  157. package/src/client/TextRange.ts +98 -2
  158. package/src/client/TriggerNode.ts +29 -0
  159. package/src/client/constants.ts +10 -0
  160. package/src/client/hierarchy.ts +43 -15
  161. package/src/client/node-types.ts +17 -2
  162. package/src/client/{RepeatRangeNode.ts → repeat/BaseRepeatRangeNode.ts} +18 -19
  163. package/src/client/{RepeatInstanceNode.ts → repeat/RepeatInstanceNode.ts} +10 -8
  164. package/src/client/repeat/RepeatRangeControlledNode.ts +20 -0
  165. package/src/client/repeat/RepeatRangeUncontrolledNode.ts +21 -0
  166. package/src/client/unsupported/RangeNode.ts +14 -0
  167. package/src/client/unsupported/RankNode.ts +14 -0
  168. package/src/client/unsupported/UnsupportedControlNode.ts +40 -0
  169. package/src/client/unsupported/UploadNode.ts +14 -0
  170. package/src/client/validation.ts +199 -0
  171. package/src/index.ts +21 -9
  172. package/src/instance/Group.ts +10 -4
  173. package/src/instance/ModelValue.ts +104 -0
  174. package/src/instance/Note.ts +142 -0
  175. package/src/instance/Root.ts +16 -6
  176. package/src/instance/SelectField.ts +29 -7
  177. package/src/instance/StringField.ts +36 -10
  178. package/src/instance/Subtree.ts +9 -3
  179. package/src/instance/TriggerControl.ts +134 -0
  180. package/src/instance/abstract/DescendantNode.ts +9 -10
  181. package/src/instance/abstract/InstanceNode.ts +29 -7
  182. package/src/instance/abstract/UnsupportedControl.ts +151 -0
  183. package/src/instance/children.ts +113 -16
  184. package/src/instance/hierarchy.ts +42 -5
  185. package/src/instance/index.ts +1 -1
  186. package/src/instance/internal-api/EvaluationContext.ts +1 -1
  187. package/src/instance/internal-api/ValidationContext.ts +32 -0
  188. package/src/instance/internal-api/ValueContext.ts +3 -3
  189. package/src/instance/{RepeatRange.ts → repeat/BaseRepeatRange.ts} +114 -99
  190. package/src/instance/{RepeatInstance.ts → repeat/RepeatInstance.ts} +27 -22
  191. package/src/instance/repeat/RepeatRangeControlled.ts +82 -0
  192. package/src/instance/repeat/RepeatRangeUncontrolled.ts +67 -0
  193. package/src/instance/text/TextRange.ts +10 -4
  194. package/src/instance/unsupported/RangeControl.ts +5 -0
  195. package/src/instance/unsupported/RankControl.ts +5 -0
  196. package/src/instance/unsupported/UploadControl.ts +5 -0
  197. package/src/lib/TokenListParser.ts +11 -7
  198. package/src/lib/dom/query.ts +1 -1
  199. package/src/lib/reactivity/createComputedExpression.ts +25 -27
  200. package/src/lib/reactivity/createNoteReadonlyThunk.ts +33 -0
  201. package/src/lib/reactivity/createSelectItems.ts +23 -16
  202. package/src/lib/reactivity/createValueState.ts +3 -3
  203. package/src/lib/reactivity/node-state/createSharedNodeState.ts +1 -1
  204. package/src/lib/reactivity/node-state/createSpecifiedState.ts +1 -1
  205. package/src/lib/reactivity/text/createFieldHint.ts +9 -7
  206. package/src/lib/reactivity/text/createNodeLabel.ts +8 -6
  207. package/src/lib/reactivity/text/createNoteText.ts +72 -0
  208. package/src/lib/reactivity/text/createTextRange.ts +17 -90
  209. package/src/lib/reactivity/validation/createAggregatedViolations.ts +75 -0
  210. package/src/lib/reactivity/validation/createValidation.ts +196 -0
  211. package/src/{XFormDataType.ts → parse/XFormDataType.ts} +1 -3
  212. package/src/{XFormDefinition.ts → parse/XFormDefinition.ts} +2 -2
  213. package/src/{body → parse/body}/BodyDefinition.ts +44 -27
  214. package/src/{body → parse/body}/BodyElementDefinition.ts +13 -6
  215. package/src/{body → parse/body}/RepeatElementDefinition.ts +10 -20
  216. package/src/{body → parse/body}/appearance/inputAppearanceParser.ts +1 -1
  217. package/src/{body → parse/body}/appearance/selectAppearanceParser.ts +1 -1
  218. package/src/{body → parse/body}/appearance/structureElementAppearanceParser.ts +1 -1
  219. package/src/parse/body/appearance/unknownAppearanceParser.ts +5 -0
  220. package/src/{body → parse/body}/control/ControlDefinition.ts +5 -4
  221. package/src/parse/body/control/RangeControlDefinition.ts +26 -0
  222. package/src/parse/body/control/RankControlDefinition.ts +27 -0
  223. package/src/parse/body/control/TriggerControlDefinition.ts +26 -0
  224. package/src/parse/body/control/UploadControlDefinition.ts +26 -0
  225. package/src/{body → parse/body}/control/select/ItemDefinition.ts +4 -4
  226. package/src/parse/body/control/select/ItemsetDefinition.ts +53 -0
  227. package/src/{body → parse/body}/control/select/ItemsetNodesetContext.ts +2 -2
  228. package/src/{body → parse/body}/control/select/SelectDefinition.ts +3 -11
  229. package/src/{body → parse/body}/group/BaseGroupDefinition.ts +11 -21
  230. package/src/{body → parse/body}/group/PresentationGroupDefinition.ts +1 -1
  231. package/src/{model/BindComputation.ts → parse/expression/BindComputationExpression.ts} +8 -12
  232. package/src/parse/expression/ItemsetNodesetExpression.ts +8 -0
  233. package/src/{body/control/select → parse/expression}/ItemsetValueExpression.ts +2 -2
  234. package/src/parse/expression/RepeatCountControlExpression.ts +44 -0
  235. package/src/parse/expression/TextLiteralExpression.ts +19 -0
  236. package/src/parse/expression/TextOutputExpression.ts +25 -0
  237. package/src/parse/expression/TextReferenceExpression.ts +14 -0
  238. package/src/parse/expression/TextTranslationExpression.ts +38 -0
  239. package/src/{expression → parse/expression/abstract}/DependentExpression.ts +46 -28
  240. package/src/parse/expression/abstract/TextChunkExpression.ts +38 -0
  241. package/src/{model → parse/model}/BindDefinition.ts +30 -27
  242. package/src/{model → parse/model}/BindElement.ts +1 -0
  243. package/src/{model/ValueNodeDefinition.ts → parse/model/LeafNodeDefinition.ts} +4 -4
  244. package/src/{model → parse/model}/ModelBindMap.ts +4 -0
  245. package/src/{model → parse/model}/NodeDefinition.ts +12 -12
  246. package/src/parse/model/NoteNodeDefinition.ts +70 -0
  247. package/src/{model → parse/model}/RepeatInstanceDefinition.ts +2 -2
  248. package/src/parse/model/RepeatRangeDefinition.ts +94 -0
  249. package/src/{model → parse/model}/RootDefinition.ts +8 -4
  250. package/src/parse/text/HintDefinition.ts +25 -0
  251. package/src/parse/text/ItemLabelDefinition.ts +25 -0
  252. package/src/parse/text/ItemsetLabelDefinition.ts +44 -0
  253. package/src/parse/text/LabelDefinition.ts +61 -0
  254. package/src/parse/text/MessageDefinition.ts +49 -0
  255. package/src/parse/text/abstract/TextElementDefinition.ts +71 -0
  256. package/src/parse/text/abstract/TextRangeDefinition.ts +70 -0
  257. package/src/parse/xpath/dependency-analysis.ts +105 -0
  258. package/src/parse/xpath/path-resolution.ts +475 -0
  259. package/src/parse/xpath/predicate-analysis.ts +61 -0
  260. package/src/parse/xpath/reference-parsing.ts +90 -0
  261. package/src/parse/xpath/semantic-analysis.ts +466 -0
  262. package/src/parse/xpath/syntax-traversal.ts +129 -0
  263. package/dist/body/text/HintDefinition.d.ts +0 -11
  264. package/dist/body/text/LabelDefinition.d.ts +0 -22
  265. package/dist/body/text/TextElementDefinition.d.ts +0 -33
  266. package/dist/body/text/TextElementOutputPart.d.ts +0 -13
  267. package/dist/body/text/TextElementPart.d.ts +0 -13
  268. package/dist/body/text/TextElementReferencePart.d.ts +0 -7
  269. package/dist/body/text/TextElementStaticPart.d.ts +0 -7
  270. package/dist/lib/xpath/analysis.d.ts +0 -23
  271. package/dist/model/BindDefinition.d.ts +0 -32
  272. package/src/body/control/select/ItemsetDefinition.ts +0 -36
  273. package/src/body/control/select/ItemsetNodesetExpression.ts +0 -8
  274. package/src/body/text/HintDefinition.ts +0 -26
  275. package/src/body/text/LabelDefinition.ts +0 -68
  276. package/src/body/text/TextElementDefinition.ts +0 -97
  277. package/src/body/text/TextElementOutputPart.ts +0 -27
  278. package/src/body/text/TextElementPart.ts +0 -31
  279. package/src/body/text/TextElementReferencePart.ts +0 -21
  280. package/src/body/text/TextElementStaticPart.ts +0 -26
  281. package/src/lib/xpath/analysis.ts +0 -241
  282. package/src/model/RepeatRangeDefinition.ts +0 -53
  283. package/src/{XFormDOM.ts → parse/XFormDOM.ts} +0 -0
  284. package/src/{body → parse/body}/UnsupportedBodyElementDefinition.ts +0 -0
  285. package/src/{body → parse/body}/control/InputDefinition.ts +1 -1
  286. /package/src/{body → parse/body}/group/LogicalGroupDefinition.ts +0 -0
  287. /package/src/{body → parse/body}/group/StructuralGroupDefinition.ts +0 -0
  288. /package/src/{expression → parse/expression/abstract}/DependencyContext.ts +0 -0
  289. /package/src/{model → parse/model}/DescendentNodeDefinition.ts +0 -0
  290. /package/src/{model → parse/model}/ModelDefinition.ts +0 -0
  291. /package/src/{model → parse/model}/RepeatTemplateDefinition.ts +0 -0
  292. /package/src/{model → parse/model}/SubtreeDefinition.ts +0 -0
@@ -0,0 +1,134 @@
1
+ import type { Accessor } from 'solid-js';
2
+ import type { TextRange } from '../client/TextRange.ts';
3
+ import type { TriggerNode, TriggerNodeDefinition } from '../client/TriggerNode.ts';
4
+ import type { AnyViolation, LeafNodeValidationState } from '../client/validation.ts';
5
+ import { createValueState } from '../lib/reactivity/createValueState.ts';
6
+ import type { CurrentState } from '../lib/reactivity/node-state/createCurrentState.ts';
7
+ import type { EngineState } from '../lib/reactivity/node-state/createEngineState.ts';
8
+ import type { SharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
9
+ import { createSharedNodeState } from '../lib/reactivity/node-state/createSharedNodeState.ts';
10
+ import { createFieldHint } from '../lib/reactivity/text/createFieldHint.ts';
11
+ import { createNodeLabel } from '../lib/reactivity/text/createNodeLabel.ts';
12
+ import type { SimpleAtomicState } from '../lib/reactivity/types.ts';
13
+ import type { SharedValidationState } from '../lib/reactivity/validation/createValidation.ts';
14
+ import { createValidationState } from '../lib/reactivity/validation/createValidation.ts';
15
+ import type { UnknownAppearanceDefinition } from '../parse/body/appearance/unknownAppearanceParser.ts';
16
+ import type { Root } from './Root.ts';
17
+ import type { DescendantNodeStateSpec } from './abstract/DescendantNode.ts';
18
+ import { DescendantNode } from './abstract/DescendantNode.ts';
19
+ import type { GeneralParentNode } from './hierarchy.ts';
20
+ import type { EvaluationContext } from './internal-api/EvaluationContext.ts';
21
+ import type { SubscribableDependency } from './internal-api/SubscribableDependency.ts';
22
+ import type { ValidationContext } from './internal-api/ValidationContext.ts';
23
+ import type { ValueContext } from './internal-api/ValueContext.ts';
24
+
25
+ interface TriggerControlStateSpec extends DescendantNodeStateSpec<boolean> {
26
+ readonly label: Accessor<TextRange<'label'> | null>;
27
+ readonly hint: Accessor<TextRange<'hint'> | null>;
28
+ readonly children: null;
29
+ readonly value: SimpleAtomicState<boolean>;
30
+ readonly valueOptions: null;
31
+ }
32
+
33
+ const TRIGGER_ASSIGNED_VALUE = 'OK';
34
+
35
+ export class TriggerControl
36
+ extends DescendantNode<TriggerNodeDefinition, TriggerControlStateSpec, null>
37
+ implements
38
+ TriggerNode,
39
+ EvaluationContext,
40
+ SubscribableDependency,
41
+ ValidationContext,
42
+ ValueContext<boolean>
43
+ {
44
+ private readonly validation: SharedValidationState;
45
+ protected readonly state: SharedNodeState<TriggerControlStateSpec>;
46
+
47
+ // InstanceNode
48
+ protected engineState: EngineState<TriggerControlStateSpec>;
49
+
50
+ // TriggerNode
51
+ readonly nodeType = 'trigger';
52
+ readonly appearances: UnknownAppearanceDefinition;
53
+ readonly currentState: CurrentState<TriggerControlStateSpec>;
54
+
55
+ get validationState(): LeafNodeValidationState {
56
+ return this.validation.currentState;
57
+ }
58
+
59
+ // ValueContext
60
+ readonly encodeValue: (runtimeValue: boolean) => string;
61
+ readonly decodeValue: (instanceValue: string) => boolean;
62
+
63
+ constructor(parent: GeneralParentNode, definition: TriggerNodeDefinition) {
64
+ super(parent, definition);
65
+
66
+ this.appearances = definition.bodyElement.appearances;
67
+ this.encodeValue = (runtimeValue) => {
68
+ return runtimeValue ? TRIGGER_ASSIGNED_VALUE : '';
69
+ };
70
+ this.decodeValue = (instanceValue) => {
71
+ const value = instanceValue.trim();
72
+
73
+ switch (value) {
74
+ case TRIGGER_ASSIGNED_VALUE:
75
+ return true;
76
+
77
+ case '':
78
+ return false;
79
+
80
+ // TODO (robustness principle): Case insensitivity? Handle
81
+ // XPath-semantic booleans?? Other known/common equivalents?
82
+ default:
83
+ throw new Error(`Unexpected trigger value: ${value}`);
84
+ }
85
+ };
86
+
87
+ const sharedStateOptions = {
88
+ clientStateFactory: this.engineConfig.stateFactory,
89
+ };
90
+
91
+ const state = createSharedNodeState(
92
+ this.scope,
93
+ {
94
+ reference: this.contextReference,
95
+ readonly: this.isReadonly,
96
+ relevant: this.isRelevant,
97
+ required: this.isRequired,
98
+
99
+ label: createNodeLabel(this, definition),
100
+ hint: createFieldHint(this, definition),
101
+ children: null,
102
+ valueOptions: null,
103
+ value: createValueState(this),
104
+ },
105
+ sharedStateOptions
106
+ );
107
+
108
+ this.state = state;
109
+ this.engineState = state.engineState;
110
+ this.currentState = state.currentState;
111
+ this.validation = createValidationState(this, sharedStateOptions);
112
+ }
113
+
114
+ // ValidationContext
115
+ getViolation(): AnyViolation | null {
116
+ return this.validation.engineState.violation;
117
+ }
118
+
119
+ isBlank(): boolean {
120
+ return this.engineState.value == null;
121
+ }
122
+
123
+ // InstanceNode
124
+ getChildren(): readonly [] {
125
+ return [];
126
+ }
127
+
128
+ // TriggerNode
129
+ setValue(value: boolean): Root {
130
+ this.state.setProperty('value', value);
131
+
132
+ return this.root;
133
+ }
134
+ }
@@ -3,16 +3,15 @@ import type { Accessor } from 'solid-js';
3
3
  import type { BaseNode } from '../../client/BaseNode.ts';
4
4
  import { createComputedExpression } from '../../lib/reactivity/createComputedExpression.ts';
5
5
  import type { ReactiveScope } from '../../lib/reactivity/scope.ts';
6
- import type { AnyDescendantNodeDefinition } from '../../model/DescendentNodeDefinition.ts';
7
- import type { AnyNodeDefinition } from '../../model/NodeDefinition.ts';
8
- import type { RepeatInstanceDefinition } from '../../model/RepeatInstanceDefinition.ts';
9
- import type { ValueNodeDefinition } from '../../model/ValueNodeDefinition.ts';
10
- import type { RepeatInstance } from '../RepeatInstance.ts';
11
- import type { RepeatRange } from '../RepeatRange.ts';
12
- import type { Root } from '../Root.ts';
13
- import type { AnyChildNode, GeneralParentNode } from '../hierarchy.ts';
6
+ import type { AnyDescendantNodeDefinition } from '../../parse/model/DescendentNodeDefinition.ts';
7
+ import type { LeafNodeDefinition } from '../../parse/model/LeafNodeDefinition.ts';
8
+ import type { AnyNodeDefinition } from '../../parse/model/NodeDefinition.ts';
9
+ import type { RepeatInstanceDefinition } from '../../parse/model/RepeatInstanceDefinition.ts';
10
+ import type { AnyChildNode, GeneralParentNode, RepeatRange } from '../hierarchy.ts';
14
11
  import type { EvaluationContext } from '../internal-api/EvaluationContext.ts';
15
12
  import type { SubscribableDependency } from '../internal-api/SubscribableDependency.ts';
13
+ import type { RepeatInstance } from '../repeat/RepeatInstance.ts';
14
+ import type { Root } from '../Root.ts';
16
15
  import type { InstanceNodeStateSpec } from './InstanceNode.ts';
17
16
  import { InstanceNode } from './InstanceNode.ts';
18
17
 
@@ -37,7 +36,7 @@ export type DescendantNodeDefinition = Extract<
37
36
 
38
37
  // prettier-ignore
39
38
  export type DescendantNodeParent<Definition extends DescendantNodeDefinition> =
40
- Definition extends ValueNodeDefinition
39
+ Definition extends LeafNodeDefinition
41
40
  ? GeneralParentNode
42
41
  : Definition extends RepeatInstanceDefinition
43
42
  ? RepeatRange
@@ -96,7 +95,7 @@ export abstract class DescendantNode<
96
95
  return this.isSelfRelevant();
97
96
  };
98
97
 
99
- protected readonly isRequired: Accessor<boolean>;
98
+ readonly isRequired: Accessor<boolean>;
100
99
 
101
100
  readonly root: Root;
102
101
  readonly evaluator: XFormsXPathEvaluator;
@@ -3,6 +3,7 @@ import type { Accessor, Signal } from 'solid-js';
3
3
  import type { BaseNode } from '../../client/BaseNode.ts';
4
4
  import type { NodeAppearances } from '../../client/NodeAppearances.ts';
5
5
  import type { InstanceNodeType } from '../../client/node-types.ts';
6
+ import type { NodeValidationState } from '../../client/validation.ts';
6
7
  import type { TextRange } from '../../index.ts';
7
8
  import type { MaterializedChildren } from '../../lib/reactivity/materializeCurrentStateChildren.ts';
8
9
  import type { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
@@ -11,7 +12,7 @@ import type { SharedNodeState } from '../../lib/reactivity/node-state/createShar
11
12
  import type { ReactiveScope } from '../../lib/reactivity/scope.ts';
12
13
  import { createReactiveScope } from '../../lib/reactivity/scope.ts';
13
14
  import type { SimpleAtomicState } from '../../lib/reactivity/types.ts';
14
- import type { AnyNodeDefinition } from '../../model/NodeDefinition.ts';
15
+ import type { AnyNodeDefinition } from '../../parse/model/NodeDefinition.ts';
15
16
  import type { Root } from '../Root.ts';
16
17
  import type { AnyChildNode, AnyNode, AnyParentNode } from '../hierarchy.ts';
17
18
  import type { NodeID } from '../identity.ts';
@@ -117,6 +118,8 @@ export abstract class InstanceNode<
117
118
 
118
119
  abstract readonly currentState: InstanceNodeCurrentState<Spec, Child>;
119
120
 
121
+ abstract readonly validationState: NodeValidationState;
122
+
120
123
  // BaseNode: structural
121
124
  abstract readonly root: Root;
122
125
 
@@ -230,11 +233,30 @@ export abstract class InstanceNode<
230
233
  subscribe(): void {
231
234
  const { engineState } = this;
232
235
 
233
- if (engineState.relevant) {
234
- engineState.reference;
235
- engineState.relevant;
236
- engineState.children;
237
- engineState.value;
238
- }
236
+ // Note: a previous iteration of this default implementation guarded these
237
+ // reactive reads behind a relevance check. This caused timing issues for
238
+ // downstream computations referencing a node whose relevance changes.
239
+ //
240
+ // That original guard was intended to reduce excessive redundant
241
+ // computations, and so removing it is intended as a naive compromise of
242
+ // performance for obvious correctness improvements.
243
+ //
244
+ // This compromise, like many others, will be moot if/when we decide to
245
+ // decouple XPath evaluation from the browser/XML DOM: reactive
246
+ // subscriptions would be established by evaluation of the expressions
247
+ // themselves (as they traverse instance state and access values), rather
248
+ // than this safer/less focused approach.
249
+
250
+ // TODO: typescript-eslint is right to object to these! We should _at least_
251
+ // make internal reactive reads obvious, i.e. function calls.
252
+
253
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
254
+ engineState.reference;
255
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
256
+ engineState.relevant;
257
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
258
+ engineState.children;
259
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
260
+ engineState.value;
239
261
  }
240
262
  }
@@ -0,0 +1,151 @@
1
+ import { identity } from '@getodk/common/lib/identity.ts';
2
+ import type { Accessor } from 'solid-js';
3
+ import type { UnsupportedControlNodeType } from '../../client/node-types.ts';
4
+ import type { TextRange } from '../../client/TextRange.ts';
5
+ import type {
6
+ UnsupportedControlDefinition,
7
+ UnsupportedControlElementDefinition,
8
+ UnsupportedControlNode,
9
+ } from '../../client/unsupported/UnsupportedControlNode.ts';
10
+ import type { AnyViolation, LeafNodeValidationState } from '../../client/validation.ts';
11
+ import { createValueState } from '../../lib/reactivity/createValueState.ts';
12
+ import type { CurrentState } from '../../lib/reactivity/node-state/createCurrentState.ts';
13
+ import type { EngineState } from '../../lib/reactivity/node-state/createEngineState.ts';
14
+ import {
15
+ createSharedNodeState,
16
+ type SharedNodeState,
17
+ } from '../../lib/reactivity/node-state/createSharedNodeState.ts';
18
+ import { createFieldHint } from '../../lib/reactivity/text/createFieldHint.ts';
19
+ import { createNodeLabel } from '../../lib/reactivity/text/createNodeLabel.ts';
20
+ import type { SimpleAtomicState } from '../../lib/reactivity/types.ts';
21
+ import {
22
+ createValidationState,
23
+ type SharedValidationState,
24
+ } from '../../lib/reactivity/validation/createValidation.ts';
25
+ import type { UnknownAppearanceDefinition } from '../../parse/body/appearance/unknownAppearanceParser.ts';
26
+ import type { GeneralParentNode } from '../hierarchy.ts';
27
+ import type { EvaluationContext } from '../internal-api/EvaluationContext.ts';
28
+ import type { SubscribableDependency } from '../internal-api/SubscribableDependency.ts';
29
+ import type { ValidationContext } from '../internal-api/ValidationContext.ts';
30
+ import type { ValueContext } from '../internal-api/ValueContext.ts';
31
+ import { DescendantNode, type DescendantNodeStateSpec } from './DescendantNode.ts';
32
+
33
+ type TypedUnsupportedControlElementDefinition<Type extends UnsupportedControlNodeType> = Extract<
34
+ UnsupportedControlElementDefinition,
35
+ { readonly type: Type }
36
+ >;
37
+
38
+ interface TypedUnsupportedControlDefinition<Type extends UnsupportedControlNodeType>
39
+ extends UnsupportedControlDefinition {
40
+ readonly bodyElement: TypedUnsupportedControlElementDefinition<Type>;
41
+ }
42
+
43
+ interface UnsupportedControlStateSpec extends DescendantNodeStateSpec<unknown> {
44
+ readonly label: Accessor<TextRange<'label'> | null>;
45
+ readonly hint: Accessor<TextRange<'hint'> | null>;
46
+ readonly children: null;
47
+ readonly value: SimpleAtomicState<unknown>;
48
+ readonly valueOptions: never;
49
+ }
50
+
51
+ class UnsupportedControlValueEncodeError extends Error {
52
+ constructor(type: UnsupportedControlNodeType) {
53
+ super(`Cannot encode state for node (type: ${type}) - not implemented`);
54
+ }
55
+ }
56
+
57
+ class UnsupportedControlWriteError extends Error {
58
+ constructor(type: UnsupportedControlNodeType) {
59
+ super(`Cannot write state for node (type: ${type}) - not implemented`);
60
+ }
61
+ }
62
+
63
+ export abstract class UnsupportedControl<Type extends UnsupportedControlNodeType>
64
+ extends DescendantNode<TypedUnsupportedControlDefinition<Type>, UnsupportedControlStateSpec, null>
65
+ implements
66
+ UnsupportedControlNode,
67
+ EvaluationContext,
68
+ SubscribableDependency,
69
+ ValidationContext,
70
+ ValueContext<unknown>
71
+ {
72
+ private readonly validation: SharedValidationState;
73
+ protected readonly state: SharedNodeState<UnsupportedControlStateSpec>;
74
+
75
+ // InstanceNode
76
+ protected readonly engineState: EngineState<UnsupportedControlStateSpec>;
77
+
78
+ // UnsupportedControlNode
79
+ abstract override readonly nodeType: Type;
80
+
81
+ readonly appearances: UnknownAppearanceDefinition;
82
+ readonly currentState: CurrentState<UnsupportedControlStateSpec>;
83
+
84
+ get validationState(): LeafNodeValidationState {
85
+ return this.validation.currentState;
86
+ }
87
+
88
+ // ValueContext
89
+ readonly encodeValue = (instanceValue: unknown): string => {
90
+ const encoded = instanceValue;
91
+
92
+ if (typeof encoded === 'string') {
93
+ return encoded;
94
+ }
95
+
96
+ throw new UnsupportedControlValueEncodeError(this.nodeType);
97
+ };
98
+
99
+ readonly decodeValue = (instanceValue: unknown): unknown => {
100
+ return identity(instanceValue);
101
+ };
102
+
103
+ constructor(parent: GeneralParentNode, definition: TypedUnsupportedControlDefinition<Type>) {
104
+ super(parent, definition);
105
+
106
+ this.appearances = definition.bodyElement.appearances;
107
+
108
+ const sharedStateOptions = {
109
+ clientStateFactory: this.engineConfig.stateFactory,
110
+ };
111
+
112
+ const stateSpec: UnsupportedControlStateSpec = {
113
+ reference: this.contextReference,
114
+ readonly: this.isReadonly,
115
+ relevant: this.isRelevant,
116
+ required: this.isRequired,
117
+
118
+ label: createNodeLabel(this, definition),
119
+ hint: createFieldHint(this, definition),
120
+ children: null,
121
+ valueOptions: null as never,
122
+ value: createValueState<unknown>(this),
123
+ };
124
+
125
+ const state = createSharedNodeState(this.scope, stateSpec, sharedStateOptions);
126
+
127
+ this.state = state;
128
+ this.engineState = state.engineState;
129
+ this.currentState = state.currentState;
130
+ this.validation = createValidationState(this, sharedStateOptions);
131
+ }
132
+
133
+ // ValidationContext
134
+ getViolation(): AnyViolation | null {
135
+ return this.validation.engineState.violation;
136
+ }
137
+
138
+ isBlank(): boolean {
139
+ return this.engineState.value === '';
140
+ }
141
+
142
+ // InstanceNode
143
+ getChildren(): readonly [] {
144
+ return [];
145
+ }
146
+
147
+ // UnsupportedControlNode
148
+ setValue(_: never): never {
149
+ throw new UnsupportedControlWriteError(this.nodeType);
150
+ }
151
+ }
@@ -1,15 +1,29 @@
1
1
  import { UnreachableError } from '@getodk/common/lib/error/UnreachableError.ts';
2
2
  import type { GroupDefinition } from '../client/GroupNode.ts';
3
3
  import type { SubtreeDefinition } from '../client/SubtreeNode.ts';
4
- import type { SubtreeDefinition as ModelSubtreeDefinition } from '../model/SubtreeDefinition.ts';
4
+ import type { TriggerNodeDefinition } from '../client/TriggerNode.ts';
5
+ import type { RangeNodeDefinition } from '../client/unsupported/RangeNode.ts';
6
+ import type { RankNodeDefinition } from '../client/unsupported/RankNode.ts';
7
+ import type { UnsupportedControlDefinition } from '../client/unsupported/UnsupportedControlNode.ts';
8
+ import type { UploadNodeDefinition } from '../client/unsupported/UploadNode.ts';
9
+ import type { LeafNodeDefinition } from '../parse/model/LeafNodeDefinition.ts';
10
+ import { NoteNodeDefinition } from '../parse/model/NoteNodeDefinition.ts';
11
+ import type { SubtreeDefinition as ModelSubtreeDefinition } from '../parse/model/SubtreeDefinition.ts';
5
12
  import { Group } from './Group.ts';
6
- import { RepeatRange } from './RepeatRange.ts';
13
+ import type { GeneralChildNode, GeneralParentNode } from './hierarchy.ts';
14
+ import { ModelValue, type ModelValueDefinition } from './ModelValue.ts';
15
+ import { Note } from './Note.ts';
16
+ import { RepeatRangeControlled } from './repeat/RepeatRangeControlled.ts';
17
+ import { RepeatRangeUncontrolled } from './repeat/RepeatRangeUncontrolled.ts';
7
18
  import type { SelectFieldDefinition } from './SelectField.ts';
8
19
  import { SelectField } from './SelectField.ts';
9
20
  import type { StringFieldDefinition } from './StringField.ts';
10
21
  import { StringField } from './StringField.ts';
11
22
  import { Subtree } from './Subtree.ts';
12
- import type { GeneralChildNode, GeneralParentNode } from './hierarchy.ts';
23
+ import { TriggerControl } from './TriggerControl.ts';
24
+ import { RangeControl } from './unsupported/RangeControl.ts';
25
+ import { RankControl } from './unsupported/RankControl.ts';
26
+ import { UploadControl } from './unsupported/UploadControl.ts';
13
27
 
14
28
  const isSubtreeDefinition = (
15
29
  definition: ModelSubtreeDefinition
@@ -17,6 +31,63 @@ const isSubtreeDefinition = (
17
31
  return definition.bodyElement == null;
18
32
  };
19
33
 
34
+ type AnyUnsupportedControlDefinition =
35
+ | RangeNodeDefinition
36
+ | RankNodeDefinition
37
+ | UploadNodeDefinition;
38
+
39
+ // prettier-ignore
40
+ type ControlNodeDefinition =
41
+ // eslint-disable-next-line @typescript-eslint/sort-type-constituents
42
+ | SelectFieldDefinition
43
+ | StringFieldDefinition
44
+ | TriggerNodeDefinition
45
+ | AnyUnsupportedControlDefinition;
46
+
47
+ type AnyLeafNodeDefinition = ControlNodeDefinition | ModelValueDefinition;
48
+
49
+ const isModelValueDefinition = (
50
+ definition: LeafNodeDefinition
51
+ ): definition is ModelValueDefinition => {
52
+ return definition.bodyElement == null;
53
+ };
54
+
55
+ const isStringFieldDefinition = (
56
+ definition: ControlNodeDefinition
57
+ ): definition is StringFieldDefinition => {
58
+ return definition.bodyElement.type === 'input';
59
+ };
60
+
61
+ const isSelectFieldDefinition = (
62
+ definition: ControlNodeDefinition
63
+ ): definition is SelectFieldDefinition => {
64
+ return definition.bodyElement.type === 'select' || definition.bodyElement.type === 'select1';
65
+ };
66
+
67
+ const isRangeNodeDefinition = (
68
+ definition: UnsupportedControlDefinition
69
+ ): definition is RangeNodeDefinition => {
70
+ return definition.bodyElement.type === 'range';
71
+ };
72
+
73
+ const isRankNodeDefinition = (
74
+ definition: UnsupportedControlDefinition
75
+ ): definition is RankNodeDefinition => {
76
+ return definition.bodyElement.type === 'rank';
77
+ };
78
+
79
+ const isTriggerNodeDefinition = (
80
+ definition: ControlNodeDefinition
81
+ ): definition is TriggerNodeDefinition => {
82
+ return definition.bodyElement.type === 'trigger';
83
+ };
84
+
85
+ const isUploadNodeDefinition = (
86
+ definition: ControlNodeDefinition
87
+ ): definition is UploadNodeDefinition => {
88
+ return definition.bodyElement.type === 'upload';
89
+ };
90
+
20
91
  export const buildChildren = (parent: GeneralParentNode): GeneralChildNode[] => {
21
92
  const { children } = parent.definition;
22
93
 
@@ -34,24 +105,50 @@ export const buildChildren = (parent: GeneralParentNode): GeneralChildNode[] =>
34
105
  }
35
106
 
36
107
  case 'repeat-range': {
37
- return new RepeatRange(parent, child);
108
+ if (child.isControlled()) {
109
+ return new RepeatRangeControlled(parent, child);
110
+ }
111
+
112
+ return new RepeatRangeUncontrolled(parent, child);
38
113
  }
39
114
 
40
- case 'value-node': {
41
- // TODO: this sort of awkwardness might go away if we embrace a
42
- // proliferation of node types throughout.
43
- switch (child.bodyElement?.type) {
44
- case 'select':
45
- case 'select1':
46
- return new SelectField(parent, child as SelectFieldDefinition);
115
+ case 'leaf-node': {
116
+ if (child instanceof NoteNodeDefinition) {
117
+ return new Note(parent, child);
118
+ }
119
+
120
+ // More specific type helps with narrowing below
121
+ const leafChild: AnyLeafNodeDefinition = child;
122
+
123
+ if (isModelValueDefinition(leafChild)) {
124
+ return new ModelValue(parent, leafChild);
125
+ }
126
+
127
+ if (isStringFieldDefinition(leafChild)) {
128
+ return new StringField(parent, leafChild);
129
+ }
47
130
 
48
- case 'input':
49
- case undefined:
50
- return new StringField(parent, child as StringFieldDefinition);
131
+ if (isSelectFieldDefinition(leafChild)) {
132
+ return new SelectField(parent, leafChild);
133
+ }
51
134
 
52
- default:
53
- throw new UnreachableError(child.bodyElement);
135
+ if (isTriggerNodeDefinition(leafChild)) {
136
+ return new TriggerControl(parent, leafChild);
54
137
  }
138
+
139
+ if (isRangeNodeDefinition(leafChild)) {
140
+ return new RangeControl(parent, leafChild);
141
+ }
142
+
143
+ if (isRankNodeDefinition(leafChild)) {
144
+ return new RankControl(parent, leafChild);
145
+ }
146
+
147
+ if (isUploadNodeDefinition(leafChild)) {
148
+ return new UploadControl(parent, leafChild);
149
+ }
150
+
151
+ throw new UnreachableError(leafChild);
55
152
  }
56
153
 
57
154
  default: {
@@ -1,10 +1,25 @@
1
1
  import type { Group } from './Group.ts';
2
- import type { RepeatInstance } from './RepeatInstance.ts';
3
- import type { RepeatRange } from './RepeatRange.ts';
2
+ import type { ModelValue } from './ModelValue.ts';
3
+ import type { Note } from './Note.ts';
4
+ import type { RepeatInstance } from './repeat/RepeatInstance.ts';
5
+ import type { RepeatRangeControlled } from './repeat/RepeatRangeControlled.ts';
6
+ import type { RepeatRangeUncontrolled } from './repeat/RepeatRangeUncontrolled.ts';
4
7
  import type { Root } from './Root.ts';
5
8
  import type { SelectField } from './SelectField.ts';
6
9
  import type { StringField } from './StringField.ts';
7
10
  import type { Subtree } from './Subtree.ts';
11
+ import type { TriggerControl } from './TriggerControl.ts';
12
+ import type { RangeControl } from './unsupported/RangeControl.ts';
13
+ import type { RankControl } from './unsupported/RankControl.ts';
14
+ import type { UploadControl } from './unsupported/UploadControl.ts';
15
+
16
+ export type RepeatRange = RepeatRangeControlled | RepeatRangeUncontrolled;
17
+
18
+ // prettier-ignore
19
+ export type UnsupportedControl =
20
+ | RangeControl
21
+ | RankControl
22
+ | UploadControl;
8
23
 
9
24
  // prettier-ignore
10
25
  export type AnyNode =
@@ -14,8 +29,12 @@ export type AnyNode =
14
29
  | Subtree
15
30
  | RepeatRange
16
31
  | RepeatInstance
32
+ | Note
33
+ | ModelValue
17
34
  | StringField
18
- | SelectField;
35
+ | SelectField
36
+ | TriggerControl
37
+ | UnsupportedControl;
19
38
 
20
39
  // prettier-ignore
21
40
  export type AnyParentNode =
@@ -41,8 +60,12 @@ export type AnyChildNode =
41
60
  | Subtree
42
61
  | RepeatRange
43
62
  | RepeatInstance
63
+ | ModelValue
64
+ | Note
44
65
  | StringField
45
- | SelectField;
66
+ | SelectField
67
+ | TriggerControl
68
+ | UnsupportedControl;
46
69
 
47
70
  // prettier-ignore
48
71
  export type GeneralChildNode =
@@ -50,5 +73,19 @@ export type GeneralChildNode =
50
73
  | Group
51
74
  | Subtree
52
75
  | RepeatRange
76
+ | ModelValue
77
+ | Note
78
+ | StringField
79
+ | SelectField
80
+ | TriggerControl
81
+ | UnsupportedControl;
82
+
83
+ // prettier-ignore
84
+ export type AnyValueNode =
85
+ // eslint-disable-next-line @typescript-eslint/sort-type-constituents
86
+ | ModelValue
87
+ | Note
53
88
  | StringField
54
- | SelectField;
89
+ | SelectField
90
+ | TriggerControl
91
+ | UnsupportedControl;
@@ -1,5 +1,4 @@
1
1
  import { identity } from '@getodk/common/lib/identity.ts';
2
- import { XFormDefinition } from '../XFormDefinition.ts';
3
2
  import type { RootNode } from '../client/RootNode.ts';
4
3
  import type {
5
4
  InitializeFormOptions as BaseInitializeFormOptions,
@@ -8,6 +7,7 @@ import type {
8
7
  } from '../client/index.ts';
9
8
  import { retrieveSourceXMLResource } from '../instance/resource.ts';
10
9
  import { createUniqueId } from '../lib/unique-id.ts';
10
+ import { XFormDefinition } from '../parse/XFormDefinition.ts';
11
11
  import { Root } from './Root.ts';
12
12
  import type { InstanceConfig } from './internal-api/InstanceConfig.ts';
13
13
 
@@ -1,7 +1,7 @@
1
1
  import type { XFormsXPathEvaluator } from '@getodk/xpath';
2
2
  import type { Accessor } from 'solid-js';
3
- import type { DependentExpression } from '../../expression/DependentExpression.ts';
4
3
  import type { ReactiveScope } from '../../lib/reactivity/scope.ts';
4
+ import type { DependentExpression } from '../../parse/expression/abstract/DependentExpression.ts';
5
5
  import type { SubscribableDependency } from './SubscribableDependency.ts';
6
6
  import type { TranslationContext } from './TranslationContext.ts';
7
7