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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (736) hide show
  1. package/README.md +21 -1
  2. package/dist/components/Description/describedControl.d.ts +48 -0
  3. package/dist/components/Description/describedControl.d.ts.map +1 -0
  4. package/dist/components/Description/describedControl.js +81 -0
  5. package/dist/components/Description/describedControl.js.map +1 -0
  6. package/dist/components/Description/index.d.ts.map +1 -1
  7. package/dist/components/Description/index.js +3 -2
  8. package/dist/components/Description/index.js.map +1 -1
  9. package/dist/components/colorValue/colorValue.d.ts +59 -0
  10. package/dist/components/colorValue/colorValue.d.ts.map +1 -0
  11. package/dist/components/colorValue/colorValue.js +245 -0
  12. package/dist/components/colorValue/colorValue.js.map +1 -0
  13. package/dist/components/colorValue/index.d.ts +34 -0
  14. package/dist/components/colorValue/index.d.ts.map +1 -0
  15. package/dist/components/colorValue/index.js +136 -0
  16. package/dist/components/colorValue/index.js.map +1 -0
  17. package/dist/components/colorValue/labels.d.ts +12 -0
  18. package/dist/components/colorValue/labels.d.ts.map +1 -0
  19. package/dist/components/colorValue/labels.js +11 -0
  20. package/dist/components/colorValue/labels.js.map +1 -0
  21. package/dist/components/composer/Composer.d.ts +1 -1
  22. package/dist/components/composer/Composer.d.ts.map +1 -1
  23. package/dist/components/composer/Composer.js +2 -2
  24. package/dist/components/composer/Composer.js.map +1 -1
  25. package/dist/components/dpqlEditor/DpqlEditor.d.ts.map +1 -1
  26. package/dist/components/dpqlEditor/DpqlEditor.js +25 -5
  27. package/dist/components/dpqlEditor/DpqlEditor.js.map +1 -1
  28. package/dist/components/dpqlEditor/dpqlHelpers.d.ts +10 -1
  29. package/dist/components/dpqlEditor/dpqlHelpers.d.ts.map +1 -1
  30. package/dist/components/dpqlEditor/dpqlHelpers.js +30 -13
  31. package/dist/components/dpqlEditor/dpqlHelpers.js.map +1 -1
  32. package/dist/components/dpqlEditor/dpqlTags.d.ts +11 -7
  33. package/dist/components/dpqlEditor/dpqlTags.d.ts.map +1 -1
  34. package/dist/components/dpqlEditor/dpqlTags.js +11 -6
  35. package/dist/components/dpqlEditor/dpqlTags.js.map +1 -1
  36. package/dist/components/dpqlEditor/types.d.ts +47 -8
  37. package/dist/components/dpqlEditor/types.d.ts.map +1 -1
  38. package/dist/components/dpqlEditor/useDpqlSession.d.ts +2 -2
  39. package/dist/components/dpqlEditor/useDpqlSession.d.ts.map +1 -1
  40. package/dist/components/dpqlEditor/useDpqlSession.js +16 -7
  41. package/dist/components/dpqlEditor/useDpqlSession.js.map +1 -1
  42. package/dist/components/form/engine/CompactRow.d.ts.map +1 -1
  43. package/dist/components/form/engine/CompactRow.js +151 -83
  44. package/dist/components/form/engine/CompactRow.js.map +1 -1
  45. package/dist/components/form/engine/CompactToolbar.d.ts.map +1 -1
  46. package/dist/components/form/engine/CompactToolbar.js +29 -3
  47. package/dist/components/form/engine/CompactToolbar.js.map +1 -1
  48. package/dist/components/form/engine/FormEngine.d.ts +34 -1
  49. package/dist/components/form/engine/FormEngine.d.ts.map +1 -1
  50. package/dist/components/form/engine/FormEngine.js +487 -87
  51. package/dist/components/form/engine/FormEngine.js.map +1 -1
  52. package/dist/components/form/engine/HiddenFieldsNote.d.ts +28 -0
  53. package/dist/components/form/engine/HiddenFieldsNote.d.ts.map +1 -0
  54. package/dist/components/form/engine/HiddenFieldsNote.js +32 -0
  55. package/dist/components/form/engine/HiddenFieldsNote.js.map +1 -0
  56. package/dist/components/form/engine/OptionFieldMessages.d.ts.map +1 -1
  57. package/dist/components/form/engine/OptionFieldMessages.js +24 -3
  58. package/dist/components/form/engine/OptionFieldMessages.js.map +1 -1
  59. package/dist/components/form/engine/_structuredData/SchemaDataView.d.ts +2 -2
  60. package/dist/components/form/engine/_structuredData/SchemaDataView.d.ts.map +1 -1
  61. package/dist/components/form/engine/_structuredData/SchemaDataView.js +12 -6
  62. package/dist/components/form/engine/_structuredData/SchemaDataView.js.map +1 -1
  63. package/dist/components/form/engine/compactRowContext.d.ts +19 -0
  64. package/dist/components/form/engine/compactRowContext.d.ts.map +1 -1
  65. package/dist/components/form/engine/compactRowContext.js.map +1 -1
  66. package/dist/components/form/engine/compactRowStyles.d.ts +0 -1
  67. package/dist/components/form/engine/compactRowStyles.d.ts.map +1 -1
  68. package/dist/components/form/engine/compactRowStyles.js +12 -20
  69. package/dist/components/form/engine/compactRowStyles.js.map +1 -1
  70. package/dist/components/form/engine/compactToolbarColors.d.ts +16 -0
  71. package/dist/components/form/engine/compactToolbarColors.d.ts.map +1 -0
  72. package/dist/components/form/engine/compactToolbarColors.js +21 -0
  73. package/dist/components/form/engine/compactToolbarColors.js.map +1 -0
  74. package/dist/components/form/engine/readFirst.d.ts +24 -8
  75. package/dist/components/form/engine/readFirst.d.ts.map +1 -1
  76. package/dist/components/form/engine/readFirst.js +77 -109
  77. package/dist/components/form/engine/readFirst.js.map +1 -1
  78. package/dist/components/form/engine/readFirstColors.d.ts +30 -0
  79. package/dist/components/form/engine/readFirstColors.d.ts.map +1 -0
  80. package/dist/components/form/engine/readFirstColors.js +51 -0
  81. package/dist/components/form/engine/readFirstColors.js.map +1 -0
  82. package/dist/components/form/engine/rowFocus.d.ts +2 -0
  83. package/dist/components/form/engine/rowFocus.d.ts.map +1 -1
  84. package/dist/components/form/engine/rowFocus.js +26 -3
  85. package/dist/components/form/engine/rowFocus.js.map +1 -1
  86. package/dist/components/form/engine/typeChoices.d.ts +1 -1
  87. package/dist/components/form/engine/variants/VariantCalmTable.d.ts.map +1 -1
  88. package/dist/components/form/engine/variants/VariantCalmTable.js +2 -1
  89. package/dist/components/form/engine/variants/VariantCalmTable.js.map +1 -1
  90. package/dist/components/form/engine/variants/VariantCards.d.ts.map +1 -1
  91. package/dist/components/form/engine/variants/VariantCards.js +2 -1
  92. package/dist/components/form/engine/variants/VariantCards.js.map +1 -1
  93. package/dist/components/form/engine/variants/VariantFocus.js +1 -1
  94. package/dist/components/form/engine/variants/VariantFocus.js.map +1 -1
  95. package/dist/components/form/engine/variants/VariantMinimal.d.ts.map +1 -1
  96. package/dist/components/form/engine/variants/VariantMinimal.js +2 -1
  97. package/dist/components/form/engine/variants/VariantMinimal.js.map +1 -1
  98. package/dist/components/form/engine/variants/variantParts.d.ts +1 -1
  99. package/dist/components/form/engine/variants/variantParts.d.ts.map +1 -1
  100. package/dist/components/form/engine/variants/variantParts.js +25 -17
  101. package/dist/components/form/engine/variants/variantParts.js.map +1 -1
  102. package/dist/components/form/expressions/DpqlRendering.d.ts +1 -1
  103. package/dist/components/form/expressions/DpqlRendering.d.ts.map +1 -1
  104. package/dist/components/form/expressions/DpqlRendering.js +3 -3
  105. package/dist/components/form/expressions/DpqlRendering.js.map +1 -1
  106. package/dist/components/form/expressions/ExpressionField.d.ts +41 -3
  107. package/dist/components/form/expressions/ExpressionField.d.ts.map +1 -1
  108. package/dist/components/form/expressions/ExpressionField.js +396 -99
  109. package/dist/components/form/expressions/ExpressionField.js.map +1 -1
  110. package/dist/components/form/expressions/builder/argumentDetail.d.ts.map +1 -1
  111. package/dist/components/form/expressions/builder/argumentDetail.js +4 -1
  112. package/dist/components/form/expressions/builder/argumentDetail.js.map +1 -1
  113. package/dist/components/form/expressions/builder/argumentLabel.d.ts.map +1 -1
  114. package/dist/components/form/expressions/builder/argumentLabel.js +27 -9
  115. package/dist/components/form/expressions/builder/argumentLabel.js.map +1 -1
  116. package/dist/components/form/expressions/builder/argumentWrapper.d.ts.map +1 -1
  117. package/dist/components/form/expressions/builder/argumentWrapper.js +4 -2
  118. package/dist/components/form/expressions/builder/argumentWrapper.js.map +1 -1
  119. package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.d.ts.map +1 -1
  120. package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.js +5 -4
  121. package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.js.map +1 -1
  122. package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.d.ts +1 -1
  123. package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.d.ts.map +1 -1
  124. package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.js +6 -3
  125. package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.js.map +1 -1
  126. package/dist/components/form/expressions/builder/index.d.ts +24 -2
  127. package/dist/components/form/expressions/builder/index.d.ts.map +1 -1
  128. package/dist/components/form/expressions/builder/index.js +121 -77
  129. package/dist/components/form/expressions/builder/index.js.map +1 -1
  130. package/dist/components/form/expressions/builder/item.d.ts +6 -2
  131. package/dist/components/form/expressions/builder/item.d.ts.map +1 -1
  132. package/dist/components/form/expressions/builder/item.js +19 -5
  133. package/dist/components/form/expressions/builder/item.js.map +1 -1
  134. package/dist/components/form/expressions/builder/renderTemplate.js +1 -1
  135. package/dist/components/form/expressions/builder/renderTemplate.js.map +1 -1
  136. package/dist/components/form/expressions/expressionOperands.d.ts +16 -0
  137. package/dist/components/form/expressions/expressionOperands.d.ts.map +1 -0
  138. package/dist/components/form/expressions/expressionOperands.js +97 -0
  139. package/dist/components/form/expressions/expressionOperands.js.map +1 -0
  140. package/dist/components/form/expressions/mockExpressions.d.ts.map +1 -1
  141. package/dist/components/form/expressions/mockExpressions.js +22 -5
  142. package/dist/components/form/expressions/mockExpressions.js.map +1 -1
  143. package/dist/components/form/expressions/renderExpressionToText.d.ts +2 -0
  144. package/dist/components/form/expressions/renderExpressionToText.d.ts.map +1 -1
  145. package/dist/components/form/expressions/renderExpressionToText.js +35 -9
  146. package/dist/components/form/expressions/renderExpressionToText.js.map +1 -1
  147. package/dist/components/form/expressions/textOfExpression.d.ts +18 -0
  148. package/dist/components/form/expressions/textOfExpression.d.ts.map +1 -0
  149. package/dist/components/form/expressions/textOfExpression.js +37 -0
  150. package/dist/components/form/expressions/textOfExpression.js.map +1 -0
  151. package/dist/components/form/expressions/useExpressionType.d.ts +26 -0
  152. package/dist/components/form/expressions/useExpressionType.d.ts.map +1 -0
  153. package/dist/components/form/expressions/useExpressionType.js +181 -0
  154. package/dist/components/form/expressions/useExpressionType.js.map +1 -0
  155. package/dist/components/form/expressions/useRenderExpression.d.ts.map +1 -1
  156. package/dist/components/form/expressions/useRenderExpression.js +7 -7
  157. package/dist/components/form/expressions/useRenderExpression.js.map +1 -1
  158. package/dist/components/form/fields/Field.d.ts.map +1 -1
  159. package/dist/components/form/fields/Field.js +20 -7
  160. package/dist/components/form/fields/Field.js.map +1 -1
  161. package/dist/components/form/fields/allowed-values/AllowedValues.d.ts.map +1 -1
  162. package/dist/components/form/fields/allowed-values/AllowedValues.js +17 -4
  163. package/dist/components/form/fields/allowed-values/AllowedValues.js.map +1 -1
  164. package/dist/components/form/fields/array/ArrayAuto.d.ts.map +1 -1
  165. package/dist/components/form/fields/array/ArrayAuto.js +24 -0
  166. package/dist/components/form/fields/array/ArrayAuto.js.map +1 -1
  167. package/dist/components/form/fields/array/ArrayAutoField.d.ts.map +1 -1
  168. package/dist/components/form/fields/array/ArrayAutoField.js +36 -13
  169. package/dist/components/form/fields/array/ArrayAutoField.js.map +1 -1
  170. package/dist/components/form/fields/auto/AutoFormField.d.ts +20 -1
  171. package/dist/components/form/fields/auto/AutoFormField.d.ts.map +1 -1
  172. package/dist/components/form/fields/auto/AutoFormField.js +81 -36
  173. package/dist/components/form/fields/auto/AutoFormField.js.map +1 -1
  174. package/dist/components/form/fields/auto/hostEditorValue.d.ts +30 -0
  175. package/dist/components/form/fields/auto/hostEditorValue.d.ts.map +1 -0
  176. package/dist/components/form/fields/auto/hostEditorValue.js +53 -0
  177. package/dist/components/form/fields/auto/hostEditorValue.js.map +1 -0
  178. package/dist/components/form/fields/binary/Binary.d.ts.map +1 -1
  179. package/dist/components/form/fields/binary/Binary.js +23 -3
  180. package/dist/components/form/fields/binary/Binary.js.map +1 -1
  181. package/dist/components/form/fields/boolean/Boolean.d.ts +5 -0
  182. package/dist/components/form/fields/boolean/Boolean.d.ts.map +1 -1
  183. package/dist/components/form/fields/boolean/Boolean.js +9 -1
  184. package/dist/components/form/fields/boolean/Boolean.js.map +1 -1
  185. package/dist/components/form/fields/color/Color.d.ts +103 -16
  186. package/dist/components/form/fields/color/Color.d.ts.map +1 -1
  187. package/dist/components/form/fields/color/Color.js +611 -16
  188. package/dist/components/form/fields/color/Color.js.map +1 -1
  189. package/dist/components/form/fields/emittedValues.d.ts +34 -3
  190. package/dist/components/form/fields/emittedValues.d.ts.map +1 -1
  191. package/dist/components/form/fields/emittedValues.js +24 -1
  192. package/dist/components/form/fields/emittedValues.js.map +1 -1
  193. package/dist/components/form/fields/file/File.d.ts +1 -1
  194. package/dist/components/form/fields/file/File.d.ts.map +1 -1
  195. package/dist/components/form/fields/file/File.js +4 -2
  196. package/dist/components/form/fields/file/File.js.map +1 -1
  197. package/dist/components/form/fields/long-string/LongString.d.ts.map +1 -1
  198. package/dist/components/form/fields/long-string/LongString.js +17 -3
  199. package/dist/components/form/fields/long-string/LongString.js.map +1 -1
  200. package/dist/components/form/fields/markdown/MarkdownView.js +1 -1
  201. package/dist/components/form/fields/multi-select/MultiSelectFormField.d.ts.map +1 -1
  202. package/dist/components/form/fields/multi-select/MultiSelectFormField.js +4 -1
  203. package/dist/components/form/fields/multi-select/MultiSelectFormField.js.map +1 -1
  204. package/dist/components/form/fields/number/Number.d.ts +6 -0
  205. package/dist/components/form/fields/number/Number.d.ts.map +1 -1
  206. package/dist/components/form/fields/number/Number.js +41 -6
  207. package/dist/components/form/fields/number/Number.js.map +1 -1
  208. package/dist/components/form/fields/object/Object.d.ts +1 -1
  209. package/dist/components/form/fields/object/Object.d.ts.map +1 -1
  210. package/dist/components/form/fields/object/Object.js +4 -2
  211. package/dist/components/form/fields/object/Object.js.map +1 -1
  212. package/dist/components/form/fields/pendingEdit.d.ts +52 -0
  213. package/dist/components/form/fields/pendingEdit.d.ts.map +1 -0
  214. package/dist/components/form/fields/pendingEdit.js +79 -0
  215. package/dist/components/form/fields/pendingEdit.js.map +1 -0
  216. package/dist/components/form/fields/rich-text/RichText.d.ts +8 -1
  217. package/dist/components/form/fields/rich-text/RichText.d.ts.map +1 -1
  218. package/dist/components/form/fields/rich-text/RichText.js +190 -81
  219. package/dist/components/form/fields/rich-text/RichText.js.map +1 -1
  220. package/dist/components/form/fields/rich-text/useTemplateTags.d.ts +18 -0
  221. package/dist/components/form/fields/rich-text/useTemplateTags.d.ts.map +1 -0
  222. package/dist/components/form/fields/rich-text/useTemplateTags.js +49 -0
  223. package/dist/components/form/fields/rich-text/useTemplateTags.js.map +1 -0
  224. package/dist/components/form/fields/schema-definition/CatalogLeafForm.d.ts.map +1 -1
  225. package/dist/components/form/fields/schema-definition/CatalogLeafForm.js +4 -1
  226. package/dist/components/form/fields/schema-definition/CatalogLeafForm.js.map +1 -1
  227. package/dist/components/form/fields/schema-definition/CatalogNodeEditor.d.ts.map +1 -1
  228. package/dist/components/form/fields/schema-definition/CatalogNodeEditor.js +20 -5
  229. package/dist/components/form/fields/schema-definition/CatalogNodeEditor.js.map +1 -1
  230. package/dist/components/form/fields/schema-definition/TableEditor.d.ts.map +1 -1
  231. package/dist/components/form/fields/schema-definition/TableEditor.js +10 -2
  232. package/dist/components/form/fields/schema-definition/TableEditor.js.map +1 -1
  233. package/dist/components/form/fields/schema-definition/index.d.ts.map +1 -1
  234. package/dist/components/form/fields/schema-definition/index.js +8 -4
  235. package/dist/components/form/fields/schema-definition/index.js.map +1 -1
  236. package/dist/components/form/fields/select/Select.d.ts +2 -0
  237. package/dist/components/form/fields/select/Select.d.ts.map +1 -1
  238. package/dist/components/form/fields/select/Select.js +19 -10
  239. package/dist/components/form/fields/select/Select.js.map +1 -1
  240. package/dist/components/form/fields/select/SelectCollection.d.ts.map +1 -1
  241. package/dist/components/form/fields/select/SelectCollection.js +8 -2
  242. package/dist/components/form/fields/select/SelectCollection.js.map +1 -1
  243. package/dist/components/form/fields/select/unavailableRow.d.ts +23 -0
  244. package/dist/components/form/fields/select/unavailableRow.d.ts.map +1 -0
  245. package/dist/components/form/fields/select/unavailableRow.js +55 -0
  246. package/dist/components/form/fields/select/unavailableRow.js.map +1 -0
  247. package/dist/components/form/fields/template/ReadOnlyTemplateTag.d.ts +5 -5
  248. package/dist/components/form/fields/template/ReadOnlyTemplateTag.d.ts.map +1 -1
  249. package/dist/components/form/fields/template/ReadOnlyTemplateTag.js +11 -4
  250. package/dist/components/form/fields/template/ReadOnlyTemplateTag.js.map +1 -1
  251. package/dist/components/form/fields/template/TemplateBrowser.d.ts +22 -0
  252. package/dist/components/form/fields/template/TemplateBrowser.d.ts.map +1 -0
  253. package/dist/components/form/fields/template/TemplateBrowser.js +54 -0
  254. package/dist/components/form/fields/template/TemplateBrowser.js.map +1 -0
  255. package/dist/components/form/fields/template/TemplateField.d.ts +83 -1
  256. package/dist/components/form/fields/template/TemplateField.d.ts.map +1 -1
  257. package/dist/components/form/fields/template/TemplateField.js +535 -85
  258. package/dist/components/form/fields/template/TemplateField.js.map +1 -1
  259. package/dist/components/form/fields/template/TemplateText.d.ts +0 -17
  260. package/dist/components/form/fields/template/TemplateText.d.ts.map +1 -1
  261. package/dist/components/form/fields/template/TemplateText.js +8 -4
  262. package/dist/components/form/fields/template/TemplateText.js.map +1 -1
  263. package/dist/components/form/fields/template/writtenAsText.d.ts +55 -0
  264. package/dist/components/form/fields/template/writtenAsText.d.ts.map +1 -0
  265. package/dist/components/form/fields/template/writtenAsText.js +188 -0
  266. package/dist/components/form/fields/template/writtenAsText.js.map +1 -0
  267. package/dist/components/form/index.d.ts +10 -0
  268. package/dist/components/form/index.d.ts.map +1 -1
  269. package/dist/components/form/index.js +23 -1
  270. package/dist/components/form/index.js.map +1 -1
  271. package/dist/components/imageLightbox/ImageLightbox.d.ts.map +1 -1
  272. package/dist/components/imageLightbox/ImageLightbox.js +19 -7
  273. package/dist/components/imageLightbox/ImageLightbox.js.map +1 -1
  274. package/dist/components/log/Log.d.ts.map +1 -1
  275. package/dist/components/log/Log.js +15 -7
  276. package/dist/components/log/Log.js.map +1 -1
  277. package/dist/components/menu/Menu.d.ts.map +1 -1
  278. package/dist/components/menu/Menu.js +19 -10
  279. package/dist/components/menu/Menu.js.map +1 -1
  280. package/dist/components/smartEditor/CompletionMenu.d.ts +43 -0
  281. package/dist/components/smartEditor/CompletionMenu.d.ts.map +1 -0
  282. package/dist/components/smartEditor/CompletionMenu.js +196 -0
  283. package/dist/components/smartEditor/CompletionMenu.js.map +1 -0
  284. package/dist/components/smartEditor/MarkdownDoc.d.ts +1 -1
  285. package/dist/components/smartEditor/MarkdownDoc.js +1 -1
  286. package/dist/components/smartEditor/MarkdownDoc.js.map +1 -1
  287. package/dist/components/smartEditor/SmartEditor.d.ts.map +1 -1
  288. package/dist/components/smartEditor/SmartEditor.js +51 -136
  289. package/dist/components/smartEditor/SmartEditor.js.map +1 -1
  290. package/dist/components/smartEditor/completionStyle.d.ts +27 -0
  291. package/dist/components/smartEditor/completionStyle.d.ts.map +1 -0
  292. package/dist/components/smartEditor/completionStyle.js +66 -0
  293. package/dist/components/smartEditor/completionStyle.js.map +1 -0
  294. package/dist/components/smartEditor/index.d.ts +5 -1
  295. package/dist/components/smartEditor/index.d.ts.map +1 -1
  296. package/dist/components/smartEditor/index.js +19 -1
  297. package/dist/components/smartEditor/index.js.map +1 -1
  298. package/dist/components/smartEditor/templateCompletions.d.ts +18 -0
  299. package/dist/components/smartEditor/templateCompletions.d.ts.map +1 -0
  300. package/dist/components/smartEditor/templateCompletions.js +94 -0
  301. package/dist/components/smartEditor/templateCompletions.js.map +1 -0
  302. package/dist/components/smartEditor/types.d.ts +12 -1
  303. package/dist/components/smartEditor/types.d.ts.map +1 -1
  304. package/dist/components/smartEditor/useLspAutocomplete.d.ts +32 -0
  305. package/dist/components/smartEditor/useLspAutocomplete.d.ts.map +1 -1
  306. package/dist/components/smartEditor/useLspAutocomplete.js +228 -118
  307. package/dist/components/smartEditor/useLspAutocomplete.js.map +1 -1
  308. package/dist/components/smartEditor/useLspHover.d.ts +22 -7
  309. package/dist/components/smartEditor/useLspHover.d.ts.map +1 -1
  310. package/dist/components/smartEditor/useLspHover.js +86 -17
  311. package/dist/components/smartEditor/useLspHover.js.map +1 -1
  312. package/dist/components/smartEditor/useLspSemanticTokens.js +1 -1
  313. package/dist/components/smartEditor/useLspSemanticTokens.js.map +1 -1
  314. package/dist/components/smartEditor/useLspSession.d.ts +6 -0
  315. package/dist/components/smartEditor/useLspSession.d.ts.map +1 -1
  316. package/dist/components/smartEditor/useLspSession.js +7 -6
  317. package/dist/components/smartEditor/useLspSession.js.map +1 -1
  318. package/dist/components/supportTicket/AttachmentChips.d.ts.map +1 -1
  319. package/dist/components/supportTicket/AttachmentChips.js +15 -5
  320. package/dist/components/supportTicket/AttachmentChips.js.map +1 -1
  321. package/dist/components/supportTicket/ReferencePicker.d.ts +9 -2
  322. package/dist/components/supportTicket/ReferencePicker.d.ts.map +1 -1
  323. package/dist/components/supportTicket/ReferencePicker.js +27 -6
  324. package/dist/components/supportTicket/ReferencePicker.js.map +1 -1
  325. package/dist/components/supportTicket/TicketHeader.d.ts +3 -4
  326. package/dist/components/supportTicket/TicketHeader.d.ts.map +1 -1
  327. package/dist/components/supportTicket/TicketHeader.js +20 -2
  328. package/dist/components/supportTicket/TicketHeader.js.map +1 -1
  329. package/dist/components/supportTicket/TicketMetaTags.d.ts +1 -1
  330. package/dist/components/ticketReferences/TicketReferences.d.ts.map +1 -1
  331. package/dist/components/ticketReferences/TicketReferences.js +9 -4
  332. package/dist/components/ticketReferences/TicketReferences.js.map +1 -1
  333. package/dist/components/ticketThread/TicketThread.d.ts.map +1 -1
  334. package/dist/components/ticketThread/TicketThread.js +36 -11
  335. package/dist/components/ticketThread/TicketThread.js.map +1 -1
  336. package/dist/helpers/descriptionTooltip.d.ts +43 -0
  337. package/dist/helpers/descriptionTooltip.d.ts.map +1 -0
  338. package/dist/helpers/descriptionTooltip.js +70 -0
  339. package/dist/helpers/descriptionTooltip.js.map +1 -0
  340. package/dist/helpers/domProps.d.ts +5 -0
  341. package/dist/helpers/domProps.d.ts.map +1 -0
  342. package/dist/helpers/domProps.js +47 -0
  343. package/dist/helpers/domProps.js.map +1 -0
  344. package/dist/helpers/expressions.d.ts +107 -2
  345. package/dist/helpers/expressions.d.ts.map +1 -1
  346. package/dist/helpers/expressions.js +223 -8
  347. package/dist/helpers/expressions.js.map +1 -1
  348. package/dist/helpers/hoveringPointer.d.ts +26 -0
  349. package/dist/helpers/hoveringPointer.d.ts.map +1 -0
  350. package/dist/helpers/hoveringPointer.js +29 -0
  351. package/dist/helpers/hoveringPointer.js.map +1 -0
  352. package/dist/helpers/markdownText.d.ts +14 -0
  353. package/dist/helpers/markdownText.d.ts.map +1 -0
  354. package/dist/helpers/markdownText.js +160 -0
  355. package/dist/helpers/markdownText.js.map +1 -0
  356. package/dist/helpers/qorusTypeCatalogue.d.ts +53 -0
  357. package/dist/helpers/qorusTypeCatalogue.d.ts.map +1 -0
  358. package/dist/helpers/qorusTypeCatalogue.js +262 -0
  359. package/dist/helpers/qorusTypeCatalogue.js.map +1 -0
  360. package/dist/helpers/readableColors.d.ts +36 -0
  361. package/dist/helpers/readableColors.d.ts.map +1 -0
  362. package/dist/helpers/readableColors.js +116 -0
  363. package/dist/helpers/readableColors.js.map +1 -0
  364. package/dist/helpers/templateItems.d.ts +2 -2
  365. package/dist/helpers/templateItems.d.ts.map +1 -1
  366. package/dist/helpers/templateItems.js +6 -4
  367. package/dist/helpers/templateItems.js.map +1 -1
  368. package/dist/helpers/templates.d.ts +26 -1
  369. package/dist/helpers/templates.d.ts.map +1 -1
  370. package/dist/helpers/templates.js +41 -6
  371. package/dist/helpers/templates.js.map +1 -1
  372. package/dist/helpers/validations.d.ts +9 -0
  373. package/dist/helpers/validations.d.ts.map +1 -1
  374. package/dist/helpers/validations.js +139 -33
  375. package/dist/helpers/validations.js.map +1 -1
  376. package/dist/hooks/useQorusTypes.d.ts +7 -15
  377. package/dist/hooks/useQorusTypes.d.ts.map +1 -1
  378. package/dist/hooks/useQorusTypes.js +25 -166
  379. package/dist/hooks/useQorusTypes.js.map +1 -1
  380. package/dist/hooks/useReadableIntentShade.d.ts +9 -0
  381. package/dist/hooks/useReadableIntentShade.d.ts.map +1 -0
  382. package/dist/hooks/useReadableIntentShade.js +23 -0
  383. package/dist/hooks/useReadableIntentShade.js.map +1 -0
  384. package/dist/hooks/useReadableOpacity.d.ts +6 -0
  385. package/dist/hooks/useReadableOpacity.d.ts.map +1 -0
  386. package/dist/hooks/useReadableOpacity.js +17 -0
  387. package/dist/hooks/useReadableOpacity.js.map +1 -0
  388. package/dist/index.d.ts +1 -0
  389. package/dist/index.d.ts.map +1 -1
  390. package/dist/index.js +1 -0
  391. package/dist/index.js.map +1 -1
  392. package/dist/tracking/ui/ExperimentCard.d.ts +1 -1
  393. package/dist/tracking/ui/ExperimentCard.d.ts.map +1 -1
  394. package/dist/tracking/ui/ExperimentCard.js +26 -10
  395. package/dist/tracking/ui/ExperimentCard.js.map +1 -1
  396. package/dist/tracking/ui/card.d.ts +2 -2
  397. package/dist/tracking/ui/card.d.ts.map +1 -1
  398. package/dist/tracking/ui/card.js +2 -2
  399. package/dist/tracking/ui/card.js.map +1 -1
  400. package/dist/tracking/ui/readable.d.ts +14 -0
  401. package/dist/tracking/ui/readable.d.ts.map +1 -0
  402. package/dist/tracking/ui/readable.js +60 -0
  403. package/dist/tracking/ui/readable.js.map +1 -0
  404. package/package.json +14 -5
  405. package/.claude/CLAUDE.md +0 -317
  406. package/.tasks/EXPORT_EXPRESSION_BUILDER.md +0 -38
  407. package/.tasks/EXPRESSION_BUILDER_REPORT.md +0 -149
  408. package/.tasks/EXPRESSION_FIELD_SEAMS.md +0 -66
  409. package/.tasks/FIELD_STACK_REPORT.md +0 -234
  410. package/.tasks/FORM_ENGINE_COMPACT_READ_FIRST.md +0 -558
  411. package/.tasks/FORM_ENGINE_EXPRESSIONS.md +0 -197
  412. package/.tasks/FORM_ENGINE_OPTIONS_SYNC.md +0 -95
  413. package/.tasks/FORM_FIELD_EXTRAS.md +0 -72
  414. package/.tasks/INDEX.md +0 -111
  415. package/.tasks/LSP_SHARED_CONNECTION.md +0 -75
  416. package/.tasks/QONSOLE_ASSIST_FEATURES.md +0 -306
  417. package/.tasks/RENDER_EXPRESSION_LSP.md +0 -159
  418. package/.tasks/REQRAFT_AUTO_FIELD.md +0 -176
  419. package/.tasks/SCHEMA_DEFINITION_FIELD.md +0 -250
  420. package/.tasks/SMART_EDITOR_CONTEXT_AND_POLISH.md +0 -340
  421. package/.tasks/SMART_EDITOR_LSP_FEATURES.md +0 -299
  422. package/.tasks/SMART_EDITOR_REVIEW_FOLLOWUPS.md +0 -280
  423. package/.tasks/SMART_EDITOR_UX_POLISH.md +0 -383
  424. package/.tasks/SMART_EDITOR_VISUAL_POLISH.md +0 -246
  425. package/.tasks/STORY_NETWORK_ISOLATION.md +0 -98
  426. package/.tasks/TEMPLATE_TOKEN_GRAMMAR.md +0 -72
  427. package/CODE_OF_CONDUCT.md +0 -105
  428. package/CONTRIBUTING.MD +0 -78
  429. package/SECURITY.md +0 -3
  430. package/chromatic.config.json +0 -5
  431. package/design/COMPACT_ENGINE_REDESIGN.md +0 -156
  432. package/design/COMPACT_INFO_DISPLAY.md +0 -87
  433. package/design/COMPACT_PARITY.md +0 -85
  434. package/design/EXPRESSION_BUILDER_REPORT_STRATEGY.md +0 -92
  435. package/design/FORM_ENGINE_COMPACT.md +0 -300
  436. package/design/FORM_ENGINE_COMPACT_UX_PLAN.md +0 -353
  437. package/design/FORM_ENGINE_EXPRESSIONS.md +0 -257
  438. package/design/FORM_ENGINE_FIELD_MIGRATION.md +0 -419
  439. package/design/IDE_INTEGRATION.md +0 -64
  440. package/design/RENDER_EXPRESSION_TRANSPORT.md +0 -156
  441. package/design/SELECT_DIALOG_FLOOR.md +0 -86
  442. package/design/SMART_EDITOR_UX.md +0 -438
  443. package/design/TRACKING.md +0 -290
  444. package/design/UNAVAILABLE_ALLOWED_VALUES.md +0 -226
  445. package/src/components/Description/index.tsx +0 -254
  446. package/src/components/Description/markdownRendererContext.tsx +0 -29
  447. package/src/components/FocusedEditing/index.tsx +0 -50
  448. package/src/components/codeSize/index.tsx +0 -79
  449. package/src/components/composer/Composer.stories.tsx +0 -238
  450. package/src/components/composer/Composer.tsx +0 -554
  451. package/src/components/composer/helpers.ts +0 -74
  452. package/src/components/composer/index.ts +0 -2
  453. package/src/components/dpqlEditor/DpqlEditor.stories.tsx +0 -1183
  454. package/src/components/dpqlEditor/DpqlEditor.tsx +0 -219
  455. package/src/components/dpqlEditor/dpqlHelpers.ts +0 -287
  456. package/src/components/dpqlEditor/dpqlInserter.ts +0 -121
  457. package/src/components/dpqlEditor/dpqlProbe.ts +0 -165
  458. package/src/components/dpqlEditor/dpqlTags.ts +0 -114
  459. package/src/components/dpqlEditor/index.ts +0 -41
  460. package/src/components/dpqlEditor/types.ts +0 -203
  461. package/src/components/dpqlEditor/useDpqlProbe.ts +0 -33
  462. package/src/components/dpqlEditor/useDpqlSession.ts +0 -411
  463. package/src/components/form/engine/CompactRow.tsx +0 -2620
  464. package/src/components/form/engine/CompactToolbar.tsx +0 -330
  465. package/src/components/form/engine/FormEngine.stories.tsx +0 -9920
  466. package/src/components/form/engine/FormEngine.tsx +0 -4569
  467. package/src/components/form/engine/FormEngineRemote.stories.tsx +0 -679
  468. package/src/components/form/engine/FormEngineStickyHeaders.stories.tsx +0 -331
  469. package/src/components/form/engine/FormFieldsSkeleton.tsx +0 -82
  470. package/src/components/form/engine/OptionFieldMessages.tsx +0 -477
  471. package/src/components/form/engine/OptionsHelpDialog.tsx +0 -29
  472. package/src/components/form/engine/__fixtures__/basicFormOptions.ts +0 -309
  473. package/src/components/form/engine/__fixtures__/fieldChromeOptions.ts +0 -45
  474. package/src/components/form/engine/_structuredData/SchemaDataView.stories.tsx +0 -233
  475. package/src/components/form/engine/_structuredData/SchemaDataView.tsx +0 -742
  476. package/src/components/form/engine/_structuredData/StructuredDataView.stories.tsx +0 -85
  477. package/src/components/form/engine/_structuredData/StructuredDataView.tsx +0 -75
  478. package/src/components/form/engine/_structuredData/structuredData.ts +0 -145
  479. package/src/components/form/engine/compactRowContext.ts +0 -148
  480. package/src/components/form/engine/compactRowStyles.ts +0 -898
  481. package/src/components/form/engine/compactToolbarContext.ts +0 -69
  482. package/src/components/form/engine/optionActions.ts +0 -128
  483. package/src/components/form/engine/optionsContext.ts +0 -24
  484. package/src/components/form/engine/readFirst.ts +0 -1077
  485. package/src/components/form/engine/rendererTypes.ts +0 -107
  486. package/src/components/form/engine/revealRow.ts +0 -123
  487. package/src/components/form/engine/rowFocus.ts +0 -101
  488. package/src/components/form/engine/rowMenuContext.ts +0 -159
  489. package/src/components/form/engine/rowOpenPicker.ts +0 -27
  490. package/src/components/form/engine/typeChoices.ts +0 -63
  491. package/src/components/form/engine/variants/FormEngineVariants.stories.tsx +0 -159
  492. package/src/components/form/engine/variants/VariantCalmTable.tsx +0 -244
  493. package/src/components/form/engine/variants/VariantCards.tsx +0 -212
  494. package/src/components/form/engine/variants/VariantFocus.tsx +0 -382
  495. package/src/components/form/engine/variants/VariantMinimal.tsx +0 -170
  496. package/src/components/form/engine/variants/focusDemo.ts +0 -145
  497. package/src/components/form/engine/variants/variantModel.ts +0 -223
  498. package/src/components/form/engine/variants/variantParts.tsx +0 -313
  499. package/src/components/form/expressions/DpqlRendering.tsx +0 -85
  500. package/src/components/form/expressions/ExpressionField.stories.tsx +0 -1395
  501. package/src/components/form/expressions/ExpressionField.tsx +0 -503
  502. package/src/components/form/expressions/argumentPresence.ts +0 -213
  503. package/src/components/form/expressions/builder/ExpressionBuilder.stories.tsx +0 -1683
  504. package/src/components/form/expressions/builder/argumentDetail.tsx +0 -17
  505. package/src/components/form/expressions/builder/argumentLabel.tsx +0 -146
  506. package/src/components/form/expressions/builder/argumentSlot.tsx +0 -101
  507. package/src/components/form/expressions/builder/argumentWrapper.tsx +0 -243
  508. package/src/components/form/expressions/builder/confirmMismatchedTypesModal.tsx +0 -120
  509. package/src/components/form/expressions/builder/confirmUnsupportedTypeModal.tsx +0 -69
  510. package/src/components/form/expressions/builder/index.tsx +0 -1545
  511. package/src/components/form/expressions/builder/item.tsx +0 -89
  512. package/src/components/form/expressions/builder/moveToPositionStrip.tsx +0 -156
  513. package/src/components/form/expressions/builder/renderTemplate.tsx +0 -42
  514. package/src/components/form/expressions/dpqlMockLanguage.ts +0 -566
  515. package/src/components/form/expressions/dpqlMockLsp.ts +0 -126
  516. package/src/components/form/expressions/mockExpressions.ts +0 -317
  517. package/src/components/form/expressions/renderExpressionToText.ts +0 -137
  518. package/src/components/form/expressions/types.ts +0 -110
  519. package/src/components/form/expressions/useExpressions.ts +0 -101
  520. package/src/components/form/expressions/useRenderExpression.ts +0 -165
  521. package/src/components/form/fields/Field.stories.tsx +0 -143
  522. package/src/components/form/fields/Field.tsx +0 -732
  523. package/src/components/form/fields/allowed-values/AllowedValues.tsx +0 -297
  524. package/src/components/form/fields/array/ArrayAuto.tsx +0 -237
  525. package/src/components/form/fields/array/ArrayAutoField.stories.tsx +0 -475
  526. package/src/components/form/fields/array/ArrayAutoField.tsx +0 -367
  527. package/src/components/form/fields/auto/AutoFormField.stories.tsx +0 -825
  528. package/src/components/form/fields/auto/AutoFormField.tsx +0 -1164
  529. package/src/components/form/fields/binary/Binary.stories.tsx +0 -122
  530. package/src/components/form/fields/binary/Binary.tsx +0 -91
  531. package/src/components/form/fields/boolean/Boolean.stories.tsx +0 -125
  532. package/src/components/form/fields/boolean/Boolean.tsx +0 -34
  533. package/src/components/form/fields/byte-size/ByteSize.stories.tsx +0 -87
  534. package/src/components/form/fields/byte-size/ByteSize.tsx +0 -58
  535. package/src/components/form/fields/color/Color.stories.tsx +0 -99
  536. package/src/components/form/fields/color/Color.tsx +0 -46
  537. package/src/components/form/fields/cron/Cron.stories.tsx +0 -68
  538. package/src/components/form/fields/cron/Cron.tsx +0 -80
  539. package/src/components/form/fields/date/Date.stories.tsx +0 -77
  540. package/src/components/form/fields/date/Date.tsx +0 -55
  541. package/src/components/form/fields/emittedValues.ts +0 -70
  542. package/src/components/form/fields/file/File.stories.tsx +0 -161
  543. package/src/components/form/fields/file/File.tsx +0 -227
  544. package/src/components/form/fields/long-string/LongString.stories.tsx +0 -120
  545. package/src/components/form/fields/long-string/LongString.tsx +0 -130
  546. package/src/components/form/fields/markdown/Markdown.stories.tsx +0 -76
  547. package/src/components/form/fields/markdown/Markdown.tsx +0 -81
  548. package/src/components/form/fields/markdown/MarkdownView.tsx +0 -222
  549. package/src/components/form/fields/multi-select/MultiSelectFormField.tsx +0 -139
  550. package/src/components/form/fields/number/Number.stories.tsx +0 -159
  551. package/src/components/form/fields/number/Number.tsx +0 -160
  552. package/src/components/form/fields/object/Object.stories.tsx +0 -398
  553. package/src/components/form/fields/object/Object.tsx +0 -255
  554. package/src/components/form/fields/radio-group/RadioGroup.stories.tsx +0 -95
  555. package/src/components/form/fields/radio-group/RadioGroup.tsx +0 -46
  556. package/src/components/form/fields/radio-group/images/java-96x128.png +0 -0
  557. package/src/components/form/fields/radio-group/images/python-129x128.png +0 -0
  558. package/src/components/form/fields/radio-group/images/qore-106x128.png +0 -0
  559. package/src/components/form/fields/rich-text/RichText.stories.tsx +0 -260
  560. package/src/components/form/fields/rich-text/RichText.tsx +0 -537
  561. package/src/components/form/fields/schema-definition/CatalogLeafForm.tsx +0 -242
  562. package/src/components/form/fields/schema-definition/CatalogNodeEditor.tsx +0 -758
  563. package/src/components/form/fields/schema-definition/Hint.tsx +0 -22
  564. package/src/components/form/fields/schema-definition/InlineValidationBanner.tsx +0 -138
  565. package/src/components/form/fields/schema-definition/Loader.tsx +0 -20
  566. package/src/components/form/fields/schema-definition/MigrationsTab.tsx +0 -187
  567. package/src/components/form/fields/schema-definition/SchemaDefinitionField.stories.tsx +0 -286
  568. package/src/components/form/fields/schema-definition/TableEditor.tsx +0 -155
  569. package/src/components/form/fields/schema-definition/TablesTab.tsx +0 -138
  570. package/src/components/form/fields/schema-definition/catalog.ts +0 -237
  571. package/src/components/form/fields/schema-definition/helpers.ts +0 -90
  572. package/src/components/form/fields/schema-definition/index.tsx +0 -418
  573. package/src/components/form/fields/schema-definition/mockCatalog.ts +0 -325
  574. package/src/components/form/fields/schema-definition/mockDefinition.ts +0 -111
  575. package/src/components/form/fields/schema-definition/referenceSuggestions.tsx +0 -152
  576. package/src/components/form/fields/schema-definition/starterTemplate.ts +0 -68
  577. package/src/components/form/fields/schema-definition/types.ts +0 -185
  578. package/src/components/form/fields/schema-definition/useSchemaOptionCatalog.ts +0 -49
  579. package/src/components/form/fields/select/Select.stories.tsx +0 -872
  580. package/src/components/form/fields/select/Select.tsx +0 -624
  581. package/src/components/form/fields/select/SelectCollection.tsx +0 -594
  582. package/src/components/form/fields/string/String.stories.tsx +0 -86
  583. package/src/components/form/fields/string/String.tsx +0 -43
  584. package/src/components/form/fields/template/ExampleValueModal.stories.tsx +0 -114
  585. package/src/components/form/fields/template/ExampleValueModal.tsx +0 -99
  586. package/src/components/form/fields/template/ReadOnlyTemplateTag.tsx +0 -47
  587. package/src/components/form/fields/template/TemplateField.stories.tsx +0 -1121
  588. package/src/components/form/fields/template/TemplateField.tsx +0 -1717
  589. package/src/components/form/fields/template/TemplateText.tsx +0 -115
  590. package/src/components/form/fields/template/__fixtures__/longExampleValue.ts +0 -7
  591. package/src/components/form/fields/template/__fixtures__/multiLevelTemplates.json +0 -147
  592. package/src/components/form/fields/template/__fixtures__/templates.json +0 -83
  593. package/src/components/form/fields/timeout/Timeout.stories.tsx +0 -228
  594. package/src/components/form/fields/timeout/Timeout.tsx +0 -87
  595. package/src/components/form/fields/url/Url.stories.tsx +0 -94
  596. package/src/components/form/fields/url/Url.tsx +0 -85
  597. package/src/components/form/index.tsx +0 -47
  598. package/src/components/imageLightbox/ImageLightbox.stories.tsx +0 -238
  599. package/src/components/imageLightbox/ImageLightbox.tsx +0 -236
  600. package/src/components/imageLightbox/index.ts +0 -1
  601. package/src/components/log/Log.stories.tsx +0 -333
  602. package/src/components/log/Log.tsx +0 -285
  603. package/src/components/menu/Menu.stories.tsx +0 -155
  604. package/src/components/menu/Menu.tsx +0 -312
  605. package/src/components/qonsoleSmartInput/QonsoleSmartInput.stories.tsx +0 -797
  606. package/src/components/qonsoleSmartInput/QonsoleSmartInput.tsx +0 -105
  607. package/src/components/qonsoleSmartInput/index.ts +0 -16
  608. package/src/components/qonsoleSmartInput/qonsoleInserter.ts +0 -77
  609. package/src/components/qonsoleSmartInput/types.ts +0 -133
  610. package/src/components/qonsoleSmartInput/useQonsoleSession.ts +0 -124
  611. package/src/components/searchFilterBar/SearchFilterBar.stories.tsx +0 -62
  612. package/src/components/searchFilterBar/SearchFilterBar.tsx +0 -144
  613. package/src/components/searchFilterBar/index.ts +0 -1
  614. package/src/components/smartEditor/MarkdownDoc.tsx +0 -190
  615. package/src/components/smartEditor/SmartEditor.stories.tsx +0 -475
  616. package/src/components/smartEditor/SmartEditor.tsx +0 -808
  617. package/src/components/smartEditor/__fixtures__/mockLspServer.ts +0 -205
  618. package/src/components/smartEditor/helpers.ts +0 -217
  619. package/src/components/smartEditor/index.ts +0 -35
  620. package/src/components/smartEditor/styling.ts +0 -45
  621. package/src/components/smartEditor/types.ts +0 -211
  622. package/src/components/smartEditor/useLspAutocomplete.ts +0 -758
  623. package/src/components/smartEditor/useLspDiagnosticDecorations.ts +0 -125
  624. package/src/components/smartEditor/useLspHover.ts +0 -230
  625. package/src/components/smartEditor/useLspSemanticTokens.ts +0 -298
  626. package/src/components/smartEditor/useLspSession.ts +0 -231
  627. package/src/components/smartEditor/useLspSignatureHelp.ts +0 -198
  628. package/src/components/supportTicket/AttachmentChips.stories.tsx +0 -171
  629. package/src/components/supportTicket/AttachmentChips.tsx +0 -147
  630. package/src/components/supportTicket/InterfaceReferenceTags.stories.tsx +0 -257
  631. package/src/components/supportTicket/InterfaceReferenceTags.tsx +0 -129
  632. package/src/components/supportTicket/ReferencePicker.stories.tsx +0 -584
  633. package/src/components/supportTicket/ReferencePicker.tsx +0 -563
  634. package/src/components/supportTicket/TicketConversation.stories.tsx +0 -121
  635. package/src/components/supportTicket/TicketHeader.stories.tsx +0 -183
  636. package/src/components/supportTicket/TicketHeader.tsx +0 -247
  637. package/src/components/supportTicket/TicketMetaTags.stories.tsx +0 -103
  638. package/src/components/supportTicket/TicketMetaTags.tsx +0 -85
  639. package/src/components/supportTicket/TicketReplyBox.stories.tsx +0 -354
  640. package/src/components/supportTicket/TicketReplyBox.tsx +0 -150
  641. package/src/components/supportTicket/__fixtures__/kindMarks.ts +0 -28
  642. package/src/components/supportTicket/attachmentAccess.ts +0 -97
  643. package/src/components/supportTicket/fileToAttachment.ts +0 -24
  644. package/src/components/supportTicket/index.ts +0 -10
  645. package/src/components/supportTicket/meta.ts +0 -206
  646. package/src/components/supportTicket/ticketModel.ts +0 -131
  647. package/src/components/supportTicket/useLoadedImages.ts +0 -73
  648. package/src/components/ticketReferences/TicketReferences.stories.tsx +0 -315
  649. package/src/components/ticketReferences/TicketReferences.tsx +0 -906
  650. package/src/components/ticketReferences/index.ts +0 -2
  651. package/src/components/ticketThread/TicketThread.stories.tsx +0 -829
  652. package/src/components/ticketThread/TicketThread.tsx +0 -719
  653. package/src/components/ticketThread/index.ts +0 -6
  654. package/src/contexts/FetchContext.tsx +0 -25
  655. package/src/contexts/ReqraftContext.tsx +0 -9
  656. package/src/contexts/StorageContext.tsx +0 -33
  657. package/src/global.d.ts +0 -4
  658. package/src/helpers/allowedValues.ts +0 -249
  659. package/src/helpers/choiceChip.ts +0 -227
  660. package/src/helpers/common.ts +0 -326
  661. package/src/helpers/dpqlDetection.ts +0 -209
  662. package/src/helpers/expressions.ts +0 -140
  663. package/src/helpers/optionUiTypes.ts +0 -199
  664. package/src/helpers/options.ts +0 -150
  665. package/src/helpers/providerValue.ts +0 -125
  666. package/src/helpers/scrollbar.ts +0 -32
  667. package/src/helpers/singleLineString.ts +0 -61
  668. package/src/helpers/templateItems.ts +0 -81
  669. package/src/helpers/templateText.ts +0 -350
  670. package/src/helpers/templates.ts +0 -602
  671. package/src/helpers/validations.ts +0 -2085
  672. package/src/hooks/useArgSchema.ts +0 -37
  673. package/src/hooks/useCoarsePointer.ts +0 -30
  674. package/src/hooks/useFetch/useFetch.stories.tsx +0 -379
  675. package/src/hooks/useFetch/useFetch.tsx +0 -154
  676. package/src/hooks/usePhoneViewport.ts +0 -34
  677. package/src/hooks/useQorusTypes.ts +0 -233
  678. package/src/hooks/useReqraftProperty.ts +0 -16
  679. package/src/hooks/useStorage/useStorage.stories.tsx +0 -168
  680. package/src/hooks/useStorage/useStorage.ts +0 -35
  681. package/src/hooks/useTemplates.ts +0 -123
  682. package/src/hooks/useValidation.ts +0 -9
  683. package/src/hooks/useWebSocket/useWebSocket.ts +0 -224
  684. package/src/hooks/useWebSocket/useWebsocket.stories.tsx +0 -640
  685. package/src/hooks/useWhyDidYouUpdate.ts +0 -38
  686. package/src/index.tsx +0 -86
  687. package/src/providers/FetchProvider.tsx +0 -40
  688. package/src/providers/ReqraftProvider.tsx +0 -52
  689. package/src/providers/StorageProvider.tsx +0 -131
  690. package/src/stores/currentUser/currentUser.stories.tsx +0 -100
  691. package/src/stores/currentUser/currentUser.tsx +0 -94
  692. package/src/stories/Data/fileFieldArgSchema.json +0 -86
  693. package/src/stories/Tests/utils.ts +0 -320
  694. package/src/stories/storyNetwork.ts +0 -92
  695. package/src/stories/tracking.tsx +0 -206
  696. package/src/tracking/browser/attach.ts +0 -186
  697. package/src/tracking/browser/env.ts +0 -78
  698. package/src/tracking/core/consent.ts +0 -37
  699. package/src/tracking/core/engagement.ts +0 -47
  700. package/src/tracking/core/experiments.ts +0 -258
  701. package/src/tracking/core/hash.ts +0 -26
  702. package/src/tracking/core/ids.ts +0 -25
  703. package/src/tracking/core/observable.ts +0 -23
  704. package/src/tracking/core/queue.ts +0 -131
  705. package/src/tracking/core/sections.ts +0 -166
  706. package/src/tracking/core/storage.ts +0 -69
  707. package/src/tracking/core/tracker.ts +0 -417
  708. package/src/tracking/core/types.ts +0 -162
  709. package/src/tracking/core/utm.ts +0 -23
  710. package/src/tracking/index.ts +0 -72
  711. package/src/tracking/markup.ts +0 -17
  712. package/src/tracking/react/Experiment.tsx +0 -44
  713. package/src/tracking/react/TrackingProvider.tsx +0 -56
  714. package/src/tracking/react/hooks.ts +0 -106
  715. package/src/tracking/react/index.ts +0 -13
  716. package/src/tracking/testing.ts +0 -108
  717. package/src/tracking/ui/ExperimentCard.stories.tsx +0 -296
  718. package/src/tracking/ui/ExperimentCard.tsx +0 -667
  719. package/src/tracking/ui/ExperimentsOverlay.stories.tsx +0 -155
  720. package/src/tracking/ui/ExperimentsOverlay.tsx +0 -437
  721. package/src/tracking/ui/anchor.ts +0 -180
  722. package/src/tracking/ui/card.ts +0 -464
  723. package/src/tracking/ui/client.ts +0 -117
  724. package/src/tracking/ui/index.ts +0 -77
  725. package/src/tracking/ui/types.ts +0 -110
  726. package/src/tracking/ui/useExperimentsAdmin.ts +0 -103
  727. package/src/types/Form.ts +0 -29
  728. package/src/types.ts +0 -14
  729. package/src/utils/datetime.ts +0 -10
  730. package/src/utils/fetch.ts +0 -457
  731. package/src/utils/lspClient.ts +0 -711
  732. package/src/utils/lspClient.types.ts +0 -211
  733. package/src/utils/queryUnlessCancelled.ts +0 -28
  734. package/src/utils/websocket.ts +0 -293
  735. package/vite.config.ts +0 -58
  736. package/vitest.config.ts +0 -69
@@ -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
- };