@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
@@ -1,1545 +0,0 @@
1
- import {
2
- ReqoreControlGroup,
3
- ReqoreErrorBoundary,
4
- ReqoreMessage,
5
- ReqoreP,
6
- ReqorePanel,
7
- ReqorePanelSkeleton,
8
- ReqoreSpinner,
9
- ReqoreTag,
10
- ReqoreVerticalSpacer,
11
- useReqoreTheme,
12
- } from '@qoretechnologies/reqore';
13
- import {
14
- TReqoreEffectColor,
15
- TReqoreHexColor,
16
- } from '@qoretechnologies/reqore/dist/components/Effect';
17
- import { IReqorePanelAction } from '@qoretechnologies/reqore/dist/components/Panel';
18
- import { IReqoreMenuItemProps } from '@qoretechnologies/reqore/dist/components/Menu/item';
19
- import { IReqoreIconName } from '@qoretechnologies/reqore/dist/types/icons';
20
- import { IReqoreFormTemplates } from '@qoretechnologies/reqore/dist/components/Textarea';
21
- import { TQorusType } from '@qoretechnologies/ts-toolkit';
22
- import { clone, cloneDeep, get, isArray, set, size, unset } from 'lodash';
23
- import { darken, rgba } from 'polished';
24
- import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
25
- import styled from 'styled-components';
26
- import { moveItem } from '../../../../helpers/common';
27
- import {
28
- areQorusTypesCompatible,
29
- expressionFitsReturnType,
30
- getArgumentType,
31
- isConditionType,
32
- isTextOrDateType,
33
- } from '../../../../helpers/expressions';
34
- import { addMissingExpressionArgs } from '../argumentPresence';
35
- import { findTemplate } from '../../../../helpers/templates';
36
- import { validateField, validateFieldWithResult } from '../../../../helpers/validations';
37
- import { IQorusTypeObject, useQorusTypes } from '../../../../hooks/useQorusTypes';
38
- import { useReqraftStorage } from '../../../../hooks/useStorage/useStorage';
39
- import { usePhoneViewport } from '../../../../hooks/usePhoneViewport';
40
- import { useCoarsePointer } from '../../../../hooks/useCoarsePointer';
41
- import { useTemplates } from '../../../../hooks/useTemplates';
42
- import { AutoFormField as auto } from '../../fields/auto/AutoFormField';
43
- import { SelectFormField as Select } from '../../fields/select/Select';
44
- import {
45
- ITemplateMenuActions,
46
- TCustomTemplateItems,
47
- TemplateField,
48
- } from '../../fields/template/TemplateField';
49
- import {
50
- ExpressionDefaultValue,
51
- IExpression,
52
- IExpressionSchema,
53
- IExpressionSchemaArg,
54
- TExpressionReorder,
55
- TExpressionReorderSurface,
56
- } from '../types';
57
- import { useExpressions } from '../useExpressions';
58
- import { ExpressionArgumentDetail } from './argumentDetail';
59
- import { ExpressionBuilderAddArgumentSlot } from './argumentSlot';
60
- import { ExpressionBuilderArgumentWrapper } from './argumentWrapper';
61
- import { ConfirmMismatchedTypesModal } from './confirmMismatchedTypesModal';
62
- import { ConfirmUnsupportedTypeModal } from './confirmUnsupportedTypeModal';
63
- import { ExpressionItem } from './item';
64
- import { ExpressionMoveToPositionStrip } from './moveToPositionStrip';
65
- import { ExpressionRenderTemplate } from './renderTemplate';
66
-
67
- const noopUseRegisterHintView = (...args: unknown[]): void => {
68
- void args;
69
- };
70
-
71
- export interface IExpressionBuilderProps {
72
- localTemplates?: IReqoreFormTemplates;
73
- value?: IExpression;
74
- isChild?: boolean;
75
- level?: number;
76
- type?: string;
77
- path?: string;
78
- index?: number;
79
- returnType?: TQorusType | TQorusType[];
80
- group?: '&&' | '||';
81
- onChange?: (value: IExpression, remove?: boolean) => void;
82
- onValueChange?: (value: IExpression, path: string, remove?: boolean) => void;
83
- /** Operand reordering for varargs expressions — see `TExpressionReorder`. Default `true`. */
84
- reorder?: TExpressionReorder;
85
- readOnly?: boolean;
86
- id?: string;
87
- expressions?: IExpressionSchema[];
88
- expressionsUrl?: string;
89
- serverHandled?: boolean;
90
- /**
91
- * SEAM (reqraft): the host's per-`ui_type` editors, forwarded to the operand
92
- * fields below.
93
- *
94
- * Without them an operand whose type is one of the CONSUMER's own ui_types
95
- * falls through `AutoFormField`'s switch to the literal "Unknown type!" tag.
96
- * That is what an assertion's `Value` did the moment it was turned into an
97
- * expression: the field is `test-reference`, an IDE ui_type whose editor the
98
- * IDE registers through `componentOverrides`, and the builder rendered its
99
- * operands without them.
100
- */
101
- componentOverrides?: Record<string, React.FC<any>>;
102
- size?: string;
103
- /**
104
- * SEAM (reqraft): extra hover actions prepended to each expression card —
105
- * where the IDE renders its `AiAssistanceAction` (AI-assist button). The
106
- * button itself depends on IDE-only AI infrastructure, so reqraft exposes
107
- * the slot and the consumer (the IDE) injects it.
108
- *
109
- * Pass a factory to get the per-card context the IDE's AI button needs
110
- * (`selectedExpression` — the catalogue schema of the function chosen in
111
- * that card — and the card's `value`), mirroring how the IDE builds
112
- * `AiAssistanceAction({ context: selectedExpression, ... })` inline.
113
- */
114
- extraActions?:
115
- | IReqorePanelAction[]
116
- | ((context: {
117
- selectedExpression?: IExpressionSchema;
118
- value?: IExpression;
119
- }) => IReqorePanelAction[]);
120
- }
121
-
122
- const StyledExpressionItemLabel = styled.div`
123
- position: absolute;
124
- text-orientation: upright;
125
- writing-mode: vertical-rl;
126
- top: calc(50%);
127
- transform: translateY(-50%);
128
- white-space: nowrap;
129
- height: calc(100% - 24px);
130
- // Centered flex
131
- display: flex;
132
- align-items: center;
133
- justify-content: center;
134
- border-right: 1px solid ${() => rgba('#fff', 0.3)};
135
- `;
136
-
137
- export interface IExpressionProps extends IExpressionBuilderProps {}
138
-
139
- export const Expression = ({
140
- localTemplates,
141
- value = ExpressionDefaultValue,
142
- isChild,
143
- index,
144
- type,
145
- level,
146
- path,
147
- onValueChange,
148
- group,
149
- returnType,
150
- readOnly,
151
- id,
152
- expressionsUrl,
153
- serverHandled,
154
- extraActions,
155
- componentOverrides,
156
- ...props
157
- }: IExpressionProps) => {
158
- const coarsePointer = useCoarsePointer();
159
- const types = useQorusTypes();
160
- const [showSummary, setShowSummary] = useState(false);
161
- const [confirmDialogData, setConfirmDialogData] = useState<
162
- | {
163
- isOpen: boolean;
164
- acceptedTypes: string[];
165
- children?: React.ReactNode;
166
- onConfirm: () => void;
167
- onCancel?: () => void;
168
- confirmText?: string;
169
- cancelText?: string;
170
- }
171
- | undefined
172
- >(undefined);
173
- const [doNotShowTypeConfirmation] = useReqraftStorage<boolean>(
174
- 'doNotShowTypeExpressionConfirmation',
175
- false,
176
- true
177
- );
178
-
179
- const [firstArgument, ...rest] = value.value?.args || [];
180
-
181
- const _expressions = useExpressions({
182
- allow: true,
183
- expressionsUrl,
184
- // SEAM (reqraft): the catalogue is provided whole (by ExpressionField /
185
- // stories), so it overrides the fetch rather than merging as "extras".
186
- // When undefined, useExpressions fetches the live catalogue.
187
- override: props.expressions,
188
- });
189
- const expressions = useMemo(
190
- () => ({
191
- ..._expressions,
192
- value: _expressions.expressions || [],
193
- }),
194
- [_expressions]
195
- );
196
-
197
- const selectedExpression = useMemo(
198
- () => expressions.value?.find((exp) => exp.name === value.value?.exp),
199
- [JSON.stringify(value), JSON.stringify(expressions.value)]
200
- );
201
-
202
- // SEAM (reqraft): resolve the consumer-injected hover actions. A factory
203
- // gets this card's context — exactly what the IDE's `AiAssistanceAction`
204
- // captured when it was built inline here.
205
- const resolvedExtraActions = useMemo<IReqorePanelAction[]>(
206
- () =>
207
- typeof extraActions === 'function'
208
- ? extraActions({ selectedExpression, value })
209
- : (extraActions ?? []),
210
- [extraActions, selectedExpression, JSON.stringify(value)]
211
- );
212
-
213
- // If the `return_type_first_arg` is set, we need to get the return type from the first arguments type
214
- const expressionReturnType = useMemo(() => {
215
- if (selectedExpression?.return_type_first_arg && firstArgument) {
216
- if (firstArgument.is_expression && firstArgument.value?.exp) {
217
- const firstArgExpression = expressions.value?.find(
218
- (exp) => exp.name === firstArgument.value.exp
219
- );
220
-
221
- return firstArgExpression?.ui_return_type;
222
- }
223
-
224
- return firstArgument.type;
225
- }
226
-
227
- return selectedExpression?.ui_return_type;
228
- }, [
229
- JSON.stringify(selectedExpression),
230
- JSON.stringify(firstArgument),
231
- returnType,
232
- JSON.stringify(expressions.value),
233
- ]);
234
- const expectedReturnTypeText = isArray(returnType)
235
- ? returnType.map(types.getTypeDisplayName).join(' or ')
236
- : types.getTypeDisplayName(returnType);
237
-
238
- // Server Handler expressions is either defined by the option
239
- // then it's always the first level
240
- // Or if the first argument is a field (data_role: 'record') or the first selected expression is
241
- // a server expression
242
- const isFirstArgumentField =
243
- findTemplate(localTemplates, firstArgument?.value)?.metadata?.dataRole === 'record';
244
- const isExpressionServerHandled =
245
- selectedExpression?.from_server ||
246
- (selectedExpression?.from_both && isFirstArgumentField) ||
247
- (level === 0 && serverHandled);
248
- const serverExpression = isFirstArgumentField || isExpressionServerHandled;
249
- const qorusExpression = selectedExpression && !serverExpression;
250
- const serverAndQorusExpression = selectedExpression?.from_both;
251
-
252
- const updateType = useCallback(
253
- (val: string, conformsCurrentType?: boolean) => {
254
- if (conformsCurrentType) {
255
- onValueChange(
256
- {
257
- ...value,
258
- value: {
259
- ...value.value,
260
- args: [
261
- {
262
- ...value.value.args[0],
263
- type: val,
264
- },
265
- ...value.value.args.slice(1),
266
- ],
267
- },
268
- },
269
- path
270
- );
271
-
272
- return;
273
- }
274
-
275
- onValueChange(
276
- {
277
- value: {
278
- args: [
279
- {
280
- type: val,
281
- },
282
- ],
283
- },
284
- },
285
- path
286
- );
287
- },
288
- [onValueChange, JSON.stringify(value), path]
289
- );
290
-
291
- const addMissingArgs = useCallback(
292
- (expression: string, args: IExpression[] = []): IExpression[] =>
293
- addMissingExpressionArgs(expressions.value as never, expression, args as never) as never,
294
- [JSON.stringify(expressions.value)]
295
- );
296
-
297
- const updateExp = useCallback(
298
- (val: string) => {
299
- // We need to get the new expression data and its arguments to see if we need to reset any of the arguments
300
- const newExpression = expressions.value?.find((exp) => exp.name === val);
301
- const newArgs = [];
302
-
303
- newExpression.args.forEach((arg, index) => {
304
- const argumentType = getArgumentType(expressions.value, value.value?.args[index], arg);
305
-
306
- if (argumentType) {
307
- // We need to check if the first argument type conforms to the new expression first argument type
308
- // 1) If it matches directly (matches `ui_type` on the argument), we are good
309
- // 2) If it matches inside `types_accepted` of the server type (ui_type of the arg),
310
- // we are also good, but we need to let the user know that transformation may occur
311
- // 3) If the type does not match, we need to reset the first argument type and value
312
- const exactMatch = types.getExactMatches(arg.ui_type);
313
- const acceptedTypes = types.getAcceptedTypes(arg.ui_type);
314
-
315
- // If the types match exactly
316
- if (exactMatch.includes(argumentType) || exactMatch.includes('any')) {
317
- // All good, do nothing
318
- newArgs.push(value.value.args[index]);
319
- } else if (acceptedTypes.includes(argumentType) || acceptedTypes.includes('any')) {
320
- // If the types is accepted but not exact, we need to show a confirmation dialog, but we will still
321
- // add the argument and then later in the confirmation we will decide to keep it or not
322
- newArgs.push({
323
- ...value.value.args[index],
324
- types_mismatch: true,
325
- });
326
- } else {
327
- // Type does not conform, we need to reset the argument
328
- newArgs.push({});
329
- }
330
- } else {
331
- // If there is no type set, we can just add the argument as is
332
- newArgs.push(value.value.args[index]);
333
- }
334
- });
335
-
336
- onValueChange(
337
- {
338
- ...value,
339
- value: {
340
- ...value.value,
341
- exp: val,
342
- args: addMissingArgs(val, newArgs),
343
- },
344
- },
345
- path
346
- );
347
- },
348
- [addMissingArgs, onValueChange, JSON.stringify(value), path, types.value]
349
- );
350
-
351
- const wrapExpression = useCallback(
352
- (expression: string) => {
353
- onValueChange(
354
- {
355
- value: {
356
- exp: expression,
357
- args: addMissingArgs(expression, [value]),
358
- },
359
- is_expression: true,
360
- },
361
- path
362
- );
363
- },
364
- [onValueChange, JSON.stringify(value), path, addMissingArgs]
365
- );
366
-
367
- const unwrapExpression = useCallback(() => {
368
- onValueChange(value.value.args[0], path);
369
- }, [onValueChange, JSON.stringify(value), path]);
370
-
371
- const updateExpToAndOr = useCallback(
372
- (val: '&&' | '||') => {
373
- onValueChange(
374
- {
375
- value: {
376
- exp: val,
377
- args: [value, ExpressionDefaultValue],
378
- },
379
- is_expression: true,
380
- },
381
- path
382
- );
383
- },
384
- [onValueChange, JSON.stringify(value), path]
385
- );
386
-
387
- const removeVarArg = useCallback(
388
- (index: number) => {
389
- // Every operand after the removed one moves up a slot; remount the
390
- // fields for the same reason `moveVarArg` does.
391
- setArgsGeneration((generation) => generation + 1);
392
- const args = value.value.args.filter((_, i) => i !== index);
393
-
394
- onValueChange(
395
- {
396
- ...value,
397
- value: {
398
- ...value.value,
399
- args,
400
- },
401
- },
402
- path
403
- );
404
- },
405
- [onValueChange, JSON.stringify(value), path]
406
- );
407
-
408
- const reorderSurfaces = useMemo((): TExpressionReorderSurface[] => {
409
- const reorder = props.reorder ?? true;
410
-
411
- if (reorder === false) {
412
- return [];
413
- }
414
-
415
- return reorder === true ? ['dragHandle', 'overflowMenu'] : reorder;
416
- }, [props.reorder]);
417
- // Bumped on every move and folded into the operand keys: the operands are
418
- // keyed by slot, and a slot's TemplateField keeps template / text-mode
419
- // state that only resyncs one way — remounting hands every slot a field
420
- // seeded from the operand that now lives there.
421
- const [argsGeneration, setArgsGeneration] = useState(0);
422
- const dragArg = useRef<number | null>(null);
423
- const [dragOverArg, setDragOverArg] = useState<number | null>(null);
424
-
425
- const moveVarArg = useCallback(
426
- (from: number, to: number) => {
427
- setArgsGeneration((generation) => generation + 1);
428
- onValueChange(
429
- {
430
- ...value,
431
- value: {
432
- ...value.value,
433
- args: moveItem(value.value.args, from, to),
434
- },
435
- },
436
- path
437
- );
438
- },
439
- [onValueChange, JSON.stringify(value), path]
440
- );
441
-
442
- const handleArgDragStart = useCallback((index: number) => {
443
- dragArg.current = index;
444
- }, []);
445
- const handleArgDragOver = useCallback((index: number) => {
446
- setDragOverArg((current) => (current === index ? current : index));
447
- }, []);
448
- const handleArgDragEnd = useCallback(() => {
449
- dragArg.current = null;
450
- setDragOverArg(null);
451
- }, []);
452
- const handleArgDrop = useCallback(
453
- (index: number) => {
454
- const from = dragArg.current;
455
-
456
- if (from !== null && from !== index) {
457
- moveVarArg(from, index);
458
- }
459
-
460
- handleArgDragEnd();
461
- },
462
- [moveVarArg, handleArgDragEnd]
463
- );
464
-
465
- const updateMultipleArgs = useCallback(
466
- (args: IExpression[]) => {
467
- onValueChange(
468
- {
469
- ...value,
470
- value: {
471
- ...value.value,
472
- args: addMissingArgs(value.value.exp, args),
473
- },
474
- },
475
- path
476
- );
477
- },
478
- [onValueChange, JSON.stringify(value), path, addMissingArgs]
479
- );
480
-
481
- const updateArg = useCallback(
482
- (val: any, index: number = 0, type?: string, isFunction?: boolean) => {
483
- const args = clone(value.value.args);
484
- const newVal = clone(val);
485
-
486
- if (newVal?.exp) {
487
- newVal.args = addMissingArgs(newVal.exp, newVal.args);
488
- }
489
-
490
- /* `required` is NOT written here. It is a schema key — it describes the
491
- catalogue's declaration of the argument, not the author's value, and
492
- nothing reads it back off a stored argument (validation takes it from
493
- the schema). Persisting it made a cleared argument indistinguishable
494
- from real data: the value dropped out as `undefined`, `required: true`
495
- stayed, and what was saved to the draft was `{type, required}` — an
496
- argument DEFINITION sitting where its value should be. */
497
- args[index] = {
498
- ...args[index],
499
- value: newVal,
500
- type: !isFunction ? type || args[index]?.type : undefined,
501
- is_expression: isFunction,
502
- };
503
-
504
- onValueChange(
505
- {
506
- ...value,
507
- value: {
508
- ...value.value,
509
- args,
510
- },
511
- },
512
- path
513
- );
514
- },
515
- [addMissingArgs, onValueChange, JSON.stringify(value), path]
516
- );
517
-
518
- const handleRemoveClick = useCallback(() => {
519
- onValueChange?.(undefined, path, true);
520
- }, [onValueChange, path]);
521
-
522
- const firstArgSchema = selectedExpression?.args[0];
523
- const firstParamType = firstArgument?.is_expression
524
- ? firstArgSchema?.ui_type
525
- : firstArgument?.type || type || 'context';
526
- let restOfArgs = selectedExpression?.args.slice(1);
527
- const argCount = size(value.value?.args);
528
- const canReorderArgs =
529
- !!selectedExpression?.varargs && argCount > 1 && !readOnly && size(reorderSurfaces) > 0;
530
- const argReorderSurfaces = canReorderArgs ? reorderSurfaces : undefined;
531
- const isDragOverArg = (index: number) =>
532
- dragOverArg === index && dragArg.current !== null && dragArg.current !== index;
533
-
534
- // The `⋮` menu's "Move Argument" section, one per operand. The wording is
535
- // axis-free on purpose — the operands wrap into a column on narrow screens.
536
- const argMenuActions = useMemo((): ITemplateMenuActions[] | undefined => {
537
- if (!canReorderArgs || !reorderSurfaces.includes('overflowMenu')) {
538
- return undefined;
539
- }
540
-
541
- const moves: [string, string, IReqoreIconName, (index: number) => number][] = [
542
- ['before', 'Move before', 'ArrowGoBackLine', (index) => index - 1],
543
- ['after', 'Move after', 'ArrowGoForwardLine', (index) => index + 1],
544
- ['start', 'Move to start', 'SkipBackLine', () => 0],
545
- ['end', 'Move to end', 'SkipForwardLine', () => argCount - 1],
546
- ];
547
-
548
- return Array.from({ length: argCount }, (_, index) => ({
549
- label: 'Move Argument',
550
- icon: 'ArrowLeftRightLine',
551
- items: [
552
- ...moves.map(([key, label, icon, target]) => {
553
- const to = target(index);
554
-
555
- return {
556
- label,
557
- icon,
558
- className: `expression-arg-move-${key}`,
559
- disabled: to === index || to < 0 || to >= argCount,
560
- onClick: () => moveVarArg(index, to),
561
- };
562
- }),
563
- // Any position in one pick — what a ten-part concat needs.
564
- {
565
- isCustom: true as const,
566
- content: (closePopover) => (
567
- <ExpressionMoveToPositionStrip
568
- index={index}
569
- count={argCount}
570
- onMoveTo={(to) => {
571
- moveVarArg(index, to);
572
- closePopover?.();
573
- }}
574
- />
575
- ),
576
- },
577
- ],
578
- }));
579
- }, [canReorderArgs, reorderSurfaces, argCount, moveVarArg]);
580
-
581
- if (selectedExpression?.varargs) {
582
- restOfArgs = [
583
- ...restOfArgs,
584
- ...rest.map(() => ({
585
- ...selectedExpression.args[0],
586
- })),
587
- ];
588
- }
589
-
590
- const isReturnTypeMatching =
591
- expressionReturnType === 'any' ||
592
- (isArray(returnType)
593
- ? areQorusTypesCompatible(returnType, expressionReturnType)
594
- : returnType === 'auto' ||
595
- returnType === 'any' ||
596
- returnType === 'context' ||
597
- expressionReturnType === 'any' ||
598
- areQorusTypesCompatible(returnType, expressionReturnType) ||
599
- returnType === expressionReturnType ||
600
- !returnType) ||
601
- // a condition is decided by any result but text, a date or a time
602
- (isConditionType(returnType as string | string[] | undefined) &&
603
- !!expressionReturnType &&
604
- !isTextOrDateType(expressionReturnType));
605
-
606
- const defaultItems = useMemo(
607
- () =>
608
- expressions.value
609
- // a condition (a field or an operand that must be true or false) offers the operations whose
610
- // result decides it - any but text, a date or a time, which are compared explicitly; a group's members
611
- // are its own business, and the operation already chosen
612
- // stays, so a stored mismatch can be seen and fixed
613
- .filter(
614
- (exp) =>
615
- isChild ||
616
- exp.name === value?.value?.exp ||
617
- expressionFitsReturnType(returnType as string | string[] | undefined, exp)
618
- )
619
- .map((exp) => ({
620
- name: exp.name,
621
- value: exp.name,
622
- display_name: exp.display_name,
623
- short_desc: exp.short_desc,
624
- desc: exp.desc,
625
- badge: exp.symbol,
626
- from_server: exp.from_server,
627
- from_both: exp.from_both,
628
- groups: exp.groups,
629
- }))
630
- .filter((exp) =>
631
- serverExpression
632
- ? exp.from_server || exp.from_both
633
- : firstArgument?.value && !isFirstArgumentField
634
- ? !exp.from_server
635
- : true
636
- ),
637
- [JSON.stringify(expressions.value), serverExpression, level, isChild, returnType, value?.value?.exp]
638
- );
639
-
640
- // SEAM (reqraft): reqraft's `SelectFormField` calls `onChange(value)` with
641
- // the value directly (the IDE's Select used `(name, value)`).
642
- const handleOperatorChange = useCallback(
643
- (value: unknown) => {
644
- updateExp(value as string);
645
- },
646
- [updateExp]
647
- );
648
-
649
- // The panel whose slot was clicked, kept until the operand it adds has
650
- // rendered: the new field then takes focus, so adding a value and typing
651
- // it is one gesture. The slot sits inside this builder's own panel, and a
652
- // nested builder's operands come before it in DOM order, so the last
653
- // operand of the panel is the one just added.
654
- const focusNewArgIn = useRef<HTMLElement | null>(null);
655
-
656
- const handleAddArgumentClick = useCallback(
657
- (event?: React.MouseEvent<HTMLElement>) => {
658
- focusNewArgIn.current = event?.currentTarget?.closest<HTMLElement>('.expression') ?? null;
659
- updateArg(undefined, size(value.value.args), undefined, false);
660
- },
661
- [updateArg, JSON.stringify(value)]
662
- );
663
-
664
- useEffect(() => {
665
- const panel = focusNewArgIn.current;
666
-
667
- if (!panel) {
668
- return;
669
- }
670
-
671
- focusNewArgIn.current = null;
672
- const operands = panel.querySelectorAll<HTMLElement>('.expression-arg');
673
- const added = operands[operands.length - 1];
674
-
675
- if (!added) {
676
- return;
677
- }
678
-
679
- // A typed operand mounts a text field; an untyped one opens on its
680
- // template picker, whose trigger is the field's first button that is not
681
- // one of the operand's own controls (grip, position, ⋮, remove).
682
- const field =
683
- added.querySelector<HTMLElement>('textarea, input') ??
684
- Array.from(added.querySelectorAll<HTMLElement>('button')).find(
685
- (button) =>
686
- !button.closest(
687
- '.expression-arg-drag-handle, .expression-arg-position, .template-more, .expression-remove-arg'
688
- )
689
- );
690
-
691
- field?.focus();
692
- }, [argCount]);
693
-
694
- const canAddArg = !!selectedExpression?.varargs && !readOnly;
695
-
696
- // On a phone the operand row has no room for a remove button beside the
697
- // field, the grip and the `⋮`; it wrapped onto a line of its own. The
698
- // operand already has an always-visible menu, so the action goes there,
699
- // as the last row. Same media query as the slot, for the same reason.
700
- const phone = usePhoneViewport();
701
- // Any operand can go, the first included (the next one becomes first),
702
- // down to the catalogue's minimum — one for most, so the last operand
703
- // left is the one that cannot be removed.
704
- const canRemoveArgs =
705
- !!selectedExpression?.varargs &&
706
- argCount > Math.max(1, selectedExpression.min_args ?? 1) &&
707
- !readOnly;
708
- const removeArgInline = canRemoveArgs && !phone;
709
- const handleRemoveFirstArg = useCallback(() => removeVarArg(0), [removeVarArg]);
710
- const argRemoveMenuItems = useMemo((): IReqoreMenuItemProps[][] | undefined => {
711
- if (!canRemoveArgs || !phone) {
712
- return undefined;
713
- }
714
-
715
- const name = (selectedExpression.args[0]?.display_name || 'argument').toLowerCase();
716
-
717
- return Array.from({ length: argCount }, (_, index) => [
718
- {
719
- label: `Remove ${name}`,
720
- icon: 'DeleteBinLine',
721
- intent: 'danger',
722
- className: 'expression-remove-arg',
723
- onClick: () => removeVarArg(index),
724
- },
725
- ]);
726
- }, [canRemoveArgs, phone, argCount, removeVarArg, JSON.stringify(selectedExpression?.args[0])]);
727
- const isSlotDropTarget = canReorderArgs && reorderSurfaces.includes('dragHandle');
728
- // The slot is indexed one past the last operand, so its drag-over state
729
- // never lights an operand and vice versa.
730
- const handleSlotDragOver = useCallback(
731
- () => handleArgDragOver(argCount),
732
- [handleArgDragOver, argCount]
733
- );
734
- const handleSlotDrop = useCallback(() => handleArgDrop(argCount - 1), [handleArgDrop, argCount]);
735
-
736
- const handleWrapExpressionClick = useCallback(
737
- (value: unknown) => {
738
- wrapExpression(value as string);
739
- },
740
- [wrapExpression]
741
- );
742
-
743
- const handleUpdateExpToAnd = useCallback(() => {
744
- updateExpToAndOr('&&');
745
- }, [updateExpToAndOr]);
746
-
747
- const handleUpdateExpToOr = useCallback(() => {
748
- updateExpToAndOr('||');
749
- }, [updateExpToAndOr]);
750
-
751
- const handleUpdateTypeChange = useCallback(
752
- (value) => {
753
- updateType(value === 'context' ? undefined : value, true);
754
- },
755
- [updateType]
756
- );
757
-
758
- const handleFirstParamChange = useCallback(
759
- (_name, value, type, isFunction) => {
760
- if (isFunction || (type !== 'any' && type !== 'auto')) {
761
- updateArg(value, 0, isFunction ? undefined : type, isFunction);
762
- }
763
- },
764
- [updateArg]
765
- );
766
-
767
- const buildCustomTemplateItems = useCallback(
768
- (
769
- arg: IExpressionSchemaArg,
770
- onClick: (type: IQorusTypeObject, removeTemplate: () => void) => void
771
- ) => {
772
- // If the argument has allowed values or element allowed values, do not allow type changing
773
- if (arg?.allowed_values || arg?.element_allowed_values) {
774
- return [];
775
- }
776
- // For every type in the types we need to check if it matches a type in the args accepted types
777
- // We need to sort these types at the top, and but the rest at the bottom with a warning intent
778
- const serverAcceptedTypes = types.getAcceptedTypes(arg?.ui_type);
779
- const acceptedTypes = types.compactValue?.filter(
780
- (type) =>
781
- !arg || serverAcceptedTypes.includes(type.name) || serverAcceptedTypes.includes('any')
782
- );
783
-
784
- const otherTypes = types.compactValue?.filter(
785
- (type) =>
786
- arg && !serverAcceptedTypes.includes(type.name) && !serverAcceptedTypes.includes('any')
787
- );
788
-
789
- let result: TCustomTemplateItems = [];
790
-
791
- if (size(acceptedTypes)) {
792
- result = acceptedTypes?.map((type) => ({
793
- label: type.display_name,
794
- description: type.short_desc,
795
- minimal: true,
796
- onClick: (_e, removeTemplate) => {
797
- removeTemplate?.();
798
- onClick?.(type, removeTemplate);
799
- },
800
- }));
801
- }
802
-
803
- if (size(otherTypes)) {
804
- result = [
805
- ...result,
806
- {
807
- isDivider: true,
808
- line: true,
809
- },
810
- ...(otherTypes?.map((type) => ({
811
- label: type.display_name,
812
- description: type.short_desc,
813
- minimal: true,
814
- intent: 'warning',
815
- onClick: (_e, removeTemplate) => {
816
- if (doNotShowTypeConfirmation) {
817
- removeTemplate?.();
818
- onClick?.(type, removeTemplate);
819
- return;
820
- }
821
-
822
- setConfirmDialogData({
823
- isOpen: true,
824
- acceptedTypes: serverAcceptedTypes,
825
- onConfirm: () => {
826
- removeTemplate?.();
827
- onClick?.(type, removeTemplate);
828
- },
829
- });
830
- },
831
- })) as TCustomTemplateItems),
832
- ];
833
- }
834
-
835
- return result;
836
- },
837
- [types?.compactValue]
838
- );
839
-
840
- const hasArgumentsWithTypeMismatch = useMemo(() => {
841
- return value.value?.args?.some((arg) => arg?.types_mismatch);
842
- }, [JSON.stringify(value)]);
843
-
844
- // The type hook is seeded with the complete built-in catalogue and refreshes
845
- // it in the background. Do not hide an otherwise usable expression behind
846
- // a skeleton while that optional refresh is in flight.
847
- if (expressions.loading || (types.loading && !size(types.value))) {
848
- return <ReqorePanelSkeleton size='small' />;
849
- }
850
-
851
- const validationData = validateFieldWithResult('expression', value, {
852
- expressions: expressions.value,
853
- });
854
-
855
- return (
856
- <ExpressionItem
857
- index={index}
858
- as={ReqorePanel}
859
- intent={validationData.isValid && !!returnType && isReturnTypeMatching ? 'muted' : 'danger'}
860
- description={
861
- isExpressionServerHandled ? 'This expression will be executed outside of Qorus' : ''
862
- }
863
- flat
864
- readOnly={readOnly}
865
- minimal
866
- size='small'
867
- isChild={isChild}
868
- className='expression'
869
- customTheme={{
870
- main: `main:darken:${level}` as TReqoreEffectColor,
871
- }}
872
- id={id}
873
- label={
874
- <Select
875
- size='tiny'
876
- className='expression-operator-selector'
877
- value={value?.value?.exp}
878
- icon='Functions'
879
- placeholder='Select operation'
880
- fluid={false}
881
- // shrinks with a narrow panel, its name shortened, rather than holding the panel open
882
- fixed={false}
883
- style={{ minWidth: 0, maxWidth: '100%' }}
884
- flat
885
- // The operation catalogue is long and every entry carries a description,
886
- // so it belongs in the searchable collection modal rather than an inline
887
- // dropdown. `SelectFormField` defaults `forceDropdown` to `true`, which
888
- // would otherwise collapse this picker into the dropdown presentation.
889
- forceDropdown={false}
890
- minimal
891
- items={defaultItems}
892
- onChange={handleOperatorChange}
893
- showDescription='tooltip'
894
- disabled={readOnly}
895
- id='expression-builder-select-function'
896
- />
897
- }
898
- style={{
899
- marginLeft: isChild ? 10 : undefined,
900
- // indented, it is as wide as what is left of the group's width: at its full width the indent
901
- // pushed it - and the actions floating above it on hover - past the group and a narrow screen
902
- maxWidth: isChild ? 'calc(100% - 10px)' : undefined,
903
- minWidth: 0,
904
- borderStyle: 'dashed',
905
- flexShrink: 1,
906
- }}
907
- contentStyle={{
908
- overflowX: 'hidden',
909
- }}
910
- // with a mouse, the actions float above the panel while it is hovered; a finger cannot hover, and a
911
- // tap left them floating over what is above - the Visual / Text switch, where a tap meant for
912
- // Text hit "Remove this expression" - so on a touch device they stay in the panel's own bar
913
- floatingActions={!coarsePointer}
914
- actions={[
915
- // SEAM (reqraft): the IDE renders `AiAssistanceAction` first here;
916
- // consumers inject it (or anything else) via `extraActions`.
917
- ...resolvedExtraActions,
918
- // "Add value" is not up here: it is the slot after the last operand
919
- // (`ExpressionBuilderAddArgumentSlot`), where the value will appear.
920
- {
921
- as: Select,
922
- show: readOnly ? false : 'hover',
923
- props: {
924
- className: 'expression-wrap',
925
- id: 'expression-builder-wrap',
926
- placeholder: 'Wrap',
927
- icon: 'Functions',
928
- showRightIcon: false,
929
- fluid: false,
930
- transparent: false,
931
- fixed: true,
932
- minimal: false,
933
- // Same catalogue as the operation selector above — keep the collection
934
- // modal rather than the `forceDropdown` default's inline dropdown.
935
- forceDropdown: false,
936
- items: defaultItems,
937
- hideItemCount: true,
938
- onChange: handleWrapExpressionClick,
939
- showDescription: 'tooltip',
940
- tooltip: 'Wrap this expression in another expression',
941
- size: 'tiny',
942
- },
943
- },
944
- {
945
- className: 'expression-unwrap',
946
- label: 'Remove',
947
- textAlign: 'center',
948
- icon: 'CloseLine',
949
- tooltip: 'Remove this expression but keep the children',
950
- fixed: true,
951
- onClick: unwrapExpression,
952
- show: value.value?.args?.[0]?.is_expression === true && !readOnly ? 'hover' : false,
953
- },
954
- {
955
- className: 'expression-explain',
956
- label: showSummary ? 'Hide Explanation' : 'Explain',
957
- show: level === 0,
958
- onClick: () => setShowSummary(!showSummary),
959
- icon: 'InformationLine',
960
- tooltip: showSummary
961
- ? 'Hide explanation of this expression'
962
- : 'Show explanation of this expression',
963
- fixed: true,
964
- },
965
- {
966
- className: 'expression-group-remove',
967
- intent: 'danger',
968
- textAlign: 'center',
969
- icon: 'DeleteBinLine',
970
- tooltip: 'Remove this expression and its children',
971
- fixed: true,
972
- minimal: true,
973
- show: readOnly ? false : 'hover',
974
- onClick: handleRemoveClick,
975
- },
976
- ]}
977
- bottomActions={[
978
- {
979
- show: !!selectedExpression && areQorusTypesCompatible('bool', returnType) && !readOnly,
980
- group: [
981
- {
982
- flat: true,
983
- className: 'expression-and',
984
- label: 'AND',
985
- textAlign: 'center',
986
- icon: 'AddLine',
987
- fixed: true,
988
- compact: true,
989
- size: 'tiny',
990
- show: (!group || group === '||') && !readOnly,
991
- onClick: handleUpdateExpToAnd,
992
- },
993
- {
994
- flat: true,
995
- className: 'expression-or',
996
- label: 'OR',
997
- textAlign: 'center',
998
- icon: 'AddLine',
999
- show: (!group || group === '&&') && !readOnly,
1000
- fixed: true,
1001
- compact: true,
1002
- size: 'tiny',
1003
- onClick: handleUpdateExpToOr,
1004
- },
1005
- ],
1006
- },
1007
- ]}
1008
- >
1009
- {hasArgumentsWithTypeMismatch && (
1010
- <ConfirmMismatchedTypesModal
1011
- args={value.value?.args}
1012
- expression={selectedExpression}
1013
- onSubmit={updateMultipleArgs}
1014
- expressions={expressions.value}
1015
- />
1016
- )}
1017
- {confirmDialogData?.isOpen && (
1018
- <ConfirmUnsupportedTypeModal
1019
- acceptedTypes={confirmDialogData.acceptedTypes}
1020
- onClose={() => {
1021
- setConfirmDialogData(undefined);
1022
- }}
1023
- maxSize='550px'
1024
- bottomActions={[
1025
- {
1026
- label: confirmDialogData?.cancelText || 'Cancel',
1027
- onClick: () => {
1028
- confirmDialogData?.onCancel?.();
1029
- setConfirmDialogData(undefined);
1030
- },
1031
- icon: 'CloseFill',
1032
- minimal: true,
1033
- },
1034
- {
1035
- label: confirmDialogData?.confirmText || 'Confirm',
1036
- intent: 'warning',
1037
- icon: 'CheckFill',
1038
- minimal: true,
1039
- position: 'right',
1040
- onClick: () => {
1041
- confirmDialogData.onConfirm?.();
1042
- setConfirmDialogData(undefined);
1043
- },
1044
- },
1045
- ]}
1046
- >
1047
- {confirmDialogData.children}
1048
- </ConfirmUnsupportedTypeModal>
1049
- )}
1050
- {showSummary && (
1051
- <ExpressionRenderTemplate exp={value} expressions={expressions.value} templates={localTemplates} />
1052
- )}
1053
- {!selectedExpression && !serverExpression && !firstArgument?.value && level === 0 ? (
1054
- <ReqoreMessage size='small' opaque={false} intent='info'>
1055
- Select an operation to start building your expression
1056
- </ReqoreMessage>
1057
- ) : (
1058
- <ReqoreControlGroup
1059
- // On a phone every operand is a full-width row, so the group spans
1060
- // the panel; on desktop it hugs its content and wraps.
1061
- fluid={phone}
1062
- style={{ maxWidth: '100%' }}
1063
- wrap
1064
- verticalAlign='flex-start'
1065
- size='normal'
1066
- gapSize='big'
1067
- >
1068
- {firstArgSchema?.label_before && (
1069
- <ExpressionArgumentDetail label={firstArgSchema.label_before} />
1070
- )}
1071
- <ExpressionBuilderArgumentWrapper
1072
- expressions={expressions.value}
1073
- arg={firstArgument}
1074
- schema={firstArgSchema}
1075
- onTypeChange={handleUpdateTypeChange}
1076
- onRemoveArgClick={handleRemoveFirstArg}
1077
- hasMultipleArgs={removeArgInline}
1078
- fluid={phone}
1079
- readOnly={readOnly}
1080
- reorder={argReorderSurfaces}
1081
- argIndex={0}
1082
- argCount={argCount}
1083
- dragOver={isDragOverArg(0)}
1084
- onMoveArg={moveVarArg}
1085
- onArgDragStart={handleArgDragStart}
1086
- onArgDragOver={handleArgDragOver}
1087
- onArgDrop={handleArgDrop}
1088
- onArgDragEnd={handleArgDragEnd}
1089
- >
1090
- <TemplateField
1091
- component={auto}
1092
- componentOverrides={componentOverrides}
1093
- // SEAM (reqraft): an operand that becomes an expression mounts
1094
- // its own builder through this TemplateField — hand the host's
1095
- // actions on, or nesting silently drops them (the group
1096
- // recursion below already forwards them).
1097
- extraActions={extraActions}
1098
- minimal
1099
- label={
1100
- serverAndQorusExpression
1101
- ? 'Select Template Or Field'
1102
- : serverExpression
1103
- ? 'Select Field'
1104
- : qorusExpression
1105
- ? 'Select Template'
1106
- : 'Select Template Or Field'
1107
- }
1108
- allowFunctions={
1109
- !serverExpression &&
1110
- !!selectedExpression &&
1111
- !firstArgSchema?.allowed_values &&
1112
- !firstArgSchema?.element_allowed_values
1113
- }
1114
- level={level + 1}
1115
- key={`${argsGeneration}-${firstParamType}${selectedExpression?.name}`}
1116
- type={firstParamType}
1117
- defaultType={
1118
- firstArgument?.allowed_values || firstArgument?.element_allowed_values
1119
- ? firstArgument?.type.base_type
1120
- : firstParamType
1121
- }
1122
- returnType={types.getAcceptedTypes(firstArgSchema?.ui_type) as any}
1123
- value={firstArgument?.value}
1124
- isFunction={firstArgument?.is_expression}
1125
- onChange={handleFirstParamChange as any}
1126
- templates={localTemplates}
1127
- allowTemplates
1128
- filterTemplatesByType={false}
1129
- allowCustomValues={
1130
- !!firstArgument?.allowed_values ||
1131
- !!firstArgument?.element_allowed_values ||
1132
- (!!firstArgument?.type && !serverExpression)
1133
- }
1134
- filterTemplatesFunc={(templates) => {
1135
- // PORT NOTE: `?.` on `items` added — with no templates at all
1136
- // (FormEngine with templates off) the IDE original crashes on
1137
- // `{}.items.filter`.
1138
- const filteredTemplates = templates?.items?.filter((item) => {
1139
- return serverExpression ? item.metadata?.dataRole === 'record' : true;
1140
- });
1141
-
1142
- return {
1143
- ...templates,
1144
- items: filteredTemplates,
1145
- };
1146
- }}
1147
- fluid={phone}
1148
- fixed={!phone}
1149
- disableManagement
1150
- disabled={readOnly}
1151
- allowed_values={firstArgSchema?.allowed_values}
1152
- element_allowed_values={firstArgSchema?.element_allowed_values}
1153
- menuItems={
1154
- isExpressionServerHandled
1155
- ? undefined
1156
- : buildCustomTemplateItems(firstArgSchema, (type, removeTemplate) => {
1157
- removeTemplate?.();
1158
- updateArg(
1159
- undefined,
1160
- 0,
1161
- type.name === 'context' ? undefined : (type.name as string)
1162
- );
1163
- })
1164
- }
1165
- menuActions={argMenuActions?.[0]}
1166
- menuTrailingItems={argRemoveMenuItems?.[0]}
1167
- reorder={props.reorder}
1168
- expressions={props.expressions as any}
1169
- expressions_url={expressionsUrl}
1170
- />
1171
- </ExpressionBuilderArgumentWrapper>
1172
- {firstArgSchema?.label_after && (
1173
- <ExpressionArgumentDetail label={firstArgSchema.label_after} />
1174
- )}
1175
- {selectedExpression
1176
- ? restOfArgs?.map((arg, index) => (
1177
- <React.Fragment
1178
- key={`${argsGeneration}-${index}-${arg.ui_type}-${arg.display_name}`}
1179
- >
1180
- {arg?.label_before && <ExpressionArgumentDetail label={arg.label_before} />}
1181
- <ExpressionBuilderArgumentWrapper
1182
- readOnly={readOnly}
1183
- expressions={expressions.value}
1184
- arg={{
1185
- ...rest[index],
1186
- type: getArgumentType(expressions.value, rest[index], arg),
1187
- }}
1188
- schema={arg}
1189
- onTypeChange={(value) => {
1190
- updateArg(
1191
- undefined,
1192
- index + 1,
1193
- value === 'context' ? undefined : (value as string)
1194
- );
1195
- }}
1196
- onRemoveArgClick={() => {
1197
- removeVarArg(index + 1);
1198
- }}
1199
- hasMultipleArgs={removeArgInline}
1200
- fluid={phone}
1201
- reorder={argReorderSurfaces}
1202
- argIndex={index + 1}
1203
- argCount={argCount}
1204
- dragOver={isDragOverArg(index + 1)}
1205
- onMoveArg={moveVarArg}
1206
- onArgDragStart={handleArgDragStart}
1207
- onArgDragOver={handleArgDragOver}
1208
- onArgDrop={handleArgDrop}
1209
- onArgDragEnd={handleArgDragEnd}
1210
- >
1211
- <TemplateField
1212
- minimal
1213
- component={auto}
1214
- componentOverrides={componentOverrides}
1215
- // SEAM (reqraft): same as the first operand above.
1216
- extraActions={extraActions}
1217
- level={level + 1}
1218
- allowFunctions={!arg?.allowed_values && !arg?.element_allowed_values}
1219
- isFunction={rest[index]?.is_expression}
1220
- key={`${argsGeneration}-${index}-${arg.ui_type}-${arg.display_name}-${level + 1}`}
1221
- // An empty argument has no value to take a type from; fall
1222
- // back to the type the catalogue declares for it, as the
1223
- // first-argument mount already does. Without this an
1224
- // empty bool argument rendered as an untyped `auto` field
1225
- // — a type picker under a label that already said
1226
- // "true or false" — and an empty `any` argument never
1227
- // qualified for the template-selector default, because
1228
- // that rule reads `type`, and `type` was undefined.
1229
- type={rest[index]?.type ?? arg.ui_type}
1230
- defaultType={
1231
- arg.allowed_values || arg.element_allowed_values
1232
- ? arg.ui_type
1233
- : (rest[index]?.type ?? arg.ui_type)
1234
- }
1235
- returnType={types.getAcceptedTypes(arg.ui_type) as any}
1236
- canBeNull={false}
1237
- value={rest[index]?.value}
1238
- templates={localTemplates}
1239
- allowTemplates={!arg?.allowed_values && !arg?.element_allowed_values}
1240
- filterTemplatesByType={false}
1241
- allowCustomValues={
1242
- !!arg.allowed_values ||
1243
- !!arg.element_allowed_values ||
1244
- !!rest[index]?.type ||
1245
- !!arg.default_value
1246
- }
1247
- onChange={((_name, value, type, isFunction) => {
1248
- updateArg(value, index + 1, isFunction ? undefined : type, isFunction);
1249
- }) as any}
1250
- fluid={phone}
1251
- fixed={!phone}
1252
- disableManagement
1253
- disabled={readOnly}
1254
- menuItems={buildCustomTemplateItems(arg, (type, removeTemplate) => {
1255
- removeTemplate?.();
1256
- updateArg(
1257
- undefined,
1258
- index + 1,
1259
- type.name === 'context' ? undefined : (type.name as string)
1260
- );
1261
- })}
1262
- menuActions={argMenuActions?.[index + 1]}
1263
- menuTrailingItems={argRemoveMenuItems?.[index + 1]}
1264
- reorder={props.reorder}
1265
- expressions={props.expressions as any}
1266
- expressions_url={expressionsUrl}
1267
- allowed_values={arg?.allowed_values}
1268
- element_allowed_values={arg?.element_allowed_values}
1269
- ui_element_type={(arg as any)?.ui_element_type}
1270
- />
1271
- </ExpressionBuilderArgumentWrapper>
1272
- {arg?.label_after && <ExpressionArgumentDetail label={arg.label_after} />}
1273
- </React.Fragment>
1274
- ))
1275
- : null}
1276
- {canAddArg && (
1277
- <ExpressionBuilderAddArgumentSlot
1278
- argumentName={selectedExpression.args[0]?.display_name}
1279
- disabled={!validateField('expression', value, { expressions: expressions.value })}
1280
- droppable={isSlotDropTarget}
1281
- dragOver={isDragOverArg(argCount)}
1282
- onClick={handleAddArgumentClick}
1283
- onDragOver={handleSlotDragOver}
1284
- onDrop={handleSlotDrop}
1285
- />
1286
- )}
1287
- </ReqoreControlGroup>
1288
- )}
1289
- {!isReturnTypeMatching && (
1290
- <>
1291
- <ReqoreVerticalSpacer height={5} />
1292
- <ReqoreTag
1293
- minimal
1294
- icon='ErrorWarningLine'
1295
- intent='danger'
1296
- size='tiny'
1297
- wrap
1298
- label={
1299
- isConditionType(returnType as string | string[] | undefined) &&
1300
- !!expressionReturnType &&
1301
- isTextOrDateType(expressionReturnType)
1302
- ? // a condition that gives text, a date or a time: say how to make it one
1303
- `A condition can't give ${types.getTypeDisplayName(expressionReturnType)}: compare it explicitly, for example @status == "open" or @note != "".`
1304
- : `This expression returns ${types.getTypeDisplayName(expressionReturnType) || 'nothing'} but the expected return type is ${expectedReturnTypeText}. Please select an expression that returns ${expectedReturnTypeText} or wrap this expression inside another one that does.`
1305
- }
1306
- />
1307
- </>
1308
- )}
1309
- {selectedExpression && !validationData.isValid ? (
1310
- <>
1311
- <ReqoreVerticalSpacer height={5} />
1312
- <ReqoreTag
1313
- minimal
1314
- icon='ErrorWarningLine'
1315
- intent='danger'
1316
- size='tiny'
1317
- wrap
1318
- label={validationData.reason || 'Expression is not valid for unknown reasons'}
1319
- />
1320
- </>
1321
- ) : null}
1322
- </ExpressionItem>
1323
- );
1324
- };
1325
-
1326
- export const ExpressionBuilder = ({
1327
- localTemplates,
1328
- value = ExpressionDefaultValue,
1329
- isChild,
1330
- level = 0,
1331
- index = 0,
1332
- path,
1333
- type,
1334
- returnType,
1335
- group,
1336
- onChange,
1337
- onValueChange,
1338
- readOnly,
1339
- expressions,
1340
- expressionsUrl,
1341
- serverHandled,
1342
- extraActions,
1343
- componentOverrides,
1344
- reorder,
1345
- }: IExpressionBuilderProps) => {
1346
- const templates = useTemplates(!isChild, localTemplates);
1347
- /* A builder nested in a group does not resolve templates again: its parent hands it the resolved ones.
1348
- `useTemplates` gives a nested builder none, and they were what it handed on, so every comparison in
1349
- an AND/OR group had no templates - its field pickers had nothing to offer and were drawn disabled,
1350
- and the operands read as read-only. */
1351
- const resolvedTemplates = isChild ? localTemplates : templates.value;
1352
- const theme = useReqoreTheme();
1353
- const [showSummary, setShowSummary] = useState(false);
1354
- const _expressions = useExpressions({
1355
- allow: true,
1356
- expressionsUrl,
1357
- // SEAM (reqraft): the catalogue is provided whole; override the fetch
1358
- // (and thread it through the group recursion above) so offline stories /
1359
- // CI are deterministic.
1360
- override: expressions,
1361
- });
1362
-
1363
- noopUseRegisterHintView('expression_builder', level === 0 && index === 0);
1364
-
1365
- const handleChange = useCallback(
1366
- (newValue: IExpression, newPath: string, remove?: boolean) => {
1367
- if (onChange) {
1368
- if (!newPath) {
1369
- onChange(newValue, remove);
1370
- return;
1371
- }
1372
-
1373
- const clonedValue = cloneDeep(value);
1374
-
1375
- if (remove) {
1376
- unset(clonedValue, newPath);
1377
- const pathArray = newPath.split('.');
1378
-
1379
- pathArray.pop();
1380
-
1381
- const parentPath = pathArray.join('.');
1382
- let parent = get(clonedValue, parentPath);
1383
-
1384
- parent = parent.filter((item: any) => item);
1385
-
1386
- if (size(parent) === 1) {
1387
- pathArray.pop();
1388
-
1389
- const grandParentPath = pathArray.join('.');
1390
-
1391
- if (grandParentPath === '') {
1392
- onChange(parent[0].value, remove);
1393
- return;
1394
- }
1395
-
1396
- set(clonedValue, grandParentPath, parent[0].value);
1397
- } else {
1398
- set(clonedValue, parentPath, parent);
1399
- }
1400
- } else {
1401
- set(clonedValue, newPath, newValue);
1402
- }
1403
-
1404
- onChange(clonedValue, remove && !newPath);
1405
- } else if (onValueChange) {
1406
- onValueChange(newValue, newPath, remove);
1407
- }
1408
- },
1409
- [JSON.stringify(value), onChange, onValueChange]
1410
- );
1411
-
1412
- if (templates.loading) {
1413
- return (
1414
- <ReqoreSpinner type={5} size='normal'>
1415
- Loading...
1416
- </ReqoreSpinner>
1417
- );
1418
- }
1419
-
1420
- if (
1421
- value.is_expression &&
1422
- value.value &&
1423
- (value.value?.exp === '&&' || value.value?.exp === '||')
1424
- ) {
1425
- return (
1426
- <ReqoreErrorBoundary>
1427
- <ExpressionItem
1428
- index={index}
1429
- as={ReqorePanel}
1430
- isChild={isChild}
1431
- isAndOr
1432
- minimal
1433
- readOnly={readOnly}
1434
- size='small'
1435
- flat
1436
- customTheme={{
1437
- main: darken(`0.0${level * 25}`, theme.main) as TReqoreHexColor,
1438
- }}
1439
- label={isChild ? (value.value.exp === '||' ? 'OR group' : 'AND group') : 'IF group'}
1440
- style={{
1441
- marginLeft: isChild ? 10 : 0,
1442
- // a nested group too: its indent is taken out of its width, not added past it
1443
- maxWidth: isChild ? 'calc(100% - 10px)' : undefined,
1444
- minWidth: 0,
1445
- }}
1446
- actions={[
1447
- {
1448
- icon: 'AddCircleLine',
1449
- show: !readOnly,
1450
- onClick: () => {
1451
- handleChange(
1452
- ExpressionDefaultValue,
1453
- `${path ? `${path}.` : ''}value.args.${size(value.value.args)}`
1454
- );
1455
- },
1456
- tooltip: 'Add condition parameter',
1457
- },
1458
- {
1459
- className: 'expression-explain',
1460
- label: showSummary ? 'Hide Explanation' : 'Explain',
1461
- show: level === 0,
1462
- onClick: () => setShowSummary(!showSummary),
1463
- icon: 'InformationLine',
1464
- tooltip: showSummary
1465
- ? 'Hide explanation of this expression'
1466
- : 'Show explanation of this expression',
1467
- fixed: true,
1468
- },
1469
- ]}
1470
- >
1471
- <ReqoreControlGroup vertical fluid size='normal' style={{ position: 'relative' }} wrap>
1472
- {showSummary && (
1473
- <ExpressionRenderTemplate
1474
- exp={value}
1475
- expressions={_expressions.expressions}
1476
- templates={localTemplates}
1477
- />
1478
- )}
1479
- <StyledExpressionItemLabel
1480
- as={ReqoreP}
1481
- color='transparent'
1482
- className='expression-operator'
1483
- ></StyledExpressionItemLabel>
1484
- {value.value.args?.map((arg, index) => (
1485
- <React.Fragment key={index}>
1486
- <ExpressionBuilder
1487
- value={arg}
1488
- localTemplates={resolvedTemplates}
1489
- isChild
1490
- path={`${path ? `${path}.` : ''}value.args.${index}`}
1491
- level={level + 1}
1492
- index={index}
1493
- type={type}
1494
- onValueChange={handleChange}
1495
- returnType='bool'
1496
- group={value.value.exp}
1497
- readOnly={readOnly}
1498
- expressions={expressions}
1499
- expressionsUrl={expressionsUrl}
1500
- serverHandled={serverHandled}
1501
- extraActions={extraActions}
1502
- reorder={reorder}
1503
- />
1504
- {index < size(value.value.args) - 1 && (
1505
- <ExpressionArgumentDetail
1506
- label={value.value.exp === '||' ? 'OR' : 'AND'}
1507
- align='left'
1508
- style={{
1509
- marginLeft: 10,
1510
- }}
1511
- />
1512
- )}
1513
- </React.Fragment>
1514
- ))}
1515
- </ReqoreControlGroup>
1516
- </ExpressionItem>
1517
- </ReqoreErrorBoundary>
1518
- );
1519
- }
1520
-
1521
- return (
1522
- <ReqoreErrorBoundary>
1523
- <Expression
1524
- localTemplates={resolvedTemplates}
1525
- value={value}
1526
- isChild={isChild}
1527
- type={type}
1528
- returnType={returnType}
1529
- level={level}
1530
- path={path}
1531
- index={index}
1532
- onValueChange={handleChange}
1533
- group={group}
1534
- readOnly={readOnly}
1535
- expressions={expressions}
1536
- expressionsUrl={expressionsUrl}
1537
- id={level === 0 && index === 0 ? 'expression-builder' : undefined}
1538
- serverHandled={serverHandled}
1539
- extraActions={extraActions}
1540
- componentOverrides={componentOverrides}
1541
- reorder={reorder}
1542
- />
1543
- </ReqoreErrorBoundary>
1544
- );
1545
- };