@qoretechnologies/reqraft 0.10.62 → 0.10.63-pr.142.g0b675cd

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 (736) hide show
  1. package/README.md +21 -1
  2. package/dist/components/Description/describedControl.d.ts +48 -0
  3. package/dist/components/Description/describedControl.d.ts.map +1 -0
  4. package/dist/components/Description/describedControl.js +81 -0
  5. package/dist/components/Description/describedControl.js.map +1 -0
  6. package/dist/components/Description/index.d.ts.map +1 -1
  7. package/dist/components/Description/index.js +3 -2
  8. package/dist/components/Description/index.js.map +1 -1
  9. package/dist/components/colorValue/colorValue.d.ts +59 -0
  10. package/dist/components/colorValue/colorValue.d.ts.map +1 -0
  11. package/dist/components/colorValue/colorValue.js +245 -0
  12. package/dist/components/colorValue/colorValue.js.map +1 -0
  13. package/dist/components/colorValue/index.d.ts +34 -0
  14. package/dist/components/colorValue/index.d.ts.map +1 -0
  15. package/dist/components/colorValue/index.js +136 -0
  16. package/dist/components/colorValue/index.js.map +1 -0
  17. package/dist/components/colorValue/labels.d.ts +12 -0
  18. package/dist/components/colorValue/labels.d.ts.map +1 -0
  19. package/dist/components/colorValue/labels.js +11 -0
  20. package/dist/components/colorValue/labels.js.map +1 -0
  21. package/dist/components/composer/Composer.d.ts +1 -1
  22. package/dist/components/composer/Composer.d.ts.map +1 -1
  23. package/dist/components/composer/Composer.js +2 -2
  24. package/dist/components/composer/Composer.js.map +1 -1
  25. package/dist/components/dpqlEditor/DpqlEditor.d.ts.map +1 -1
  26. package/dist/components/dpqlEditor/DpqlEditor.js +25 -5
  27. package/dist/components/dpqlEditor/DpqlEditor.js.map +1 -1
  28. package/dist/components/dpqlEditor/dpqlHelpers.d.ts +10 -1
  29. package/dist/components/dpqlEditor/dpqlHelpers.d.ts.map +1 -1
  30. package/dist/components/dpqlEditor/dpqlHelpers.js +30 -13
  31. package/dist/components/dpqlEditor/dpqlHelpers.js.map +1 -1
  32. package/dist/components/dpqlEditor/dpqlTags.d.ts +11 -7
  33. package/dist/components/dpqlEditor/dpqlTags.d.ts.map +1 -1
  34. package/dist/components/dpqlEditor/dpqlTags.js +11 -6
  35. package/dist/components/dpqlEditor/dpqlTags.js.map +1 -1
  36. package/dist/components/dpqlEditor/types.d.ts +47 -8
  37. package/dist/components/dpqlEditor/types.d.ts.map +1 -1
  38. package/dist/components/dpqlEditor/useDpqlSession.d.ts +2 -2
  39. package/dist/components/dpqlEditor/useDpqlSession.d.ts.map +1 -1
  40. package/dist/components/dpqlEditor/useDpqlSession.js +16 -7
  41. package/dist/components/dpqlEditor/useDpqlSession.js.map +1 -1
  42. package/dist/components/form/engine/CompactRow.d.ts.map +1 -1
  43. package/dist/components/form/engine/CompactRow.js +151 -83
  44. package/dist/components/form/engine/CompactRow.js.map +1 -1
  45. package/dist/components/form/engine/CompactToolbar.d.ts.map +1 -1
  46. package/dist/components/form/engine/CompactToolbar.js +29 -3
  47. package/dist/components/form/engine/CompactToolbar.js.map +1 -1
  48. package/dist/components/form/engine/FormEngine.d.ts +34 -1
  49. package/dist/components/form/engine/FormEngine.d.ts.map +1 -1
  50. package/dist/components/form/engine/FormEngine.js +487 -87
  51. package/dist/components/form/engine/FormEngine.js.map +1 -1
  52. package/dist/components/form/engine/HiddenFieldsNote.d.ts +28 -0
  53. package/dist/components/form/engine/HiddenFieldsNote.d.ts.map +1 -0
  54. package/dist/components/form/engine/HiddenFieldsNote.js +32 -0
  55. package/dist/components/form/engine/HiddenFieldsNote.js.map +1 -0
  56. package/dist/components/form/engine/OptionFieldMessages.d.ts.map +1 -1
  57. package/dist/components/form/engine/OptionFieldMessages.js +24 -3
  58. package/dist/components/form/engine/OptionFieldMessages.js.map +1 -1
  59. package/dist/components/form/engine/_structuredData/SchemaDataView.d.ts +2 -2
  60. package/dist/components/form/engine/_structuredData/SchemaDataView.d.ts.map +1 -1
  61. package/dist/components/form/engine/_structuredData/SchemaDataView.js +12 -6
  62. package/dist/components/form/engine/_structuredData/SchemaDataView.js.map +1 -1
  63. package/dist/components/form/engine/compactRowContext.d.ts +19 -0
  64. package/dist/components/form/engine/compactRowContext.d.ts.map +1 -1
  65. package/dist/components/form/engine/compactRowContext.js.map +1 -1
  66. package/dist/components/form/engine/compactRowStyles.d.ts +0 -1
  67. package/dist/components/form/engine/compactRowStyles.d.ts.map +1 -1
  68. package/dist/components/form/engine/compactRowStyles.js +12 -20
  69. package/dist/components/form/engine/compactRowStyles.js.map +1 -1
  70. package/dist/components/form/engine/compactToolbarColors.d.ts +16 -0
  71. package/dist/components/form/engine/compactToolbarColors.d.ts.map +1 -0
  72. package/dist/components/form/engine/compactToolbarColors.js +21 -0
  73. package/dist/components/form/engine/compactToolbarColors.js.map +1 -0
  74. package/dist/components/form/engine/readFirst.d.ts +24 -8
  75. package/dist/components/form/engine/readFirst.d.ts.map +1 -1
  76. package/dist/components/form/engine/readFirst.js +77 -109
  77. package/dist/components/form/engine/readFirst.js.map +1 -1
  78. package/dist/components/form/engine/readFirstColors.d.ts +30 -0
  79. package/dist/components/form/engine/readFirstColors.d.ts.map +1 -0
  80. package/dist/components/form/engine/readFirstColors.js +51 -0
  81. package/dist/components/form/engine/readFirstColors.js.map +1 -0
  82. package/dist/components/form/engine/rowFocus.d.ts +2 -0
  83. package/dist/components/form/engine/rowFocus.d.ts.map +1 -1
  84. package/dist/components/form/engine/rowFocus.js +26 -3
  85. package/dist/components/form/engine/rowFocus.js.map +1 -1
  86. package/dist/components/form/engine/typeChoices.d.ts +1 -1
  87. package/dist/components/form/engine/variants/VariantCalmTable.d.ts.map +1 -1
  88. package/dist/components/form/engine/variants/VariantCalmTable.js +2 -1
  89. package/dist/components/form/engine/variants/VariantCalmTable.js.map +1 -1
  90. package/dist/components/form/engine/variants/VariantCards.d.ts.map +1 -1
  91. package/dist/components/form/engine/variants/VariantCards.js +2 -1
  92. package/dist/components/form/engine/variants/VariantCards.js.map +1 -1
  93. package/dist/components/form/engine/variants/VariantFocus.js +1 -1
  94. package/dist/components/form/engine/variants/VariantFocus.js.map +1 -1
  95. package/dist/components/form/engine/variants/VariantMinimal.d.ts.map +1 -1
  96. package/dist/components/form/engine/variants/VariantMinimal.js +2 -1
  97. package/dist/components/form/engine/variants/VariantMinimal.js.map +1 -1
  98. package/dist/components/form/engine/variants/variantParts.d.ts +1 -1
  99. package/dist/components/form/engine/variants/variantParts.d.ts.map +1 -1
  100. package/dist/components/form/engine/variants/variantParts.js +25 -17
  101. package/dist/components/form/engine/variants/variantParts.js.map +1 -1
  102. package/dist/components/form/expressions/DpqlRendering.d.ts +1 -1
  103. package/dist/components/form/expressions/DpqlRendering.d.ts.map +1 -1
  104. package/dist/components/form/expressions/DpqlRendering.js +3 -3
  105. package/dist/components/form/expressions/DpqlRendering.js.map +1 -1
  106. package/dist/components/form/expressions/ExpressionField.d.ts +41 -3
  107. package/dist/components/form/expressions/ExpressionField.d.ts.map +1 -1
  108. package/dist/components/form/expressions/ExpressionField.js +396 -99
  109. package/dist/components/form/expressions/ExpressionField.js.map +1 -1
  110. package/dist/components/form/expressions/builder/argumentDetail.d.ts.map +1 -1
  111. package/dist/components/form/expressions/builder/argumentDetail.js +4 -1
  112. package/dist/components/form/expressions/builder/argumentDetail.js.map +1 -1
  113. package/dist/components/form/expressions/builder/argumentLabel.d.ts.map +1 -1
  114. package/dist/components/form/expressions/builder/argumentLabel.js +27 -9
  115. package/dist/components/form/expressions/builder/argumentLabel.js.map +1 -1
  116. package/dist/components/form/expressions/builder/argumentWrapper.d.ts.map +1 -1
  117. package/dist/components/form/expressions/builder/argumentWrapper.js +4 -2
  118. package/dist/components/form/expressions/builder/argumentWrapper.js.map +1 -1
  119. package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.d.ts.map +1 -1
  120. package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.js +5 -4
  121. package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.js.map +1 -1
  122. package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.d.ts +1 -1
  123. package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.d.ts.map +1 -1
  124. package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.js +6 -3
  125. package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.js.map +1 -1
  126. package/dist/components/form/expressions/builder/index.d.ts +24 -2
  127. package/dist/components/form/expressions/builder/index.d.ts.map +1 -1
  128. package/dist/components/form/expressions/builder/index.js +121 -77
  129. package/dist/components/form/expressions/builder/index.js.map +1 -1
  130. package/dist/components/form/expressions/builder/item.d.ts +6 -2
  131. package/dist/components/form/expressions/builder/item.d.ts.map +1 -1
  132. package/dist/components/form/expressions/builder/item.js +19 -5
  133. package/dist/components/form/expressions/builder/item.js.map +1 -1
  134. package/dist/components/form/expressions/builder/renderTemplate.js +1 -1
  135. package/dist/components/form/expressions/builder/renderTemplate.js.map +1 -1
  136. package/dist/components/form/expressions/expressionOperands.d.ts +16 -0
  137. package/dist/components/form/expressions/expressionOperands.d.ts.map +1 -0
  138. package/dist/components/form/expressions/expressionOperands.js +97 -0
  139. package/dist/components/form/expressions/expressionOperands.js.map +1 -0
  140. package/dist/components/form/expressions/mockExpressions.d.ts.map +1 -1
  141. package/dist/components/form/expressions/mockExpressions.js +22 -5
  142. package/dist/components/form/expressions/mockExpressions.js.map +1 -1
  143. package/dist/components/form/expressions/renderExpressionToText.d.ts +2 -0
  144. package/dist/components/form/expressions/renderExpressionToText.d.ts.map +1 -1
  145. package/dist/components/form/expressions/renderExpressionToText.js +35 -9
  146. package/dist/components/form/expressions/renderExpressionToText.js.map +1 -1
  147. package/dist/components/form/expressions/textOfExpression.d.ts +18 -0
  148. package/dist/components/form/expressions/textOfExpression.d.ts.map +1 -0
  149. package/dist/components/form/expressions/textOfExpression.js +37 -0
  150. package/dist/components/form/expressions/textOfExpression.js.map +1 -0
  151. package/dist/components/form/expressions/useExpressionType.d.ts +26 -0
  152. package/dist/components/form/expressions/useExpressionType.d.ts.map +1 -0
  153. package/dist/components/form/expressions/useExpressionType.js +181 -0
  154. package/dist/components/form/expressions/useExpressionType.js.map +1 -0
  155. package/dist/components/form/expressions/useRenderExpression.d.ts.map +1 -1
  156. package/dist/components/form/expressions/useRenderExpression.js +7 -7
  157. package/dist/components/form/expressions/useRenderExpression.js.map +1 -1
  158. package/dist/components/form/fields/Field.d.ts.map +1 -1
  159. package/dist/components/form/fields/Field.js +20 -7
  160. package/dist/components/form/fields/Field.js.map +1 -1
  161. package/dist/components/form/fields/allowed-values/AllowedValues.d.ts.map +1 -1
  162. package/dist/components/form/fields/allowed-values/AllowedValues.js +17 -4
  163. package/dist/components/form/fields/allowed-values/AllowedValues.js.map +1 -1
  164. package/dist/components/form/fields/array/ArrayAuto.d.ts.map +1 -1
  165. package/dist/components/form/fields/array/ArrayAuto.js +24 -0
  166. package/dist/components/form/fields/array/ArrayAuto.js.map +1 -1
  167. package/dist/components/form/fields/array/ArrayAutoField.d.ts.map +1 -1
  168. package/dist/components/form/fields/array/ArrayAutoField.js +36 -13
  169. package/dist/components/form/fields/array/ArrayAutoField.js.map +1 -1
  170. package/dist/components/form/fields/auto/AutoFormField.d.ts +20 -1
  171. package/dist/components/form/fields/auto/AutoFormField.d.ts.map +1 -1
  172. package/dist/components/form/fields/auto/AutoFormField.js +81 -36
  173. package/dist/components/form/fields/auto/AutoFormField.js.map +1 -1
  174. package/dist/components/form/fields/auto/hostEditorValue.d.ts +30 -0
  175. package/dist/components/form/fields/auto/hostEditorValue.d.ts.map +1 -0
  176. package/dist/components/form/fields/auto/hostEditorValue.js +53 -0
  177. package/dist/components/form/fields/auto/hostEditorValue.js.map +1 -0
  178. package/dist/components/form/fields/binary/Binary.d.ts.map +1 -1
  179. package/dist/components/form/fields/binary/Binary.js +23 -3
  180. package/dist/components/form/fields/binary/Binary.js.map +1 -1
  181. package/dist/components/form/fields/boolean/Boolean.d.ts +5 -0
  182. package/dist/components/form/fields/boolean/Boolean.d.ts.map +1 -1
  183. package/dist/components/form/fields/boolean/Boolean.js +9 -1
  184. package/dist/components/form/fields/boolean/Boolean.js.map +1 -1
  185. package/dist/components/form/fields/color/Color.d.ts +103 -16
  186. package/dist/components/form/fields/color/Color.d.ts.map +1 -1
  187. package/dist/components/form/fields/color/Color.js +611 -16
  188. package/dist/components/form/fields/color/Color.js.map +1 -1
  189. package/dist/components/form/fields/emittedValues.d.ts +34 -3
  190. package/dist/components/form/fields/emittedValues.d.ts.map +1 -1
  191. package/dist/components/form/fields/emittedValues.js +24 -1
  192. package/dist/components/form/fields/emittedValues.js.map +1 -1
  193. package/dist/components/form/fields/file/File.d.ts +1 -1
  194. package/dist/components/form/fields/file/File.d.ts.map +1 -1
  195. package/dist/components/form/fields/file/File.js +4 -2
  196. package/dist/components/form/fields/file/File.js.map +1 -1
  197. package/dist/components/form/fields/long-string/LongString.d.ts.map +1 -1
  198. package/dist/components/form/fields/long-string/LongString.js +17 -3
  199. package/dist/components/form/fields/long-string/LongString.js.map +1 -1
  200. package/dist/components/form/fields/markdown/MarkdownView.js +1 -1
  201. package/dist/components/form/fields/multi-select/MultiSelectFormField.d.ts.map +1 -1
  202. package/dist/components/form/fields/multi-select/MultiSelectFormField.js +4 -1
  203. package/dist/components/form/fields/multi-select/MultiSelectFormField.js.map +1 -1
  204. package/dist/components/form/fields/number/Number.d.ts +6 -0
  205. package/dist/components/form/fields/number/Number.d.ts.map +1 -1
  206. package/dist/components/form/fields/number/Number.js +41 -6
  207. package/dist/components/form/fields/number/Number.js.map +1 -1
  208. package/dist/components/form/fields/object/Object.d.ts +1 -1
  209. package/dist/components/form/fields/object/Object.d.ts.map +1 -1
  210. package/dist/components/form/fields/object/Object.js +4 -2
  211. package/dist/components/form/fields/object/Object.js.map +1 -1
  212. package/dist/components/form/fields/pendingEdit.d.ts +52 -0
  213. package/dist/components/form/fields/pendingEdit.d.ts.map +1 -0
  214. package/dist/components/form/fields/pendingEdit.js +79 -0
  215. package/dist/components/form/fields/pendingEdit.js.map +1 -0
  216. package/dist/components/form/fields/rich-text/RichText.d.ts +8 -1
  217. package/dist/components/form/fields/rich-text/RichText.d.ts.map +1 -1
  218. package/dist/components/form/fields/rich-text/RichText.js +190 -81
  219. package/dist/components/form/fields/rich-text/RichText.js.map +1 -1
  220. package/dist/components/form/fields/rich-text/useTemplateTags.d.ts +18 -0
  221. package/dist/components/form/fields/rich-text/useTemplateTags.d.ts.map +1 -0
  222. package/dist/components/form/fields/rich-text/useTemplateTags.js +49 -0
  223. package/dist/components/form/fields/rich-text/useTemplateTags.js.map +1 -0
  224. package/dist/components/form/fields/schema-definition/CatalogLeafForm.d.ts.map +1 -1
  225. package/dist/components/form/fields/schema-definition/CatalogLeafForm.js +4 -1
  226. package/dist/components/form/fields/schema-definition/CatalogLeafForm.js.map +1 -1
  227. package/dist/components/form/fields/schema-definition/CatalogNodeEditor.d.ts.map +1 -1
  228. package/dist/components/form/fields/schema-definition/CatalogNodeEditor.js +20 -5
  229. package/dist/components/form/fields/schema-definition/CatalogNodeEditor.js.map +1 -1
  230. package/dist/components/form/fields/schema-definition/TableEditor.d.ts.map +1 -1
  231. package/dist/components/form/fields/schema-definition/TableEditor.js +10 -2
  232. package/dist/components/form/fields/schema-definition/TableEditor.js.map +1 -1
  233. package/dist/components/form/fields/schema-definition/index.d.ts.map +1 -1
  234. package/dist/components/form/fields/schema-definition/index.js +8 -4
  235. package/dist/components/form/fields/schema-definition/index.js.map +1 -1
  236. package/dist/components/form/fields/select/Select.d.ts +2 -0
  237. package/dist/components/form/fields/select/Select.d.ts.map +1 -1
  238. package/dist/components/form/fields/select/Select.js +19 -10
  239. package/dist/components/form/fields/select/Select.js.map +1 -1
  240. package/dist/components/form/fields/select/SelectCollection.d.ts.map +1 -1
  241. package/dist/components/form/fields/select/SelectCollection.js +8 -2
  242. package/dist/components/form/fields/select/SelectCollection.js.map +1 -1
  243. package/dist/components/form/fields/select/unavailableRow.d.ts +23 -0
  244. package/dist/components/form/fields/select/unavailableRow.d.ts.map +1 -0
  245. package/dist/components/form/fields/select/unavailableRow.js +55 -0
  246. package/dist/components/form/fields/select/unavailableRow.js.map +1 -0
  247. package/dist/components/form/fields/template/ReadOnlyTemplateTag.d.ts +5 -5
  248. package/dist/components/form/fields/template/ReadOnlyTemplateTag.d.ts.map +1 -1
  249. package/dist/components/form/fields/template/ReadOnlyTemplateTag.js +11 -4
  250. package/dist/components/form/fields/template/ReadOnlyTemplateTag.js.map +1 -1
  251. package/dist/components/form/fields/template/TemplateBrowser.d.ts +22 -0
  252. package/dist/components/form/fields/template/TemplateBrowser.d.ts.map +1 -0
  253. package/dist/components/form/fields/template/TemplateBrowser.js +54 -0
  254. package/dist/components/form/fields/template/TemplateBrowser.js.map +1 -0
  255. package/dist/components/form/fields/template/TemplateField.d.ts +83 -1
  256. package/dist/components/form/fields/template/TemplateField.d.ts.map +1 -1
  257. package/dist/components/form/fields/template/TemplateField.js +535 -85
  258. package/dist/components/form/fields/template/TemplateField.js.map +1 -1
  259. package/dist/components/form/fields/template/TemplateText.d.ts +0 -17
  260. package/dist/components/form/fields/template/TemplateText.d.ts.map +1 -1
  261. package/dist/components/form/fields/template/TemplateText.js +8 -4
  262. package/dist/components/form/fields/template/TemplateText.js.map +1 -1
  263. package/dist/components/form/fields/template/writtenAsText.d.ts +55 -0
  264. package/dist/components/form/fields/template/writtenAsText.d.ts.map +1 -0
  265. package/dist/components/form/fields/template/writtenAsText.js +188 -0
  266. package/dist/components/form/fields/template/writtenAsText.js.map +1 -0
  267. package/dist/components/form/index.d.ts +10 -0
  268. package/dist/components/form/index.d.ts.map +1 -1
  269. package/dist/components/form/index.js +23 -1
  270. package/dist/components/form/index.js.map +1 -1
  271. package/dist/components/imageLightbox/ImageLightbox.d.ts.map +1 -1
  272. package/dist/components/imageLightbox/ImageLightbox.js +19 -7
  273. package/dist/components/imageLightbox/ImageLightbox.js.map +1 -1
  274. package/dist/components/log/Log.d.ts.map +1 -1
  275. package/dist/components/log/Log.js +15 -7
  276. package/dist/components/log/Log.js.map +1 -1
  277. package/dist/components/menu/Menu.d.ts.map +1 -1
  278. package/dist/components/menu/Menu.js +19 -10
  279. package/dist/components/menu/Menu.js.map +1 -1
  280. package/dist/components/smartEditor/CompletionMenu.d.ts +43 -0
  281. package/dist/components/smartEditor/CompletionMenu.d.ts.map +1 -0
  282. package/dist/components/smartEditor/CompletionMenu.js +196 -0
  283. package/dist/components/smartEditor/CompletionMenu.js.map +1 -0
  284. package/dist/components/smartEditor/MarkdownDoc.d.ts +1 -1
  285. package/dist/components/smartEditor/MarkdownDoc.js +1 -1
  286. package/dist/components/smartEditor/MarkdownDoc.js.map +1 -1
  287. package/dist/components/smartEditor/SmartEditor.d.ts.map +1 -1
  288. package/dist/components/smartEditor/SmartEditor.js +51 -136
  289. package/dist/components/smartEditor/SmartEditor.js.map +1 -1
  290. package/dist/components/smartEditor/completionStyle.d.ts +27 -0
  291. package/dist/components/smartEditor/completionStyle.d.ts.map +1 -0
  292. package/dist/components/smartEditor/completionStyle.js +66 -0
  293. package/dist/components/smartEditor/completionStyle.js.map +1 -0
  294. package/dist/components/smartEditor/index.d.ts +5 -1
  295. package/dist/components/smartEditor/index.d.ts.map +1 -1
  296. package/dist/components/smartEditor/index.js +19 -1
  297. package/dist/components/smartEditor/index.js.map +1 -1
  298. package/dist/components/smartEditor/templateCompletions.d.ts +18 -0
  299. package/dist/components/smartEditor/templateCompletions.d.ts.map +1 -0
  300. package/dist/components/smartEditor/templateCompletions.js +94 -0
  301. package/dist/components/smartEditor/templateCompletions.js.map +1 -0
  302. package/dist/components/smartEditor/types.d.ts +12 -1
  303. package/dist/components/smartEditor/types.d.ts.map +1 -1
  304. package/dist/components/smartEditor/useLspAutocomplete.d.ts +32 -0
  305. package/dist/components/smartEditor/useLspAutocomplete.d.ts.map +1 -1
  306. package/dist/components/smartEditor/useLspAutocomplete.js +228 -118
  307. package/dist/components/smartEditor/useLspAutocomplete.js.map +1 -1
  308. package/dist/components/smartEditor/useLspHover.d.ts +22 -7
  309. package/dist/components/smartEditor/useLspHover.d.ts.map +1 -1
  310. package/dist/components/smartEditor/useLspHover.js +86 -17
  311. package/dist/components/smartEditor/useLspHover.js.map +1 -1
  312. package/dist/components/smartEditor/useLspSemanticTokens.js +1 -1
  313. package/dist/components/smartEditor/useLspSemanticTokens.js.map +1 -1
  314. package/dist/components/smartEditor/useLspSession.d.ts +6 -0
  315. package/dist/components/smartEditor/useLspSession.d.ts.map +1 -1
  316. package/dist/components/smartEditor/useLspSession.js +7 -6
  317. package/dist/components/smartEditor/useLspSession.js.map +1 -1
  318. package/dist/components/supportTicket/AttachmentChips.d.ts.map +1 -1
  319. package/dist/components/supportTicket/AttachmentChips.js +15 -5
  320. package/dist/components/supportTicket/AttachmentChips.js.map +1 -1
  321. package/dist/components/supportTicket/ReferencePicker.d.ts +9 -2
  322. package/dist/components/supportTicket/ReferencePicker.d.ts.map +1 -1
  323. package/dist/components/supportTicket/ReferencePicker.js +27 -6
  324. package/dist/components/supportTicket/ReferencePicker.js.map +1 -1
  325. package/dist/components/supportTicket/TicketHeader.d.ts +3 -4
  326. package/dist/components/supportTicket/TicketHeader.d.ts.map +1 -1
  327. package/dist/components/supportTicket/TicketHeader.js +20 -2
  328. package/dist/components/supportTicket/TicketHeader.js.map +1 -1
  329. package/dist/components/supportTicket/TicketMetaTags.d.ts +1 -1
  330. package/dist/components/ticketReferences/TicketReferences.d.ts.map +1 -1
  331. package/dist/components/ticketReferences/TicketReferences.js +9 -4
  332. package/dist/components/ticketReferences/TicketReferences.js.map +1 -1
  333. package/dist/components/ticketThread/TicketThread.d.ts.map +1 -1
  334. package/dist/components/ticketThread/TicketThread.js +36 -11
  335. package/dist/components/ticketThread/TicketThread.js.map +1 -1
  336. package/dist/helpers/descriptionTooltip.d.ts +43 -0
  337. package/dist/helpers/descriptionTooltip.d.ts.map +1 -0
  338. package/dist/helpers/descriptionTooltip.js +70 -0
  339. package/dist/helpers/descriptionTooltip.js.map +1 -0
  340. package/dist/helpers/domProps.d.ts +5 -0
  341. package/dist/helpers/domProps.d.ts.map +1 -0
  342. package/dist/helpers/domProps.js +47 -0
  343. package/dist/helpers/domProps.js.map +1 -0
  344. package/dist/helpers/expressions.d.ts +107 -2
  345. package/dist/helpers/expressions.d.ts.map +1 -1
  346. package/dist/helpers/expressions.js +223 -8
  347. package/dist/helpers/expressions.js.map +1 -1
  348. package/dist/helpers/hoveringPointer.d.ts +26 -0
  349. package/dist/helpers/hoveringPointer.d.ts.map +1 -0
  350. package/dist/helpers/hoveringPointer.js +29 -0
  351. package/dist/helpers/hoveringPointer.js.map +1 -0
  352. package/dist/helpers/markdownText.d.ts +14 -0
  353. package/dist/helpers/markdownText.d.ts.map +1 -0
  354. package/dist/helpers/markdownText.js +160 -0
  355. package/dist/helpers/markdownText.js.map +1 -0
  356. package/dist/helpers/qorusTypeCatalogue.d.ts +53 -0
  357. package/dist/helpers/qorusTypeCatalogue.d.ts.map +1 -0
  358. package/dist/helpers/qorusTypeCatalogue.js +262 -0
  359. package/dist/helpers/qorusTypeCatalogue.js.map +1 -0
  360. package/dist/helpers/readableColors.d.ts +36 -0
  361. package/dist/helpers/readableColors.d.ts.map +1 -0
  362. package/dist/helpers/readableColors.js +116 -0
  363. package/dist/helpers/readableColors.js.map +1 -0
  364. package/dist/helpers/templateItems.d.ts +2 -2
  365. package/dist/helpers/templateItems.d.ts.map +1 -1
  366. package/dist/helpers/templateItems.js +6 -4
  367. package/dist/helpers/templateItems.js.map +1 -1
  368. package/dist/helpers/templates.d.ts +26 -1
  369. package/dist/helpers/templates.d.ts.map +1 -1
  370. package/dist/helpers/templates.js +41 -6
  371. package/dist/helpers/templates.js.map +1 -1
  372. package/dist/helpers/validations.d.ts +9 -0
  373. package/dist/helpers/validations.d.ts.map +1 -1
  374. package/dist/helpers/validations.js +139 -33
  375. package/dist/helpers/validations.js.map +1 -1
  376. package/dist/hooks/useQorusTypes.d.ts +7 -15
  377. package/dist/hooks/useQorusTypes.d.ts.map +1 -1
  378. package/dist/hooks/useQorusTypes.js +25 -166
  379. package/dist/hooks/useQorusTypes.js.map +1 -1
  380. package/dist/hooks/useReadableIntentShade.d.ts +9 -0
  381. package/dist/hooks/useReadableIntentShade.d.ts.map +1 -0
  382. package/dist/hooks/useReadableIntentShade.js +23 -0
  383. package/dist/hooks/useReadableIntentShade.js.map +1 -0
  384. package/dist/hooks/useReadableOpacity.d.ts +6 -0
  385. package/dist/hooks/useReadableOpacity.d.ts.map +1 -0
  386. package/dist/hooks/useReadableOpacity.js +17 -0
  387. package/dist/hooks/useReadableOpacity.js.map +1 -0
  388. package/dist/index.d.ts +1 -0
  389. package/dist/index.d.ts.map +1 -1
  390. package/dist/index.js +1 -0
  391. package/dist/index.js.map +1 -1
  392. package/dist/tracking/ui/ExperimentCard.d.ts +1 -1
  393. package/dist/tracking/ui/ExperimentCard.d.ts.map +1 -1
  394. package/dist/tracking/ui/ExperimentCard.js +26 -10
  395. package/dist/tracking/ui/ExperimentCard.js.map +1 -1
  396. package/dist/tracking/ui/card.d.ts +2 -2
  397. package/dist/tracking/ui/card.d.ts.map +1 -1
  398. package/dist/tracking/ui/card.js +2 -2
  399. package/dist/tracking/ui/card.js.map +1 -1
  400. package/dist/tracking/ui/readable.d.ts +14 -0
  401. package/dist/tracking/ui/readable.d.ts.map +1 -0
  402. package/dist/tracking/ui/readable.js +60 -0
  403. package/dist/tracking/ui/readable.js.map +1 -0
  404. package/package.json +14 -5
  405. package/.claude/CLAUDE.md +0 -317
  406. package/.tasks/EXPORT_EXPRESSION_BUILDER.md +0 -38
  407. package/.tasks/EXPRESSION_BUILDER_REPORT.md +0 -149
  408. package/.tasks/EXPRESSION_FIELD_SEAMS.md +0 -66
  409. package/.tasks/FIELD_STACK_REPORT.md +0 -234
  410. package/.tasks/FORM_ENGINE_COMPACT_READ_FIRST.md +0 -558
  411. package/.tasks/FORM_ENGINE_EXPRESSIONS.md +0 -197
  412. package/.tasks/FORM_ENGINE_OPTIONS_SYNC.md +0 -95
  413. package/.tasks/FORM_FIELD_EXTRAS.md +0 -72
  414. package/.tasks/INDEX.md +0 -111
  415. package/.tasks/LSP_SHARED_CONNECTION.md +0 -75
  416. package/.tasks/QONSOLE_ASSIST_FEATURES.md +0 -306
  417. package/.tasks/RENDER_EXPRESSION_LSP.md +0 -159
  418. package/.tasks/REQRAFT_AUTO_FIELD.md +0 -176
  419. package/.tasks/SCHEMA_DEFINITION_FIELD.md +0 -250
  420. package/.tasks/SMART_EDITOR_CONTEXT_AND_POLISH.md +0 -340
  421. package/.tasks/SMART_EDITOR_LSP_FEATURES.md +0 -299
  422. package/.tasks/SMART_EDITOR_REVIEW_FOLLOWUPS.md +0 -280
  423. package/.tasks/SMART_EDITOR_UX_POLISH.md +0 -383
  424. package/.tasks/SMART_EDITOR_VISUAL_POLISH.md +0 -246
  425. package/.tasks/STORY_NETWORK_ISOLATION.md +0 -98
  426. package/.tasks/TEMPLATE_TOKEN_GRAMMAR.md +0 -72
  427. package/CODE_OF_CONDUCT.md +0 -105
  428. package/CONTRIBUTING.MD +0 -78
  429. package/SECURITY.md +0 -3
  430. package/chromatic.config.json +0 -5
  431. package/design/COMPACT_ENGINE_REDESIGN.md +0 -156
  432. package/design/COMPACT_INFO_DISPLAY.md +0 -87
  433. package/design/COMPACT_PARITY.md +0 -85
  434. package/design/EXPRESSION_BUILDER_REPORT_STRATEGY.md +0 -92
  435. package/design/FORM_ENGINE_COMPACT.md +0 -300
  436. package/design/FORM_ENGINE_COMPACT_UX_PLAN.md +0 -353
  437. package/design/FORM_ENGINE_EXPRESSIONS.md +0 -257
  438. package/design/FORM_ENGINE_FIELD_MIGRATION.md +0 -419
  439. package/design/IDE_INTEGRATION.md +0 -64
  440. package/design/RENDER_EXPRESSION_TRANSPORT.md +0 -156
  441. package/design/SELECT_DIALOG_FLOOR.md +0 -86
  442. package/design/SMART_EDITOR_UX.md +0 -438
  443. package/design/TRACKING.md +0 -290
  444. package/design/UNAVAILABLE_ALLOWED_VALUES.md +0 -226
  445. package/src/components/Description/index.tsx +0 -254
  446. package/src/components/Description/markdownRendererContext.tsx +0 -29
  447. package/src/components/FocusedEditing/index.tsx +0 -50
  448. package/src/components/codeSize/index.tsx +0 -79
  449. package/src/components/composer/Composer.stories.tsx +0 -238
  450. package/src/components/composer/Composer.tsx +0 -554
  451. package/src/components/composer/helpers.ts +0 -74
  452. package/src/components/composer/index.ts +0 -2
  453. package/src/components/dpqlEditor/DpqlEditor.stories.tsx +0 -1183
  454. package/src/components/dpqlEditor/DpqlEditor.tsx +0 -219
  455. package/src/components/dpqlEditor/dpqlHelpers.ts +0 -287
  456. package/src/components/dpqlEditor/dpqlInserter.ts +0 -121
  457. package/src/components/dpqlEditor/dpqlProbe.ts +0 -165
  458. package/src/components/dpqlEditor/dpqlTags.ts +0 -114
  459. package/src/components/dpqlEditor/index.ts +0 -41
  460. package/src/components/dpqlEditor/types.ts +0 -203
  461. package/src/components/dpqlEditor/useDpqlProbe.ts +0 -33
  462. package/src/components/dpqlEditor/useDpqlSession.ts +0 -411
  463. package/src/components/form/engine/CompactRow.tsx +0 -2620
  464. package/src/components/form/engine/CompactToolbar.tsx +0 -330
  465. package/src/components/form/engine/FormEngine.stories.tsx +0 -9920
  466. package/src/components/form/engine/FormEngine.tsx +0 -4569
  467. package/src/components/form/engine/FormEngineRemote.stories.tsx +0 -679
  468. package/src/components/form/engine/FormEngineStickyHeaders.stories.tsx +0 -331
  469. package/src/components/form/engine/FormFieldsSkeleton.tsx +0 -82
  470. package/src/components/form/engine/OptionFieldMessages.tsx +0 -477
  471. package/src/components/form/engine/OptionsHelpDialog.tsx +0 -29
  472. package/src/components/form/engine/__fixtures__/basicFormOptions.ts +0 -309
  473. package/src/components/form/engine/__fixtures__/fieldChromeOptions.ts +0 -45
  474. package/src/components/form/engine/_structuredData/SchemaDataView.stories.tsx +0 -233
  475. package/src/components/form/engine/_structuredData/SchemaDataView.tsx +0 -742
  476. package/src/components/form/engine/_structuredData/StructuredDataView.stories.tsx +0 -85
  477. package/src/components/form/engine/_structuredData/StructuredDataView.tsx +0 -75
  478. package/src/components/form/engine/_structuredData/structuredData.ts +0 -145
  479. package/src/components/form/engine/compactRowContext.ts +0 -148
  480. package/src/components/form/engine/compactRowStyles.ts +0 -898
  481. package/src/components/form/engine/compactToolbarContext.ts +0 -69
  482. package/src/components/form/engine/optionActions.ts +0 -128
  483. package/src/components/form/engine/optionsContext.ts +0 -24
  484. package/src/components/form/engine/readFirst.ts +0 -1077
  485. package/src/components/form/engine/rendererTypes.ts +0 -107
  486. package/src/components/form/engine/revealRow.ts +0 -123
  487. package/src/components/form/engine/rowFocus.ts +0 -101
  488. package/src/components/form/engine/rowMenuContext.ts +0 -159
  489. package/src/components/form/engine/rowOpenPicker.ts +0 -27
  490. package/src/components/form/engine/typeChoices.ts +0 -63
  491. package/src/components/form/engine/variants/FormEngineVariants.stories.tsx +0 -159
  492. package/src/components/form/engine/variants/VariantCalmTable.tsx +0 -244
  493. package/src/components/form/engine/variants/VariantCards.tsx +0 -212
  494. package/src/components/form/engine/variants/VariantFocus.tsx +0 -382
  495. package/src/components/form/engine/variants/VariantMinimal.tsx +0 -170
  496. package/src/components/form/engine/variants/focusDemo.ts +0 -145
  497. package/src/components/form/engine/variants/variantModel.ts +0 -223
  498. package/src/components/form/engine/variants/variantParts.tsx +0 -313
  499. package/src/components/form/expressions/DpqlRendering.tsx +0 -85
  500. package/src/components/form/expressions/ExpressionField.stories.tsx +0 -1395
  501. package/src/components/form/expressions/ExpressionField.tsx +0 -503
  502. package/src/components/form/expressions/argumentPresence.ts +0 -213
  503. package/src/components/form/expressions/builder/ExpressionBuilder.stories.tsx +0 -1683
  504. package/src/components/form/expressions/builder/argumentDetail.tsx +0 -17
  505. package/src/components/form/expressions/builder/argumentLabel.tsx +0 -146
  506. package/src/components/form/expressions/builder/argumentSlot.tsx +0 -101
  507. package/src/components/form/expressions/builder/argumentWrapper.tsx +0 -243
  508. package/src/components/form/expressions/builder/confirmMismatchedTypesModal.tsx +0 -120
  509. package/src/components/form/expressions/builder/confirmUnsupportedTypeModal.tsx +0 -69
  510. package/src/components/form/expressions/builder/index.tsx +0 -1545
  511. package/src/components/form/expressions/builder/item.tsx +0 -89
  512. package/src/components/form/expressions/builder/moveToPositionStrip.tsx +0 -156
  513. package/src/components/form/expressions/builder/renderTemplate.tsx +0 -42
  514. package/src/components/form/expressions/dpqlMockLanguage.ts +0 -566
  515. package/src/components/form/expressions/dpqlMockLsp.ts +0 -126
  516. package/src/components/form/expressions/mockExpressions.ts +0 -317
  517. package/src/components/form/expressions/renderExpressionToText.ts +0 -137
  518. package/src/components/form/expressions/types.ts +0 -110
  519. package/src/components/form/expressions/useExpressions.ts +0 -101
  520. package/src/components/form/expressions/useRenderExpression.ts +0 -165
  521. package/src/components/form/fields/Field.stories.tsx +0 -143
  522. package/src/components/form/fields/Field.tsx +0 -732
  523. package/src/components/form/fields/allowed-values/AllowedValues.tsx +0 -297
  524. package/src/components/form/fields/array/ArrayAuto.tsx +0 -237
  525. package/src/components/form/fields/array/ArrayAutoField.stories.tsx +0 -475
  526. package/src/components/form/fields/array/ArrayAutoField.tsx +0 -367
  527. package/src/components/form/fields/auto/AutoFormField.stories.tsx +0 -825
  528. package/src/components/form/fields/auto/AutoFormField.tsx +0 -1164
  529. package/src/components/form/fields/binary/Binary.stories.tsx +0 -122
  530. package/src/components/form/fields/binary/Binary.tsx +0 -91
  531. package/src/components/form/fields/boolean/Boolean.stories.tsx +0 -125
  532. package/src/components/form/fields/boolean/Boolean.tsx +0 -34
  533. package/src/components/form/fields/byte-size/ByteSize.stories.tsx +0 -87
  534. package/src/components/form/fields/byte-size/ByteSize.tsx +0 -58
  535. package/src/components/form/fields/color/Color.stories.tsx +0 -99
  536. package/src/components/form/fields/color/Color.tsx +0 -46
  537. package/src/components/form/fields/cron/Cron.stories.tsx +0 -68
  538. package/src/components/form/fields/cron/Cron.tsx +0 -80
  539. package/src/components/form/fields/date/Date.stories.tsx +0 -77
  540. package/src/components/form/fields/date/Date.tsx +0 -55
  541. package/src/components/form/fields/emittedValues.ts +0 -70
  542. package/src/components/form/fields/file/File.stories.tsx +0 -161
  543. package/src/components/form/fields/file/File.tsx +0 -227
  544. package/src/components/form/fields/long-string/LongString.stories.tsx +0 -120
  545. package/src/components/form/fields/long-string/LongString.tsx +0 -130
  546. package/src/components/form/fields/markdown/Markdown.stories.tsx +0 -76
  547. package/src/components/form/fields/markdown/Markdown.tsx +0 -81
  548. package/src/components/form/fields/markdown/MarkdownView.tsx +0 -222
  549. package/src/components/form/fields/multi-select/MultiSelectFormField.tsx +0 -139
  550. package/src/components/form/fields/number/Number.stories.tsx +0 -159
  551. package/src/components/form/fields/number/Number.tsx +0 -160
  552. package/src/components/form/fields/object/Object.stories.tsx +0 -398
  553. package/src/components/form/fields/object/Object.tsx +0 -255
  554. package/src/components/form/fields/radio-group/RadioGroup.stories.tsx +0 -95
  555. package/src/components/form/fields/radio-group/RadioGroup.tsx +0 -46
  556. package/src/components/form/fields/radio-group/images/java-96x128.png +0 -0
  557. package/src/components/form/fields/radio-group/images/python-129x128.png +0 -0
  558. package/src/components/form/fields/radio-group/images/qore-106x128.png +0 -0
  559. package/src/components/form/fields/rich-text/RichText.stories.tsx +0 -260
  560. package/src/components/form/fields/rich-text/RichText.tsx +0 -537
  561. package/src/components/form/fields/schema-definition/CatalogLeafForm.tsx +0 -242
  562. package/src/components/form/fields/schema-definition/CatalogNodeEditor.tsx +0 -758
  563. package/src/components/form/fields/schema-definition/Hint.tsx +0 -22
  564. package/src/components/form/fields/schema-definition/InlineValidationBanner.tsx +0 -138
  565. package/src/components/form/fields/schema-definition/Loader.tsx +0 -20
  566. package/src/components/form/fields/schema-definition/MigrationsTab.tsx +0 -187
  567. package/src/components/form/fields/schema-definition/SchemaDefinitionField.stories.tsx +0 -286
  568. package/src/components/form/fields/schema-definition/TableEditor.tsx +0 -155
  569. package/src/components/form/fields/schema-definition/TablesTab.tsx +0 -138
  570. package/src/components/form/fields/schema-definition/catalog.ts +0 -237
  571. package/src/components/form/fields/schema-definition/helpers.ts +0 -90
  572. package/src/components/form/fields/schema-definition/index.tsx +0 -418
  573. package/src/components/form/fields/schema-definition/mockCatalog.ts +0 -325
  574. package/src/components/form/fields/schema-definition/mockDefinition.ts +0 -111
  575. package/src/components/form/fields/schema-definition/referenceSuggestions.tsx +0 -152
  576. package/src/components/form/fields/schema-definition/starterTemplate.ts +0 -68
  577. package/src/components/form/fields/schema-definition/types.ts +0 -185
  578. package/src/components/form/fields/schema-definition/useSchemaOptionCatalog.ts +0 -49
  579. package/src/components/form/fields/select/Select.stories.tsx +0 -872
  580. package/src/components/form/fields/select/Select.tsx +0 -624
  581. package/src/components/form/fields/select/SelectCollection.tsx +0 -594
  582. package/src/components/form/fields/string/String.stories.tsx +0 -86
  583. package/src/components/form/fields/string/String.tsx +0 -43
  584. package/src/components/form/fields/template/ExampleValueModal.stories.tsx +0 -114
  585. package/src/components/form/fields/template/ExampleValueModal.tsx +0 -99
  586. package/src/components/form/fields/template/ReadOnlyTemplateTag.tsx +0 -47
  587. package/src/components/form/fields/template/TemplateField.stories.tsx +0 -1121
  588. package/src/components/form/fields/template/TemplateField.tsx +0 -1717
  589. package/src/components/form/fields/template/TemplateText.tsx +0 -115
  590. package/src/components/form/fields/template/__fixtures__/longExampleValue.ts +0 -7
  591. package/src/components/form/fields/template/__fixtures__/multiLevelTemplates.json +0 -147
  592. package/src/components/form/fields/template/__fixtures__/templates.json +0 -83
  593. package/src/components/form/fields/timeout/Timeout.stories.tsx +0 -228
  594. package/src/components/form/fields/timeout/Timeout.tsx +0 -87
  595. package/src/components/form/fields/url/Url.stories.tsx +0 -94
  596. package/src/components/form/fields/url/Url.tsx +0 -85
  597. package/src/components/form/index.tsx +0 -47
  598. package/src/components/imageLightbox/ImageLightbox.stories.tsx +0 -238
  599. package/src/components/imageLightbox/ImageLightbox.tsx +0 -236
  600. package/src/components/imageLightbox/index.ts +0 -1
  601. package/src/components/log/Log.stories.tsx +0 -333
  602. package/src/components/log/Log.tsx +0 -285
  603. package/src/components/menu/Menu.stories.tsx +0 -155
  604. package/src/components/menu/Menu.tsx +0 -312
  605. package/src/components/qonsoleSmartInput/QonsoleSmartInput.stories.tsx +0 -797
  606. package/src/components/qonsoleSmartInput/QonsoleSmartInput.tsx +0 -105
  607. package/src/components/qonsoleSmartInput/index.ts +0 -16
  608. package/src/components/qonsoleSmartInput/qonsoleInserter.ts +0 -77
  609. package/src/components/qonsoleSmartInput/types.ts +0 -133
  610. package/src/components/qonsoleSmartInput/useQonsoleSession.ts +0 -124
  611. package/src/components/searchFilterBar/SearchFilterBar.stories.tsx +0 -62
  612. package/src/components/searchFilterBar/SearchFilterBar.tsx +0 -144
  613. package/src/components/searchFilterBar/index.ts +0 -1
  614. package/src/components/smartEditor/MarkdownDoc.tsx +0 -190
  615. package/src/components/smartEditor/SmartEditor.stories.tsx +0 -475
  616. package/src/components/smartEditor/SmartEditor.tsx +0 -808
  617. package/src/components/smartEditor/__fixtures__/mockLspServer.ts +0 -205
  618. package/src/components/smartEditor/helpers.ts +0 -217
  619. package/src/components/smartEditor/index.ts +0 -35
  620. package/src/components/smartEditor/styling.ts +0 -45
  621. package/src/components/smartEditor/types.ts +0 -211
  622. package/src/components/smartEditor/useLspAutocomplete.ts +0 -758
  623. package/src/components/smartEditor/useLspDiagnosticDecorations.ts +0 -125
  624. package/src/components/smartEditor/useLspHover.ts +0 -230
  625. package/src/components/smartEditor/useLspSemanticTokens.ts +0 -298
  626. package/src/components/smartEditor/useLspSession.ts +0 -231
  627. package/src/components/smartEditor/useLspSignatureHelp.ts +0 -198
  628. package/src/components/supportTicket/AttachmentChips.stories.tsx +0 -171
  629. package/src/components/supportTicket/AttachmentChips.tsx +0 -147
  630. package/src/components/supportTicket/InterfaceReferenceTags.stories.tsx +0 -257
  631. package/src/components/supportTicket/InterfaceReferenceTags.tsx +0 -129
  632. package/src/components/supportTicket/ReferencePicker.stories.tsx +0 -584
  633. package/src/components/supportTicket/ReferencePicker.tsx +0 -563
  634. package/src/components/supportTicket/TicketConversation.stories.tsx +0 -121
  635. package/src/components/supportTicket/TicketHeader.stories.tsx +0 -183
  636. package/src/components/supportTicket/TicketHeader.tsx +0 -247
  637. package/src/components/supportTicket/TicketMetaTags.stories.tsx +0 -103
  638. package/src/components/supportTicket/TicketMetaTags.tsx +0 -85
  639. package/src/components/supportTicket/TicketReplyBox.stories.tsx +0 -354
  640. package/src/components/supportTicket/TicketReplyBox.tsx +0 -150
  641. package/src/components/supportTicket/__fixtures__/kindMarks.ts +0 -28
  642. package/src/components/supportTicket/attachmentAccess.ts +0 -97
  643. package/src/components/supportTicket/fileToAttachment.ts +0 -24
  644. package/src/components/supportTicket/index.ts +0 -10
  645. package/src/components/supportTicket/meta.ts +0 -206
  646. package/src/components/supportTicket/ticketModel.ts +0 -131
  647. package/src/components/supportTicket/useLoadedImages.ts +0 -73
  648. package/src/components/ticketReferences/TicketReferences.stories.tsx +0 -315
  649. package/src/components/ticketReferences/TicketReferences.tsx +0 -906
  650. package/src/components/ticketReferences/index.ts +0 -2
  651. package/src/components/ticketThread/TicketThread.stories.tsx +0 -829
  652. package/src/components/ticketThread/TicketThread.tsx +0 -719
  653. package/src/components/ticketThread/index.ts +0 -6
  654. package/src/contexts/FetchContext.tsx +0 -25
  655. package/src/contexts/ReqraftContext.tsx +0 -9
  656. package/src/contexts/StorageContext.tsx +0 -33
  657. package/src/global.d.ts +0 -4
  658. package/src/helpers/allowedValues.ts +0 -249
  659. package/src/helpers/choiceChip.ts +0 -227
  660. package/src/helpers/common.ts +0 -326
  661. package/src/helpers/dpqlDetection.ts +0 -209
  662. package/src/helpers/expressions.ts +0 -140
  663. package/src/helpers/optionUiTypes.ts +0 -199
  664. package/src/helpers/options.ts +0 -150
  665. package/src/helpers/providerValue.ts +0 -125
  666. package/src/helpers/scrollbar.ts +0 -32
  667. package/src/helpers/singleLineString.ts +0 -61
  668. package/src/helpers/templateItems.ts +0 -81
  669. package/src/helpers/templateText.ts +0 -350
  670. package/src/helpers/templates.ts +0 -602
  671. package/src/helpers/validations.ts +0 -2085
  672. package/src/hooks/useArgSchema.ts +0 -37
  673. package/src/hooks/useCoarsePointer.ts +0 -30
  674. package/src/hooks/useFetch/useFetch.stories.tsx +0 -379
  675. package/src/hooks/useFetch/useFetch.tsx +0 -154
  676. package/src/hooks/usePhoneViewport.ts +0 -34
  677. package/src/hooks/useQorusTypes.ts +0 -233
  678. package/src/hooks/useReqraftProperty.ts +0 -16
  679. package/src/hooks/useStorage/useStorage.stories.tsx +0 -168
  680. package/src/hooks/useStorage/useStorage.ts +0 -35
  681. package/src/hooks/useTemplates.ts +0 -123
  682. package/src/hooks/useValidation.ts +0 -9
  683. package/src/hooks/useWebSocket/useWebSocket.ts +0 -224
  684. package/src/hooks/useWebSocket/useWebsocket.stories.tsx +0 -640
  685. package/src/hooks/useWhyDidYouUpdate.ts +0 -38
  686. package/src/index.tsx +0 -86
  687. package/src/providers/FetchProvider.tsx +0 -40
  688. package/src/providers/ReqraftProvider.tsx +0 -52
  689. package/src/providers/StorageProvider.tsx +0 -131
  690. package/src/stores/currentUser/currentUser.stories.tsx +0 -100
  691. package/src/stores/currentUser/currentUser.tsx +0 -94
  692. package/src/stories/Data/fileFieldArgSchema.json +0 -86
  693. package/src/stories/Tests/utils.ts +0 -320
  694. package/src/stories/storyNetwork.ts +0 -92
  695. package/src/stories/tracking.tsx +0 -206
  696. package/src/tracking/browser/attach.ts +0 -186
  697. package/src/tracking/browser/env.ts +0 -78
  698. package/src/tracking/core/consent.ts +0 -37
  699. package/src/tracking/core/engagement.ts +0 -47
  700. package/src/tracking/core/experiments.ts +0 -258
  701. package/src/tracking/core/hash.ts +0 -26
  702. package/src/tracking/core/ids.ts +0 -25
  703. package/src/tracking/core/observable.ts +0 -23
  704. package/src/tracking/core/queue.ts +0 -131
  705. package/src/tracking/core/sections.ts +0 -166
  706. package/src/tracking/core/storage.ts +0 -69
  707. package/src/tracking/core/tracker.ts +0 -417
  708. package/src/tracking/core/types.ts +0 -162
  709. package/src/tracking/core/utm.ts +0 -23
  710. package/src/tracking/index.ts +0 -72
  711. package/src/tracking/markup.ts +0 -17
  712. package/src/tracking/react/Experiment.tsx +0 -44
  713. package/src/tracking/react/TrackingProvider.tsx +0 -56
  714. package/src/tracking/react/hooks.ts +0 -106
  715. package/src/tracking/react/index.ts +0 -13
  716. package/src/tracking/testing.ts +0 -108
  717. package/src/tracking/ui/ExperimentCard.stories.tsx +0 -296
  718. package/src/tracking/ui/ExperimentCard.tsx +0 -667
  719. package/src/tracking/ui/ExperimentsOverlay.stories.tsx +0 -155
  720. package/src/tracking/ui/ExperimentsOverlay.tsx +0 -437
  721. package/src/tracking/ui/anchor.ts +0 -180
  722. package/src/tracking/ui/card.ts +0 -464
  723. package/src/tracking/ui/client.ts +0 -117
  724. package/src/tracking/ui/index.ts +0 -77
  725. package/src/tracking/ui/types.ts +0 -110
  726. package/src/tracking/ui/useExperimentsAdmin.ts +0 -103
  727. package/src/types/Form.ts +0 -29
  728. package/src/types.ts +0 -14
  729. package/src/utils/datetime.ts +0 -10
  730. package/src/utils/fetch.ts +0 -457
  731. package/src/utils/lspClient.ts +0 -711
  732. package/src/utils/lspClient.types.ts +0 -211
  733. package/src/utils/queryUnlessCancelled.ts +0 -28
  734. package/src/utils/websocket.ts +0 -293
  735. package/vite.config.ts +0 -58
  736. package/vitest.config.ts +0 -69
@@ -33,6 +33,42 @@ var __importStar = (this && this.__importStar) || function (mod) {
33
33
  __setModuleDefault(result, mod);
34
34
  return result;
35
35
  };
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ var __generator = (this && this.__generator) || function (thisArg, body) {
46
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
47
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
+ function verb(n) { return function (v) { return step([n, v]); }; }
49
+ function step(op) {
50
+ if (f) throw new TypeError("Generator is already executing.");
51
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
52
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
+ if (y = 0, t) op = [op[0] & 2, t.value];
54
+ switch (op[0]) {
55
+ case 0: case 1: t = op; break;
56
+ case 4: _.label++; return { value: op[1], done: false };
57
+ case 5: _.label++; y = op[1]; op = [0]; continue;
58
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
+ default:
60
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
+ if (t[2]) _.ops.pop();
65
+ _.trys.pop(); continue;
66
+ }
67
+ op = body.call(thisArg, _);
68
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
+ }
71
+ };
36
72
  var __rest = (this && this.__rest) || function (s, e) {
37
73
  var t = {};
38
74
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -57,7 +93,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
57
93
  return (mod && mod.__esModule) ? mod : { "default": mod };
58
94
  };
59
95
  Object.defineProperty(exports, "__esModule", { value: true });
60
- exports.TemplateField = exports.isTemplateAwareUiType = exports.BuiltInTemplateAwareUiTypes = exports.TemplateDropdownSelector = exports.CustomMenuItems = exports.ComponentMap = exports.TemplatesListProps = exports.isValueTemplate = exports.getTemplateValue = exports.getTemplateKey = void 0;
96
+ exports.TemplateField = exports.isTemplateAwareUiType = exports.BuiltInTemplateAwareUiTypes = exports.TemplateDropdownSelector = exports.CustomMenuItems = exports.DEFAULT_VALUE_TABS_LABELS = exports.ComponentMap = exports.TemplatesListProps = exports.isValueTemplate = exports.getTemplateValue = exports.getTemplateKey = void 0;
61
97
  var react_1 = require("react");
62
98
  var jsx_runtime_1 = require("react/jsx-runtime");
63
99
  // Verbatim port of qorus-ide `src/components/Field/template.tsx` (774 LOC,
@@ -76,7 +112,6 @@ Object.defineProperty(exports, "getTemplateValue", { enumerable: true, get: func
76
112
  Object.defineProperty(exports, "isValueTemplate", { enumerable: true, get: function () { return templates_1.isValueTemplate; } });
77
113
  var dpqlDetection_1 = require("../../../../helpers/dpqlDetection");
78
114
  var templateItems_1 = require("../../../../helpers/templateItems");
79
- var markdownRendererContext_1 = require("../../../Description/markdownRendererContext");
80
115
  var validations_1 = require("../../../../helpers/validations");
81
116
  var useDpqlProbe_1 = require("../../../dpqlEditor/useDpqlProbe");
82
117
  var useQorusTypes_1 = require("../../../../hooks/useQorusTypes");
@@ -87,16 +122,19 @@ var builder_1 = require("../../expressions/builder");
87
122
  var ExpressionField_1 = require("../../expressions/ExpressionField");
88
123
  var useExpressions_1 = require("../../expressions/useExpressions");
89
124
  var AutoFormField_1 = require("../auto/AutoFormField");
90
- var Boolean_1 = __importDefault(require("../boolean/Boolean"));
125
+ var Boolean_1 = __importStar(require("../boolean/Boolean"));
91
126
  var Date_1 = require("../date/Date");
92
127
  var File_1 = require("../file/File");
93
128
  var LongString_1 = __importDefault(require("../long-string/LongString"));
94
- var Number_1 = __importDefault(require("../number/Number"));
129
+ var Number_1 = __importStar(require("../number/Number"));
95
130
  var ReadOnlyTemplateTag_1 = require("./ReadOnlyTemplateTag");
96
131
  var RichText_1 = require("../rich-text/RichText");
132
+ var TemplateBrowser_1 = require("./TemplateBrowser");
97
133
  var common_1 = require("../../../../helpers/common");
98
134
  var singleLineString_1 = require("../../../../helpers/singleLineString");
99
135
  var optionUiTypes_1 = require("../../../../helpers/optionUiTypes");
136
+ var expressions_1 = require("../../../../helpers/expressions");
137
+ var writtenAsText_1 = require("./writtenAsText");
100
138
  var rowMenuContext_1 = require("../../engine/rowMenuContext");
101
139
  /**
102
140
  * How long the author must pause before typed text is sent to the DPQL
@@ -128,13 +166,15 @@ var LongStringField = function (_a) {
128
166
  var name = _a.name, onChange = _a.onChange, type = _a.type, level = _a.level, allowTemplates = _a.allowTemplates, rest = __rest(_a, ["name", "onChange", "type", "level", "allowTemplates"]);
129
167
  return ((0, jsx_runtime_1.jsx)(LongString_1.default, __assign({}, rest, { type: type, onChange: function (value) { return onChange === null || onChange === void 0 ? void 0 : onChange(name, value); } })));
130
168
  };
169
+ // `type` becomes the kind of number it holds: without it, a float field took every number for a
170
+ // whole one.
131
171
  var Number = function (_a) {
132
172
  var name = _a.name, onChange = _a.onChange, type = _a.type, level = _a.level, allowTemplates = _a.allowTemplates, rest = __rest(_a, ["name", "onChange", "type", "level", "allowTemplates"]);
133
- return ((0, jsx_runtime_1.jsx)(Number_1.default, __assign({}, rest, { onChange: function (value) { return onChange === null || onChange === void 0 ? void 0 : onChange(name, value); } })));
173
+ return ((0, jsx_runtime_1.jsx)(Number_1.default, __assign({}, rest, { type: (0, Number_1.numberKindOf)(type), onChange: function (value) { return onChange === null || onChange === void 0 ? void 0 : onChange(name, value); } })));
134
174
  };
135
175
  var BooleanField = function (_a) {
136
176
  var name = _a.name, onChange = _a.onChange, value = _a.value, type = _a.type, level = _a.level, allowTemplates = _a.allowTemplates, rest = __rest(_a, ["name", "onChange", "value", "type", "level", "allowTemplates"]);
137
- return ((0, jsx_runtime_1.jsx)(Boolean_1.default, __assign({}, rest, { checked: !!value, onChange: function (checked) { return onChange === null || onChange === void 0 ? void 0 : onChange(name, checked); } })));
177
+ return ((0, jsx_runtime_1.jsx)(Boolean_1.default, __assign({}, rest, { checked: (0, Boolean_1.yesNoShown)(value), onChange: function (checked) { return onChange === null || onChange === void 0 ? void 0 : onChange(name, checked); } })));
138
178
  };
139
179
  var DateField = function (_a) {
140
180
  var name = _a.name, onChange = _a.onChange, type = _a.type, level = _a.level, allowTemplates = _a.allowTemplates, rest = __rest(_a, ["name", "onChange", "type", "level", "allowTemplates"]);
@@ -162,6 +202,44 @@ exports.ComponentMap = {
162
202
  richtext: RichTextField,
163
203
  file: FileField,
164
204
  };
205
+ /** The keyboard a whole number or a number is typed on, on the Value tab. */
206
+ var TEXTABLE_INPUT_MODES = {
207
+ int: 'numeric',
208
+ integer: 'numeric',
209
+ softint: 'numeric',
210
+ number: 'decimal',
211
+ float: 'decimal',
212
+ softfloat: 'decimal',
213
+ softnumber: 'decimal',
214
+ };
215
+ exports.DEFAULT_VALUE_TABS_LABELS = {
216
+ value: 'Value',
217
+ expression: 'Expression',
218
+ visual: 'Visual',
219
+ template: 'Template',
220
+ expressionTooltip: 'Write an expression - it also takes templates',
221
+ visualTooltip: 'Build the expression visually',
222
+ templateTooltip: 'Choose a template',
223
+ cannotShowExpression: "This expression can't be shown as a value.",
224
+ condition: 'Condition',
225
+ conditionTooltip: 'Write the condition - it also takes templates',
226
+ conditionVisualTooltip: 'Build the condition visually',
227
+ cannotShowCondition: "This condition can't be shown as a value.",
228
+ templateShownOn: function (tab) { return "A template is shown on the ".concat(tab, " tab, not here."); },
229
+ replaceWithAValue: 'Replace it with a value',
230
+ // the sentence starts with the first type
231
+ conversion: function (from, to) {
232
+ return "".concat(from.charAt(0).toUpperCase()).concat(from.slice(1), " is converted to ").concat(to, " when the value is used; a value that does not convert fails");
233
+ },
234
+ undo: 'Undo',
235
+ undoTooltip: function (text) { return "Keep \"".concat(text, "\" as a value instead"); },
236
+ };
237
+ var DEFAULT_SAVED_VALUES_LABELS = {
238
+ save: 'Save this value',
239
+ saveTooltip: 'Save this value to use it again',
240
+ use: 'Use a saved value',
241
+ remove: 'Remove saved value',
242
+ };
165
243
  var renderMenuActionRows = function (actions, closePopover, size) {
166
244
  return actions.items.map(function (item, index) {
167
245
  if ('isDivider' in item) {
@@ -215,12 +293,9 @@ exports.CustomMenuItems = (0, react_2.memo)(function (_a) {
215
293
  }) })));
216
294
  });
217
295
  exports.TemplateDropdownSelector = (0, react_2.memo)(function (_a) {
218
- var onItemSelect = _a.onItemSelect, onRemoveClick = _a.onRemoveClick, items = _a.items, templates = _a.templates, allowCustomValues = _a.allowCustomValues, hasOnlyAllowedValues = _a.hasOnlyAllowedValues, value = _a.value, size = _a.size, rest = __rest(_a, ["onItemSelect", "onRemoveClick", "items", "templates", "allowCustomValues", "hasOnlyAllowedValues", "value", "size"]);
219
- /* The LAST hop before Reqore, which is the only place a drawn description
220
- may be made: `filteredTemplates` upstream is a `JSON.stringify` memo key,
221
- and an element in it throws on its own circular owner. */
222
- var renderMarkdown = (0, markdownRendererContext_1.useMarkdownRenderer)();
223
- var shownItems = (0, react_2.useMemo)(function () { return (0, templateItems_1.renderTemplateItemDescriptions)((0, templateItems_1.templateItemsToShow)(items), renderMarkdown); }, [items, renderMarkdown]);
296
+ var onItemSelect = _a.onItemSelect, onRemoveClick = _a.onRemoveClick, items = _a.items, templates = _a.templates, allowCustomValues = _a.allowCustomValues, hasOnlyAllowedValues = _a.hasOnlyAllowedValues, value = _a.value, size = _a.size, templateBadge = _a.templateBadge, rest = __rest(_a, ["onItemSelect", "onRemoveClick", "items", "templates", "allowCustomValues", "hasOnlyAllowedValues", "value", "size", "templateBadge"]);
297
+ /* The catalogue browsed: `TemplateBrowser` draws its descriptions at the hand-off to Reqore. */
298
+ var browsed = (0, react_2.useMemo)(function () { return ({ items: items }); }, [items]);
224
299
  // One resolver for every surface that names a reference — the picker chip
225
300
  // here, the read-only tag, and the compact row's expression summary. The
226
301
  // row and this editor must agree: a reference that reads as its path when
@@ -235,10 +310,10 @@ exports.TemplateDropdownSelector = (0, react_2.memo)(function (_a) {
235
310
  icon: 'ExchangeDollarLine',
236
311
  });
237
312
  }, [template]);
238
- // SEAM (reqraft): the IDE resolves the template's app/action via
239
- // `useGetAppActionData` and renders the action's display name as a badge
240
- // here — the app catalogue is IDE-only, so the badge is dropped.
241
- return ((0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { vertical: true, fluid: true, children: [hasOnlyAllowedValues && ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreMessage, { intent: 'warning', size: 'small', opaque: false, children: "This field has pre-defined allowed values, make sure the template you select is compatible with those" })), (0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { stack: true, children: [(0, jsx_runtime_1.jsx)(reqore_1.ReqoreDropdown, __assign({ className: 'template-selector', customTheme: exports.TemplatesListProps.listCustomTheme, minimal: true, compact: true, onItemSelect: onItemSelect, items: shownItems, label: label, leftIconProps: leftIconProps, caretPosition: 'right', filterable: true, size: size }, exports.TemplatesListProps)), allowCustomValues || value ?
313
+ // SEAM (reqraft): where the template comes from (the IDE: the app action that captures it), as the
314
+ // host says, beside its name
315
+ var badge = template && templateBadge ? templateBadge(template) : undefined;
316
+ return ((0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { vertical: true, fluid: true, children: [hasOnlyAllowedValues && ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreMessage, { intent: 'warning', size: 'small', opaque: false, children: "This field has pre-defined allowed values, make sure the template you select is compatible with those" })), (0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { stack: true, children: [(0, jsx_runtime_1.jsx)(TemplateBrowser_1.TemplateBrowser, __assign({ className: 'template-selector', customTheme: exports.TemplatesListProps.listCustomTheme, minimal: true, compact: true, onItemSelect: onItemSelect, templates: browsed, focusFilter: true, label: label, leftIconProps: leftIconProps, badge: badge, caretPosition: 'right', size: size }, exports.TemplatesListProps)), allowCustomValues || value ?
242
317
  (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { customTheme: exports.TemplatesListProps.listCustomTheme, fixed: true, icon: 'CloseLine', tooltip: 'Remove template value', minimal: true, className: 'template-remove', compact: true, size: size, onClick: onRemoveClick })
243
318
  : null] })] }));
244
319
  });
@@ -261,10 +336,10 @@ var isTemplateAwareUiType = function (uiType, extra) {
261
336
  };
262
337
  exports.isTemplateAwareUiType = isTemplateAwareUiType;
263
338
  var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
264
- var _b, _c, _d;
265
- var rowMenu = _a.rowMenu, value = _a.value, name = _a.name, onChange = _a.onChange, _e = _a.component, Comp = _e === void 0 ? AutoFormField_1.AutoFormField : _e, templates = _a.templates, interfaceContext = _a.interfaceContext, // eslint-disable-line @typescript-eslint/no-unused-vars
266
- _f = _a.allowTemplates, // eslint-disable-line @typescript-eslint/no-unused-vars
267
- allowTemplates = _f === void 0 ? true : _f, allowFunctions = _a.allowFunctions, allowTextExpressions = _a.allowTextExpressions, extraActions = _a.extraActions, componentOverrides = _a.componentOverrides, _g = _a.allowCustomValues, allowCustomValues = _g === void 0 ? true : _g, _h = _a.filterTemplatesByType, filterTemplatesByType = _h === void 0 ? true : _h, filterTemplatesFunc = _a.filterTemplatesFunc, componentFromType = _a.componentFromType, isFunction = _a.isFunction, isDefaultFunction = _a.isDefaultFunction, isDefaultTemplate = _a.isDefaultTemplate, returnType = _a.returnType, level = _a.level, className = _a.className, menuItems = _a.menuItems, menuActions = _a.menuActions, menuTrailingItems = _a.menuTrailingItems, reorder = _a.reorder, label = _a.label, rest = __rest(_a, ["rowMenu", "value", "name", "onChange", "component", "templates", "interfaceContext", "allowTemplates", "allowFunctions", "allowTextExpressions", "extraActions", "componentOverrides", "allowCustomValues", "filterTemplatesByType", "filterTemplatesFunc", "componentFromType", "isFunction", "isDefaultFunction", "isDefaultTemplate", "returnType", "level", "className", "menuItems", "menuActions", "menuTrailingItems", "reorder", "label"]);
339
+ var _b, _c, _d, _e, _f, _g, _h;
340
+ var rowMenu = _a.rowMenu, value = _a.value, name = _a.name, onChange = _a.onChange, _j = _a.component, Comp = _j === void 0 ? AutoFormField_1.AutoFormField : _j, templates = _a.templates, interfaceContext = _a.interfaceContext, // eslint-disable-line @typescript-eslint/no-unused-vars
341
+ _k = _a.allowTemplates, // eslint-disable-line @typescript-eslint/no-unused-vars
342
+ allowTemplates = _k === void 0 ? true : _k, allowFunctions = _a.allowFunctions, allowTextExpressions = _a.allowTextExpressions, valueTabs = _a.valueTabs, valueTabsLabels = _a.valueTabsLabels, savedValues = _a.savedValues, templateBadge = _a.templateBadge, extraActions = _a.extraActions, componentOverrides = _a.componentOverrides, _l = _a.allowCustomValues, allowCustomValues = _l === void 0 ? true : _l, _m = _a.filterTemplatesByType, filterTemplatesByType = _m === void 0 ? true : _m, filterTemplatesFunc = _a.filterTemplatesFunc, componentFromType = _a.componentFromType, isFunction = _a.isFunction, isDefaultFunction = _a.isDefaultFunction, isDefaultTemplate = _a.isDefaultTemplate, returnType = _a.returnType, level = _a.level, className = _a.className, menuItems = _a.menuItems, menuActions = _a.menuActions, menuTrailingItems = _a.menuTrailingItems, reorder = _a.reorder, label = _a.label, rest = __rest(_a, ["rowMenu", "value", "name", "onChange", "component", "templates", "interfaceContext", "allowTemplates", "allowFunctions", "allowTextExpressions", "valueTabs", "valueTabsLabels", "savedValues", "templateBadge", "extraActions", "componentOverrides", "allowCustomValues", "filterTemplatesByType", "filterTemplatesFunc", "componentFromType", "isFunction", "isDefaultFunction", "isDefaultTemplate", "returnType", "level", "className", "menuItems", "menuActions", "menuTrailingItems", "reorder", "label"]);
268
343
  var qorusTypes = (0, useQorusTypes_1.useQorusTypes)();
269
344
  var functions = (0, useExpressions_1.useExpressions)({
270
345
  allow: !!allowFunctions,
@@ -369,17 +444,57 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
369
444
  /** Where this field lands when it is empty: an untyped one in template mode — see above. */
370
445
  var emptyLandsOnTemplates = typeIsAnyLike && (hasTemplatesOnOffer || (!!allowCustomValues && !hasOnlyAllowedValues));
371
446
  var opensOnTemplates = isEmptyValue && emptyLandsOnTemplates;
372
- var _j = (0, react_2.useState)((isDefaultTemplate || (0, templates_1.isValueTemplate)(value) || !allowCustomValues || opensOnTemplates) &&
373
- allowTemplates), isTemplateState = _j[0], setIsTemplate = _j[1];
447
+ /* An untyped field holding null is written in the same text field, as `null`: the editor an untyped
448
+ field otherwise falls to drew null as an empty box, the same as a field holding nothing, so the
449
+ author could not tell the two apart (qorus#646). */
450
+ var nullWrittenAsText = value === null && typeIsAnyLike && !!allowCustomValues && !hasOnlyAllowedValues;
451
+ /* The tabs a value is entered on (qorus#646, David): Value · Expression · Visual where the field takes
452
+ templates and expressions written as text, Value · Template where it takes templates only, none where
453
+ it takes no templates. One value, three views: see `selectTab`. */
454
+ var valueTabIsText = (0, writtenAsText_1.isWrittenAsTextOnTheValueTab)(type) && !hasOnlyAllowedValues;
455
+ var tabsKind = !valueTabs || !allowTemplates || editorHandlesTemplates || rest.arg_schema ? undefined
456
+ : allowFunctions && allowTextExpressions && !hasOnlyAllowedValues ? 'full'
457
+ : 'template';
458
+ /** The value is an expression (its AST), as the host says. */
459
+ var valueIsExpression = !!(isFunction || isDefaultFunction) && value !== null && typeof value === 'object';
460
+ /** Where a saved value opens: an expression on Expression; a template on Value where it is written as
461
+ * text, else on Expression (or Template, for a template-only field); anything else on Value. */
462
+ var _o = (0, react_2.useState)(function () {
463
+ if (!tabsKind)
464
+ return 'value';
465
+ if (valueIsExpression)
466
+ return tabsKind === 'full' ? 'expression' : 'value';
467
+ if (typeof value === 'string' && (0, templates_1.isValueTemplate)(value) && !valueTabIsText) {
468
+ return tabsKind === 'full' ? 'expression' : 'template';
469
+ }
470
+ return 'value';
471
+ }), tab = _o[0], setTab = _o[1];
472
+ var opensInExpressionText = tabsKind === 'full' && tab === 'expression' && !valueIsExpression;
473
+ var tabsKindRef = (0, react_2.useRef)(tabsKind);
474
+ tabsKindRef.current = tabsKind;
475
+ /** What the Text view is seeded with when the value is not an expression yet; null outside it. */
476
+ var _p = (0, react_2.useState)(opensInExpressionText ? (0, writtenAsText_1.expressionTextOfValue)(value) : null), expressionSeed = _p[0], setExpressionSeed = _p[1];
477
+ var _q = (0, react_2.useState)(tabsKind ?
478
+ tab === 'template' || (tab === 'value' && valueTabIsText)
479
+ : (isDefaultTemplate ||
480
+ (0, templates_1.isValueTemplate)(value) ||
481
+ !allowCustomValues ||
482
+ opensOnTemplates ||
483
+ nullWrittenAsText) &&
484
+ !!allowTemplates), isTemplateState = _q[0], setIsTemplate = _q[1];
374
485
  var isTemplate = editorHandlesTemplates ? false : isTemplateState;
375
- var _k = (0, react_2.useState)(!!isDefaultFunction && !!allowFunctions), internalIsFunction = _k[0], setInternalIsFunction = _k[1];
376
- var _l = (0, react_2.useState)(value), templateValue = _l[0], setTemplateValue = _l[1];
486
+ var _r = (0, react_2.useState)(tabsKind ? tab === 'expression' || tab === 'visual' : !!isDefaultFunction && !!allowFunctions), internalIsFunction = _r[0], setInternalIsFunction = _r[1];
487
+ var _s = (0, react_2.useState)(value), templateValue = _s[0], setTemplateValue = _s[1];
377
488
  // Typed text that turned out to be an expression the author may accept.
378
- var _m = (0, react_2.useState)(null), dpqlOffer = _m[0], setDpqlOffer = _m[1];
489
+ var _t = (0, react_2.useState)(null), dpqlOffer = _t[0], setDpqlOffer = _t[1];
379
490
  // The literal this field held before typed text switched it into
380
491
  // expression mode — kept so the switch is undoable, and so the editor
381
492
  // opens on the Text view the author was already writing in.
382
- var _o = (0, react_2.useState)(null), expressionFromText = _o[0], setExpressionFromText = _o[1];
493
+ var _u = (0, react_2.useState)(null), expressionFromText = _u[0], setExpressionFromText = _u[1];
494
+ /* The view the expression editor (without value tabs) is on. It opens on Text (qorus#646, David); when it
495
+ is mounted again - an expression removed in Visual and put back empty by its host, as a row rule's
496
+ condition is - it opens where the author was, not back on Text. */
497
+ var _v = (0, react_2.useState)('text'), expressionMode = _v[0], setExpressionMode = _v[1];
383
498
  // Texts the author has said no to. Without this, dismissing an offer (or
384
499
  // undoing a switch) would re-detect the same text on the next render and
385
500
  // ask again forever.
@@ -392,6 +507,12 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
392
507
  if (isTemplate && (0, templates_1.isValueTemplate)(value)) {
393
508
  setTemplateValue(value);
394
509
  }
510
+ /* Emptied from outside the editor - the card's "Clear value", an undo, a host's reset - the text the
511
+ value is written in is emptied too. It kept its own copy, so a cleared value went on showing what it
512
+ had held (qorus#646: "Clear value" had no effect). The editor's own emptying sets this already. */
513
+ if (isEmptyValue && templateValue) {
514
+ setTemplateValue(null);
515
+ }
395
516
  }, [JSON.stringify(value)]);
396
517
  /* Clearing an untyped field returns it to the template selector, which is
397
518
  where mounting it empty already lands.
@@ -450,8 +571,19 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
450
571
  setIsTemplate(false);
451
572
  }
452
573
  }, [allowCustomValues]);
574
+ // null arriving later (written in the Text tab, say) is written in the text field too - see above
575
+ (0, react_2.useEffect)(function () {
576
+ if (!isTemplate && nullWrittenAsText && allowTemplates) {
577
+ setTemplateValue(null);
578
+ setIsTemplate(true);
579
+ }
580
+ }, [nullWrittenAsText, allowTemplates]);
453
581
  (0, react_2.useEffect)(function () {
454
- if (!isTemplate && (0, templates_1.isValueTemplate)(value) && allowTemplates) {
582
+ // a template on the Expression tab stays there: it is the expression editor's to show
583
+ if (!isTemplate &&
584
+ (0, templates_1.isValueTemplate)(value) &&
585
+ allowTemplates &&
586
+ !(tabsKind && internalIsFunction)) {
455
587
  // In auto mode, leave user-typed dollar-strings alone ('$foo: hello'
456
588
  // passes the loose check) — but a string that IS one well-formed token
457
589
  // ($data:{…}, $config:item) must still flip into template mode, or an
@@ -478,20 +610,23 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
478
610
  // When template key or template value change run the onChange function
479
611
  (0, react_use_1.useUpdateEffect)(function () {
480
612
  if (templateValue) {
481
- onChange === null || onChange === void 0 ? void 0 : onChange(name, templateValue, type, effectiveIsFunction);
613
+ /* On the tabs this text is the Value or the Template tab's - a value, never an expression -
614
+ whichever tab is open by the time it arrives: an edit sent as its field goes away (the tab
615
+ switched straight after it) arrives on the next tab (qorus#646). */
616
+ var asExpression = tabsKindRef.current ? false : effectiveIsFunction;
617
+ /* Read from the text where the field is written as text: a lone template takes its own
618
+ type in an untyped field, a scalar's literal is that literal, other text is text. */
619
+ if (templateSupportsCustomValues) {
620
+ var read = (0, writtenAsText_1.templateTextValue)(templateValue, type, filteredTemplates);
621
+ onChange === null || onChange === void 0 ? void 0 : onChange(name, read.value, read.type, asExpression);
622
+ return;
623
+ }
624
+ onChange === null || onChange === void 0 ? void 0 : onChange(name, templateValue, type, asExpression);
482
625
  }
483
626
  }, [JSON.stringify(templateValue)]);
484
627
  // an editor that takes templates into its own text has no template mode to switch to: "Use Template"
485
628
  // there emptied the field and showed nothing in its place
486
629
  var showTemplateToggle = allowCustomValues && allowTemplates && !rest.arg_schema && !editorHandlesTemplates;
487
- // Only a BRACED context ref (`$data:{…}` — machine-written, nobody types
488
- // one) renders as the picker chip (named via `resolveTemplateLabel`)
489
- // rather than as its raw text in a string editor. Plain word-path tokens
490
- // (`$local:id`) are typeable, so per the build #123 review they keep the
491
- // input that offers templates while typing. Mixed text-and-token strings
492
- // keep the string editor too; the chip-in-editor treatment arrives with
493
- // the rich-text string mode.
494
- var templateValueIsBracedToken = (0, templates_1.isBracedTemplateToken)(templateValue);
495
630
  /* An UNTYPED field can be typed into as well as picked from.
496
631
 
497
632
  Template mode has a typable editor whenever the field's type can hold
@@ -507,9 +642,16 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
507
642
  specific to that field: every empty untyped field with templates on
508
643
  offer got the same downgrade. The editor still offers the same templates
509
644
  on focus, so nothing is lost by being able to type as well. */
510
- var templateSupportsCustomValues = allowCustomValues && (type === 'string' || typeIsAnyLike) && !hasOnlyAllowedValues;
645
+ /* And so can a scalar: a whole number, a number or a yes/no is written as text too
646
+ (qorus#646). A template chosen into it is a chip in that text, not a pick-only
647
+ control that holds the template and nothing else, so text can be written around it;
648
+ what the field then holds is read from the text (writtenAsText). A date keeps its
649
+ date control. */
650
+ var templateSupportsCustomValues = allowCustomValues && (0, writtenAsText_1.isWrittenAsText)(type) && !hasOnlyAllowedValues;
511
651
  var showTemplatesDropdown = allowTemplates && (!allowCustomValues || (isTemplate && !templateSupportsCustomValues));
512
652
  var hasOnlyExpressions = !allowCustomValues && !allowTemplates && allowFunctions;
653
+ /** A date field with templates on offer: they are offered beside its date control. */
654
+ var dateTakesTemplates = type === 'date' && !!allowTemplates && hasTemplatesOnOffer && !hasOnlyAllowedValues;
513
655
  // True when some input control renders besides the ⋮ menu. When nothing
514
656
  // does (an empty `any` field: custom values are disallowed and the value's
515
657
  // type is picked FROM the menu), the menu trigger is the field's only
@@ -529,8 +671,11 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
529
671
  /* Emptying the text leaves the field where an empty field lands. For
530
672
  an untyped field that is THIS editor: switching to custom mode here
531
673
  mounted a different editor in its place, so deleting the last
532
- character lost the cursor. */
533
- if (!(emptyLandsOnTemplates && allowTemplates)) {
674
+ character lost the cursor. A field written as text (a whole number, a
675
+ number, a yes/no) is the same: deleting the template in it left a
676
+ different, empty editor in its place, and what was typed next went
677
+ nowhere. */
678
+ if (!((emptyLandsOnTemplates || templateSupportsCustomValues) && allowTemplates)) {
534
679
  setIsTemplate(false);
535
680
  }
536
681
  setTemplateValue(null);
@@ -539,7 +684,7 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
539
684
  else {
540
685
  setTemplateValue(val);
541
686
  }
542
- }, [name, onChange, emptyLandsOnTemplates, allowTemplates]);
687
+ }, [name, onChange, emptyLandsOnTemplates, templateSupportsCustomValues, allowTemplates]);
543
688
  var handleTemplateTextChange = (0, react_2.useCallback)(function (val) { return handleTemplateFieldChange(name, typeof val === 'string' ? val : ''); }, [handleTemplateFieldChange, name]);
544
689
  var handleSelectTemplateFromList = (0, react_2.useCallback)(
545
690
  // If the field has allowed values and supports templates, we do not want to overwrite the field type with the template type
@@ -576,6 +721,15 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
576
721
  // SEAM (reqraft): the IDE computes `canSaveValue` here and renders a
577
722
  // `SaveValueButton` in the controls menu — the saved-values storage is
578
723
  // IDE-only, so the menu item is dropped (`allowSaving` is inert).
724
+ /* A template chosen beside a date control is the value at once, IN the template control: handed to
725
+ the form while the field was still drawing its date control, the reference reached the date
726
+ picker first, which threw on it ("Invalid ISO 8601 date time string"). */
727
+ var handleSelectDateTemplate = (0, react_2.useCallback)(function (item) {
728
+ if (typeof (item === null || item === void 0 ? void 0 : item.value) !== 'string')
729
+ return;
730
+ setIsTemplate(true);
731
+ setTemplateValue(item.value);
732
+ }, []);
579
733
  var handleRemoveTemplateClick = (0, react_2.useCallback)(function () {
580
734
  /* This is the `×` ON the template control, and it means "I do not want a
581
735
  template here" — on a field whose menu offers no `Set Custom Value` it
@@ -631,6 +785,139 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
631
785
  onChange === null || onChange === void 0 ? void 0 : onChange(name, undefined);
632
786
  }
633
787
  }, [name, onChange, value, templateValue]);
788
+ /* One value, three views (qorus#646, David). Value → Expression writes the literal or template as
789
+ expression text, emitting nothing until it is edited. Expression ↔ Visual is the editor's own toggle.
790
+ Expression → Value converts only a literal or a lone template; any other expression stays, and the
791
+ Value tab says it cannot show it and offers to replace it. Nothing is lost silently. */
792
+ /** Reads the Expression tab's text typed and not yet read (see `ExpressionField.flushRef`). */
793
+ var expressionFlush = (0, react_2.useRef)(null);
794
+ var selectTab = (0, react_2.useCallback)(function (next) { return __awaiter(void 0, void 0, void 0, function () {
795
+ var flushed, _a, envelope, template, literal;
796
+ var _b;
797
+ return __generator(this, function (_c) {
798
+ switch (_c.label) {
799
+ case 0:
800
+ if (next === tab)
801
+ return [2 /*return*/];
802
+ if (!(tab === 'expression')) return [3 /*break*/, 2];
803
+ return [4 /*yield*/, ((_b = expressionFlush.current) === null || _b === void 0 ? void 0 : _b.call(expressionFlush))];
804
+ case 1:
805
+ _a = _c.sent();
806
+ return [3 /*break*/, 3];
807
+ case 2:
808
+ _a = undefined;
809
+ _c.label = 3;
810
+ case 3:
811
+ flushed = _a;
812
+ envelope = flushed !== null && flushed !== void 0 ? flushed : (valueIsExpression ? { is_expression: true, value: value } : undefined);
813
+ if (next === 'value' || next === 'template') {
814
+ if (envelope) {
815
+ template = (0, writtenAsText_1.loneTemplateOf)(envelope);
816
+ literal = template === undefined ? (0, writtenAsText_1.loneValueOf)(envelope) : undefined;
817
+ if (template !== undefined) {
818
+ setTemplateValue(template);
819
+ onChange === null || onChange === void 0 ? void 0 : onChange(name, template, type, false);
820
+ }
821
+ else if (literal !== undefined) {
822
+ setTemplateValue((0, writtenAsText_1.valueTextOf)(literal.value, type) || null);
823
+ onChange === null || onChange === void 0 ? void 0 : onChange(name, literal.value, type, false);
824
+ }
825
+ }
826
+ setInternalIsFunction(false);
827
+ setExpressionFromText(null);
828
+ setIsTemplate(next === 'template' || valueTabIsText);
829
+ }
830
+ else {
831
+ /* The seed is the value written as text while it is not an expression yet. One that is shows itself:
832
+ a seed left from an earlier visit was shown in its place - the value as it was opened, not the
833
+ expression written since - and leaving the tab saved it (qorus#646). */
834
+ setExpressionSeed(!flushed && !valueIsExpression ? (0, writtenAsText_1.expressionTextOfValue)(value) : null);
835
+ setInternalIsFunction(true);
836
+ }
837
+ setTab(next);
838
+ return [2 /*return*/];
839
+ }
840
+ });
841
+ }); }, [tab, valueIsExpression, value, name, onChange, type, valueTabIsText]);
842
+ /** Replace what a tab cannot show with an empty value of its own kind. */
843
+ var replaceWithAValue = (0, react_2.useCallback)(function () {
844
+ setInternalIsFunction(false);
845
+ setTemplateValue(null);
846
+ setExpressionSeed(null);
847
+ onChange === null || onChange === void 0 ? void 0 : onChange(name, undefined, type, false);
848
+ }, [name, onChange, type]);
849
+ /* A saved value is the value at once, shown where its kind is: a template on the Value tab where the
850
+ field is written as text, else on the Expression tab (or Template, for a template-only field); any
851
+ other value on the Value tab - or, without tabs, in template mode for a template. */
852
+ var takeSavedValue = (0, react_2.useCallback)(function (saved) {
853
+ var isSavedTemplate = typeof saved === 'string' && (0, templates_1.isValueTemplate)(saved);
854
+ setExpressionFromText(null);
855
+ setTemplateValue(typeof saved === 'string' ? saved : null);
856
+ if (tabsKindRef.current) {
857
+ var next = isSavedTemplate && !valueTabIsText ?
858
+ tabsKindRef.current === 'full' ?
859
+ 'expression'
860
+ : 'template'
861
+ : 'value';
862
+ setExpressionSeed(next === 'expression' ? (0, writtenAsText_1.expressionTextOfValue)(saved) : null);
863
+ setInternalIsFunction(next === 'expression');
864
+ setIsTemplate(next === 'template' || (next === 'value' && valueTabIsText));
865
+ setTab(next);
866
+ }
867
+ else {
868
+ setExpressionSeed(null);
869
+ setInternalIsFunction(false);
870
+ setIsTemplate(isSavedTemplate && !!allowTemplates);
871
+ }
872
+ onChange === null || onChange === void 0 ? void 0 : onChange(name, saved, type, false);
873
+ }, [name, onChange, type, valueTabIsText, allowTemplates]);
874
+ // the values saved for this field's type, and whether this value can be saved
875
+ var savedWords = __assign(__assign({}, DEFAULT_SAVED_VALUES_LABELS), savedValues === null || savedValues === void 0 ? void 0 : savedValues.labels);
876
+ var savedForType = (0, react_2.useMemo)(function () { var _a; return ((_a = savedValues === null || savedValues === void 0 ? void 0 : savedValues.items) !== null && _a !== void 0 ? _a : []).filter(function (item) { return item.type === type; }); }, [savedValues === null || savedValues === void 0 ? void 0 : savedValues.items, type]);
877
+ var editable = !rest.readonly && !rest.readOnly && !rest.disabled;
878
+ var canSaveValue = !!(savedValues === null || savedValues === void 0 ? void 0 : savedValues.onSave) &&
879
+ editable &&
880
+ type !== 'bool' &&
881
+ type !== 'boolean' &&
882
+ !hasOnlyAllowedValues &&
883
+ !valueIsExpression &&
884
+ !isEmptyValue &&
885
+ value !== null;
886
+ var canUseSavedValue = editable && savedForType.length > 0;
887
+ var savedValueItems = __spreadArray(__spreadArray([], (canSaveValue ?
888
+ [
889
+ {
890
+ label: savedWords.save,
891
+ icon: 'SaveLine',
892
+ tooltip: savedWords.saveTooltip,
893
+ className: 'save-value',
894
+ onClick: function () { return savedValues.onSave(value, type); },
895
+ },
896
+ ]
897
+ : []), true), (canUseSavedValue ?
898
+ [
899
+ {
900
+ label: savedWords.use,
901
+ icon: 'HistoryLine',
902
+ className: 'use-saved-value',
903
+ items: savedForType.map(function (item) { return (__assign({ label: item.label, description: item.description, className: 'saved-value', onClick: function () { return takeSavedValue(item.value); } }, ((savedValues === null || savedValues === void 0 ? void 0 : savedValues.onRemove) ?
904
+ {
905
+ rightAction: {
906
+ icon: 'DeleteBinLine',
907
+ intent: 'danger',
908
+ minimal: true,
909
+ className: 'saved-value-remove',
910
+ tooltip: savedWords.remove,
911
+ onClick: function (event) {
912
+ event.stopPropagation();
913
+ savedValues.onRemove(item.id);
914
+ },
915
+ },
916
+ }
917
+ : {}))); }),
918
+ },
919
+ ]
920
+ : []), true);
634
921
  var handleTemplateToggleClick = (0, react_2.useCallback)(function () {
635
922
  setInternalIsFunction(false);
636
923
  onChange(name, undefined, undefined, false);
@@ -640,11 +927,23 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
640
927
  var handleExpressionChange = (0, react_2.useCallback)(function (expressionValue, remove) {
641
928
  if (remove) {
642
929
  setInternalIsFunction(false);
930
+ setExpressionSeed(null);
643
931
  // The expression is gone, so there is no longer a switch to undo.
644
932
  setExpressionFromText(null);
645
933
  }
934
+ /* On the Expression tab a lone template is kept as the expression the server parses it into,
935
+ template(...): the option takes expressions (qorus#646, David). A template-only option has no
936
+ Expression tab and keeps the bare template. A lone value (12, true) is that value, the field's own
937
+ shape (see `loneValueOf`). */
938
+ var onTabs = !!tabsKindRef.current;
939
+ var literal = remove || !onTabs ? undefined : (0, writtenAsText_1.loneValueOf)(expressionValue);
940
+ if (literal !== undefined) {
941
+ setExpressionSeed((0, writtenAsText_1.expressionSeedOf)(literal.value));
942
+ onChange(name, literal.value, type, false);
943
+ return;
944
+ }
646
945
  onChange(name, expressionValue === null || expressionValue === void 0 ? void 0 : expressionValue.value, expressionDataType, !remove);
647
- }, [name, onChange, expressionDataType, value]);
946
+ }, [name, onChange, expressionDataType, value, type]);
648
947
  // ─── Text typed into a plain field that is really a DPQL expression ───
649
948
  //
650
949
  // A field that accepts expressions still gets DPQL TYPED into it, in the
@@ -675,9 +974,16 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
675
974
  var _a;
676
975
  setDpqlOffer(null);
677
976
  setExpressionFromText(text);
977
+ /* The value is an expression now, and the Text view shows it. A seed left from an earlier visit to
978
+ the Expression tab - the value as it was then - was shown in its place, and leaving the tab saved
979
+ it: what had just been typed was lost (qorus#646). */
980
+ setExpressionSeed(null);
678
981
  setInternalIsFunction(true);
679
982
  setIsTemplate(false);
680
983
  setTemplateValue(null);
984
+ // the Value tab never holds an expression: detected, it moves to the Expression tab, with an undo
985
+ if (tabsKindRef.current === 'full')
986
+ setTab('expression');
681
987
  // `dpql/parse` answers with the field-ready envelope
682
988
  // (`{is_expression, value}`); this field stores the inner AST and
683
989
  // signals the flag through `onChange`'s fourth argument, exactly as
@@ -690,6 +996,10 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
690
996
  }
691
997
  declinedTexts.current.add(expressionFromText);
692
998
  setInternalIsFunction(false);
999
+ if (tabsKind) {
1000
+ setTab('value');
1001
+ setIsTemplate(valueTabIsText);
1002
+ }
693
1003
  setExpressionFromText(null);
694
1004
  onChange === null || onChange === void 0 ? void 0 : onChange(name, expressionFromText, type, false);
695
1005
  }, [expressionFromText, name, onChange, type]);
@@ -719,7 +1029,8 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
719
1029
  var canDetectDpql = !!allowFunctions &&
720
1030
  !!allowTextExpressions &&
721
1031
  !effectiveIsFunction &&
722
- !isTemplate &&
1032
+ // the template editor is text too: an expression written around a template is detected there
1033
+ (!isTemplate || templateSupportsCustomValues) &&
723
1034
  !hasOnlyAllowedValues &&
724
1035
  !rest.readonly &&
725
1036
  !rest.readOnly &&
@@ -760,7 +1071,8 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
760
1071
  return;
761
1072
  }
762
1073
  var outcome = (0, dpqlDetection_1.classifyTypedText)({ text: text, type: type, field: validationField, parsed: parsed });
763
- if (outcome === 'switch') {
1074
+ // on tabs, an expression detected switches (with an undo) rather than being offered
1075
+ if (outcome === 'switch' || (outcome === 'offer' && tabsKindRef.current === 'full')) {
764
1076
  enterExpressionRef.current(text, parsed.expression);
765
1077
  }
766
1078
  else if (outcome === 'offer') {
@@ -794,26 +1106,25 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
794
1106
  the row's — so leaving this out of the published list meant template mode
795
1107
  was a one-way door on the surface most options are edited from. */
796
1108
  var canOfferCustomValue = showTemplateToggle && isTemplate && templateSupportsCustomValues;
797
- var publishedItems = (0, react_2.useMemo)(function () { return __spreadArray(__spreadArray(__spreadArray(__spreadArray([], (canOfferExpression && !functions.loading
798
- ? [
799
- {
800
- label: 'Use Expression',
801
- icon: 'Functions',
802
- tooltip: 'Run a function on this value',
803
- onClick: handleSelectFunctionChange,
804
- },
805
- ]
806
- : []), true), (canOfferTemplate
807
- ? [
808
- {
809
- label: 'Use Template',
810
- icon: 'MoneyDollarCircleLine',
811
- tooltip: 'Use a template',
812
- onClick: handleTemplateToggleClick,
813
- },
814
- ]
815
- : []), true), (canOfferCustomValue
816
- ? [
1109
+ var publishedItems = (0, react_2.useMemo)(function () { return __spreadArray(__spreadArray(__spreadArray(__spreadArray([], (tabsKind ?
1110
+ []
1111
+ : __spreadArray(__spreadArray([], (canOfferExpression && !functions.loading ?
1112
+ [
1113
+ __assign(__assign({
1114
+ // in a condition field the label says what it is for; the value's tooltip would only repeat it
1115
+ label: (0, expressions_1.isConditionOption)(rest) ? 'Write a condition' : 'Use Expression', icon: 'Functions' }, ((0, expressions_1.isConditionOption)(rest) ? {} : { tooltip: 'Run a function on this value' })), { onClick: handleSelectFunctionChange }),
1116
+ ]
1117
+ : []), true), (canOfferTemplate ?
1118
+ [
1119
+ {
1120
+ label: 'Use Template',
1121
+ icon: 'MoneyDollarCircleLine',
1122
+ tooltip: 'Use a template',
1123
+ onClick: handleTemplateToggleClick,
1124
+ },
1125
+ ]
1126
+ : []), true)), true), (canOfferCustomValue && !tabsKind ?
1127
+ [
817
1128
  {
818
1129
  label: 'Use Custom Value',
819
1130
  icon: 'EditLine',
@@ -833,7 +1144,7 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
833
1144
  setTemplateValue(null);
834
1145
  });
835
1146
  },
836
- }); }), true); }, [
1147
+ }); }), true), savedValueItems, true); }, [
837
1148
  canOfferExpression,
838
1149
  functions.loading,
839
1150
  canOfferTemplate,
@@ -842,6 +1153,11 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
842
1153
  handleSelectFunctionChange,
843
1154
  handleTemplateToggleClick,
844
1155
  handleUseCustomValueClick,
1156
+ // the saved values offered, and whether this value can be saved
1157
+ canSaveValue,
1158
+ value,
1159
+ savedForType,
1160
+ takeSavedValue,
845
1161
  ]);
846
1162
  /* Keyed on WHICH items are offered, never on the items: they carry
847
1163
  handlers, so they are a new array every render and a row comparing them
@@ -851,15 +1167,26 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
851
1167
  canOfferTemplate ? 'template' : '',
852
1168
  canOfferCustomValue ? 'custom-value' : '',
853
1169
  "custom:".concat((menuItems !== null && menuItems !== void 0 ? menuItems : []).map(function (item) { var _a; return String((_a = item.label) !== null && _a !== void 0 ? _a : ''); }).join('|')),
1170
+ canSaveValue ? "save:".concat(JSON.stringify(value)) : '',
1171
+ canUseSavedValue ? "saved:".concat(savedForType.map(function (item) { return item.id; }).join('|')) : '',
854
1172
  ].join(',');
855
1173
  (0, rowMenuContext_1.useRowMenuPublisher)(rowMenu, publishedKey, publishedItems);
856
1174
  var renderControls = (0, react_2.useCallback)(function () {
857
- var showFunctionsDropdown = allowFunctions && !hasOnlyAllowedValues && !rest.readonly && !internalIsFunction;
858
- var showTemplatesButton = showTemplateToggle && !isTemplate;
1175
+ // on tabs, the tabs are the mode switch: the menu keeps value actions only
1176
+ var showFunctionsDropdown = !tabsKind &&
1177
+ allowFunctions &&
1178
+ !hasOnlyAllowedValues &&
1179
+ !rest.readonly &&
1180
+ !internalIsFunction;
1181
+ var showTemplatesButton = !tabsKind && showTemplateToggle && !isTemplate;
859
1182
  // The way back out of template mode, where the editor draws no `×`.
860
- var showCustomValueButton = showTemplateToggle && isTemplate && templateSupportsCustomValues;
1183
+ var showCustomValueButton = !tabsKind && showTemplateToggle && isTemplate && templateSupportsCustomValues;
861
1184
  // The "Set value" label promises a way to set one — reorder rows alone don't.
862
- var hasValueRows = showFunctionsDropdown || showTemplatesButton || showCustomValueButton || (0, lodash_1.size)(menuItems) > 0;
1185
+ var hasValueRows = showFunctionsDropdown ||
1186
+ showTemplatesButton ||
1187
+ showCustomValueButton ||
1188
+ (0, lodash_1.size)(menuItems) > 0 ||
1189
+ savedValueItems.length > 0;
863
1190
  /* A lone group opens itself. Two of the menu's groups are collapsed
864
1191
  sections, so a menu holding nothing but one of them asked for a click
865
1192
  to reach the only thing on offer — on an untyped field, "Set Custom
@@ -873,6 +1200,7 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
873
1200
  showCustomValueButton,
874
1201
  (0, lodash_1.size)(menuActions === null || menuActions === void 0 ? void 0 : menuActions.items) > 0,
875
1202
  (0, lodash_1.size)(menuItems) > 0,
1203
+ canUseSavedValue,
876
1204
  ].filter(Boolean).length === 1;
877
1205
  /* ONE menu per control. Where this field sits in a form ROW, the row
878
1206
  already renders a ⋮ of its own, and drawing a second one beside it
@@ -888,7 +1216,7 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
888
1216
  return (showFunctionsDropdown ?
889
1217
  functions.loading ?
890
1218
  (0, jsx_runtime_1.jsx)(reqore_1.ReqoreSkeleton, { size: rest.size })
891
- : (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { compact: true, minimal: true, label: 'Create New Expression', className: 'function-selector', icon: 'Functions', tooltip: 'This field only accepts expressions', onClick: function () {
1219
+ : (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { compact: true, minimal: true, label: 'Create New Expression', className: 'function-selector', icon: 'Functions', tooltip: 'This field takes an expression.', onClick: function () {
892
1220
  setIsTemplate(false);
893
1221
  setTemplateValue(null);
894
1222
  onChange === null || onChange === void 0 ? void 0 : onChange(name, {
@@ -939,8 +1267,8 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
939
1267
  }, handler: 'click', content: (0, jsx_runtime_1.jsxs)(reqore_1.ReqoreMenu, { size: rest.size, maxHeight: '400px', style: { overflow: 'auto' }, children: [showFunctionsDropdown ?
940
1268
  functions.loading ?
941
1269
  (0, jsx_runtime_1.jsx)(reqore_1.ReqoreSkeleton, { size: rest.size })
942
- : (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { compact: true, transparent: true, label: 'Use Expression', className: 'function-selector', icon: 'Functions', tooltip: 'Run a function on this value', onClick: handleSelectFunctionChange })
943
- : null, showTemplatesButton ?
1270
+ : (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { compact: true, transparent: true, label: (0, expressions_1.isConditionOption)(rest) ? 'Write a condition' : 'Use Expression', className: 'function-selector', icon: 'Functions', tooltip: (0, expressions_1.isConditionOption)(rest) ? undefined : 'Run a function on this value', onClick: handleSelectFunctionChange })
1271
+ : null, showTemplatesButton && !(showFunctionsDropdown && allowTextExpressions) ?
944
1272
  (0, jsx_runtime_1.jsxs)(reqore_1.ReqoreButton, { transparent: true, icon: 'MoneyDollarCircleLine', className: 'template-toggle', tooltip: 'Use a template', compact: true, size: rest.size, onClick: handleTemplateToggleClick, children: [' ', "Use Template", ' '] })
945
1273
  : null, showCustomValueButton ?
946
1274
  (0, jsx_runtime_1.jsxs)(reqore_1.ReqoreButton, { transparent: true, icon: 'EditLine', className: 'template-custom-value', tooltip: 'Write the value here instead of choosing a template', compact: true, size: rest.size, onClick: handleUseCustomValueClick, children: [' ', "Use Custom Value", ' '] })
@@ -948,6 +1276,22 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
948
1276
  (0, jsx_runtime_1.jsx)(MenuActionsSection, { actions: menuActions, size: rest.size, startExpanded: loneSectionStartsExpanded })
949
1277
  : null, (0, lodash_1.size)(menuItems) > 0 ?
950
1278
  (0, jsx_runtime_1.jsx)(exports.CustomMenuItems, { items: menuItems, setIsTemplate: setIsTemplate, setTemplateValue: setTemplateValue, startExpanded: loneSectionStartsExpanded })
1279
+ : null, canSaveValue ?
1280
+ (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { compact: true, transparent: true, icon: 'SaveLine', className: 'save-value', tooltip: savedWords.saveTooltip, size: rest.size, onClick: function () { return savedValues.onSave(value, type); }, children: savedWords.save })
1281
+ : null, canUseSavedValue ?
1282
+ (0, jsx_runtime_1.jsx)(reqore_1.ReqoreMenuSection, { label: savedWords.use, icon: 'HistoryLine', className: 'use-saved-value', transparent: true, isCollapsed: !loneSectionStartsExpanded, children: savedForType.map(function (item) { return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreMenuItem, { className: 'saved-value', label: item.label, description: item.description, onClick: function () { return takeSavedValue(item.value); }, rightAction: (savedValues === null || savedValues === void 0 ? void 0 : savedValues.onRemove) ?
1283
+ {
1284
+ icon: 'DeleteBinLine',
1285
+ intent: 'danger',
1286
+ minimal: true,
1287
+ className: 'saved-value-remove',
1288
+ tooltip: savedWords.remove,
1289
+ onClick: function (event) {
1290
+ event.stopPropagation();
1291
+ savedValues.onRemove(item.id);
1292
+ },
1293
+ }
1294
+ : undefined }, item.id)); }) })
951
1295
  : null, (0, lodash_1.size)(menuTrailingItems) > 0 ?
952
1296
  (0, jsx_runtime_1.jsx)(MenuTrailingItems, { items: menuTrailingItems, size: rest.size })
953
1297
  : null] }) }));
@@ -959,6 +1303,7 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
959
1303
  handleSelectFunctionChange,
960
1304
  handleTemplateToggleClick,
961
1305
  handleUseCustomValueClick,
1306
+ allowTextExpressions,
962
1307
  hasOnlyAllowedValues,
963
1308
  isTemplate,
964
1309
  rest.readonly,
@@ -977,6 +1322,12 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
977
1322
  hasInputAffordance,
978
1323
  // the row decides whether this field draws a menu at all
979
1324
  rowMenu,
1325
+ tabsKind,
1326
+ canSaveValue,
1327
+ canUseSavedValue,
1328
+ savedForType,
1329
+ takeSavedValue,
1330
+ savedValues,
980
1331
  ]);
981
1332
  // When the type is a list, and it has an element type - that element type is different
982
1333
  // from the field type, so we need to send down the full templates object
@@ -998,6 +1349,85 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
998
1349
  rest.element_type,
999
1350
  type,
1000
1351
  ]);
1352
+ // ─── Value · Expression · Visual (or Value · Template) ───────────────────────────────────────────
1353
+ if (tabsKind && !rest.disabled) {
1354
+ var words_1 = __assign(__assign({}, exports.DEFAULT_VALUE_TABS_LABELS), valueTabsLabels);
1355
+ /** A type named inside a sentence: the host's own words, or the type catalogue's sentence form (none for no type). */
1356
+ var typeInSentence = (_e = words_1.typeName) !== null && _e !== void 0 ? _e : qorusTypes.getTypeSentenceForm;
1357
+ /* A condition field's Expression tab holds what is used as a condition, so it is called one (qorus#646):
1358
+ "condition" where the value is used as a condition, "expression" everywhere else. */
1359
+ var conditionField_1 = (0, expressions_1.isConditionOption)(rest);
1360
+ var expressionTabLabel_1 = conditionField_1 ? words_1.condition : words_1.expression;
1361
+ var tabButton = function (key, label, icon, tooltip) { return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { compact: true, size: rest.size, icon: icon, active: tab === key, "aria-pressed": tab === key, "data-tab": key, className: "value-tab value-tab-".concat(key), tooltip: tooltip, disabled: rest.readOnly || rest.readonly, onClick: function () { return selectTab(key); }, children: label }, key)); };
1362
+ /* A lone template of another type than the field's is converted when the value is used: said as a
1363
+ warning, not a block - whether it converts depends on the data (qorus#646, David). */
1364
+ var loneTemplate_1 = typeof value === 'string' && (0, templates_1.isCompleteTemplateToken)(value) ? value : undefined;
1365
+ var loneTemplateType = loneTemplate_1 && !typeIsAnyLike ?
1366
+ (_f = (0, templates_1.findTemplate)(templates !== null && templates !== void 0 ? templates : {}, loneTemplate_1)) === null || _f === void 0 ? void 0 : _f.badge
1367
+ : undefined;
1368
+ // the types inside the sentence; with either one not known there is nothing to say converts to what
1369
+ var conversionFrom = typeof loneTemplateType === 'string' && !(0, writtenAsText_1.sameValueType)(loneTemplateType, type) ?
1370
+ typeInSentence(loneTemplateType)
1371
+ : undefined;
1372
+ var conversionTo = conversionFrom ? typeInSentence(type) : undefined;
1373
+ var conversionNote_1 = conversionFrom && conversionTo ? words_1.conversion(conversionFrom, conversionTo) : undefined;
1374
+ var cannotShow_1 = function (message) { return ((0, jsx_runtime_1.jsxs)(reqore_1.ReqoreMessage, { size: 'small', flat: true, opaque: false, intent: 'muted', className: 'value-tab-cannot-show', children: [message, ' ', (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { compact: true, size: rest.size, className: 'value-tab-replace', onClick: replaceWithAValue, disabled: rest.readOnly || rest.readonly, children: words_1.replaceWithAValue })] })); };
1375
+ var valueBody = function () {
1376
+ var _a;
1377
+ if (valueIsExpression) {
1378
+ return cannotShow_1(conditionField_1 ? words_1.cannotShowCondition : words_1.cannotShowExpression);
1379
+ }
1380
+ if (valueTabIsText) {
1381
+ return ((0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { vertical: true, fluid: true, gapSize: 'small', children: [(0, jsx_runtime_1.jsx)(RichText_1.RichTextFormField, __assign({ className: 'template-selector value-tab-text', valueFormat: 'text',
1382
+ /* A whole number or a number is typed on a numeric keyboard where the device has one, as its own
1383
+ input was (qorus#646); templates are picked from the list the field opens, and an expression
1384
+ is written on the Expression tab. */
1385
+ inputMode: TEXTABLE_INPUT_MODES[type], singleLine: (0, singleLineString_1.isSingleLineStringType)('string'), value: typeof templateValue === 'string' ? templateValue : ((0, writtenAsText_1.valueTextOf)(value, type)), templates: filteredTemplates,
1386
+ // a chip of a field not of this type is named as the catalogue names it
1387
+ namingTemplates: templates, allowTemplates: true, onChange: handleTemplateTextChange }, rest, { fixed: false, fluid: true,
1388
+ /* The value takes the row the tabs give it (qorus#646, David: a small box beside empty room
1389
+ was clicked beside, and offered nothing). An operand's own field sizes itself to its
1390
+ column instead - that is the field outside the tabs. */
1391
+ panelProps: __assign(__assign({}, rest.panelProps), { style: __assign(__assign({}, (_a = rest.panelProps) === null || _a === void 0 ? void 0 : _a.style), { width: '100%' }) }), "aria-label": fieldAriaLabel })), conversionNote_1 ?
1392
+ (0, jsx_runtime_1.jsx)(reqore_1.ReqoreMessage, { size: 'small', flat: true, opaque: false, intent: 'warning', className: 'value-tab-conversion', children: conversionNote_1 })
1393
+ : null] }));
1394
+ }
1395
+ if (loneTemplate_1 !== undefined || (typeof value === 'string' && (0, templates_1.isValueTemplate)(value))) {
1396
+ return cannotShow_1(words_1.templateShownOn(tabsKind === 'full' ? expressionTabLabel_1 : words_1.template));
1397
+ }
1398
+ return ((0, jsx_runtime_1.jsx)(Component, __assign({ value: value, allowTemplates: false, onChange: onChange, name: name, level: level }, rest, { componentOverrides: componentOverrides }, componentTypeProp, { "aria-label": fieldAriaLabel, className: "".concat(className, " template-selector") })));
1399
+ };
1400
+ var expressionBody = function () { return ((0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { vertical: true, fluid: true, gapSize: 'small', children: [(0, jsx_runtime_1.jsx)(reqore_1.ReqoreErrorBoundary, { children: (0, jsx_runtime_1.jsx)(ExpressionField_1.ExpressionField
1401
+ /* A value that is not an expression yet is shown as the server reads it written alone:
1402
+ value(12) - so the Visual tab starts from the value, not from an operand with no operation. */
1403
+ , {
1404
+ /* A value that is not an expression yet is shown as the server reads it written alone:
1405
+ value(12) - so the Visual tab starts from the value, not from an operand with no operation. */
1406
+ value: {
1407
+ is_expression: true,
1408
+ value: value !== null && typeof value === 'object' ? value
1409
+ : !isEmptyValue && value !== null ?
1410
+ { exp: 'value', args: [{ type: type, value: value }] }
1411
+ : undefined,
1412
+ }, initialText: expressionSeed !== null && expressionSeed !== void 0 ? expressionSeed : undefined, heldAsValue: !isEmptyValue && value !== null && typeof value !== 'object', componentOverrides: componentOverrides, localTemplates: templates, type: type, returnType: (returnType || expressionDataType), onChange: handleExpressionChange, readOnly: rest.readOnly || rest.disabled, expressions: rest.expressions, expressionsUrl: rest.expressions_url, fields: rest.dpql_fields, serverHandled: rest.server_expression_handling,
1413
+ // a condition (a Qog if state's value, a while or for block's condition), marked by the host
1414
+ condition: (0, expressions_1.isConditionOption)(rest), extraActions: extraActions, size: rest.size, defaultMode: tab === 'visual' ? 'visual' : 'text', requestedMode: tab === 'visual' ? 'visual' : 'text', hideModeToggle: true, flushRef: expressionFlush,
1415
+ // no language server: the Visual tab is where the expression is built
1416
+ onTextUnavailable: function () { return setTab('visual'); }, reorder: reorder }) }), expressionFromText !== null ?
1417
+ (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { fixed: true, compact: true, minimal: true, icon: 'ArrowGoBackLine', size: rest.size, className: 'dpql-detected-undo', tooltip: words_1.undoTooltip(expressionFromText), onClick: undoExpressionFromText, children: words_1.undo })
1418
+ : null] })); };
1419
+ var templateBody = function () { return ((0, jsx_runtime_1.jsx)(exports.TemplateDropdownSelector, { allowCustomValues: false, templates: templates, value: typeof value === 'string' && (0, templates_1.isValueTemplate)(value) ? value : null, items: filteredTemplates === null || filteredTemplates === void 0 ? void 0 : filteredTemplates.items, onItemSelect: handleSelectTemplateFromList, onRemoveClick: replaceWithAValue, templateBadge: templateBadge, size: rest.size, label: label, hasOnlyAllowedValues: hasOnlyAllowedValues })); };
1420
+ return ((0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { vertical: true, fluid: true, gapSize: 'small', className: 'value-tabs-field', children: [(0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { fluid: true, size: rest.size, verticalAlign: 'center', children: [(0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { stack: true, size: rest.size, className: 'value-tabs', fixed: true, children: [tabButton('value', words_1.value, 'EditLine'), tabsKind === 'full' ?
1421
+ [
1422
+ tabButton('expression', expressionTabLabel_1, 'CodeLine', conditionField_1 ? words_1.conditionTooltip : words_1.expressionTooltip),
1423
+ tabButton('visual', words_1.visual, 'NodeTree', conditionField_1 ? words_1.conditionVisualTooltip : words_1.visualTooltip),
1424
+ ]
1425
+ : tabButton('template', words_1.template, 'MoneyDollarCircleLine', words_1.templateTooltip)] }), renderControls()] }), tab === 'value' ?
1426
+ valueBody()
1427
+ : tab === 'template' ?
1428
+ templateBody()
1429
+ : expressionBody()] }));
1430
+ }
1001
1431
  if (effectiveIsFunction && !hasOnlyAllowedValues) {
1002
1432
  // SEAM (reqraft): `allowTextExpressions` swaps the IDE's bare builder
1003
1433
  // for the ExpressionField shell (Visual = the same builder, Text = the
@@ -1014,11 +1444,15 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
1014
1444
  // ui_type (an assertion's `test-reference` Value, for one).
1015
1445
  componentOverrides: componentOverrides, localTemplates: templates, type: type, returnType: (returnType || expressionDataType), onChange: handleExpressionChange, readOnly: rest.readOnly || rest.disabled, expressions: rest.expressions, expressionsUrl: rest.expressions_url,
1016
1446
  // the record's fields for the Text view, from the field's schema (`dpql_fields`)
1017
- fields: rest.dpql_fields, serverHandled: rest.server_expression_handling, extraActions: extraActions, size: rest.size,
1018
- // An author who typed the expression as text is already
1019
- // writing in that language — dropping them into the visual
1020
- // builder would make them find their own sentence again.
1021
- defaultMode: expressionFromText !== null ? 'text' : 'visual', reorder: reorder }) }), expressionFromText !== null ?
1447
+ fields: rest.dpql_fields, serverHandled: rest.server_expression_handling,
1448
+ // a condition (a Qog if state's value, a while or for block's condition), marked by the host
1449
+ condition: (0, expressions_1.isConditionOption)(rest), extraActions: extraActions, size: rest.size,
1450
+ /* An expression opens on its Text view, the first of Text · Visual, as the value's tabs open on
1451
+ Expression before Visual (qorus#646, David); without a language server it falls back to
1452
+ Visual by itself. It opened on Visual, on an empty "Select operation", unless the
1453
+ expression had just been typed as text. Mounted again, it opens on the view the author
1454
+ was on - except for an expression just typed as text, which is shown as the text it is. */
1455
+ defaultMode: expressionFromText !== null ? 'text' : expressionMode, onModeChange: setExpressionMode, reorder: reorder }) }), expressionFromText !== null ?
1022
1456
  (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { fixed: true, compact: true, minimal: true, icon: 'ArrowGoBackLine',
1023
1457
  // No `intent` with `minimal`: a Reqore intent is a FILL, and
1024
1458
  // `muted` as TEXT is 1.3:1 on the app surface.
@@ -1028,27 +1462,43 @@ var TemplateFieldImpl = (0, react_2.memo)(function (_a) {
1028
1462
  return ((0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { children: [(0, jsx_runtime_1.jsx)(reqore_1.ReqoreErrorBoundary, { children: (0, jsx_runtime_1.jsx)(builder_1.ExpressionBuilder, { value: {
1029
1463
  is_expression: true,
1030
1464
  value: value,
1031
- }, componentOverrides: componentOverrides, localTemplates: templates, level: level, type: type, returnType: (returnType || expressionDataType), onChange: handleExpressionChange, readOnly: rest.readOnly || rest.disabled, expressions: rest.expressions, expressionsUrl: rest.expressions_url, serverHandled: rest.server_expression_handling, extraActions: extraActions, reorder: reorder }) }), renderControls()] }));
1465
+ }, componentOverrides: componentOverrides, localTemplates: templates, level: level, type: type, returnType: (returnType || expressionDataType), onChange: handleExpressionChange, readOnly: rest.readOnly || rest.disabled, expressions: rest.expressions, expressionsUrl: rest.expressions_url, serverHandled: rest.server_expression_handling,
1466
+ // a condition (a Qog if state's value, a while or for block's condition), marked by the host
1467
+ condition: (0, expressions_1.isConditionOption)(rest), extraActions: extraActions, reorder: reorder }) }), renderControls()] }));
1032
1468
  }
1033
1469
  if (rest.disabled) {
1034
1470
  if (isTemplate) {
1035
1471
  // SEAM (reqraft): the IDE renders a bare `<ReqoreTag label={templateValue}/>`
1036
1472
  // here; reqraft upgrades the read-only template to a proper picker chip —
1037
- // the $-dollar icon + resolved display name + app image, coloured by the
1473
+ // the $-dollar icon + resolved display name + app image, colored by the
1038
1474
  // IDE's intent scheme. Shared with the compact read-first row.
1039
- return (0, jsx_runtime_1.jsx)(ReadOnlyTemplateTag_1.ReadOnlyTemplateTag, { value: templateValue, templates: templates, size: rest.size });
1475
+ return (0, jsx_runtime_1.jsx)(ReadOnlyTemplateTag_1.ReadOnlyTemplateTag, { value: templateValue, templates: templates });
1040
1476
  }
1041
1477
  return ((0, jsx_runtime_1.jsx)(Comp, __assign({ value: value, onChange: onChange, name: name }, rest, { componentOverrides: componentOverrides })));
1042
1478
  }
1043
1479
  return ((0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, __assign({ fluid: rest.fluid, fixed: rest.fixed, size: rest.size }, rest, { stack: false, verticalAlign: 'flex-start', children: [!isTemplate && allowCustomValues ?
1044
1480
  (0, jsx_runtime_1.jsx)(Component, __assign({ value: value, allowTemplates: allowTemplates, onChange: onChange, name: name, level: level }, rest, { componentOverrides: componentOverrides }, componentTypeProp, { "aria-label": fieldAriaLabel, className: "".concat(className, " template-selector"), templates: componentTemplates }))
1045
- : null, isTemplate && templateSupportsCustomValues && !templateValueIsBracedToken ?
1046
- (0, jsx_runtime_1.jsx)(RichText_1.RichTextFormField, __assign({ className: 'template-selector', valueFormat: 'text', singleLine: (0, singleLineString_1.isSingleLineStringType)('string'), value: typeof templateValue === 'string' ? templateValue : '', templates: filteredTemplates, allowTemplates: true, onChange: handleTemplateTextChange }, rest, { "aria-label": fieldAriaLabel }))
1481
+ : null, !isTemplate && allowCustomValues && dateTakesTemplates ?
1482
+ (0, jsx_runtime_1.jsx)(TemplateBrowser_1.TemplateBrowser, { className: 'date-template-picker', icon: 'MoneyDollarCircleLine', fixed: true, compact: true, size: rest.size, tooltip: 'Use a template', "aria-label": 'Use a template', templates: filteredTemplates, focusFilter: true, onItemSelect: handleSelectDateTemplate })
1483
+ : null, isTemplate && templateSupportsCustomValues ?
1484
+ (0, jsx_runtime_1.jsx)(RichText_1.RichTextFormField, __assign({ className: 'template-selector', valueFormat: 'text', singleLine: (0, singleLineString_1.isSingleLineStringType)('string'),
1485
+ /* null shows as null, not as an empty field: the two are different values, and an
1486
+ untyped field holding null looked exactly like one holding nothing (qorus#646) */
1487
+ value: typeof templateValue === 'string' ? templateValue : (((_g = (0, writtenAsText_1.untypedTextOf)(value, type)) !== null && _g !== void 0 ? _g : '')), templates: filteredTemplates,
1488
+ // a chip of a field not of this type (text around it, say) is named as the catalogue names it
1489
+ namingTemplates: templates, allowTemplates: true, onChange: handleTemplateTextChange }, rest, {
1490
+ /* The text the value is written in takes the room its row gives it and gives it back: a
1491
+ caller's \`fixed\` sized a picker chip, and on a text field it kept the field at its full
1492
+ width, pushing the ⋮ past an operand's row in a narrow column. */
1493
+ fixed: false, fluid: true,
1494
+ /* 150px wide, as a free text field is, wider for what it holds, and narrower only where its
1495
+ row has less room - an operand in a narrow column - as a number's input is: a fixed
1496
+ 150px minimum held it at full width there. */
1497
+ panelProps: __assign(__assign({}, rest.panelProps), { style: __assign(__assign({}, (_h = rest.panelProps) === null || _h === void 0 ? void 0 : _h.style), { width: '150px', maxWidth: '100%', minWidth: 'fit-content' }) }), "aria-label": fieldAriaLabel }))
1047
1498
  : null, dpqlOffer ?
1048
- (0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { fixed: true, stack: true, size: rest.size, children: [(0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { compact: true, icon: 'Functions', intent: 'info', className: 'dpql-detected-offer', tooltip: "\"".concat(dpqlOffer.text, "\" reads as an expression. It is also valid text here, so nothing has been changed \u2014 use it as an expression?"), onClick: acceptDpqlOffer, children: "Use as expression" }), (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { compact: true, icon: 'CloseLine', intent: 'info', className: 'dpql-detected-dismiss', tooltip: 'Keep it as plain text', onClick: declineDpqlOffer })] })
1049
- : null, (showTemplatesDropdown ||
1050
- (isTemplate && templateSupportsCustomValues && templateValueIsBracedToken)) ?
1051
- (0, jsx_runtime_1.jsx)(exports.TemplateDropdownSelector, { allowCustomValues: allowCustomValues, templates: templates, value: templateValue, items: filteredTemplates === null || filteredTemplates === void 0 ? void 0 : filteredTemplates.items, onItemSelect: handleSelectTemplateFromList, onRemoveClick: handleRemoveTemplateClick, size: rest.size, label: label, hasOnlyAllowedValues: hasOnlyAllowedValues })
1499
+ (0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { fixed: true, stack: true, size: rest.size, children: [(0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { compact: true, icon: 'Functions', intent: 'info', className: 'dpql-detected-offer', tooltip: "\"".concat(dpqlOffer.text, "\" could be an expression. It is kept as text; use it as an expression instead?"), onClick: acceptDpqlOffer, children: "Use as expression" }), (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { compact: true, icon: 'CloseLine', intent: 'info', className: 'dpql-detected-dismiss', tooltip: 'Keep it as plain text', onClick: declineDpqlOffer })] })
1500
+ : null, showTemplatesDropdown ?
1501
+ (0, jsx_runtime_1.jsx)(exports.TemplateDropdownSelector, { allowCustomValues: allowCustomValues, templates: templates, value: templateValue, items: filteredTemplates === null || filteredTemplates === void 0 ? void 0 : filteredTemplates.items, onItemSelect: handleSelectTemplateFromList, onRemoveClick: handleRemoveTemplateClick, templateBadge: templateBadge, size: rest.size, label: label, hasOnlyAllowedValues: hasOnlyAllowedValues })
1052
1502
  : null, renderControls()] })));
1053
1503
  });
1054
1504
  /**