@qoretechnologies/reqraft 0.10.25 → 0.10.26

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 (310) hide show
  1. package/.claude/CLAUDE.md +52 -23
  2. package/design/COMPACT_ENGINE_REDESIGN.md +156 -0
  3. package/design/FORM_ENGINE_COMPACT_UX_PLAN.md +353 -0
  4. package/dist/components/FocusedEditing/index.d.ts +9 -1
  5. package/dist/components/FocusedEditing/index.d.ts.map +1 -1
  6. package/dist/components/FocusedEditing/index.js +2 -2
  7. package/dist/components/FocusedEditing/index.js.map +1 -1
  8. package/dist/components/composer/Composer.d.ts +108 -0
  9. package/dist/components/composer/Composer.d.ts.map +1 -0
  10. package/dist/components/composer/Composer.js +238 -0
  11. package/dist/components/composer/Composer.js.map +1 -0
  12. package/dist/components/composer/helpers.d.ts +21 -0
  13. package/dist/components/composer/helpers.d.ts.map +1 -0
  14. package/dist/components/composer/helpers.js +75 -0
  15. package/dist/components/composer/helpers.js.map +1 -0
  16. package/dist/components/composer/index.d.ts +3 -0
  17. package/dist/components/composer/index.d.ts.map +1 -0
  18. package/dist/components/composer/index.js +19 -0
  19. package/dist/components/composer/index.js.map +1 -0
  20. package/dist/components/form/engine/CompactRow.d.ts.map +1 -1
  21. package/dist/components/form/engine/CompactRow.js +307 -110
  22. package/dist/components/form/engine/CompactRow.js.map +1 -1
  23. package/dist/components/form/engine/CompactToolbar.d.ts.map +1 -1
  24. package/dist/components/form/engine/CompactToolbar.js +123 -106
  25. package/dist/components/form/engine/CompactToolbar.js.map +1 -1
  26. package/dist/components/form/engine/FormEngine.d.ts +107 -11
  27. package/dist/components/form/engine/FormEngine.d.ts.map +1 -1
  28. package/dist/components/form/engine/FormEngine.js +618 -179
  29. package/dist/components/form/engine/FormEngine.js.map +1 -1
  30. package/dist/components/form/engine/compactRowContext.d.ts +9 -0
  31. package/dist/components/form/engine/compactRowContext.d.ts.map +1 -1
  32. package/dist/components/form/engine/compactRowContext.js.map +1 -1
  33. package/dist/components/form/engine/compactRowStyles.d.ts +7 -3
  34. package/dist/components/form/engine/compactRowStyles.d.ts.map +1 -1
  35. package/dist/components/form/engine/compactRowStyles.js +88 -51
  36. package/dist/components/form/engine/compactRowStyles.js.map +1 -1
  37. package/dist/components/form/engine/compactToolbarContext.d.ts +1 -0
  38. package/dist/components/form/engine/compactToolbarContext.d.ts.map +1 -1
  39. package/dist/components/form/engine/compactToolbarContext.js.map +1 -1
  40. package/dist/components/form/engine/optionActions.d.ts +28 -0
  41. package/dist/components/form/engine/optionActions.d.ts.map +1 -0
  42. package/dist/components/form/engine/optionActions.js +18 -0
  43. package/dist/components/form/engine/optionActions.js.map +1 -0
  44. package/dist/components/form/engine/readFirst.d.ts +63 -2
  45. package/dist/components/form/engine/readFirst.d.ts.map +1 -1
  46. package/dist/components/form/engine/readFirst.js +121 -6
  47. package/dist/components/form/engine/readFirst.js.map +1 -1
  48. package/dist/components/form/engine/rendererTypes.d.ts +35 -0
  49. package/dist/components/form/engine/rendererTypes.d.ts.map +1 -0
  50. package/dist/components/form/engine/rendererTypes.js +63 -0
  51. package/dist/components/form/engine/rendererTypes.js.map +1 -0
  52. package/dist/components/form/engine/variants/VariantCalmTable.d.ts +6 -0
  53. package/dist/components/form/engine/variants/VariantCalmTable.d.ts.map +1 -0
  54. package/dist/components/form/engine/variants/VariantCalmTable.js +94 -0
  55. package/dist/components/form/engine/variants/VariantCalmTable.js.map +1 -0
  56. package/dist/components/form/engine/variants/VariantCards.d.ts +6 -0
  57. package/dist/components/form/engine/variants/VariantCards.d.ts.map +1 -0
  58. package/dist/components/form/engine/variants/VariantCards.js +80 -0
  59. package/dist/components/form/engine/variants/VariantCards.js.map +1 -0
  60. package/dist/components/form/engine/variants/VariantFocus.d.ts +7 -0
  61. package/dist/components/form/engine/variants/VariantFocus.d.ts.map +1 -0
  62. package/dist/components/form/engine/variants/VariantFocus.js +138 -0
  63. package/dist/components/form/engine/variants/VariantFocus.js.map +1 -0
  64. package/dist/components/form/engine/variants/VariantMinimal.d.ts +6 -0
  65. package/dist/components/form/engine/variants/VariantMinimal.d.ts.map +1 -0
  66. package/dist/components/form/engine/variants/VariantMinimal.js +73 -0
  67. package/dist/components/form/engine/variants/VariantMinimal.js.map +1 -0
  68. package/dist/components/form/engine/variants/focusDemo.d.ts +13 -0
  69. package/dist/components/form/engine/variants/focusDemo.d.ts.map +1 -0
  70. package/dist/components/form/engine/variants/focusDemo.js +139 -0
  71. package/dist/components/form/engine/variants/focusDemo.js.map +1 -0
  72. package/dist/components/form/engine/variants/variantModel.d.ts +70 -0
  73. package/dist/components/form/engine/variants/variantModel.d.ts.map +1 -0
  74. package/dist/components/form/engine/variants/variantModel.js +133 -0
  75. package/dist/components/form/engine/variants/variantModel.js.map +1 -0
  76. package/dist/components/form/engine/variants/variantParts.d.ts +79 -0
  77. package/dist/components/form/engine/variants/variantParts.d.ts.map +1 -0
  78. package/dist/components/form/engine/variants/variantParts.js +191 -0
  79. package/dist/components/form/engine/variants/variantParts.js.map +1 -0
  80. package/dist/components/form/expressions/builder/index.d.ts.map +1 -1
  81. package/dist/components/form/expressions/builder/index.js +13 -2
  82. package/dist/components/form/expressions/builder/index.js.map +1 -1
  83. package/dist/components/form/expressions/useExpressions.d.ts.map +1 -1
  84. package/dist/components/form/expressions/useExpressions.js +4 -1
  85. package/dist/components/form/expressions/useExpressions.js.map +1 -1
  86. package/dist/components/form/fields/Field.d.ts.map +1 -1
  87. package/dist/components/form/fields/Field.js +5 -3
  88. package/dist/components/form/fields/Field.js.map +1 -1
  89. package/dist/components/form/fields/allowed-values/AllowedValues.d.ts +2 -1
  90. package/dist/components/form/fields/allowed-values/AllowedValues.d.ts.map +1 -1
  91. package/dist/components/form/fields/allowed-values/AllowedValues.js +8 -26
  92. package/dist/components/form/fields/allowed-values/AllowedValues.js.map +1 -1
  93. package/dist/components/form/fields/auto/AutoFormField.d.ts +3 -0
  94. package/dist/components/form/fields/auto/AutoFormField.d.ts.map +1 -1
  95. package/dist/components/form/fields/auto/AutoFormField.js +42 -8
  96. package/dist/components/form/fields/auto/AutoFormField.js.map +1 -1
  97. package/dist/components/form/fields/binary/Binary.d.ts +15 -0
  98. package/dist/components/form/fields/binary/Binary.d.ts.map +1 -0
  99. package/dist/components/form/fields/binary/Binary.js +74 -0
  100. package/dist/components/form/fields/binary/Binary.js.map +1 -0
  101. package/dist/components/form/fields/boolean/Boolean.js +1 -1
  102. package/dist/components/form/fields/boolean/Boolean.js.map +1 -1
  103. package/dist/components/form/fields/multi-select/MultiSelectFormField.d.ts.map +1 -1
  104. package/dist/components/form/fields/multi-select/MultiSelectFormField.js +5 -4
  105. package/dist/components/form/fields/multi-select/MultiSelectFormField.js.map +1 -1
  106. package/dist/components/form/fields/select/Select.d.ts.map +1 -1
  107. package/dist/components/form/fields/select/Select.js +29 -12
  108. package/dist/components/form/fields/select/Select.js.map +1 -1
  109. package/dist/components/form/fields/select/SelectCollection.d.ts +8 -2
  110. package/dist/components/form/fields/select/SelectCollection.d.ts.map +1 -1
  111. package/dist/components/form/fields/select/SelectCollection.js +52 -16
  112. package/dist/components/form/fields/select/SelectCollection.js.map +1 -1
  113. package/dist/components/form/index.d.ts +2 -0
  114. package/dist/components/form/index.d.ts.map +1 -1
  115. package/dist/components/form/index.js +2 -0
  116. package/dist/components/form/index.js.map +1 -1
  117. package/dist/components/imageLightbox/ImageLightbox.d.ts +21 -0
  118. package/dist/components/imageLightbox/ImageLightbox.d.ts.map +1 -0
  119. package/dist/components/imageLightbox/ImageLightbox.js +169 -0
  120. package/dist/components/imageLightbox/ImageLightbox.js.map +1 -0
  121. package/dist/components/imageLightbox/index.d.ts +2 -0
  122. package/dist/components/imageLightbox/index.d.ts.map +1 -0
  123. package/dist/components/imageLightbox/index.js +18 -0
  124. package/dist/components/imageLightbox/index.js.map +1 -0
  125. package/dist/components/searchFilterBar/SearchFilterBar.d.ts +33 -0
  126. package/dist/components/searchFilterBar/SearchFilterBar.d.ts.map +1 -0
  127. package/dist/components/searchFilterBar/SearchFilterBar.js +76 -0
  128. package/dist/components/searchFilterBar/SearchFilterBar.js.map +1 -0
  129. package/dist/components/searchFilterBar/index.d.ts +2 -0
  130. package/dist/components/searchFilterBar/index.d.ts.map +1 -0
  131. package/dist/components/searchFilterBar/index.js +18 -0
  132. package/dist/components/searchFilterBar/index.js.map +1 -0
  133. package/dist/components/supportTicket/AttachmentChips.d.ts +10 -0
  134. package/dist/components/supportTicket/AttachmentChips.d.ts.map +1 -0
  135. package/dist/components/supportTicket/AttachmentChips.js +122 -0
  136. package/dist/components/supportTicket/AttachmentChips.js.map +1 -0
  137. package/dist/components/supportTicket/InterfaceReferenceTags.d.ts +43 -0
  138. package/dist/components/supportTicket/InterfaceReferenceTags.d.ts.map +1 -0
  139. package/dist/components/supportTicket/InterfaceReferenceTags.js +31 -0
  140. package/dist/components/supportTicket/InterfaceReferenceTags.js.map +1 -0
  141. package/dist/components/supportTicket/ReferencePicker.d.ts +87 -0
  142. package/dist/components/supportTicket/ReferencePicker.d.ts.map +1 -0
  143. package/dist/components/supportTicket/ReferencePicker.js +295 -0
  144. package/dist/components/supportTicket/ReferencePicker.js.map +1 -0
  145. package/dist/components/supportTicket/TicketHeader.d.ts +86 -0
  146. package/dist/components/supportTicket/TicketHeader.d.ts.map +1 -0
  147. package/dist/components/supportTicket/TicketHeader.js +149 -0
  148. package/dist/components/supportTicket/TicketHeader.js.map +1 -0
  149. package/dist/components/supportTicket/TicketMetaTags.d.ts +32 -0
  150. package/dist/components/supportTicket/TicketMetaTags.d.ts.map +1 -0
  151. package/dist/components/supportTicket/TicketMetaTags.js +21 -0
  152. package/dist/components/supportTicket/TicketMetaTags.js.map +1 -0
  153. package/dist/components/supportTicket/TicketReplyBox.d.ts +63 -0
  154. package/dist/components/supportTicket/TicketReplyBox.d.ts.map +1 -0
  155. package/dist/components/supportTicket/TicketReplyBox.js +115 -0
  156. package/dist/components/supportTicket/TicketReplyBox.js.map +1 -0
  157. package/dist/components/supportTicket/attachmentAccess.d.ts +37 -0
  158. package/dist/components/supportTicket/attachmentAccess.d.ts.map +1 -0
  159. package/dist/components/supportTicket/attachmentAccess.js +132 -0
  160. package/dist/components/supportTicket/attachmentAccess.js.map +1 -0
  161. package/dist/components/supportTicket/fileToAttachment.d.ts +9 -0
  162. package/dist/components/supportTicket/fileToAttachment.d.ts.map +1 -0
  163. package/dist/components/supportTicket/fileToAttachment.js +28 -0
  164. package/dist/components/supportTicket/fileToAttachment.js.map +1 -0
  165. package/dist/components/supportTicket/index.d.ts +11 -0
  166. package/dist/components/supportTicket/index.d.ts.map +1 -0
  167. package/dist/components/supportTicket/index.js +27 -0
  168. package/dist/components/supportTicket/index.js.map +1 -0
  169. package/dist/components/supportTicket/meta.d.ts +71 -0
  170. package/dist/components/supportTicket/meta.d.ts.map +1 -0
  171. package/dist/components/supportTicket/meta.js +115 -0
  172. package/dist/components/supportTicket/meta.js.map +1 -0
  173. package/dist/components/supportTicket/ticketModel.d.ts +102 -0
  174. package/dist/components/supportTicket/ticketModel.d.ts.map +1 -0
  175. package/dist/components/supportTicket/ticketModel.js +3 -0
  176. package/dist/components/supportTicket/ticketModel.js.map +1 -0
  177. package/dist/components/ticketReferences/TicketReferences.d.ts +52 -0
  178. package/dist/components/ticketReferences/TicketReferences.d.ts.map +1 -0
  179. package/dist/components/ticketReferences/TicketReferences.js +492 -0
  180. package/dist/components/ticketReferences/TicketReferences.js.map +1 -0
  181. package/dist/components/ticketReferences/index.d.ts +3 -0
  182. package/dist/components/ticketReferences/index.d.ts.map +1 -0
  183. package/dist/components/ticketReferences/index.js +6 -0
  184. package/dist/components/ticketReferences/index.js.map +1 -0
  185. package/dist/components/ticketThread/TicketThread.d.ts +57 -0
  186. package/dist/components/ticketThread/TicketThread.d.ts.map +1 -0
  187. package/dist/components/ticketThread/TicketThread.js +299 -0
  188. package/dist/components/ticketThread/TicketThread.js.map +1 -0
  189. package/dist/components/ticketThread/index.d.ts +3 -0
  190. package/dist/components/ticketThread/index.d.ts.map +1 -0
  191. package/dist/components/ticketThread/index.js +7 -0
  192. package/dist/components/ticketThread/index.js.map +1 -0
  193. package/dist/helpers/common.d.ts +5 -0
  194. package/dist/helpers/common.d.ts.map +1 -1
  195. package/dist/helpers/common.js +20 -1
  196. package/dist/helpers/common.js.map +1 -1
  197. package/dist/helpers/scrollbar.d.ts +2 -0
  198. package/dist/helpers/scrollbar.d.ts.map +1 -0
  199. package/dist/helpers/scrollbar.js +25 -0
  200. package/dist/helpers/scrollbar.js.map +1 -0
  201. package/dist/index.d.ts +8 -1
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +10 -1
  204. package/dist/index.js.map +1 -1
  205. package/dist/providers/StorageProvider.d.ts +13 -0
  206. package/dist/providers/StorageProvider.d.ts.map +1 -1
  207. package/dist/providers/StorageProvider.js +29 -5
  208. package/dist/providers/StorageProvider.js.map +1 -1
  209. package/package.json +6 -5
  210. package/src/components/FocusedEditing/index.tsx +17 -2
  211. package/src/components/composer/Composer.stories.tsx +238 -0
  212. package/src/components/composer/Composer.tsx +545 -0
  213. package/src/components/composer/helpers.ts +74 -0
  214. package/src/components/composer/index.ts +2 -0
  215. package/src/components/dpqlEditor/DpqlEditor.stories.tsx +74 -2
  216. package/src/components/form/engine/CompactRow.tsx +561 -283
  217. package/src/components/form/engine/CompactToolbar.tsx +216 -182
  218. package/src/components/form/engine/FormEngine.stories.tsx +1736 -162
  219. package/src/components/form/engine/FormEngine.tsx +886 -170
  220. package/src/components/form/engine/FormEngineRemote.stories.tsx +377 -0
  221. package/src/components/form/engine/_structuredData/StructuredDataView.stories.tsx +8 -0
  222. package/src/components/form/engine/compactRowContext.ts +14 -0
  223. package/src/components/form/engine/compactRowStyles.ts +273 -146
  224. package/src/components/form/engine/compactToolbarContext.ts +1 -0
  225. package/src/components/form/engine/optionActions.ts +40 -0
  226. package/src/components/form/engine/readFirst.ts +169 -10
  227. package/src/components/form/engine/rendererTypes.ts +55 -0
  228. package/src/components/form/engine/variants/FormEngineVariants.stories.tsx +159 -0
  229. package/src/components/form/engine/variants/VariantCalmTable.tsx +242 -0
  230. package/src/components/form/engine/variants/VariantCards.tsx +212 -0
  231. package/src/components/form/engine/variants/VariantFocus.tsx +382 -0
  232. package/src/components/form/engine/variants/VariantMinimal.tsx +170 -0
  233. package/src/components/form/engine/variants/focusDemo.ts +145 -0
  234. package/src/components/form/engine/variants/variantModel.ts +216 -0
  235. package/src/components/form/engine/variants/variantParts.tsx +313 -0
  236. package/src/components/form/expressions/ExpressionField.stories.tsx +84 -2
  237. package/src/components/form/expressions/builder/ExpressionBuilder.stories.tsx +213 -19
  238. package/src/components/form/expressions/builder/index.tsx +12 -1
  239. package/src/components/form/expressions/useExpressions.ts +4 -1
  240. package/src/components/form/fields/Field.stories.tsx +40 -0
  241. package/src/components/form/fields/Field.tsx +10 -1
  242. package/src/components/form/fields/allowed-values/AllowedValues.tsx +13 -36
  243. package/src/components/form/fields/array/ArrayAutoField.stories.tsx +64 -0
  244. package/src/components/form/fields/auto/AutoFormField.stories.tsx +146 -2
  245. package/src/components/form/fields/auto/AutoFormField.tsx +42 -1
  246. package/src/components/form/fields/binary/Binary.stories.tsx +122 -0
  247. package/src/components/form/fields/binary/Binary.tsx +81 -0
  248. package/src/components/form/fields/boolean/Boolean.stories.tsx +58 -0
  249. package/src/components/form/fields/boolean/Boolean.tsx +1 -1
  250. package/src/components/form/fields/byte-size/ByteSize.stories.tsx +24 -0
  251. package/src/components/form/fields/color/Color.stories.tsx +30 -0
  252. package/src/components/form/fields/cron/Cron.stories.tsx +8 -0
  253. package/src/components/form/fields/date/Date.stories.tsx +22 -0
  254. package/src/components/form/fields/file/File.stories.tsx +48 -0
  255. package/src/components/form/fields/long-string/LongString.stories.tsx +24 -0
  256. package/src/components/form/fields/markdown/Markdown.stories.tsx +8 -0
  257. package/src/components/form/fields/multi-select/MultiSelectFormField.tsx +14 -10
  258. package/src/components/form/fields/number/Number.stories.tsx +31 -0
  259. package/src/components/form/fields/object/Object.stories.tsx +88 -0
  260. package/src/components/form/fields/radio-group/RadioGroup.stories.tsx +24 -0
  261. package/src/components/form/fields/rich-text/RichText.stories.tsx +23 -0
  262. package/src/components/form/fields/schema-definition/SchemaDefinitionField.stories.tsx +72 -0
  263. package/src/components/form/fields/select/Select.stories.tsx +108 -0
  264. package/src/components/form/fields/select/Select.tsx +38 -12
  265. package/src/components/form/fields/select/SelectCollection.tsx +78 -17
  266. package/src/components/form/fields/string/String.stories.tsx +16 -0
  267. package/src/components/form/fields/template/TemplateField.stories.tsx +160 -0
  268. package/src/components/form/fields/url/Url.stories.tsx +24 -0
  269. package/src/components/form/index.tsx +2 -0
  270. package/src/components/imageLightbox/ImageLightbox.stories.tsx +238 -0
  271. package/src/components/imageLightbox/ImageLightbox.tsx +236 -0
  272. package/src/components/imageLightbox/index.ts +1 -0
  273. package/src/components/log/Log.stories.tsx +96 -0
  274. package/src/components/menu/Menu.stories.tsx +54 -0
  275. package/src/components/qonsoleSmartInput/QonsoleSmartInput.stories.tsx +83 -37
  276. package/src/components/searchFilterBar/SearchFilterBar.tsx +131 -0
  277. package/src/components/searchFilterBar/index.ts +1 -0
  278. package/src/components/smartEditor/SmartEditor.stories.tsx +32 -0
  279. package/src/components/supportTicket/AttachmentChips.stories.tsx +171 -0
  280. package/src/components/supportTicket/AttachmentChips.tsx +147 -0
  281. package/src/components/supportTicket/InterfaceReferenceTags.stories.tsx +171 -0
  282. package/src/components/supportTicket/InterfaceReferenceTags.tsx +96 -0
  283. package/src/components/supportTicket/ReferencePicker.stories.tsx +519 -0
  284. package/src/components/supportTicket/ReferencePicker.tsx +563 -0
  285. package/src/components/supportTicket/TicketConversation.stories.tsx +121 -0
  286. package/src/components/supportTicket/TicketHeader.stories.tsx +183 -0
  287. package/src/components/supportTicket/TicketHeader.tsx +247 -0
  288. package/src/components/supportTicket/TicketMetaTags.stories.tsx +103 -0
  289. package/src/components/supportTicket/TicketMetaTags.tsx +85 -0
  290. package/src/components/supportTicket/TicketReplyBox.stories.tsx +351 -0
  291. package/src/components/supportTicket/TicketReplyBox.tsx +146 -0
  292. package/src/components/supportTicket/attachmentAccess.ts +97 -0
  293. package/src/components/supportTicket/fileToAttachment.ts +24 -0
  294. package/src/components/supportTicket/index.ts +10 -0
  295. package/src/components/supportTicket/meta.ts +185 -0
  296. package/src/components/supportTicket/ticketModel.ts +131 -0
  297. package/src/components/ticketReferences/TicketReferences.stories.tsx +315 -0
  298. package/src/components/ticketReferences/TicketReferences.tsx +886 -0
  299. package/src/components/ticketReferences/index.ts +2 -0
  300. package/src/components/ticketThread/TicketThread.stories.tsx +828 -0
  301. package/src/components/ticketThread/TicketThread.tsx +704 -0
  302. package/src/components/ticketThread/index.ts +6 -0
  303. package/src/helpers/common.ts +19 -0
  304. package/src/helpers/scrollbar.ts +32 -0
  305. package/src/hooks/useFetch/useFetch.stories.tsx +30 -0
  306. package/src/hooks/useStorage/useStorage.stories.tsx +82 -0
  307. package/src/hooks/useWebSocket/useWebsocket.stories.tsx +127 -1
  308. package/src/index.tsx +8 -1
  309. package/src/providers/StorageProvider.tsx +30 -4
  310. package/src/stores/currentUser/currentUser.stories.tsx +49 -0
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fileToAttachment = void 0;
4
+ /**
5
+ * Read a picked `File` into the inline base64 upload shape the support API expects
6
+ * (the SaaS plane accepts attachments as base64 on the create/reply payload, with
7
+ * no separate multipart upload). Shared by every composer so the customer and
8
+ * staff surfaces encode files identically.
9
+ */
10
+ var fileToAttachment = function (file) {
11
+ return new Promise(function (resolve, reject) {
12
+ var reader = new FileReader();
13
+ reader.onerror = function () { return reject(new Error("Could not read ".concat(file.name))); };
14
+ reader.onload = function () {
15
+ // reader.result is a data URL: "data:<type>;base64,<content>"
16
+ var result = String(reader.result);
17
+ var content = result.slice(result.indexOf(',') + 1);
18
+ resolve({
19
+ filename: file.name,
20
+ content_type: file.type || 'application/octet-stream',
21
+ content: content,
22
+ });
23
+ };
24
+ reader.readAsDataURL(file);
25
+ });
26
+ };
27
+ exports.fileToAttachment = fileToAttachment;
28
+ //# sourceMappingURL=fileToAttachment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileToAttachment.js","sourceRoot":"","sources":["../../../src/components/supportTicket/fileToAttachment.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACI,IAAM,gBAAgB,GAAG,UAAC,IAAU;IACzC,OAAA,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;QAC1B,IAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,GAAG,cAAM,OAAA,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAkB,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC,EAAhD,CAAgD,CAAC;QACxE,MAAM,CAAC,MAAM,GAAG;YACd,8DAA8D;YAC9D,IAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACrC,IAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC;gBACN,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,YAAY,EAAE,IAAI,CAAC,IAAI,IAAI,0BAA0B;gBACrD,OAAO,SAAA;aACR,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC;AAdF,CAcE,CAAC;AAfQ,QAAA,gBAAgB,oBAexB"}
@@ -0,0 +1,11 @@
1
+ export * from './meta';
2
+ export * from './ticketModel';
3
+ export * from './attachmentAccess';
4
+ export * from './AttachmentChips';
5
+ export * from './TicketMetaTags';
6
+ export * from './TicketHeader';
7
+ export * from './InterfaceReferenceTags';
8
+ export * from './ReferencePicker';
9
+ export * from './fileToAttachment';
10
+ export * from './TicketReplyBox';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/supportTicket/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./meta"), exports);
18
+ __exportStar(require("./ticketModel"), exports);
19
+ __exportStar(require("./attachmentAccess"), exports);
20
+ __exportStar(require("./AttachmentChips"), exports);
21
+ __exportStar(require("./TicketMetaTags"), exports);
22
+ __exportStar(require("./TicketHeader"), exports);
23
+ __exportStar(require("./InterfaceReferenceTags"), exports);
24
+ __exportStar(require("./ReferencePicker"), exports);
25
+ __exportStar(require("./fileToAttachment"), exports);
26
+ __exportStar(require("./TicketReplyBox"), exports);
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/supportTicket/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,gDAA8B;AAC9B,qDAAmC;AACnC,oDAAkC;AAClC,mDAAiC;AACjC,iDAA+B;AAC/B,2DAAyC;AACzC,oDAAkC;AAClC,qDAAmC;AACnC,mDAAiC"}
@@ -0,0 +1,71 @@
1
+ import { TReqoreIntent } from '@qoretechnologies/reqore/dist/constants/theme';
2
+ import { IReqoreIconName } from '@qoretechnologies/reqore/dist/types/icons';
3
+ export type TTicketStatus = 'new' | 'open' | 'awaiting_customer' | 'resolved' | 'closed';
4
+ export type TTicketPriority = 'low' | 'normal' | 'high' | 'urgent';
5
+ export type TTicketCategory = 'bug' | 'question' | 'billing' | 'feature' | 'other';
6
+ export type TTicketAuditAction = 'replied' | 'noted' | 'status_changed' | 'assigned' | 'updated';
7
+ /** A message author. Staff identities are masked from the customer by the backend. */
8
+ export type TTicketMessageAuthor = 'customer' | 'staff' | 'system';
9
+ /** Which side "you" sit on — decides self-alignment and audience-specific labels. */
10
+ export type TTicketViewerRole = 'customer' | 'staff';
11
+ export interface ITicketEnumMeta {
12
+ label: string;
13
+ intent: TReqoreIntent;
14
+ icon: IReqoreIconName;
15
+ /** Audience-specific label for the customer view; falls back to `label` (the
16
+ * staff / neutral wording). Only a few values differ by audience. */
17
+ customerLabel?: string;
18
+ }
19
+ export declare const TICKET_STATUS_META: Record<TTicketStatus, ITicketEnumMeta>;
20
+ export declare const TICKET_PRIORITY_META: Record<TTicketPriority, ITicketEnumMeta>;
21
+ export declare const TICKET_CATEGORY_META: Record<TTicketCategory, ITicketEnumMeta>;
22
+ /** Staff-only audit trail vocabulary (used by the admin-portal staff surface).
23
+ * These are exactly the actions the backend writes (qorus-api
24
+ * `QorusSaasTicketStore::insertAudit`): a public reply, an internal note, a
25
+ * status change, an assignment, or `updated` (a priority/category change). */
26
+ export declare const TICKET_AUDIT_ACTION_META: Record<TTicketAuditAction, ITicketEnumMeta>;
27
+ /** The status label for a given viewer — the customer sees "Awaiting your reply"
28
+ * where staff see "Awaiting customer"; all other values are audience-neutral. */
29
+ export declare const ticketStatusLabel: (status: TTicketStatus, viewerRole?: TTicketViewerRole) => string;
30
+ /** A reply may be sent while a ticket is in any state except `closed`. */
31
+ export declare const REPLYABLE_STATUSES: TTicketStatus[];
32
+ /** Whether a ticket can still be replied to (closed ⇒ no). */
33
+ export declare const isTicketReplyable: (status: TTicketStatus) => boolean;
34
+ /** A file to upload with a ticket or reply — raw bytes as base64, inline on the
35
+ * create/reply payload (the SaaS plane has no separate multipart upload). */
36
+ export interface IAttachmentUpload {
37
+ filename: string;
38
+ content_type: string;
39
+ /** base64-encoded file content */
40
+ content: string;
41
+ }
42
+ /** A reference to a Qorus interface on the subscriber's instance, stored as a
43
+ * `{kind, name}` snapshot (the interface itself lives on the instance, not the
44
+ * SaaS plane). Attaches to a ticket (at creation) or a message (in a reply). */
45
+ export interface IInterfaceReference {
46
+ /** interface type: workflow / service / job / fsm / qog / connection / ... */
47
+ interface_kind: string;
48
+ /** interface name (may include a version) */
49
+ interface_name: string;
50
+ /** server-assigned reference UUID (present on read, absent when submitting) */
51
+ reference_id?: string;
52
+ /** For an app-triggered interface (a qog): the triggering app's name. A viewer
53
+ * with the app catalogue (the customer's IDE) resolves it to the app's logo the
54
+ * same way the qogs list does — see `resolveInterfaceImage` on the tags. */
55
+ trigger_app?: string;
56
+ /** A pre-resolved logo/image (data-URI or URL) for the chip, e.g. the trigger
57
+ * app's logo. Travels with the reference so a viewer without the app catalogue
58
+ * (staff triage, the Qonsole card) still shows it. */
59
+ logo?: string;
60
+ }
61
+ /** Default per-kind icon for a referenced interface, with a generic fallback. */
62
+ export declare const defaultInterfaceIcon: (kind: string) => IReqoreIconName;
63
+ /**
64
+ * Default reading name for an interface kind — "Value maps" for `value-map`. An
65
+ * unknown kind is humanised generically (separators to spaces, sentence case, a
66
+ * plural `s`) so a kind this map hasn't caught up with still reads as a word
67
+ * rather than an identifier. Consumers with their own vocabulary override the
68
+ * whole thing via the picker's `resolveKindLabel`.
69
+ */
70
+ export declare const defaultInterfaceKindLabel: (kind: string) => string;
71
+ //# sourceMappingURL=meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/components/supportTicket/meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAW5E,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,mBAAmB,GAAG,UAAU,GAAG,QAAQ,CAAC;AACzF,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AACnE,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AACnF,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,GAAG,gBAAgB,GAAG,UAAU,GAAG,SAAS,CAAC;AAEjG,sFAAsF;AACtF,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnE,qFAAqF;AACrF,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,eAAe,CAAC;IACtB;0EACsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,aAAa,EAAE,eAAe,CAWrE,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,eAAe,EAAE,eAAe,CAKzE,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,eAAe,EAAE,eAAe,CAMzE,CAAC;AAEF;;;+EAG+E;AAC/E,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,kBAAkB,EAAE,eAAe,CAMhF,CAAC;AAEF;kFACkF;AAClF,eAAO,MAAM,iBAAiB,WACpB,aAAa,eACR,iBAAiB,KAC7B,MAGF,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,EAAE,aAAa,EAK7C,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,WAAY,aAAa,KAAG,OAA8B,CAAC;AAEzF;8EAC8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;iFAEiF;AACjF,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;iFAE6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;2DAEuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAsBD,iFAAiF;AACjF,eAAO,MAAM,oBAAoB,SAAU,MAAM,KAAG,eACJ,CAAC;AAsBjD;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,SAAU,MAAM,KAAG,MAWxD,CAAC"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultInterfaceKindLabel = exports.defaultInterfaceIcon = exports.isTicketReplyable = exports.REPLYABLE_STATUSES = exports.ticketStatusLabel = exports.TICKET_AUDIT_ACTION_META = exports.TICKET_CATEGORY_META = exports.TICKET_PRIORITY_META = exports.TICKET_STATUS_META = void 0;
4
+ exports.TICKET_STATUS_META = {
5
+ new: { label: 'New', intent: 'info', icon: 'SparklingLine' },
6
+ open: { label: 'Open', intent: 'pending', icon: 'Chat3Line' },
7
+ awaiting_customer: {
8
+ label: 'Awaiting customer',
9
+ customerLabel: 'Awaiting your reply',
10
+ intent: 'warning',
11
+ icon: 'UserReceivedLine',
12
+ },
13
+ resolved: { label: 'Resolved', intent: 'success', icon: 'CheckLine' },
14
+ closed: { label: 'Closed', intent: 'muted', icon: 'CloseCircleLine' },
15
+ };
16
+ exports.TICKET_PRIORITY_META = {
17
+ low: { label: 'Low', intent: 'muted', icon: 'ArrowDownLine' },
18
+ normal: { label: 'Normal', intent: 'info', icon: 'SubtractLine' },
19
+ high: { label: 'High', intent: 'warning', icon: 'ArrowUpLine' },
20
+ urgent: { label: 'Urgent', intent: 'danger', icon: 'AlarmWarningLine' },
21
+ };
22
+ exports.TICKET_CATEGORY_META = {
23
+ bug: { label: 'Bug', intent: 'danger', icon: 'BugLine' },
24
+ question: { label: 'Question', intent: 'info', icon: 'QuestionLine' },
25
+ billing: { label: 'Billing', intent: 'warning', icon: 'BankCardLine' },
26
+ feature: { label: 'Feature request', intent: 'success', icon: 'LightbulbLine' },
27
+ other: { label: 'Other', intent: 'muted', icon: 'MoreLine' },
28
+ };
29
+ /** Staff-only audit trail vocabulary (used by the admin-portal staff surface).
30
+ * These are exactly the actions the backend writes (qorus-api
31
+ * `QorusSaasTicketStore::insertAudit`): a public reply, an internal note, a
32
+ * status change, an assignment, or `updated` (a priority/category change). */
33
+ exports.TICKET_AUDIT_ACTION_META = {
34
+ replied: { label: 'Replied', intent: 'success', icon: 'ReplyLine' },
35
+ noted: { label: 'Internal note', intent: 'info', icon: 'StickyNoteLine' },
36
+ status_changed: { label: 'Status changed', intent: 'warning', icon: 'ExchangeLine' },
37
+ assigned: { label: 'Assigned', intent: 'pending', icon: 'UserFollowLine' },
38
+ updated: { label: 'Updated', intent: 'muted', icon: 'Edit2Line' },
39
+ };
40
+ /** The status label for a given viewer — the customer sees "Awaiting your reply"
41
+ * where staff see "Awaiting customer"; all other values are audience-neutral. */
42
+ var ticketStatusLabel = function (status, viewerRole) {
43
+ var meta = exports.TICKET_STATUS_META[status];
44
+ return viewerRole === 'customer' && meta.customerLabel ? meta.customerLabel : meta.label;
45
+ };
46
+ exports.ticketStatusLabel = ticketStatusLabel;
47
+ /** A reply may be sent while a ticket is in any state except `closed`. */
48
+ exports.REPLYABLE_STATUSES = [
49
+ 'new',
50
+ 'open',
51
+ 'awaiting_customer',
52
+ 'resolved',
53
+ ];
54
+ /** Whether a ticket can still be replied to (closed ⇒ no). */
55
+ var isTicketReplyable = function (status) { return status !== 'closed'; };
56
+ exports.isTicketReplyable = isTicketReplyable;
57
+ // Built-in per-kind icons for referenced interfaces, kept in step with the
58
+ // qorus-ide interface vocabulary. Used when a consumer doesn't pass its own
59
+ // `resolveInterfaceIcon`, so the staff view and the Qonsole renderer show the
60
+ // same chips as the customer view without each re-declaring the mapping.
61
+ var DEFAULT_INTERFACE_ICONS = {
62
+ workflow: 'GitBranchLine',
63
+ service: 'ServerLine',
64
+ job: 'CalendarLine',
65
+ fsm: 'DashboardLine',
66
+ // qog fallback glyph (used only when there's no trigger-app logo to show)
67
+ qog: 'FlowChart',
68
+ connection: 'Plug2Line',
69
+ mapper: 'MindMap',
70
+ class: 'CodeSLine',
71
+ 'value-map': 'BringToFront',
72
+ 'ai-collection': 'FileMarkedLine',
73
+ 'ai-endpoint': 'RobotLine',
74
+ 'ai-guardrail': 'ShieldLine',
75
+ };
76
+ /** Default per-kind icon for a referenced interface, with a generic fallback. */
77
+ var defaultInterfaceIcon = function (kind) { var _a; return (_a = DEFAULT_INTERFACE_ICONS[kind]) !== null && _a !== void 0 ? _a : 'CodeBoxLine'; };
78
+ exports.defaultInterfaceIcon = defaultInterfaceIcon;
79
+ // The reading name for each interface kind. The kind id (`value-map`, `ai-collection`)
80
+ // is a wire value — it's what a host fetches with and what gets stored on the reference
81
+ // — so it must never be what the user reads. These are plural because they name a
82
+ // category the user picks from, not a single interface. `fsm` maps to "Qogs" like every
83
+ // other user-facing surface; the id stays `fsm` wherever a host still uses it.
84
+ var DEFAULT_INTERFACE_KIND_LABELS = {
85
+ workflow: 'Workflows',
86
+ service: 'Services',
87
+ job: 'Jobs',
88
+ fsm: 'Qogs',
89
+ qog: 'Qogs',
90
+ connection: 'Connections',
91
+ mapper: 'Mappers',
92
+ class: 'Classes',
93
+ 'value-map': 'Value maps',
94
+ 'ai-collection': 'AI collections',
95
+ 'ai-endpoint': 'AI endpoints',
96
+ 'ai-guardrail': 'AI guardrails',
97
+ };
98
+ /**
99
+ * Default reading name for an interface kind — "Value maps" for `value-map`. An
100
+ * unknown kind is humanised generically (separators to spaces, sentence case, a
101
+ * plural `s`) so a kind this map hasn't caught up with still reads as a word
102
+ * rather than an identifier. Consumers with their own vocabulary override the
103
+ * whole thing via the picker's `resolveKindLabel`.
104
+ */
105
+ var defaultInterfaceKindLabel = function (kind) {
106
+ var known = DEFAULT_INTERFACE_KIND_LABELS[kind];
107
+ if (known) {
108
+ return known;
109
+ }
110
+ var words = kind.replace(/[-_]+/g, ' ').trim();
111
+ var sentenceCase = words.charAt(0).toUpperCase() + words.slice(1);
112
+ return sentenceCase.endsWith('s') ? sentenceCase : "".concat(sentenceCase, "s");
113
+ };
114
+ exports.defaultInterfaceKindLabel = defaultInterfaceKindLabel;
115
+ //# sourceMappingURL=meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../src/components/supportTicket/meta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import type { IInterfaceReference, TTicketCategory, TTicketMessageAuthor, TTicketPriority, TTicketStatus } from './meta';
2
+ /** Attachment metadata as embedded in a message (no content). */
3
+ export interface ITicketAttachment {
4
+ attachment_id: string;
5
+ filename: string;
6
+ content_type: string;
7
+ size_bytes: number;
8
+ }
9
+ /**
10
+ * Attachment metadata from the ticket-level list endpoint.
11
+ *
12
+ * Richer than the per-message copy: it carries the provenance the embedded
13
+ * metadata omits — who uploaded the file, when, and which reply it came from
14
+ * (null for a file attached when the ticket was filed). A staff uploader arrives
15
+ * already masked by the server, so this never exposes a real staff identity.
16
+ */
17
+ export interface ITicketAttachmentDetail extends ITicketAttachment {
18
+ message_id?: string | null;
19
+ uploaded_by?: string;
20
+ uploader_type?: 'customer' | 'staff';
21
+ created?: string;
22
+ }
23
+ /** One message in a ticket thread. */
24
+ export interface ITicketMessage {
25
+ message_id: string;
26
+ ticket_id: string;
27
+ author_type: TTicketMessageAuthor;
28
+ /** author identity; staff identities are masked from the customer */
29
+ author_id: string;
30
+ /** message body (markdown) */
31
+ body: string;
32
+ /** staff-only internal note — never present in the customer thread */
33
+ internal: boolean;
34
+ created: string;
35
+ /** files attached to this message */
36
+ attachments?: ITicketAttachment[];
37
+ /** interfaces referenced in this message, as `{kind, name}` snapshots */
38
+ referenced_interfaces?: IInterfaceReference[];
39
+ }
40
+ /**
41
+ * One support ticket, in the projection BOTH planes serve.
42
+ *
43
+ * Staff-only fields are not optional-here-required-there; they live in
44
+ * `IStaffTicket` so a customer surface cannot read them by accident.
45
+ */
46
+ export interface ITicket {
47
+ /** external ticket UUID, used in URLs */
48
+ ticket_id: string;
49
+ /** human-visible ticket number */
50
+ ticket_number: number;
51
+ subject: string;
52
+ /** initial description (markdown) */
53
+ description: string;
54
+ status: TTicketStatus;
55
+ priority: TTicketPriority;
56
+ category: TTicketCategory;
57
+ subscription_code: string;
58
+ /** account name (email) of the filer */
59
+ created_by: string;
60
+ /** parent ticket UUID, when this continues a closed ticket */
61
+ parent_ticket_id?: string;
62
+ /** first staff-reply timestamp */
63
+ first_response_at?: string;
64
+ resolved_at?: string;
65
+ closed_at?: string;
66
+ /** most-recent-message timestamp */
67
+ last_message_at: string;
68
+ created: string;
69
+ modified?: string;
70
+ /** interfaces this ticket references (ticket-level), as `{kind, name}` snapshots */
71
+ referenced_interfaces?: IInterfaceReference[];
72
+ }
73
+ /** The extra projection the admin plane adds on top of {@link ITicket}. */
74
+ export interface IStaffTicket extends ITicket {
75
+ /** owner scope key (staff view) */
76
+ scope_key: string;
77
+ /** organization / account */
78
+ scope_type: string;
79
+ account_id: number;
80
+ groupid?: number;
81
+ /** the staff assignee */
82
+ assignee?: string;
83
+ }
84
+ /** The offset pagination every support list endpoint returns. */
85
+ export interface ITicketPagedResult {
86
+ limit: number;
87
+ offset: number;
88
+ }
89
+ /**
90
+ * A ticket-list response. Generic over the ticket projection so the staff plane
91
+ * gets `IStaffTicket[]` without redeclaring the envelope; each plane extends this
92
+ * with the scope fields it actually serves.
93
+ */
94
+ export interface ITicketListResult<T extends ITicket = ITicket> extends ITicketPagedResult {
95
+ tickets: T[];
96
+ }
97
+ /** A message-list response for one ticket. */
98
+ export interface ITicketMessageListResult extends ITicketPagedResult {
99
+ ticket_id: string;
100
+ messages: ITicketMessage[];
101
+ }
102
+ //# sourceMappingURL=ticketModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticketModel.d.ts","sourceRoot":"","sources":["../../../src/components/supportTicket/ticketModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,oBAAoB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAwBzH,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,oBAAoB,CAAC;IAClC,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAClC,yEAAyE;IACzE,qBAAqB,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC/C;AAED;;;;;GAKG;AACH,MAAM,WAAW,OAAO;IACtB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,eAAe,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kCAAkC;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,qBAAqB,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC/C;AAED,2EAA2E;AAC3E,MAAM,WAAW,YAAa,SAAQ,OAAO;IAC3C,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,iEAAiE;AACjE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,CAAE,SAAQ,kBAAkB;IACxF,OAAO,EAAE,CAAC,EAAE,CAAC;CACd;AAED,8CAA8C;AAC9C,MAAM,WAAW,wBAAyB,SAAQ,kBAAkB;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ticketModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticketModel.js","sourceRoot":"","sources":["../../../src/components/supportTicket/ticketModel.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ import { IReqoreIconName } from '@qoretechnologies/reqore/dist/types/icons';
2
+ import { IInterfaceReference, TTicketViewerRole } from '../supportTicket/meta';
3
+ import type { ITicketThreadAttachment, ITicketThreadMessage } from '../ticketThread/TicketThread';
4
+ /** Attachment metadata as returned by the list endpoint — carries the provenance
5
+ * (uploader + timestamp + source message) the message-embedded metadata omits. */
6
+ export interface ITicketReferenceAttachment extends ITicketThreadAttachment {
7
+ /** the reply this file was attached to; null/absent = ticket-level */
8
+ message_id?: string | null;
9
+ /** the uploader, resolved + masked like the thread's message author (a staff
10
+ * uploader reads as "Qorus Support" on the customer plane, never the raw identity) */
11
+ uploaded_by?: string;
12
+ /** the kind of party that uploaded the file — lets the viewer label it */
13
+ uploader_type?: 'customer' | 'staff';
14
+ /** ISO timestamp the file was attached */
15
+ created?: string;
16
+ }
17
+ export interface ITicketReferencesProps {
18
+ /** ticket-level interface references (from `ticket.referenced_interfaces`) */
19
+ references?: IInterfaceReference[];
20
+ /** the thread — source of message-level references and, as a fallback, attachments */
21
+ messages?: ITicketThreadMessage[];
22
+ /** the ticket's attachments from the list endpoint; preferred over the message-embedded
23
+ * ones because it carries provenance and any ticket-level files. Falls back to `messages`. */
24
+ attachments?: ITicketReferenceAttachment[];
25
+ viewerRole?: TTicketViewerRole;
26
+ /** fetch an attachment's bytes as an object URL, for inline image preview + the lightbox.
27
+ * Omitted ⇒ screenshots show as download tiles instead of thumbnails. */
28
+ fetchAttachmentUrl?: (attachmentId: string) => Promise<string>;
29
+ /** trigger a browser download of an attachment */
30
+ onDownloadAttachment?: (attachmentId: string, filename: string) => void;
31
+ /** open a referenced interface; reference chips are static (informational) when omitted */
32
+ onInterfaceClick?: (reference: IInterfaceReference) => void;
33
+ /** Reveal the message a reference or file came from, in the conversation.
34
+ * Omitted ⇒ the action is not offered. It is also omitted per-row for anything filed
35
+ * against the ticket itself rather than a reply, which has no message to reveal. */
36
+ onShowInChat?: (messageId: string) => void;
37
+ /** resolve a per-kind icon for a referenced interface (the IDE passes its own vocabulary) */
38
+ resolveInterfaceIcon?: (kind: string) => IReqoreIconName;
39
+ loading?: boolean;
40
+ }
41
+ /**
42
+ * A reference plus where it was cited.
43
+ *
44
+ * `message_id` is absent for a ticket-level reference — those are filed against the
45
+ * ticket itself (`message_id IS NULL` server-side), so there is no message to reveal
46
+ * and "show in chat" must not be offered for them.
47
+ */
48
+ export interface IResolvedInterfaceReference extends IInterfaceReference {
49
+ message_id?: string;
50
+ }
51
+ export declare const TicketReferences: ({ references, messages, attachments, viewerRole, fetchAttachmentUrl, onDownloadAttachment, onInterfaceClick, onShowInChat, resolveInterfaceIcon, loading, }: ITicketReferencesProps) => import("react/jsx-runtime").JSX.Element;
52
+ //# sourceMappingURL=TicketReferences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TicketReferences.d.ts","sourceRoot":"","sources":["../../../src/components/ticketReferences/TicketReferences.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAU5E,OAAO,EAEL,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAelG;mFACmF;AACnF,MAAM,WAAW,0BAA2B,SAAQ,uBAAuB;IACzE,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;2FACuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IACrC,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,8EAA8E;IAC9E,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACnC,sFAAsF;IACtF,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAClC;mGAC+F;IAC/F,WAAW,CAAC,EAAE,0BAA0B,EAAE,CAAC;IAC3C,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;8EAC0E;IAC1E,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/D,kDAAkD;IAClD,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC5D;;yFAEqF;IACrF,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,6FAA6F;IAC7F,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAgGD;;;;;;GAMG;AACH,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA+ND,eAAO,MAAM,gBAAgB,gKAW1B,sBAAsB,4CAmdxB,CAAC"}