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

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