@qoretechnologies/reqraft 0.10.66-pr.145.gcb1e59d → 0.10.66

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 (913) hide show
  1. package/README.md +53 -1
  2. package/dist/components/Description/AllowedValuesHelp.d.ts +20 -0
  3. package/dist/components/Description/AllowedValuesHelp.d.ts.map +1 -0
  4. package/dist/components/Description/AllowedValuesHelp.js +86 -0
  5. package/dist/components/Description/AllowedValuesHelp.js.map +1 -0
  6. package/dist/components/Description/describedControl.d.ts +54 -0
  7. package/dist/components/Description/describedControl.d.ts.map +1 -0
  8. package/dist/components/Description/describedControl.js +81 -0
  9. package/dist/components/Description/describedControl.js.map +1 -0
  10. package/dist/components/Description/index.d.ts.map +1 -1
  11. package/dist/components/Description/index.js +3 -2
  12. package/dist/components/Description/index.js.map +1 -1
  13. package/dist/components/colorValue/colorValue.d.ts +59 -0
  14. package/dist/components/colorValue/colorValue.d.ts.map +1 -0
  15. package/dist/components/colorValue/colorValue.js +245 -0
  16. package/dist/components/colorValue/colorValue.js.map +1 -0
  17. package/dist/components/colorValue/index.d.ts +34 -0
  18. package/dist/components/colorValue/index.d.ts.map +1 -0
  19. package/dist/components/colorValue/index.js +136 -0
  20. package/dist/components/colorValue/index.js.map +1 -0
  21. package/dist/components/colorValue/labels.d.ts +12 -0
  22. package/dist/components/colorValue/labels.d.ts.map +1 -0
  23. package/dist/components/colorValue/labels.js +11 -0
  24. package/dist/components/colorValue/labels.js.map +1 -0
  25. package/dist/components/composer/Composer.d.ts +1 -1
  26. package/dist/components/composer/Composer.d.ts.map +1 -1
  27. package/dist/components/composer/Composer.js +2 -2
  28. package/dist/components/composer/Composer.js.map +1 -1
  29. package/dist/components/dpqlEditor/DpqlEditor.d.ts.map +1 -1
  30. package/dist/components/dpqlEditor/DpqlEditor.js +156 -10
  31. package/dist/components/dpqlEditor/DpqlEditor.js.map +1 -1
  32. package/dist/components/dpqlEditor/dpqlCompletions.d.ts +39 -0
  33. package/dist/components/dpqlEditor/dpqlCompletions.d.ts.map +1 -0
  34. package/dist/components/dpqlEditor/dpqlCompletions.js +294 -0
  35. package/dist/components/dpqlEditor/dpqlCompletions.js.map +1 -0
  36. package/dist/components/dpqlEditor/dpqlHelpers.d.ts +54 -5
  37. package/dist/components/dpqlEditor/dpqlHelpers.d.ts.map +1 -1
  38. package/dist/components/dpqlEditor/dpqlHelpers.js +420 -63
  39. package/dist/components/dpqlEditor/dpqlHelpers.js.map +1 -1
  40. package/dist/components/dpqlEditor/dpqlInserter.d.ts.map +1 -1
  41. package/dist/components/dpqlEditor/dpqlInserter.js +67 -29
  42. package/dist/components/dpqlEditor/dpqlInserter.js.map +1 -1
  43. package/dist/components/dpqlEditor/dpqlTags.d.ts +17 -7
  44. package/dist/components/dpqlEditor/dpqlTags.d.ts.map +1 -1
  45. package/dist/components/dpqlEditor/dpqlTags.js +44 -17
  46. package/dist/components/dpqlEditor/dpqlTags.js.map +1 -1
  47. package/dist/components/dpqlEditor/types.d.ts +94 -8
  48. package/dist/components/dpqlEditor/types.d.ts.map +1 -1
  49. package/dist/components/dpqlEditor/useDpqlSession.d.ts +7 -2
  50. package/dist/components/dpqlEditor/useDpqlSession.d.ts.map +1 -1
  51. package/dist/components/dpqlEditor/useDpqlSession.js +49 -17
  52. package/dist/components/dpqlEditor/useDpqlSession.js.map +1 -1
  53. package/dist/components/form/engine/CompactRow.d.ts.map +1 -1
  54. package/dist/components/form/engine/CompactRow.js +336 -243
  55. package/dist/components/form/engine/CompactRow.js.map +1 -1
  56. package/dist/components/form/engine/CompactToolbar.d.ts.map +1 -1
  57. package/dist/components/form/engine/CompactToolbar.js +20 -57
  58. package/dist/components/form/engine/CompactToolbar.js.map +1 -1
  59. package/dist/components/form/engine/FormEngine.d.ts +67 -59
  60. package/dist/components/form/engine/FormEngine.d.ts.map +1 -1
  61. package/dist/components/form/engine/FormEngine.js +606 -409
  62. package/dist/components/form/engine/FormEngine.js.map +1 -1
  63. package/dist/components/form/engine/HiddenFieldsNote.d.ts +28 -0
  64. package/dist/components/form/engine/HiddenFieldsNote.d.ts.map +1 -0
  65. package/dist/components/form/engine/HiddenFieldsNote.js +32 -0
  66. package/dist/components/form/engine/HiddenFieldsNote.js.map +1 -0
  67. package/dist/components/form/engine/OptionFieldMessages.d.ts +2 -18
  68. package/dist/components/form/engine/OptionFieldMessages.d.ts.map +1 -1
  69. package/dist/components/form/engine/OptionFieldMessages.js +28 -25
  70. package/dist/components/form/engine/OptionFieldMessages.js.map +1 -1
  71. package/dist/components/form/engine/OptionsHelpDialog.d.ts.map +1 -1
  72. package/dist/components/form/engine/OptionsHelpDialog.js +19 -2
  73. package/dist/components/form/engine/OptionsHelpDialog.js.map +1 -1
  74. package/dist/components/form/engine/_structuredData/SchemaDataView.d.ts +2 -2
  75. package/dist/components/form/engine/_structuredData/SchemaDataView.d.ts.map +1 -1
  76. package/dist/components/form/engine/_structuredData/SchemaDataView.js +11 -31
  77. package/dist/components/form/engine/_structuredData/SchemaDataView.js.map +1 -1
  78. package/dist/components/form/engine/compactRowContext.d.ts +30 -6
  79. package/dist/components/form/engine/compactRowContext.d.ts.map +1 -1
  80. package/dist/components/form/engine/compactRowContext.js.map +1 -1
  81. package/dist/components/form/engine/compactRowStyles.d.ts +56 -31
  82. package/dist/components/form/engine/compactRowStyles.d.ts.map +1 -1
  83. package/dist/components/form/engine/compactRowStyles.js +121 -110
  84. package/dist/components/form/engine/compactRowStyles.js.map +1 -1
  85. package/dist/components/form/engine/compactToolbarColors.d.ts +16 -0
  86. package/dist/components/form/engine/compactToolbarColors.d.ts.map +1 -0
  87. package/dist/components/form/engine/compactToolbarColors.js +21 -0
  88. package/dist/components/form/engine/compactToolbarColors.js.map +1 -0
  89. package/dist/components/form/engine/compactToolbarContext.d.ts +0 -3
  90. package/dist/components/form/engine/compactToolbarContext.d.ts.map +1 -1
  91. package/dist/components/form/engine/compactToolbarContext.js.map +1 -1
  92. package/dist/components/form/engine/inheritProps.d.ts +29 -0
  93. package/dist/components/form/engine/inheritProps.d.ts.map +1 -0
  94. package/dist/components/form/engine/inheritProps.js +43 -0
  95. package/dist/components/form/engine/inheritProps.js.map +1 -0
  96. package/dist/components/form/engine/operatorSummary.d.ts +26 -0
  97. package/dist/components/form/engine/operatorSummary.d.ts.map +1 -0
  98. package/dist/components/form/engine/operatorSummary.js +35 -0
  99. package/dist/components/form/engine/operatorSummary.js.map +1 -0
  100. package/dist/components/form/engine/readFirst.d.ts +26 -22
  101. package/dist/components/form/engine/readFirst.d.ts.map +1 -1
  102. package/dist/components/form/engine/readFirst.js +79 -115
  103. package/dist/components/form/engine/readFirst.js.map +1 -1
  104. package/dist/components/form/engine/readFirstColors.d.ts +30 -0
  105. package/dist/components/form/engine/readFirstColors.d.ts.map +1 -0
  106. package/dist/components/form/engine/readFirstColors.js +51 -0
  107. package/dist/components/form/engine/readFirstColors.js.map +1 -0
  108. package/dist/components/form/engine/rowFocus.d.ts +3 -9
  109. package/dist/components/form/engine/rowFocus.d.ts.map +1 -1
  110. package/dist/components/form/engine/rowFocus.js +30 -19
  111. package/dist/components/form/engine/rowFocus.js.map +1 -1
  112. package/dist/components/form/engine/typeChoices.d.ts +1 -1
  113. package/dist/components/form/engine/variants/VariantCalmTable.d.ts.map +1 -1
  114. package/dist/components/form/engine/variants/VariantCalmTable.js +2 -1
  115. package/dist/components/form/engine/variants/VariantCalmTable.js.map +1 -1
  116. package/dist/components/form/engine/variants/VariantCards.d.ts.map +1 -1
  117. package/dist/components/form/engine/variants/VariantCards.js +2 -1
  118. package/dist/components/form/engine/variants/VariantCards.js.map +1 -1
  119. package/dist/components/form/engine/variants/VariantFocus.js +1 -1
  120. package/dist/components/form/engine/variants/VariantFocus.js.map +1 -1
  121. package/dist/components/form/engine/variants/VariantMinimal.d.ts.map +1 -1
  122. package/dist/components/form/engine/variants/VariantMinimal.js +2 -1
  123. package/dist/components/form/engine/variants/VariantMinimal.js.map +1 -1
  124. package/dist/components/form/engine/variants/variantParts.d.ts +1 -1
  125. package/dist/components/form/engine/variants/variantParts.d.ts.map +1 -1
  126. package/dist/components/form/engine/variants/variantParts.js +25 -17
  127. package/dist/components/form/engine/variants/variantParts.js.map +1 -1
  128. package/dist/components/form/expressions/DpqlRendering.d.ts +1 -1
  129. package/dist/components/form/expressions/DpqlRendering.d.ts.map +1 -1
  130. package/dist/components/form/expressions/DpqlRendering.js +7 -6
  131. package/dist/components/form/expressions/DpqlRendering.js.map +1 -1
  132. package/dist/components/form/expressions/ExpressionField.d.ts +67 -3
  133. package/dist/components/form/expressions/ExpressionField.d.ts.map +1 -1
  134. package/dist/components/form/expressions/ExpressionField.js +536 -114
  135. package/dist/components/form/expressions/ExpressionField.js.map +1 -1
  136. package/dist/components/form/expressions/argumentPresence.d.ts +14 -0
  137. package/dist/components/form/expressions/argumentPresence.d.ts.map +1 -1
  138. package/dist/components/form/expressions/argumentPresence.js +16 -1
  139. package/dist/components/form/expressions/argumentPresence.js.map +1 -1
  140. package/dist/components/form/expressions/builder/argumentDetail.d.ts.map +1 -1
  141. package/dist/components/form/expressions/builder/argumentDetail.js +4 -1
  142. package/dist/components/form/expressions/builder/argumentDetail.js.map +1 -1
  143. package/dist/components/form/expressions/builder/argumentLabel.d.ts.map +1 -1
  144. package/dist/components/form/expressions/builder/argumentLabel.js +30 -11
  145. package/dist/components/form/expressions/builder/argumentLabel.js.map +1 -1
  146. package/dist/components/form/expressions/builder/argumentWrapper.d.ts.map +1 -1
  147. package/dist/components/form/expressions/builder/argumentWrapper.js +3 -1
  148. package/dist/components/form/expressions/builder/argumentWrapper.js.map +1 -1
  149. package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.d.ts +9 -0
  150. package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.d.ts.map +1 -1
  151. package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.js +30 -27
  152. package/dist/components/form/expressions/builder/confirmMismatchedTypesModal.js.map +1 -1
  153. package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.d.ts +1 -1
  154. package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.d.ts.map +1 -1
  155. package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.js +7 -5
  156. package/dist/components/form/expressions/builder/confirmUnsupportedTypeModal.js.map +1 -1
  157. package/dist/components/form/expressions/builder/index.d.ts +34 -2
  158. package/dist/components/form/expressions/builder/index.d.ts.map +1 -1
  159. package/dist/components/form/expressions/builder/index.js +170 -80
  160. package/dist/components/form/expressions/builder/index.js.map +1 -1
  161. package/dist/components/form/expressions/builder/item.d.ts +6 -2
  162. package/dist/components/form/expressions/builder/item.d.ts.map +1 -1
  163. package/dist/components/form/expressions/builder/item.js +19 -5
  164. package/dist/components/form/expressions/builder/item.js.map +1 -1
  165. package/dist/components/form/expressions/builder/renderTemplate.js +1 -1
  166. package/dist/components/form/expressions/builder/renderTemplate.js.map +1 -1
  167. package/dist/components/form/expressions/dpqlMockRecordPath.d.ts +11 -0
  168. package/dist/components/form/expressions/dpqlMockRecordPath.d.ts.map +1 -0
  169. package/dist/components/form/expressions/dpqlMockRecordPath.js +254 -0
  170. package/dist/components/form/expressions/dpqlMockRecordPath.js.map +1 -0
  171. package/dist/components/form/expressions/expressionOperands.d.ts +16 -0
  172. package/dist/components/form/expressions/expressionOperands.d.ts.map +1 -0
  173. package/dist/components/form/expressions/expressionOperands.js +97 -0
  174. package/dist/components/form/expressions/expressionOperands.js.map +1 -0
  175. package/dist/components/form/expressions/fieldPath.d.ts +24 -0
  176. package/dist/components/form/expressions/fieldPath.d.ts.map +1 -0
  177. package/dist/components/form/expressions/fieldPath.js +152 -0
  178. package/dist/components/form/expressions/fieldPath.js.map +1 -0
  179. package/dist/components/form/expressions/loneValue.d.ts +17 -0
  180. package/dist/components/form/expressions/loneValue.d.ts.map +1 -0
  181. package/dist/components/form/expressions/loneValue.js +33 -0
  182. package/dist/components/form/expressions/loneValue.js.map +1 -0
  183. package/dist/components/form/expressions/mockExpressions.d.ts.map +1 -1
  184. package/dist/components/form/expressions/mockExpressions.js +22 -5
  185. package/dist/components/form/expressions/mockExpressions.js.map +1 -1
  186. package/dist/components/form/expressions/renderExpressionToText.d.ts +2 -0
  187. package/dist/components/form/expressions/renderExpressionToText.d.ts.map +1 -1
  188. package/dist/components/form/expressions/renderExpressionToText.js +37 -25
  189. package/dist/components/form/expressions/renderExpressionToText.js.map +1 -1
  190. package/dist/components/form/expressions/textOfExpression.d.ts +18 -0
  191. package/dist/components/form/expressions/textOfExpression.d.ts.map +1 -0
  192. package/dist/components/form/expressions/textOfExpression.js +49 -0
  193. package/dist/components/form/expressions/textOfExpression.js.map +1 -0
  194. package/dist/components/form/expressions/types.d.ts +12 -0
  195. package/dist/components/form/expressions/types.d.ts.map +1 -1
  196. package/dist/components/form/expressions/types.js +6 -1
  197. package/dist/components/form/expressions/types.js.map +1 -1
  198. package/dist/components/form/expressions/useExpressionType.d.ts +26 -0
  199. package/dist/components/form/expressions/useExpressionType.d.ts.map +1 -0
  200. package/dist/components/form/expressions/useExpressionType.js +181 -0
  201. package/dist/components/form/expressions/useExpressionType.js.map +1 -0
  202. package/dist/components/form/expressions/useRenderExpression.d.ts.map +1 -1
  203. package/dist/components/form/expressions/useRenderExpression.js +13 -9
  204. package/dist/components/form/expressions/useRenderExpression.js.map +1 -1
  205. package/dist/components/form/expressions/wildcardExpressions.d.ts +27 -0
  206. package/dist/components/form/expressions/wildcardExpressions.d.ts.map +1 -0
  207. package/dist/components/form/expressions/wildcardExpressions.js +101 -0
  208. package/dist/components/form/expressions/wildcardExpressions.js.map +1 -0
  209. package/dist/components/form/fields/Field.d.ts.map +1 -1
  210. package/dist/components/form/fields/Field.js +39 -18
  211. package/dist/components/form/fields/Field.js.map +1 -1
  212. package/dist/components/form/fields/allowed-values/AllowedValues.d.ts +0 -7
  213. package/dist/components/form/fields/allowed-values/AllowedValues.d.ts.map +1 -1
  214. package/dist/components/form/fields/allowed-values/AllowedValues.js +46 -35
  215. package/dist/components/form/fields/allowed-values/AllowedValues.js.map +1 -1
  216. package/dist/components/form/fields/allowed-values/choicePicture.d.ts +37 -0
  217. package/dist/components/form/fields/allowed-values/choicePicture.d.ts.map +1 -0
  218. package/dist/components/form/fields/allowed-values/choicePicture.js +64 -0
  219. package/dist/components/form/fields/allowed-values/choicePicture.js.map +1 -0
  220. package/dist/components/form/fields/array/ArrayAuto.d.ts.map +1 -1
  221. package/dist/components/form/fields/array/ArrayAuto.js +24 -0
  222. package/dist/components/form/fields/array/ArrayAuto.js.map +1 -1
  223. package/dist/components/form/fields/array/ArrayAutoField.d.ts.map +1 -1
  224. package/dist/components/form/fields/array/ArrayAutoField.js +36 -13
  225. package/dist/components/form/fields/array/ArrayAutoField.js.map +1 -1
  226. package/dist/components/form/fields/auto/AutoFormField.d.ts +30 -1
  227. package/dist/components/form/fields/auto/AutoFormField.d.ts.map +1 -1
  228. package/dist/components/form/fields/auto/AutoFormField.js +123 -79
  229. package/dist/components/form/fields/auto/AutoFormField.js.map +1 -1
  230. package/dist/components/form/fields/auto/hostEditorValue.d.ts +30 -0
  231. package/dist/components/form/fields/auto/hostEditorValue.d.ts.map +1 -0
  232. package/dist/components/form/fields/auto/hostEditorValue.js +53 -0
  233. package/dist/components/form/fields/auto/hostEditorValue.js.map +1 -0
  234. package/dist/components/form/fields/binary/Binary.d.ts.map +1 -1
  235. package/dist/components/form/fields/binary/Binary.js +23 -3
  236. package/dist/components/form/fields/binary/Binary.js.map +1 -1
  237. package/dist/components/form/fields/boolean/Boolean.d.ts +5 -0
  238. package/dist/components/form/fields/boolean/Boolean.d.ts.map +1 -1
  239. package/dist/components/form/fields/boolean/Boolean.js +9 -1
  240. package/dist/components/form/fields/boolean/Boolean.js.map +1 -1
  241. package/dist/components/form/fields/color/Color.d.ts +103 -16
  242. package/dist/components/form/fields/color/Color.d.ts.map +1 -1
  243. package/dist/components/form/fields/color/Color.js +616 -16
  244. package/dist/components/form/fields/color/Color.js.map +1 -1
  245. package/dist/components/form/fields/emittedValues.d.ts +34 -3
  246. package/dist/components/form/fields/emittedValues.d.ts.map +1 -1
  247. package/dist/components/form/fields/emittedValues.js +24 -1
  248. package/dist/components/form/fields/emittedValues.js.map +1 -1
  249. package/dist/components/form/fields/file/File.d.ts +1 -1
  250. package/dist/components/form/fields/file/File.d.ts.map +1 -1
  251. package/dist/components/form/fields/file/File.js +4 -2
  252. package/dist/components/form/fields/file/File.js.map +1 -1
  253. package/dist/components/form/fields/long-string/LongString.d.ts +1 -7
  254. package/dist/components/form/fields/long-string/LongString.d.ts.map +1 -1
  255. package/dist/components/form/fields/long-string/LongString.js +30 -13
  256. package/dist/components/form/fields/long-string/LongString.js.map +1 -1
  257. package/dist/components/form/fields/markdown/MarkdownView.js +1 -1
  258. package/dist/components/form/fields/multi-select/MultiSelectFormField.d.ts.map +1 -1
  259. package/dist/components/form/fields/multi-select/MultiSelectFormField.js +10 -7
  260. package/dist/components/form/fields/multi-select/MultiSelectFormField.js.map +1 -1
  261. package/dist/components/form/fields/number/Number.d.ts +7 -4
  262. package/dist/components/form/fields/number/Number.d.ts.map +1 -1
  263. package/dist/components/form/fields/number/Number.js +45 -18
  264. package/dist/components/form/fields/number/Number.js.map +1 -1
  265. package/dist/components/form/fields/object/Object.d.ts +1 -1
  266. package/dist/components/form/fields/object/Object.d.ts.map +1 -1
  267. package/dist/components/form/fields/object/Object.js +4 -2
  268. package/dist/components/form/fields/object/Object.js.map +1 -1
  269. package/dist/components/form/fields/pendingEdit.d.ts +52 -0
  270. package/dist/components/form/fields/pendingEdit.d.ts.map +1 -0
  271. package/dist/components/form/fields/pendingEdit.js +79 -0
  272. package/dist/components/form/fields/pendingEdit.js.map +1 -0
  273. package/dist/components/form/fields/radio-group/RadioGroup.d.ts.map +1 -1
  274. package/dist/components/form/fields/radio-group/RadioGroup.js +8 -13
  275. package/dist/components/form/fields/radio-group/RadioGroup.js.map +1 -1
  276. package/dist/components/form/fields/rich-text/RichText.d.ts +20 -1
  277. package/dist/components/form/fields/rich-text/RichText.d.ts.map +1 -1
  278. package/dist/components/form/fields/rich-text/RichText.js +426 -91
  279. package/dist/components/form/fields/rich-text/RichText.js.map +1 -1
  280. package/dist/components/form/fields/rich-text/useTemplateTags.d.ts +18 -0
  281. package/dist/components/form/fields/rich-text/useTemplateTags.d.ts.map +1 -0
  282. package/dist/components/form/fields/rich-text/useTemplateTags.js +80 -0
  283. package/dist/components/form/fields/rich-text/useTemplateTags.js.map +1 -0
  284. package/dist/components/form/fields/schema-definition/CatalogLeafForm.d.ts.map +1 -1
  285. package/dist/components/form/fields/schema-definition/CatalogLeafForm.js +4 -1
  286. package/dist/components/form/fields/schema-definition/CatalogLeafForm.js.map +1 -1
  287. package/dist/components/form/fields/schema-definition/CatalogNodeEditor.d.ts.map +1 -1
  288. package/dist/components/form/fields/schema-definition/CatalogNodeEditor.js +20 -5
  289. package/dist/components/form/fields/schema-definition/CatalogNodeEditor.js.map +1 -1
  290. package/dist/components/form/fields/schema-definition/TableEditor.d.ts.map +1 -1
  291. package/dist/components/form/fields/schema-definition/TableEditor.js +10 -2
  292. package/dist/components/form/fields/schema-definition/TableEditor.js.map +1 -1
  293. package/dist/components/form/fields/schema-definition/index.d.ts.map +1 -1
  294. package/dist/components/form/fields/schema-definition/index.js +8 -4
  295. package/dist/components/form/fields/schema-definition/index.js.map +1 -1
  296. package/dist/components/form/fields/select/Select.d.ts +10 -1
  297. package/dist/components/form/fields/select/Select.d.ts.map +1 -1
  298. package/dist/components/form/fields/select/Select.js +28 -14
  299. package/dist/components/form/fields/select/Select.js.map +1 -1
  300. package/dist/components/form/fields/select/SelectCollection.d.ts +5 -0
  301. package/dist/components/form/fields/select/SelectCollection.d.ts.map +1 -1
  302. package/dist/components/form/fields/select/SelectCollection.js +25 -12
  303. package/dist/components/form/fields/select/SelectCollection.js.map +1 -1
  304. package/dist/components/form/fields/select/unavailableRow.d.ts +23 -0
  305. package/dist/components/form/fields/select/unavailableRow.d.ts.map +1 -0
  306. package/dist/components/form/fields/select/unavailableRow.js +55 -0
  307. package/dist/components/form/fields/select/unavailableRow.js.map +1 -0
  308. package/dist/components/form/fields/template/ReadOnlyTemplateTag.d.ts +11 -5
  309. package/dist/components/form/fields/template/ReadOnlyTemplateTag.d.ts.map +1 -1
  310. package/dist/components/form/fields/template/ReadOnlyTemplateTag.js +21 -5
  311. package/dist/components/form/fields/template/ReadOnlyTemplateTag.js.map +1 -1
  312. package/dist/components/form/fields/template/TemplateBrowser.d.ts +16 -0
  313. package/dist/components/form/fields/template/TemplateBrowser.d.ts.map +1 -0
  314. package/dist/components/form/fields/template/TemplateBrowser.js +89 -0
  315. package/dist/components/form/fields/template/TemplateBrowser.js.map +1 -0
  316. package/dist/components/form/fields/template/TemplateField.d.ts +105 -1
  317. package/dist/components/form/fields/template/TemplateField.d.ts.map +1 -1
  318. package/dist/components/form/fields/template/TemplateField.js +706 -168
  319. package/dist/components/form/fields/template/TemplateField.js.map +1 -1
  320. package/dist/components/form/fields/template/TemplatePicker.d.ts +54 -0
  321. package/dist/components/form/fields/template/TemplatePicker.d.ts.map +1 -0
  322. package/dist/components/form/fields/template/TemplatePicker.js +459 -0
  323. package/dist/components/form/fields/template/TemplatePicker.js.map +1 -0
  324. package/dist/components/form/fields/template/TemplateText.d.ts +0 -17
  325. package/dist/components/form/fields/template/TemplateText.d.ts.map +1 -1
  326. package/dist/components/form/fields/template/TemplateText.js +22 -16
  327. package/dist/components/form/fields/template/TemplateText.js.map +1 -1
  328. package/dist/components/form/fields/template/referenceNames.d.ts +63 -0
  329. package/dist/components/form/fields/template/referenceNames.d.ts.map +1 -0
  330. package/dist/components/form/fields/template/referenceNames.js +69 -0
  331. package/dist/components/form/fields/template/referenceNames.js.map +1 -0
  332. package/dist/components/form/fields/template/writtenAsText.d.ts +61 -0
  333. package/dist/components/form/fields/template/writtenAsText.d.ts.map +1 -0
  334. package/dist/components/form/fields/template/writtenAsText.js +204 -0
  335. package/dist/components/form/fields/template/writtenAsText.js.map +1 -0
  336. package/dist/components/form/index.d.ts +12 -2
  337. package/dist/components/form/index.d.ts.map +1 -1
  338. package/dist/components/form/index.js +25 -3
  339. package/dist/components/form/index.js.map +1 -1
  340. package/dist/components/form/typeSentenceForm.d.ts +17 -0
  341. package/dist/components/form/typeSentenceForm.d.ts.map +1 -0
  342. package/dist/components/form/typeSentenceForm.js +54 -0
  343. package/dist/components/form/typeSentenceForm.js.map +1 -0
  344. package/dist/components/imageLightbox/ImageLightbox.d.ts.map +1 -1
  345. package/dist/components/imageLightbox/ImageLightbox.js +19 -9
  346. package/dist/components/imageLightbox/ImageLightbox.js.map +1 -1
  347. package/dist/components/log/Log.d.ts.map +1 -1
  348. package/dist/components/log/Log.js +20 -8
  349. package/dist/components/log/Log.js.map +1 -1
  350. package/dist/components/menu/Menu.d.ts.map +1 -1
  351. package/dist/components/menu/Menu.js +19 -10
  352. package/dist/components/menu/Menu.js.map +1 -1
  353. package/dist/components/smartEditor/CompletionMenu.d.ts +53 -0
  354. package/dist/components/smartEditor/CompletionMenu.d.ts.map +1 -0
  355. package/dist/components/smartEditor/CompletionMenu.js +302 -0
  356. package/dist/components/smartEditor/CompletionMenu.js.map +1 -0
  357. package/dist/components/smartEditor/MarkdownDoc.d.ts +1 -1
  358. package/dist/components/smartEditor/MarkdownDoc.js +3 -3
  359. package/dist/components/smartEditor/MarkdownDoc.js.map +1 -1
  360. package/dist/components/smartEditor/SmartEditor.d.ts.map +1 -1
  361. package/dist/components/smartEditor/SmartEditor.js +616 -190
  362. package/dist/components/smartEditor/SmartEditor.js.map +1 -1
  363. package/dist/components/smartEditor/completionStyle.d.ts +28 -0
  364. package/dist/components/smartEditor/completionStyle.d.ts.map +1 -0
  365. package/dist/components/smartEditor/completionStyle.js +79 -0
  366. package/dist/components/smartEditor/completionStyle.js.map +1 -0
  367. package/dist/components/smartEditor/contextTitle.d.ts +10 -0
  368. package/dist/components/smartEditor/contextTitle.d.ts.map +1 -0
  369. package/dist/components/smartEditor/contextTitle.js +21 -0
  370. package/dist/components/smartEditor/contextTitle.js.map +1 -0
  371. package/dist/components/smartEditor/editingAids.d.ts +64 -0
  372. package/dist/components/smartEditor/editingAids.d.ts.map +1 -0
  373. package/dist/components/smartEditor/editingAids.js +213 -0
  374. package/dist/components/smartEditor/editingAids.js.map +1 -0
  375. package/dist/components/smartEditor/index.d.ts +6 -1
  376. package/dist/components/smartEditor/index.d.ts.map +1 -1
  377. package/dist/components/smartEditor/index.js +19 -1
  378. package/dist/components/smartEditor/index.js.map +1 -1
  379. package/dist/components/smartEditor/templateCompletions.d.ts +98 -0
  380. package/dist/components/smartEditor/templateCompletions.d.ts.map +1 -0
  381. package/dist/components/smartEditor/templateCompletions.js +380 -0
  382. package/dist/components/smartEditor/templateCompletions.js.map +1 -0
  383. package/dist/components/smartEditor/typedReferences.d.ts +34 -0
  384. package/dist/components/smartEditor/typedReferences.d.ts.map +1 -0
  385. package/dist/components/smartEditor/typedReferences.js +179 -0
  386. package/dist/components/smartEditor/typedReferences.js.map +1 -0
  387. package/dist/components/smartEditor/types.d.ts +116 -2
  388. package/dist/components/smartEditor/types.d.ts.map +1 -1
  389. package/dist/components/smartEditor/useEditingAids.d.ts +38 -0
  390. package/dist/components/smartEditor/useEditingAids.d.ts.map +1 -0
  391. package/dist/components/smartEditor/useEditingAids.js +392 -0
  392. package/dist/components/smartEditor/useEditingAids.js.map +1 -0
  393. package/dist/components/smartEditor/useLspAutocomplete.d.ts +106 -3
  394. package/dist/components/smartEditor/useLspAutocomplete.d.ts.map +1 -1
  395. package/dist/components/smartEditor/useLspAutocomplete.js +592 -149
  396. package/dist/components/smartEditor/useLspAutocomplete.js.map +1 -1
  397. package/dist/components/smartEditor/useLspHover.d.ts +33 -7
  398. package/dist/components/smartEditor/useLspHover.d.ts.map +1 -1
  399. package/dist/components/smartEditor/useLspHover.js +364 -35
  400. package/dist/components/smartEditor/useLspHover.js.map +1 -1
  401. package/dist/components/smartEditor/useLspSemanticTokens.js +1 -1
  402. package/dist/components/smartEditor/useLspSemanticTokens.js.map +1 -1
  403. package/dist/components/smartEditor/useLspSession.d.ts +6 -0
  404. package/dist/components/smartEditor/useLspSession.d.ts.map +1 -1
  405. package/dist/components/smartEditor/useLspSession.js +7 -6
  406. package/dist/components/smartEditor/useLspSession.js.map +1 -1
  407. package/dist/components/smartEditor/useLspSignatureHelp.d.ts.map +1 -1
  408. package/dist/components/smartEditor/useLspSignatureHelp.js +6 -11
  409. package/dist/components/smartEditor/useLspSignatureHelp.js.map +1 -1
  410. package/dist/components/smartEditor/useTabCameIn.d.ts +10 -0
  411. package/dist/components/smartEditor/useTabCameIn.d.ts.map +1 -0
  412. package/dist/components/smartEditor/useTabCameIn.js +42 -0
  413. package/dist/components/smartEditor/useTabCameIn.js.map +1 -0
  414. package/dist/components/supportTicket/AttachmentChips.d.ts.map +1 -1
  415. package/dist/components/supportTicket/AttachmentChips.js +15 -5
  416. package/dist/components/supportTicket/AttachmentChips.js.map +1 -1
  417. package/dist/components/supportTicket/InterfaceReferenceTags.d.ts +2 -3
  418. package/dist/components/supportTicket/InterfaceReferenceTags.d.ts.map +1 -1
  419. package/dist/components/supportTicket/InterfaceReferenceTags.js.map +1 -1
  420. package/dist/components/supportTicket/ReferencePicker.d.ts +9 -3
  421. package/dist/components/supportTicket/ReferencePicker.d.ts.map +1 -1
  422. package/dist/components/supportTicket/ReferencePicker.js +38 -23
  423. package/dist/components/supportTicket/ReferencePicker.js.map +1 -1
  424. package/dist/components/supportTicket/TicketHeader.d.ts +3 -4
  425. package/dist/components/supportTicket/TicketHeader.d.ts.map +1 -1
  426. package/dist/components/supportTicket/TicketHeader.js +21 -6
  427. package/dist/components/supportTicket/TicketHeader.js.map +1 -1
  428. package/dist/components/supportTicket/TicketMetaTags.d.ts +1 -1
  429. package/dist/components/supportTicket/TicketReplyBox.d.ts.map +1 -1
  430. package/dist/components/supportTicket/TicketReplyBox.js +10 -29
  431. package/dist/components/supportTicket/TicketReplyBox.js.map +1 -1
  432. package/dist/components/supportTicket/useLoadedImages.d.ts +0 -10
  433. package/dist/components/supportTicket/useLoadedImages.d.ts.map +1 -1
  434. package/dist/components/supportTicket/useLoadedImages.js +1 -63
  435. package/dist/components/supportTicket/useLoadedImages.js.map +1 -1
  436. package/dist/components/ticketReferences/TicketReferences.d.ts.map +1 -1
  437. package/dist/components/ticketReferences/TicketReferences.js +10 -9
  438. package/dist/components/ticketReferences/TicketReferences.js.map +1 -1
  439. package/dist/components/ticketThread/TicketThread.d.ts.map +1 -1
  440. package/dist/components/ticketThread/TicketThread.js +52 -21
  441. package/dist/components/ticketThread/TicketThread.js.map +1 -1
  442. package/dist/helpers/allowedValues.d.ts +21 -12
  443. package/dist/helpers/allowedValues.d.ts.map +1 -1
  444. package/dist/helpers/allowedValues.js +40 -20
  445. package/dist/helpers/allowedValues.js.map +1 -1
  446. package/dist/helpers/descriptionTooltip.d.ts +46 -0
  447. package/dist/helpers/descriptionTooltip.d.ts.map +1 -0
  448. package/dist/helpers/descriptionTooltip.js +76 -0
  449. package/dist/helpers/descriptionTooltip.js.map +1 -0
  450. package/dist/helpers/domProps.d.ts +5 -0
  451. package/dist/helpers/domProps.d.ts.map +1 -0
  452. package/dist/helpers/domProps.js +47 -0
  453. package/dist/helpers/domProps.js.map +1 -0
  454. package/dist/helpers/expressions.d.ts +115 -4
  455. package/dist/helpers/expressions.d.ts.map +1 -1
  456. package/dist/helpers/expressions.js +247 -29
  457. package/dist/helpers/expressions.js.map +1 -1
  458. package/dist/helpers/hoveringPointer.d.ts +26 -0
  459. package/dist/helpers/hoveringPointer.d.ts.map +1 -0
  460. package/dist/helpers/hoveringPointer.js +29 -0
  461. package/dist/helpers/hoveringPointer.js.map +1 -0
  462. package/dist/helpers/markdownText.d.ts +14 -0
  463. package/dist/helpers/markdownText.d.ts.map +1 -0
  464. package/dist/helpers/markdownText.js +160 -0
  465. package/dist/helpers/markdownText.js.map +1 -0
  466. package/dist/helpers/noDescription.d.ts +9 -0
  467. package/dist/helpers/noDescription.d.ts.map +1 -0
  468. package/dist/helpers/noDescription.js +13 -0
  469. package/dist/helpers/noDescription.js.map +1 -0
  470. package/dist/helpers/optionUiTypes.d.ts +2 -2
  471. package/dist/helpers/qorusTypeCatalogue.d.ts +147 -0
  472. package/dist/helpers/qorusTypeCatalogue.d.ts.map +1 -0
  473. package/dist/helpers/qorusTypeCatalogue.js +505 -0
  474. package/dist/helpers/qorusTypeCatalogue.js.map +1 -0
  475. package/dist/helpers/readableColors.d.ts +36 -0
  476. package/dist/helpers/readableColors.d.ts.map +1 -0
  477. package/dist/helpers/readableColors.js +116 -0
  478. package/dist/helpers/readableColors.js.map +1 -0
  479. package/dist/helpers/recordFieldReference.d.ts +15 -0
  480. package/dist/helpers/recordFieldReference.d.ts.map +1 -0
  481. package/dist/helpers/recordFieldReference.js +89 -0
  482. package/dist/helpers/recordFieldReference.js.map +1 -0
  483. package/dist/helpers/singleLineString.d.ts.map +1 -1
  484. package/dist/helpers/singleLineString.js +0 -1
  485. package/dist/helpers/singleLineString.js.map +1 -1
  486. package/dist/helpers/templateCatalogue.d.ts +104 -0
  487. package/dist/helpers/templateCatalogue.d.ts.map +1 -0
  488. package/dist/helpers/templateCatalogue.js +116 -0
  489. package/dist/helpers/templateCatalogue.js.map +1 -0
  490. package/dist/helpers/templateCatalogueContext.d.ts +19 -0
  491. package/dist/helpers/templateCatalogueContext.d.ts.map +1 -0
  492. package/dist/helpers/templateCatalogueContext.js +31 -0
  493. package/dist/helpers/templateCatalogueContext.js.map +1 -0
  494. package/dist/helpers/templateItems.d.ts +2 -2
  495. package/dist/helpers/templateItems.d.ts.map +1 -1
  496. package/dist/helpers/templateItems.js +6 -4
  497. package/dist/helpers/templateItems.js.map +1 -1
  498. package/dist/helpers/templateText.d.ts +1 -0
  499. package/dist/helpers/templateText.d.ts.map +1 -1
  500. package/dist/helpers/templateText.js +7 -3
  501. package/dist/helpers/templateText.js.map +1 -1
  502. package/dist/helpers/templateTree.d.ts +248 -0
  503. package/dist/helpers/templateTree.d.ts.map +1 -0
  504. package/dist/helpers/templateTree.js +892 -0
  505. package/dist/helpers/templateTree.js.map +1 -0
  506. package/dist/helpers/templateType.d.ts +28 -0
  507. package/dist/helpers/templateType.d.ts.map +1 -0
  508. package/dist/helpers/templateType.js +30 -0
  509. package/dist/helpers/templateType.js.map +1 -0
  510. package/dist/helpers/templates.d.ts +86 -16
  511. package/dist/helpers/templates.d.ts.map +1 -1
  512. package/dist/helpers/templates.js +305 -45
  513. package/dist/helpers/templates.js.map +1 -1
  514. package/dist/helpers/validations.d.ts +27 -0
  515. package/dist/helpers/validations.d.ts.map +1 -1
  516. package/dist/helpers/validations.js +169 -39
  517. package/dist/helpers/validations.js.map +1 -1
  518. package/dist/helpers/webLink.d.ts +8 -0
  519. package/dist/helpers/webLink.d.ts.map +1 -0
  520. package/dist/helpers/webLink.js +29 -0
  521. package/dist/helpers/webLink.js.map +1 -0
  522. package/dist/hooks/useQorusTypes.d.ts +12 -17
  523. package/dist/hooks/useQorusTypes.d.ts.map +1 -1
  524. package/dist/hooks/useQorusTypes.js +44 -172
  525. package/dist/hooks/useQorusTypes.js.map +1 -1
  526. package/dist/hooks/useReadableIntentShade.d.ts +9 -0
  527. package/dist/hooks/useReadableIntentShade.d.ts.map +1 -0
  528. package/dist/hooks/useReadableIntentShade.js +23 -0
  529. package/dist/hooks/useReadableIntentShade.js.map +1 -0
  530. package/dist/hooks/useReadableOpacity.d.ts +6 -0
  531. package/dist/hooks/useReadableOpacity.d.ts.map +1 -0
  532. package/dist/hooks/useReadableOpacity.js +17 -0
  533. package/dist/hooks/useReadableOpacity.js.map +1 -0
  534. package/dist/index.d.ts +8 -0
  535. package/dist/index.d.ts.map +1 -1
  536. package/dist/index.js +24 -1
  537. package/dist/index.js.map +1 -1
  538. package/dist/tracking/ui/ExperimentCard.d.ts +1 -1
  539. package/dist/tracking/ui/ExperimentCard.d.ts.map +1 -1
  540. package/dist/tracking/ui/ExperimentCard.js +26 -10
  541. package/dist/tracking/ui/ExperimentCard.js.map +1 -1
  542. package/dist/tracking/ui/card.d.ts +2 -2
  543. package/dist/tracking/ui/card.d.ts.map +1 -1
  544. package/dist/tracking/ui/card.js +2 -2
  545. package/dist/tracking/ui/card.js.map +1 -1
  546. package/dist/tracking/ui/readable.d.ts +14 -0
  547. package/dist/tracking/ui/readable.d.ts.map +1 -0
  548. package/dist/tracking/ui/readable.js +60 -0
  549. package/dist/tracking/ui/readable.js.map +1 -0
  550. package/dist/utils/fetch.d.ts +9 -2
  551. package/dist/utils/fetch.d.ts.map +1 -1
  552. package/dist/utils/fetch.js +6 -5
  553. package/dist/utils/fetch.js.map +1 -1
  554. package/dist/utils/lspClient.types.d.ts +2 -0
  555. package/dist/utils/lspClient.types.d.ts.map +1 -1
  556. package/dist/utils/websocket.d.ts +65 -2
  557. package/dist/utils/websocket.d.ts.map +1 -1
  558. package/dist/utils/websocket.js +276 -44
  559. package/dist/utils/websocket.js.map +1 -1
  560. package/package.json +14 -6
  561. package/.claude/CLAUDE.md +0 -317
  562. package/.tasks/EXPORT_EXPRESSION_BUILDER.md +0 -38
  563. package/.tasks/EXPRESSION_BUILDER_REPORT.md +0 -149
  564. package/.tasks/EXPRESSION_FIELD_SEAMS.md +0 -66
  565. package/.tasks/FIELD_STACK_REPORT.md +0 -234
  566. package/.tasks/FORM_ENGINE_COMPACT_READ_FIRST.md +0 -558
  567. package/.tasks/FORM_ENGINE_EXPRESSIONS.md +0 -197
  568. package/.tasks/FORM_ENGINE_OPTIONS_SYNC.md +0 -95
  569. package/.tasks/FORM_FIELD_EXTRAS.md +0 -72
  570. package/.tasks/INDEX.md +0 -111
  571. package/.tasks/LSP_SHARED_CONNECTION.md +0 -75
  572. package/.tasks/QONSOLE_ASSIST_FEATURES.md +0 -306
  573. package/.tasks/RENDER_EXPRESSION_LSP.md +0 -159
  574. package/.tasks/REQRAFT_AUTO_FIELD.md +0 -176
  575. package/.tasks/SCHEMA_DEFINITION_FIELD.md +0 -250
  576. package/.tasks/SMART_EDITOR_CONTEXT_AND_POLISH.md +0 -340
  577. package/.tasks/SMART_EDITOR_LSP_FEATURES.md +0 -299
  578. package/.tasks/SMART_EDITOR_REVIEW_FOLLOWUPS.md +0 -280
  579. package/.tasks/SMART_EDITOR_UX_POLISH.md +0 -383
  580. package/.tasks/SMART_EDITOR_VISUAL_POLISH.md +0 -246
  581. package/.tasks/STORY_NETWORK_ISOLATION.md +0 -98
  582. package/.tasks/TEMPLATE_TOKEN_GRAMMAR.md +0 -72
  583. package/CODE_OF_CONDUCT.md +0 -105
  584. package/CONTRIBUTING.MD +0 -78
  585. package/SECURITY.md +0 -3
  586. package/chromatic.config.json +0 -5
  587. package/design/COMPACT_ENGINE_REDESIGN.md +0 -156
  588. package/design/COMPACT_INFO_DISPLAY.md +0 -87
  589. package/design/COMPACT_PARITY.md +0 -85
  590. package/design/EXPRESSION_BUILDER_REPORT_STRATEGY.md +0 -92
  591. package/design/FORM_ENGINE_COMPACT.md +0 -300
  592. package/design/FORM_ENGINE_COMPACT_UX_PLAN.md +0 -353
  593. package/design/FORM_ENGINE_EXPRESSIONS.md +0 -257
  594. package/design/FORM_ENGINE_FIELD_MIGRATION.md +0 -419
  595. package/design/IDE_INTEGRATION.md +0 -64
  596. package/design/RENDER_EXPRESSION_TRANSPORT.md +0 -156
  597. package/design/SELECT_DIALOG_FLOOR.md +0 -86
  598. package/design/SMART_EDITOR_UX.md +0 -438
  599. package/design/TRACKING.md +0 -290
  600. package/design/UNAVAILABLE_ALLOWED_VALUES.md +0 -226
  601. package/dist/components/form/engine/formAppearance.d.ts +0 -49
  602. package/dist/components/form/engine/formAppearance.d.ts.map +0 -1
  603. package/dist/components/form/engine/formAppearance.js +0 -50
  604. package/dist/components/form/engine/formAppearance.js.map +0 -1
  605. package/dist/components/form/fields/ChoiceGroupHeading.d.ts +0 -21
  606. package/dist/components/form/fields/ChoiceGroupHeading.d.ts.map +0 -1
  607. package/dist/components/form/fields/ChoiceGroupHeading.js +0 -33
  608. package/dist/components/form/fields/ChoiceGroupHeading.js.map +0 -1
  609. package/dist/components/form/fields/allowed-values/savedValues.d.ts +0 -30
  610. package/dist/components/form/fields/allowed-values/savedValues.d.ts.map +0 -1
  611. package/dist/components/form/fields/allowed-values/savedValues.js +0 -39
  612. package/dist/components/form/fields/allowed-values/savedValues.js.map +0 -1
  613. package/dist/helpers/fieldDescription.d.ts +0 -16
  614. package/dist/helpers/fieldDescription.d.ts.map +0 -1
  615. package/dist/helpers/fieldDescription.js +0 -40
  616. package/dist/helpers/fieldDescription.js.map +0 -1
  617. package/src/components/Description/index.tsx +0 -254
  618. package/src/components/Description/markdownRendererContext.tsx +0 -29
  619. package/src/components/FocusedEditing/index.tsx +0 -50
  620. package/src/components/codeSize/index.tsx +0 -79
  621. package/src/components/composer/Composer.stories.tsx +0 -238
  622. package/src/components/composer/Composer.tsx +0 -554
  623. package/src/components/composer/helpers.ts +0 -74
  624. package/src/components/composer/index.ts +0 -2
  625. package/src/components/dpqlEditor/DpqlEditor.stories.tsx +0 -1183
  626. package/src/components/dpqlEditor/DpqlEditor.tsx +0 -219
  627. package/src/components/dpqlEditor/dpqlHelpers.ts +0 -287
  628. package/src/components/dpqlEditor/dpqlInserter.ts +0 -121
  629. package/src/components/dpqlEditor/dpqlProbe.ts +0 -165
  630. package/src/components/dpqlEditor/dpqlTags.ts +0 -114
  631. package/src/components/dpqlEditor/index.ts +0 -41
  632. package/src/components/dpqlEditor/types.ts +0 -203
  633. package/src/components/dpqlEditor/useDpqlProbe.ts +0 -33
  634. package/src/components/dpqlEditor/useDpqlSession.ts +0 -411
  635. package/src/components/form/engine/CompactRow.tsx +0 -2740
  636. package/src/components/form/engine/CompactToolbar.tsx +0 -399
  637. package/src/components/form/engine/FormEngine.stories.tsx +0 -9934
  638. package/src/components/form/engine/FormEngine.tsx +0 -4891
  639. package/src/components/form/engine/FormEngineAppearance.stories.tsx +0 -609
  640. package/src/components/form/engine/FormEngineRemote.stories.tsx +0 -679
  641. package/src/components/form/engine/FormEngineStickyHeaders.stories.tsx +0 -335
  642. package/src/components/form/engine/FormFieldsSkeleton.tsx +0 -82
  643. package/src/components/form/engine/OptionFieldMessages.tsx +0 -548
  644. package/src/components/form/engine/OptionsHelpDialog.tsx +0 -29
  645. package/src/components/form/engine/__fixtures__/basicFormOptions.ts +0 -309
  646. package/src/components/form/engine/__fixtures__/fieldChromeOptions.ts +0 -45
  647. package/src/components/form/engine/_structuredData/SchemaDataView.stories.tsx +0 -233
  648. package/src/components/form/engine/_structuredData/SchemaDataView.tsx +0 -755
  649. package/src/components/form/engine/_structuredData/StructuredDataView.stories.tsx +0 -85
  650. package/src/components/form/engine/_structuredData/StructuredDataView.tsx +0 -75
  651. package/src/components/form/engine/_structuredData/structuredData.ts +0 -145
  652. package/src/components/form/engine/compactRowContext.ts +0 -153
  653. package/src/components/form/engine/compactRowStyles.ts +0 -1087
  654. package/src/components/form/engine/compactToolbarContext.ts +0 -72
  655. package/src/components/form/engine/formAppearance.ts +0 -79
  656. package/src/components/form/engine/optionActions.ts +0 -128
  657. package/src/components/form/engine/optionsContext.ts +0 -24
  658. package/src/components/form/engine/readFirst.ts +0 -1090
  659. package/src/components/form/engine/rendererTypes.ts +0 -107
  660. package/src/components/form/engine/revealRow.ts +0 -123
  661. package/src/components/form/engine/rowFocus.ts +0 -112
  662. package/src/components/form/engine/rowMenuContext.ts +0 -159
  663. package/src/components/form/engine/rowOpenPicker.ts +0 -27
  664. package/src/components/form/engine/typeChoices.ts +0 -63
  665. package/src/components/form/engine/variants/FormEngineVariants.stories.tsx +0 -159
  666. package/src/components/form/engine/variants/VariantCalmTable.tsx +0 -244
  667. package/src/components/form/engine/variants/VariantCards.tsx +0 -212
  668. package/src/components/form/engine/variants/VariantFocus.tsx +0 -382
  669. package/src/components/form/engine/variants/VariantMinimal.tsx +0 -170
  670. package/src/components/form/engine/variants/focusDemo.ts +0 -145
  671. package/src/components/form/engine/variants/variantModel.ts +0 -223
  672. package/src/components/form/engine/variants/variantParts.tsx +0 -313
  673. package/src/components/form/expressions/DpqlRendering.tsx +0 -85
  674. package/src/components/form/expressions/ExpressionField.stories.tsx +0 -1395
  675. package/src/components/form/expressions/ExpressionField.tsx +0 -503
  676. package/src/components/form/expressions/argumentPresence.ts +0 -213
  677. package/src/components/form/expressions/builder/ExpressionBuilder.stories.tsx +0 -1683
  678. package/src/components/form/expressions/builder/argumentDetail.tsx +0 -17
  679. package/src/components/form/expressions/builder/argumentLabel.tsx +0 -146
  680. package/src/components/form/expressions/builder/argumentSlot.tsx +0 -101
  681. package/src/components/form/expressions/builder/argumentWrapper.tsx +0 -243
  682. package/src/components/form/expressions/builder/confirmMismatchedTypesModal.tsx +0 -120
  683. package/src/components/form/expressions/builder/confirmUnsupportedTypeModal.tsx +0 -69
  684. package/src/components/form/expressions/builder/index.tsx +0 -1545
  685. package/src/components/form/expressions/builder/item.tsx +0 -89
  686. package/src/components/form/expressions/builder/moveToPositionStrip.tsx +0 -156
  687. package/src/components/form/expressions/builder/renderTemplate.tsx +0 -42
  688. package/src/components/form/expressions/dpqlMockLanguage.ts +0 -566
  689. package/src/components/form/expressions/dpqlMockLsp.ts +0 -126
  690. package/src/components/form/expressions/mockExpressions.ts +0 -317
  691. package/src/components/form/expressions/renderExpressionToText.ts +0 -152
  692. package/src/components/form/expressions/types.ts +0 -110
  693. package/src/components/form/expressions/useExpressions.ts +0 -101
  694. package/src/components/form/expressions/useRenderExpression.ts +0 -165
  695. package/src/components/form/fields/ChoiceGroupHeading.tsx +0 -38
  696. package/src/components/form/fields/Field.stories.tsx +0 -143
  697. package/src/components/form/fields/Field.tsx +0 -734
  698. package/src/components/form/fields/allowed-values/AllowedValues.tsx +0 -321
  699. package/src/components/form/fields/allowed-values/savedValues.ts +0 -64
  700. package/src/components/form/fields/array/ArrayAuto.tsx +0 -237
  701. package/src/components/form/fields/array/ArrayAutoField.stories.tsx +0 -475
  702. package/src/components/form/fields/array/ArrayAutoField.tsx +0 -367
  703. package/src/components/form/fields/auto/AutoFormField.stories.tsx +0 -825
  704. package/src/components/form/fields/auto/AutoFormField.tsx +0 -1183
  705. package/src/components/form/fields/binary/Binary.stories.tsx +0 -122
  706. package/src/components/form/fields/binary/Binary.tsx +0 -91
  707. package/src/components/form/fields/boolean/Boolean.stories.tsx +0 -125
  708. package/src/components/form/fields/boolean/Boolean.tsx +0 -34
  709. package/src/components/form/fields/byte-size/ByteSize.stories.tsx +0 -87
  710. package/src/components/form/fields/byte-size/ByteSize.tsx +0 -58
  711. package/src/components/form/fields/color/Color.stories.tsx +0 -99
  712. package/src/components/form/fields/color/Color.tsx +0 -46
  713. package/src/components/form/fields/cron/Cron.stories.tsx +0 -68
  714. package/src/components/form/fields/cron/Cron.tsx +0 -80
  715. package/src/components/form/fields/date/Date.stories.tsx +0 -77
  716. package/src/components/form/fields/date/Date.tsx +0 -55
  717. package/src/components/form/fields/emittedValues.ts +0 -70
  718. package/src/components/form/fields/file/File.stories.tsx +0 -161
  719. package/src/components/form/fields/file/File.tsx +0 -227
  720. package/src/components/form/fields/long-string/LongString.stories.tsx +0 -147
  721. package/src/components/form/fields/long-string/LongString.tsx +0 -141
  722. package/src/components/form/fields/markdown/Markdown.stories.tsx +0 -76
  723. package/src/components/form/fields/markdown/Markdown.tsx +0 -81
  724. package/src/components/form/fields/markdown/MarkdownView.tsx +0 -222
  725. package/src/components/form/fields/multi-select/MultiSelectFormField.tsx +0 -140
  726. package/src/components/form/fields/number/Number.stories.tsx +0 -159
  727. package/src/components/form/fields/number/Number.tsx +0 -175
  728. package/src/components/form/fields/object/Object.stories.tsx +0 -398
  729. package/src/components/form/fields/object/Object.tsx +0 -255
  730. package/src/components/form/fields/radio-group/RadioGroup.stories.tsx +0 -95
  731. package/src/components/form/fields/radio-group/RadioGroup.tsx +0 -52
  732. package/src/components/form/fields/radio-group/images/java-96x128.png +0 -0
  733. package/src/components/form/fields/radio-group/images/python-129x128.png +0 -0
  734. package/src/components/form/fields/radio-group/images/qore-106x128.png +0 -0
  735. package/src/components/form/fields/rich-text/RichText.stories.tsx +0 -260
  736. package/src/components/form/fields/rich-text/RichText.tsx +0 -537
  737. package/src/components/form/fields/schema-definition/CatalogLeafForm.tsx +0 -242
  738. package/src/components/form/fields/schema-definition/CatalogNodeEditor.tsx +0 -758
  739. package/src/components/form/fields/schema-definition/Hint.tsx +0 -22
  740. package/src/components/form/fields/schema-definition/InlineValidationBanner.tsx +0 -138
  741. package/src/components/form/fields/schema-definition/Loader.tsx +0 -20
  742. package/src/components/form/fields/schema-definition/MigrationsTab.tsx +0 -187
  743. package/src/components/form/fields/schema-definition/SchemaDefinitionField.stories.tsx +0 -286
  744. package/src/components/form/fields/schema-definition/TableEditor.tsx +0 -155
  745. package/src/components/form/fields/schema-definition/TablesTab.tsx +0 -138
  746. package/src/components/form/fields/schema-definition/catalog.ts +0 -237
  747. package/src/components/form/fields/schema-definition/helpers.ts +0 -90
  748. package/src/components/form/fields/schema-definition/index.tsx +0 -418
  749. package/src/components/form/fields/schema-definition/mockCatalog.ts +0 -325
  750. package/src/components/form/fields/schema-definition/mockDefinition.ts +0 -111
  751. package/src/components/form/fields/schema-definition/referenceSuggestions.tsx +0 -152
  752. package/src/components/form/fields/schema-definition/starterTemplate.ts +0 -68
  753. package/src/components/form/fields/schema-definition/types.ts +0 -185
  754. package/src/components/form/fields/schema-definition/useSchemaOptionCatalog.ts +0 -49
  755. package/src/components/form/fields/select/Select.stories.tsx +0 -872
  756. package/src/components/form/fields/select/Select.tsx +0 -624
  757. package/src/components/form/fields/select/SelectCollection.tsx +0 -594
  758. package/src/components/form/fields/string/String.stories.tsx +0 -86
  759. package/src/components/form/fields/string/String.tsx +0 -43
  760. package/src/components/form/fields/template/ExampleValueModal.stories.tsx +0 -114
  761. package/src/components/form/fields/template/ExampleValueModal.tsx +0 -99
  762. package/src/components/form/fields/template/ReadOnlyTemplateTag.tsx +0 -47
  763. package/src/components/form/fields/template/TemplateField.stories.tsx +0 -1121
  764. package/src/components/form/fields/template/TemplateField.tsx +0 -1749
  765. package/src/components/form/fields/template/TemplateText.tsx +0 -115
  766. package/src/components/form/fields/template/__fixtures__/longExampleValue.ts +0 -7
  767. package/src/components/form/fields/template/__fixtures__/multiLevelTemplates.json +0 -147
  768. package/src/components/form/fields/template/__fixtures__/templates.json +0 -83
  769. package/src/components/form/fields/timeout/Timeout.stories.tsx +0 -228
  770. package/src/components/form/fields/timeout/Timeout.tsx +0 -87
  771. package/src/components/form/fields/url/Url.stories.tsx +0 -94
  772. package/src/components/form/fields/url/Url.tsx +0 -85
  773. package/src/components/form/index.tsx +0 -49
  774. package/src/components/imageLightbox/ImageLightbox.stories.tsx +0 -238
  775. package/src/components/imageLightbox/ImageLightbox.tsx +0 -238
  776. package/src/components/imageLightbox/index.ts +0 -1
  777. package/src/components/log/Log.stories.tsx +0 -333
  778. package/src/components/log/Log.tsx +0 -285
  779. package/src/components/menu/Menu.stories.tsx +0 -155
  780. package/src/components/menu/Menu.tsx +0 -312
  781. package/src/components/qonsoleSmartInput/QonsoleSmartInput.stories.tsx +0 -797
  782. package/src/components/qonsoleSmartInput/QonsoleSmartInput.tsx +0 -105
  783. package/src/components/qonsoleSmartInput/index.ts +0 -16
  784. package/src/components/qonsoleSmartInput/qonsoleInserter.ts +0 -77
  785. package/src/components/qonsoleSmartInput/types.ts +0 -133
  786. package/src/components/qonsoleSmartInput/useQonsoleSession.ts +0 -124
  787. package/src/components/searchFilterBar/SearchFilterBar.stories.tsx +0 -62
  788. package/src/components/searchFilterBar/SearchFilterBar.tsx +0 -144
  789. package/src/components/searchFilterBar/index.ts +0 -1
  790. package/src/components/smartEditor/MarkdownDoc.tsx +0 -190
  791. package/src/components/smartEditor/SmartEditor.stories.tsx +0 -475
  792. package/src/components/smartEditor/SmartEditor.tsx +0 -808
  793. package/src/components/smartEditor/__fixtures__/mockLspServer.ts +0 -205
  794. package/src/components/smartEditor/helpers.ts +0 -217
  795. package/src/components/smartEditor/index.ts +0 -35
  796. package/src/components/smartEditor/styling.ts +0 -45
  797. package/src/components/smartEditor/types.ts +0 -211
  798. package/src/components/smartEditor/useLspAutocomplete.ts +0 -758
  799. package/src/components/smartEditor/useLspDiagnosticDecorations.ts +0 -125
  800. package/src/components/smartEditor/useLspHover.ts +0 -230
  801. package/src/components/smartEditor/useLspSemanticTokens.ts +0 -298
  802. package/src/components/smartEditor/useLspSession.ts +0 -231
  803. package/src/components/smartEditor/useLspSignatureHelp.ts +0 -198
  804. package/src/components/supportTicket/AttachmentChips.stories.tsx +0 -171
  805. package/src/components/supportTicket/AttachmentChips.tsx +0 -147
  806. package/src/components/supportTicket/InterfaceReferenceTags.stories.tsx +0 -257
  807. package/src/components/supportTicket/InterfaceReferenceTags.tsx +0 -130
  808. package/src/components/supportTicket/ReferencePicker.stories.tsx +0 -580
  809. package/src/components/supportTicket/ReferencePicker.tsx +0 -573
  810. package/src/components/supportTicket/TicketConversation.stories.tsx +0 -120
  811. package/src/components/supportTicket/TicketHeader.stories.tsx +0 -183
  812. package/src/components/supportTicket/TicketHeader.tsx +0 -248
  813. package/src/components/supportTicket/TicketMetaTags.stories.tsx +0 -103
  814. package/src/components/supportTicket/TicketMetaTags.tsx +0 -85
  815. package/src/components/supportTicket/TicketReplyBox.stories.tsx +0 -357
  816. package/src/components/supportTicket/TicketReplyBox.tsx +0 -172
  817. package/src/components/supportTicket/__fixtures__/kindMarks.ts +0 -28
  818. package/src/components/supportTicket/attachmentAccess.ts +0 -97
  819. package/src/components/supportTicket/fileToAttachment.ts +0 -24
  820. package/src/components/supportTicket/index.ts +0 -10
  821. package/src/components/supportTicket/meta.ts +0 -206
  822. package/src/components/supportTicket/ticketModel.ts +0 -131
  823. package/src/components/supportTicket/useLoadedImages.ts +0 -93
  824. package/src/components/ticketReferences/TicketReferences.stories.tsx +0 -341
  825. package/src/components/ticketReferences/TicketReferences.tsx +0 -914
  826. package/src/components/ticketReferences/index.ts +0 -2
  827. package/src/components/ticketThread/TicketThread.stories.tsx +0 -898
  828. package/src/components/ticketThread/TicketThread.tsx +0 -706
  829. package/src/components/ticketThread/index.ts +0 -6
  830. package/src/contexts/FetchContext.tsx +0 -25
  831. package/src/contexts/ReqraftContext.tsx +0 -9
  832. package/src/contexts/StorageContext.tsx +0 -33
  833. package/src/global.d.ts +0 -4
  834. package/src/helpers/allowedValues.ts +0 -268
  835. package/src/helpers/choiceChip.ts +0 -227
  836. package/src/helpers/common.ts +0 -326
  837. package/src/helpers/dpqlDetection.ts +0 -209
  838. package/src/helpers/expressions.ts +0 -140
  839. package/src/helpers/fieldDescription.ts +0 -39
  840. package/src/helpers/optionUiTypes.ts +0 -199
  841. package/src/helpers/options.ts +0 -150
  842. package/src/helpers/providerValue.ts +0 -125
  843. package/src/helpers/scrollbar.ts +0 -32
  844. package/src/helpers/singleLineString.ts +0 -62
  845. package/src/helpers/templateItems.ts +0 -81
  846. package/src/helpers/templateText.ts +0 -350
  847. package/src/helpers/templates.ts +0 -602
  848. package/src/helpers/validations.ts +0 -2085
  849. package/src/hooks/useArgSchema.ts +0 -37
  850. package/src/hooks/useCoarsePointer.ts +0 -30
  851. package/src/hooks/useFetch/useFetch.stories.tsx +0 -379
  852. package/src/hooks/useFetch/useFetch.tsx +0 -154
  853. package/src/hooks/usePhoneViewport.ts +0 -34
  854. package/src/hooks/useQorusTypes.ts +0 -233
  855. package/src/hooks/useReqraftProperty.ts +0 -16
  856. package/src/hooks/useStorage/useStorage.stories.tsx +0 -168
  857. package/src/hooks/useStorage/useStorage.ts +0 -35
  858. package/src/hooks/useTemplates.ts +0 -123
  859. package/src/hooks/useValidation.ts +0 -9
  860. package/src/hooks/useWebSocket/useWebSocket.ts +0 -224
  861. package/src/hooks/useWebSocket/useWebsocket.stories.tsx +0 -640
  862. package/src/hooks/useWhyDidYouUpdate.ts +0 -38
  863. package/src/index.tsx +0 -86
  864. package/src/providers/FetchProvider.tsx +0 -40
  865. package/src/providers/ReqraftProvider.tsx +0 -52
  866. package/src/providers/StorageProvider.tsx +0 -131
  867. package/src/stores/currentUser/currentUser.stories.tsx +0 -100
  868. package/src/stores/currentUser/currentUser.tsx +0 -94
  869. package/src/stories/Data/fileFieldArgSchema.json +0 -86
  870. package/src/stories/Tests/utils.ts +0 -320
  871. package/src/stories/storyNetwork.ts +0 -92
  872. package/src/stories/tracking.tsx +0 -206
  873. package/src/tracking/browser/attach.ts +0 -186
  874. package/src/tracking/browser/env.ts +0 -78
  875. package/src/tracking/core/consent.ts +0 -37
  876. package/src/tracking/core/engagement.ts +0 -47
  877. package/src/tracking/core/experiments.ts +0 -258
  878. package/src/tracking/core/hash.ts +0 -26
  879. package/src/tracking/core/ids.ts +0 -25
  880. package/src/tracking/core/observable.ts +0 -23
  881. package/src/tracking/core/queue.ts +0 -131
  882. package/src/tracking/core/sections.ts +0 -166
  883. package/src/tracking/core/storage.ts +0 -69
  884. package/src/tracking/core/tracker.ts +0 -417
  885. package/src/tracking/core/types.ts +0 -162
  886. package/src/tracking/core/utm.ts +0 -23
  887. package/src/tracking/index.ts +0 -72
  888. package/src/tracking/markup.ts +0 -17
  889. package/src/tracking/react/Experiment.tsx +0 -44
  890. package/src/tracking/react/TrackingProvider.tsx +0 -56
  891. package/src/tracking/react/hooks.ts +0 -106
  892. package/src/tracking/react/index.ts +0 -13
  893. package/src/tracking/testing.ts +0 -108
  894. package/src/tracking/ui/ExperimentCard.stories.tsx +0 -296
  895. package/src/tracking/ui/ExperimentCard.tsx +0 -667
  896. package/src/tracking/ui/ExperimentsOverlay.stories.tsx +0 -155
  897. package/src/tracking/ui/ExperimentsOverlay.tsx +0 -437
  898. package/src/tracking/ui/anchor.ts +0 -180
  899. package/src/tracking/ui/card.ts +0 -464
  900. package/src/tracking/ui/client.ts +0 -117
  901. package/src/tracking/ui/index.ts +0 -77
  902. package/src/tracking/ui/types.ts +0 -110
  903. package/src/tracking/ui/useExperimentsAdmin.ts +0 -103
  904. package/src/types/Form.ts +0 -29
  905. package/src/types.ts +0 -14
  906. package/src/utils/datetime.ts +0 -10
  907. package/src/utils/fetch.ts +0 -457
  908. package/src/utils/lspClient.ts +0 -711
  909. package/src/utils/lspClient.types.ts +0 -211
  910. package/src/utils/queryUnlessCancelled.ts +0 -28
  911. package/src/utils/websocket.ts +0 -293
  912. package/vite.config.ts +0 -58
  913. package/vitest.config.ts +0 -69
@@ -1,914 +0,0 @@
1
- import {
2
- ReqoreButton,
3
- ReqoreColumns,
4
- ReqoreControlGroup,
5
- ReqoreDropdown,
6
- ReqoreEmptyState,
7
- ReqoreEntityRow,
8
- ReqorePanel,
9
- ReqoreSpan,
10
- ReqoreSpinner,
11
- ReqoreTextEffect,
12
- } from '@qoretechnologies/reqore';
13
- import { IReqoreIconName } from '@qoretechnologies/reqore/dist/types/icons';
14
- import { TReqoreEffectColor } from '@qoretechnologies/reqore/dist/components/Effect';
15
- import type { IReqoreEntityRowAction } from '@qoretechnologies/reqore/dist/components/EntityRow';
16
- import type { IReqorePanelSubAction } from '@qoretechnologies/reqore/dist/components/Panel';
17
- import { useCallback, useEffect, useMemo, useState } from 'react';
18
- import timeago from 'epoch-timeago';
19
- import { SearchFilterBar } from '../searchFilterBar';
20
- import styled from 'styled-components';
21
- import { formatBytes, isImage } from '../../helpers/common';
22
- import { ImageLightbox } from '../imageLightbox';
23
- import {
24
- defaultInterfaceIcon,
25
- IInterfaceReference,
26
- toInterfaceKindMark,
27
- TResolveInterfaceIcon,
28
- TTicketViewerRole,
29
- } from '../supportTicket/meta';
30
- import { loadedImageUrl, useLoadedImages } from '../supportTicket/useLoadedImages';
31
- import type { ITicketThreadAttachment, ITicketThreadMessage } from '../ticketThread/TicketThread';
32
-
33
- /*
34
- * TicketReferences — the consolidated "everything attached to or linked from a
35
- * ticket" surface. It gathers, across the ticket description and every reply:
36
- * • Screenshots — image attachments as a thumbnail grid → a zoom/paging lightbox.
37
- * First: the visual evidence is what a reader scans for.
38
- * • Linked interfaces — the {kind, name} snapshots as rows (kind as metadata),
39
- * sorted by kind then name, matching the file rows below.
40
- * • Files — every other attachment as a type-iconed row with provenance + download.
41
- * None of the mainstream desks (Zendesk/Front/Intercom/…) ship this consolidated
42
- * view, so it's the drawer's differentiator. Rendered as a tab in the staff drawer
43
- * and a panel in the customer modal; only the data + handlers differ by viewer.
44
- */
45
-
46
- /** Attachment metadata as returned by the list endpoint — carries the provenance
47
- * (uploader + timestamp + source message) the message-embedded metadata omits. */
48
- export interface ITicketReferenceAttachment extends ITicketThreadAttachment {
49
- /** the reply this file was attached to; null/absent = ticket-level */
50
- message_id?: string | null;
51
- /** the uploader, resolved + masked like the thread's message author (a staff
52
- * uploader reads as "Qorus Support" on the customer plane, never the raw identity) */
53
- uploaded_by?: string;
54
- /** the kind of party that uploaded the file — lets the viewer label it */
55
- uploader_type?: 'customer' | 'staff';
56
- /** ISO timestamp the file was attached */
57
- created?: string;
58
- }
59
-
60
- export interface ITicketReferencesProps {
61
- /** ticket-level interface references (from `ticket.referenced_interfaces`) */
62
- references?: IInterfaceReference[];
63
- /** the thread — source of message-level references and, as a fallback, attachments */
64
- messages?: ITicketThreadMessage[];
65
- /** the ticket's attachments from the list endpoint; preferred over the message-embedded
66
- * ones because it carries provenance and any ticket-level files. Falls back to `messages`. */
67
- attachments?: ITicketReferenceAttachment[];
68
- viewerRole?: TTicketViewerRole;
69
- /** fetch an attachment's bytes as an object URL, for inline image preview + the lightbox.
70
- * Omitted ⇒ screenshots show as download tiles instead of thumbnails. */
71
- fetchAttachmentUrl?: (attachmentId: string) => Promise<string>;
72
- /** trigger a browser download of an attachment */
73
- onDownloadAttachment?: (attachmentId: string, filename: string) => void;
74
- /** open a referenced interface; reference chips are static (informational) when omitted */
75
- onInterfaceClick?: (reference: IInterfaceReference) => void;
76
- /** Reveal the message a reference or file came from, in the conversation.
77
- * Omitted ⇒ the action is not offered. It is also omitted per-row for anything filed
78
- * against the ticket itself rather than a reply, which has no message to reveal. */
79
- onShowInChat?: (messageId: string) => void;
80
- /** resolve a per-kind icon for a referenced interface (the IDE passes its own
81
- * vocabulary): a font icon, or a mark `{ icon, image }` whose image is drawn once
82
- * it loads, with the font icon before that and instead of it if it fails */
83
- resolveInterfaceIcon?: TResolveInterfaceIcon;
84
- /** Draw the kind's image ahead of a reference's own logo; see `preferKindImage` on
85
- * `InterfaceReferenceTags`. Off by default. */
86
- preferKindImage?: boolean;
87
- loading?: boolean;
88
- }
89
-
90
- // ---------------------------------------------------------------------------
91
- // helpers
92
- // ---------------------------------------------------------------------------
93
- // `epoch-timeago` — the same library reqore's `ReqoreTimeAgo` and the IDE's ticket
94
- // list use. This is a string context (a metadata run), so a helper rather than the
95
- // component; it stays consistent with them instead of a bespoke Intl reimplementation.
96
- const timeAgo = (iso?: string): string => {
97
- if (!iso) {
98
- return '';
99
- }
100
- const ms = Date.parse(iso);
101
- return Number.isNaN(ms) ? '' : timeago(ms);
102
- };
103
-
104
- interface IFileType {
105
- icon: IReqoreIconName;
106
- color: TReqoreEffectColor;
107
- label: string;
108
- }
109
- // MIME → a type icon (glyph) + a category tint, Fluent-style: colour distinguishes
110
- // the file family, the glyph its shape. Tints stay moderate for a dark surface.
111
- const fileType = (contentType: string): IFileType => {
112
- const ct = contentType.toLowerCase();
113
- if (ct === 'application/pdf') {
114
- return { icon: 'FilePdf2Line', color: '#f56059', label: 'PDF' };
115
- }
116
- if (ct.includes('zip') || ct.includes('gzip')) {
117
- return { icon: 'FileZipLine', color: '#f2a63c', label: 'Archive' };
118
- }
119
- if (ct === 'text/csv') {
120
- return { icon: 'FileExcel2Line', color: '#46c96f', label: 'CSV' };
121
- }
122
- if (ct.includes('json') || ct.includes('yaml') || ct.includes('xml')) {
123
- return { icon: 'CodeSLine', color: '#55a0ff', label: 'Data' };
124
- }
125
- if (ct.includes('markdown')) {
126
- return { icon: 'MarkdownLine', color: '#55a0ff', label: 'Markdown' };
127
- }
128
- if (ct === 'text/x-log') {
129
- return { icon: 'FileList2Line', color: '#8b8a97', label: 'Log' };
130
- }
131
- if (ct.startsWith('text/')) {
132
- return { icon: 'FileTextLine', color: '#8b8a97', label: 'Text' };
133
- }
134
- return { icon: 'FileLine', color: '#8b8a97', label: 'File' };
135
- };
136
-
137
- // A coarse file family for the type filter. Images are their own section, so this
138
- // only buckets the non-image "Files"; it mirrors fileType's grouping.
139
- type TFileCategory = 'documents' | 'data' | 'logs' | 'archives';
140
- const fileCategory = (contentType: string): TFileCategory => {
141
- const ct = contentType.toLowerCase();
142
- if (ct.includes('zip') || ct.includes('gzip')) {
143
- return 'archives';
144
- }
145
- if (ct === 'text/x-log') {
146
- return 'logs';
147
- }
148
- if (ct === 'text/csv' || ct.includes('json') || ct.includes('yaml') || ct.includes('xml')) {
149
- return 'data';
150
- }
151
- return 'documents';
152
- };
153
-
154
- // The type filter: 'all' plus one option per section / file-family. Empty families
155
- // are hidden from the menu (a ticket with no archives never offers "Archives").
156
- type TRefFilter = 'all' | 'links' | 'screenshots' | TFileCategory;
157
- type TRefSort = 'newest' | 'oldest' | 'name' | 'size';
158
-
159
- const FILTER_META: Record<TRefFilter, { label: string; icon: IReqoreIconName }> = {
160
- all: { label: 'All types', icon: 'Apps2Line' },
161
- links: { label: 'Linked interfaces', icon: 'LinksLine' },
162
- screenshots: { label: 'Screenshots', icon: 'ImageLine' },
163
- documents: { label: 'Documents', icon: 'FileTextLine' },
164
- data: { label: 'Data', icon: 'CodeSLine' },
165
- logs: { label: 'Logs', icon: 'FileList2Line' },
166
- archives: { label: 'Archives', icon: 'FileZipLine' },
167
- };
168
- // the four filter keys that live inside the "Files" section
169
- const FILE_FILTERS: TFileCategory[] = ['documents', 'data', 'logs', 'archives'];
170
- // menu order mirrors the section order on screen: screenshots, links, then files
171
- const FILTER_ORDER: TRefFilter[] = ['all', 'screenshots', 'links', ...FILE_FILTERS];
172
-
173
- const SORT_META: Record<TRefSort, { label: string; icon: IReqoreIconName }> = {
174
- newest: { label: 'Newest first', icon: 'SortDesc' },
175
- oldest: { label: 'Oldest first', icon: 'SortAsc' },
176
- name: { label: 'Name (A–Z)', icon: 'SortAlphabetAsc' },
177
- size: { label: 'Largest first', icon: 'ScalesLine' },
178
- };
179
- const SORT_ORDER: TRefSort[] = ['newest', 'oldest', 'name', 'size'];
180
-
181
- const createdMs = (a: ITicketReferenceAttachment): number =>
182
- a.created ? new Date(a.created).getTime() || 0 : 0;
183
-
184
- /**
185
- * A reference plus where it was cited.
186
- *
187
- * `message_id` is absent for a ticket-level reference — those are filed against the
188
- * ticket itself (`message_id IS NULL` server-side), so there is no message to reveal
189
- * and "show in chat" must not be offered for them.
190
- */
191
- export interface IResolvedInterfaceReference extends IInterfaceReference {
192
- message_id?: string;
193
- }
194
-
195
- // dedupe a mixed run of references (ticket + every message) by identity — the same
196
- // interface referenced ticket-level and in a reply is one entry, not two.
197
- const dedupeRefs = (refs: IResolvedInterfaceReference[]): IResolvedInterfaceReference[] => {
198
- const byKey = new Map<string, IResolvedInterfaceReference>();
199
- for (const r of refs) {
200
- const key = `${r.interface_kind}:${r.interface_name}`;
201
- const kept = byKey.get(key);
202
- if (!kept) {
203
- byKey.set(key, r);
204
- continue;
205
- }
206
- // The ticket-level copy is merged first and carries no message. When the same
207
- // interface also appears in a reply, adopt that linkage instead of discarding it —
208
- // otherwise an interface that demonstrably IS in the thread offers no way to jump
209
- // to it, purely because it happened to be cited on the ticket as well.
210
- if (!kept.message_id && r.message_id) {
211
- byKey.set(key, { ...kept, message_id: r.message_id });
212
- }
213
- }
214
- return Array.from(byKey.values());
215
- };
216
-
217
- const META_EFFECT = { textSize: 'small', opacity: 0.55 } as const;
218
-
219
- // ---------------------------------------------------------------------------
220
- // image URLs — fetch every screenshot's bytes once as an object URL, cached, and
221
- // revoked on unmount / when the set changes. Shared by the grid and the lightbox.
222
- // ---------------------------------------------------------------------------
223
- const useImageUrls = (
224
- ids: string[],
225
- fetchAttachmentUrl?: (attachmentId: string) => Promise<string>
226
- ): Record<string, string | null> => {
227
- const [urls, setUrls] = useState<Record<string, string | null>>({});
228
- const key = ids.join(',');
229
-
230
- useEffect(() => {
231
- if (!ids.length) {
232
- return undefined;
233
- }
234
- // No fetcher wired means there is no preview to wait for — resolve every id
235
- // straight to the "no preview" state (null) so tiles fall through to the
236
- // filename / download fallback instead of a forever-pending "…" (undefined
237
- // is reserved for a wired fetcher's genuinely in-flight requests).
238
- if (!fetchAttachmentUrl) {
239
- setUrls(Object.fromEntries(ids.map((id) => [id, null])));
240
- return undefined;
241
- }
242
- let active = true;
243
- const created: string[] = [];
244
- Promise.allSettled(
245
- ids.map((id) =>
246
- fetchAttachmentUrl(id)
247
- .then(loadedImageUrl)
248
- .then((url) => ({ id, url }))
249
- )
250
- ).then(
251
- (results) => {
252
- if (!active) {
253
- return;
254
- }
255
- const next: Record<string, string | null> = {};
256
- results.forEach((r, i) => {
257
- if (r.status === 'fulfilled') {
258
- next[r.value.id] = r.value.url;
259
- created.push(r.value.url);
260
- } else {
261
- next[ids[i]] = null;
262
- }
263
- });
264
- setUrls(next);
265
- }
266
- );
267
- return () => {
268
- active = false;
269
- created.forEach((url) => URL.revokeObjectURL(url));
270
- };
271
- // `key` is the stable signature of `ids`; re-run when the image set changes.
272
- }, [key, fetchAttachmentUrl]);
273
-
274
- return urls;
275
- };
276
-
277
- // ---------------------------------------------------------------------------
278
- // styled bits (reqore covers the rest)
279
- // ---------------------------------------------------------------------------
280
- /*
281
- * The search/filter/sort strip reads as part of the list it filters, not as a stray
282
- * row above it: it gets its own tinted, bordered surface and sticks to the top of the
283
- * scroll container. Free-floating, it was easy to lose track of — and scrolling the
284
- * sections took the search box away with them, which is exactly when you want it.
285
- */
286
- /*
287
- * A screenshot tile: the image is the button, and the overflow menu is a sibling
288
- * layered over it — a <button> cannot legally contain another button, so the menu
289
- * cannot live inside Thumb. It stays hidden until the tile is hovered or something
290
- * inside it takes focus, so a wall of screenshots still reads as images rather than
291
- * a grid of controls. Hidden by opacity rather than display, so it remains reachable
292
- * by keyboard.
293
- */
294
- const ThumbTile = styled.div`
295
- position: relative;
296
- /*
297
- * A single-cell grid, not flex: a grid child stretches to fill by default, so the
298
- * thumbnail spans the whole tile and the overlay's top-right corner IS the image's
299
- * top-right corner. Under flex the button sized itself from its aspect-ratio, left a
300
- * strip of empty tile beside it, and the menu — anchored to the tile — landed in that
301
- * strip instead of over the image.
302
- */
303
- display: grid;
304
-
305
- > .screenshot-menu {
306
- position: absolute;
307
- top: 5px;
308
- right: 5px;
309
- opacity: 0;
310
- transition: opacity 0.12s ease-out;
311
- }
312
-
313
- &:hover > .screenshot-menu,
314
- &:focus-within > .screenshot-menu {
315
- opacity: 1;
316
- }
317
- `;
318
-
319
- const Thumb = styled.button`
320
- appearance: none;
321
- border: 1px solid rgba(255, 255, 255, 0.1);
322
- border-radius: 8px;
323
- overflow: hidden;
324
- padding: 0;
325
- cursor: pointer;
326
- aspect-ratio: 1 / 1;
327
- background: rgba(255, 255, 255, 0.03);
328
- display: flex;
329
- align-items: center;
330
- justify-content: center;
331
- position: relative;
332
- transition: border-color 0.15s;
333
- /* A screenshot is something to read, not a hand-off to Qonsole, so its hover and focus
334
- brighten the tile's own edge instead of wearing the product's purple (decision 002). */
335
- &:hover {
336
- border-color: rgba(255, 255, 255, 0.35);
337
- }
338
- &:focus-visible {
339
- outline: 2px solid rgba(255, 255, 255, 0.6);
340
- outline-offset: 2px;
341
- }
342
- img {
343
- width: 100%;
344
- height: 100%;
345
- object-fit: cover;
346
- display: block;
347
- }
348
- `;
349
- const ThumbCaption = styled.span`
350
- position: absolute;
351
- left: 0;
352
- right: 0;
353
- bottom: 0;
354
- padding: 4px 6px;
355
- font-size: 10px;
356
- color: #fff;
357
- background: linear-gradient(0deg, rgba(0, 0, 0, 0.75), transparent);
358
- white-space: nowrap;
359
- overflow: hidden;
360
- text-overflow: ellipsis;
361
- text-align: left;
362
- `;
363
- // ---------------------------------------------------------------------------
364
- // screenshot thumbnail
365
- // ---------------------------------------------------------------------------
366
- const Screenshot = ({
367
- att,
368
- url,
369
- onOpen,
370
- menu,
371
- }: {
372
- att: ITicketReferenceAttachment;
373
- url: string | null | undefined;
374
- onOpen: () => void;
375
- menu?: IReqorePanelSubAction[];
376
- }) => (
377
- <ThumbTile>
378
- <Thumb type='button' title={att.filename} onClick={onOpen}>
379
- {url ?
380
- <img src={url} alt={att.filename} />
381
- : <ReqoreSpan effect={{ opacity: 0.5, textSize: 'small' }}>
382
- {url === null ? att.filename : '…'}
383
- </ReqoreSpan>
384
- }
385
- <ThumbCaption>{att.filename}</ThumbCaption>
386
- </Thumb>
387
- {/* One action doesn't earn a menu. With a single entry the overlay IS that
388
- action, so a tile and a file row offer the same thing the same way instead of
389
- hiding a download behind a caret on one surface and not the other. */}
390
- {menu?.length === 1 ?
391
- <ReqoreButton
392
- className='screenshot-menu'
393
- icon={menu[0].icon}
394
- tooltip={menu[0].label as string}
395
- size='small'
396
- flat
397
- minimal
398
- fixed
399
- onClick={(event: React.MouseEvent<HTMLElement>) => {
400
- event.stopPropagation();
401
- menu[0].onClick?.(menu[0]);
402
- }}
403
- />
404
- : menu?.length ?
405
- <ReqoreDropdown
406
- className='screenshot-menu'
407
- icon='More2Line'
408
- tooltip='More actions'
409
- size='small'
410
- flat
411
- minimal
412
- fixed
413
- useTargetWidth={false}
414
- items={menu}
415
- onClick={(event: React.MouseEvent<HTMLElement>) => event.stopPropagation()}
416
- />
417
- : null}
418
- </ThumbTile>
419
- );
420
-
421
- // ---------------------------------------------------------------------------
422
- // main
423
- // ---------------------------------------------------------------------------
424
- export const TicketReferences = ({
425
- references = [],
426
- messages = [],
427
- attachments,
428
- viewerRole,
429
- fetchAttachmentUrl,
430
- onDownloadAttachment,
431
- onInterfaceClick,
432
- onShowInChat,
433
- resolveInterfaceIcon,
434
- preferKindImage = false,
435
- loading,
436
- }: ITicketReferencesProps) => {
437
- // references: ticket-level + every message's, deduped. Rendered as rows carrying
438
- // their kind as metadata — the same treatment as the files below — so the tab
439
- // reads as one consistent list rather than chips above rows.
440
- const allRefs = useMemo(
441
- () =>
442
- dedupeRefs([
443
- // ticket-level first (no message), then each message's own citations tagged
444
- // with the message they came from
445
- ...references,
446
- ...messages.flatMap((m) =>
447
- (m.referenced_interfaces ?? []).map((r) => ({ ...r, message_id: m.message_id }))
448
- ),
449
- ]),
450
- [references, messages]
451
- );
452
- const resolveIcon = resolveInterfaceIcon ?? defaultInterfaceIcon;
453
- /* Each reference's icon: the kind's font icon, and the image chosen by the same
454
- precedence as the chips (`preferKindImage`), drawn once it has loaded. */
455
- const markOf = (reference: IInterfaceReference) => {
456
- const mark = toInterfaceKindMark(resolveIcon(reference.interface_kind));
457
- const own = reference.logo;
458
- return {
459
- icon: mark.icon,
460
- image: preferKindImage ? (mark.image ?? own) : (own ?? mark.image),
461
- };
462
- };
463
- const isImageLoaded = useLoadedImages(allRefs.map((reference) => markOf(reference).image));
464
-
465
- /**
466
- * The trailing controls for a row: its primary action, plus a "three dots" menu when
467
- * there is anything else to offer. Built in one place so the interface rows and the
468
- * file rows can't drift into different affordances.
469
- *
470
- * The menu is omitted entirely when it would be empty — a row filed against the
471
- * ticket rather than a reply has no message to reveal, and an always-present menu
472
- * that is sometimes empty is worse than no menu.
473
- */
474
- /**
475
- * The reveal action. One definition, used by the reference rows, the file rows and
476
- * the screenshot tiles.
477
- *
478
- * Present on every row, but DISABLED for anything filed against the ticket itself
479
- * rather than a reply — those have no message to jump to. Showing the menu on some
480
- * rows and not others read as breakage rather than as a distinction, and the
481
- * disabled entry says why instead of leaving the reader to infer it.
482
- */
483
- const showInChatItem = (messageId?: string | null): IReqorePanelSubAction[] => {
484
- if (!onShowInChat) {
485
- return [];
486
- }
487
- return messageId ?
488
- [{ label: 'Show in chat', icon: 'Chat1Line', onClick: () => onShowInChat(messageId) }]
489
- : [
490
- {
491
- label: 'Show in chat',
492
- icon: 'Chat1Line',
493
- disabled: true,
494
- description: 'Filed on the ticket, not in a reply',
495
- },
496
- ];
497
- };
498
-
499
- const rowActions = (
500
- primary: IReqoreEntityRowAction | undefined,
501
- messageId?: string | null
502
- ): IReqoreEntityRowAction[] => {
503
- const menu = showInChatItem(messageId);
504
-
505
- return [
506
- ...(primary ? [primary] : []),
507
- ...(menu.length ?
508
- [
509
- {
510
- icon: 'More2Line' as IReqoreIconName,
511
- tooltip: 'More actions',
512
- flat: true,
513
- minimal: true,
514
- actions: menu,
515
- },
516
- ]
517
- : []),
518
- ];
519
- };
520
-
521
- // attachments: the list-endpoint set (with provenance) or, failing that, the
522
- // ones embedded per message (deriving provenance from the carrying message)
523
- const allAttachments = useMemo<ITicketReferenceAttachment[]>(() => {
524
- const source: ITicketReferenceAttachment[] =
525
- attachments ??
526
- messages.flatMap((m) =>
527
- (m.attachments ?? []).map((a) => ({
528
- ...a,
529
- message_id: m.message_id,
530
- uploaded_by: m.author_id,
531
- created: m.created,
532
- }))
533
- );
534
- const seen = new Set<string>();
535
- return source.filter((a) => {
536
- if (seen.has(a.attachment_id)) {
537
- return false;
538
- }
539
- seen.add(a.attachment_id);
540
- return true;
541
- });
542
- }, [attachments, messages]);
543
-
544
- const images = useMemo(
545
- () => allAttachments.filter((a) => isImage(a.content_type)),
546
- [allAttachments]
547
- );
548
- const files = useMemo(
549
- () => allAttachments.filter((a) => !isImage(a.content_type)),
550
- [allAttachments]
551
- );
552
-
553
- const imageIds = useMemo(() => images.map((a) => a.attachment_id), [images]);
554
- const urls = useImageUrls(imageIds, fetchAttachmentUrl);
555
-
556
- const [lightbox, setLightbox] = useState<number | null>(null);
557
-
558
- // --- search / filter / sort ------------------------------------------------
559
- const [search, setSearch] = useState('');
560
- const [filter, setFilter] = useState<TRefFilter>('all');
561
- const [sort, setSort] = useState<TRefSort>('newest');
562
-
563
- const query = search.trim().toLowerCase();
564
- const matchesText = useCallback(
565
- (...fields: (string | undefined)[]) =>
566
- !query || fields.some((f) => f?.toLowerCase().includes(query)),
567
- [query]
568
- );
569
-
570
- const sortAttachments = useCallback(
571
- (arr: ITicketReferenceAttachment[]): ITicketReferenceAttachment[] => {
572
- const next = [...arr];
573
- switch (sort) {
574
- case 'oldest':
575
- return next.sort((a, b) => createdMs(a) - createdMs(b));
576
- case 'name':
577
- return next.sort((a, b) => a.filename.localeCompare(b.filename));
578
- case 'size':
579
- return next.sort((a, b) => (b.size_bytes ?? 0) - (a.size_bytes ?? 0));
580
- case 'newest':
581
- default:
582
- return next.sort((a, b) => createdMs(b) - createdMs(a));
583
- }
584
- },
585
- [sort]
586
- );
587
-
588
- // per-family counts feed the filter menu: empty families are dropped, and the
589
- // surviving ones carry a count badge in their label.
590
- const counts = useMemo(() => {
591
- const byCategory: Record<TFileCategory, number> = {
592
- documents: 0,
593
- data: 0,
594
- logs: 0,
595
- archives: 0,
596
- };
597
- for (const f of files) {
598
- byCategory[fileCategory(f.content_type)] += 1;
599
- }
600
- return {
601
- all: allRefs.length + allAttachments.length,
602
- links: allRefs.length,
603
- screenshots: images.length,
604
- ...byCategory,
605
- } as Record<TRefFilter, number>;
606
- }, [files, images.length, allRefs.length, allAttachments.length]);
607
-
608
- // the three sections after search + type filter are applied. References sort by
609
- // kind then name so like sits with like; "Name" sorts them purely by name.
610
- const visibleRefs = useMemo(() => {
611
- if (filter !== 'all' && filter !== 'links') {
612
- return [] as IResolvedInterfaceReference[];
613
- }
614
- return allRefs
615
- .filter((r) => matchesText(r.interface_name, r.interface_kind))
616
- .sort((a, b) =>
617
- sort === 'name' ?
618
- a.interface_name.localeCompare(b.interface_name)
619
- : a.interface_kind.localeCompare(b.interface_kind) ||
620
- a.interface_name.localeCompare(b.interface_name)
621
- );
622
- }, [allRefs, filter, matchesText, sort]);
623
-
624
- const visibleImages = useMemo(() => {
625
- if (filter !== 'all' && filter !== 'screenshots') {
626
- return [] as ITicketReferenceAttachment[];
627
- }
628
- return sortAttachments(images.filter((a) => matchesText(a.filename)));
629
- }, [images, filter, matchesText, sortAttachments]);
630
-
631
- const visibleFiles = useMemo(() => {
632
- const fileFilter = FILE_FILTERS.includes(filter as TFileCategory);
633
- if (filter !== 'all' && !fileFilter) {
634
- return [] as ITicketReferenceAttachment[];
635
- }
636
- let list = files.filter((a) => matchesText(a.filename));
637
- if (fileFilter) {
638
- list = list.filter((a) => fileCategory(a.content_type) === filter);
639
- }
640
- return sortAttachments(list);
641
- }, [files, filter, matchesText, sortAttachments]);
642
-
643
- // a filtered-out lightbox target would dangle — close it if its index falls away
644
- useEffect(() => {
645
- if (lightbox !== null && lightbox >= visibleImages.length) {
646
- setLightbox(null);
647
- }
648
- }, [visibleImages.length, lightbox]);
649
-
650
- if (loading) {
651
- return (
652
- <ReqoreControlGroup fluid horizontalAlign='center' style={{ padding: '32px 0' }}>
653
- <ReqoreSpinner iconColor='info' size='big'>
654
- Loading references…
655
- </ReqoreSpinner>
656
- </ReqoreControlGroup>
657
- );
658
- }
659
-
660
- if (!allRefs.length && !allAttachments.length) {
661
- return (
662
- <ReqoreEmptyState
663
- icon='FolderInfoLine'
664
- title='No references or files yet'
665
- description='Interface references and any screenshots, documents, or files attached to this ticket will appear here.'
666
- flat
667
- transparent
668
- />
669
- );
670
- }
671
-
672
- // A search + type-filter + sort strip, shown once a ticket carries enough to be
673
- // worth narrowing (any files, or 3+ linked interfaces). Empty type-families are
674
- // dropped from the filter menu so it only ever offers what's actually present.
675
- const showControls = allAttachments.length > 0 || allRefs.length > 2;
676
- const filterOptions = FILTER_ORDER.filter((key) => key === 'all' || counts[key] > 0);
677
- const nothingVisible = !visibleRefs.length && !visibleImages.length && !visibleFiles.length;
678
-
679
- const controlBar =
680
- showControls ?
681
- <SearchFilterBar
682
- sticky
683
- value={search}
684
- onChange={setSearch}
685
- placeholder='Search files and references…'
686
- filters={[
687
- {
688
- icon: FILTER_META[filter].icon,
689
- label: FILTER_META[filter].label,
690
- items: filterOptions.map((key) => ({
691
- selected: filter === key,
692
- icon: FILTER_META[key].icon,
693
- label:
694
- key === 'all' ?
695
- FILTER_META.all.label
696
- : `${FILTER_META[key].label} (${counts[key]})`,
697
- onClick: () => setFilter(key),
698
- })),
699
- },
700
- {
701
- icon: 'ArrowUpDownLine',
702
- label: SORT_META[sort].label,
703
- items: SORT_ORDER.map((key) => ({
704
- selected: sort === key,
705
- icon: SORT_META[key].icon,
706
- label: SORT_META[key].label,
707
- onClick: () => setSort(key),
708
- })),
709
- },
710
- ]}
711
- />
712
- : null;
713
-
714
- return (
715
- <ReqoreControlGroup vertical fluid gapSize='big'>
716
- {controlBar}
717
-
718
- {nothingVisible ?
719
- <ReqoreEmptyState
720
- icon='Search2Line'
721
- title='No matching references or files'
722
- description={
723
- query ?
724
- `Nothing here matches “${search.trim()}”.`
725
- : 'Nothing matches the current filter.'
726
- }
727
- flat
728
- transparent
729
- actions={
730
- <ReqoreButton
731
- icon='CloseLine'
732
- minimal
733
- onClick={() => {
734
- setSearch('');
735
- setFilter('all');
736
- }}
737
- >
738
- Clear filters
739
- </ReqoreButton>
740
- }
741
- />
742
- : null}
743
-
744
- {visibleImages.length ?
745
- <ReqorePanel
746
- label='Screenshots'
747
- icon='ImageLine'
748
- badge={visibleImages.length}
749
- flat
750
- transparent
751
- size='small'
752
- labelSize={4}
753
- collapsible
754
- >
755
- <ReqoreColumns columns='auto-fill' minColumnWidth='140px' columnsGap='10px'>
756
- {visibleImages.map((att, i) => (
757
- <Screenshot
758
- key={att.attachment_id}
759
- att={att}
760
- url={urls[att.attachment_id]}
761
- onOpen={() =>
762
- urls[att.attachment_id] ?
763
- setLightbox(i)
764
- : onDownloadAttachment?.(att.attachment_id, att.filename)
765
- }
766
- menu={[
767
- ...(onDownloadAttachment ?
768
- [
769
- {
770
- label: 'Download',
771
- icon: 'DownloadLine' as IReqoreIconName,
772
- onClick: () => onDownloadAttachment(att.attachment_id, att.filename),
773
- },
774
- ]
775
- : []),
776
- ...showInChatItem(att.message_id),
777
- ]}
778
- />
779
- ))}
780
- </ReqoreColumns>
781
- </ReqorePanel>
782
- : null}
783
-
784
- {visibleRefs.length ?
785
- <ReqorePanel
786
- label='Linked interfaces'
787
- icon='LinksLine'
788
- badge={visibleRefs.length}
789
- flat
790
- transparent
791
- size='small'
792
- labelSize={4}
793
- collapsible
794
- >
795
- {/* small rows: a reference list is scanned, so density beats presence —
796
- the group's size reaches every row (ControlGroup/index.tsx:436) */}
797
- <ReqoreControlGroup vertical fluid gapSize='small' size='small'>
798
- {visibleRefs.map((reference) => {
799
- // the same vocabulary and precedence as the reference chips: the kind's
800
- // font icon, and the chosen image once it has loaded
801
- const { icon, image } = markOf(reference);
802
- return (
803
- <ReqoreEntityRow
804
- key={
805
- reference.reference_id ??
806
- `${reference.interface_kind}:${reference.interface_name}`
807
- }
808
- icon={icon}
809
- iconImage={isImageLoaded(image) ? image : undefined}
810
- label={reference.interface_name}
811
- metadata={
812
- <ReqoreTextEffect effect={META_EFFECT}>
813
- {reference.interface_kind}
814
- </ReqoreTextEffect>
815
- }
816
- flat
817
- tooltip={
818
- onInterfaceClick ?
819
- `Open ${reference.interface_kind} ${reference.interface_name}`
820
- : undefined
821
- }
822
- actions={rowActions(
823
- onInterfaceClick ?
824
- {
825
- icon: 'ArrowRightUpLine',
826
- tooltip: 'Open',
827
- onClick: () => onInterfaceClick(reference),
828
- }
829
- : undefined,
830
- reference.message_id
831
- )}
832
- />
833
- );
834
- })}
835
- </ReqoreControlGroup>
836
- </ReqorePanel>
837
- : null}
838
-
839
- {visibleFiles.length ?
840
- <ReqorePanel
841
- label='Files'
842
- icon='FileList3Line'
843
- badge={visibleFiles.length}
844
- flat
845
- transparent
846
- size='small'
847
- labelSize={4}
848
- collapsible
849
- actions={
850
- visibleFiles.length > 1 && onDownloadAttachment ?
851
- [
852
- {
853
- icon: 'DownloadCloud2Line',
854
- label: 'Download all',
855
- onClick: () =>
856
- visibleFiles.forEach((f) => onDownloadAttachment(f.attachment_id, f.filename)),
857
- },
858
- ]
859
- : []
860
- }
861
- >
862
- {/* matches the interface rows above — the two lists read as one surface */}
863
- <ReqoreControlGroup vertical fluid gapSize='small' size='small'>
864
- {visibleFiles.map((f) => {
865
- const type = fileType(f.content_type);
866
- // a customer's own upload reads "you"; everything else shows the
867
- // (already server-masked) uploader — "Qorus Support" for staff replies.
868
- const uploader =
869
- viewerRole === 'customer' && f.uploader_type === 'customer' ? 'you' : f.uploaded_by;
870
- const provenance = [
871
- formatBytes(f.size_bytes),
872
- uploader ? `added by ${uploader}` : undefined,
873
- timeAgo(f.created) || undefined,
874
- ]
875
- .filter(Boolean)
876
- .join(' · ');
877
- return (
878
- <ReqoreEntityRow
879
- key={f.attachment_id}
880
- icon={type.icon}
881
- iconColor={type.color}
882
- label={f.filename}
883
- metadata={<ReqoreTextEffect effect={META_EFFECT}>{provenance}</ReqoreTextEffect>}
884
- flat
885
- actions={rowActions(
886
- onDownloadAttachment ?
887
- {
888
- icon: 'DownloadLine',
889
- tooltip: 'Download',
890
- onClick: () => onDownloadAttachment(f.attachment_id, f.filename),
891
- }
892
- : undefined,
893
- f.message_id
894
- )}
895
- />
896
- );
897
- })}
898
- </ReqoreControlGroup>
899
- </ReqorePanel>
900
- : null}
901
-
902
- {lightbox !== null && fetchAttachmentUrl ?
903
- <ImageLightbox
904
- images={visibleImages}
905
- index={lightbox}
906
- onIndex={setLightbox}
907
- onClose={() => setLightbox(null)}
908
- fetchAttachmentUrl={fetchAttachmentUrl}
909
- onDownload={onDownloadAttachment}
910
- />
911
- : null}
912
- </ReqoreControlGroup>
913
- );
914
- };