@qoretechnologies/reqraft 0.10.64 → 0.10.65-pr.137.g62fcecc

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