@sinequa/assistant 3.10.5 → 3.10.11

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 (839) hide show
  1. package/chat/index.d.ts +2155 -3
  2. package/fesm2022/sinequa-assistant-chat.mjs +770 -595
  3. package/fesm2022/sinequa-assistant-chat.mjs.map +1 -1
  4. package/index.d.ts +3 -5
  5. package/node_modules/zod/LICENSE +21 -0
  6. package/node_modules/zod/README.md +208 -0
  7. package/node_modules/zod/index.cjs +33 -0
  8. package/node_modules/zod/index.d.cts +4 -0
  9. package/node_modules/zod/index.d.ts +4 -0
  10. package/node_modules/zod/index.js +4 -0
  11. package/node_modules/zod/locales/index.cjs +17 -0
  12. package/node_modules/zod/locales/index.d.cts +1 -0
  13. package/node_modules/zod/locales/index.d.ts +1 -0
  14. package/node_modules/zod/locales/index.js +1 -0
  15. package/node_modules/zod/locales/package.json +6 -0
  16. package/node_modules/zod/mini/index.cjs +32 -0
  17. package/node_modules/zod/mini/index.d.cts +3 -0
  18. package/node_modules/zod/mini/index.d.ts +3 -0
  19. package/node_modules/zod/mini/index.js +3 -0
  20. package/node_modules/zod/mini/package.json +6 -0
  21. package/node_modules/zod/package.json +135 -0
  22. package/node_modules/zod/src/index.ts +4 -0
  23. package/node_modules/zod/src/locales/index.ts +1 -0
  24. package/node_modules/zod/src/mini/index.ts +3 -0
  25. package/node_modules/zod/src/v3/ZodError.ts +330 -0
  26. package/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
  27. package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
  28. package/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
  29. package/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
  30. package/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
  31. package/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
  32. package/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
  33. package/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
  34. package/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
  35. package/node_modules/zod/src/v3/errors.ts +13 -0
  36. package/node_modules/zod/src/v3/external.ts +6 -0
  37. package/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
  38. package/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
  39. package/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
  40. package/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
  41. package/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
  42. package/node_modules/zod/src/v3/helpers/util.ts +224 -0
  43. package/node_modules/zod/src/v3/index.ts +4 -0
  44. package/node_modules/zod/src/v3/locales/en.ts +124 -0
  45. package/node_modules/zod/src/v3/standard-schema.ts +113 -0
  46. package/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
  47. package/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
  48. package/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
  49. package/node_modules/zod/src/v3/tests/array.test.ts +71 -0
  50. package/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
  51. package/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
  52. package/node_modules/zod/src/v3/tests/base.test.ts +29 -0
  53. package/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
  54. package/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
  55. package/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
  56. package/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
  57. package/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
  58. package/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
  59. package/node_modules/zod/src/v3/tests/date.test.ts +32 -0
  60. package/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
  61. package/node_modules/zod/src/v3/tests/default.test.ts +112 -0
  62. package/node_modules/zod/src/v3/tests/description.test.ts +33 -0
  63. package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
  64. package/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
  65. package/node_modules/zod/src/v3/tests/error.test.ts +551 -0
  66. package/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
  67. package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
  68. package/node_modules/zod/src/v3/tests/function.test.ts +261 -0
  69. package/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
  70. package/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
  71. package/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
  72. package/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
  73. package/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
  74. package/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
  75. package/node_modules/zod/src/v3/tests/map.test.ts +110 -0
  76. package/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
  77. package/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
  78. package/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
  79. package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
  80. package/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
  81. package/node_modules/zod/src/v3/tests/number.test.ts +176 -0
  82. package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
  83. package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
  84. package/node_modules/zod/src/v3/tests/object.test.ts +434 -0
  85. package/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
  86. package/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
  87. package/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
  88. package/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
  89. package/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
  90. package/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
  91. package/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
  92. package/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
  93. package/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
  94. package/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
  95. package/node_modules/zod/src/v3/tests/record.test.ts +171 -0
  96. package/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
  97. package/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
  98. package/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
  99. package/node_modules/zod/src/v3/tests/set.test.ts +142 -0
  100. package/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
  101. package/node_modules/zod/src/v3/tests/string.test.ts +916 -0
  102. package/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
  103. package/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
  104. package/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
  105. package/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
  106. package/node_modules/zod/src/v3/tests/void.test.ts +15 -0
  107. package/node_modules/zod/src/v3/types.ts +5138 -0
  108. package/node_modules/zod/src/v4/classic/checks.ts +32 -0
  109. package/node_modules/zod/src/v4/classic/coerce.ts +27 -0
  110. package/node_modules/zod/src/v4/classic/compat.ts +70 -0
  111. package/node_modules/zod/src/v4/classic/errors.ts +82 -0
  112. package/node_modules/zod/src/v4/classic/external.ts +51 -0
  113. package/node_modules/zod/src/v4/classic/from-json-schema.ts +643 -0
  114. package/node_modules/zod/src/v4/classic/index.ts +5 -0
  115. package/node_modules/zod/src/v4/classic/iso.ts +90 -0
  116. package/node_modules/zod/src/v4/classic/parse.ts +82 -0
  117. package/node_modules/zod/src/v4/classic/schemas.ts +2409 -0
  118. package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
  119. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
  120. package/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
  121. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +210 -0
  122. package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
  123. package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
  124. package/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
  125. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
  126. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
  127. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +276 -0
  128. package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
  129. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
  130. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +562 -0
  131. package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
  132. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
  133. package/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
  134. package/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
  135. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
  136. package/node_modules/zod/src/v4/classic/tests/default.test.ts +365 -0
  137. package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
  138. package/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
  139. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +661 -0
  140. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
  141. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +595 -0
  142. package/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
  143. package/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
  144. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
  145. package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
  146. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +734 -0
  147. package/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
  148. package/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
  149. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
  150. package/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
  151. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
  152. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
  153. package/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
  154. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
  155. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
  156. package/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
  157. package/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
  158. package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
  159. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
  160. package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
  161. package/node_modules/zod/src/v4/classic/tests/number.test.ts +270 -0
  162. package/node_modules/zod/src/v4/classic/tests/object.test.ts +640 -0
  163. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +223 -0
  164. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +427 -0
  165. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
  166. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
  167. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
  168. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +282 -0
  169. package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
  170. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
  171. package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
  172. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
  173. package/node_modules/zod/src/v4/classic/tests/record.test.ts +632 -0
  174. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +582 -0
  175. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +570 -0
  176. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
  177. package/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
  178. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
  179. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
  180. package/node_modules/zod/src/v4/classic/tests/string.test.ts +1175 -0
  181. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
  182. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
  183. package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
  184. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +2990 -0
  185. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +361 -0
  186. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +183 -0
  187. package/node_modules/zod/src/v4/classic/tests/union.test.ts +219 -0
  188. package/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
  189. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
  190. package/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
  191. package/node_modules/zod/src/v4/core/api.ts +1798 -0
  192. package/node_modules/zod/src/v4/core/checks.ts +1293 -0
  193. package/node_modules/zod/src/v4/core/config.ts +15 -0
  194. package/node_modules/zod/src/v4/core/core.ts +138 -0
  195. package/node_modules/zod/src/v4/core/doc.ts +44 -0
  196. package/node_modules/zod/src/v4/core/errors.ts +448 -0
  197. package/node_modules/zod/src/v4/core/index.ts +16 -0
  198. package/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
  199. package/node_modules/zod/src/v4/core/json-schema-processors.ts +667 -0
  200. package/node_modules/zod/src/v4/core/json-schema.ts +147 -0
  201. package/node_modules/zod/src/v4/core/parse.ts +195 -0
  202. package/node_modules/zod/src/v4/core/regexes.ts +183 -0
  203. package/node_modules/zod/src/v4/core/registries.ts +105 -0
  204. package/node_modules/zod/src/v4/core/schemas.ts +4538 -0
  205. package/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
  206. package/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
  207. package/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
  208. package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
  209. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
  210. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
  211. package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
  212. package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
  213. package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
  214. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
  215. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +83 -0
  216. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +67 -0
  217. package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
  218. package/node_modules/zod/src/v4/core/to-json-schema.ts +613 -0
  219. package/node_modules/zod/src/v4/core/util.ts +966 -0
  220. package/node_modules/zod/src/v4/core/versions.ts +5 -0
  221. package/node_modules/zod/src/v4/core/zsf.ts +323 -0
  222. package/node_modules/zod/src/v4/index.ts +4 -0
  223. package/node_modules/zod/src/v4/locales/ar.ts +115 -0
  224. package/node_modules/zod/src/v4/locales/az.ts +111 -0
  225. package/node_modules/zod/src/v4/locales/be.ts +176 -0
  226. package/node_modules/zod/src/v4/locales/bg.ts +128 -0
  227. package/node_modules/zod/src/v4/locales/ca.ts +116 -0
  228. package/node_modules/zod/src/v4/locales/cs.ts +118 -0
  229. package/node_modules/zod/src/v4/locales/da.ts +123 -0
  230. package/node_modules/zod/src/v4/locales/de.ts +116 -0
  231. package/node_modules/zod/src/v4/locales/en.ts +119 -0
  232. package/node_modules/zod/src/v4/locales/eo.ts +118 -0
  233. package/node_modules/zod/src/v4/locales/es.ts +141 -0
  234. package/node_modules/zod/src/v4/locales/fa.ts +126 -0
  235. package/node_modules/zod/src/v4/locales/fi.ts +121 -0
  236. package/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
  237. package/node_modules/zod/src/v4/locales/fr.ts +116 -0
  238. package/node_modules/zod/src/v4/locales/he.ts +246 -0
  239. package/node_modules/zod/src/v4/locales/hu.ts +117 -0
  240. package/node_modules/zod/src/v4/locales/hy.ts +164 -0
  241. package/node_modules/zod/src/v4/locales/id.ts +115 -0
  242. package/node_modules/zod/src/v4/locales/index.ts +49 -0
  243. package/node_modules/zod/src/v4/locales/is.ts +119 -0
  244. package/node_modules/zod/src/v4/locales/it.ts +116 -0
  245. package/node_modules/zod/src/v4/locales/ja.ts +114 -0
  246. package/node_modules/zod/src/v4/locales/ka.ts +123 -0
  247. package/node_modules/zod/src/v4/locales/kh.ts +7 -0
  248. package/node_modules/zod/src/v4/locales/km.ts +119 -0
  249. package/node_modules/zod/src/v4/locales/ko.ts +121 -0
  250. package/node_modules/zod/src/v4/locales/lt.ts +239 -0
  251. package/node_modules/zod/src/v4/locales/mk.ts +118 -0
  252. package/node_modules/zod/src/v4/locales/ms.ts +115 -0
  253. package/node_modules/zod/src/v4/locales/nl.ts +121 -0
  254. package/node_modules/zod/src/v4/locales/no.ts +116 -0
  255. package/node_modules/zod/src/v4/locales/ota.ts +117 -0
  256. package/node_modules/zod/src/v4/locales/pl.ts +118 -0
  257. package/node_modules/zod/src/v4/locales/ps.ts +126 -0
  258. package/node_modules/zod/src/v4/locales/pt.ts +116 -0
  259. package/node_modules/zod/src/v4/locales/ru.ts +176 -0
  260. package/node_modules/zod/src/v4/locales/sl.ts +118 -0
  261. package/node_modules/zod/src/v4/locales/sv.ts +119 -0
  262. package/node_modules/zod/src/v4/locales/ta.ts +118 -0
  263. package/node_modules/zod/src/v4/locales/th.ts +119 -0
  264. package/node_modules/zod/src/v4/locales/tr.ts +111 -0
  265. package/node_modules/zod/src/v4/locales/ua.ts +7 -0
  266. package/node_modules/zod/src/v4/locales/uk.ts +117 -0
  267. package/node_modules/zod/src/v4/locales/ur.ts +119 -0
  268. package/node_modules/zod/src/v4/locales/uz.ts +116 -0
  269. package/node_modules/zod/src/v4/locales/vi.ts +117 -0
  270. package/node_modules/zod/src/v4/locales/yo.ts +124 -0
  271. package/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
  272. package/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
  273. package/node_modules/zod/src/v4/mini/checks.ts +32 -0
  274. package/node_modules/zod/src/v4/mini/coerce.ts +27 -0
  275. package/node_modules/zod/src/v4/mini/external.ts +40 -0
  276. package/node_modules/zod/src/v4/mini/index.ts +3 -0
  277. package/node_modules/zod/src/v4/mini/iso.ts +66 -0
  278. package/node_modules/zod/src/v4/mini/parse.ts +14 -0
  279. package/node_modules/zod/src/v4/mini/schemas.ts +1916 -0
  280. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
  281. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
  282. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
  283. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
  284. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +529 -0
  285. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
  286. package/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
  287. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
  288. package/node_modules/zod/src/v4/mini/tests/index.test.ts +963 -0
  289. package/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
  290. package/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
  291. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
  292. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +275 -0
  293. package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
  294. package/node_modules/zod/src/v4/mini/tests/string.test.ts +347 -0
  295. package/node_modules/zod/src/v4-mini/index.ts +3 -0
  296. package/node_modules/zod/v3/ZodError.cjs +138 -0
  297. package/node_modules/zod/v3/ZodError.d.cts +164 -0
  298. package/node_modules/zod/v3/ZodError.d.ts +164 -0
  299. package/node_modules/zod/v3/ZodError.js +133 -0
  300. package/node_modules/zod/v3/errors.cjs +17 -0
  301. package/node_modules/zod/v3/errors.d.cts +5 -0
  302. package/node_modules/zod/v3/errors.d.ts +5 -0
  303. package/node_modules/zod/v3/errors.js +9 -0
  304. package/node_modules/zod/v3/external.cjs +22 -0
  305. package/node_modules/zod/v3/external.d.cts +6 -0
  306. package/node_modules/zod/v3/external.d.ts +6 -0
  307. package/node_modules/zod/v3/external.js +6 -0
  308. package/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
  309. package/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
  310. package/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
  311. package/node_modules/zod/v3/helpers/enumUtil.js +1 -0
  312. package/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
  313. package/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
  314. package/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
  315. package/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  316. package/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
  317. package/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
  318. package/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
  319. package/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  320. package/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
  321. package/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
  322. package/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
  323. package/node_modules/zod/v3/helpers/partialUtil.js +1 -0
  324. package/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
  325. package/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
  326. package/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
  327. package/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  328. package/node_modules/zod/v3/helpers/util.cjs +137 -0
  329. package/node_modules/zod/v3/helpers/util.d.cts +85 -0
  330. package/node_modules/zod/v3/helpers/util.d.ts +85 -0
  331. package/node_modules/zod/v3/helpers/util.js +133 -0
  332. package/node_modules/zod/v3/index.cjs +33 -0
  333. package/node_modules/zod/v3/index.d.cts +4 -0
  334. package/node_modules/zod/v3/index.d.ts +4 -0
  335. package/node_modules/zod/v3/index.js +4 -0
  336. package/node_modules/zod/v3/locales/en.cjs +112 -0
  337. package/node_modules/zod/v3/locales/en.d.cts +3 -0
  338. package/node_modules/zod/v3/locales/en.d.ts +3 -0
  339. package/node_modules/zod/v3/locales/en.js +109 -0
  340. package/node_modules/zod/v3/package.json +6 -0
  341. package/node_modules/zod/v3/standard-schema.cjs +2 -0
  342. package/node_modules/zod/v3/standard-schema.d.cts +102 -0
  343. package/node_modules/zod/v3/standard-schema.d.ts +102 -0
  344. package/node_modules/zod/v3/standard-schema.js +1 -0
  345. package/node_modules/zod/v3/types.cjs +3777 -0
  346. package/node_modules/zod/v3/types.d.cts +1034 -0
  347. package/node_modules/zod/v3/types.d.ts +1034 -0
  348. package/node_modules/zod/v3/types.js +3695 -0
  349. package/node_modules/zod/v4/classic/checks.cjs +33 -0
  350. package/node_modules/zod/v4/classic/checks.d.cts +1 -0
  351. package/node_modules/zod/v4/classic/checks.d.ts +1 -0
  352. package/node_modules/zod/v4/classic/checks.js +1 -0
  353. package/node_modules/zod/v4/classic/coerce.cjs +47 -0
  354. package/node_modules/zod/v4/classic/coerce.d.cts +17 -0
  355. package/node_modules/zod/v4/classic/coerce.d.ts +17 -0
  356. package/node_modules/zod/v4/classic/coerce.js +17 -0
  357. package/node_modules/zod/v4/classic/compat.cjs +61 -0
  358. package/node_modules/zod/v4/classic/compat.d.cts +50 -0
  359. package/node_modules/zod/v4/classic/compat.d.ts +50 -0
  360. package/node_modules/zod/v4/classic/compat.js +31 -0
  361. package/node_modules/zod/v4/classic/errors.cjs +74 -0
  362. package/node_modules/zod/v4/classic/errors.d.cts +30 -0
  363. package/node_modules/zod/v4/classic/errors.d.ts +30 -0
  364. package/node_modules/zod/v4/classic/errors.js +48 -0
  365. package/node_modules/zod/v4/classic/external.cjs +73 -0
  366. package/node_modules/zod/v4/classic/external.d.cts +15 -0
  367. package/node_modules/zod/v4/classic/external.d.ts +15 -0
  368. package/node_modules/zod/v4/classic/external.js +20 -0
  369. package/node_modules/zod/v4/classic/from-json-schema.cjs +610 -0
  370. package/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
  371. package/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
  372. package/node_modules/zod/v4/classic/from-json-schema.js +584 -0
  373. package/node_modules/zod/v4/classic/index.cjs +33 -0
  374. package/node_modules/zod/v4/classic/index.d.cts +4 -0
  375. package/node_modules/zod/v4/classic/index.d.ts +4 -0
  376. package/node_modules/zod/v4/classic/index.js +4 -0
  377. package/node_modules/zod/v4/classic/iso.cjs +60 -0
  378. package/node_modules/zod/v4/classic/iso.d.cts +22 -0
  379. package/node_modules/zod/v4/classic/iso.d.ts +22 -0
  380. package/node_modules/zod/v4/classic/iso.js +30 -0
  381. package/node_modules/zod/v4/classic/package.json +6 -0
  382. package/node_modules/zod/v4/classic/parse.cjs +41 -0
  383. package/node_modules/zod/v4/classic/parse.d.cts +31 -0
  384. package/node_modules/zod/v4/classic/parse.d.ts +31 -0
  385. package/node_modules/zod/v4/classic/parse.js +15 -0
  386. package/node_modules/zod/v4/classic/schemas.cjs +1272 -0
  387. package/node_modules/zod/v4/classic/schemas.d.cts +739 -0
  388. package/node_modules/zod/v4/classic/schemas.d.ts +739 -0
  389. package/node_modules/zod/v4/classic/schemas.js +1157 -0
  390. package/node_modules/zod/v4/core/api.cjs +1222 -0
  391. package/node_modules/zod/v4/core/api.d.cts +304 -0
  392. package/node_modules/zod/v4/core/api.d.ts +304 -0
  393. package/node_modules/zod/v4/core/api.js +1082 -0
  394. package/node_modules/zod/v4/core/checks.cjs +601 -0
  395. package/node_modules/zod/v4/core/checks.d.cts +278 -0
  396. package/node_modules/zod/v4/core/checks.d.ts +278 -0
  397. package/node_modules/zod/v4/core/checks.js +575 -0
  398. package/node_modules/zod/v4/core/core.cjs +83 -0
  399. package/node_modules/zod/v4/core/core.d.cts +70 -0
  400. package/node_modules/zod/v4/core/core.d.ts +70 -0
  401. package/node_modules/zod/v4/core/core.js +76 -0
  402. package/node_modules/zod/v4/core/doc.cjs +39 -0
  403. package/node_modules/zod/v4/core/doc.d.cts +14 -0
  404. package/node_modules/zod/v4/core/doc.d.ts +14 -0
  405. package/node_modules/zod/v4/core/doc.js +35 -0
  406. package/node_modules/zod/v4/core/errors.cjs +213 -0
  407. package/node_modules/zod/v4/core/errors.d.cts +220 -0
  408. package/node_modules/zod/v4/core/errors.d.ts +220 -0
  409. package/node_modules/zod/v4/core/errors.js +182 -0
  410. package/node_modules/zod/v4/core/index.cjs +47 -0
  411. package/node_modules/zod/v4/core/index.d.cts +16 -0
  412. package/node_modules/zod/v4/core/index.d.ts +16 -0
  413. package/node_modules/zod/v4/core/index.js +16 -0
  414. package/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
  415. package/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
  416. package/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
  417. package/node_modules/zod/v4/core/json-schema-generator.js +95 -0
  418. package/node_modules/zod/v4/core/json-schema-processors.cjs +648 -0
  419. package/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
  420. package/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
  421. package/node_modules/zod/v4/core/json-schema-processors.js +605 -0
  422. package/node_modules/zod/v4/core/json-schema.cjs +2 -0
  423. package/node_modules/zod/v4/core/json-schema.d.cts +88 -0
  424. package/node_modules/zod/v4/core/json-schema.d.ts +88 -0
  425. package/node_modules/zod/v4/core/json-schema.js +1 -0
  426. package/node_modules/zod/v4/core/package.json +6 -0
  427. package/node_modules/zod/v4/core/parse.cjs +131 -0
  428. package/node_modules/zod/v4/core/parse.d.cts +49 -0
  429. package/node_modules/zod/v4/core/parse.d.ts +49 -0
  430. package/node_modules/zod/v4/core/parse.js +93 -0
  431. package/node_modules/zod/v4/core/regexes.cjs +166 -0
  432. package/node_modules/zod/v4/core/regexes.d.cts +79 -0
  433. package/node_modules/zod/v4/core/regexes.d.ts +79 -0
  434. package/node_modules/zod/v4/core/regexes.js +133 -0
  435. package/node_modules/zod/v4/core/registries.cjs +56 -0
  436. package/node_modules/zod/v4/core/registries.d.cts +35 -0
  437. package/node_modules/zod/v4/core/registries.d.ts +35 -0
  438. package/node_modules/zod/v4/core/registries.js +51 -0
  439. package/node_modules/zod/v4/core/schemas.cjs +2124 -0
  440. package/node_modules/zod/v4/core/schemas.d.cts +1146 -0
  441. package/node_modules/zod/v4/core/schemas.d.ts +1146 -0
  442. package/node_modules/zod/v4/core/schemas.js +2093 -0
  443. package/node_modules/zod/v4/core/standard-schema.cjs +2 -0
  444. package/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
  445. package/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
  446. package/node_modules/zod/v4/core/standard-schema.js +1 -0
  447. package/node_modules/zod/v4/core/to-json-schema.cjs +446 -0
  448. package/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
  449. package/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
  450. package/node_modules/zod/v4/core/to-json-schema.js +437 -0
  451. package/node_modules/zod/v4/core/util.cjs +710 -0
  452. package/node_modules/zod/v4/core/util.d.cts +199 -0
  453. package/node_modules/zod/v4/core/util.d.ts +199 -0
  454. package/node_modules/zod/v4/core/util.js +651 -0
  455. package/node_modules/zod/v4/core/versions.cjs +8 -0
  456. package/node_modules/zod/v4/core/versions.d.cts +5 -0
  457. package/node_modules/zod/v4/core/versions.d.ts +5 -0
  458. package/node_modules/zod/v4/core/versions.js +5 -0
  459. package/node_modules/zod/v4/index.cjs +22 -0
  460. package/node_modules/zod/v4/index.d.cts +3 -0
  461. package/node_modules/zod/v4/index.d.ts +3 -0
  462. package/node_modules/zod/v4/index.js +3 -0
  463. package/node_modules/zod/v4/locales/ar.cjs +133 -0
  464. package/node_modules/zod/v4/locales/ar.d.cts +5 -0
  465. package/node_modules/zod/v4/locales/ar.d.ts +4 -0
  466. package/node_modules/zod/v4/locales/ar.js +106 -0
  467. package/node_modules/zod/v4/locales/az.cjs +132 -0
  468. package/node_modules/zod/v4/locales/az.d.cts +5 -0
  469. package/node_modules/zod/v4/locales/az.d.ts +4 -0
  470. package/node_modules/zod/v4/locales/az.js +105 -0
  471. package/node_modules/zod/v4/locales/be.cjs +183 -0
  472. package/node_modules/zod/v4/locales/be.d.cts +5 -0
  473. package/node_modules/zod/v4/locales/be.d.ts +4 -0
  474. package/node_modules/zod/v4/locales/be.js +156 -0
  475. package/node_modules/zod/v4/locales/bg.cjs +147 -0
  476. package/node_modules/zod/v4/locales/bg.d.cts +5 -0
  477. package/node_modules/zod/v4/locales/bg.d.ts +4 -0
  478. package/node_modules/zod/v4/locales/bg.js +120 -0
  479. package/node_modules/zod/v4/locales/ca.cjs +134 -0
  480. package/node_modules/zod/v4/locales/ca.d.cts +5 -0
  481. package/node_modules/zod/v4/locales/ca.d.ts +4 -0
  482. package/node_modules/zod/v4/locales/ca.js +107 -0
  483. package/node_modules/zod/v4/locales/cs.cjs +138 -0
  484. package/node_modules/zod/v4/locales/cs.d.cts +5 -0
  485. package/node_modules/zod/v4/locales/cs.d.ts +4 -0
  486. package/node_modules/zod/v4/locales/cs.js +111 -0
  487. package/node_modules/zod/v4/locales/da.cjs +142 -0
  488. package/node_modules/zod/v4/locales/da.d.cts +5 -0
  489. package/node_modules/zod/v4/locales/da.d.ts +4 -0
  490. package/node_modules/zod/v4/locales/da.js +115 -0
  491. package/node_modules/zod/v4/locales/de.cjs +135 -0
  492. package/node_modules/zod/v4/locales/de.d.cts +5 -0
  493. package/node_modules/zod/v4/locales/de.d.ts +4 -0
  494. package/node_modules/zod/v4/locales/de.js +108 -0
  495. package/node_modules/zod/v4/locales/en.cjs +136 -0
  496. package/node_modules/zod/v4/locales/en.d.cts +5 -0
  497. package/node_modules/zod/v4/locales/en.d.ts +4 -0
  498. package/node_modules/zod/v4/locales/en.js +109 -0
  499. package/node_modules/zod/v4/locales/eo.cjs +136 -0
  500. package/node_modules/zod/v4/locales/eo.d.cts +5 -0
  501. package/node_modules/zod/v4/locales/eo.d.ts +4 -0
  502. package/node_modules/zod/v4/locales/eo.js +109 -0
  503. package/node_modules/zod/v4/locales/es.cjs +159 -0
  504. package/node_modules/zod/v4/locales/es.d.cts +5 -0
  505. package/node_modules/zod/v4/locales/es.d.ts +4 -0
  506. package/node_modules/zod/v4/locales/es.js +132 -0
  507. package/node_modules/zod/v4/locales/fa.cjs +141 -0
  508. package/node_modules/zod/v4/locales/fa.d.cts +5 -0
  509. package/node_modules/zod/v4/locales/fa.d.ts +4 -0
  510. package/node_modules/zod/v4/locales/fa.js +114 -0
  511. package/node_modules/zod/v4/locales/fi.cjs +139 -0
  512. package/node_modules/zod/v4/locales/fi.d.cts +5 -0
  513. package/node_modules/zod/v4/locales/fi.d.ts +4 -0
  514. package/node_modules/zod/v4/locales/fi.js +112 -0
  515. package/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
  516. package/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
  517. package/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
  518. package/node_modules/zod/v4/locales/fr-CA.js +107 -0
  519. package/node_modules/zod/v4/locales/fr.cjs +135 -0
  520. package/node_modules/zod/v4/locales/fr.d.cts +5 -0
  521. package/node_modules/zod/v4/locales/fr.d.ts +4 -0
  522. package/node_modules/zod/v4/locales/fr.js +108 -0
  523. package/node_modules/zod/v4/locales/he.cjs +241 -0
  524. package/node_modules/zod/v4/locales/he.d.cts +5 -0
  525. package/node_modules/zod/v4/locales/he.d.ts +4 -0
  526. package/node_modules/zod/v4/locales/he.js +214 -0
  527. package/node_modules/zod/v4/locales/hu.cjs +135 -0
  528. package/node_modules/zod/v4/locales/hu.d.cts +5 -0
  529. package/node_modules/zod/v4/locales/hu.d.ts +4 -0
  530. package/node_modules/zod/v4/locales/hu.js +108 -0
  531. package/node_modules/zod/v4/locales/hy.cjs +174 -0
  532. package/node_modules/zod/v4/locales/hy.d.cts +5 -0
  533. package/node_modules/zod/v4/locales/hy.d.ts +4 -0
  534. package/node_modules/zod/v4/locales/hy.js +147 -0
  535. package/node_modules/zod/v4/locales/id.cjs +133 -0
  536. package/node_modules/zod/v4/locales/id.d.cts +5 -0
  537. package/node_modules/zod/v4/locales/id.d.ts +4 -0
  538. package/node_modules/zod/v4/locales/id.js +106 -0
  539. package/node_modules/zod/v4/locales/index.cjs +104 -0
  540. package/node_modules/zod/v4/locales/index.d.cts +49 -0
  541. package/node_modules/zod/v4/locales/index.d.ts +49 -0
  542. package/node_modules/zod/v4/locales/index.js +49 -0
  543. package/node_modules/zod/v4/locales/is.cjs +136 -0
  544. package/node_modules/zod/v4/locales/is.d.cts +5 -0
  545. package/node_modules/zod/v4/locales/is.d.ts +4 -0
  546. package/node_modules/zod/v4/locales/is.js +109 -0
  547. package/node_modules/zod/v4/locales/it.cjs +135 -0
  548. package/node_modules/zod/v4/locales/it.d.cts +5 -0
  549. package/node_modules/zod/v4/locales/it.d.ts +4 -0
  550. package/node_modules/zod/v4/locales/it.js +108 -0
  551. package/node_modules/zod/v4/locales/ja.cjs +134 -0
  552. package/node_modules/zod/v4/locales/ja.d.cts +5 -0
  553. package/node_modules/zod/v4/locales/ja.d.ts +4 -0
  554. package/node_modules/zod/v4/locales/ja.js +107 -0
  555. package/node_modules/zod/v4/locales/ka.cjs +139 -0
  556. package/node_modules/zod/v4/locales/ka.d.cts +5 -0
  557. package/node_modules/zod/v4/locales/ka.d.ts +4 -0
  558. package/node_modules/zod/v4/locales/ka.js +112 -0
  559. package/node_modules/zod/v4/locales/kh.cjs +12 -0
  560. package/node_modules/zod/v4/locales/kh.d.cts +5 -0
  561. package/node_modules/zod/v4/locales/kh.d.ts +5 -0
  562. package/node_modules/zod/v4/locales/kh.js +5 -0
  563. package/node_modules/zod/v4/locales/km.cjs +137 -0
  564. package/node_modules/zod/v4/locales/km.d.cts +5 -0
  565. package/node_modules/zod/v4/locales/km.d.ts +4 -0
  566. package/node_modules/zod/v4/locales/km.js +110 -0
  567. package/node_modules/zod/v4/locales/ko.cjs +138 -0
  568. package/node_modules/zod/v4/locales/ko.d.cts +5 -0
  569. package/node_modules/zod/v4/locales/ko.d.ts +4 -0
  570. package/node_modules/zod/v4/locales/ko.js +111 -0
  571. package/node_modules/zod/v4/locales/lt.cjs +230 -0
  572. package/node_modules/zod/v4/locales/lt.d.cts +5 -0
  573. package/node_modules/zod/v4/locales/lt.d.ts +4 -0
  574. package/node_modules/zod/v4/locales/lt.js +203 -0
  575. package/node_modules/zod/v4/locales/mk.cjs +136 -0
  576. package/node_modules/zod/v4/locales/mk.d.cts +5 -0
  577. package/node_modules/zod/v4/locales/mk.d.ts +4 -0
  578. package/node_modules/zod/v4/locales/mk.js +109 -0
  579. package/node_modules/zod/v4/locales/ms.cjs +134 -0
  580. package/node_modules/zod/v4/locales/ms.d.cts +5 -0
  581. package/node_modules/zod/v4/locales/ms.d.ts +4 -0
  582. package/node_modules/zod/v4/locales/ms.js +107 -0
  583. package/node_modules/zod/v4/locales/nl.cjs +137 -0
  584. package/node_modules/zod/v4/locales/nl.d.cts +5 -0
  585. package/node_modules/zod/v4/locales/nl.d.ts +4 -0
  586. package/node_modules/zod/v4/locales/nl.js +110 -0
  587. package/node_modules/zod/v4/locales/no.cjs +135 -0
  588. package/node_modules/zod/v4/locales/no.d.cts +5 -0
  589. package/node_modules/zod/v4/locales/no.d.ts +4 -0
  590. package/node_modules/zod/v4/locales/no.js +108 -0
  591. package/node_modules/zod/v4/locales/ota.cjs +136 -0
  592. package/node_modules/zod/v4/locales/ota.d.cts +5 -0
  593. package/node_modules/zod/v4/locales/ota.d.ts +4 -0
  594. package/node_modules/zod/v4/locales/ota.js +109 -0
  595. package/node_modules/zod/v4/locales/package.json +6 -0
  596. package/node_modules/zod/v4/locales/pl.cjs +136 -0
  597. package/node_modules/zod/v4/locales/pl.d.cts +5 -0
  598. package/node_modules/zod/v4/locales/pl.d.ts +4 -0
  599. package/node_modules/zod/v4/locales/pl.js +109 -0
  600. package/node_modules/zod/v4/locales/ps.cjs +141 -0
  601. package/node_modules/zod/v4/locales/ps.d.cts +5 -0
  602. package/node_modules/zod/v4/locales/ps.d.ts +4 -0
  603. package/node_modules/zod/v4/locales/ps.js +114 -0
  604. package/node_modules/zod/v4/locales/pt.cjs +135 -0
  605. package/node_modules/zod/v4/locales/pt.d.cts +5 -0
  606. package/node_modules/zod/v4/locales/pt.d.ts +4 -0
  607. package/node_modules/zod/v4/locales/pt.js +108 -0
  608. package/node_modules/zod/v4/locales/ru.cjs +183 -0
  609. package/node_modules/zod/v4/locales/ru.d.cts +5 -0
  610. package/node_modules/zod/v4/locales/ru.d.ts +4 -0
  611. package/node_modules/zod/v4/locales/ru.js +156 -0
  612. package/node_modules/zod/v4/locales/sl.cjs +136 -0
  613. package/node_modules/zod/v4/locales/sl.d.cts +5 -0
  614. package/node_modules/zod/v4/locales/sl.d.ts +4 -0
  615. package/node_modules/zod/v4/locales/sl.js +109 -0
  616. package/node_modules/zod/v4/locales/sv.cjs +137 -0
  617. package/node_modules/zod/v4/locales/sv.d.cts +5 -0
  618. package/node_modules/zod/v4/locales/sv.d.ts +4 -0
  619. package/node_modules/zod/v4/locales/sv.js +110 -0
  620. package/node_modules/zod/v4/locales/ta.cjs +137 -0
  621. package/node_modules/zod/v4/locales/ta.d.cts +5 -0
  622. package/node_modules/zod/v4/locales/ta.d.ts +4 -0
  623. package/node_modules/zod/v4/locales/ta.js +110 -0
  624. package/node_modules/zod/v4/locales/th.cjs +137 -0
  625. package/node_modules/zod/v4/locales/th.d.cts +5 -0
  626. package/node_modules/zod/v4/locales/th.d.ts +4 -0
  627. package/node_modules/zod/v4/locales/th.js +110 -0
  628. package/node_modules/zod/v4/locales/tr.cjs +132 -0
  629. package/node_modules/zod/v4/locales/tr.d.cts +5 -0
  630. package/node_modules/zod/v4/locales/tr.d.ts +4 -0
  631. package/node_modules/zod/v4/locales/tr.js +105 -0
  632. package/node_modules/zod/v4/locales/ua.cjs +12 -0
  633. package/node_modules/zod/v4/locales/ua.d.cts +5 -0
  634. package/node_modules/zod/v4/locales/ua.d.ts +5 -0
  635. package/node_modules/zod/v4/locales/ua.js +5 -0
  636. package/node_modules/zod/v4/locales/uk.cjs +135 -0
  637. package/node_modules/zod/v4/locales/uk.d.cts +5 -0
  638. package/node_modules/zod/v4/locales/uk.d.ts +4 -0
  639. package/node_modules/zod/v4/locales/uk.js +108 -0
  640. package/node_modules/zod/v4/locales/ur.cjs +137 -0
  641. package/node_modules/zod/v4/locales/ur.d.cts +5 -0
  642. package/node_modules/zod/v4/locales/ur.d.ts +4 -0
  643. package/node_modules/zod/v4/locales/ur.js +110 -0
  644. package/node_modules/zod/v4/locales/uz.cjs +136 -0
  645. package/node_modules/zod/v4/locales/uz.d.cts +5 -0
  646. package/node_modules/zod/v4/locales/uz.d.ts +4 -0
  647. package/node_modules/zod/v4/locales/uz.js +109 -0
  648. package/node_modules/zod/v4/locales/vi.cjs +135 -0
  649. package/node_modules/zod/v4/locales/vi.d.cts +5 -0
  650. package/node_modules/zod/v4/locales/vi.d.ts +4 -0
  651. package/node_modules/zod/v4/locales/vi.js +108 -0
  652. package/node_modules/zod/v4/locales/yo.cjs +134 -0
  653. package/node_modules/zod/v4/locales/yo.d.cts +5 -0
  654. package/node_modules/zod/v4/locales/yo.d.ts +4 -0
  655. package/node_modules/zod/v4/locales/yo.js +107 -0
  656. package/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
  657. package/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
  658. package/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
  659. package/node_modules/zod/v4/locales/zh-CN.js +109 -0
  660. package/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
  661. package/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
  662. package/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
  663. package/node_modules/zod/v4/locales/zh-TW.js +107 -0
  664. package/node_modules/zod/v4/mini/checks.cjs +34 -0
  665. package/node_modules/zod/v4/mini/checks.d.cts +1 -0
  666. package/node_modules/zod/v4/mini/checks.d.ts +1 -0
  667. package/node_modules/zod/v4/mini/checks.js +1 -0
  668. package/node_modules/zod/v4/mini/coerce.cjs +52 -0
  669. package/node_modules/zod/v4/mini/coerce.d.cts +7 -0
  670. package/node_modules/zod/v4/mini/coerce.d.ts +7 -0
  671. package/node_modules/zod/v4/mini/coerce.js +22 -0
  672. package/node_modules/zod/v4/mini/external.cjs +63 -0
  673. package/node_modules/zod/v4/mini/external.d.cts +12 -0
  674. package/node_modules/zod/v4/mini/external.d.ts +12 -0
  675. package/node_modules/zod/v4/mini/external.js +14 -0
  676. package/node_modules/zod/v4/mini/index.cjs +32 -0
  677. package/node_modules/zod/v4/mini/index.d.cts +3 -0
  678. package/node_modules/zod/v4/mini/index.d.ts +3 -0
  679. package/node_modules/zod/v4/mini/index.js +3 -0
  680. package/node_modules/zod/v4/mini/iso.cjs +64 -0
  681. package/node_modules/zod/v4/mini/iso.d.cts +22 -0
  682. package/node_modules/zod/v4/mini/iso.d.ts +22 -0
  683. package/node_modules/zod/v4/mini/iso.js +34 -0
  684. package/node_modules/zod/v4/mini/package.json +6 -0
  685. package/node_modules/zod/v4/mini/parse.cjs +16 -0
  686. package/node_modules/zod/v4/mini/parse.d.cts +1 -0
  687. package/node_modules/zod/v4/mini/parse.d.ts +1 -0
  688. package/node_modules/zod/v4/mini/parse.js +1 -0
  689. package/node_modules/zod/v4/mini/schemas.cjs +1046 -0
  690. package/node_modules/zod/v4/mini/schemas.d.cts +427 -0
  691. package/node_modules/zod/v4/mini/schemas.d.ts +427 -0
  692. package/node_modules/zod/v4/mini/schemas.js +925 -0
  693. package/node_modules/zod/v4/package.json +6 -0
  694. package/node_modules/zod/v4-mini/index.cjs +32 -0
  695. package/node_modules/zod/v4-mini/index.d.cts +3 -0
  696. package/node_modules/zod/v4-mini/index.d.ts +3 -0
  697. package/node_modules/zod/v4-mini/index.js +3 -0
  698. package/node_modules/zod/v4-mini/package.json +6 -0
  699. package/package.json +11 -10
  700. package/chat/charts/chart/chart.component.d.ts +0 -13
  701. package/chat/chat-message/chat-message.component.d.ts +0 -75
  702. package/chat/chat-settings-v3/chat-settings-v3.component.d.ts +0 -48
  703. package/chat/chat.component.d.ts +0 -387
  704. package/chat/chat.service.d.ts +0 -370
  705. package/chat/custom-elements/components/code-block.component.d.ts +0 -11
  706. package/chat/custom-elements/components/document-reference.component.d.ts +0 -13
  707. package/chat/custom-elements/components/image-reference.component.d.ts +0 -14
  708. package/chat/custom-elements/components/page-reference.component.d.ts +0 -14
  709. package/chat/custom-elements/components/table-tools.component.d.ts +0 -11
  710. package/chat/custom-elements/custom-elements.config.d.ts +0 -2
  711. package/chat/custom-elements/custom-elements.service.d.ts +0 -14
  712. package/chat/debug-message/debug-message-details/debug-message-details.component.d.ts +0 -18
  713. package/chat/debug-message/debug-message.component.d.ts +0 -14
  714. package/chat/debug-message/debug-message.service.d.ts +0 -15
  715. package/chat/dialogs/delete-saved-chat.component.d.ts +0 -22
  716. package/chat/dialogs/rename-saved-chat.component.d.ts +0 -21
  717. package/chat/dialogs/updates.component.d.ts +0 -15
  718. package/chat/documents-upload/document-list/document-list.component.d.ts +0 -64
  719. package/chat/documents-upload/document-overview/document-overview.component.d.ts +0 -17
  720. package/chat/documents-upload/document-upload/document-upload.component.d.ts +0 -91
  721. package/chat/documents-upload/documents-upload.model.d.ts +0 -66
  722. package/chat/documents-upload/documents-upload.service.d.ts +0 -161
  723. package/chat/fetch-patcher/app-injector.d.ts +0 -9
  724. package/chat/fetch-patcher/fetch-patcher.d.ts +0 -31
  725. package/chat/fetch-patcher/global-error-handler.service.d.ts +0 -36
  726. package/chat/fetch-patcher/handle-unauthorized-logic.d.ts +0 -13
  727. package/chat/format-icon/format-icon.component.d.ts +0 -10
  728. package/chat/format-icon/icons.d.ts +0 -5
  729. package/chat/initials-avatar/initials-avatar.component.d.ts +0 -35
  730. package/chat/instance-manager.service.d.ts +0 -28
  731. package/chat/markdown-it/markdown-it.config.d.ts +0 -4
  732. package/chat/markdown-it/plugins/code-block.plugin.d.ts +0 -2
  733. package/chat/markdown-it/plugins/document-reference.plugin.d.ts +0 -8
  734. package/chat/markdown-it/plugins/image-reference.plugin.d.ts +0 -9
  735. package/chat/markdown-it/plugins/link.plugin.d.ts +0 -5
  736. package/chat/markdown-it/plugins/page-reference.plugin.d.ts +0 -9
  737. package/chat/markdown-it/plugins/table-tools.plugin.d.ts +0 -2
  738. package/chat/pipes/message-content.pipe.d.ts +0 -16
  739. package/chat/public-api.d.ts +0 -35
  740. package/chat/references/chat-reference/chat-reference.component.d.ts +0 -24
  741. package/chat/references/chat-reference-image/chat-reference-image.component.d.ts +0 -20
  742. package/chat/references/chat-reference-page/chat-reference-page.component.d.ts +0 -20
  743. package/chat/saved-chats/saved-chats.component.d.ts +0 -37
  744. package/chat/saved-chats/saved-chats.service.d.ts +0 -29
  745. package/chat/services/app.service.d.ts +0 -9
  746. package/chat/services/assistant-configuration.service.d.ts +0 -34
  747. package/chat/services/assistant-metadata.service.d.ts +0 -20
  748. package/chat/services/assistant-tokens-tracking.service.d.ts +0 -23
  749. package/chat/services/assistant-ws-frames.service.d.ts +0 -50
  750. package/chat/services/dialog.service.d.ts +0 -12
  751. package/chat/services/notification.service.d.ts +0 -10
  752. package/chat/services/principal.service.d.ts +0 -7
  753. package/chat/services/search.service.d.ts +0 -7
  754. package/chat/services/signalR-connection.service.d.ts +0 -25
  755. package/chat/services/signalR.web.service.d.ts +0 -35
  756. package/chat/services/ui.service.d.ts +0 -13
  757. package/chat/services/user-settings.service.d.ts +0 -7
  758. package/chat/smart-renderer/smart-renderer.d.ts +0 -25
  759. package/chat/token-progress-bar/token-progress-bar.component.d.ts +0 -24
  760. package/chat/tooltip/tooltip.component.d.ts +0 -12
  761. package/chat/tooltip/tooltip.directive.d.ts +0 -81
  762. package/chat/types/message-content.types.d.ts +0 -54
  763. package/chat/types/message-reference.types.d.ts +0 -14
  764. package/chat/types.d.ts +0 -920
  765. package/chat/utils/assistant-json.d.ts +0 -2
  766. package/chat/utils/utils.service.d.ts +0 -67
  767. package/chat/version.d.ts +0 -1
  768. package/esm2022/chat/charts/chart/chart.component.mjs +0 -40
  769. package/esm2022/chat/chat-message/chat-message.component.mjs +0 -252
  770. package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +0 -121
  771. package/esm2022/chat/chat.component.mjs +0 -1115
  772. package/esm2022/chat/chat.service.mjs +0 -636
  773. package/esm2022/chat/custom-elements/components/code-block.component.mjs +0 -97
  774. package/esm2022/chat/custom-elements/components/document-reference.component.mjs +0 -85
  775. package/esm2022/chat/custom-elements/components/image-reference.component.mjs +0 -79
  776. package/esm2022/chat/custom-elements/components/page-reference.component.mjs +0 -79
  777. package/esm2022/chat/custom-elements/components/table-tools.component.mjs +0 -111
  778. package/esm2022/chat/custom-elements/custom-elements.config.mjs +0 -6
  779. package/esm2022/chat/custom-elements/custom-elements.service.mjs +0 -35
  780. package/esm2022/chat/debug-message/debug-message-details/debug-message-details.component.mjs +0 -43
  781. package/esm2022/chat/debug-message/debug-message.component.mjs +0 -40
  782. package/esm2022/chat/debug-message/debug-message.service.mjs +0 -49
  783. package/esm2022/chat/dialogs/delete-saved-chat.component.mjs +0 -81
  784. package/esm2022/chat/dialogs/rename-saved-chat.component.mjs +0 -85
  785. package/esm2022/chat/dialogs/updates.component.mjs +0 -61
  786. package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +0 -141
  787. package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +0 -42
  788. package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +0 -254
  789. package/esm2022/chat/documents-upload/documents-upload.model.mjs +0 -2
  790. package/esm2022/chat/documents-upload/documents-upload.service.mjs +0 -274
  791. package/esm2022/chat/fetch-patcher/app-injector.mjs +0 -19
  792. package/esm2022/chat/fetch-patcher/fetch-patcher.mjs +0 -62
  793. package/esm2022/chat/fetch-patcher/global-error-handler.service.mjs +0 -92
  794. package/esm2022/chat/fetch-patcher/handle-unauthorized-logic.mjs +0 -19
  795. package/esm2022/chat/format-icon/format-icon.component.mjs +0 -23
  796. package/esm2022/chat/format-icon/icons.mjs +0 -138
  797. package/esm2022/chat/initials-avatar/initials-avatar.component.mjs +0 -60
  798. package/esm2022/chat/instance-manager.service.mjs +0 -46
  799. package/esm2022/chat/markdown-it/markdown-it.config.mjs +0 -6
  800. package/esm2022/chat/markdown-it/plugins/code-block.plugin.mjs +0 -14
  801. package/esm2022/chat/markdown-it/plugins/document-reference.plugin.mjs +0 -66
  802. package/esm2022/chat/markdown-it/plugins/image-reference.plugin.mjs +0 -67
  803. package/esm2022/chat/markdown-it/plugins/link.plugin.mjs +0 -15
  804. package/esm2022/chat/markdown-it/plugins/page-reference.plugin.mjs +0 -67
  805. package/esm2022/chat/markdown-it/plugins/table-tools.plugin.mjs +0 -12
  806. package/esm2022/chat/pipes/message-content.pipe.mjs +0 -37
  807. package/esm2022/chat/public-api.mjs +0 -37
  808. package/esm2022/chat/references/chat-reference/chat-reference.component.mjs +0 -72
  809. package/esm2022/chat/references/chat-reference-image/chat-reference-image.component.mjs +0 -42
  810. package/esm2022/chat/references/chat-reference-page/chat-reference-page.component.mjs +0 -42
  811. package/esm2022/chat/saved-chats/saved-chats.component.mjs +0 -115
  812. package/esm2022/chat/saved-chats/saved-chats.service.mjs +0 -170
  813. package/esm2022/chat/services/app.service.mjs +0 -30
  814. package/esm2022/chat/services/assistant-configuration.service.mjs +0 -158
  815. package/esm2022/chat/services/assistant-metadata.service.mjs +0 -85
  816. package/esm2022/chat/services/assistant-tokens-tracking.service.mjs +0 -50
  817. package/esm2022/chat/services/assistant-ws-frames.service.mjs +0 -391
  818. package/esm2022/chat/services/dialog.service.mjs +0 -40
  819. package/esm2022/chat/services/notification.service.mjs +0 -25
  820. package/esm2022/chat/services/principal.service.mjs +0 -16
  821. package/esm2022/chat/services/search.service.mjs +0 -13
  822. package/esm2022/chat/services/signalR-connection.service.mjs +0 -102
  823. package/esm2022/chat/services/signalR.web.service.mjs +0 -69
  824. package/esm2022/chat/services/ui.service.mjs +0 -61
  825. package/esm2022/chat/services/user-settings.service.mjs +0 -25
  826. package/esm2022/chat/sinequa-assistant-chat.mjs +0 -5
  827. package/esm2022/chat/smart-renderer/smart-renderer.mjs +0 -104
  828. package/esm2022/chat/token-progress-bar/token-progress-bar.component.mjs +0 -52
  829. package/esm2022/chat/tooltip/tooltip.component.mjs +0 -44
  830. package/esm2022/chat/tooltip/tooltip.directive.mjs +0 -203
  831. package/esm2022/chat/types/message-content.types.mjs +0 -2
  832. package/esm2022/chat/types/message-reference.types.mjs +0 -2
  833. package/esm2022/chat/types.mjs +0 -130
  834. package/esm2022/chat/utils/assistant-json.mjs +0 -12
  835. package/esm2022/chat/utils/utils.service.mjs +0 -170
  836. package/esm2022/chat/version.mjs +0 -3
  837. package/esm2022/public-api.mjs +0 -3
  838. package/esm2022/sinequa-assistant.mjs +0 -5
  839. package/public-api.d.ts +0 -1
@@ -1,13 +1,13 @@
1
1
  import * as i1 from '@angular/common';
2
2
  import { CommonModule, NgTemplateOutlet } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { Injectable, EventEmitter, inject, Component, Input, Output, Pipe, InjectionToken, input, signal, effect, ChangeDetectionStrategy, Directive, HostListener, ViewEncapsulation, output, viewChild, computed, LOCALE_ID, ElementRef, createComponent, ChangeDetectorRef, DestroyRef, ViewChild, ContentChild, Injector } from '@angular/core';
4
+ import { Injectable, EventEmitter, inject, Output, Input, Component, Pipe, InjectionToken, input, signal, effect, ChangeDetectionStrategy, HostListener, Directive, ViewEncapsulation, output, viewChild, computed, LOCALE_ID, ElementRef, createComponent, ChangeDetectorRef, DestroyRef, ContentChild, ViewChild, Injector } from '@angular/core';
5
5
  import * as i2 from '@angular/forms';
6
6
  import { FormsModule } from '@angular/forms';
7
7
  import { Subscription, of, tap, switchMap, filter, delay, from, throwError, Subject, fromEvent, merge, Observable, BehaviorSubject, defer, take as take$1, forkJoin, map as map$1, catchError as catchError$1, finalize as finalize$1, combineLatest, debounceTime, distinctUntilChanged, EMPTY, interval, startWith, takeWhile } from 'rxjs';
8
- import { provideTranslocoScope, TranslocoPipe, TranslocoService } from '@jsverse/transloco';
8
+ import { TranslocoPipe, provideTranslocoScope, TranslocoService } from '@jsverse/transloco';
9
9
  import { fetchApp, isAuthenticated, sha512, patchUserSettings, get, post, globalConfig, getToken, fetchUserSettings, fetchPrincipal, guid, Audit, setGlobalConfig, fetchQuery } from '@sinequa/atomic';
10
- import { HubConnectionBuilder, LogLevel, HttpTransportType, HubConnectionState } from '@microsoft/signalr';
10
+ import { LogLevel, HubConnectionBuilder, HttpTransportType, HubConnectionState } from '@microsoft/signalr';
11
11
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
12
12
  import { Chart, registerables } from 'chart.js';
13
13
  import SafeColor from 'safecolor';
@@ -33,9 +33,7 @@ import { createCustomElement } from '@angular/elements';
33
33
  * All chat-related components should share the same instance of this InstanceManagerService, which in turn provides the appropriate instance of ChatService
34
34
  */
35
35
  class InstanceManagerService {
36
- constructor() {
37
- this._serviceInstances = new Map();
38
- }
36
+ _serviceInstances = new Map();
39
37
  /**
40
38
  * Store the instance of ChatService in the map
41
39
  * @param key key differentiator between components used to store their corresponding ChatService instance
@@ -62,10 +60,10 @@ class InstanceManagerService {
62
60
  checkInstance(key) {
63
61
  return this._serviceInstances.has(key);
64
62
  }
65
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InstanceManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
66
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InstanceManagerService, providedIn: 'root' }); }
63
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InstanceManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
64
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InstanceManagerService, providedIn: 'root' });
67
65
  }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InstanceManagerService, decorators: [{
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InstanceManagerService, decorators: [{
69
67
  type: Injectable,
70
68
  args: [{
71
69
  providedIn: 'root',
@@ -73,9 +71,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
73
71
  }] });
74
72
 
75
73
  class AppService {
76
- constructor() {
77
- this.app = undefined;
78
- }
74
+ app = undefined;
79
75
  async init() {
80
76
  if (!this.app) {
81
77
  try {
@@ -89,10 +85,10 @@ class AppService {
89
85
  get appName() {
90
86
  return this?.app?.name || "";
91
87
  }
92
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
93
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppService, providedIn: 'root' }); }
88
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
89
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppService, providedIn: 'root' });
94
90
  }
95
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppService, decorators: [{
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppService, decorators: [{
96
92
  type: Injectable,
97
93
  args: [{
98
94
  providedIn: 'root'
@@ -100,13 +96,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
100
96
  }] });
101
97
 
102
98
  class PrincipalService {
103
- constructor() {
104
- this.principal = {};
105
- }
106
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PrincipalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
107
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PrincipalService, providedIn: "root" }); }
99
+ principal = {};
100
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PrincipalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
101
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PrincipalService, providedIn: "root" });
108
102
  }
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PrincipalService, decorators: [{
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PrincipalService, decorators: [{
110
104
  type: Injectable,
111
105
  args: [{
112
106
  providedIn: "root"
@@ -126,17 +120,20 @@ function getAssistantJsonFromCCApp(ccApp, configId) {
126
120
  }
127
121
 
128
122
  class ChatSettingsV3Component {
129
- constructor() {
130
- this._update = new EventEmitter();
131
- this._cancel = new EventEmitter();
132
- this.subscription = new Subscription();
133
- this.functions = [];
134
- this.isAdmin = false;
135
- this.showDebugToggle = false;
136
- this.instanceManagerService = inject(InstanceManagerService);
137
- this.principalService = inject(PrincipalService);
138
- this.appService = inject(AppService);
139
- }
123
+ /** Define the key based on it, the appropriate chatService instance will be returned from instanceManagerService */
124
+ instanceId;
125
+ _update = new EventEmitter();
126
+ _cancel = new EventEmitter();
127
+ chatService;
128
+ config;
129
+ subscription = new Subscription();
130
+ selectedModel;
131
+ functions = [];
132
+ isAdmin = false;
133
+ showDebugToggle = false;
134
+ instanceManagerService = inject(InstanceManagerService);
135
+ principalService = inject(PrincipalService);
136
+ appService = inject(AppService);
140
137
  ngOnInit() {
141
138
  this.subscription.add(of(isAuthenticated()).pipe(tap(_ => this.instantiateChatService()), switchMap(() => this.chatService.initProcess$.pipe(filter(Boolean)))).subscribe(_ => {
142
139
  this.isAdmin = this.principalService.principal.isAdministrator;
@@ -217,10 +214,10 @@ class ChatSettingsV3Component {
217
214
  cancel() {
218
215
  this._cancel.emit(this.chatService.assistantConfig$.value);
219
216
  }
220
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatSettingsV3Component, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
221
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChatSettingsV3Component, isStandalone: true, selector: "sq-chat-settings-v3", inputs: { instanceId: "instanceId" }, outputs: { _update: "update", _cancel: "cancel" }, providers: [provideTranslocoScope('chat-settings')], ngImport: i0, template: "<div class=\"sq-chat-settings\" *ngIf=\"isAdmin || config?.uiSettings.display\">\n <div class=\"settings-panel p-2 small\" *ngIf=\"config\">\n\n <h5 *ngIf=\"hasModel\">{{ 'chatSettings.model' | transloco }}</h5>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.servicesModels\">\n <label for=\"gllmModel\" class=\"form-label\">{{ 'chatSettings.model' | transloco }}</label>\n <select class=\"form-select\" id=\"gllmModel\" [(ngModel)]=\"selectedModel\" (ngModelChange)=\"onChatModelChange($event)\">\n <option *ngFor=\"let model of chatService.models\" [ngValue]=\"model\">{{model.name}}</option>\n </select>\n </div>\n\n <div class=\"mb-4\" *ngIf=\"isAdmin || config?.uiSettings.functions\">\n <label for=\"gllmFunctions\" class=\"form-label\">{{ 'chatSettings.functions' | transloco }}</label>\n <div id=\"gllmFunctions\" *ngFor=\"let func of functions\" class=\"multi-option form-check form-switch\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" [id]=\"func.name\" [(ngModel)]=\"func.enabled\"\n (ngModelChange)=\"toggleFunctionsSelection(func.name)\">\n <label class=\"form-label\" [for]=\"func.name\" [title]=\"getFunctionDescription(func.name)\">{{ func.name }}</label>\n </div>\n </div>\n\n <div class=\"form-check form-switch mb-2\" *ngIf=\"showDebugToggle\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"debug\" [(ngModel)]=\"config.defaultValues.debug\">\n <label class=\"form-check-label\" for=\"debug\">{{ 'chatSettings.debug' | transloco }}</label>\n </div>\n\n <details *ngIf=\"hasAdvancedParameters\">\n <summary>{{ 'chatSettings.advancedParameters' | transloco }}</summary>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.temperature) && config?.defaultValues.temperature !== undefined\">\n <label for=\"temperature\" class=\"form-label\">{{ 'chatSettings.temperature' | transloco }}: {{config?.defaultValues.temperature}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"0\" max=\"2\" step=\"0.1\" id=\"temperature\"\n [(ngModel)]=\"config.defaultValues.temperature\">\n </div>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.top_p) && config?.defaultValues.top_p !== undefined\">\n <label for=\"top-p\" class=\"form-label\">{{ 'chatSettings.topP' | transloco }}: {{config?.defaultValues.top_p}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"0\" max=\"1\" step=\"0.05\" id=\"top-p\"\n [(ngModel)]=\"config.defaultValues.top_p\">\n </div>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.max_tokens) && config?.defaultValues.max_tokens !== undefined\">\n <label for=\"max-tokens\" class=\"form-label\">{{ 'chatSettings.MaxGeneratedTokens' | transloco }}:\n {{config?.defaultValues.max_tokens}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"1\" max=\"2048\" step=\"1\" id=\"max-tokens\"\n [(ngModel)]=\"config.defaultValues.max_tokens\">\n </div>\n </details>\n\n <hr>\n\n <h5 *ngIf=\"hasPrompts\">{{ 'chatSettings.Prompts' | transloco }}</h5>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.displaySystemPrompt\">\n <label for=\"initialSystemPrompt\" class=\"form-label\">{{ 'chatSettings.systemPrompt' | transloco }}</label>\n <textarea class=\"form-control\" id=\"initialSystemPrompt\" [(ngModel)]=\"config.defaultValues.systemPrompt\"></textarea>\n </div>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.displayUserPrompt\">\n <label for=\"initialUserPrompt\" class=\"form-label\">{{ 'chatSettings.initialUserPrompt' | transloco }}</label>\n <textarea class=\"form-control\" id=\"initialUserPrompt\" [(ngModel)]=\"config.defaultValues.userPrompt\"></textarea>\n </div>\n\n </div>\n\n <div class=\"buttons-panel d-flex justify-content-end\">\n <button class=\"btn btn-light me-1\" (click)=\"cancel()\">{{ 'chatSettings.cancel' | transloco }}</button>\n <button class=\"btn btn-primary\" *ngIf=\"config\" (click)=\"save()\">{{ 'chatSettings.save' | transloco }}</button>\n </div>\n\n</div>\n", styles: [":host{display:block;width:var(--ast-chat-settings-width, 100%);max-width:100%;height:100%;margin-left:auto;margin-right:auto;padding-top:var(--ast-chat-settings-padding-top, 0);padding-bottom:var(--ast-chat-settings-padding-bottom, 0)}.sq-chat-settings{display:flex;flex-direction:column;max-height:100%}.sq-chat-settings .settings-panel{flex-grow:1;overflow:auto}.sq-chat-settings .buttons-panel{padding-top:.5rem}.d-flex{display:flex}.justify-content-end{justify-content:flex-end}.small{font-size:.875em}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-label{margin-bottom:.5rem}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-switch{padding-left:2.5em}.form-check-input{--bs-form-check-bg: var(--bs-body-bg);--bs-form-check-checked-bg-color: #ff854a;--bs-form-check-checked-border-color: #ff854a;--bs-form-check-checked-bg-color-hover: #e6540b;--bs-form-check-checked-border-color-hover: #e6540b;flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]:checked{background-color:var(--bs-form-check-checked-bg-color);border-color:var(--bs-form-check-checked-border-color)}.form-check-input[type=checkbox]:checked:hover{background-color:var(--bs-form-check-checked-bg-color-hover);border-color:var(--bs-form-check-checked-border-color-hover)}.form-range{width:100%;height:1.5rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
217
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatSettingsV3Component, deps: [], target: i0.ɵɵFactoryTarget.Component });
218
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ChatSettingsV3Component, isStandalone: true, selector: "sq-chat-settings-v3", inputs: { instanceId: "instanceId" }, outputs: { _update: "update", _cancel: "cancel" }, providers: [provideTranslocoScope('chat-settings')], ngImport: i0, template: "<div class=\"sq-chat-settings\" *ngIf=\"isAdmin || config?.uiSettings.display\">\n <div class=\"settings-panel p-2 small\" *ngIf=\"config\">\n\n <h5 *ngIf=\"hasModel\">{{ 'chatSettings.model' | transloco }}</h5>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.servicesModels\">\n <label for=\"gllmModel\" class=\"form-label\">{{ 'chatSettings.model' | transloco }}</label>\n <select class=\"form-select\" id=\"gllmModel\" [(ngModel)]=\"selectedModel\" (ngModelChange)=\"onChatModelChange($event)\">\n <option *ngFor=\"let model of chatService.models\" [ngValue]=\"model\">{{model.name}}</option>\n </select>\n </div>\n\n <div class=\"mb-4\" *ngIf=\"isAdmin || config?.uiSettings.functions\">\n <label for=\"gllmFunctions\" class=\"form-label\">{{ 'chatSettings.functions' | transloco }}</label>\n <div id=\"gllmFunctions\" *ngFor=\"let func of functions\" class=\"multi-option form-check form-switch\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" [id]=\"func.name\" [(ngModel)]=\"func.enabled\"\n (ngModelChange)=\"toggleFunctionsSelection(func.name)\">\n <label class=\"form-label\" [for]=\"func.name\" [title]=\"getFunctionDescription(func.name)\">{{ func.name }}</label>\n </div>\n </div>\n\n <div class=\"form-check form-switch mb-2\" *ngIf=\"showDebugToggle\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"debug\" [(ngModel)]=\"config.defaultValues.debug\">\n <label class=\"form-check-label\" for=\"debug\">{{ 'chatSettings.debug' | transloco }}</label>\n </div>\n\n <details *ngIf=\"hasAdvancedParameters\">\n <summary>{{ 'chatSettings.advancedParameters' | transloco }}</summary>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.temperature) && config?.defaultValues.temperature !== undefined\">\n <label for=\"temperature\" class=\"form-label\">{{ 'chatSettings.temperature' | transloco }}: {{config?.defaultValues.temperature}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"0\" max=\"2\" step=\"0.1\" id=\"temperature\"\n [(ngModel)]=\"config.defaultValues.temperature\">\n </div>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.top_p) && config?.defaultValues.top_p !== undefined\">\n <label for=\"top-p\" class=\"form-label\">{{ 'chatSettings.topP' | transloco }}: {{config?.defaultValues.top_p}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"0\" max=\"1\" step=\"0.05\" id=\"top-p\"\n [(ngModel)]=\"config.defaultValues.top_p\">\n </div>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.max_tokens) && config?.defaultValues.max_tokens !== undefined\">\n <label for=\"max-tokens\" class=\"form-label\">{{ 'chatSettings.MaxGeneratedTokens' | transloco }}:\n {{config?.defaultValues.max_tokens}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"1\" max=\"2048\" step=\"1\" id=\"max-tokens\"\n [(ngModel)]=\"config.defaultValues.max_tokens\">\n </div>\n </details>\n\n <hr>\n\n <h5 *ngIf=\"hasPrompts\">{{ 'chatSettings.Prompts' | transloco }}</h5>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.displaySystemPrompt\">\n <label for=\"initialSystemPrompt\" class=\"form-label\">{{ 'chatSettings.systemPrompt' | transloco }}</label>\n <textarea class=\"form-control\" id=\"initialSystemPrompt\" [(ngModel)]=\"config.defaultValues.systemPrompt\"></textarea>\n </div>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.displayUserPrompt\">\n <label for=\"initialUserPrompt\" class=\"form-label\">{{ 'chatSettings.initialUserPrompt' | transloco }}</label>\n <textarea class=\"form-control\" id=\"initialUserPrompt\" [(ngModel)]=\"config.defaultValues.userPrompt\"></textarea>\n </div>\n\n </div>\n\n <div class=\"buttons-panel d-flex justify-content-end\">\n <button class=\"btn btn-light me-1\" (click)=\"cancel()\">{{ 'chatSettings.cancel' | transloco }}</button>\n <button class=\"btn btn-primary\" *ngIf=\"config\" (click)=\"save()\">{{ 'chatSettings.save' | transloco }}</button>\n </div>\n\n</div>\n", styles: [":host{display:block;width:var(--ast-chat-settings-width, 100%);max-width:100%;height:100%;margin-left:auto;margin-right:auto;padding-top:var(--ast-chat-settings-padding-top, 0);padding-bottom:var(--ast-chat-settings-padding-bottom, 0)}.sq-chat-settings{display:flex;flex-direction:column;max-height:100%}.sq-chat-settings .settings-panel{flex-grow:1;overflow:auto}.sq-chat-settings .buttons-panel{padding-top:.5rem}.d-flex{display:flex}.justify-content-end{justify-content:flex-end}.small{font-size:.875em}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-label{margin-bottom:.5rem}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-switch{padding-left:2.5em}.form-check-input{--bs-form-check-bg: var(--bs-body-bg);--bs-form-check-checked-bg-color: #ff854a;--bs-form-check-checked-border-color: #ff854a;--bs-form-check-checked-bg-color-hover: #e6540b;--bs-form-check-checked-border-color-hover: #e6540b;flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]:checked{background-color:var(--bs-form-check-checked-bg-color);border-color:var(--bs-form-check-checked-border-color)}.form-check-input[type=checkbox]:checked:hover{background-color:var(--bs-form-check-checked-bg-color-hover);border-color:var(--bs-form-check-checked-border-color-hover)}.form-range{width:100%;height:1.5rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
222
219
  }
223
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatSettingsV3Component, decorators: [{
220
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatSettingsV3Component, decorators: [{
224
221
  type: Component,
225
222
  args: [{ selector: 'sq-chat-settings-v3', standalone: true, imports: [CommonModule, FormsModule, TranslocoPipe], providers: [provideTranslocoScope('chat-settings')], template: "<div class=\"sq-chat-settings\" *ngIf=\"isAdmin || config?.uiSettings.display\">\n <div class=\"settings-panel p-2 small\" *ngIf=\"config\">\n\n <h5 *ngIf=\"hasModel\">{{ 'chatSettings.model' | transloco }}</h5>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.servicesModels\">\n <label for=\"gllmModel\" class=\"form-label\">{{ 'chatSettings.model' | transloco }}</label>\n <select class=\"form-select\" id=\"gllmModel\" [(ngModel)]=\"selectedModel\" (ngModelChange)=\"onChatModelChange($event)\">\n <option *ngFor=\"let model of chatService.models\" [ngValue]=\"model\">{{model.name}}</option>\n </select>\n </div>\n\n <div class=\"mb-4\" *ngIf=\"isAdmin || config?.uiSettings.functions\">\n <label for=\"gllmFunctions\" class=\"form-label\">{{ 'chatSettings.functions' | transloco }}</label>\n <div id=\"gllmFunctions\" *ngFor=\"let func of functions\" class=\"multi-option form-check form-switch\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" [id]=\"func.name\" [(ngModel)]=\"func.enabled\"\n (ngModelChange)=\"toggleFunctionsSelection(func.name)\">\n <label class=\"form-label\" [for]=\"func.name\" [title]=\"getFunctionDescription(func.name)\">{{ func.name }}</label>\n </div>\n </div>\n\n <div class=\"form-check form-switch mb-2\" *ngIf=\"showDebugToggle\">\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" id=\"debug\" [(ngModel)]=\"config.defaultValues.debug\">\n <label class=\"form-check-label\" for=\"debug\">{{ 'chatSettings.debug' | transloco }}</label>\n </div>\n\n <details *ngIf=\"hasAdvancedParameters\">\n <summary>{{ 'chatSettings.advancedParameters' | transloco }}</summary>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.temperature) && config?.defaultValues.temperature !== undefined\">\n <label for=\"temperature\" class=\"form-label\">{{ 'chatSettings.temperature' | transloco }}: {{config?.defaultValues.temperature}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"0\" max=\"2\" step=\"0.1\" id=\"temperature\"\n [(ngModel)]=\"config.defaultValues.temperature\">\n </div>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.top_p) && config?.defaultValues.top_p !== undefined\">\n <label for=\"top-p\" class=\"form-label\">{{ 'chatSettings.topP' | transloco }}: {{config?.defaultValues.top_p}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"0\" max=\"1\" step=\"0.05\" id=\"top-p\"\n [(ngModel)]=\"config.defaultValues.top_p\">\n </div>\n <div class=\"mb-2\" *ngIf=\"(isAdmin || config?.uiSettings.max_tokens) && config?.defaultValues.max_tokens !== undefined\">\n <label for=\"max-tokens\" class=\"form-label\">{{ 'chatSettings.MaxGeneratedTokens' | transloco }}:\n {{config?.defaultValues.max_tokens}}</label>\n <input type=\"range\" class=\"form-range form-range-sm\" min=\"1\" max=\"2048\" step=\"1\" id=\"max-tokens\"\n [(ngModel)]=\"config.defaultValues.max_tokens\">\n </div>\n </details>\n\n <hr>\n\n <h5 *ngIf=\"hasPrompts\">{{ 'chatSettings.Prompts' | transloco }}</h5>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.displaySystemPrompt\">\n <label for=\"initialSystemPrompt\" class=\"form-label\">{{ 'chatSettings.systemPrompt' | transloco }}</label>\n <textarea class=\"form-control\" id=\"initialSystemPrompt\" [(ngModel)]=\"config.defaultValues.systemPrompt\"></textarea>\n </div>\n <div class=\"mb-2\" *ngIf=\"isAdmin || config?.uiSettings.displayUserPrompt\">\n <label for=\"initialUserPrompt\" class=\"form-label\">{{ 'chatSettings.initialUserPrompt' | transloco }}</label>\n <textarea class=\"form-control\" id=\"initialUserPrompt\" [(ngModel)]=\"config.defaultValues.userPrompt\"></textarea>\n </div>\n\n </div>\n\n <div class=\"buttons-panel d-flex justify-content-end\">\n <button class=\"btn btn-light me-1\" (click)=\"cancel()\">{{ 'chatSettings.cancel' | transloco }}</button>\n <button class=\"btn btn-primary\" *ngIf=\"config\" (click)=\"save()\">{{ 'chatSettings.save' | transloco }}</button>\n </div>\n\n</div>\n", styles: [":host{display:block;width:var(--ast-chat-settings-width, 100%);max-width:100%;height:100%;margin-left:auto;margin-right:auto;padding-top:var(--ast-chat-settings-padding-top, 0);padding-bottom:var(--ast-chat-settings-padding-bottom, 0)}.sq-chat-settings{display:flex;flex-direction:column;max-height:100%}.sq-chat-settings .settings-panel{flex-grow:1;overflow:auto}.sq-chat-settings .buttons-panel{padding-top:.5rem}.d-flex{display:flex}.justify-content-end{justify-content:flex-end}.small{font-size:.875em}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-label{margin-bottom:.5rem}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-switch{padding-left:2.5em}.form-check-input{--bs-form-check-bg: var(--bs-body-bg);--bs-form-check-checked-bg-color: #ff854a;--bs-form-check-checked-border-color: #ff854a;--bs-form-check-checked-bg-color-hover: #e6540b;--bs-form-check-checked-border-color-hover: #e6540b;flex-shrink:0;width:1em;height:1em;margin-top:.25em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]:checked{background-color:var(--bs-form-check-checked-bg-color);border-color:var(--bs-form-check-checked-border-color)}.form-check-input[type=checkbox]:checked:hover{background-color:var(--bs-form-check-checked-bg-color-hover);border-color:var(--bs-form-check-checked-border-color-hover)}.form-range{width:100%;height:1.5rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}\n"] }]
226
223
  }], propDecorators: { instanceId: [{
@@ -235,6 +232,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
235
232
 
236
233
  Chart.register(...registerables);
237
234
  class ChartComponent {
235
+ rawChartData;
236
+ chart;
237
+ debounceTimer;
238
238
  constructor() { }
239
239
  ngOnChanges(changes) {
240
240
  if (changes['rawChartData']) {
@@ -259,10 +259,10 @@ class ChartComponent {
259
259
  console.error('Chart Canvas is not found');
260
260
  }
261
261
  }
262
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
263
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChartComponent, isStandalone: true, selector: "sq-assistant-chart", inputs: { rawChartData: "rawChartData" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"chart-container\">\n <canvas id=\"chart-canvas\">{{ chart }}</canvas>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
262
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
263
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ChartComponent, isStandalone: true, selector: "sq-assistant-chart", inputs: { rawChartData: "rawChartData" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"chart-container\">\n <canvas id=\"chart-canvas\">{{ chart }}</canvas>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
264
264
  }
265
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartComponent, decorators: [{
265
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartComponent, decorators: [{
266
266
  type: Component,
267
267
  args: [{ selector: 'sq-assistant-chart', standalone: true, imports: [CommonModule], template: "<div class=\"chart-container\">\n <canvas id=\"chart-canvas\">{{ chart }}</canvas>\n</div>\n" }]
268
268
  }], ctorParameters: () => [], propDecorators: { rawChartData: [{
@@ -270,10 +270,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
270
270
  }] } });
271
271
 
272
272
  class InitialsAvatarComponent {
273
- constructor() {
274
- this.fullName = '';
275
- this.size = 1.5; // in rem
276
- }
273
+ fullName = '';
274
+ size = 1.5; // in rem
277
275
  /**
278
276
  * Gives initials of a name and a safe color background to use,
279
277
  * assuming text color will be white
@@ -312,10 +310,10 @@ class InitialsAvatarComponent {
312
310
  });
313
311
  return safeColor.random(text);
314
312
  }
315
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InitialsAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
316
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: InitialsAvatarComponent, isStandalone: true, selector: "sq-initials-avatar", inputs: { fullName: "fullName", size: "size" }, ngImport: i0, template: "<span class=\"sq-initials-avatar\" *ngIf=\"getInitialsAndColorFromFullName(fullName) as meta\"\n [ngStyle]=\"{ 'background-color': meta.color }\" [style.height.rem]=\"size\" [style.width.rem]=\"size\"\n [style.line-height.rem]=\"size\" [style.font-size.rem]=\"size/2\">\n {{ meta.initials | uppercase }}\n</span>", styles: [".sq-initials-avatar{display:block;border-radius:50%;text-align:center;color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }] }); }
313
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InitialsAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
314
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: InitialsAvatarComponent, isStandalone: true, selector: "sq-initials-avatar", inputs: { fullName: "fullName", size: "size" }, ngImport: i0, template: "<span class=\"sq-initials-avatar\" *ngIf=\"getInitialsAndColorFromFullName(fullName) as meta\"\n [ngStyle]=\"{ 'background-color': meta.color }\" [style.height.rem]=\"size\" [style.width.rem]=\"size\"\n [style.line-height.rem]=\"size\" [style.font-size.rem]=\"size/2\">\n {{ meta.initials | uppercase }}\n</span>", styles: [".sq-initials-avatar{display:block;border-radius:50%;text-align:center;color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }] });
317
315
  }
318
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InitialsAvatarComponent, decorators: [{
316
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: InitialsAvatarComponent, decorators: [{
319
317
  type: Component,
320
318
  args: [{ selector: 'sq-initials-avatar', standalone: true, imports: [CommonModule], template: "<span class=\"sq-initials-avatar\" *ngIf=\"getInitialsAndColorFromFullName(fullName) as meta\"\n [ngStyle]=\"{ 'background-color': meta.color }\" [style.height.rem]=\"size\" [style.width.rem]=\"size\"\n [style.line-height.rem]=\"size\" [style.font-size.rem]=\"size/2\">\n {{ meta.initials | uppercase }}\n</span>", styles: [".sq-initials-avatar{display:block;border-radius:50%;text-align:center;color:#fff}\n"] }]
321
319
  }], propDecorators: { fullName: [{
@@ -348,10 +346,10 @@ class MessageContentPipe {
348
346
  console.error("Invalid message format, type of message not supported" + typeof content.type);
349
347
  return '';
350
348
  }
351
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MessageContentPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
352
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: MessageContentPipe, isStandalone: true, name: "messageContent" }); }
349
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MessageContentPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
350
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: MessageContentPipe, isStandalone: true, name: "messageContent" });
353
351
  }
354
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MessageContentPipe, decorators: [{
352
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MessageContentPipe, decorators: [{
355
353
  type: Pipe,
356
354
  args: [{
357
355
  name: "messageContent",
@@ -366,16 +364,17 @@ const ASSISTANT_MARKDOWN_IT_PLUGINS = new InjectionToken('ASSISTANT_MARKDOWN_IT_
366
364
 
367
365
  const GROUPING_REGEX = /^<!--[\s\S]*?-->|^<[a-z0-9][\w-]*(?:\s+[^>]*)?\/>|^<([a-z0-9][\w-]*)(?:\s+[^>]*)?>[\s\S]*?<\/\1>/gim;
368
366
  class SafeHtmlPipe {
367
+ sanitizer;
369
368
  constructor(sanitizer) {
370
369
  this.sanitizer = sanitizer;
371
370
  }
372
371
  transform(html) {
373
372
  return this.sanitizer.bypassSecurityTrustHtml(html);
374
373
  }
375
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
376
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: SafeHtmlPipe, isStandalone: true, name: "safeHtml" }); }
374
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
375
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: SafeHtmlPipe, isStandalone: true, name: "safeHtml" });
377
376
  }
378
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SafeHtmlPipe, decorators: [{
377
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SafeHtmlPipe, decorators: [{
379
378
  type: Pipe,
380
379
  args: [{
381
380
  name: "safeHtml",
@@ -383,19 +382,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
383
382
  }]
384
383
  }], ctorParameters: () => [{ type: i1$1.DomSanitizer }] });
385
384
  class SmartRendererComponent {
385
+ // Entire message content with the delta
386
+ message = input("", ...(ngDevMode ? [{ debugName: "message" }] : []));
387
+ context = input(null, ...(ngDevMode ? [{ debugName: "context" }] : []));
388
+ safe = signal("", ...(ngDevMode ? [{ debugName: "safe" }] : []));
389
+ processing = signal("", ...(ngDevMode ? [{ debugName: "processing" }] : []));
390
+ // High order last slice index, ie. where next message() should be truncated
391
+ // to avoid re-rendering the same content.
392
+ lastSliceIndex = 0;
393
+ // Local slice index to keep track of the current message's content
394
+ localSliceIndex = 0;
395
+ // Injected markdown-it plugins
396
+ _markdownItPlugins = inject(ASSISTANT_MARKDOWN_IT_PLUGINS);
386
397
  constructor() {
387
- // Entire message content with the delta
388
- this.message = input("");
389
- this.context = input(null);
390
- this.safe = signal("");
391
- this.processing = signal("");
392
- // High order last slice index, ie. where next message() should be truncated
393
- // to avoid re-rendering the same content.
394
- this.lastSliceIndex = 0;
395
- // Local slice index to keep track of the current message's content
396
- this.localSliceIndex = 0;
397
- // Injected markdown-it plugins
398
- this._markdownItPlugins = inject(ASSISTANT_MARKDOWN_IT_PLUGINS);
399
398
  effect(() => this.messageUpdated(), { allowSignalWrites: true });
400
399
  }
401
400
  createMarkdownItInstance() {
@@ -441,13 +440,13 @@ class SmartRendererComponent {
441
440
  this.processing.set(blocks.slice(0, 2).join(""));
442
441
  }
443
442
  }
444
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SmartRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
445
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: SmartRendererComponent, isStandalone: true, selector: "SmartRenderer", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
443
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SmartRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
444
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.16", type: SmartRendererComponent, isStandalone: true, selector: "SmartRenderer", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
446
445
  <div [innerHTML]="safe() | safeHtml"></div>
447
446
  <div [innerHTML]="processing() | safeHtml"></div>
448
- `, isInline: true, dependencies: [{ kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }] }); }
447
+ `, isInline: true, dependencies: [{ kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }] });
449
448
  }
450
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SmartRendererComponent, decorators: [{
449
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SmartRendererComponent, decorators: [{
451
450
  type: Component,
452
451
  args: [{
453
452
  selector: "SmartRenderer",
@@ -458,14 +457,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
458
457
  imports: [SafeHtmlPipe],
459
458
  standalone: true,
460
459
  }]
461
- }], ctorParameters: () => [] });
460
+ }], ctorParameters: () => [], propDecorators: { message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "context", required: false }] }] } });
462
461
 
463
462
  /**
464
463
  * Internal component that wraps the tooltip's content
465
464
  */
466
465
  class TooltipComponent {
467
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
468
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TooltipComponent, isStandalone: true, selector: "sqx-tooltip", ngImport: i0, template: `
466
+ data;
467
+ template;
468
+ tooltipClass;
469
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
470
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: TooltipComponent, isStandalone: true, selector: "sqx-tooltip", ngImport: i0, template: `
469
471
  <ng-container *ngTemplateOutlet="template || defaultTpl; context: {$implicit: data}"></ng-container>
470
472
  <ng-template #defaultTpl let-data>
471
473
  <div class="sq-tooltip {{tooltipClass}}" @tooltip [innerHTML]="data"></div>
@@ -479,9 +481,9 @@ class TooltipComponent {
479
481
  animate(300, style({ opacity: 0 })),
480
482
  ]),
481
483
  ]),
482
- ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
484
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush });
483
485
  }
484
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TooltipComponent, decorators: [{
486
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipComponent, decorators: [{
485
487
  type: Component,
486
488
  args: [{ selector: 'sqx-tooltip', standalone: true, imports: [NgTemplateOutlet], template: `
487
489
  <ng-container *ngTemplateOutlet="template || defaultTpl; context: {$implicit: data}"></ng-container>
@@ -521,32 +523,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
521
523
  * <div sqTooltip="<h1>Title</h1><br><p>This is a comment</p>"></div>
522
524
  */
523
525
  class TooltipDirective {
526
+ overlay;
527
+ overlayPositionBuilder;
528
+ elementRef;
529
+ /**
530
+ * Defining a property called textOrTemplate that can be a string, a function that
531
+ * returns an Observable of a string or undefined, or a TemplateRef.
532
+ */
533
+ value;
534
+ data;
535
+ template;
536
+ /**
537
+ * Setting the default value of the placement property to `bottom`
538
+ */
539
+ placement = "bottom";
540
+ /**
541
+ * List of fallback placement if *Placement* defined can't be applyied
542
+ */
543
+ fallbackPlacements = [];
544
+ /**
545
+ * Delay in millisecond before showing/hiding the tooltip.
546
+ *
547
+ * Default value is 300ms
548
+ */
549
+ delay = 300;
550
+ /**
551
+ * If the tooltip should stay opened on hover
552
+ */
553
+ hoverableTooltip = false;
554
+ /**
555
+ * Custom class for the tooltip
556
+ */
557
+ tooltipClass;
558
+ /**
559
+ * Applies the "has-tooltip" class to its host when displayed (Angular 20 host directive syntax)
560
+ */
561
+ hasTooltip = false;
562
+ overlayRef;
563
+ subscription;
564
+ clearTimeout;
565
+ static activeTooltip;
524
566
  constructor(overlay, overlayPositionBuilder, elementRef) {
525
567
  this.overlay = overlay;
526
568
  this.overlayPositionBuilder = overlayPositionBuilder;
527
569
  this.elementRef = elementRef;
528
- /**
529
- * Setting the default value of the placement property to `bottom`
530
- */
531
- this.placement = "bottom";
532
- /**
533
- * List of fallback placement if *Placement* defined can't be applyied
534
- */
535
- this.fallbackPlacements = [];
536
- /**
537
- * Delay in millisecond before showing/hiding the tooltip.
538
- *
539
- * Default value is 300ms
540
- */
541
- this.delay = 300;
542
- /**
543
- * If the tooltip should stay opened on hover
544
- */
545
- this.hoverableTooltip = false;
546
- /**
547
- * Applies the "has-tooltip" class to its host when displayed (Angular 20 host directive syntax)
548
- */
549
- this.hasTooltip = false;
550
570
  }
551
571
  ngOnDestroy() {
552
572
  // do not forget to clear timeout function
@@ -655,10 +675,10 @@ class TooltipDirective {
655
675
  fallbackPositions() {
656
676
  return Array.from(this.fallbackPlacements).map(p => this.position(p));
657
677
  }
658
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TooltipDirective, deps: [{ token: i1$2.Overlay }, { token: i1$2.OverlayPositionBuilder }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
659
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TooltipDirective, isStandalone: true, selector: "[sqTooltip]", inputs: { value: ["sqTooltip", "value"], data: ["sqTooltipData", "data"], template: ["sqTooltipTemplate", "template"], placement: "placement", fallbackPlacements: "fallbackPlacements", delay: "delay", hoverableTooltip: "hoverableTooltip", tooltipClass: "tooltipClass" }, host: { attributes: { "class.has-tooltip": "hasTooltip" }, listeners: { "mouseenter": "show()", "mousedown": "mouseClick()", "mouseleave": "hide()" } }, ngImport: i0 }); }
678
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipDirective, deps: [{ token: i1$2.Overlay }, { token: i1$2.OverlayPositionBuilder }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
679
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.16", type: TooltipDirective, isStandalone: true, selector: "[sqTooltip]", inputs: { value: ["sqTooltip", "value"], data: ["sqTooltipData", "data"], template: ["sqTooltipTemplate", "template"], placement: "placement", fallbackPlacements: "fallbackPlacements", delay: "delay", hoverableTooltip: "hoverableTooltip", tooltipClass: "tooltipClass" }, host: { attributes: { "class.has-tooltip": "hasTooltip" }, listeners: { "mouseenter": "show()", "mousedown": "mouseClick()", "mouseleave": "hide()" } }, ngImport: i0 });
660
680
  }
661
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TooltipDirective, decorators: [{
681
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipDirective, decorators: [{
662
682
  type: Directive,
663
683
  args: [{
664
684
  selector: "[sqTooltip]",
@@ -836,17 +856,17 @@ const defaultFormatIcons = {
836
856
  };
837
857
 
838
858
  class FormatIconComponent {
839
- constructor() {
840
- this._formatIcons = defaultFormatIcons;
841
- }
859
+ extension;
860
+ _formatIcons = defaultFormatIcons;
861
+ icon;
842
862
  ngOnChanges() {
843
863
  const icon = this.extension ? this._formatIcons[this.extension] : undefined;
844
864
  this.icon = icon?.icon || this._formatIcons.file.icon;
845
865
  }
846
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormatIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
847
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormatIconComponent, isStandalone: true, selector: "sq-format-icon", inputs: { extension: "extension" }, usesOnChanges: true, ngImport: i0, template: "<span *ngIf=\"icon\" class=\"{{icon}}\"></span>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); }
866
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FormatIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
867
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: FormatIconComponent, isStandalone: true, selector: "sq-format-icon", inputs: { extension: "extension" }, usesOnChanges: true, ngImport: i0, template: "<span *ngIf=\"icon\" class=\"{{icon}}\"></span>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
848
868
  }
849
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormatIconComponent, decorators: [{
869
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FormatIconComponent, decorators: [{
850
870
  type: Component,
851
871
  args: [{ selector: 'sq-format-icon', encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule], template: "<span *ngIf=\"icon\" class=\"{{icon}}\"></span>" }]
852
872
  }], propDecorators: { extension: [{
@@ -854,51 +874,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
854
874
  }] } });
855
875
 
856
876
  class ChatReferenceComponent {
857
- constructor() {
858
- this.reference = input.required();
859
- this.attachment = input.required();
860
- this.partId = input(undefined);
861
- this.referenceMap = input(undefined);
862
- this.images = input([]);
863
- this.pages = input([]);
864
- this.openDocument = output();
865
- this.openPreview = output();
866
- this.modalTpl = viewChild("modal");
867
- this.modalRef = signal({});
868
- this.groupedImagesIds = computed(() => {
869
- // Suppose images() returns an array like ['1.1.1', '1.1.2', '1.1.3']
870
- const groups = {};
871
- for (const id of this.images()) {
872
- const parts = id.split(".").map(Number);
873
- if (parts.length < 3)
874
- continue;
875
- const groupKey = parts[1].toString();
876
- if (!groups[groupKey])
877
- groups[groupKey] = [];
878
- groups[groupKey].push(parts[2]);
879
- }
880
- return groups;
881
- });
882
- this.groupedPagesIds = computed(() => {
883
- // Suppose images() returns an array like ['1.1', '1.2', '1.3']
884
- const groups = {};
885
- for (const id of this.pages()) {
886
- const parts = id.split(".").map(Number);
887
- const groupKey = parts[0].toString();
888
- if (!groups[groupKey])
889
- groups[groupKey] = [];
890
- groups[groupKey].push(parts[1]);
891
- }
892
- return groups;
893
- });
894
- this.findImage = (arr, number) => arr.find((p) => p.imageNumber === number);
895
- this.findPage = (arr, number) => arr.find((p) => p.pageNumber === number);
896
- }
877
+ reference = input.required(...(ngDevMode ? [{ debugName: "reference" }] : []));
878
+ attachment = input.required(...(ngDevMode ? [{ debugName: "attachment" }] : []));
879
+ partId = input(undefined, ...(ngDevMode ? [{ debugName: "partId" }] : []));
880
+ referenceMap = input(undefined, ...(ngDevMode ? [{ debugName: "referenceMap" }] : []));
881
+ images = input([], ...(ngDevMode ? [{ debugName: "images" }] : []));
882
+ pages = input([], ...(ngDevMode ? [{ debugName: "pages" }] : []));
883
+ openDocument = output();
884
+ openPreview = output();
885
+ modalTpl = viewChild("modal", ...(ngDevMode ? [{ debugName: "modalTpl" }] : []));
886
+ modalRef = signal({}, ...(ngDevMode ? [{ debugName: "modalRef" }] : []));
887
+ groupedImagesIds = computed(() => {
888
+ // Suppose images() returns an array like ['1.1.1', '1.1.2', '1.1.3']
889
+ const groups = {};
890
+ for (const id of this.images()) {
891
+ const parts = id.split(".").map(Number);
892
+ if (parts.length < 3)
893
+ continue;
894
+ const groupKey = parts[1].toString();
895
+ if (!groups[groupKey])
896
+ groups[groupKey] = [];
897
+ groups[groupKey].push(parts[2]);
898
+ }
899
+ return groups;
900
+ }, ...(ngDevMode ? [{ debugName: "groupedImagesIds" }] : []));
901
+ groupedPagesIds = computed(() => {
902
+ // Suppose images() returns an array like ['1.1', '1.2', '1.3']
903
+ const groups = {};
904
+ for (const id of this.pages()) {
905
+ const parts = id.split(".").map(Number);
906
+ const groupKey = parts[0].toString();
907
+ if (!groups[groupKey])
908
+ groups[groupKey] = [];
909
+ groups[groupKey].push(parts[1]);
910
+ }
911
+ return groups;
912
+ }, ...(ngDevMode ? [{ debugName: "groupedPagesIds" }] : []));
897
913
  get parts() {
898
914
  if (!this.attachment())
899
915
  return [];
900
916
  return this.attachment().parts.filter((part) => (!this.partId() || part.partId === this.partId()) && !!part.text);
901
917
  }
918
+ findImage = (arr, number) => arr.find((p) => p.imageNumber === number);
919
+ findPage = (arr, number) => arr.find((p) => p.pageNumber === number);
902
920
  expandAttachment() {
903
921
  if (this.partId())
904
922
  return;
@@ -908,17 +926,17 @@ class ChatReferenceComponent {
908
926
  this.modalRef.set(ref);
909
927
  this.modalTpl()?.nativeElement?.showModal();
910
928
  }
911
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
912
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ChatReferenceComponent, isStandalone: true, selector: "sq-chat-reference", inputs: { reference: { classPropertyName: "reference", publicName: "reference", isSignal: true, isRequired: true, transformFunction: null }, attachment: { classPropertyName: "attachment", publicName: "attachment", isSignal: true, isRequired: true, transformFunction: null }, partId: { classPropertyName: "partId", publicName: "partId", isSignal: true, isRequired: false, transformFunction: null }, referenceMap: { classPropertyName: "referenceMap", publicName: "referenceMap", isSignal: true, isRequired: false, transformFunction: null }, images: { classPropertyName: "images", publicName: "images", isSignal: true, isRequired: false, transformFunction: null }, pages: { classPropertyName: "pages", publicName: "pages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openDocument: "openDocument", openPreview: "openPreview" }, providers: [provideTranslocoScope('chat-reference')], viewQueries: [{ propertyName: "modalTpl", first: true, predicate: ["modal"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [class.reference-tooltip]=\"!!partId()\">\n <div\n class=\"reference-data\"\n [class.expanded]=\"attachment()['$expanded'] || !!partId()\"\n (click)=\"expandAttachment()\"\n >\n <span class=\"reference me-1\">{{ reference() }}</span>\n\n <sq-format-icon [extension]=\"attachment().record.fileext\"></sq-format-icon>\n\n <span class=\"title\" [id]=\"'attachment-' + attachment().recordId\">\n {{ attachment().record.title }}\n </span>\n\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openPreview.emit(attachment())\"\n [title]=\"'chatReference.previewDocument' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-eye\"></i>\n </button>\n\n\n @if (attachment().record.url1 || attachment().record.originalUrl) {\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openDocument.emit(attachment())\"\n [title]=\"'chatReference.openDocument' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </div>\n\n @if (!!partId() || (attachment()['$expanded'] && parts.length)) {\n <div class=\"reference-passages\">\n @for (part of parts; track $index) {\n <div class=\"reference-passage\">\n <span class=\"reference me-1\">{{ reference() }}.{{ part.partId }}</span>\n <span class=\"w-100 pe-2\" [innerHTML]=\"part.text\"></span>\n </div>\n\n @for (imageId of groupedImagesIds()[part.partId!]; track $index) {\n @let ref = part?.images?.[imageId - 1];\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">\n {{ \"Img-\" + reference() + \".\" + part.partId + \".\" + imageId }}\n </span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n }\n\n @for (pageId of groupedPagesIds()[reference()]; track $index) {\n @let ref = findPage(referenceMap()?.get(reference())?.pages, pageId);\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">{{ \"Page-\" + reference() + \".\" + pageId }}</span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n </div>\n }\n</div>\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"modalRef().url\" [alt]=\"modalRef().description\" />\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:block;&.expanded,&:hover{background-color:var(--ast-reference-expanded-hover-bg, white)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
929
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
930
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ChatReferenceComponent, isStandalone: true, selector: "sq-chat-reference", inputs: { reference: { classPropertyName: "reference", publicName: "reference", isSignal: true, isRequired: true, transformFunction: null }, attachment: { classPropertyName: "attachment", publicName: "attachment", isSignal: true, isRequired: true, transformFunction: null }, partId: { classPropertyName: "partId", publicName: "partId", isSignal: true, isRequired: false, transformFunction: null }, referenceMap: { classPropertyName: "referenceMap", publicName: "referenceMap", isSignal: true, isRequired: false, transformFunction: null }, images: { classPropertyName: "images", publicName: "images", isSignal: true, isRequired: false, transformFunction: null }, pages: { classPropertyName: "pages", publicName: "pages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openDocument: "openDocument", openPreview: "openPreview" }, providers: [provideTranslocoScope('chat-reference')], viewQueries: [{ propertyName: "modalTpl", first: true, predicate: ["modal"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [class.reference-tooltip]=\"!!partId()\">\n <div\n class=\"reference-data\"\n [class.expanded]=\"attachment()['$expanded'] || !!partId()\"\n (click)=\"expandAttachment()\"\n >\n <span class=\"reference me-1\">{{ reference() }}</span>\n\n <sq-format-icon [extension]=\"attachment().record.fileext\"></sq-format-icon>\n\n <span class=\"title\" [id]=\"'attachment-' + attachment().recordId\">\n {{ attachment().record.title }}\n </span>\n\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openPreview.emit(attachment())\"\n [title]=\"'chatReference.previewDocument' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-eye\"></i>\n </button>\n\n\n @if (attachment().record.url1 || attachment().record.originalUrl) {\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openDocument.emit(attachment())\"\n [title]=\"'chatReference.openDocument' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </div>\n\n @if (!!partId() || (attachment()['$expanded'] && parts.length)) {\n <div class=\"reference-passages\">\n @for (part of parts; track $index) {\n <div class=\"reference-passage\">\n <span class=\"reference me-1\">{{ reference() }}.{{ part.partId }}</span>\n <span class=\"w-100 pe-2\" [innerHTML]=\"part.text\"></span>\n </div>\n\n @for (imageId of groupedImagesIds()[part.partId!]; track $index) {\n @let ref = part?.images?.[imageId - 1];\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">\n {{ \"Img-\" + reference() + \".\" + part.partId + \".\" + imageId }}\n </span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n }\n\n @for (pageId of groupedPagesIds()[reference()]; track $index) {\n @let ref = findPage(referenceMap()?.get(reference())?.pages, pageId);\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">{{ \"Page-\" + reference() + \".\" + pageId }}</span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n </div>\n }\n</div>\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"modalRef().url\" [alt]=\"modalRef().description\" />\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:block}:host.expanded,:host:hover{background-color:var(--ast-reference-expanded-hover-bg, white)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
913
931
  }
914
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatReferenceComponent, decorators: [{
932
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatReferenceComponent, decorators: [{
915
933
  type: Component,
916
934
  args: [{ selector: "sq-chat-reference", standalone: true, imports: [
917
935
  CommonModule,
918
936
  FormatIconComponent,
919
937
  TranslocoPipe,
920
- ], providers: [provideTranslocoScope('chat-reference')], template: "<div [class.reference-tooltip]=\"!!partId()\">\n <div\n class=\"reference-data\"\n [class.expanded]=\"attachment()['$expanded'] || !!partId()\"\n (click)=\"expandAttachment()\"\n >\n <span class=\"reference me-1\">{{ reference() }}</span>\n\n <sq-format-icon [extension]=\"attachment().record.fileext\"></sq-format-icon>\n\n <span class=\"title\" [id]=\"'attachment-' + attachment().recordId\">\n {{ attachment().record.title }}\n </span>\n\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openPreview.emit(attachment())\"\n [title]=\"'chatReference.previewDocument' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-eye\"></i>\n </button>\n\n\n @if (attachment().record.url1 || attachment().record.originalUrl) {\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openDocument.emit(attachment())\"\n [title]=\"'chatReference.openDocument' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </div>\n\n @if (!!partId() || (attachment()['$expanded'] && parts.length)) {\n <div class=\"reference-passages\">\n @for (part of parts; track $index) {\n <div class=\"reference-passage\">\n <span class=\"reference me-1\">{{ reference() }}.{{ part.partId }}</span>\n <span class=\"w-100 pe-2\" [innerHTML]=\"part.text\"></span>\n </div>\n\n @for (imageId of groupedImagesIds()[part.partId!]; track $index) {\n @let ref = part?.images?.[imageId - 1];\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">\n {{ \"Img-\" + reference() + \".\" + part.partId + \".\" + imageId }}\n </span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n }\n\n @for (pageId of groupedPagesIds()[reference()]; track $index) {\n @let ref = findPage(referenceMap()?.get(reference())?.pages, pageId);\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">{{ \"Page-\" + reference() + \".\" + pageId }}</span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n </div>\n }\n</div>\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"modalRef().url\" [alt]=\"modalRef().description\" />\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:block;&.expanded,&:hover{background-color:var(--ast-reference-expanded-hover-bg, white)}}\n"] }]
921
- }] });
938
+ ], providers: [provideTranslocoScope('chat-reference')], template: "<div [class.reference-tooltip]=\"!!partId()\">\n <div\n class=\"reference-data\"\n [class.expanded]=\"attachment()['$expanded'] || !!partId()\"\n (click)=\"expandAttachment()\"\n >\n <span class=\"reference me-1\">{{ reference() }}</span>\n\n <sq-format-icon [extension]=\"attachment().record.fileext\"></sq-format-icon>\n\n <span class=\"title\" [id]=\"'attachment-' + attachment().recordId\">\n {{ attachment().record.title }}\n </span>\n\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openPreview.emit(attachment())\"\n [title]=\"'chatReference.previewDocument' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-eye\"></i>\n </button>\n\n\n @if (attachment().record.url1 || attachment().record.originalUrl) {\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); openDocument.emit(attachment())\"\n [title]=\"'chatReference.openDocument' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </button>\n }\n </div>\n\n @if (!!partId() || (attachment()['$expanded'] && parts.length)) {\n <div class=\"reference-passages\">\n @for (part of parts; track $index) {\n <div class=\"reference-passage\">\n <span class=\"reference me-1\">{{ reference() }}.{{ part.partId }}</span>\n <span class=\"w-100 pe-2\" [innerHTML]=\"part.text\"></span>\n </div>\n\n @for (imageId of groupedImagesIds()[part.partId!]; track $index) {\n @let ref = part?.images?.[imageId - 1];\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">\n {{ \"Img-\" + reference() + \".\" + part.partId + \".\" + imageId }}\n </span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n }\n\n @for (pageId of groupedPagesIds()[reference()]; track $index) {\n @let ref = findPage(referenceMap()?.get(reference())?.pages, pageId);\n @if (ref?.url) {\n <div\n class=\"gap-1 ms-2 my-2 items-start\"\n style=\"display: flex; align-items: start\"\n >\n <span class=\"reference\" style=\"flex-shrink: 0;\">{{ \"Page-\" + reference() + \".\" + pageId }}</span>\n\n <img\n [src]=\"ref.url\"\n [alt]=\"ref.description\"\n (click)=\"modalClicked(ref)\"\n />\n </div>\n }\n }\n </div>\n }\n</div>\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"modalRef().url\" [alt]=\"modalRef().description\" />\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:block}:host.expanded,:host:hover{background-color:var(--ast-reference-expanded-hover-bg, white)}\n"] }]
939
+ }], propDecorators: { reference: [{ type: i0.Input, args: [{ isSignal: true, alias: "reference", required: true }] }], attachment: [{ type: i0.Input, args: [{ isSignal: true, alias: "attachment", required: true }] }], partId: [{ type: i0.Input, args: [{ isSignal: true, alias: "partId", required: false }] }], referenceMap: [{ type: i0.Input, args: [{ isSignal: true, alias: "referenceMap", required: false }] }], images: [{ type: i0.Input, args: [{ isSignal: true, alias: "images", required: false }] }], pages: [{ type: i0.Input, args: [{ isSignal: true, alias: "pages", required: false }] }], openDocument: [{ type: i0.Output, args: ["openDocument"] }], openPreview: [{ type: i0.Output, args: ["openPreview"] }], modalTpl: [{ type: i0.ViewChild, args: ["modal", { isSignal: true }] }] } });
922
940
 
923
941
  class NotificationsService {
924
942
  success(message, title) {
@@ -933,10 +951,10 @@ class NotificationsService {
933
951
  dispatchEvent(type, message, title) {
934
952
  dispatchEvent(new CustomEvent("notification", { detail: { type, title, message } }));
935
953
  }
936
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NotificationsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
937
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NotificationsService, providedIn: "root" }); }
954
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NotificationsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
955
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NotificationsService, providedIn: "root" });
938
956
  }
939
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NotificationsService, decorators: [{
957
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NotificationsService, decorators: [{
940
958
  type: Injectable,
941
959
  args: [{
942
960
  providedIn: "root"
@@ -944,11 +962,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
944
962
  }] });
945
963
 
946
964
  class UIService {
947
- constructor() {
948
- this.notificationsService = inject(NotificationsService);
949
- this.clipboard = inject(Clipboard);
950
- this.transloco = inject(TranslocoService);
951
- }
965
+ notificationsService = inject(NotificationsService);
966
+ clipboard = inject(Clipboard);
967
+ transloco = inject(TranslocoService);
952
968
  copyToClipboard(data, maxLength = 30) {
953
969
  if (!navigator?.clipboard) {
954
970
  // Note: CDK seems to struggle with large chunks of text
@@ -989,10 +1005,10 @@ class UIService {
989
1005
  const translated = this.transloco.translate("chat.clipboard.success", { value });
990
1006
  this.notificationsService.success(translated);
991
1007
  }
992
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UIService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
993
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UIService, providedIn: "root" }); }
1008
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UIService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1009
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UIService, providedIn: "root" });
994
1010
  }
995
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UIService, decorators: [{
1011
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UIService, decorators: [{
996
1012
  type: Injectable,
997
1013
  args: [{
998
1014
  providedIn: "root",
@@ -1000,38 +1016,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1000
1016
  }] });
1001
1017
 
1002
1018
  class ChatMessageComponent {
1019
+ ui;
1020
+ principalService;
1021
+ cdr;
1022
+ el;
1023
+ id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : []));
1024
+ message;
1025
+ conversation;
1026
+ suggestedActions;
1027
+ assistantMessageIcon;
1028
+ userMessageIcon;
1029
+ connectionErrorMessageIcon;
1030
+ searchWarningMessageIcon;
1031
+ streaming;
1032
+ canEdit = false;
1033
+ canRegenerate = false;
1034
+ canCopy = false;
1035
+ canDebug = false;
1036
+ canLike = false;
1037
+ canDislike = false;
1038
+ collapseReferences = true;
1039
+ openDocument = new EventEmitter();
1040
+ openPreview = new EventEmitter();
1041
+ suggestAction = new EventEmitter();
1042
+ edit = new EventEmitter();
1043
+ copy = new EventEmitter();
1044
+ regenerate = new EventEmitter();
1045
+ like = new EventEmitter();
1046
+ dislike = new EventEmitter();
1047
+ debug = new EventEmitter();
1048
+ // signal based set of references to avoid duplicates
1049
+ refs = signal([], ...(ngDevMode ? [{ debugName: "refs" }] : []));
1050
+ references = computed(() => this.refs().slice().sort((a, b) => a - b).map((r) => "" + r), ...(ngDevMode ? [{ debugName: "references" }] : []));
1051
+ referenceMap = new Map();
1052
+ imageReferencesMap = new Map();
1053
+ pageReferencesMap = new Map();
1054
+ collapseProgress;
1055
+ iconSize = 24;
1056
+ hiddenTooltip = false;
1057
+ // used by the template
1058
+ Array = Array;
1003
1059
  constructor(ui, principalService, cdr, el) {
1004
1060
  this.ui = ui;
1005
1061
  this.principalService = principalService;
1006
1062
  this.cdr = cdr;
1007
1063
  this.el = el;
1008
- this.id = input();
1009
- this.canEdit = false;
1010
- this.canRegenerate = false;
1011
- this.canCopy = false;
1012
- this.canDebug = false;
1013
- this.canLike = false;
1014
- this.canDislike = false;
1015
- this.collapseReferences = true;
1016
- this.openDocument = new EventEmitter();
1017
- this.openPreview = new EventEmitter();
1018
- this.suggestAction = new EventEmitter();
1019
- this.edit = new EventEmitter();
1020
- this.copy = new EventEmitter();
1021
- this.regenerate = new EventEmitter();
1022
- this.like = new EventEmitter();
1023
- this.dislike = new EventEmitter();
1024
- this.debug = new EventEmitter();
1025
- // signal based set of references to avoid duplicates
1026
- this.refs = signal([]);
1027
- this.references = computed(() => this.refs().slice().sort((a, b) => a - b).map((r) => "" + r));
1028
- this.referenceMap = new Map();
1029
- this.imageReferencesMap = new Map();
1030
- this.pageReferencesMap = new Map();
1031
- this.iconSize = 24;
1032
- this.hiddenTooltip = false;
1033
- // used by the template
1034
- this.Array = Array;
1035
1064
  }
1036
1065
  ngOnChanges(changes) {
1037
1066
  if (changes.streaming) {
@@ -1173,10 +1202,10 @@ class ChatMessageComponent {
1173
1202
  this.hiddenTooltip = false;
1174
1203
  });
1175
1204
  }
1176
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatMessageComponent, deps: [{ token: UIService }, { token: PrincipalService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
1177
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ChatMessageComponent, isStandalone: true, selector: "sq-chat-message", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: false, isRequired: false, transformFunction: null }, conversation: { classPropertyName: "conversation", publicName: "conversation", isSignal: false, isRequired: false, transformFunction: null }, suggestedActions: { classPropertyName: "suggestedActions", publicName: "suggestedActions", isSignal: false, isRequired: false, transformFunction: null }, assistantMessageIcon: { classPropertyName: "assistantMessageIcon", publicName: "assistantMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, userMessageIcon: { classPropertyName: "userMessageIcon", publicName: "userMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, connectionErrorMessageIcon: { classPropertyName: "connectionErrorMessageIcon", publicName: "connectionErrorMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, searchWarningMessageIcon: { classPropertyName: "searchWarningMessageIcon", publicName: "searchWarningMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, streaming: { classPropertyName: "streaming", publicName: "streaming", isSignal: false, isRequired: false, transformFunction: null }, canEdit: { classPropertyName: "canEdit", publicName: "canEdit", isSignal: false, isRequired: false, transformFunction: null }, canRegenerate: { classPropertyName: "canRegenerate", publicName: "canRegenerate", isSignal: false, isRequired: false, transformFunction: null }, canCopy: { classPropertyName: "canCopy", publicName: "canCopy", isSignal: false, isRequired: false, transformFunction: null }, canDebug: { classPropertyName: "canDebug", publicName: "canDebug", isSignal: false, isRequired: false, transformFunction: null }, canLike: { classPropertyName: "canLike", publicName: "canLike", isSignal: false, isRequired: false, transformFunction: null }, canDislike: { classPropertyName: "canDislike", publicName: "canDislike", isSignal: false, isRequired: false, transformFunction: null }, collapseReferences: { classPropertyName: "collapseReferences", publicName: "collapseReferences", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { openDocument: "openDocument", openPreview: "openPreview", suggestAction: "suggestAction", edit: "edit", copy: "copy", regenerate: "regenerate", like: "like", dislike: "dislike", debug: "debug" }, providers: [provideTranslocoScope('chat-message')], usesOnChanges: true, ngImport: i0, template: "<!-- Message icon -->\n<span class=\"message-icon\" [title]=\"message?.role\">\n <i class=\"d-block\" [style.width.px]=\"iconSize\" *ngIf=\"!message\"></i>\n <ng-container [ngSwitch]=\"message?.role\">\n <!-- For 'assistant' -->\n <i *ngSwitchCase=\"'assistant'\" [ngClass]=\"assistantMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n\n <!-- For 'user' -->\n <ng-container *ngSwitchCase=\"'user'\">\n <i *ngIf=\"!!userMessageIcon; else initialsAvatar\" [ngClass]=\"userMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #initialsAvatar>\n <sq-initials-avatar [fullName]=\"name\"></sq-initials-avatar>\n </ng-template>\n </ng-container>\n\n <!-- For 'connection-error' -->\n <ng-container *ngSwitchCase=\"'connection-error'\">\n <i *ngIf=\"!!connectionErrorMessageIcon; else defaultErrorIcon\" [ngClass]=\"connectionErrorMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #defaultErrorIcon>\n <svg [style.--sq-size.px]=\"iconSize\" class=\"connection-error\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\" d=\"M17.1 292c-12.9-22.3-12.9-49.7 0-72L105.4 67.1c12.9-22.3 36.6-36 62.4-36l176.6 0c25.7 0 49.5 13.7 62.4 36L494.9 220c12.9 22.3 12.9 49.7 0 72L406.6 444.9c-12.9 22.3-36.6 36-62.4 36l-176.6 0c-25.7 0-49.5-13.7-62.4-36L17.1 292zM256 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"/>\n </svg>\n </ng-template>\n </ng-container>\n\n <!-- For 'search-warning' -->\n <ng-container *ngSwitchCase=\"'search-warning'\">\n <i *ngIf=\"!!searchWarningMessageIcon; else defaultWarningIcon\" [ngClass]=\"searchWarningMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #defaultWarningIcon>\n <svg [style.--sq-size.px]=\"iconSize\" class=\"search-warning\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n <path fill=\"currentColor\" d=\"M272 384c9.6-31.9 29.5-59.1 49.2-86.2c0 0 0 0 0 0c5.2-7.1 10.4-14.2 15.4-21.4c19.8-28.5 31.4-63 31.4-100.3C368 78.8 289.2 0 192 0S16 78.8 16 176c0 37.3 11.6 71.9 31.4 100.3c5 7.2 10.2 14.3 15.4 21.4c0 0 0 0 0 0c19.8 27.1 39.7 54.4 49.2 86.2l160 0zM192 512c44.2 0 80-35.8 80-80l0-16-160 0 0 16c0 44.2 35.8 80 80 80zm0-448c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM160 288a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"/>\n </svg>\n </ng-template>\n </ng-container>\n </ng-container>\n</span>\n\n<!-- Message body -->\n<div class=\"flex-grow-1 position-relative relative\" style=\"min-width: 0;\" [ngClass]=\"'message-'+message.role\">\n\n <!-- Progress steps -->\n <div *ngIf=\"message.additionalProperties.$progress as progress\" class=\"small ms-3 mb-2\">\n <details role=\"button\" class=\"select-none\" [open]=\"!collapseProgress\">\n <summary class=\"text-muted\">\n {{ 'chatMessage.viewProgress' | transloco }}\n </summary>\n <ul class=\"list-unstyled\">\n <li *ngFor=\"let step of progress\">\n <i class=\"fas fa-fw fa-check text-success\" *ngIf=\"step.done\"></i>\n <i class=\"fas fa-spinner fa-pulse step-ongoing\" *ngIf=\"!step.done && streaming\"></i>\n <i class=\"fa-solid fa-ban step-error\" *ngIf=\"!step.done && !streaming\"></i>\n <span class=\"ms-2 fw-bold\">{{step.title}}</span>\n <span *ngIf=\"step.content\" [innerHTML]=\"': ' + step.content\"></span>\n </li>\n </ul>\n </details>\n </div>\n\n <!-- Message content -->\n <div class=\"message-content\" *ngIf=\"message.content\">\n\n <!-- Custom rendering for WPS, to be remove with https://sinequa.atlassian.net/browse/ES-23710 -->\n <div *ngIf=\"message?.role === 'assistant' && message.messageType === 'CHART'\">\n <sq-assistant-chart [rawChartData]=\"message.content\"></sq-assistant-chart>\n </div>\n\n <!-- This section is responsible for customizing the template nodes used in the application.\n Template nodes are predefined structures that serve as blueprints for creating/customizing dynamic content -->\n\n\n @if(message?.role === 'assistant' && message.messageType !== 'CHART') {\n <SmartRenderer\n [message]=\"message.content | messageContent\"\n [context]=\"{\n getEmbeddedPageReference: getEmbeddedPageReference.bind(this),\n getEmbeddedImageReference: getEmbeddedImageReference.bind(this),\n referencesMap: referenceMap,\n references: processReferences.bind(this),\n rank: id()\n }\">\n </SmartRenderer>\n }\n\n <p *ngIf=\"message?.role === 'user' || message?.role === 'search-warning' || message?.role === 'connection-error'\">{{ message.content | messageContent }}</p>\n\n <!-- List of reference, if any -->\n @let referencesArray = references();\n @if (referencesArray?.length > 0 || imageReferencesMap?.size > 0 || pageReferencesMap?.size > 0) {\n <div class=\"references\">\n <details role=\"button\" class=\"select-none\" [open]=\"!collapseReferences\">\n <summary class=\"references-title\">{{ 'chatMessage.references' | transloco }}</summary>\n <ul>\n @for (reference of referencesArray; track $index) {\n @let attachment = referenceMap.get(reference);\n <!-- Only display the reference when the key is a integer not a decimal -->\n @if(attachment) {\n <li class=\"text-truncate\">\n <sq-chat-reference\n [class.expanded]=\"attachment?.$expanded\"\n [attachment]=\"attachment\"\n [reference]=\"reference\"\n [referenceMap]=\"referenceMap\"\n [images]=\"Array.from(imageReferencesMap.keys())\"\n [pages]=\"Array.from(pageReferencesMap.keys())\"\n (openPreview)=\"openAttachmentPreview($event)\"\n (openDocument)=\"openOriginalAttachment($event)\">\n </sq-chat-reference>\n </li>\n }\n }\n </ul>\n </details>\n </div>\n }\n </div>\n\n <!-- Edit / Regenerate floating actions -->\n <div class=\"sq-chat-message-actions\" *ngIf=\"message\">\n <!-- Common action buttons for \"user\" & \"assistant\" message -->\n <button class=\"btn btn-sm\" *ngIf=\"canCopy\" [sqTooltip]=\"'chatMessage.copyText' | transloco\" (click)=\"copyMessage(message)\">\n <i class=\"far fa-clipboard\"></i>\n </button>\n <!-- Action buttons for \"user\" message -->\n <button class=\"btn btn-sm\" *ngIf=\"canEdit\" [sqTooltip]=\"'chatMessage.editMessage' | transloco\" (click)=\"edit.emit(message)\">\n <i class=\"fas fa-edit\"></i>\n </button>\n <!-- Action buttons for \"assistant\" message -->\n <button class=\"btn btn-sm\" [class.bounce]=\"message.additionalProperties.$liked\" *ngIf=\"canLike\" [sqTooltip]=\"'chatMessage.likeAnswer' | transloco\" (click)=\"like.emit()\">\n <i *ngIf=\"!message.additionalProperties.$liked\" class=\"far fa-thumbs-up \"></i>\n <i *ngIf=\"message.additionalProperties.$liked\" class=\"fas fa-thumbs-up\"></i>\n </button>\n <button class=\"btn btn-sm\" [class.bounce]=\"message.additionalProperties.$disliked\" *ngIf=\"canDislike\" [sqTooltip]=\"'chatMessage.reportIssue' | transloco\" (click)=\"dislike.emit()\">\n <i *ngIf=\"!message.additionalProperties.$disliked\" class=\"far fa-thumbs-down \"></i>\n <i *ngIf=\"message.additionalProperties.$disliked\" class=\"fas fa-thumbs-down\"></i>\n </button>\n <button class=\"btn btn-sm\" *ngIf=\"canRegenerate\" [sqTooltip]=\"'chatMessage.regenerateResponse' | transloco\" (click)=\"regenerate.emit(message)\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n <button class=\"btn btn-sm\" *ngIf=\"canDebug\" [sqTooltip]=\"'chatMessage.showLogInformation' | transloco\" (click)=\"debug.emit(message);\">\n <i class=\"far fa-list-alt\"></i>\n </button>\n </div>\n\n <!-- List of suggested actions, if any -->\n <div *ngIf=\"suggestedActions\" class=\"mt-2 message-suggestion\">\n <div class=\"suggested-action\" *ngFor=\"let suggestedAction of suggestedActions\" (click)=\"suggestAction.emit(suggestedAction)\">\n <div class=\"message-icon\" [style.width.px]=\"iconSize\"></div>\n <div class=\"message-content\">\n <p><i class=\"fas {{suggestedAction.type === 'Submit' ? 'fa-paper-plane' : 'fa-comment-medical'}} me-1\"></i> {{suggestedAction.content}}</p>\n </div>\n </div>\n </div>\n\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host{display:flex}:host:not(:hover):not(.last-message) .sq-chat-message-actions{visibility:hidden}.message-content{padding:var(--ast-message-padding, var(--ast-size-3, .75rem));border-radius:var(--ast-message-border-radius, var(--ast-size-4, 1rem));display:inline-block;max-width:100%;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}.message-content .references{margin-top:var(--ast-size-5, 1.25rem)}.message-content .references ul{border-left:.2rem solid var(--ast-secondary-color, #FF732E);padding-left:var(--ast-size-5, 1.25rem);margin-top:var(--ast-size-2, .5rem)}.message-content .references .references-title{font-weight:var(--font-weight-bold, 500)}.message-content ::ng-deep p:last-child{margin-bottom:0}.message-content ::ng-deep .placeholder-glow .placeholder{animation-duration:.4s;width:12px;height:var(--ast-size-4, 1rem);vertical-align:text-bottom}.message-content ::ng-deep img{max-width:100%}.message-content ::ng-deep table{display:table;border:1px solid;border-color:var(--ast-message-table-border-color, #ccc);border-collapse:collapse;margin:0;padding:0;min-width:100%;overflow-x:auto;table-layout:fixed}.message-content ::ng-deep table tr{background-color:var(--ast-message-table-tr-bg, #f8f8f8);border:1px solid;border-color:var(--ast-message-table-tr-border-color, #ddd);padding:.35em}.message-content ::ng-deep table th,.message-content ::ng-deep table td{padding:.625em;text-align:center}.message-content ::ng-deep table th{font-size:.85em;letter-spacing:.1em;text-transform:uppercase}.message-content ::ng-deep .reference{color:var(--ast-message-reference-color, black)!important}.message-content ::ng-deep ul,.message-content ::ng-deep ol{display:flex;flex-direction:column;gap:.5rem;padding-right:2rem;margin-left:0;margin-right:0;padding-left:40px;unicode-bidi:isolate;list-style:disc}.message-content ::ng-deep p:not(:first-child){margin-top:.5rem}.message-assistant .message-content{background:var(--ast-secondary-bg, #FFF8F1)}.message-connection-error .message-content{background:var(--ast-error-bg, rgba(249, 58, 55, .2))}.message-search-warning .message-content{background:var(--ast-warning-bg, #fff1b8);color:var(--ast-message-reference-color, inherit)}.message-user .message-content{background:var(--ast-primary-bg, #f2f8fe);font-weight:var(--ast-user-font-weight, var(--font-weight-bold, 500))}.message-user .message-content p{white-space:pre-line}.message-suggestion .message-content{background:var(--ast-input-bg, #F8F8F8);font-weight:var(--ast-user-font-weight, var(--font-weight-bold, 500));transition:background-color .5s ease,color .5s ease}.message-suggestion .message-content:hover{background:var(--ast-primary-bg, #f2f8fe);color:var(--ast-primary-color, #005DA7)}.message-suggestion .message-content p{white-space:pre-line}.message-suggestion .suggested-action{cursor:pointer}.message-suggestion .suggested-action+.suggested-action{margin-top:var(--ast-size-2, .5rem)}.sq-chat-message-actions{position:absolute;bottom:calc(0rem - var(--ast-size-5, 1.25rem));display:flex;z-index:999}.sq-chat-message-actions button{font-size:.75rem;color:var(--ast-action-buttons-color, #212529)}.sq-chat-message-actions button:hover{color:var(--ast-action-buttons-hover-color, var(--ast-primary-color, #005DA7))}.message-icon{margin-top:var(--ast-size-3, .75rem);margin-right:var(--ast-size-4, 1rem)}.connection-error{height:var(--sq-size);width:var(--sq-size);color:var(--ast-error-color, rgba(249, 58, 55, .7))}.search-warning{height:var(--sq-size);width:var(--sq-size);color:var(--ast-warning-color, #fed86f)}.step-success{color:var(--ast-primary-color, #005DA7)}.step-ongoing{color:var(--ast-secondary-color, #FF732E)}.step-error{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.bounce{animation:bounce 2s ease}@keyframes bounce{10%{transform:translateY(0)}20%{transform:translateY(-15%)}30%{transform:translateY(0)}35%{transform:translateY(-7%)}37%{transform:translateY(0)}39%{transform:translateY(-3%)}40%{transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: InitialsAvatarComponent, selector: "sq-initials-avatar", inputs: ["fullName", "size"] }, { kind: "component", type: ChatReferenceComponent, selector: "sq-chat-reference", inputs: ["reference", "attachment", "partId", "referenceMap", "images", "pages"], outputs: ["openDocument", "openPreview"] }, { kind: "component", type: ChartComponent, selector: "sq-assistant-chart", inputs: ["rawChartData"] }, { kind: "pipe", type: MessageContentPipe, name: "messageContent" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "component", type: SmartRendererComponent, selector: "SmartRenderer", inputs: ["message", "context"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1205
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatMessageComponent, deps: [{ token: UIService }, { token: PrincipalService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1206
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ChatMessageComponent, isStandalone: true, selector: "sq-chat-message", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: false, isRequired: false, transformFunction: null }, conversation: { classPropertyName: "conversation", publicName: "conversation", isSignal: false, isRequired: false, transformFunction: null }, suggestedActions: { classPropertyName: "suggestedActions", publicName: "suggestedActions", isSignal: false, isRequired: false, transformFunction: null }, assistantMessageIcon: { classPropertyName: "assistantMessageIcon", publicName: "assistantMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, userMessageIcon: { classPropertyName: "userMessageIcon", publicName: "userMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, connectionErrorMessageIcon: { classPropertyName: "connectionErrorMessageIcon", publicName: "connectionErrorMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, searchWarningMessageIcon: { classPropertyName: "searchWarningMessageIcon", publicName: "searchWarningMessageIcon", isSignal: false, isRequired: false, transformFunction: null }, streaming: { classPropertyName: "streaming", publicName: "streaming", isSignal: false, isRequired: false, transformFunction: null }, canEdit: { classPropertyName: "canEdit", publicName: "canEdit", isSignal: false, isRequired: false, transformFunction: null }, canRegenerate: { classPropertyName: "canRegenerate", publicName: "canRegenerate", isSignal: false, isRequired: false, transformFunction: null }, canCopy: { classPropertyName: "canCopy", publicName: "canCopy", isSignal: false, isRequired: false, transformFunction: null }, canDebug: { classPropertyName: "canDebug", publicName: "canDebug", isSignal: false, isRequired: false, transformFunction: null }, canLike: { classPropertyName: "canLike", publicName: "canLike", isSignal: false, isRequired: false, transformFunction: null }, canDislike: { classPropertyName: "canDislike", publicName: "canDislike", isSignal: false, isRequired: false, transformFunction: null }, collapseReferences: { classPropertyName: "collapseReferences", publicName: "collapseReferences", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { openDocument: "openDocument", openPreview: "openPreview", suggestAction: "suggestAction", edit: "edit", copy: "copy", regenerate: "regenerate", like: "like", dislike: "dislike", debug: "debug" }, providers: [provideTranslocoScope('chat-message')], usesOnChanges: true, ngImport: i0, template: "<!-- Message icon -->\n<span class=\"message-icon\" [title]=\"message?.role\">\n <i class=\"d-block\" [style.width.px]=\"iconSize\" *ngIf=\"!message\"></i>\n <ng-container [ngSwitch]=\"message?.role\">\n <!-- For 'assistant' -->\n <i *ngSwitchCase=\"'assistant'\" [ngClass]=\"assistantMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n\n <!-- For 'user' -->\n <ng-container *ngSwitchCase=\"'user'\">\n <i *ngIf=\"!!userMessageIcon; else initialsAvatar\" [ngClass]=\"userMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #initialsAvatar>\n <sq-initials-avatar [fullName]=\"name\"></sq-initials-avatar>\n </ng-template>\n </ng-container>\n\n <!-- For 'connection-error' -->\n <ng-container *ngSwitchCase=\"'connection-error'\">\n <i *ngIf=\"!!connectionErrorMessageIcon; else defaultErrorIcon\" [ngClass]=\"connectionErrorMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #defaultErrorIcon>\n <svg [style.--sq-size.px]=\"iconSize\" class=\"connection-error\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\" d=\"M17.1 292c-12.9-22.3-12.9-49.7 0-72L105.4 67.1c12.9-22.3 36.6-36 62.4-36l176.6 0c25.7 0 49.5 13.7 62.4 36L494.9 220c12.9 22.3 12.9 49.7 0 72L406.6 444.9c-12.9 22.3-36.6 36-62.4 36l-176.6 0c-25.7 0-49.5-13.7-62.4-36L17.1 292zM256 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"/>\n </svg>\n </ng-template>\n </ng-container>\n\n <!-- For 'search-warning' -->\n <ng-container *ngSwitchCase=\"'search-warning'\">\n <i *ngIf=\"!!searchWarningMessageIcon; else defaultWarningIcon\" [ngClass]=\"searchWarningMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #defaultWarningIcon>\n <svg [style.--sq-size.px]=\"iconSize\" class=\"search-warning\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n <path fill=\"currentColor\" d=\"M272 384c9.6-31.9 29.5-59.1 49.2-86.2c0 0 0 0 0 0c5.2-7.1 10.4-14.2 15.4-21.4c19.8-28.5 31.4-63 31.4-100.3C368 78.8 289.2 0 192 0S16 78.8 16 176c0 37.3 11.6 71.9 31.4 100.3c5 7.2 10.2 14.3 15.4 21.4c0 0 0 0 0 0c19.8 27.1 39.7 54.4 49.2 86.2l160 0zM192 512c44.2 0 80-35.8 80-80l0-16-160 0 0 16c0 44.2 35.8 80 80 80zm0-448c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM160 288a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"/>\n </svg>\n </ng-template>\n </ng-container>\n </ng-container>\n</span>\n\n<!-- Message body -->\n<div class=\"flex-grow-1 position-relative relative\" style=\"min-width: 0;\" [ngClass]=\"'message-'+message.role\">\n\n <!-- Progress steps -->\n <div *ngIf=\"message.additionalProperties.$progress as progress\" class=\"small ms-3 mb-2\">\n <details role=\"button\" class=\"select-none\" [open]=\"!collapseProgress\">\n <summary class=\"text-muted\">\n {{ 'chatMessage.viewProgress' | transloco }}\n </summary>\n <ul class=\"list-unstyled\">\n <li *ngFor=\"let step of progress\">\n <i class=\"fas fa-fw fa-check text-success\" *ngIf=\"step.done\"></i>\n <i class=\"fas fa-spinner fa-pulse step-ongoing\" *ngIf=\"!step.done && streaming\"></i>\n <i class=\"fa-solid fa-ban step-error\" *ngIf=\"!step.done && !streaming\"></i>\n <span class=\"ms-2 fw-bold\">{{step.title}}</span>\n <span *ngIf=\"step.content\" [innerHTML]=\"': ' + step.content\"></span>\n </li>\n </ul>\n </details>\n </div>\n\n <!-- Message content -->\n <div class=\"message-content\" *ngIf=\"message.content\">\n\n <!-- Custom rendering for WPS, to be remove with https://sinequa.atlassian.net/browse/ES-23710 -->\n <div *ngIf=\"message?.role === 'assistant' && message.messageType === 'CHART'\">\n <sq-assistant-chart [rawChartData]=\"message.content\"></sq-assistant-chart>\n </div>\n\n <!-- This section is responsible for customizing the template nodes used in the application.\n Template nodes are predefined structures that serve as blueprints for creating/customizing dynamic content -->\n\n\n @if(message?.role === 'assistant' && message.messageType !== 'CHART') {\n <SmartRenderer\n [message]=\"message.content | messageContent\"\n [context]=\"{\n getEmbeddedPageReference: getEmbeddedPageReference.bind(this),\n getEmbeddedImageReference: getEmbeddedImageReference.bind(this),\n referencesMap: referenceMap,\n references: processReferences.bind(this),\n rank: id()\n }\">\n </SmartRenderer>\n }\n\n <p *ngIf=\"message?.role === 'user' || message?.role === 'search-warning' || message?.role === 'connection-error'\">{{ message.content | messageContent }}</p>\n\n <!-- List of reference, if any -->\n @let referencesArray = references();\n @if (referencesArray?.length > 0 || imageReferencesMap?.size > 0 || pageReferencesMap?.size > 0) {\n <div class=\"references\">\n <details role=\"button\" class=\"select-none\" [open]=\"!collapseReferences\">\n <summary class=\"references-title\">{{ 'chatMessage.references' | transloco }}</summary>\n <ul>\n @for (reference of referencesArray; track $index) {\n @let attachment = referenceMap.get(reference);\n <!-- Only display the reference when the key is a integer not a decimal -->\n @if(attachment) {\n <li class=\"text-truncate\">\n <sq-chat-reference\n [class.expanded]=\"attachment?.$expanded\"\n [attachment]=\"attachment\"\n [reference]=\"reference\"\n [referenceMap]=\"referenceMap\"\n [images]=\"Array.from(imageReferencesMap.keys())\"\n [pages]=\"Array.from(pageReferencesMap.keys())\"\n (openPreview)=\"openAttachmentPreview($event)\"\n (openDocument)=\"openOriginalAttachment($event)\">\n </sq-chat-reference>\n </li>\n }\n }\n </ul>\n </details>\n </div>\n }\n </div>\n\n <!-- Edit / Regenerate floating actions -->\n <div class=\"sq-chat-message-actions\" *ngIf=\"message\">\n <!-- Common action buttons for \"user\" & \"assistant\" message -->\n <button class=\"btn btn-sm\" *ngIf=\"canCopy\" [sqTooltip]=\"'chatMessage.copyText' | transloco\" (click)=\"copyMessage(message)\">\n <i class=\"far fa-clipboard\"></i>\n </button>\n <!-- Action buttons for \"user\" message -->\n <button class=\"btn btn-sm\" *ngIf=\"canEdit\" [sqTooltip]=\"'chatMessage.editMessage' | transloco\" (click)=\"edit.emit(message)\">\n <i class=\"fas fa-edit\"></i>\n </button>\n <!-- Action buttons for \"assistant\" message -->\n <button class=\"btn btn-sm\" [class.bounce]=\"message.additionalProperties.$liked\" *ngIf=\"canLike\" [sqTooltip]=\"'chatMessage.likeAnswer' | transloco\" (click)=\"like.emit()\">\n <i *ngIf=\"!message.additionalProperties.$liked\" class=\"far fa-thumbs-up \"></i>\n <i *ngIf=\"message.additionalProperties.$liked\" class=\"fas fa-thumbs-up\"></i>\n </button>\n <button class=\"btn btn-sm\" [class.bounce]=\"message.additionalProperties.$disliked\" *ngIf=\"canDislike\" [sqTooltip]=\"'chatMessage.reportIssue' | transloco\" (click)=\"dislike.emit()\">\n <i *ngIf=\"!message.additionalProperties.$disliked\" class=\"far fa-thumbs-down \"></i>\n <i *ngIf=\"message.additionalProperties.$disliked\" class=\"fas fa-thumbs-down\"></i>\n </button>\n <button class=\"btn btn-sm\" *ngIf=\"canRegenerate\" [sqTooltip]=\"'chatMessage.regenerateResponse' | transloco\" (click)=\"regenerate.emit(message)\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n <button class=\"btn btn-sm\" *ngIf=\"canDebug\" [sqTooltip]=\"'chatMessage.showLogInformation' | transloco\" (click)=\"debug.emit(message);\">\n <i class=\"far fa-list-alt\"></i>\n </button>\n </div>\n\n <!-- List of suggested actions, if any -->\n <div *ngIf=\"suggestedActions\" class=\"mt-2 message-suggestion\">\n <div class=\"suggested-action\" *ngFor=\"let suggestedAction of suggestedActions\" (click)=\"suggestAction.emit(suggestedAction)\">\n <div class=\"message-icon\" [style.width.px]=\"iconSize\"></div>\n <div class=\"message-content\">\n <p><i class=\"fas {{suggestedAction.type === 'Submit' ? 'fa-paper-plane' : 'fa-comment-medical'}} me-1\"></i> {{suggestedAction.content}}</p>\n </div>\n </div>\n </div>\n\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host{display:flex}:host:not(:hover):not(.last-message) .sq-chat-message-actions{visibility:hidden}.message-content{padding:var(--ast-message-padding, var(--ast-size-3, .75rem));border-radius:var(--ast-message-border-radius, var(--ast-size-4, 1rem));display:inline-block;max-width:100%;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}.message-content .references{margin-top:var(--ast-size-5, 1.25rem)}.message-content .references ul{border-left:.2rem solid var(--ast-secondary-color, #FF732E);padding-left:var(--ast-size-5, 1.25rem);margin-top:var(--ast-size-2, .5rem)}.message-content .references .references-title{font-weight:var(--font-weight-bold, 500)}.message-content ::ng-deep p:last-child{margin-bottom:0}.message-content ::ng-deep .placeholder-glow .placeholder{animation-duration:.4s;width:12px;height:var(--ast-size-4, 1rem);vertical-align:text-bottom}.message-content ::ng-deep img{max-width:100%}.message-content ::ng-deep table{display:table;border:1px solid;border-color:var(--ast-message-table-border-color, #ccc);border-collapse:collapse;margin:0;padding:0;min-width:100%;overflow-x:auto;table-layout:fixed}.message-content ::ng-deep table tr{background-color:var(--ast-message-table-tr-bg, #f8f8f8);border:1px solid;border-color:var(--ast-message-table-tr-border-color, #ddd);padding:.35em}.message-content ::ng-deep table th,.message-content ::ng-deep table td{padding:.625em;text-align:center}.message-content ::ng-deep table th{font-size:.85em;letter-spacing:.1em;text-transform:uppercase}.message-content ::ng-deep .reference{color:var(--ast-message-reference-color, black)!important}.message-content ::ng-deep ul,.message-content ::ng-deep ol{display:flex;flex-direction:column;gap:.5rem;padding-right:2rem;margin-left:0;margin-right:0;padding-left:40px;unicode-bidi:isolate;list-style:disc}.message-content ::ng-deep p:not(:first-child){margin-top:.5rem}.message-assistant .message-content{background:var(--ast-secondary-bg, #FFF8F1)}.message-connection-error .message-content{background:var(--ast-error-bg, rgba(249, 58, 55, .2))}.message-search-warning .message-content{background:var(--ast-warning-bg, #fff1b8);color:var(--ast-message-reference-color, inherit)}.message-user .message-content{background:var(--ast-primary-bg, #f2f8fe);font-weight:var(--ast-user-font-weight, var(--font-weight-bold, 500))}.message-user .message-content p{white-space:pre-line}.message-suggestion .message-content{background:var(--ast-input-bg, #F8F8F8);font-weight:var(--ast-user-font-weight, var(--font-weight-bold, 500));transition:background-color .5s ease,color .5s ease}.message-suggestion .message-content:hover{background:var(--ast-primary-bg, #f2f8fe);color:var(--ast-primary-color, #005DA7)}.message-suggestion .message-content p{white-space:pre-line}.message-suggestion .suggested-action{cursor:pointer}.message-suggestion .suggested-action+.suggested-action{margin-top:var(--ast-size-2, .5rem)}.sq-chat-message-actions{position:absolute;bottom:calc(0rem - var(--ast-size-5, 1.25rem));display:flex;z-index:999}.sq-chat-message-actions button{font-size:.75rem;color:var(--ast-action-buttons-color, #212529)}.sq-chat-message-actions button:hover{color:var(--ast-action-buttons-hover-color, var(--ast-primary-color, #005DA7))}.message-icon{margin-top:var(--ast-size-3, .75rem);margin-right:var(--ast-size-4, 1rem)}.connection-error{height:var(--sq-size);width:var(--sq-size);color:var(--ast-error-color, rgba(249, 58, 55, .7))}.search-warning{height:var(--sq-size);width:var(--sq-size);color:var(--ast-warning-color, #fed86f)}.step-success{color:var(--ast-primary-color, #005DA7)}.step-ongoing{color:var(--ast-secondary-color, #FF732E)}.step-error{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.bounce{animation:bounce 2s ease}@keyframes bounce{10%{transform:translateY(0)}20%{transform:translateY(-15%)}30%{transform:translateY(0)}35%{transform:translateY(-7%)}37%{transform:translateY(0)}39%{transform:translateY(-3%)}40%{transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: InitialsAvatarComponent, selector: "sq-initials-avatar", inputs: ["fullName", "size"] }, { kind: "component", type: ChatReferenceComponent, selector: "sq-chat-reference", inputs: ["reference", "attachment", "partId", "referenceMap", "images", "pages"], outputs: ["openDocument", "openPreview"] }, { kind: "component", type: ChartComponent, selector: "sq-assistant-chart", inputs: ["rawChartData"] }, { kind: "component", type: SmartRendererComponent, selector: "SmartRenderer", inputs: ["message", "context"] }, { kind: "pipe", type: MessageContentPipe, name: "messageContent" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1178
1207
  }
1179
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatMessageComponent, decorators: [{
1208
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatMessageComponent, decorators: [{
1180
1209
  type: Component,
1181
1210
  args: [{ selector: "sq-chat-message", changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1182
1211
  CommonModule,
@@ -1188,7 +1217,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1188
1217
  TranslocoPipe,
1189
1218
  SmartRendererComponent
1190
1219
  ], providers: [provideTranslocoScope('chat-message')], template: "<!-- Message icon -->\n<span class=\"message-icon\" [title]=\"message?.role\">\n <i class=\"d-block\" [style.width.px]=\"iconSize\" *ngIf=\"!message\"></i>\n <ng-container [ngSwitch]=\"message?.role\">\n <!-- For 'assistant' -->\n <i *ngSwitchCase=\"'assistant'\" [ngClass]=\"assistantMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n\n <!-- For 'user' -->\n <ng-container *ngSwitchCase=\"'user'\">\n <i *ngIf=\"!!userMessageIcon; else initialsAvatar\" [ngClass]=\"userMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #initialsAvatar>\n <sq-initials-avatar [fullName]=\"name\"></sq-initials-avatar>\n </ng-template>\n </ng-container>\n\n <!-- For 'connection-error' -->\n <ng-container *ngSwitchCase=\"'connection-error'\">\n <i *ngIf=\"!!connectionErrorMessageIcon; else defaultErrorIcon\" [ngClass]=\"connectionErrorMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #defaultErrorIcon>\n <svg [style.--sq-size.px]=\"iconSize\" class=\"connection-error\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path fill=\"currentColor\" d=\"M17.1 292c-12.9-22.3-12.9-49.7 0-72L105.4 67.1c12.9-22.3 36.6-36 62.4-36l176.6 0c25.7 0 49.5 13.7 62.4 36L494.9 220c12.9 22.3 12.9 49.7 0 72L406.6 444.9c-12.9 22.3-36.6 36-62.4 36l-176.6 0c-25.7 0-49.5-13.7-62.4-36L17.1 292zM256 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"/>\n </svg>\n </ng-template>\n </ng-container>\n\n <!-- For 'search-warning' -->\n <ng-container *ngSwitchCase=\"'search-warning'\">\n <i *ngIf=\"!!searchWarningMessageIcon; else defaultWarningIcon\" [ngClass]=\"searchWarningMessageIcon\" [style.--sq-size.px]=\"iconSize\"></i>\n <ng-template #defaultWarningIcon>\n <svg [style.--sq-size.px]=\"iconSize\" class=\"search-warning\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n <path fill=\"currentColor\" d=\"M272 384c9.6-31.9 29.5-59.1 49.2-86.2c0 0 0 0 0 0c5.2-7.1 10.4-14.2 15.4-21.4c19.8-28.5 31.4-63 31.4-100.3C368 78.8 289.2 0 192 0S16 78.8 16 176c0 37.3 11.6 71.9 31.4 100.3c5 7.2 10.2 14.3 15.4 21.4c0 0 0 0 0 0c19.8 27.1 39.7 54.4 49.2 86.2l160 0zM192 512c44.2 0 80-35.8 80-80l0-16-160 0 0 16c0 44.2 35.8 80 80 80zm0-448c13.3 0 24 10.7 24 24l0 112c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-112c0-13.3 10.7-24 24-24zM160 288a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"/>\n </svg>\n </ng-template>\n </ng-container>\n </ng-container>\n</span>\n\n<!-- Message body -->\n<div class=\"flex-grow-1 position-relative relative\" style=\"min-width: 0;\" [ngClass]=\"'message-'+message.role\">\n\n <!-- Progress steps -->\n <div *ngIf=\"message.additionalProperties.$progress as progress\" class=\"small ms-3 mb-2\">\n <details role=\"button\" class=\"select-none\" [open]=\"!collapseProgress\">\n <summary class=\"text-muted\">\n {{ 'chatMessage.viewProgress' | transloco }}\n </summary>\n <ul class=\"list-unstyled\">\n <li *ngFor=\"let step of progress\">\n <i class=\"fas fa-fw fa-check text-success\" *ngIf=\"step.done\"></i>\n <i class=\"fas fa-spinner fa-pulse step-ongoing\" *ngIf=\"!step.done && streaming\"></i>\n <i class=\"fa-solid fa-ban step-error\" *ngIf=\"!step.done && !streaming\"></i>\n <span class=\"ms-2 fw-bold\">{{step.title}}</span>\n <span *ngIf=\"step.content\" [innerHTML]=\"': ' + step.content\"></span>\n </li>\n </ul>\n </details>\n </div>\n\n <!-- Message content -->\n <div class=\"message-content\" *ngIf=\"message.content\">\n\n <!-- Custom rendering for WPS, to be remove with https://sinequa.atlassian.net/browse/ES-23710 -->\n <div *ngIf=\"message?.role === 'assistant' && message.messageType === 'CHART'\">\n <sq-assistant-chart [rawChartData]=\"message.content\"></sq-assistant-chart>\n </div>\n\n <!-- This section is responsible for customizing the template nodes used in the application.\n Template nodes are predefined structures that serve as blueprints for creating/customizing dynamic content -->\n\n\n @if(message?.role === 'assistant' && message.messageType !== 'CHART') {\n <SmartRenderer\n [message]=\"message.content | messageContent\"\n [context]=\"{\n getEmbeddedPageReference: getEmbeddedPageReference.bind(this),\n getEmbeddedImageReference: getEmbeddedImageReference.bind(this),\n referencesMap: referenceMap,\n references: processReferences.bind(this),\n rank: id()\n }\">\n </SmartRenderer>\n }\n\n <p *ngIf=\"message?.role === 'user' || message?.role === 'search-warning' || message?.role === 'connection-error'\">{{ message.content | messageContent }}</p>\n\n <!-- List of reference, if any -->\n @let referencesArray = references();\n @if (referencesArray?.length > 0 || imageReferencesMap?.size > 0 || pageReferencesMap?.size > 0) {\n <div class=\"references\">\n <details role=\"button\" class=\"select-none\" [open]=\"!collapseReferences\">\n <summary class=\"references-title\">{{ 'chatMessage.references' | transloco }}</summary>\n <ul>\n @for (reference of referencesArray; track $index) {\n @let attachment = referenceMap.get(reference);\n <!-- Only display the reference when the key is a integer not a decimal -->\n @if(attachment) {\n <li class=\"text-truncate\">\n <sq-chat-reference\n [class.expanded]=\"attachment?.$expanded\"\n [attachment]=\"attachment\"\n [reference]=\"reference\"\n [referenceMap]=\"referenceMap\"\n [images]=\"Array.from(imageReferencesMap.keys())\"\n [pages]=\"Array.from(pageReferencesMap.keys())\"\n (openPreview)=\"openAttachmentPreview($event)\"\n (openDocument)=\"openOriginalAttachment($event)\">\n </sq-chat-reference>\n </li>\n }\n }\n </ul>\n </details>\n </div>\n }\n </div>\n\n <!-- Edit / Regenerate floating actions -->\n <div class=\"sq-chat-message-actions\" *ngIf=\"message\">\n <!-- Common action buttons for \"user\" & \"assistant\" message -->\n <button class=\"btn btn-sm\" *ngIf=\"canCopy\" [sqTooltip]=\"'chatMessage.copyText' | transloco\" (click)=\"copyMessage(message)\">\n <i class=\"far fa-clipboard\"></i>\n </button>\n <!-- Action buttons for \"user\" message -->\n <button class=\"btn btn-sm\" *ngIf=\"canEdit\" [sqTooltip]=\"'chatMessage.editMessage' | transloco\" (click)=\"edit.emit(message)\">\n <i class=\"fas fa-edit\"></i>\n </button>\n <!-- Action buttons for \"assistant\" message -->\n <button class=\"btn btn-sm\" [class.bounce]=\"message.additionalProperties.$liked\" *ngIf=\"canLike\" [sqTooltip]=\"'chatMessage.likeAnswer' | transloco\" (click)=\"like.emit()\">\n <i *ngIf=\"!message.additionalProperties.$liked\" class=\"far fa-thumbs-up \"></i>\n <i *ngIf=\"message.additionalProperties.$liked\" class=\"fas fa-thumbs-up\"></i>\n </button>\n <button class=\"btn btn-sm\" [class.bounce]=\"message.additionalProperties.$disliked\" *ngIf=\"canDislike\" [sqTooltip]=\"'chatMessage.reportIssue' | transloco\" (click)=\"dislike.emit()\">\n <i *ngIf=\"!message.additionalProperties.$disliked\" class=\"far fa-thumbs-down \"></i>\n <i *ngIf=\"message.additionalProperties.$disliked\" class=\"fas fa-thumbs-down\"></i>\n </button>\n <button class=\"btn btn-sm\" *ngIf=\"canRegenerate\" [sqTooltip]=\"'chatMessage.regenerateResponse' | transloco\" (click)=\"regenerate.emit(message)\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n <button class=\"btn btn-sm\" *ngIf=\"canDebug\" [sqTooltip]=\"'chatMessage.showLogInformation' | transloco\" (click)=\"debug.emit(message);\">\n <i class=\"far fa-list-alt\"></i>\n </button>\n </div>\n\n <!-- List of suggested actions, if any -->\n <div *ngIf=\"suggestedActions\" class=\"mt-2 message-suggestion\">\n <div class=\"suggested-action\" *ngFor=\"let suggestedAction of suggestedActions\" (click)=\"suggestAction.emit(suggestedAction)\">\n <div class=\"message-icon\" [style.width.px]=\"iconSize\"></div>\n <div class=\"message-content\">\n <p><i class=\"fas {{suggestedAction.type === 'Submit' ? 'fa-paper-plane' : 'fa-comment-medical'}} me-1\"></i> {{suggestedAction.content}}</p>\n </div>\n </div>\n </div>\n\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host{display:flex}:host:not(:hover):not(.last-message) .sq-chat-message-actions{visibility:hidden}.message-content{padding:var(--ast-message-padding, var(--ast-size-3, .75rem));border-radius:var(--ast-message-border-radius, var(--ast-size-4, 1rem));display:inline-block;max-width:100%;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}.message-content .references{margin-top:var(--ast-size-5, 1.25rem)}.message-content .references ul{border-left:.2rem solid var(--ast-secondary-color, #FF732E);padding-left:var(--ast-size-5, 1.25rem);margin-top:var(--ast-size-2, .5rem)}.message-content .references .references-title{font-weight:var(--font-weight-bold, 500)}.message-content ::ng-deep p:last-child{margin-bottom:0}.message-content ::ng-deep .placeholder-glow .placeholder{animation-duration:.4s;width:12px;height:var(--ast-size-4, 1rem);vertical-align:text-bottom}.message-content ::ng-deep img{max-width:100%}.message-content ::ng-deep table{display:table;border:1px solid;border-color:var(--ast-message-table-border-color, #ccc);border-collapse:collapse;margin:0;padding:0;min-width:100%;overflow-x:auto;table-layout:fixed}.message-content ::ng-deep table tr{background-color:var(--ast-message-table-tr-bg, #f8f8f8);border:1px solid;border-color:var(--ast-message-table-tr-border-color, #ddd);padding:.35em}.message-content ::ng-deep table th,.message-content ::ng-deep table td{padding:.625em;text-align:center}.message-content ::ng-deep table th{font-size:.85em;letter-spacing:.1em;text-transform:uppercase}.message-content ::ng-deep .reference{color:var(--ast-message-reference-color, black)!important}.message-content ::ng-deep ul,.message-content ::ng-deep ol{display:flex;flex-direction:column;gap:.5rem;padding-right:2rem;margin-left:0;margin-right:0;padding-left:40px;unicode-bidi:isolate;list-style:disc}.message-content ::ng-deep p:not(:first-child){margin-top:.5rem}.message-assistant .message-content{background:var(--ast-secondary-bg, #FFF8F1)}.message-connection-error .message-content{background:var(--ast-error-bg, rgba(249, 58, 55, .2))}.message-search-warning .message-content{background:var(--ast-warning-bg, #fff1b8);color:var(--ast-message-reference-color, inherit)}.message-user .message-content{background:var(--ast-primary-bg, #f2f8fe);font-weight:var(--ast-user-font-weight, var(--font-weight-bold, 500))}.message-user .message-content p{white-space:pre-line}.message-suggestion .message-content{background:var(--ast-input-bg, #F8F8F8);font-weight:var(--ast-user-font-weight, var(--font-weight-bold, 500));transition:background-color .5s ease,color .5s ease}.message-suggestion .message-content:hover{background:var(--ast-primary-bg, #f2f8fe);color:var(--ast-primary-color, #005DA7)}.message-suggestion .message-content p{white-space:pre-line}.message-suggestion .suggested-action{cursor:pointer}.message-suggestion .suggested-action+.suggested-action{margin-top:var(--ast-size-2, .5rem)}.sq-chat-message-actions{position:absolute;bottom:calc(0rem - var(--ast-size-5, 1.25rem));display:flex;z-index:999}.sq-chat-message-actions button{font-size:.75rem;color:var(--ast-action-buttons-color, #212529)}.sq-chat-message-actions button:hover{color:var(--ast-action-buttons-hover-color, var(--ast-primary-color, #005DA7))}.message-icon{margin-top:var(--ast-size-3, .75rem);margin-right:var(--ast-size-4, 1rem)}.connection-error{height:var(--sq-size);width:var(--sq-size);color:var(--ast-error-color, rgba(249, 58, 55, .7))}.search-warning{height:var(--sq-size);width:var(--sq-size);color:var(--ast-warning-color, #fed86f)}.step-success{color:var(--ast-primary-color, #005DA7)}.step-ongoing{color:var(--ast-secondary-color, #FF732E)}.step-error{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.bounce{animation:bounce 2s ease}@keyframes bounce{10%{transform:translateY(0)}20%{transform:translateY(-15%)}30%{transform:translateY(0)}35%{transform:translateY(-7%)}37%{transform:translateY(0)}39%{transform:translateY(-3%)}40%{transform:translateY(0)}}\n"] }]
1191
- }], ctorParameters: () => [{ type: UIService }, { type: PrincipalService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { message: [{
1220
+ }], ctorParameters: () => [{ type: UIService }, { type: PrincipalService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], message: [{
1192
1221
  type: Input
1193
1222
  }], conversation: [{
1194
1223
  type: Input
@@ -1239,9 +1268,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1239
1268
  }] } });
1240
1269
 
1241
1270
  class UserSettingsWebService {
1242
- constructor() {
1243
- this.userSettings = {};
1244
- }
1271
+ userSettings = {};
1245
1272
  patch(data) {
1246
1273
  this.userSettings = { ...this.userSettings, ...data };
1247
1274
  return from(patchUserSettings(data).catch((error) => {
@@ -1249,10 +1276,10 @@ class UserSettingsWebService {
1249
1276
  throw error;
1250
1277
  }));
1251
1278
  }
1252
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserSettingsWebService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1253
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserSettingsWebService, providedIn: "root" }); }
1279
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserSettingsWebService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1280
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserSettingsWebService, providedIn: "root" });
1254
1281
  }
1255
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserSettingsWebService, decorators: [{
1282
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserSettingsWebService, decorators: [{
1256
1283
  type: Injectable,
1257
1284
  args: [{
1258
1285
  providedIn: "root"
@@ -1260,10 +1287,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1260
1287
  }] });
1261
1288
 
1262
1289
  class AssistantUtils {
1263
- constructor() {
1264
- this.localID = inject(LOCALE_ID, { optional: true });
1265
- this.transloco = inject(TranslocoService);
1266
- }
1290
+ localID = inject(LOCALE_ID, { optional: true });
1291
+ transloco = inject(TranslocoService);
1267
1292
  /**
1268
1293
  * Retrieves the rank (1-based index) of a message within a chat history array based on its message ID.
1269
1294
  * If the message is not found, returns -1.
@@ -1415,10 +1440,10 @@ class AssistantUtils {
1415
1440
  getCurrentLocaleName() {
1416
1441
  return this.localID || '';
1417
1442
  }
1418
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantUtils, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1419
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantUtils, providedIn: 'root' }); }
1443
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantUtils, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1444
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantUtils, providedIn: 'root' });
1420
1445
  }
1421
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantUtils, decorators: [{
1446
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantUtils, decorators: [{
1422
1447
  type: Injectable,
1423
1448
  args: [{
1424
1449
  providedIn: 'root'
@@ -1426,10 +1451,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1426
1451
  }] });
1427
1452
 
1428
1453
  class SavedChatsService {
1429
- constructor() {
1430
- this.notificationsService = inject(NotificationsService);
1431
- this.transloco = inject(TranslocoService);
1432
- }
1454
+ operationConfig;
1455
+ notificationsService = inject(NotificationsService);
1456
+ transloco = inject(TranslocoService);
1457
+ constructor() { }
1433
1458
  init(config) {
1434
1459
  this.operationConfig = config;
1435
1460
  }
@@ -1581,10 +1606,10 @@ class SavedChatsService {
1581
1606
  throw error;
1582
1607
  }));
1583
1608
  }
1584
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedChatsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1585
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedChatsService }); }
1609
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedChatsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1610
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedChatsService });
1586
1611
  }
1587
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedChatsService, decorators: [{
1612
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedChatsService, decorators: [{
1588
1613
  type: Injectable
1589
1614
  }], ctorParameters: () => [] });
1590
1615
 
@@ -1643,10 +1668,10 @@ class SignalRWebService {
1643
1668
  throw error;
1644
1669
  }
1645
1670
  }
1646
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignalRWebService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1647
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignalRWebService, providedIn: "root" }); }
1671
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignalRWebService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1672
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignalRWebService, providedIn: "root" });
1648
1673
  }
1649
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignalRWebService, decorators: [{
1674
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignalRWebService, decorators: [{
1650
1675
  type: Injectable,
1651
1676
  args: [{
1652
1677
  providedIn: "root"
@@ -1654,10 +1679,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1654
1679
  }] });
1655
1680
 
1656
1681
  class SignalRConnectionService {
1657
- constructor() {
1658
- this.signalRWebService = inject(SignalRWebService);
1659
- this.assistantUtils = inject(AssistantUtils);
1660
- }
1682
+ operationConfig;
1683
+ signalRWebService = inject(SignalRWebService);
1684
+ assistantUtils = inject(AssistantUtils);
1661
1685
  init(config) {
1662
1686
  this.operationConfig = config;
1663
1687
  }
@@ -1742,19 +1766,17 @@ class SignalRConnectionService {
1742
1766
  const connection = this.operationConfig.getHubConnection();
1743
1767
  return this.signalRWebService.stopConnection(connection);
1744
1768
  }
1745
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignalRConnectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1746
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignalRConnectionService }); }
1769
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignalRConnectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1770
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignalRConnectionService });
1747
1771
  }
1748
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignalRConnectionService, decorators: [{
1772
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SignalRConnectionService, decorators: [{
1749
1773
  type: Injectable
1750
1774
  }] });
1751
1775
 
1752
1776
  class DialogUpdatesComponent {
1753
- constructor() {
1754
- this.dialogRef = viewChild('dialog', { read: (ElementRef) });
1755
- this.dialog = computed(() => this.dialogRef()?.nativeElement);
1756
- this.closed = output();
1757
- }
1777
+ dialogRef = viewChild('dialog', ...(ngDevMode ? [{ debugName: "dialogRef", read: (ElementRef) }] : [{ read: (ElementRef) }]));
1778
+ dialog = computed(() => this.dialogRef()?.nativeElement, ...(ngDevMode ? [{ debugName: "dialog" }] : []));
1779
+ closed = output();
1758
1780
  open() {
1759
1781
  this.dialog().showModal();
1760
1782
  }
@@ -1773,8 +1795,8 @@ class DialogUpdatesComponent {
1773
1795
  update() {
1774
1796
  this.close("dialog-confirm");
1775
1797
  }
1776
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogUpdatesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1777
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", type: DialogUpdatesComponent, isStandalone: true, selector: "sq-dialog-updates", outputs: { closed: "closed" }, providers: [provideTranslocoScope('chat-dialogs')], viewQueries: [{ propertyName: "dialogRef", first: true, predicate: ["dialog"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: `
1798
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogUpdatesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1799
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.16", type: DialogUpdatesComponent, isStandalone: true, selector: "sq-dialog-updates", outputs: { closed: "closed" }, providers: [provideTranslocoScope('chat-dialogs')], viewQueries: [{ propertyName: "dialogRef", first: true, predicate: ["dialog"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: `
1778
1800
  <dialog popover #dialog class="z-backdrop w-full max-w-md p-4 rounded-lg border border-neutral-200 shadow-2xl">
1779
1801
  <div class="flex flex-col gap-4">
1780
1802
  <h1 class="text-xl font-bold">{{ 'chatDialogs.availableUpdates' | transloco }}</h1>
@@ -1787,9 +1809,9 @@ class DialogUpdatesComponent {
1787
1809
  </div>
1788
1810
  </div>
1789
1811
  </dialog>
1790
- `, isInline: true, styles: [".flex{display:flex}.flex-col{flex-direction:column}.justify-end{justify-content:end}\n"], dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
1812
+ `, isInline: true, styles: [".flex{display:flex}.flex-col{flex-direction:column}.justify-end{justify-content:end}\n"], dependencies: [{ kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
1791
1813
  }
1792
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogUpdatesComponent, decorators: [{
1814
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogUpdatesComponent, decorators: [{
1793
1815
  type: Component,
1794
1816
  args: [{ selector: 'sq-dialog-updates', standalone: true, imports: [TranslocoPipe], providers: [provideTranslocoScope('chat-dialogs')], template: `
1795
1817
  <dialog popover #dialog class="z-backdrop w-full max-w-md p-4 rounded-lg border border-neutral-200 shadow-2xl">
@@ -1805,9 +1827,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1805
1827
  </div>
1806
1828
  </dialog>
1807
1829
  `, styles: [".flex{display:flex}.flex-col{flex-direction:column}.justify-end{justify-content:end}\n"] }]
1808
- }] });
1830
+ }], propDecorators: { dialogRef: [{ type: i0.ViewChild, args: ['dialog', { ...{ read: (ElementRef) }, isSignal: true }] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
1809
1831
 
1810
1832
  class DialogService {
1833
+ appRef;
1834
+ dialogRef;
1811
1835
  constructor(appRef) {
1812
1836
  this.appRef = appRef;
1813
1837
  }
@@ -1835,10 +1859,10 @@ class DialogService {
1835
1859
  this.dialogRef.changeDetectorRef.detectChanges();
1836
1860
  }
1837
1861
  }
1838
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogService, deps: [{ token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable }); }
1839
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogService, providedIn: 'root' }); }
1862
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogService, deps: [{ token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable });
1863
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogService, providedIn: 'root' });
1840
1864
  }
1841
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogService, decorators: [{
1865
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogService, decorators: [{
1842
1866
  type: Injectable,
1843
1867
  args: [{
1844
1868
  providedIn: 'root',
@@ -1910,7 +1934,7 @@ const defaultValuesSchema = z.object({
1910
1934
  // Define the Zod representation for the action object
1911
1935
  const actionSchema = z.object({
1912
1936
  forcedWorkflow: z.string(), // forcedWorkflow must be a string
1913
- forcedWorkflowProperties: z.record(z.unknown()).optional(), // forcedWorkflowProperties must be an object (Map equivalent)
1937
+ forcedWorkflowProperties: z.record(z.string(), z.unknown()).optional(), // forcedWorkflowProperties must be an object (Map equivalent)
1914
1938
  });
1915
1939
  // Define the Zod representation for the modeSettings object
1916
1940
  const initializationSchema = z
@@ -1938,7 +1962,7 @@ const modeSettingsSchema = z.object({
1938
1962
  displayUserPrompt: z.boolean(),
1939
1963
  sendUserPrompt: z.boolean(),
1940
1964
  initialization: initializationSchema,
1941
- actions: z.record(actionSchema).optional(),
1965
+ actions: z.record(z.string(), actionSchema).optional(),
1942
1966
  });
1943
1967
  // Define the Zod representation for the savedChatSettings object
1944
1968
  const savedChatSettingsSchema = z.object({
@@ -1975,14 +1999,14 @@ const chatConfigSchema = z.object({
1975
1999
  });
1976
2000
 
1977
2001
  class AssistantConfigurationService {
1978
- constructor() {
1979
- this.appService = inject(AppService);
1980
- this.userSettingsService = inject(UserSettingsWebService);
1981
- this.principalService = inject(PrincipalService);
1982
- this.modalService = inject(DialogService);
1983
- this.notificationsService = inject(NotificationsService);
1984
- this.transloco = inject(TranslocoService);
1985
- }
2002
+ context;
2003
+ appService = inject(AppService);
2004
+ userSettingsService = inject(UserSettingsWebService);
2005
+ principalService = inject(PrincipalService);
2006
+ modalService = inject(DialogService);
2007
+ notificationsService = inject(NotificationsService);
2008
+ transloco = inject(TranslocoService);
2009
+ constructor() { }
1986
2010
  init(context) {
1987
2011
  this.context = context;
1988
2012
  }
@@ -2113,14 +2137,15 @@ class AssistantConfigurationService {
2113
2137
  const url = "SinequaAssistantREST";
2114
2138
  context.setRESTRequestsUrl(url);
2115
2139
  }
2116
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2117
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantConfigurationService }); }
2140
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2141
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantConfigurationService });
2118
2142
  }
2119
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantConfigurationService, decorators: [{
2143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantConfigurationService, decorators: [{
2120
2144
  type: Injectable
2121
2145
  }], ctorParameters: () => [] });
2122
2146
 
2123
2147
  class AssistantMetadataService {
2148
+ context;
2124
2149
  init(context) {
2125
2150
  this.context = context;
2126
2151
  }
@@ -2193,18 +2218,18 @@ class AssistantMetadataService {
2193
2218
  return throwError(() => error);
2194
2219
  }));
2195
2220
  }
2196
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantMetadataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2197
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantMetadataService }); }
2221
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantMetadataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2222
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantMetadataService });
2198
2223
  }
2199
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantMetadataService, decorators: [{
2224
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantMetadataService, decorators: [{
2200
2225
  type: Injectable
2201
2226
  }] });
2202
2227
 
2203
2228
  class AssistantTokensTrackingService {
2204
- constructor() {
2205
- this.assistantUtils = inject(AssistantUtils);
2206
- this.notificationsService = inject(NotificationsService);
2207
- }
2229
+ context;
2230
+ assistantUtils = inject(AssistantUtils);
2231
+ notificationsService = inject(NotificationsService);
2232
+ constructor() { }
2208
2233
  init(context) {
2209
2234
  this.context = context;
2210
2235
  }
@@ -2239,25 +2264,27 @@ class AssistantTokensTrackingService {
2239
2264
  context.setChatTokenConsumption({ percentage: consumptionPercentage });
2240
2265
  }
2241
2266
  }
2242
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantTokensTrackingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2243
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantTokensTrackingService }); }
2267
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantTokensTrackingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2268
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantTokensTrackingService });
2244
2269
  }
2245
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantTokensTrackingService, decorators: [{
2270
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantTokensTrackingService, decorators: [{
2246
2271
  type: Injectable
2247
2272
  }], ctorParameters: () => [] });
2248
2273
 
2249
2274
  class AssistantWsFramesService {
2250
- constructor() {
2251
- this.appService = inject(AppService);
2252
- this.transloco = inject(TranslocoService);
2253
- this.assistantUtils = inject(AssistantUtils);
2254
- this.notificationsService = inject(NotificationsService);
2255
- this._messageHandlers = new Map();
2256
- this._actionMap = new Map();
2257
- this._progress = undefined;
2258
- this._attachments = [];
2259
- this._debugMessages = [];
2260
- }
2275
+ context;
2276
+ appService = inject(AppService);
2277
+ transloco = inject(TranslocoService);
2278
+ assistantUtils = inject(AssistantUtils);
2279
+ notificationsService = inject(NotificationsService);
2280
+ _messageHandlers = new Map();
2281
+ _response;
2282
+ _actionMap = new Map();
2283
+ _progress = undefined;
2284
+ _executionTime;
2285
+ _executionTimeMilliseconds;
2286
+ _attachments = [];
2287
+ _debugMessages = [];
2261
2288
  init(context) {
2262
2289
  this.context = context;
2263
2290
  }
@@ -2586,7 +2613,9 @@ class AssistantWsFramesService {
2586
2613
  context.setStoppingGenerationStatus(true);
2587
2614
  // Create a Subject to hold the result of the CancelTasks method
2588
2615
  const stopGenerationSubject$ = new Subject();
2589
- connection.on('CancelTasks', (res) => {
2616
+ // Use a named handler so it can be removed after firing, preventing listener accumulation across multiple stop operations
2617
+ const cancelHandler = (res) => {
2618
+ connection.off('CancelTasks', cancelHandler);
2590
2619
  // When the generation is stopped before streaming any VISIBLE assistant message, this means that $progress, $attachment and $debug properties will be lost.
2591
2620
  // However, the "ContextMessage" frames will be persisted in the chatHistory and the assistant may reference them in the next generation.
2592
2621
  // This leads to the problem of referencing undisplayed attachments in the next generation.
@@ -2610,25 +2639,28 @@ class AssistantWsFramesService {
2610
2639
  stopGenerationSubject$.complete();
2611
2640
  // Complete stopping generation
2612
2641
  context.setStoppingGenerationStatus(false);
2613
- });
2642
+ };
2643
+ connection.on('CancelTasks', cancelHandler);
2614
2644
  // Invoke the CancelTasks method and handle errors
2615
2645
  connection.invoke('CancelTasks')
2616
2646
  .catch(error => {
2617
2647
  console.error('Error invoking CancelTasks:', error);
2648
+ connection.off('CancelTasks', cancelHandler);
2618
2649
  stopGenerationSubject$.error(new Error(error));
2619
2650
  context.setStoppingGenerationStatus(false);
2620
2651
  return Promise.resolve();
2621
2652
  });
2622
2653
  return stopGenerationSubject$.asObservable();
2623
2654
  }
2624
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantWsFramesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2625
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantWsFramesService }); }
2655
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantWsFramesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2656
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantWsFramesService });
2626
2657
  }
2627
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssistantWsFramesService, decorators: [{
2658
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AssistantWsFramesService, decorators: [{
2628
2659
  type: Injectable
2629
2660
  }] });
2630
2661
 
2631
2662
  class DebugMessageService {
2663
+ operationConfig;
2632
2664
  constructor() { }
2633
2665
  init(config) {
2634
2666
  if (this.operationConfig) {
@@ -2665,64 +2697,78 @@ class DebugMessageService {
2665
2697
  throw error;
2666
2698
  }));
2667
2699
  }
2668
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DebugMessageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2669
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DebugMessageService }); }
2700
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DebugMessageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2701
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DebugMessageService });
2670
2702
  }
2671
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DebugMessageService, decorators: [{
2703
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DebugMessageService, decorators: [{
2672
2704
  type: Injectable
2673
2705
  }], ctorParameters: () => [] });
2674
2706
 
2675
2707
  // Auto-generated
2676
- const LIB_VERSION = '3.10.5';
2708
+ const LIB_VERSION = '3.10.11';
2677
2709
 
2678
2710
  class ChatService {
2679
- constructor() {
2680
- /** Emit true once the initialization of the assistant process is done. */
2681
- this.initProcess$ = new BehaviorSubject(false);
2682
- /** Emit true once the initialization of the assistant config is done. */
2683
- this.initConfig$ = new BehaviorSubject(false);
2684
- /** Emit the global configuration of the assistant. */
2685
- this.assistantConfig$ = new BehaviorSubject(undefined);
2686
- /** Emit true if the user has been overridden, false otherwise. */
2687
- this.userOverride$ = new BehaviorSubject(undefined);
2688
- /**
2689
- * Emit true if the fetch of an assistant's response is ongoing (it includes Streaming status of the assistant endpoint AND saving the discussion if save Chat is enabled).
2690
- * This is used to prevent multiple fetches at the same time.
2691
- * Typically, there is no problem chaining fetches, but when forcing a reload after query changes cases, it can't be allowed because it breaks the whole business logic.
2692
- */
2693
- this.streaming$ = new BehaviorSubject(false);
2694
- /** List of saved chats. */
2695
- this.savedChats$ = new BehaviorSubject([]);
2696
- /** Whether there is an error with saved chats. */
2697
- this.savedChatsError$ = new BehaviorSubject(false);
2698
- /** Emit the saved chat to load. */
2699
- this.loadSavedChat$ = new BehaviorSubject(undefined);
2700
- /** Emit the quota each time the chat is invoked. */
2701
- this.quota$ = new BehaviorSubject(undefined);
2702
- /** Emit the calculated user's token consumption based on the quota. */
2703
- this.userTokenConsumption$ = new BehaviorSubject(undefined);
2704
- /** Emit the chat usage metrics each time the generation of the assistant response is completed. */
2705
- this.chatUsageMetrics$ = new BehaviorSubject(undefined);
2706
- /** Emit the calculated chat's token consumption based on the chat usage metrics. */
2707
- this.chatTokenConsumption$ = new BehaviorSubject(undefined);
2708
- /** Emit true if "CancelTasks" is ongoing. */
2709
- this.stoppingGeneration$ = new BehaviorSubject(false);
2710
- this.userSettingsService = inject(UserSettingsWebService);
2711
- this.notificationsService = inject(NotificationsService);
2712
- this.appService = inject(AppService);
2713
- this.principalService = inject(PrincipalService);
2714
- this.assistantUtils = inject(AssistantUtils);
2715
- this.savedChatsService = inject(SavedChatsService);
2716
- // Inject the SignalRConnectionService using 'new' to ensure a separate local instance for each ChatService instance
2717
- this.signalRConnectionService = new SignalRConnectionService();
2718
- this.assistantConfigurationService = inject(AssistantConfigurationService);
2719
- this.assistantMetadataService = new AssistantMetadataService();
2720
- this.assistantTokensTrackingService = inject(AssistantTokensTrackingService);
2721
- this.debugMessageService = inject(DebugMessageService);
2722
- // Inject the AssistantWsFramesService using 'new' to ensure a separate local instance for each ChatService instance
2723
- this.assistantWsFramesService = new (AssistantWsFramesService);
2724
- this.transloco = inject(TranslocoService);
2725
- }
2711
+ /** Name of the assistant websocket endpoint. */
2712
+ WS_REQUEST_URL;
2713
+ /** Name of the assistant REST endpoint. */
2714
+ REST_REQUEST_URL;
2715
+ /** SignalR connection instance */
2716
+ connection;
2717
+ /** Emit true once the initialization of the assistant process is done. */
2718
+ initProcess$ = new BehaviorSubject(false);
2719
+ /** Emit true once the initialization of the assistant config is done. */
2720
+ initConfig$ = new BehaviorSubject(false);
2721
+ /** Emit the global configuration of the assistant. */
2722
+ assistantConfig$ = new BehaviorSubject(undefined);
2723
+ /** Emit true if the user has been overridden, false otherwise. */
2724
+ userOverride$ = new BehaviorSubject(undefined);
2725
+ /**
2726
+ * Emit true if the fetch of an assistant's response is ongoing (it includes Streaming status of the assistant endpoint AND saving the discussion if save Chat is enabled).
2727
+ * This is used to prevent multiple fetches at the same time.
2728
+ * Typically, there is no problem chaining fetches, but when forcing a reload after query changes cases, it can't be allowed because it breaks the whole business logic.
2729
+ */
2730
+ streaming$ = new BehaviorSubject(false);
2731
+ /** Store the messages history of the current chat. */
2732
+ chatHistory;
2733
+ /** List of models available on the server. */
2734
+ models;
2735
+ /** List of functions available on the server. */
2736
+ functions;
2737
+ /** List of saved chats. */
2738
+ savedChats$ = new BehaviorSubject([]);
2739
+ /** Whether there is an error with saved chats. */
2740
+ savedChatsError$ = new BehaviorSubject(false);
2741
+ /** Emit the saved chat to load. */
2742
+ loadSavedChat$ = new BehaviorSubject(undefined);
2743
+ /** Emit the quota each time the chat is invoked. */
2744
+ quota$ = new BehaviorSubject(undefined);
2745
+ /** Emit the calculated user's token consumption based on the quota. */
2746
+ userTokenConsumption$ = new BehaviorSubject(undefined);
2747
+ /** Emit the chat usage metrics each time the generation of the assistant response is completed. */
2748
+ chatUsageMetrics$ = new BehaviorSubject(undefined);
2749
+ /** Emit the calculated chat's token consumption based on the chat usage metrics. */
2750
+ chatTokenConsumption$ = new BehaviorSubject(undefined);
2751
+ /** Emit true if "CancelTasks" is ongoing. */
2752
+ stoppingGeneration$ = new BehaviorSubject(false);
2753
+ /** Instance ID of the chat service defining the assistant instance. */
2754
+ _chatInstanceId;
2755
+ /** Generated GUID for the current chat discussion used to save/get/delete it and identify audit events. */
2756
+ _chatId;
2757
+ userSettingsService = inject(UserSettingsWebService);
2758
+ notificationsService = inject(NotificationsService);
2759
+ appService = inject(AppService);
2760
+ principalService = inject(PrincipalService);
2761
+ assistantUtils = inject(AssistantUtils);
2762
+ savedChatsService = inject(SavedChatsService);
2763
+ // Inject the SignalRConnectionService using 'new' to ensure a separate local instance for each ChatService instance
2764
+ signalRConnectionService = new SignalRConnectionService();
2765
+ assistantConfigurationService = inject(AssistantConfigurationService);
2766
+ assistantMetadataService = new AssistantMetadataService();
2767
+ assistantTokensTrackingService = inject(AssistantTokensTrackingService);
2768
+ debugMessageService = inject(DebugMessageService);
2769
+ // Inject the AssistantWsFramesService using 'new' to ensure a separate local instance for each ChatService instance
2770
+ assistantWsFramesService = new (AssistantWsFramesService);
2771
+ transloco = inject(TranslocoService);
2726
2772
  /**
2727
2773
  * Initialize the assistant process.
2728
2774
  * It includes building and starting a connection, executing parallel requests for models and functions, and handling errors during the process.
@@ -3286,19 +3332,22 @@ class ChatService {
3286
3332
  };
3287
3333
  await Audit.notify(audit);
3288
3334
  }
3289
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3290
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatService }); }
3335
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3336
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatService });
3291
3337
  }
3292
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatService, decorators: [{
3338
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatService, decorators: [{
3293
3339
  type: Injectable
3294
3340
  }] });
3295
3341
 
3296
3342
  class DebugMessageDetailsComponent {
3343
+ ui;
3344
+ debugMessageService;
3345
+ data;
3346
+ level = 0; // Track the nesting level
3347
+ parentColor = ''; // Track the parent row color
3297
3348
  constructor(ui, debugMessageService) {
3298
3349
  this.ui = ui;
3299
3350
  this.debugMessageService = debugMessageService;
3300
- this.level = 0; // Track the nesting level
3301
- this.parentColor = ''; // Track the parent row color
3302
3351
  }
3303
3352
  ngAfterViewInit() {
3304
3353
  Prism.highlightAll();
@@ -3314,10 +3363,10 @@ class DebugMessageDetailsComponent {
3314
3363
  copyToClipboard(code) {
3315
3364
  this.ui.copyToClipboard(JSON.stringify(code, null, 2));
3316
3365
  }
3317
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DebugMessageDetailsComponent, deps: [{ token: UIService }, { token: DebugMessageService }], target: i0.ɵɵFactoryTarget.Component }); }
3318
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DebugMessageDetailsComponent, isStandalone: true, selector: "sq-debug-message-details", inputs: { data: "data", level: "level", parentColor: "parentColor" }, providers: [provideTranslocoScope('chat-debug-message')], ngImport: i0, template: "<ng-container *ngFor=\"let item of data; let i = index\">\n <div *ngIf=\"item.type === 'KV'\" [ngClass]=\"getRowClass(item)\" class=\"d-flex w-100 kv-object\">\n <div class=\"kv-key\">{{ item.data.key }}</div>\n <div class=\"kv-value\">\n <ng-container *ngIf=\"isObject(item.data.value); else normalValue\">\n <div class=\"card mb-2\">\n <div class=\"card-header\">\n <button class=\"btn btn-light btn-sm\" (click)=\"copyToClipboard(item.data.value)\"><i class=\"far fa-fw fa-clipboard\"></i> {{ 'chatDebugMessage.copyCode' | transloco }}</button>\n </div>\n <pre class=\"language-json my-0 rounded-0 rounded-bottom\"><code class=\"language-json\">{{ item.data.value | json }}</code></pre>\n </div>\n </ng-container>\n <ng-template #normalValue><div class=\"data-value\">{{ item.data.value }}</div></ng-template>\n </div>\n </div>\n <div *ngIf=\"item.type === 'LIST'\" [ngClass]=\"getRowClass(item)\" class=\"d-flex w-100 list-object\">\n <div class=\"list-name w-100\" (click)=\"item.expanded=!item.expanded\" *ngIf=\"level > 0\"> <!--remove first level toggle since always it is a LIST object that matches the name of the parent, otherwise, 2 similar title's div duplicated-->\n <i class=\"fas\" [class.fa-chevron-up]=\"item.expanded\" [class.fa-chevron-down]=\"!item.expanded\"></i>\n {{ item.name }}\n </div>\n <div class=\"list-items w-100\" *ngIf=\"item.expanded\">\n <sq-debug-message-details [data]=\"item.items\" [level]=\"level + 1\" [parentColor]=\"getRowClass(item)\"></sq-debug-message-details>\n </div>\n </div>\n</ng-container>\n", styles: [".list-name{width:15%;cursor:pointer}.list-items{width:85%}.kv-key,.kv-value,.list-name{padding:8px;border:1px solid #ccc;box-sizing:border-box;word-wrap:break-word}.kv-key{width:20%}.kv-value{width:80%}.kv-value .data-value{white-space:pre-line}.kv-object,.list-object{display:flex;flex:1}.list-object{flex-direction:column}.row-even{background-color:#fff}.row-odd{background-color:#f2f8fe}.row-error{background-color:#f08080}.table-row:not(:last-child){border-bottom:1px solid #ccc}.kv-key:last-child,.kv-value:last-child,.list-name:last-child{border-right:none}.d-flex{display:flex}.w-100{width:100%}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), .03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.rounded-0{border-radius:0!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}\n"], dependencies: [{ kind: "component", type: DebugMessageDetailsComponent, selector: "sq-debug-message-details", inputs: ["data", "level", "parentColor"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.JsonPipe, name: "json" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
3366
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DebugMessageDetailsComponent, deps: [{ token: UIService }, { token: DebugMessageService }], target: i0.ɵɵFactoryTarget.Component });
3367
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DebugMessageDetailsComponent, isStandalone: true, selector: "sq-debug-message-details", inputs: { data: "data", level: "level", parentColor: "parentColor" }, providers: [provideTranslocoScope('chat-debug-message')], ngImport: i0, template: "<ng-container *ngFor=\"let item of data; let i = index\">\n <div *ngIf=\"item.type === 'KV'\" [ngClass]=\"getRowClass(item)\" class=\"d-flex w-100 kv-object\">\n <div class=\"kv-key\">{{ item.data.key }}</div>\n <div class=\"kv-value\">\n <ng-container *ngIf=\"isObject(item.data.value); else normalValue\">\n <div class=\"card mb-2\">\n <div class=\"card-header\">\n <button class=\"btn btn-light btn-sm\" (click)=\"copyToClipboard(item.data.value)\"><i class=\"far fa-fw fa-clipboard\"></i> {{ 'chatDebugMessage.copyCode' | transloco }}</button>\n </div>\n <pre class=\"language-json my-0 rounded-0 rounded-bottom\"><code class=\"language-json\">{{ item.data.value | json }}</code></pre>\n </div>\n </ng-container>\n <ng-template #normalValue><div class=\"data-value\">{{ item.data.value }}</div></ng-template>\n </div>\n </div>\n <div *ngIf=\"item.type === 'LIST'\" [ngClass]=\"getRowClass(item)\" class=\"d-flex w-100 list-object\">\n <div class=\"list-name w-100\" (click)=\"item.expanded=!item.expanded\" *ngIf=\"level > 0\"> <!--remove first level toggle since always it is a LIST object that matches the name of the parent, otherwise, 2 similar title's div duplicated-->\n <i class=\"fas\" [class.fa-chevron-up]=\"item.expanded\" [class.fa-chevron-down]=\"!item.expanded\"></i>\n {{ item.name }}\n </div>\n <div class=\"list-items w-100\" *ngIf=\"item.expanded\">\n <sq-debug-message-details [data]=\"item.items\" [level]=\"level + 1\" [parentColor]=\"getRowClass(item)\"></sq-debug-message-details>\n </div>\n </div>\n</ng-container>\n", styles: [".list-name{width:15%;cursor:pointer}.list-items{width:85%}.kv-key,.kv-value,.list-name{padding:8px;border:1px solid #ccc;box-sizing:border-box;word-wrap:break-word}.kv-key{width:20%}.kv-value{width:80%}.kv-value .data-value{white-space:pre-line}.kv-object,.list-object{display:flex;flex:1}.list-object{flex-direction:column}.row-even{background-color:#fff}.row-odd{background-color:#f2f8fe}.row-error{background-color:#f08080}.table-row:not(:last-child){border-bottom:1px solid #ccc}.kv-key:last-child,.kv-value:last-child,.list-name:last-child{border-right:none}.d-flex{display:flex}.w-100{width:100%}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), .03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.rounded-0{border-radius:0!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}\n"], dependencies: [{ kind: "component", type: DebugMessageDetailsComponent, selector: "sq-debug-message-details", inputs: ["data", "level", "parentColor"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.JsonPipe, name: "json" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
3319
3368
  }
3320
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DebugMessageDetailsComponent, decorators: [{
3369
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DebugMessageDetailsComponent, decorators: [{
3321
3370
  type: Component,
3322
3371
  args: [{ selector: "sq-debug-message-details", standalone: true, imports: [CommonModule, TranslocoPipe], providers: [provideTranslocoScope('chat-debug-message')], template: "<ng-container *ngFor=\"let item of data; let i = index\">\n <div *ngIf=\"item.type === 'KV'\" [ngClass]=\"getRowClass(item)\" class=\"d-flex w-100 kv-object\">\n <div class=\"kv-key\">{{ item.data.key }}</div>\n <div class=\"kv-value\">\n <ng-container *ngIf=\"isObject(item.data.value); else normalValue\">\n <div class=\"card mb-2\">\n <div class=\"card-header\">\n <button class=\"btn btn-light btn-sm\" (click)=\"copyToClipboard(item.data.value)\"><i class=\"far fa-fw fa-clipboard\"></i> {{ 'chatDebugMessage.copyCode' | transloco }}</button>\n </div>\n <pre class=\"language-json my-0 rounded-0 rounded-bottom\"><code class=\"language-json\">{{ item.data.value | json }}</code></pre>\n </div>\n </ng-container>\n <ng-template #normalValue><div class=\"data-value\">{{ item.data.value }}</div></ng-template>\n </div>\n </div>\n <div *ngIf=\"item.type === 'LIST'\" [ngClass]=\"getRowClass(item)\" class=\"d-flex w-100 list-object\">\n <div class=\"list-name w-100\" (click)=\"item.expanded=!item.expanded\" *ngIf=\"level > 0\"> <!--remove first level toggle since always it is a LIST object that matches the name of the parent, otherwise, 2 similar title's div duplicated-->\n <i class=\"fas\" [class.fa-chevron-up]=\"item.expanded\" [class.fa-chevron-down]=\"!item.expanded\"></i>\n {{ item.name }}\n </div>\n <div class=\"list-items w-100\" *ngIf=\"item.expanded\">\n <sq-debug-message-details [data]=\"item.items\" [level]=\"level + 1\" [parentColor]=\"getRowClass(item)\"></sq-debug-message-details>\n </div>\n </div>\n</ng-container>\n", styles: [".list-name{width:15%;cursor:pointer}.list-items{width:85%}.kv-key,.kv-value,.list-name{padding:8px;border:1px solid #ccc;box-sizing:border-box;word-wrap:break-word}.kv-key{width:20%}.kv-value{width:80%}.kv-value .data-value{white-space:pre-line}.kv-object,.list-object{display:flex;flex:1}.list-object{flex-direction:column}.row-even{background-color:#fff}.row-odd{background-color:#f2f8fe}.row-error{background-color:#f08080}.table-row:not(:last-child){border-bottom:1px solid #ccc}.kv-key:last-child,.kv-value:last-child,.list-name:last-child{border-right:none}.d-flex{display:flex}.w-100{width:100%}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), .03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.rounded-0{border-radius:0!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}\n"] }]
3323
3372
  }], ctorParameters: () => [{ type: UIService }, { type: DebugMessageService }], propDecorators: { data: [{
@@ -3329,6 +3378,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3329
3378
  }] } });
3330
3379
 
3331
3380
  class DebugMessageComponent {
3381
+ debugMessageService;
3382
+ cdr;
3383
+ data;
3332
3384
  constructor(debugMessageService, cdr) {
3333
3385
  this.debugMessageService = debugMessageService;
3334
3386
  this.cdr = cdr;
@@ -3351,10 +3403,10 @@ class DebugMessageComponent {
3351
3403
  })).subscribe();
3352
3404
  }
3353
3405
  }
3354
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DebugMessageComponent, deps: [{ token: DebugMessageService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
3355
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DebugMessageComponent, isStandalone: true, selector: "sq-debug-message", inputs: { data: "data" }, ngImport: i0, template: "<div *ngIf=\"data\" class=\"table-root\">\n <ng-container *ngFor=\"let item of data; let i = index\">\n <div [ngClass]=\"getRowClass(i)\" class=\"d-flex w-100 list-object\">\n <div class=\"list-name w-100 fw-bold\" (click)=\"toggleExpand(item)\">\n <i class=\"fas\" [class.fa-chevron-up]=\"item.$expanded\" [class.fa-chevron-down]=\"!item.$expanded\"></i>\n {{ item.title }}\n </div>\n <div class=\"list-items w-100\" *ngIf=\"item.$expanded\">\n <div *ngIf=\"item.$loading\">Loading...</div>\n <sq-debug-message-details *ngIf=\"item.$details\" [data]=\"item.$details\" [parentColor]=\"getRowClass(i)\"></sq-debug-message-details>\n </div>\n </div>\n </ng-container>\n</div>\n", styles: [".table-root{display:flex;flex-direction:column;border:1px solid #ccc;width:100%;border-spacing:0}.table-row{display:flex;width:100%}.list-name{width:15%;cursor:pointer}.list-items{width:85%}.list-name{padding:8px;border:1px solid #ccc;box-sizing:border-box;word-wrap:break-word}.list-object{flex-direction:column;display:flex;flex:1}.row-even{background-color:#fff}.row-odd{background-color:#f2f8fe}.table-row:not(:last-child){border-bottom:1px solid #ccc}.list-name:last-child{border-right:none}.d-flex{display:flex}.w-100{width:100%}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), .03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.rounded-0{border-radius:0!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DebugMessageDetailsComponent, selector: "sq-debug-message-details", inputs: ["data", "level", "parentColor"] }] }); }
3406
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DebugMessageComponent, deps: [{ token: DebugMessageService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
3407
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DebugMessageComponent, isStandalone: true, selector: "sq-debug-message", inputs: { data: "data" }, ngImport: i0, template: "<div *ngIf=\"data\" class=\"table-root\">\n <ng-container *ngFor=\"let item of data; let i = index\">\n <div [ngClass]=\"getRowClass(i)\" class=\"d-flex w-100 list-object\">\n <div class=\"list-name w-100 fw-bold\" (click)=\"toggleExpand(item)\">\n <i class=\"fas\" [class.fa-chevron-up]=\"item.$expanded\" [class.fa-chevron-down]=\"!item.$expanded\"></i>\n {{ item.title }}\n </div>\n <div class=\"list-items w-100\" *ngIf=\"item.$expanded\">\n <div *ngIf=\"item.$loading\">Loading...</div>\n <sq-debug-message-details *ngIf=\"item.$details\" [data]=\"item.$details\" [parentColor]=\"getRowClass(i)\"></sq-debug-message-details>\n </div>\n </div>\n </ng-container>\n</div>\n", styles: [".table-root{display:flex;flex-direction:column;border:1px solid #ccc;width:100%;border-spacing:0}.table-row{display:flex;width:100%}.list-name{width:15%;cursor:pointer}.list-items{width:85%}.list-name{padding:8px;border:1px solid #ccc;box-sizing:border-box;word-wrap:break-word}.list-object{flex-direction:column;display:flex;flex:1}.row-even{background-color:#fff}.row-odd{background-color:#f2f8fe}.table-row:not(:last-child){border-bottom:1px solid #ccc}.list-name:last-child{border-right:none}.d-flex{display:flex}.w-100{width:100%}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), .03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.rounded-0{border-radius:0!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DebugMessageDetailsComponent, selector: "sq-debug-message-details", inputs: ["data", "level", "parentColor"] }] });
3356
3408
  }
3357
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DebugMessageComponent, decorators: [{
3409
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DebugMessageComponent, decorators: [{
3358
3410
  type: Component,
3359
3411
  args: [{ selector: "sq-debug-message", standalone: true, imports: [CommonModule, DebugMessageDetailsComponent], template: "<div *ngIf=\"data\" class=\"table-root\">\n <ng-container *ngFor=\"let item of data; let i = index\">\n <div [ngClass]=\"getRowClass(i)\" class=\"d-flex w-100 list-object\">\n <div class=\"list-name w-100 fw-bold\" (click)=\"toggleExpand(item)\">\n <i class=\"fas\" [class.fa-chevron-up]=\"item.$expanded\" [class.fa-chevron-down]=\"!item.$expanded\"></i>\n {{ item.title }}\n </div>\n <div class=\"list-items w-100\" *ngIf=\"item.$expanded\">\n <div *ngIf=\"item.$loading\">Loading...</div>\n <sq-debug-message-details *ngIf=\"item.$details\" [data]=\"item.$details\" [parentColor]=\"getRowClass(i)\"></sq-debug-message-details>\n </div>\n </div>\n </ng-container>\n</div>\n", styles: [".table-root{display:flex;flex-direction:column;border:1px solid #ccc;width:100%;border-spacing:0}.table-row{display:flex;width:100%}.list-name{width:15%;cursor:pointer}.list-items{width:85%}.list-name{padding:8px;border:1px solid #ccc;box-sizing:border-box;word-wrap:break-word}.list-object{flex-direction:column;display:flex;flex:1}.row-even{background-color:#fff}.row-odd{background-color:#f2f8fe}.table-row:not(:last-child){border-bottom:1px solid #ccc}.list-name:last-child{border-right:none}.d-flex{display:flex}.w-100{width:100%}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: var(--bs-border-width);--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(var(--bs-body-color-rgb), .03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: var(--bs-body-bg);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .875rem;--bs-btn-border-radius: var(--bs-border-radius-sm)}.rounded-0{border-radius:0!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}\n"] }]
3360
3412
  }], ctorParameters: () => [{ type: DebugMessageService }, { type: i0.ChangeDetectorRef }], propDecorators: { data: [{
@@ -3362,10 +3414,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3362
3414
  }] } });
3363
3415
 
3364
3416
  class SearchService {
3365
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3366
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchService, providedIn: 'root' }); }
3417
+ query;
3418
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3419
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchService, providedIn: 'root' });
3367
3420
  }
3368
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchService, decorators: [{
3421
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SearchService, decorators: [{
3369
3422
  type: Injectable,
3370
3423
  args: [{
3371
3424
  providedIn: 'root'
@@ -3373,10 +3426,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3373
3426
  }] });
3374
3427
 
3375
3428
  class TokenProgressBarComponent {
3376
- constructor() {
3377
- this.subscription = new Subscription();
3378
- this.instanceManagerService = inject(InstanceManagerService);
3379
- }
3429
+ /** Define the key based on it, the appropriate chatService instance will be returned from instanceManagerService */
3430
+ instanceId;
3431
+ chatService;
3432
+ config;
3433
+ subscription = new Subscription();
3434
+ // User token consumption progress bar
3435
+ userPercentage;
3436
+ userTokensResetDate;
3437
+ // Current chat token consumption progress bar
3438
+ chatPercentage;
3439
+ instanceManagerService = inject(InstanceManagerService);
3380
3440
  ngOnInit() {
3381
3441
  this.subscription.add(of(isAuthenticated()).pipe(tap(_ => this.instantiateChatService()), switchMap(_ => this.chatService.initProcess$), filter(success => !!success), tap(_ => {
3382
3442
  this.config = this.chatService.assistantConfig$.value;
@@ -3405,10 +3465,10 @@ class TokenProgressBarComponent {
3405
3465
  }
3406
3466
  }));
3407
3467
  }
3408
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TokenProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3409
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TokenProgressBarComponent, isStandalone: true, selector: "sq-token-progress-bar", inputs: { instanceId: "instanceId" }, providers: [provideTranslocoScope('token-consumption')], ngImport: i0, template: "<div class=\"bars-container d-flex flex-row gap-2 p-2 me-4\" *ngIf=\"(config?.globalSettings?.displayUserQuotaConsumption && userPercentage !== undefined) || (config?.globalSettings?.displayChatTokensConsumption && chatPercentage !== undefined)\">\n <div *ngIf=\"(config?.globalSettings?.displayUserQuotaConsumption && userPercentage !== undefined)\" class=\"token-progress-bar\" [sqTooltip]=\"'tokenConsumption.userConsumptionTitle' | transloco : { percentage: userPercentage, time: userTokensResetDate }\"\n [style.background]=\"'radial-gradient(closest-side, var(--ast-primary-bg, #F8F8F8) 70%, transparent 75% 100%), conic-gradient(#FF854A ' + userPercentage + '%, #0040BF 0)'\">\n </div>\n <div *ngIf=\"(config?.globalSettings?.displayChatTokensConsumption && chatPercentage !== undefined)\" class=\"token-progress-bar\" [sqTooltip]=\"'tokenConsumption.chatConsumptionTitle' | transloco : { percentage: chatPercentage }\"\n [style.background]=\"'radial-gradient(closest-side, var(--ast-primary-bg, #F8F8F8) 70%, transparent 75% 100%), conic-gradient(#FF854A ' + chatPercentage + '%, #0040BF 0)'\">\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.bars-container{background-color:var(--ast-primary-bg, #f2f8fe);border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}.token-progress-bar{width:1.5rem;height:1.5rem;border-radius:50%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
3468
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TokenProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3469
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: TokenProgressBarComponent, isStandalone: true, selector: "sq-token-progress-bar", inputs: { instanceId: "instanceId" }, providers: [provideTranslocoScope('token-consumption')], ngImport: i0, template: "<div class=\"bars-container d-flex flex-row gap-2 p-2 me-4\" *ngIf=\"(config?.globalSettings?.displayUserQuotaConsumption && userPercentage !== undefined) || (config?.globalSettings?.displayChatTokensConsumption && chatPercentage !== undefined)\">\n <div *ngIf=\"(config?.globalSettings?.displayUserQuotaConsumption && userPercentage !== undefined)\" class=\"token-progress-bar\" [sqTooltip]=\"'tokenConsumption.userConsumptionTitle' | transloco : { percentage: userPercentage, time: userTokensResetDate }\"\n [style.background]=\"'radial-gradient(closest-side, var(--ast-primary-bg, #F8F8F8) 70%, transparent 75% 100%), conic-gradient(#FF854A ' + userPercentage + '%, #0040BF 0)'\">\n </div>\n <div *ngIf=\"(config?.globalSettings?.displayChatTokensConsumption && chatPercentage !== undefined)\" class=\"token-progress-bar\" [sqTooltip]=\"'tokenConsumption.chatConsumptionTitle' | transloco : { percentage: chatPercentage }\"\n [style.background]=\"'radial-gradient(closest-side, var(--ast-primary-bg, #F8F8F8) 70%, transparent 75% 100%), conic-gradient(#FF854A ' + chatPercentage + '%, #0040BF 0)'\">\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.bars-container{background-color:var(--ast-primary-bg, #f2f8fe);border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}.token-progress-bar{width:1.5rem;height:1.5rem;border-radius:50%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
3410
3470
  }
3411
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TokenProgressBarComponent, decorators: [{
3471
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TokenProgressBarComponent, decorators: [{
3412
3472
  type: Component,
3413
3473
  args: [{ selector: 'sq-token-progress-bar', standalone: true, providers: [provideTranslocoScope('token-consumption')], imports: [CommonModule, TooltipDirective, TranslocoPipe], template: "<div class=\"bars-container d-flex flex-row gap-2 p-2 me-4\" *ngIf=\"(config?.globalSettings?.displayUserQuotaConsumption && userPercentage !== undefined) || (config?.globalSettings?.displayChatTokensConsumption && chatPercentage !== undefined)\">\n <div *ngIf=\"(config?.globalSettings?.displayUserQuotaConsumption && userPercentage !== undefined)\" class=\"token-progress-bar\" [sqTooltip]=\"'tokenConsumption.userConsumptionTitle' | transloco : { percentage: userPercentage, time: userTokensResetDate }\"\n [style.background]=\"'radial-gradient(closest-side, var(--ast-primary-bg, #F8F8F8) 70%, transparent 75% 100%), conic-gradient(#FF854A ' + userPercentage + '%, #0040BF 0)'\">\n </div>\n <div *ngIf=\"(config?.globalSettings?.displayChatTokensConsumption && chatPercentage !== undefined)\" class=\"token-progress-bar\" [sqTooltip]=\"'tokenConsumption.chatConsumptionTitle' | transloco : { percentage: chatPercentage }\"\n [style.background]=\"'radial-gradient(closest-side, var(--ast-primary-bg, #F8F8F8) 70%, transparent 75% 100%), conic-gradient(#FF854A ' + chatPercentage + '%, #0040BF 0)'\">\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.bars-container{background-color:var(--ast-primary-bg, #f2f8fe);border-bottom-left-radius:1rem;border-bottom-right-radius:1rem}.token-progress-bar{width:1.5rem;height:1.5rem;border-radius:50%}\n"] }]
3414
3474
  }], propDecorators: { instanceId: [{
@@ -3416,66 +3476,110 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3416
3476
  }] } });
3417
3477
 
3418
3478
  class ChatComponent {
3479
+ chatService = inject(ChatService);
3480
+ instanceManagerService = inject(InstanceManagerService);
3481
+ searchService = inject(SearchService);
3482
+ principalService = inject(PrincipalService);
3483
+ cdr = inject(ChangeDetectorRef);
3484
+ notificationsService = inject(NotificationsService);
3485
+ transloco = inject(TranslocoService);
3486
+ assistantUtils = inject(AssistantUtils);
3487
+ destroyRef = inject(DestroyRef);
3488
+ /** Define the key based on it, the chat service instance will be stored */
3489
+ instanceId;
3490
+ /** Define the query to use to fetch answers */
3491
+ query = this.searchService.query;
3492
+ /** Function that determines whether the chat should be reloaded after the query changes
3493
+ * If not provided, the chat will be reloaded by default
3494
+ * @param prevQuery The previous query
3495
+ * @param newQuery The new query
3496
+ * @returns true if the chat should be reloaded, false otherwise
3497
+ */
3498
+ queryChangeShouldTriggerReload;
3499
+ /** Map of listeners overriding default registered ones*/
3500
+ messageHandlers = new Map();
3501
+ /** When the assistant answer a user question, automatically scroll down to the bottom of the discussion */
3502
+ automaticScrollToLastResponse = false;
3503
+ /** When the assistant answer a user question, automatically focus to the chat input */
3504
+ focusAfterResponse = false;
3505
+ /** A chat discussion that the component should get initialized with it */
3506
+ chat;
3507
+ /** Icon to use for the assistant messages */
3508
+ assistantMessageIcon = 'sq-sinequa';
3509
+ /** Icon to use for the user messages */
3510
+ userMessageIcon;
3511
+ /** Icon to use for the connection error messages */
3512
+ connectionErrorMessageIcon;
3513
+ /** Icon to use for the search warning messages */
3514
+ searchWarningMessageIcon;
3515
+ // Add custom additionalWorkflowProperties to the user query message
3516
+ additionalWorkflowProperties = {};
3517
+ /** Used by assistant web component to pass properly init the global config */
3518
+ appConfig;
3519
+ /** Whether the chat component is displayed in a collapsed state */
3520
+ collapsed = false;
3521
+ /** Event emitter triggered once the signalR connection is established */
3522
+ connection = new EventEmitter();
3523
+ /** Event emitter triggered each time the assistant updates the current chat */
3524
+ /** Event emitter triggered when the chat is loading new content */
3525
+ loading$ = new EventEmitter(false);
3526
+ /** Emits the assistant configuration used when instantiating the component */
3527
+ _config = new EventEmitter();
3528
+ data = new EventEmitter();
3529
+ /** Event emitter triggered when the user clicks to open the original document representing the context attachment*/
3530
+ openDocument = new EventEmitter();
3531
+ /** Event emitter triggered when the user clicks to open the preview of a document representing the context attachment */
3532
+ openPreview = new EventEmitter();
3533
+ /** Event emitter triggered when the user clicks on a suggested action */
3534
+ suggestAction = new EventEmitter();
3535
+ /** ViewChild decorators to access the template elements */
3536
+ questionInput;
3537
+ /** ContentChild decorators allowing the override of the default templates from the parent component */
3538
+ loadingTpl;
3539
+ reportTpl;
3540
+ tokenConsumptionTpl;
3541
+ debugMessagesTpl;
3542
+ config;
3543
+ messages$ = new BehaviorSubject(undefined);
3544
+ isAdminOrDeletedAdmin = false;
3545
+ question = '';
3546
+ _dataSubscription;
3547
+ /** Variables that depend on the type of model in use */
3548
+ modelDescription;
3549
+ indexMessageToEdit;
3550
+ rankMessageToEdit;
3551
+ changes$ = new BehaviorSubject(undefined);
3552
+ currentMessageIndex;
3553
+ firstChangesHandled = false;
3554
+ isAtBottom = true;
3555
+ initializationError = false;
3556
+ enabledUserInput = false;
3557
+ isConnected = true; // By default, the chat is considered connected
3558
+ retrialAttempts;
3559
+ // Flag to track whether the 'reconnected' listener is already registered
3560
+ _isReconnectedListenerRegistered = false;
3561
+ // Issue reporting
3562
+ issueTypes;
3563
+ defaultIssueTypes = [
3564
+ 'chat.userInterfaceBug',
3565
+ 'chat.incorrectResponse',
3566
+ 'chat.incompleteResponse',
3567
+ 'chat.technicalIssue',
3568
+ 'chat.privacyDataSecurityIssue',
3569
+ 'chat.otherIssue'
3570
+ ];
3571
+ issueType = '';
3572
+ reportComment;
3573
+ messageToReport;
3574
+ reportRank;
3575
+ reportType = 'dislike';
3576
+ showReport = false;
3577
+ // Debug messages
3578
+ debugMessages;
3579
+ showDebugMessages = false;
3580
+ _previousQuery;
3581
+ _reloadSubscription = undefined;
3419
3582
  constructor() {
3420
- this.chatService = inject(ChatService);
3421
- this.instanceManagerService = inject(InstanceManagerService);
3422
- this.searchService = inject(SearchService);
3423
- this.principalService = inject(PrincipalService);
3424
- this.cdr = inject(ChangeDetectorRef);
3425
- this.notificationsService = inject(NotificationsService);
3426
- this.transloco = inject(TranslocoService);
3427
- this.assistantUtils = inject(AssistantUtils);
3428
- this.destroyRef = inject(DestroyRef);
3429
- /** Define the query to use to fetch answers */
3430
- this.query = this.searchService.query;
3431
- /** Map of listeners overriding default registered ones*/
3432
- this.messageHandlers = new Map();
3433
- /** When the assistant answer a user question, automatically scroll down to the bottom of the discussion */
3434
- this.automaticScrollToLastResponse = false;
3435
- /** When the assistant answer a user question, automatically focus to the chat input */
3436
- this.focusAfterResponse = false;
3437
- /** Icon to use for the assistant messages */
3438
- this.assistantMessageIcon = 'sq-sinequa';
3439
- // Add custom additionalWorkflowProperties to the user query message
3440
- this.additionalWorkflowProperties = {};
3441
- /** Event emitter triggered once the signalR connection is established */
3442
- this.connection = new EventEmitter();
3443
- /** Event emitter triggered each time the assistant updates the current chat */
3444
- /** Event emitter triggered when the chat is loading new content */
3445
- this.loading$ = new EventEmitter(false);
3446
- /** Emits the assistant configuration used when instantiating the component */
3447
- this._config = new EventEmitter();
3448
- this.data = new EventEmitter();
3449
- /** Event emitter triggered when the user clicks to open the original document representing the context attachment*/
3450
- this.openDocument = new EventEmitter();
3451
- /** Event emitter triggered when the user clicks to open the preview of a document representing the context attachment */
3452
- this.openPreview = new EventEmitter();
3453
- /** Event emitter triggered when the user clicks on a suggested action */
3454
- this.suggestAction = new EventEmitter();
3455
- this.messages$ = new BehaviorSubject(undefined);
3456
- this.isAdminOrDeletedAdmin = false;
3457
- this.question = '';
3458
- this.changes$ = new BehaviorSubject(undefined);
3459
- this.firstChangesHandled = false;
3460
- this.isAtBottom = true;
3461
- this.initializationError = false;
3462
- this.enabledUserInput = false;
3463
- this.isConnected = true; // By default, the chat is considered connected
3464
- // Flag to track whether the 'reconnected' listener is already registered
3465
- this._isReconnectedListenerRegistered = false;
3466
- this.defaultIssueTypes = [
3467
- 'chat.userInterfaceBug',
3468
- 'chat.incorrectResponse',
3469
- 'chat.incompleteResponse',
3470
- 'chat.technicalIssue',
3471
- 'chat.privacyDataSecurityIssue',
3472
- 'chat.otherIssue'
3473
- ];
3474
- this.issueType = '';
3475
- this.reportType = 'dislike';
3476
- this.showReport = false;
3477
- this.showDebugMessages = false;
3478
- this._reloadSubscription = undefined;
3479
3583
  this.destroyRef.onDestroy(async () => {
3480
3584
  console.log(`Destroying ChatComponent: ${this.instanceId} \n along with ChatService: ${this.chatService.chatInstanceId} \n and stopping connection: ${this.chatService.connection?.connectionId}`);
3481
3585
  if (this.chatService.connection && this.chatService.connection.state !== HubConnectionState.Disconnected && this.chatService.connection.state !== HubConnectionState.Disconnecting) {
@@ -3525,6 +3629,11 @@ class ChatComponent {
3525
3629
  }
3526
3630
  ngOnChanges(changes) {
3527
3631
  this.changes$.next(changes);
3632
+ if (changes.collapsed) {
3633
+ setTimeout(() => {
3634
+ this._addScrollListener();
3635
+ });
3636
+ }
3528
3637
  if (this.config) {
3529
3638
  this._handleChanges();
3530
3639
  }
@@ -3673,6 +3782,9 @@ class ChatComponent {
3673
3782
  */
3674
3783
  _addScrollListener() {
3675
3784
  const messageList = document.getElementById(`messageList-${this.instanceId}`);
3785
+ if (!messageList) {
3786
+ return;
3787
+ }
3676
3788
  merge(this.loading$, this.messages$, this.chatService.streaming$, fromEvent(messageList, 'scroll'))
3677
3789
  .pipe(takeUntilDestroyed(this.destroyRef))
3678
3790
  .subscribe(() => {
@@ -4426,17 +4538,17 @@ class ChatComponent {
4426
4538
  }
4427
4539
  return false;
4428
4540
  }
4429
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4430
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ChatComponent, isStandalone: true, selector: "sq-chat-v3", inputs: { instanceId: "instanceId", query: "query", queryChangeShouldTriggerReload: "queryChangeShouldTriggerReload", messageHandlers: "messageHandlers", automaticScrollToLastResponse: "automaticScrollToLastResponse", focusAfterResponse: "focusAfterResponse", chat: "chat", assistantMessageIcon: "assistantMessageIcon", userMessageIcon: "userMessageIcon", connectionErrorMessageIcon: "connectionErrorMessageIcon", searchWarningMessageIcon: "searchWarningMessageIcon", additionalWorkflowProperties: "additionalWorkflowProperties", appConfig: "appConfig" }, outputs: { connection: "connection", loading$: "loading", _config: "config", data: "data", openDocument: "openDocument", openPreview: "openPreview", suggestAction: "suggestAction" }, providers: [
4541
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4542
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ChatComponent, isStandalone: true, selector: "sq-chat-v3", inputs: { instanceId: "instanceId", query: "query", queryChangeShouldTriggerReload: "queryChangeShouldTriggerReload", messageHandlers: "messageHandlers", automaticScrollToLastResponse: "automaticScrollToLastResponse", focusAfterResponse: "focusAfterResponse", chat: "chat", assistantMessageIcon: "assistantMessageIcon", userMessageIcon: "userMessageIcon", connectionErrorMessageIcon: "connectionErrorMessageIcon", searchWarningMessageIcon: "searchWarningMessageIcon", additionalWorkflowProperties: "additionalWorkflowProperties", appConfig: "appConfig", collapsed: "collapsed" }, outputs: { connection: "connection", loading$: "loading", _config: "config", data: "data", openDocument: "openDocument", openPreview: "openPreview", suggestAction: "suggestAction" }, providers: [
4431
4543
  ChatService,
4432
4544
  AssistantConfigurationService,
4433
4545
  AssistantTokensTrackingService,
4434
4546
  SavedChatsService,
4435
4547
  DebugMessageService,
4436
4548
  provideTranslocoScope('chat')
4437
- ], queries: [{ propertyName: "loadingTpl", first: true, predicate: ["loadingTpl"], descendants: true }, { propertyName: "reportTpl", first: true, predicate: ["reportTpl"], descendants: true }, { propertyName: "tokenConsumptionTpl", first: true, predicate: ["tokenConsumptionTpl"], descendants: true }, { propertyName: "debugMessagesTpl", first: true, predicate: ["debugMessagesTpl"], descendants: true }], viewQueries: [{ propertyName: "questionInput", first: true, predicate: ["questionInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!initializationError\">\n <div *ngIf=\"messages$ | async as messages; else loadingTpl || loadingTplDefault\" class=\"h-100 d-flex flex-column\">\n <!-- Token consumption -->\n <div class=\"ms-1\" *ngIf=\"config?.globalSettings?.displayUserQuotaConsumption || config?.globalSettings?.displayChatTokensConsumption\">\n <ng-container *ngTemplateOutlet=\"tokenConsumptionTpl || defaultTokenConsumptionTpl; context: { $implicit: instanceId }\"></ng-container>\n </div>\n\n <!-- Chat Messages -->\n <ul class=\"d-flex flex-column list-unstyled gap-3 overflow-auto flex-grow-1 pe-2 pb-2\" #messageList [id]=\"'messageList-' + instanceId\">\n <ng-container *ngFor=\"let message of messages; let index = index; let last = last\">\n <!-- Regular messages -->\n <li class=\"list-group-item\"\n *ngIf=\"message.additionalProperties.display && !isEmptyAssistantMessage(message)\"\n [style.--bs-list-group-item-padding-y.rem]=\"'0.6'\"\n [class.opacity-50]=\"indexMessageToEdit && (indexMessageToEdit < (index + 1))\">\n <sq-chat-message\n [id]=\"message.additionalProperties.messageId\"\n [class.sq-user-message]=\"message.role === 'user'\"\n [class.last-message]=\"last\"\n [message]=\"message\"\n [conversation]=\"messages\"\n [suggestedActions]=\"last ? message.additionalProperties.$suggestedAction : undefined\"\n [assistantMessageIcon]=\"assistantMessageIcon\"\n [userMessageIcon]=\"userMessageIcon\"\n [connectionErrorMessageIcon]=\"connectionErrorMessageIcon\"\n [searchWarningMessageIcon]=\"searchWarningMessageIcon\"\n [streaming]=\"(chatService.streaming$ | async) && (last || isAssistantLastMessages(messages, index))\"\n [canEdit]=\"(chatService.streaming$ | async) === false && indexMessageToEdit === undefined && message.role === 'user'\"\n [canCopy]=\"((chatService.streaming$ | async) === false || !last) && indexMessageToEdit === undefined && message.role !== 'connection-error' && message.role !== 'search-warning'\"\n [canLike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDislike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDebug]=\"(((chatService.streaming$ | async) === false && last) || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && (getDebugMessages(message, index).length > 0) && ((isAdminOrDeletedAdmin || (chatService.userOverride$ | async)) && config?.defaultValues.debug)\"\n [canRegenerate]=\"(chatService.streaming$ | async) === false && (last || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && indexMessageToEdit === undefined\"\n [collapseReferences]=\"!!config?.globalSettings.collapseReferences\"\n (edit)=\"editMessage(message, index)\"\n (copy)=\"copyMessage(message, index)\"\n (regenerate)=\"regenerateMessage(message, index)\"\n (openDocument)=\"openOriginalAttachment($event, message, index)\"\n (openPreview)=\"openAttachmentPreview($event, message, index)\"\n (suggestAction)=\"suggestActionClick($event, index)\"\n (like)=\"onLike(message, index)\"\n (dislike)=\"onDislike(message, index)\"\n (debug)=\"showDebug(message, index)\">\n </sq-chat-message>\n </li>\n </ng-container>\n <!-- Loading spinner -->\n <li *ngIf=\"(loading$ | async) === true\">\n <ng-container *ngTemplateOutlet=\"loadingTpl || loadingTplDefault\"></ng-container>\n </li>\n </ul>\n\n <!-- Reporting a feedback form -->\n <div class=\"issue-report p-3 rounded-lg\" *ngIf=\"showReport\">\n <ng-container *ngTemplateOutlet=\"reportTpl || reportTplDefault; context: { $implicit: messageToReport, rank: reportRank, type: reportType }\"></ng-container>\n </div>\n\n <!-- User text input -->\n @if (!showReport) {\n <div class=\"user-input mt-auto\">\n <div class=\"py-2\">\n <div [hidden]=\"!isConnected\">\n <ng-container *ngIf=\"enabledUserInput\" [ngTemplateOutlet]=\"inputTpl\"></ng-container>\n </div>\n <!-- Retry button -->\n <!-- hidden attribute is in conflict with a css rule display: flex -->\n @if(!isConnected){\n <button class=\"btn mb-4 ast-error ast-btn sq-retry\" (click)=\"retryFetch()\">\n <span>{{ 'chat.tryAgain' | transloco }}</span>\n <span *ngIf=\"retrialAttempts\" class=\"ms-2 attempts\">{{ retrialAttempts }}</span>\n </button>\n }\n <div class=\"text-end small text-muted px-3\" *ngIf=\"!!config?.globalSettings?.disclaimer\">\n {{ config?.globalSettings?.disclaimer | transloco }}\n </div>\n </div>\n </div>\n }\n\n <!-- Floating scroll button -->\n <div *ngIf=\"!isAtBottom && !showReport\" class=\"sq-floating-scroll\" [ngClass]=\"enabledUserInput ? 'sq-floating-scroll--when-user-input' : 'sq-floating-scroll--without-user-input'\">\n <button class=\"btn shadow\" (click)=\"scrollDown()\" aria-label=\"Scroll down\">\n <i class=\"fas fa-angle-double-down\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<!-- NG TEMPLATES-->\n\n<ng-template #loadingTplDefault>\n <div class=\"spinner-grow text-primary d-block mx-auto my-5\" role=\"status\">\n <span class=\"visually-hidden\">{{ 'chat.loading' | transloco }}</span>\n </div>\n</ng-template>\n\n<ng-template #inputTpl>\n <div class=\"px-3 py-1\">\n <div class=\"ast-input-container\">\n <button disabled class=\"btn btn-light\" aria-label=\"search\">\n <i class=\"fas fa-search\"></i>\n </button>\n <textarea #questionInput rows=\"1\"\n type=\"text\" class=\"form-control\"\n [placeholder]=\"'chat.askSomething' | transloco\" autofocus\n [(ngModel)]=\"question\"\n (keyup)=\"onKeyUp($event)\"\n (keydown)=\"calculateHeight($event)\"\n [disabled]=\"(loading$ | async) || (chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\">\n </textarea>\n <div id=\"chat-actions\" class=\"d-flex gap-2\">\n <button\n *ngIf=\"(chatService.streaming$ | async) === false && (loading$ | async) !== true && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Send message\"\n [sqTooltip]=\"'chat.sendMessage' | transloco\"\n (click)=\"submitQuestion()\">\n <i class=\"fas fa-paper-plane\"></i>\n </button>\n <button\n *ngIf=\"indexMessageToEdit\"\n aria-label=\"Cancel edition\"\n type=\"button\"\n class=\"btn btn-light\"\n [sqTooltip]=\"'chat.cancelEdition' | transloco\"\n (click)=\"indexMessageToEdit = undefined; question = ''\">\n <i class=\"fas fa-undo-alt\"></i>\n </button>\n <span *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\" class=\"processing\">\n {{ 'chat.generating' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <span *ngIf=\"(chatService.stoppingGeneration$ | async)\" class=\"processing\">\n {{ 'chat.stopping' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <button\n *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Stop generating\"\n [sqTooltip]=\"'chat.stopGeneration' | transloco\"\n (click)=\"stopGeneration()\">\n <i class=\"fas fa-stop\"></i>\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #reportTplDefault let-message let-rank=\"rank\" let-type=\"type\">\n <div class=\"px-3\">\n <ng-container *ngIf=\"type === 'dislike'\">\n <h5>{{ 'chat.issueType' | transloco }}</h5>\n <select class=\"form-select mb-4\" [(ngModel)]=\"issueType\">\n <option [value]=\"''\">{{ 'chat.chooseIssueType' | transloco }}</option>\n <option *ngFor=\"let type of (issueTypes ?? defaultIssueTypes)\" [value]=\"type\">{{ type | transloco }}</option>\n </select>\n <h5>{{ 'chat.askUnlikeReasons' | transloco }}</h5>\n </ng-container>\n <ng-container *ngIf=\"type === 'like'\">\n <h5>{{ 'chat.askLikeReasons' | transloco }}</h5>\n </ng-container>\n <textarea class=\"form-control border border-neutral-200\" [(ngModel)]=\"reportComment\" [placeholder]=\"'chat.writeComment' | transloco\"></textarea>\n <div class=\"d-flex flex-row-reverse gap-1 mt-2\">\n <button class=\"btn btn-primary\" [disabled]=\"type === 'dislike' && !issueType\" (click)=\"sendReport()\">{{ 'chat.send' | transloco }}</button>\n <button class=\"btn btn-light\" (click)=\"ignoreReport()\">{{ 'chat.doNotSend' | transloco }}</button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultTokenConsumptionTpl let-instanceId>\n <sq-token-progress-bar\n [instanceId]=\"instanceId\">\n </sq-token-progress-bar>\n</ng-template>\n\n<div class=\"debug-messages\" [class.displayed]=\"showDebugMessages\">\n <button *ngIf=\"showDebugMessages\" class=\"btn btn-light shadow back-btn\" (click)=\"showDebugMessages=false\" aria-label=\"Hide debug messages\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n <ng-container *ngTemplateOutlet=\"debugMessagesTpl || defaultDebugMessagesTpl; context: { $implicit: debugMessages }\">\n </ng-container>\n</div>\n\n<ng-template #defaultDebugMessagesTpl let-debugMessages>\n <sq-debug-message [data]=\"debugMessages\"></sq-debug-message>\n</ng-template>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}:host{font-size:.875rem}:host>div>.user-input>div:not(.progress),:host>div>.issue-report>div,:host>div>ul>li{width:var(--ast-chat-container-width, 100%);max-width:100%;margin-left:auto;margin-right:auto}:host>div>ul{padding-top:var(--ast-chat-padding-top, 0);padding-bottom:var(--ast-chat-padding-bottom, 0)}li.attachment>p{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:3}li.attachment.expanded>p{display:block}.progress{--bs-progress-height: 3px}.progress.disabled{--bs-progress-height: 20px;--bs-progress-bar-bg: var(--bs-danger)}.user-input{z-index:1}.user-input ul.list-group{max-height:30vh}.form-control:disabled{background-color:#ededed}a.disabled{cursor:default;opacity:.5}.no-max-height{max-height:initial!important}.sq-floating-scroll{position:absolute;right:50%;text-align:center}.sq-floating-scroll--when-user-input{bottom:75px}.sq-floating-scroll--without-user-input{bottom:15px}.sq-floating-scroll .btn{background-color:#fff}.sq-floating-scroll .btn:hover{background-color:#fff;opacity:.9}.ast-input-container{display:flex;align-items:center;background-color:var(--ast-input-bg, #F8F8F8);border-radius:var(--ast-size-3, .75rem)}.ast-input-container>i{padding-left:var(--ast-size-3, .75rem);color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container textarea{padding-left:var(--ast-size-3, .75rem);padding-right:var(--ast-size-3, .75rem);resize:none}.ast-input-container textarea,.ast-input-container button,.ast-input-container button:hover{background-color:transparent;border:0}.ast-input-container button:hover{color:var(--ast-primary-color, #005DA7)}.ast-input-container button:not(:hover){color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container .processing{display:flex;align-items:center;color:var(--ast-secondary-color, #FF732E);gap:.5rem}sq-chat-message.sq-user-message{float:var(--ast-user-message-float, none)}sq-token-progress-bar{z-index:10;position:absolute;top:0;right:0}.debug-messages{position:fixed;z-index:999999;right:-60%;top:0;width:60%;height:100%;transition:all .5s ease;background-color:var(--bs-body-bg);overflow:auto}.debug-messages .back-btn{position:fixed;right:0%;transition:all .5s ease}.debug-messages.displayed{right:0}.debug-messages.displayed .back-btn{right:60%}.debug-messages sq-debug-message:first-of-type{display:block;width:100%}.btn.sq-retry{display:flex;margin:auto;background:var(--ast-error-bg, rgba(249, 58, 55, .2));font-weight:var(--font-weight-bold, 500)}.btn.sq-retry .attempts{display:flex;border-radius:100%;background:#fff;height:20px;width:20px;place-content:center;align-items:center}.issue-report{background-color:var(--ast-report-bg, white)}.text-end{text-align:right}.small{font-size:.875em}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color)}.d-flex{display:flex}.flex-row-reverse{flex-direction:row-reverse}.flex-grow-1{flex-grow:1}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))}.d-block{display:block}.btn{--bs-border-radius: .25rem;--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control:disabled{background-color:var(--bs-body-bg)}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width, 1px) solid var(--bs-border-color, oklch(92.2% 0 0));border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ChatMessageComponent, selector: "sq-chat-message", inputs: ["id", "message", "conversation", "suggestedActions", "assistantMessageIcon", "userMessageIcon", "connectionErrorMessageIcon", "searchWarningMessageIcon", "streaming", "canEdit", "canRegenerate", "canCopy", "canDebug", "canLike", "canDislike", "collapseReferences"], outputs: ["openDocument", "openPreview", "suggestAction", "edit", "copy", "regenerate", "like", "dislike", "debug"] }, { kind: "component", type: TokenProgressBarComponent, selector: "sq-token-progress-bar", inputs: ["instanceId"] }, { kind: "component", type: DebugMessageComponent, selector: "sq-debug-message", inputs: ["data"] }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4549
+ ], queries: [{ propertyName: "loadingTpl", first: true, predicate: ["loadingTpl"], descendants: true }, { propertyName: "reportTpl", first: true, predicate: ["reportTpl"], descendants: true }, { propertyName: "tokenConsumptionTpl", first: true, predicate: ["tokenConsumptionTpl"], descendants: true }, { propertyName: "debugMessagesTpl", first: true, predicate: ["debugMessagesTpl"], descendants: true }], viewQueries: [{ propertyName: "questionInput", first: true, predicate: ["questionInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!initializationError\">\n <div *ngIf=\"messages$ | async as messages; else loadingTpl || loadingTplDefault\" class=\"h-100 d-flex flex-column\">\n <!-- Token consumption -->\n <div class=\"ms-1\" *ngIf=\"config?.globalSettings?.displayUserQuotaConsumption || config?.globalSettings?.displayChatTokensConsumption\">\n <ng-container *ngTemplateOutlet=\"tokenConsumptionTpl || defaultTokenConsumptionTpl; context: { $implicit: instanceId }\"></ng-container>\n </div>\n\n <!-- Chat Messages -->\n <ul class=\"d-flex flex-column list-unstyled gap-3 overflow-auto flex-grow-1 pe-2 pb-2\" #messageList [id]=\"'messageList-' + instanceId\">\n <ng-container *ngFor=\"let message of messages; let index = index; let last = last\">\n <!-- Regular messages -->\n <li class=\"list-group-item\"\n *ngIf=\"message.additionalProperties.display && !isEmptyAssistantMessage(message)\"\n [style.--bs-list-group-item-padding-y.rem]=\"'0.6'\"\n [class.opacity-50]=\"indexMessageToEdit && (indexMessageToEdit < (index + 1))\">\n <sq-chat-message\n [id]=\"message.additionalProperties.messageId\"\n [class.sq-user-message]=\"message.role === 'user'\"\n [class.last-message]=\"last\"\n [message]=\"message\"\n [conversation]=\"messages\"\n [suggestedActions]=\"last ? message.additionalProperties.$suggestedAction : undefined\"\n [assistantMessageIcon]=\"assistantMessageIcon\"\n [userMessageIcon]=\"userMessageIcon\"\n [connectionErrorMessageIcon]=\"connectionErrorMessageIcon\"\n [searchWarningMessageIcon]=\"searchWarningMessageIcon\"\n [streaming]=\"(chatService.streaming$ | async) && (last || isAssistantLastMessages(messages, index))\"\n [canEdit]=\"(chatService.streaming$ | async) === false && indexMessageToEdit === undefined && message.role === 'user'\"\n [canCopy]=\"((chatService.streaming$ | async) === false || !last) && indexMessageToEdit === undefined && message.role !== 'connection-error' && message.role !== 'search-warning'\"\n [canLike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDislike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDebug]=\"(((chatService.streaming$ | async) === false && last) || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && (getDebugMessages(message, index).length > 0) && ((isAdminOrDeletedAdmin || (chatService.userOverride$ | async)) && config?.defaultValues.debug)\"\n [canRegenerate]=\"(chatService.streaming$ | async) === false && (last || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && indexMessageToEdit === undefined\"\n [collapseReferences]=\"!!config?.globalSettings.collapseReferences\"\n (edit)=\"editMessage(message, index)\"\n (copy)=\"copyMessage(message, index)\"\n (regenerate)=\"regenerateMessage(message, index)\"\n (openDocument)=\"openOriginalAttachment($event, message, index)\"\n (openPreview)=\"openAttachmentPreview($event, message, index)\"\n (suggestAction)=\"suggestActionClick($event, index)\"\n (like)=\"onLike(message, index)\"\n (dislike)=\"onDislike(message, index)\"\n (debug)=\"showDebug(message, index)\">\n </sq-chat-message>\n </li>\n </ng-container>\n <!-- Loading spinner -->\n <li *ngIf=\"(loading$ | async) === true\">\n <ng-container *ngTemplateOutlet=\"loadingTpl || loadingTplDefault\"></ng-container>\n </li>\n </ul>\n\n <!-- Reporting a feedback form -->\n <div class=\"issue-report p-3 rounded-lg\" *ngIf=\"showReport\">\n <ng-container *ngTemplateOutlet=\"reportTpl || reportTplDefault; context: { $implicit: messageToReport, rank: reportRank, type: reportType }\"></ng-container>\n </div>\n\n <!-- User text input -->\n @if (!showReport) {\n <div class=\"user-input mt-auto\">\n <div class=\"py-2\">\n <div [hidden]=\"!isConnected\">\n <ng-container *ngIf=\"enabledUserInput\" [ngTemplateOutlet]=\"inputTpl\"></ng-container>\n </div>\n <!-- Retry button -->\n <!-- hidden attribute is in conflict with a css rule display: flex -->\n @if(!isConnected){\n <button class=\"btn mb-4 ast-error ast-btn sq-retry\" (click)=\"retryFetch()\">\n <span>{{ 'chat.tryAgain' | transloco }}</span>\n <span *ngIf=\"retrialAttempts\" class=\"ms-2 attempts\">{{ retrialAttempts }}</span>\n </button>\n }\n <div class=\"text-end small text-muted px-3\" *ngIf=\"!!config?.globalSettings?.disclaimer\">\n {{ config?.globalSettings?.disclaimer | transloco }}\n </div>\n </div>\n </div>\n }\n\n <!-- Floating scroll button -->\n <div *ngIf=\"!isAtBottom && !showReport\" class=\"sq-floating-scroll\" [ngClass]=\"enabledUserInput ? 'sq-floating-scroll--when-user-input' : 'sq-floating-scroll--without-user-input'\">\n <button class=\"btn shadow\" (click)=\"scrollDown()\" aria-label=\"Scroll down\">\n <i class=\"fas fa-angle-double-down\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<!-- NG TEMPLATES-->\n\n<ng-template #loadingTplDefault>\n <div class=\"spinner-grow text-primary d-block mx-auto my-5\" role=\"status\">\n <span class=\"visually-hidden\">{{ 'chat.loading' | transloco }}</span>\n </div>\n</ng-template>\n\n<ng-template #inputTpl>\n <div class=\"px-3 py-1\">\n <div class=\"ast-input-container\">\n <button disabled class=\"btn btn-light\" aria-label=\"search\">\n <i class=\"fas fa-search\"></i>\n </button>\n <textarea #questionInput rows=\"1\"\n type=\"text\" class=\"form-control\"\n [placeholder]=\"'chat.askSomething' | transloco\" autofocus\n [(ngModel)]=\"question\"\n (keyup)=\"onKeyUp($event)\"\n (keydown)=\"calculateHeight($event)\"\n [disabled]=\"(loading$ | async) || (chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\">\n </textarea>\n <div id=\"chat-actions\" class=\"d-flex gap-2\">\n <button\n *ngIf=\"(chatService.streaming$ | async) === false && (loading$ | async) !== true && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Send message\"\n [sqTooltip]=\"'chat.sendMessage' | transloco\"\n (click)=\"submitQuestion()\">\n <i class=\"fas fa-paper-plane\"></i>\n </button>\n <button\n *ngIf=\"indexMessageToEdit\"\n aria-label=\"Cancel edition\"\n type=\"button\"\n class=\"btn btn-light\"\n [sqTooltip]=\"'chat.cancelEdition' | transloco\"\n (click)=\"indexMessageToEdit = undefined; question = ''\">\n <i class=\"fas fa-undo-alt\"></i>\n </button>\n <span *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\" class=\"processing\">\n {{ 'chat.generating' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <span *ngIf=\"(chatService.stoppingGeneration$ | async)\" class=\"processing\">\n {{ 'chat.stopping' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <button\n *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Stop generating\"\n [sqTooltip]=\"'chat.stopGeneration' | transloco\"\n (click)=\"stopGeneration()\">\n <i class=\"fas fa-stop\"></i>\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #reportTplDefault let-message let-rank=\"rank\" let-type=\"type\">\n <div class=\"px-3\">\n <ng-container *ngIf=\"type === 'dislike'\">\n <h5>{{ 'chat.issueType' | transloco }}</h5>\n <select class=\"form-select mb-4\" [(ngModel)]=\"issueType\">\n <option [value]=\"''\">{{ 'chat.chooseIssueType' | transloco }}</option>\n <option *ngFor=\"let type of (issueTypes ?? defaultIssueTypes)\" [value]=\"type\">{{ type | transloco }}</option>\n </select>\n <h5>{{ 'chat.askUnlikeReasons' | transloco }}</h5>\n </ng-container>\n <ng-container *ngIf=\"type === 'like'\">\n <h5>{{ 'chat.askLikeReasons' | transloco }}</h5>\n </ng-container>\n <textarea class=\"form-control border border-neutral-200\" [(ngModel)]=\"reportComment\" [placeholder]=\"'chat.writeComment' | transloco\"></textarea>\n <div class=\"d-flex flex-row-reverse gap-1 mt-2\">\n <button class=\"btn btn-primary\" [disabled]=\"type === 'dislike' && !issueType\" (click)=\"sendReport()\">{{ 'chat.send' | transloco }}</button>\n <button class=\"btn btn-light\" (click)=\"ignoreReport()\">{{ 'chat.doNotSend' | transloco }}</button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultTokenConsumptionTpl let-instanceId>\n <sq-token-progress-bar\n [instanceId]=\"instanceId\">\n </sq-token-progress-bar>\n</ng-template>\n\n<div class=\"debug-messages\" [class.displayed]=\"showDebugMessages\">\n <button *ngIf=\"showDebugMessages\" class=\"btn btn-light shadow back-btn\" (click)=\"showDebugMessages=false\" aria-label=\"Hide debug messages\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n <ng-container *ngTemplateOutlet=\"debugMessagesTpl || defaultDebugMessagesTpl; context: { $implicit: debugMessages }\">\n </ng-container>\n</div>\n\n<ng-template #defaultDebugMessagesTpl let-debugMessages>\n <sq-debug-message [data]=\"debugMessages\"></sq-debug-message>\n</ng-template>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}:host{font-size:.875rem}:host>div>.user-input>div:not(.progress),:host>div>.issue-report>div,:host>div>ul>li{width:var(--ast-chat-container-width, 100%);max-width:100%;margin-left:auto;margin-right:auto}:host>div>ul{padding-top:var(--ast-chat-padding-top, 0);padding-bottom:var(--ast-chat-padding-bottom, 0)}li.attachment>p{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:3}li.attachment.expanded>p{display:block}.progress{--bs-progress-height: 3px}.progress.disabled{--bs-progress-height: 20px;--bs-progress-bar-bg: var(--bs-danger)}.user-input{z-index:1}.user-input ul.list-group{max-height:30vh}.form-control:disabled{background-color:#ededed}a.disabled{cursor:default;opacity:.5}.no-max-height{max-height:initial!important}.sq-floating-scroll{position:absolute;right:50%;text-align:center}.sq-floating-scroll--when-user-input{bottom:75px}.sq-floating-scroll--without-user-input{bottom:15px}.sq-floating-scroll .btn{background-color:#fff}.sq-floating-scroll .btn:hover{background-color:#fff;opacity:.9}.ast-input-container{display:flex;align-items:center;background-color:var(--ast-input-bg, #F8F8F8);border-radius:var(--ast-size-3, .75rem)}.ast-input-container>i{padding-left:var(--ast-size-3, .75rem);color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container textarea{padding-left:var(--ast-size-3, .75rem);padding-right:var(--ast-size-3, .75rem);resize:none}.ast-input-container textarea,.ast-input-container button,.ast-input-container button:hover{background-color:transparent;border:0}.ast-input-container button:hover{color:var(--ast-primary-color, #005DA7)}.ast-input-container button:not(:hover){color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container .processing{display:flex;align-items:center;color:var(--ast-secondary-color, #FF732E);gap:.5rem}sq-chat-message.sq-user-message{float:var(--ast-user-message-float, none)}sq-token-progress-bar{z-index:10;position:absolute;top:0;right:0}.debug-messages{position:fixed;z-index:999999;right:-60%;top:0;width:60%;height:100%;transition:all .5s ease;background-color:var(--bs-body-bg);overflow:auto}.debug-messages .back-btn{position:fixed;right:0%;transition:all .5s ease}.debug-messages.displayed{right:0}.debug-messages.displayed .back-btn{right:60%}.debug-messages sq-debug-message:first-of-type{display:block;width:100%}.btn.sq-retry{display:flex;margin:auto;background:var(--ast-error-bg, rgba(249, 58, 55, .2));font-weight:var(--font-weight-bold, 500)}.btn.sq-retry .attempts{display:flex;border-radius:100%;background:#fff;height:20px;width:20px;place-content:center;align-items:center}.issue-report{background-color:var(--ast-report-bg, white)}.text-end{text-align:right}.small{font-size:.875em}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color)}.d-flex{display:flex}.flex-row-reverse{flex-direction:row-reverse}.flex-grow-1{flex-grow:1}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))}.d-block{display:block}.btn{--bs-border-radius: .25rem;--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control:disabled{background-color:var(--bs-body-bg)}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width, 1px) solid var(--bs-border-color, oklch(92.2% 0 0deg));border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ChatMessageComponent, selector: "sq-chat-message", inputs: ["id", "message", "conversation", "suggestedActions", "assistantMessageIcon", "userMessageIcon", "connectionErrorMessageIcon", "searchWarningMessageIcon", "streaming", "canEdit", "canRegenerate", "canCopy", "canDebug", "canLike", "canDislike", "collapseReferences"], outputs: ["openDocument", "openPreview", "suggestAction", "edit", "copy", "regenerate", "like", "dislike", "debug"] }, { kind: "component", type: TokenProgressBarComponent, selector: "sq-token-progress-bar", inputs: ["instanceId"] }, { kind: "component", type: DebugMessageComponent, selector: "sq-debug-message", inputs: ["data"] }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4438
4550
  }
4439
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatComponent, decorators: [{
4551
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatComponent, decorators: [{
4440
4552
  type: Component,
4441
4553
  args: [{ selector: 'sq-chat-v3', providers: [
4442
4554
  ChatService,
@@ -4445,7 +4557,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
4445
4557
  SavedChatsService,
4446
4558
  DebugMessageService,
4447
4559
  provideTranslocoScope('chat')
4448
- ], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormsModule, ChatMessageComponent, TokenProgressBarComponent, DebugMessageComponent, TooltipDirective, TranslocoPipe], template: "<ng-container *ngIf=\"!initializationError\">\n <div *ngIf=\"messages$ | async as messages; else loadingTpl || loadingTplDefault\" class=\"h-100 d-flex flex-column\">\n <!-- Token consumption -->\n <div class=\"ms-1\" *ngIf=\"config?.globalSettings?.displayUserQuotaConsumption || config?.globalSettings?.displayChatTokensConsumption\">\n <ng-container *ngTemplateOutlet=\"tokenConsumptionTpl || defaultTokenConsumptionTpl; context: { $implicit: instanceId }\"></ng-container>\n </div>\n\n <!-- Chat Messages -->\n <ul class=\"d-flex flex-column list-unstyled gap-3 overflow-auto flex-grow-1 pe-2 pb-2\" #messageList [id]=\"'messageList-' + instanceId\">\n <ng-container *ngFor=\"let message of messages; let index = index; let last = last\">\n <!-- Regular messages -->\n <li class=\"list-group-item\"\n *ngIf=\"message.additionalProperties.display && !isEmptyAssistantMessage(message)\"\n [style.--bs-list-group-item-padding-y.rem]=\"'0.6'\"\n [class.opacity-50]=\"indexMessageToEdit && (indexMessageToEdit < (index + 1))\">\n <sq-chat-message\n [id]=\"message.additionalProperties.messageId\"\n [class.sq-user-message]=\"message.role === 'user'\"\n [class.last-message]=\"last\"\n [message]=\"message\"\n [conversation]=\"messages\"\n [suggestedActions]=\"last ? message.additionalProperties.$suggestedAction : undefined\"\n [assistantMessageIcon]=\"assistantMessageIcon\"\n [userMessageIcon]=\"userMessageIcon\"\n [connectionErrorMessageIcon]=\"connectionErrorMessageIcon\"\n [searchWarningMessageIcon]=\"searchWarningMessageIcon\"\n [streaming]=\"(chatService.streaming$ | async) && (last || isAssistantLastMessages(messages, index))\"\n [canEdit]=\"(chatService.streaming$ | async) === false && indexMessageToEdit === undefined && message.role === 'user'\"\n [canCopy]=\"((chatService.streaming$ | async) === false || !last) && indexMessageToEdit === undefined && message.role !== 'connection-error' && message.role !== 'search-warning'\"\n [canLike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDislike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDebug]=\"(((chatService.streaming$ | async) === false && last) || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && (getDebugMessages(message, index).length > 0) && ((isAdminOrDeletedAdmin || (chatService.userOverride$ | async)) && config?.defaultValues.debug)\"\n [canRegenerate]=\"(chatService.streaming$ | async) === false && (last || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && indexMessageToEdit === undefined\"\n [collapseReferences]=\"!!config?.globalSettings.collapseReferences\"\n (edit)=\"editMessage(message, index)\"\n (copy)=\"copyMessage(message, index)\"\n (regenerate)=\"regenerateMessage(message, index)\"\n (openDocument)=\"openOriginalAttachment($event, message, index)\"\n (openPreview)=\"openAttachmentPreview($event, message, index)\"\n (suggestAction)=\"suggestActionClick($event, index)\"\n (like)=\"onLike(message, index)\"\n (dislike)=\"onDislike(message, index)\"\n (debug)=\"showDebug(message, index)\">\n </sq-chat-message>\n </li>\n </ng-container>\n <!-- Loading spinner -->\n <li *ngIf=\"(loading$ | async) === true\">\n <ng-container *ngTemplateOutlet=\"loadingTpl || loadingTplDefault\"></ng-container>\n </li>\n </ul>\n\n <!-- Reporting a feedback form -->\n <div class=\"issue-report p-3 rounded-lg\" *ngIf=\"showReport\">\n <ng-container *ngTemplateOutlet=\"reportTpl || reportTplDefault; context: { $implicit: messageToReport, rank: reportRank, type: reportType }\"></ng-container>\n </div>\n\n <!-- User text input -->\n @if (!showReport) {\n <div class=\"user-input mt-auto\">\n <div class=\"py-2\">\n <div [hidden]=\"!isConnected\">\n <ng-container *ngIf=\"enabledUserInput\" [ngTemplateOutlet]=\"inputTpl\"></ng-container>\n </div>\n <!-- Retry button -->\n <!-- hidden attribute is in conflict with a css rule display: flex -->\n @if(!isConnected){\n <button class=\"btn mb-4 ast-error ast-btn sq-retry\" (click)=\"retryFetch()\">\n <span>{{ 'chat.tryAgain' | transloco }}</span>\n <span *ngIf=\"retrialAttempts\" class=\"ms-2 attempts\">{{ retrialAttempts }}</span>\n </button>\n }\n <div class=\"text-end small text-muted px-3\" *ngIf=\"!!config?.globalSettings?.disclaimer\">\n {{ config?.globalSettings?.disclaimer | transloco }}\n </div>\n </div>\n </div>\n }\n\n <!-- Floating scroll button -->\n <div *ngIf=\"!isAtBottom && !showReport\" class=\"sq-floating-scroll\" [ngClass]=\"enabledUserInput ? 'sq-floating-scroll--when-user-input' : 'sq-floating-scroll--without-user-input'\">\n <button class=\"btn shadow\" (click)=\"scrollDown()\" aria-label=\"Scroll down\">\n <i class=\"fas fa-angle-double-down\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<!-- NG TEMPLATES-->\n\n<ng-template #loadingTplDefault>\n <div class=\"spinner-grow text-primary d-block mx-auto my-5\" role=\"status\">\n <span class=\"visually-hidden\">{{ 'chat.loading' | transloco }}</span>\n </div>\n</ng-template>\n\n<ng-template #inputTpl>\n <div class=\"px-3 py-1\">\n <div class=\"ast-input-container\">\n <button disabled class=\"btn btn-light\" aria-label=\"search\">\n <i class=\"fas fa-search\"></i>\n </button>\n <textarea #questionInput rows=\"1\"\n type=\"text\" class=\"form-control\"\n [placeholder]=\"'chat.askSomething' | transloco\" autofocus\n [(ngModel)]=\"question\"\n (keyup)=\"onKeyUp($event)\"\n (keydown)=\"calculateHeight($event)\"\n [disabled]=\"(loading$ | async) || (chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\">\n </textarea>\n <div id=\"chat-actions\" class=\"d-flex gap-2\">\n <button\n *ngIf=\"(chatService.streaming$ | async) === false && (loading$ | async) !== true && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Send message\"\n [sqTooltip]=\"'chat.sendMessage' | transloco\"\n (click)=\"submitQuestion()\">\n <i class=\"fas fa-paper-plane\"></i>\n </button>\n <button\n *ngIf=\"indexMessageToEdit\"\n aria-label=\"Cancel edition\"\n type=\"button\"\n class=\"btn btn-light\"\n [sqTooltip]=\"'chat.cancelEdition' | transloco\"\n (click)=\"indexMessageToEdit = undefined; question = ''\">\n <i class=\"fas fa-undo-alt\"></i>\n </button>\n <span *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\" class=\"processing\">\n {{ 'chat.generating' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <span *ngIf=\"(chatService.stoppingGeneration$ | async)\" class=\"processing\">\n {{ 'chat.stopping' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <button\n *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Stop generating\"\n [sqTooltip]=\"'chat.stopGeneration' | transloco\"\n (click)=\"stopGeneration()\">\n <i class=\"fas fa-stop\"></i>\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #reportTplDefault let-message let-rank=\"rank\" let-type=\"type\">\n <div class=\"px-3\">\n <ng-container *ngIf=\"type === 'dislike'\">\n <h5>{{ 'chat.issueType' | transloco }}</h5>\n <select class=\"form-select mb-4\" [(ngModel)]=\"issueType\">\n <option [value]=\"''\">{{ 'chat.chooseIssueType' | transloco }}</option>\n <option *ngFor=\"let type of (issueTypes ?? defaultIssueTypes)\" [value]=\"type\">{{ type | transloco }}</option>\n </select>\n <h5>{{ 'chat.askUnlikeReasons' | transloco }}</h5>\n </ng-container>\n <ng-container *ngIf=\"type === 'like'\">\n <h5>{{ 'chat.askLikeReasons' | transloco }}</h5>\n </ng-container>\n <textarea class=\"form-control border border-neutral-200\" [(ngModel)]=\"reportComment\" [placeholder]=\"'chat.writeComment' | transloco\"></textarea>\n <div class=\"d-flex flex-row-reverse gap-1 mt-2\">\n <button class=\"btn btn-primary\" [disabled]=\"type === 'dislike' && !issueType\" (click)=\"sendReport()\">{{ 'chat.send' | transloco }}</button>\n <button class=\"btn btn-light\" (click)=\"ignoreReport()\">{{ 'chat.doNotSend' | transloco }}</button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultTokenConsumptionTpl let-instanceId>\n <sq-token-progress-bar\n [instanceId]=\"instanceId\">\n </sq-token-progress-bar>\n</ng-template>\n\n<div class=\"debug-messages\" [class.displayed]=\"showDebugMessages\">\n <button *ngIf=\"showDebugMessages\" class=\"btn btn-light shadow back-btn\" (click)=\"showDebugMessages=false\" aria-label=\"Hide debug messages\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n <ng-container *ngTemplateOutlet=\"debugMessagesTpl || defaultDebugMessagesTpl; context: { $implicit: debugMessages }\">\n </ng-container>\n</div>\n\n<ng-template #defaultDebugMessagesTpl let-debugMessages>\n <sq-debug-message [data]=\"debugMessages\"></sq-debug-message>\n</ng-template>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}:host{font-size:.875rem}:host>div>.user-input>div:not(.progress),:host>div>.issue-report>div,:host>div>ul>li{width:var(--ast-chat-container-width, 100%);max-width:100%;margin-left:auto;margin-right:auto}:host>div>ul{padding-top:var(--ast-chat-padding-top, 0);padding-bottom:var(--ast-chat-padding-bottom, 0)}li.attachment>p{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:3}li.attachment.expanded>p{display:block}.progress{--bs-progress-height: 3px}.progress.disabled{--bs-progress-height: 20px;--bs-progress-bar-bg: var(--bs-danger)}.user-input{z-index:1}.user-input ul.list-group{max-height:30vh}.form-control:disabled{background-color:#ededed}a.disabled{cursor:default;opacity:.5}.no-max-height{max-height:initial!important}.sq-floating-scroll{position:absolute;right:50%;text-align:center}.sq-floating-scroll--when-user-input{bottom:75px}.sq-floating-scroll--without-user-input{bottom:15px}.sq-floating-scroll .btn{background-color:#fff}.sq-floating-scroll .btn:hover{background-color:#fff;opacity:.9}.ast-input-container{display:flex;align-items:center;background-color:var(--ast-input-bg, #F8F8F8);border-radius:var(--ast-size-3, .75rem)}.ast-input-container>i{padding-left:var(--ast-size-3, .75rem);color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container textarea{padding-left:var(--ast-size-3, .75rem);padding-right:var(--ast-size-3, .75rem);resize:none}.ast-input-container textarea,.ast-input-container button,.ast-input-container button:hover{background-color:transparent;border:0}.ast-input-container button:hover{color:var(--ast-primary-color, #005DA7)}.ast-input-container button:not(:hover){color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container .processing{display:flex;align-items:center;color:var(--ast-secondary-color, #FF732E);gap:.5rem}sq-chat-message.sq-user-message{float:var(--ast-user-message-float, none)}sq-token-progress-bar{z-index:10;position:absolute;top:0;right:0}.debug-messages{position:fixed;z-index:999999;right:-60%;top:0;width:60%;height:100%;transition:all .5s ease;background-color:var(--bs-body-bg);overflow:auto}.debug-messages .back-btn{position:fixed;right:0%;transition:all .5s ease}.debug-messages.displayed{right:0}.debug-messages.displayed .back-btn{right:60%}.debug-messages sq-debug-message:first-of-type{display:block;width:100%}.btn.sq-retry{display:flex;margin:auto;background:var(--ast-error-bg, rgba(249, 58, 55, .2));font-weight:var(--font-weight-bold, 500)}.btn.sq-retry .attempts{display:flex;border-radius:100%;background:#fff;height:20px;width:20px;place-content:center;align-items:center}.issue-report{background-color:var(--ast-report-bg, white)}.text-end{text-align:right}.small{font-size:.875em}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color)}.d-flex{display:flex}.flex-row-reverse{flex-direction:row-reverse}.flex-grow-1{flex-grow:1}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))}.d-block{display:block}.btn{--bs-border-radius: .25rem;--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control:disabled{background-color:var(--bs-body-bg)}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width, 1px) solid var(--bs-border-color, oklch(92.2% 0 0));border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"] }]
4560
+ ], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormsModule, ChatMessageComponent, TokenProgressBarComponent, DebugMessageComponent, TooltipDirective, TranslocoPipe], template: "<ng-container *ngIf=\"!initializationError\">\n <div *ngIf=\"messages$ | async as messages; else loadingTpl || loadingTplDefault\" class=\"h-100 d-flex flex-column\">\n <!-- Token consumption -->\n <div class=\"ms-1\" *ngIf=\"config?.globalSettings?.displayUserQuotaConsumption || config?.globalSettings?.displayChatTokensConsumption\">\n <ng-container *ngTemplateOutlet=\"tokenConsumptionTpl || defaultTokenConsumptionTpl; context: { $implicit: instanceId }\"></ng-container>\n </div>\n\n <!-- Chat Messages -->\n <ul class=\"d-flex flex-column list-unstyled gap-3 overflow-auto flex-grow-1 pe-2 pb-2\" #messageList [id]=\"'messageList-' + instanceId\">\n <ng-container *ngFor=\"let message of messages; let index = index; let last = last\">\n <!-- Regular messages -->\n <li class=\"list-group-item\"\n *ngIf=\"message.additionalProperties.display && !isEmptyAssistantMessage(message)\"\n [style.--bs-list-group-item-padding-y.rem]=\"'0.6'\"\n [class.opacity-50]=\"indexMessageToEdit && (indexMessageToEdit < (index + 1))\">\n <sq-chat-message\n [id]=\"message.additionalProperties.messageId\"\n [class.sq-user-message]=\"message.role === 'user'\"\n [class.last-message]=\"last\"\n [message]=\"message\"\n [conversation]=\"messages\"\n [suggestedActions]=\"last ? message.additionalProperties.$suggestedAction : undefined\"\n [assistantMessageIcon]=\"assistantMessageIcon\"\n [userMessageIcon]=\"userMessageIcon\"\n [connectionErrorMessageIcon]=\"connectionErrorMessageIcon\"\n [searchWarningMessageIcon]=\"searchWarningMessageIcon\"\n [streaming]=\"(chatService.streaming$ | async) && (last || isAssistantLastMessages(messages, index))\"\n [canEdit]=\"(chatService.streaming$ | async) === false && indexMessageToEdit === undefined && message.role === 'user'\"\n [canCopy]=\"((chatService.streaming$ | async) === false || !last) && indexMessageToEdit === undefined && message.role !== 'connection-error' && message.role !== 'search-warning'\"\n [canLike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDislike]=\"((chatService.streaming$ | async) === false || !last) && message.role === 'assistant'\"\n [canDebug]=\"(((chatService.streaming$ | async) === false && last) || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && (getDebugMessages(message, index).length > 0) && ((isAdminOrDeletedAdmin || (chatService.userOverride$ | async)) && config?.defaultValues.debug)\"\n [canRegenerate]=\"(chatService.streaming$ | async) === false && (last || (!last && messages[index+1].role !== 'assistant')) && message.role === 'assistant' && indexMessageToEdit === undefined\"\n [collapseReferences]=\"!!config?.globalSettings.collapseReferences\"\n (edit)=\"editMessage(message, index)\"\n (copy)=\"copyMessage(message, index)\"\n (regenerate)=\"regenerateMessage(message, index)\"\n (openDocument)=\"openOriginalAttachment($event, message, index)\"\n (openPreview)=\"openAttachmentPreview($event, message, index)\"\n (suggestAction)=\"suggestActionClick($event, index)\"\n (like)=\"onLike(message, index)\"\n (dislike)=\"onDislike(message, index)\"\n (debug)=\"showDebug(message, index)\">\n </sq-chat-message>\n </li>\n </ng-container>\n <!-- Loading spinner -->\n <li *ngIf=\"(loading$ | async) === true\">\n <ng-container *ngTemplateOutlet=\"loadingTpl || loadingTplDefault\"></ng-container>\n </li>\n </ul>\n\n <!-- Reporting a feedback form -->\n <div class=\"issue-report p-3 rounded-lg\" *ngIf=\"showReport\">\n <ng-container *ngTemplateOutlet=\"reportTpl || reportTplDefault; context: { $implicit: messageToReport, rank: reportRank, type: reportType }\"></ng-container>\n </div>\n\n <!-- User text input -->\n @if (!showReport) {\n <div class=\"user-input mt-auto\">\n <div class=\"py-2\">\n <div [hidden]=\"!isConnected\">\n <ng-container *ngIf=\"enabledUserInput\" [ngTemplateOutlet]=\"inputTpl\"></ng-container>\n </div>\n <!-- Retry button -->\n <!-- hidden attribute is in conflict with a css rule display: flex -->\n @if(!isConnected){\n <button class=\"btn mb-4 ast-error ast-btn sq-retry\" (click)=\"retryFetch()\">\n <span>{{ 'chat.tryAgain' | transloco }}</span>\n <span *ngIf=\"retrialAttempts\" class=\"ms-2 attempts\">{{ retrialAttempts }}</span>\n </button>\n }\n <div class=\"text-end small text-muted px-3\" *ngIf=\"!!config?.globalSettings?.disclaimer\">\n {{ config?.globalSettings?.disclaimer | transloco }}\n </div>\n </div>\n </div>\n }\n\n <!-- Floating scroll button -->\n <div *ngIf=\"!isAtBottom && !showReport\" class=\"sq-floating-scroll\" [ngClass]=\"enabledUserInput ? 'sq-floating-scroll--when-user-input' : 'sq-floating-scroll--without-user-input'\">\n <button class=\"btn shadow\" (click)=\"scrollDown()\" aria-label=\"Scroll down\">\n <i class=\"fas fa-angle-double-down\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<!-- NG TEMPLATES-->\n\n<ng-template #loadingTplDefault>\n <div class=\"spinner-grow text-primary d-block mx-auto my-5\" role=\"status\">\n <span class=\"visually-hidden\">{{ 'chat.loading' | transloco }}</span>\n </div>\n</ng-template>\n\n<ng-template #inputTpl>\n <div class=\"px-3 py-1\">\n <div class=\"ast-input-container\">\n <button disabled class=\"btn btn-light\" aria-label=\"search\">\n <i class=\"fas fa-search\"></i>\n </button>\n <textarea #questionInput rows=\"1\"\n type=\"text\" class=\"form-control\"\n [placeholder]=\"'chat.askSomething' | transloco\" autofocus\n [(ngModel)]=\"question\"\n (keyup)=\"onKeyUp($event)\"\n (keydown)=\"calculateHeight($event)\"\n [disabled]=\"(loading$ | async) || (chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\">\n </textarea>\n <div id=\"chat-actions\" class=\"d-flex gap-2\">\n <button\n *ngIf=\"(chatService.streaming$ | async) === false && (loading$ | async) !== true && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Send message\"\n [sqTooltip]=\"'chat.sendMessage' | transloco\"\n (click)=\"submitQuestion()\">\n <i class=\"fas fa-paper-plane\"></i>\n </button>\n <button\n *ngIf=\"indexMessageToEdit\"\n aria-label=\"Cancel edition\"\n type=\"button\"\n class=\"btn btn-light\"\n [sqTooltip]=\"'chat.cancelEdition' | transloco\"\n (click)=\"indexMessageToEdit = undefined; question = ''\">\n <i class=\"fas fa-undo-alt\"></i>\n </button>\n <span *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\" class=\"processing\">\n {{ 'chat.generating' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <span *ngIf=\"(chatService.stoppingGeneration$ | async)\" class=\"processing\">\n {{ 'chat.stopping' | transloco }}<i class=\"fas fa-spinner fa-pulse\"></i>\n </span>\n <button\n *ngIf=\"(chatService.streaming$ | async) && (chatService.stoppingGeneration$ | async) === false\"\n type=\"button\"\n class=\"btn btn-light\"\n aria-label=\"Stop generating\"\n [sqTooltip]=\"'chat.stopGeneration' | transloco\"\n (click)=\"stopGeneration()\">\n <i class=\"fas fa-stop\"></i>\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #reportTplDefault let-message let-rank=\"rank\" let-type=\"type\">\n <div class=\"px-3\">\n <ng-container *ngIf=\"type === 'dislike'\">\n <h5>{{ 'chat.issueType' | transloco }}</h5>\n <select class=\"form-select mb-4\" [(ngModel)]=\"issueType\">\n <option [value]=\"''\">{{ 'chat.chooseIssueType' | transloco }}</option>\n <option *ngFor=\"let type of (issueTypes ?? defaultIssueTypes)\" [value]=\"type\">{{ type | transloco }}</option>\n </select>\n <h5>{{ 'chat.askUnlikeReasons' | transloco }}</h5>\n </ng-container>\n <ng-container *ngIf=\"type === 'like'\">\n <h5>{{ 'chat.askLikeReasons' | transloco }}</h5>\n </ng-container>\n <textarea class=\"form-control border border-neutral-200\" [(ngModel)]=\"reportComment\" [placeholder]=\"'chat.writeComment' | transloco\"></textarea>\n <div class=\"d-flex flex-row-reverse gap-1 mt-2\">\n <button class=\"btn btn-primary\" [disabled]=\"type === 'dislike' && !issueType\" (click)=\"sendReport()\">{{ 'chat.send' | transloco }}</button>\n <button class=\"btn btn-light\" (click)=\"ignoreReport()\">{{ 'chat.doNotSend' | transloco }}</button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultTokenConsumptionTpl let-instanceId>\n <sq-token-progress-bar\n [instanceId]=\"instanceId\">\n </sq-token-progress-bar>\n</ng-template>\n\n<div class=\"debug-messages\" [class.displayed]=\"showDebugMessages\">\n <button *ngIf=\"showDebugMessages\" class=\"btn btn-light shadow back-btn\" (click)=\"showDebugMessages=false\" aria-label=\"Hide debug messages\">\n <i class=\"fas fa-chevron-right\"></i>\n </button>\n <ng-container *ngTemplateOutlet=\"debugMessagesTpl || defaultDebugMessagesTpl; context: { $implicit: debugMessages }\">\n </ng-container>\n</div>\n\n<ng-template #defaultDebugMessagesTpl let-debugMessages>\n <sq-debug-message [data]=\"debugMessages\"></sq-debug-message>\n</ng-template>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}:host{font-size:.875rem}:host>div>.user-input>div:not(.progress),:host>div>.issue-report>div,:host>div>ul>li{width:var(--ast-chat-container-width, 100%);max-width:100%;margin-left:auto;margin-right:auto}:host>div>ul{padding-top:var(--ast-chat-padding-top, 0);padding-bottom:var(--ast-chat-padding-bottom, 0)}li.attachment>p{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:3}li.attachment.expanded>p{display:block}.progress{--bs-progress-height: 3px}.progress.disabled{--bs-progress-height: 20px;--bs-progress-bar-bg: var(--bs-danger)}.user-input{z-index:1}.user-input ul.list-group{max-height:30vh}.form-control:disabled{background-color:#ededed}a.disabled{cursor:default;opacity:.5}.no-max-height{max-height:initial!important}.sq-floating-scroll{position:absolute;right:50%;text-align:center}.sq-floating-scroll--when-user-input{bottom:75px}.sq-floating-scroll--without-user-input{bottom:15px}.sq-floating-scroll .btn{background-color:#fff}.sq-floating-scroll .btn:hover{background-color:#fff;opacity:.9}.ast-input-container{display:flex;align-items:center;background-color:var(--ast-input-bg, #F8F8F8);border-radius:var(--ast-size-3, .75rem)}.ast-input-container>i{padding-left:var(--ast-size-3, .75rem);color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container textarea{padding-left:var(--ast-size-3, .75rem);padding-right:var(--ast-size-3, .75rem);resize:none}.ast-input-container textarea,.ast-input-container button,.ast-input-container button:hover{background-color:transparent;border:0}.ast-input-container button:hover{color:var(--ast-primary-color, #005DA7)}.ast-input-container button:not(:hover){color:var(--ast-muted-color, rgba(33, 37, 41, .75))}.ast-input-container .processing{display:flex;align-items:center;color:var(--ast-secondary-color, #FF732E);gap:.5rem}sq-chat-message.sq-user-message{float:var(--ast-user-message-float, none)}sq-token-progress-bar{z-index:10;position:absolute;top:0;right:0}.debug-messages{position:fixed;z-index:999999;right:-60%;top:0;width:60%;height:100%;transition:all .5s ease;background-color:var(--bs-body-bg);overflow:auto}.debug-messages .back-btn{position:fixed;right:0%;transition:all .5s ease}.debug-messages.displayed{right:0}.debug-messages.displayed .back-btn{right:60%}.debug-messages sq-debug-message:first-of-type{display:block;width:100%}.btn.sq-retry{display:flex;margin:auto;background:var(--ast-error-bg, rgba(249, 58, 55, .2));font-weight:var(--font-weight-bold, 500)}.btn.sq-retry .attempts{display:flex;border-radius:100%;background:#fff;height:20px;width:20px;place-content:center;align-items:center}.issue-report{background-color:var(--ast-report-bg, white)}.text-end{text-align:right}.small{font-size:.875em}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color)}.d-flex{display:flex}.flex-row-reverse{flex-direction:row-reverse}.flex-grow-1{flex-grow:1}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))}.d-block{display:block}.btn{--bs-border-radius: .25rem;--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: var(--bs-body-color);--bs-btn-bg: transparent;--bs-btn-border-width: var(--bs-border-width);--bs-btn-border-color: transparent;--bs-btn-border-radius: var(--bs-border-radius);--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49, 132, 253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control:disabled{background-color:var(--bs-body-bg)}.form-select{--bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width, 1px) solid var(--bs-border-color, oklch(92.2% 0 0deg));border-radius:var(--bs-border-radius);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"] }]
4449
4561
  }], ctorParameters: () => [], propDecorators: { instanceId: [{
4450
4562
  type: Input
4451
4563
  }], query: [{
@@ -4472,6 +4584,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
4472
4584
  type: Input
4473
4585
  }], appConfig: [{
4474
4586
  type: Input
4587
+ }], collapsed: [{
4588
+ type: Input
4475
4589
  }], connection: [{
4476
4590
  type: Output
4477
4591
  }], loading$: [{
@@ -4506,15 +4620,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
4506
4620
  }] } });
4507
4621
 
4508
4622
  class DialogDeleteSavedChatComponent {
4509
- constructor() {
4510
- this.deleteDialog = viewChild('deleteDialog');
4511
- this.notificationsService = inject(NotificationsService);
4512
- this.transloco = inject(TranslocoService);
4513
- this.chatService = input.required();
4514
- this.delete = output();
4515
- this.savedChat = signal({ currentTitle: '', title: '' });
4516
- this.subscription = new Subscription();
4517
- }
4623
+ deleteDialog = viewChild('deleteDialog', ...(ngDevMode ? [{ debugName: "deleteDialog" }] : []));
4624
+ notificationsService = inject(NotificationsService);
4625
+ transloco = inject(TranslocoService);
4626
+ chatService = input.required(...(ngDevMode ? [{ debugName: "chatService" }] : []));
4627
+ delete = output();
4628
+ savedChat = signal({ currentTitle: '', title: '' }, ...(ngDevMode ? [{ debugName: "savedChat" }] : []));
4629
+ subscription = new Subscription();
4518
4630
  showModal(event, savedChat) {
4519
4631
  event.stopPropagation();
4520
4632
  this.savedChat.set({ ...savedChat, currentTitle: savedChat.title });
@@ -4538,8 +4650,8 @@ class DialogDeleteSavedChatComponent {
4538
4650
  })).subscribe());
4539
4651
  this.deleteDialog()?.nativeElement.close();
4540
4652
  }
4541
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogDeleteSavedChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4542
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", type: DialogDeleteSavedChatComponent, isStandalone: true, selector: "sq-dialog-delete-saved-chat", inputs: { chatService: { classPropertyName: "chatService", publicName: "chatService", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { delete: "delete" }, providers: [provideTranslocoScope('chat-dialogs')], viewQueries: [{ propertyName: "deleteDialog", first: true, predicate: ["deleteDialog"], descendants: true, isSignal: true }], ngImport: i0, template: `
4653
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogDeleteSavedChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4654
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.16", type: DialogDeleteSavedChatComponent, isStandalone: true, selector: "sq-dialog-delete-saved-chat", inputs: { chatService: { classPropertyName: "chatService", publicName: "chatService", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { delete: "delete" }, providers: [provideTranslocoScope('chat-dialogs')], viewQueries: [{ propertyName: "deleteDialog", first: true, predicate: ["deleteDialog"], descendants: true, isSignal: true }], ngImport: i0, template: `
4543
4655
  <dialog popover #deleteDialog class="rounded-3 z-backdrop w-full max-w-md p-4 rounded-lg border border-neutral-200 shadow-2xl">
4544
4656
  <div class="flex flex-col gap-4">
4545
4657
  <h1 class="text-xl font-bold">{{ 'chatDialogs.deleteSavedDiscussion' | transloco }}</h1>
@@ -4553,9 +4665,9 @@ class DialogDeleteSavedChatComponent {
4553
4665
  </div>
4554
4666
  </div>
4555
4667
  </dialog>
4556
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
4668
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
4557
4669
  }
4558
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogDeleteSavedChatComponent, decorators: [{
4670
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogDeleteSavedChatComponent, decorators: [{
4559
4671
  type: Component,
4560
4672
  args: [{
4561
4673
  selector: 'sq-dialog-delete-saved-chat',
@@ -4578,17 +4690,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
4578
4690
  </dialog>
4579
4691
  `
4580
4692
  }]
4581
- }] });
4693
+ }], propDecorators: { deleteDialog: [{ type: i0.ViewChild, args: ['deleteDialog', { isSignal: true }] }], chatService: [{ type: i0.Input, args: [{ isSignal: true, alias: "chatService", required: true }] }], delete: [{ type: i0.Output, args: ["delete"] }] } });
4582
4694
 
4583
4695
  class DialogRenameSavedChatComponent {
4584
- constructor() {
4585
- this.renameDialog = viewChild('renameDialog');
4586
- this.notificationsService = inject(NotificationsService);
4587
- this.transloco = inject(TranslocoService);
4588
- this.chatService = input.required();
4589
- this.savedChat = signal({ currentTitle: '', title: '' });
4590
- this.subscription = new Subscription();
4591
- }
4696
+ renameDialog = viewChild('renameDialog', ...(ngDevMode ? [{ debugName: "renameDialog" }] : []));
4697
+ notificationsService = inject(NotificationsService);
4698
+ transloco = inject(TranslocoService);
4699
+ chatService = input.required(...(ngDevMode ? [{ debugName: "chatService" }] : []));
4700
+ savedChat = signal({ currentTitle: '', title: '' }, ...(ngDevMode ? [{ debugName: "savedChat" }] : []));
4701
+ subscription = new Subscription();
4592
4702
  showModal(event, savedChat) {
4593
4703
  event.stopPropagation();
4594
4704
  this.savedChat.set({ ...savedChat, currentTitle: savedChat.title });
@@ -4612,8 +4722,8 @@ class DialogRenameSavedChatComponent {
4612
4722
  })).subscribe());
4613
4723
  this.renameDialog()?.nativeElement.close();
4614
4724
  }
4615
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogRenameSavedChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4616
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", type: DialogRenameSavedChatComponent, isStandalone: true, selector: "sq-dialog-rename-saved-chat", inputs: { chatService: { classPropertyName: "chatService", publicName: "chatService", isSignal: true, isRequired: true, transformFunction: null } }, providers: [provideTranslocoScope('chat-dialogs')], viewQueries: [{ propertyName: "renameDialog", first: true, predicate: ["renameDialog"], descendants: true, isSignal: true }], ngImport: i0, template: `
4725
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogRenameSavedChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4726
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.16", type: DialogRenameSavedChatComponent, isStandalone: true, selector: "sq-dialog-rename-saved-chat", inputs: { chatService: { classPropertyName: "chatService", publicName: "chatService", isSignal: true, isRequired: true, transformFunction: null } }, providers: [provideTranslocoScope('chat-dialogs')], viewQueries: [{ propertyName: "renameDialog", first: true, predicate: ["renameDialog"], descendants: true, isSignal: true }], ngImport: i0, template: `
4617
4727
  <dialog popover #renameDialog class="rounded-3 z-backdrop w-full max-w-md p-4 rounded-lg border border-neutral-200 shadow-2xl">
4618
4728
  <div class="flex flex-col gap-4">
4619
4729
  <h1 class="text-xl font-bold">{{ 'chatDialogs.renameSavedDiscussion' | transloco }}</h1>
@@ -4629,9 +4739,9 @@ class DialogRenameSavedChatComponent {
4629
4739
  </div>
4630
4740
  </div>
4631
4741
  </dialog>
4632
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
4742
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
4633
4743
  }
4634
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DialogRenameSavedChatComponent, decorators: [{
4744
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DialogRenameSavedChatComponent, decorators: [{
4635
4745
  type: Component,
4636
4746
  args: [{
4637
4747
  selector: 'sq-dialog-rename-saved-chat',
@@ -4656,20 +4766,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
4656
4766
  </dialog>
4657
4767
  `
4658
4768
  }]
4659
- }] });
4769
+ }], propDecorators: { renameDialog: [{ type: i0.ViewChild, args: ['renameDialog', { isSignal: true }] }], chatService: [{ type: i0.Input, args: [{ isSignal: true, alias: "chatService", required: true }] }] } });
4660
4770
 
4661
4771
  class SavedChatsComponent {
4662
- constructor() {
4663
- this.load = new EventEmitter();
4664
- this.delete = new EventEmitter();
4665
- this.subscription = new Subscription();
4666
- this.groupedSavedChats$ = new BehaviorSubject([]);
4667
- this.searchText$ = new Subject();
4668
- this.instanceManagerService = inject(InstanceManagerService);
4669
- this.notificationsService = inject(NotificationsService);
4670
- this.transloco = inject(TranslocoService);
4671
- this.assistantUtils = inject(AssistantUtils);
4672
- }
4772
+ /** Define the key based on it, the appropriate chatService instance will be returned from instanceManagerService */
4773
+ instanceId;
4774
+ load = new EventEmitter();
4775
+ delete = new EventEmitter();
4776
+ chatService;
4777
+ subscription = new Subscription();
4778
+ groupedSavedChats$ = new BehaviorSubject([]);
4779
+ queryWebserviceForSearch;
4780
+ searchQuery;
4781
+ searchText;
4782
+ searchText$ = new Subject();
4783
+ instanceManagerService = inject(InstanceManagerService);
4784
+ notificationsService = inject(NotificationsService);
4785
+ transloco = inject(TranslocoService);
4786
+ assistantUtils = inject(AssistantUtils);
4673
4787
  ngOnInit() {
4674
4788
  this.subscription.add(of(isAuthenticated()).pipe(tap(_ => this.instantiateChatService()), switchMap(_ => this.chatService.userOverride$), switchMap(_ => this.chatService.initProcess$), filter(success => !!success), tap(_ => {
4675
4789
  this.onListSavedChat();
@@ -4743,10 +4857,10 @@ class SavedChatsComponent {
4743
4857
  modifiedUTC: a.modified
4744
4858
  }))), catchError$1(() => of(this.chatService.savedChats$.value || [])));
4745
4859
  }
4746
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedChatsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4747
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SavedChatsComponent, isStandalone: true, selector: "sq-saved-chats-v3", inputs: { instanceId: "instanceId" }, outputs: { load: "load", delete: "delete" }, providers: [SavedChatsService, provideTranslocoScope('saved-chats', 'chat')], ngImport: i0, template: "<ng-container *ngIf=\"(chatService.assistantConfig$ | async)?.savedChatSettings.display\">\n <div *ngIf=\"!!queryWebserviceForSearch\" class=\"sticky-top\">\n <input type=\"search\" class=\"form-control\" [placeholder]=\"'savedChats.searchPlaceholder' | transloco\" (keyup)=\"onSearch($event)\" (search)=\"onSearch($event)\" />\n </div>\n <div *ngIf=\"chatService.savedChatsError$ | async\" class=\"alert alert-danger\">\n {{ 'savedChats.listError' | transloco }}\n </div>\n <div *ngFor=\"let group of (groupedSavedChats$ | async)\" class=\"saved-chats\">\n <div class=\"saved-chat-date\">{{group.key | transloco}}</div>\n <div *ngFor=\"let savedChat of group.value\"\n (click)=\"onLoad(savedChat)\"\n class=\"saved-chat p-2\"\n [class.forbidden]=\"(chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\"\n [class.active]=\"chatService.chatId === savedChat.id\">\n <span class=\"title me-1\" [sqTooltip]=\"savedChat.title\">{{savedChat.title}}</span>\n <button\n type=\"button\"\n (click)=\"renameDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.rename' | transloco\"\n class=\"mx-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-pen saved-chat-actions\"></i>\n </button>\n <button\n type=\"button\"\n (click)=\"deleteDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.delete' | transloco\"\n class=\"ms-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-trash saved-chat-actions\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<sq-dialog-delete-saved-chat [chatService]=\"chatService\" (delete)=\"delete.emit($event)\" #deleteDialog />\n<sq-dialog-rename-saved-chat [chatService]=\"chatService\" #renameDialog />\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.saved-chats .saved-chat-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.saved-chats .saved-chat{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.saved-chats .saved-chat span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.saved-chats .saved-chat .saved-chat-actions{display:none}.saved-chats .saved-chat:hover,.saved-chats .saved-chat.active,.saved-chats .saved-chat:hover button,.saved-chats .saved-chat.active button{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-saved-chat-hover-background, #FFF8F1)}.saved-chats .saved-chat:hover .saved-chat-actions{display:block}.saved-chats .saved-chat.forbidden{cursor:not-allowed}.saved-chats .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: DialogRenameSavedChatComponent, selector: "sq-dialog-rename-saved-chat", inputs: ["chatService"] }, { kind: "component", type: DialogDeleteSavedChatComponent, selector: "sq-dialog-delete-saved-chat", inputs: ["chatService"], outputs: ["delete"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
4860
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedChatsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4861
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: SavedChatsComponent, isStandalone: true, selector: "sq-saved-chats-v3", inputs: { instanceId: "instanceId" }, outputs: { load: "load", delete: "delete" }, providers: [SavedChatsService, provideTranslocoScope('saved-chats', 'chat')], ngImport: i0, template: "<ng-container *ngIf=\"(chatService.assistantConfig$ | async)?.savedChatSettings.display\">\n <div *ngIf=\"!!queryWebserviceForSearch\" class=\"sticky-top\">\n <input type=\"search\" class=\"form-control\" [placeholder]=\"'savedChats.searchPlaceholder' | transloco\" (keyup)=\"onSearch($event)\" (search)=\"onSearch($event)\" />\n </div>\n <div *ngIf=\"chatService.savedChatsError$ | async\" class=\"alert alert-danger\">\n {{ 'savedChats.listError' | transloco }}\n </div>\n <div *ngFor=\"let group of (groupedSavedChats$ | async)\" class=\"saved-chats\">\n <div class=\"saved-chat-date\">{{group.key | transloco}}</div>\n <div *ngFor=\"let savedChat of group.value\"\n (click)=\"onLoad(savedChat)\"\n class=\"saved-chat p-2\"\n [class.forbidden]=\"(chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\"\n [class.active]=\"chatService.chatId === savedChat.id\">\n <span class=\"title me-1\" [sqTooltip]=\"savedChat.title\">{{savedChat.title}}</span>\n <button\n type=\"button\"\n (click)=\"renameDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.rename' | transloco\"\n class=\"mx-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-pen saved-chat-actions\"></i>\n </button>\n <button\n type=\"button\"\n (click)=\"deleteDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.delete' | transloco\"\n class=\"ms-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-trash saved-chat-actions\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<sq-dialog-delete-saved-chat [chatService]=\"chatService\" (delete)=\"delete.emit($event)\" #deleteDialog />\n<sq-dialog-rename-saved-chat [chatService]=\"chatService\" #renameDialog />\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.saved-chats .saved-chat-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.saved-chats .saved-chat{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.saved-chats .saved-chat span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.saved-chats .saved-chat .saved-chat-actions{display:none}.saved-chats .saved-chat:hover,.saved-chats .saved-chat.active,.saved-chats .saved-chat:hover button,.saved-chats .saved-chat.active button{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-saved-chat-hover-background, #FFF8F1)}.saved-chats .saved-chat:hover .saved-chat-actions{display:block}.saved-chats .saved-chat.forbidden{cursor:not-allowed}.saved-chats .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: DialogRenameSavedChatComponent, selector: "sq-dialog-rename-saved-chat", inputs: ["chatService"] }, { kind: "component", type: DialogDeleteSavedChatComponent, selector: "sq-dialog-delete-saved-chat", inputs: ["chatService"], outputs: ["delete"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
4748
4862
  }
4749
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SavedChatsComponent, decorators: [{
4863
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SavedChatsComponent, decorators: [{
4750
4864
  type: Component,
4751
4865
  args: [{ selector: 'sq-saved-chats-v3', standalone: true, providers: [SavedChatsService, provideTranslocoScope('saved-chats', 'chat')], imports: [CommonModule, FormsModule, TooltipDirective, DialogRenameSavedChatComponent, DialogDeleteSavedChatComponent, TranslocoPipe], template: "<ng-container *ngIf=\"(chatService.assistantConfig$ | async)?.savedChatSettings.display\">\n <div *ngIf=\"!!queryWebserviceForSearch\" class=\"sticky-top\">\n <input type=\"search\" class=\"form-control\" [placeholder]=\"'savedChats.searchPlaceholder' | transloco\" (keyup)=\"onSearch($event)\" (search)=\"onSearch($event)\" />\n </div>\n <div *ngIf=\"chatService.savedChatsError$ | async\" class=\"alert alert-danger\">\n {{ 'savedChats.listError' | transloco }}\n </div>\n <div *ngFor=\"let group of (groupedSavedChats$ | async)\" class=\"saved-chats\">\n <div class=\"saved-chat-date\">{{group.key | transloco}}</div>\n <div *ngFor=\"let savedChat of group.value\"\n (click)=\"onLoad(savedChat)\"\n class=\"saved-chat p-2\"\n [class.forbidden]=\"(chatService.streaming$ | async) || (chatService.stoppingGeneration$ | async)\"\n [class.active]=\"chatService.chatId === savedChat.id\">\n <span class=\"title me-1\" [sqTooltip]=\"savedChat.title\">{{savedChat.title}}</span>\n <button\n type=\"button\"\n (click)=\"renameDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.rename' | transloco\"\n class=\"mx-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-pen saved-chat-actions\"></i>\n </button>\n <button\n type=\"button\"\n (click)=\"deleteDialog.showModal($event, savedChat)\"\n [sqTooltip]=\"'savedChats.delete' | transloco\"\n class=\"ms-1 bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-trash saved-chat-actions\"></i>\n </button>\n </div>\n </div>\n</ng-container>\n\n<sq-dialog-delete-saved-chat [chatService]=\"chatService\" (delete)=\"delete.emit($event)\" #deleteDialog />\n<sq-dialog-rename-saved-chat [chatService]=\"chatService\" #renameDialog />\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.saved-chats .saved-chat-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.saved-chats .saved-chat{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.saved-chats .saved-chat span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.saved-chats .saved-chat .saved-chat-actions{display:none}.saved-chats .saved-chat:hover,.saved-chats .saved-chat.active,.saved-chats .saved-chat:hover button,.saved-chats .saved-chat.active button{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-saved-chat-hover-background, #FFF8F1)}.saved-chats .saved-chat:hover .saved-chat-actions{display:block}.saved-chats .saved-chat.forbidden{cursor:not-allowed}.saved-chats .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
4752
4866
  }], propDecorators: { instanceId: [{
@@ -4758,15 +4872,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
4758
4872
  }] } });
4759
4873
 
4760
4874
  class DocumentsUploadService {
4761
- constructor() {
4762
- this.REQUEST_URL = "api/v1/plugin/SinequaAssistantREST";
4763
- /** Documents upload configuration. */
4764
- this.uploadConfig$ = new BehaviorSubject(undefined);
4765
- /** Emit the list of indexed documents */
4766
- this.uploadedDocuments$ = new BehaviorSubject([]);
4767
- this.appService = inject(AppService);
4768
- this.http = inject(HttpClient);
4769
- }
4875
+ REQUEST_URL = "api/v1/plugin/SinequaAssistantREST";
4876
+ /** Documents upload configuration. */
4877
+ uploadConfig$ = new BehaviorSubject(undefined);
4878
+ /** Emit the list of indexed documents */
4879
+ uploadedDocuments$ = new BehaviorSubject([]);
4880
+ appService = inject(AppService);
4881
+ http = inject(HttpClient);
4770
4882
  /**
4771
4883
  * Initializes the file upload service.
4772
4884
  */
@@ -5015,10 +5127,10 @@ class DocumentsUploadService {
5015
5127
  convertBytesToMB(bytes) {
5016
5128
  return bytes / (1024 * 1024);
5017
5129
  }
5018
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentsUploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5019
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentsUploadService, providedIn: 'root' }); }
5130
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentsUploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5131
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentsUploadService, providedIn: 'root' });
5020
5132
  }
5021
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentsUploadService, decorators: [{
5133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentsUploadService, decorators: [{
5022
5134
  type: Injectable,
5023
5135
  args: [{
5024
5136
  providedIn: 'root'
@@ -5026,33 +5138,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5026
5138
  }] });
5027
5139
 
5028
5140
  class DocumentUploadComponent {
5029
- constructor() {
5030
- /** Polling interval in milliseconds to update the indexing status of the uploaded documents */
5031
- this.pollingInterval = 1000;
5032
- this.flowConfig = {
5033
- // Disables chunk testing before uploading actual file data. Thus, avoids unnecessary requests and speeds up uploads
5034
- testChunks: false,
5035
- // Allows multiple file uploads simultaneously
5036
- singleFile: false,
5037
- // Allows the same file to be uploaded multiple times
5038
- allowDuplicateUploads: true,
5039
- query: () => {
5040
- return {}; // Empty object to prevent query parameters
5041
- },
5042
- preprocess: (chunk) => chunk.abort() // Prevents the default flow upload of chunks
5043
- };
5044
- this.errorAlerts = [];
5045
- this.dragging$ = new BehaviorSubject(false);
5046
- this.indexing$ = new BehaviorSubject(false);
5047
- this.indexingInfos$ = new BehaviorSubject(undefined);
5048
- this.uploading$ = new BehaviorSubject(false);
5049
- this.uploadingInfos$ = new BehaviorSubject(undefined);
5050
- this._subscription = new Subscription();
5051
- this.documentsUploadService = inject(DocumentsUploadService);
5052
- this.notificationsService = inject(NotificationsService);
5053
- this.appService = inject(AppService);
5054
- this.transloco = inject(TranslocoService);
5055
- }
5141
+ /** Polling interval in milliseconds to update the indexing status of the uploaded documents */
5142
+ pollingInterval = 1000;
5143
+ // Reference to the flow directive
5144
+ flow;
5145
+ flowConfig = {
5146
+ // Disables chunk testing before uploading actual file data. Thus, avoids unnecessary requests and speeds up uploads
5147
+ testChunks: false,
5148
+ // Allows multiple file uploads simultaneously
5149
+ singleFile: false,
5150
+ // Allows the same file to be uploaded multiple times
5151
+ allowDuplicateUploads: true,
5152
+ query: () => {
5153
+ return {}; // Empty object to prevent query parameters
5154
+ },
5155
+ preprocess: (chunk) => chunk.abort() // Prevents the default flow upload of chunks
5156
+ };
5157
+ errorAlerts = [];
5158
+ dragging$ = new BehaviorSubject(false);
5159
+ indexing$ = new BehaviorSubject(false);
5160
+ indexingInfos$ = new BehaviorSubject(undefined);
5161
+ uploading$ = new BehaviorSubject(false);
5162
+ uploadingInfos$ = new BehaviorSubject(undefined);
5163
+ _subscription = new Subscription();
5164
+ documentsUploadService = inject(DocumentsUploadService);
5165
+ notificationsService = inject(NotificationsService);
5166
+ appService = inject(AppService);
5167
+ transloco = inject(TranslocoService);
5056
5168
  ngOnInit() {
5057
5169
  this._subscription.add(of(isAuthenticated()).pipe(switchMap((_) => this.appService.init()), tap((_) => this.documentsUploadService.init()), catchError$1((error) => {
5058
5170
  console.error(error);
@@ -5253,10 +5365,10 @@ class DocumentUploadComponent {
5253
5365
  const total = infos.docs.length;
5254
5366
  return completed / total;
5255
5367
  }
5256
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5257
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DocumentUploadComponent, isStandalone: true, selector: "sq-document-upload", inputs: { pollingInterval: "pollingInterval" }, providers: [provideTranslocoScope('chat-documents-upload')], viewQueries: [{ propertyName: "flow", first: true, predicate: ["flow"], descendants: true, static: true }], ngImport: i0, template: "<ng-container #flow=\"flow\" [flowConfig]=\"flowConfig\"></ng-container>\n<div class=\"file-upload-container\">\n <input\n type=\"file\"\n flowButton\n [flow]=\"flow.flowJs\"\n multiple\n hidden\n #fileInput>\n <div\n flowDrop\n [flow]=\"flow.flowJs\"\n (dragenter)=\"onDragenter()\"\n (dragleave)=\"onDragleave($event)\"\n (drop)=\"onDrop()\"\n (click)=\"fileInput.click()\"\n class=\"dropzone\"\n [ngClass]=\"{'dropzone--active': (dragging$ | async)}\"\n [hidden]=\"(uploading$ | async) || (indexing$ | async)\">\n <ng-container *ngIf=\"!(dragging$ | async); else draggingContent\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n <span>{{ 'chatDocumentsUpload.dragAndDrop' | transloco }}</span>\n <span class=\"text-orange\">{{ 'chatDocumentsUpload.clickToBrowse' | transloco }}</span>\n </ng-container>\n <ng-template #draggingContent>\n <span>{{ 'chatDocumentsUpload.dropFiles' | transloco }}</span>\n </ng-template>\n </div>\n\n <div *ngIf=\"(uploading$ | async) || (indexing$ | async)\" class=\"dropzone dropzone--active\">\n <ng-container *ngIf=\"(uploading$ | async); else indexingState\">\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <span>\n {{ 'chatDocumentsUpload.uploadingFiles' | transloco: { count: (flow.transfers$ | async)!.transfers.length } }}\n </span>\n <span *ngIf=\"(uploadingInfos$ | async) as uploadingInfos\">{{ uploadingInfos.progress | number:'1.0-0' }}%</span>\n </ng-container>\n <ng-template #indexingState>\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <ng-container *ngIf=\"indexingInfos$ | async as indexingInfo\">\n <span>\n {{ 'chatDocumentsUpload.indexingFiles' | transloco: { count: indexingInfo.docs.length } }}\n </span>\n <span>{{ getIndexingProgress(indexingInfo) * 100 | number:'1.0-0' }}%</span>\n </ng-container>\n </ng-template>\n </div>\n\n <ul *ngIf=\"errorAlerts.length > 0\" class=\"error-list mt-3\">\n <li *ngFor=\"let error of errorAlerts\">\n {{ error }}\n </li>\n </ul>\n\n <div *ngIf=\"((flow.transfers$ | async)?.transfers?.length > 0) && !(uploading$ | async)\" class=\"file-list mt-3\">\n <ul>\n <li *ngFor=\"let transfer of (flow.transfers$ | async)!.transfers; trackBy: trackTransfer\">\n <sq-format-icon [extension]=\"transfer.flowFile.getExtension()\" class=\"me-1\"></sq-format-icon>\n <span class=\"me-1\" [title]=\"transfer.name\">{{ transfer.name }}</span>\n <button\n type=\"button\"\n (click)=\"flow.cancelFile(transfer)\"\n [title]=\"'chatDocumentsUpload.cancel' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-trash\"></i>\n </button>\n </li>\n </ul>\n </div>\n\n <div class=\"d-flex mt-2\">\n <button\n type=\"button\"\n class=\"btn btn-light cancel-btn me-2\"\n (click)=\"flow.cancel()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.cancel' | transloco }}\n </button>\n <button\n type=\"button\"\n class=\"upload-btn\"\n (click)=\"upload()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.upload' | transloco }}\n </button>\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}@keyframes dash-move{0%{background-position:0 0}to{background-position:100% 0}}.file-upload-container{width:100%;position:relative;padding:20px;background-color:var(--ast-primary-bg, #f2f8fe)}.file-upload-container .dropzone{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100px;border:2px dashed var(--ast-primary-color, #005DA7);border-color:var(--ast-secondary-color, #FF732E) var(--ast-primary-color, #005DA7) var(--ast-primary-color, #005DA7) var(--ast-secondary-color, #FF732E);border-radius:5px;padding:10px;cursor:pointer;background-color:var(--ast-primary-bg, #f2f8fe);transition:background-color .3s ease;color:var(--ast-primary-color, #005DA7)}.file-upload-container .dropzone--active{background-color:var(--ast-secondary-bg, #FFF8F1);color:var(--ast-secondary-color, #FF732E);border-color:var(--ast-secondary-color, #FF732E)}.file-upload-container .dropzone i{font-size:x-large}.file-upload-container .dropzone span{margin:0;font-size:small}.file-upload-container .dropzone span.text-orange{color:var(--ast-secondary-color, #FF732E)}.file-upload-container .file-list h6{color:#a9a9a9}.file-upload-container .file-list ul{list-style-type:none;padding:0}.file-upload-container .file-list ul li{display:flex;align-items:center;padding:10px;background-color:var(--ast-primary-bg, #f2f8fe);margin-bottom:5px;border-radius:5px;font-size:small}.file-upload-container .file-list ul li span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.file-upload-container .file-list ul li i{cursor:pointer}.file-upload-container .file-list ul li i:hover{color:var(--ast-primary-color, #005DA7)}.file-upload-container .error-list{display:flex;flex-direction:column;list-style:disc;background:var(--ast-error-color, rgba(249, 58, 55, .7));color:#fff;border-radius:5px}.file-upload-container .error-list li{padding:3px}.file-upload-container .upload-btn{background:linear-gradient(to right,#1d4ed8,#ec4899,#f97316);color:#fff;border:none;padding:8px 16px;border-radius:5px;cursor:pointer;width:100%}.file-upload-container .upload-btn:hover{background:linear-gradient(to right,#1d4ed8cc,#ec4899cc,#f97316cc)}.file-upload-container .upload-btn[disabled]{opacity:.3;cursor:not-allowed}.file-upload-container .cancel-btn{cursor:pointer;pointer-events:unset;width:100%}.file-upload-container .cancel-btn[disabled]{opacity:.3;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: NgxFlowModule }, { kind: "directive", type: i2$1.ButtonDirective, selector: "[flowButton]", inputs: ["flowDirectoryOnly", "flowAttributes", "flow"] }, { kind: "directive", type: i2$1.DropDirective, selector: "[flowDrop]", inputs: ["flow"], exportAs: ["flowDrop"] }, { kind: "directive", type: i2$1.FlowDirective, selector: "[flowConfig]", inputs: ["flowConfig"], exportAs: ["flow"] }, { kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
5368
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5369
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DocumentUploadComponent, isStandalone: true, selector: "sq-document-upload", inputs: { pollingInterval: "pollingInterval" }, providers: [provideTranslocoScope('chat-documents-upload')], viewQueries: [{ propertyName: "flow", first: true, predicate: ["flow"], descendants: true, static: true }], ngImport: i0, template: "<ng-container #flow=\"flow\" [flowConfig]=\"flowConfig\"></ng-container>\n<div class=\"file-upload-container\">\n <input\n type=\"file\"\n flowButton\n [flow]=\"flow.flowJs\"\n multiple\n hidden\n #fileInput>\n <div\n flowDrop\n [flow]=\"flow.flowJs\"\n (dragenter)=\"onDragenter()\"\n (dragleave)=\"onDragleave($event)\"\n (drop)=\"onDrop()\"\n (click)=\"fileInput.click()\"\n class=\"dropzone\"\n [ngClass]=\"{'dropzone--active': (dragging$ | async)}\"\n [hidden]=\"(uploading$ | async) || (indexing$ | async)\">\n <ng-container *ngIf=\"!(dragging$ | async); else draggingContent\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n <span>{{ 'chatDocumentsUpload.dragAndDrop' | transloco }}</span>\n <span class=\"text-orange\">{{ 'chatDocumentsUpload.clickToBrowse' | transloco }}</span>\n </ng-container>\n <ng-template #draggingContent>\n <span>{{ 'chatDocumentsUpload.dropFiles' | transloco }}</span>\n </ng-template>\n </div>\n\n <div *ngIf=\"(uploading$ | async) || (indexing$ | async)\" class=\"dropzone dropzone--active\">\n <ng-container *ngIf=\"(uploading$ | async); else indexingState\">\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <span>\n {{ 'chatDocumentsUpload.uploadingFiles' | transloco: { count: (flow.transfers$ | async)!.transfers.length } }}\n </span>\n <span *ngIf=\"(uploadingInfos$ | async) as uploadingInfos\">{{ uploadingInfos.progress | number:'1.0-0' }}%</span>\n </ng-container>\n <ng-template #indexingState>\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <ng-container *ngIf=\"indexingInfos$ | async as indexingInfo\">\n <span>\n {{ 'chatDocumentsUpload.indexingFiles' | transloco: { count: indexingInfo.docs.length } }}\n </span>\n <span>{{ getIndexingProgress(indexingInfo) * 100 | number:'1.0-0' }}%</span>\n </ng-container>\n </ng-template>\n </div>\n\n <ul *ngIf=\"errorAlerts.length > 0\" class=\"error-list mt-3\">\n <li *ngFor=\"let error of errorAlerts\">\n {{ error }}\n </li>\n </ul>\n\n <div *ngIf=\"((flow.transfers$ | async)?.transfers?.length > 0) && !(uploading$ | async)\" class=\"file-list mt-3\">\n <ul>\n <li *ngFor=\"let transfer of (flow.transfers$ | async)!.transfers; trackBy: trackTransfer\">\n <sq-format-icon [extension]=\"transfer.flowFile.getExtension()\" class=\"me-1\"></sq-format-icon>\n <span class=\"me-1\" [title]=\"transfer.name\">{{ transfer.name }}</span>\n <button\n type=\"button\"\n (click)=\"flow.cancelFile(transfer)\"\n [title]=\"'chatDocumentsUpload.cancel' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-trash\"></i>\n </button>\n </li>\n </ul>\n </div>\n\n <div class=\"d-flex mt-2\">\n <button\n type=\"button\"\n class=\"btn btn-light cancel-btn me-2\"\n (click)=\"flow.cancel()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.cancel' | transloco }}\n </button>\n <button\n type=\"button\"\n class=\"upload-btn\"\n (click)=\"upload()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.upload' | transloco }}\n </button>\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}@keyframes dash-move{0%{background-position:0 0}to{background-position:100% 0}}.file-upload-container{width:100%;position:relative;padding:20px;background-color:var(--ast-primary-bg, #f2f8fe)}.file-upload-container .dropzone{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100px;border:2px dashed var(--ast-primary-color, #005DA7);border-color:var(--ast-secondary-color, #FF732E) var(--ast-primary-color, #005DA7) var(--ast-primary-color, #005DA7) var(--ast-secondary-color, #FF732E);border-radius:5px;padding:10px;cursor:pointer;background-color:var(--ast-primary-bg, #f2f8fe);transition:background-color .3s ease;color:var(--ast-primary-color, #005DA7)}.file-upload-container .dropzone--active{background-color:var(--ast-secondary-bg, #FFF8F1);color:var(--ast-secondary-color, #FF732E);border-color:var(--ast-secondary-color, #FF732E)}.file-upload-container .dropzone i{font-size:x-large}.file-upload-container .dropzone span{margin:0;font-size:small}.file-upload-container .dropzone span.text-orange{color:var(--ast-secondary-color, #FF732E)}.file-upload-container .file-list h6{color:#a9a9a9}.file-upload-container .file-list ul{list-style-type:none;padding:0}.file-upload-container .file-list ul li{display:flex;align-items:center;padding:10px;background-color:var(--ast-primary-bg, #f2f8fe);margin-bottom:5px;border-radius:5px;font-size:small}.file-upload-container .file-list ul li span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.file-upload-container .file-list ul li i{cursor:pointer}.file-upload-container .file-list ul li i:hover{color:var(--ast-primary-color, #005DA7)}.file-upload-container .error-list{display:flex;flex-direction:column;list-style:disc;background:var(--ast-error-color, rgba(249, 58, 55, .7));color:#fff;border-radius:5px}.file-upload-container .error-list li{padding:3px}.file-upload-container .upload-btn{background:linear-gradient(to right,#1d4ed8,#ec4899,#f97316);color:#fff;border:none;padding:8px 16px;border-radius:5px;cursor:pointer;width:100%}.file-upload-container .upload-btn:hover{background:linear-gradient(to right,#1d4ed8cc,#ec4899cc,#f97316cc)}.file-upload-container .upload-btn[disabled]{opacity:.3;cursor:not-allowed}.file-upload-container .cancel-btn{cursor:pointer;pointer-events:unset;width:100%}.file-upload-container .cancel-btn[disabled]{opacity:.3;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: NgxFlowModule }, { kind: "directive", type: i2$1.ButtonDirective, selector: "[flowButton]", inputs: ["flowDirectoryOnly", "flowAttributes", "flow"] }, { kind: "directive", type: i2$1.DropDirective, selector: "[flowDrop]", inputs: ["flow"], exportAs: ["flowDrop"] }, { kind: "directive", type: i2$1.FlowDirective, selector: "[flowConfig]", inputs: ["flowConfig"], exportAs: ["flow"] }, { kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
5258
5370
  }
5259
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentUploadComponent, decorators: [{
5371
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentUploadComponent, decorators: [{
5260
5372
  type: Component,
5261
5373
  args: [{ selector: "sq-document-upload", standalone: true, providers: [provideTranslocoScope('chat-documents-upload')], imports: [CommonModule, NgxFlowModule, FormatIconComponent, TranslocoPipe], template: "<ng-container #flow=\"flow\" [flowConfig]=\"flowConfig\"></ng-container>\n<div class=\"file-upload-container\">\n <input\n type=\"file\"\n flowButton\n [flow]=\"flow.flowJs\"\n multiple\n hidden\n #fileInput>\n <div\n flowDrop\n [flow]=\"flow.flowJs\"\n (dragenter)=\"onDragenter()\"\n (dragleave)=\"onDragleave($event)\"\n (drop)=\"onDrop()\"\n (click)=\"fileInput.click()\"\n class=\"dropzone\"\n [ngClass]=\"{'dropzone--active': (dragging$ | async)}\"\n [hidden]=\"(uploading$ | async) || (indexing$ | async)\">\n <ng-container *ngIf=\"!(dragging$ | async); else draggingContent\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n <span>{{ 'chatDocumentsUpload.dragAndDrop' | transloco }}</span>\n <span class=\"text-orange\">{{ 'chatDocumentsUpload.clickToBrowse' | transloco }}</span>\n </ng-container>\n <ng-template #draggingContent>\n <span>{{ 'chatDocumentsUpload.dropFiles' | transloco }}</span>\n </ng-template>\n </div>\n\n <div *ngIf=\"(uploading$ | async) || (indexing$ | async)\" class=\"dropzone dropzone--active\">\n <ng-container *ngIf=\"(uploading$ | async); else indexingState\">\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <span>\n {{ 'chatDocumentsUpload.uploadingFiles' | transloco: { count: (flow.transfers$ | async)!.transfers.length } }}\n </span>\n <span *ngIf=\"(uploadingInfos$ | async) as uploadingInfos\">{{ uploadingInfos.progress | number:'1.0-0' }}%</span>\n </ng-container>\n <ng-template #indexingState>\n <i class=\"fas fa-spinner fa-pulse\"></i>\n <ng-container *ngIf=\"indexingInfos$ | async as indexingInfo\">\n <span>\n {{ 'chatDocumentsUpload.indexingFiles' | transloco: { count: indexingInfo.docs.length } }}\n </span>\n <span>{{ getIndexingProgress(indexingInfo) * 100 | number:'1.0-0' }}%</span>\n </ng-container>\n </ng-template>\n </div>\n\n <ul *ngIf=\"errorAlerts.length > 0\" class=\"error-list mt-3\">\n <li *ngFor=\"let error of errorAlerts\">\n {{ error }}\n </li>\n </ul>\n\n <div *ngIf=\"((flow.transfers$ | async)?.transfers?.length > 0) && !(uploading$ | async)\" class=\"file-list mt-3\">\n <ul>\n <li *ngFor=\"let transfer of (flow.transfers$ | async)!.transfers; trackBy: trackTransfer\">\n <sq-format-icon [extension]=\"transfer.flowFile.getExtension()\" class=\"me-1\"></sq-format-icon>\n <span class=\"me-1\" [title]=\"transfer.name\">{{ transfer.name }}</span>\n <button\n type=\"button\"\n (click)=\"flow.cancelFile(transfer)\"\n [title]=\"'chatDocumentsUpload.cancel' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"fas fa-trash\"></i>\n </button>\n </li>\n </ul>\n </div>\n\n <div class=\"d-flex mt-2\">\n <button\n type=\"button\"\n class=\"btn btn-light cancel-btn me-2\"\n (click)=\"flow.cancel()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.cancel' | transloco }}\n </button>\n <button\n type=\"button\"\n class=\"upload-btn\"\n (click)=\"upload()\"\n [disabled]=\"!((flow.transfers$ | async)?.transfers?.length > 0) || (uploading$ | async) || (indexing$ | async)\">\n {{ 'chatDocumentsUpload.upload' | transloco }}\n </button>\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}@keyframes dash-move{0%{background-position:0 0}to{background-position:100% 0}}.file-upload-container{width:100%;position:relative;padding:20px;background-color:var(--ast-primary-bg, #f2f8fe)}.file-upload-container .dropzone{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100px;border:2px dashed var(--ast-primary-color, #005DA7);border-color:var(--ast-secondary-color, #FF732E) var(--ast-primary-color, #005DA7) var(--ast-primary-color, #005DA7) var(--ast-secondary-color, #FF732E);border-radius:5px;padding:10px;cursor:pointer;background-color:var(--ast-primary-bg, #f2f8fe);transition:background-color .3s ease;color:var(--ast-primary-color, #005DA7)}.file-upload-container .dropzone--active{background-color:var(--ast-secondary-bg, #FFF8F1);color:var(--ast-secondary-color, #FF732E);border-color:var(--ast-secondary-color, #FF732E)}.file-upload-container .dropzone i{font-size:x-large}.file-upload-container .dropzone span{margin:0;font-size:small}.file-upload-container .dropzone span.text-orange{color:var(--ast-secondary-color, #FF732E)}.file-upload-container .file-list h6{color:#a9a9a9}.file-upload-container .file-list ul{list-style-type:none;padding:0}.file-upload-container .file-list ul li{display:flex;align-items:center;padding:10px;background-color:var(--ast-primary-bg, #f2f8fe);margin-bottom:5px;border-radius:5px;font-size:small}.file-upload-container .file-list ul li span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.file-upload-container .file-list ul li i{cursor:pointer}.file-upload-container .file-list ul li i:hover{color:var(--ast-primary-color, #005DA7)}.file-upload-container .error-list{display:flex;flex-direction:column;list-style:disc;background:var(--ast-error-color, rgba(249, 58, 55, .7));color:#fff;border-radius:5px}.file-upload-container .error-list li{padding:3px}.file-upload-container .upload-btn{background:linear-gradient(to right,#1d4ed8,#ec4899,#f97316);color:#fff;border:none;padding:8px 16px;border-radius:5px;cursor:pointer;width:100%}.file-upload-container .upload-btn:hover{background:linear-gradient(to right,#1d4ed8cc,#ec4899cc,#f97316cc)}.file-upload-container .upload-btn[disabled]{opacity:.3;cursor:not-allowed}.file-upload-container .cancel-btn{cursor:pointer;pointer-events:unset;width:100%}.file-upload-container .cancel-btn[disabled]{opacity:.3;cursor:not-allowed}\n"] }]
5262
5374
  }], propDecorators: { pollingInterval: [{
@@ -5267,16 +5379,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5267
5379
  }] } });
5268
5380
 
5269
5381
  class DocumentListComponent {
5270
- constructor() {
5271
- this.groupedUploadedDocuments$ = new BehaviorSubject([]);
5272
- this.deletingAll = false;
5273
- this._subscription = new Subscription();
5274
- this.documentsUploadService = inject(DocumentsUploadService);
5275
- this.notificationsService = inject(NotificationsService);
5276
- this.appService = inject(AppService);
5277
- this.transloco = inject(TranslocoService);
5278
- this.assistantUtils = inject(AssistantUtils);
5279
- }
5382
+ groupedUploadedDocuments$ = new BehaviorSubject([]);
5383
+ documentToDelete;
5384
+ deletingAll = false;
5385
+ _subscription = new Subscription();
5386
+ documentsUploadService = inject(DocumentsUploadService);
5387
+ notificationsService = inject(NotificationsService);
5388
+ appService = inject(AppService);
5389
+ transloco = inject(TranslocoService);
5390
+ assistantUtils = inject(AssistantUtils);
5280
5391
  ngOnInit() {
5281
5392
  this._subscription.add(of(isAuthenticated()).pipe(switchMap((_) => this.appService.init()), tap((_) => {
5282
5393
  this.onUpdateUploadedDocumentsList();
@@ -5386,23 +5497,21 @@ class DocumentListComponent {
5386
5497
  return Array.from(groupedUploadedDocuments, ([key, value]) => ({ key, value }));
5387
5498
  ;
5388
5499
  }
5389
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5390
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DocumentListComponent, isStandalone: true, selector: "sq-document-list", providers: [provideTranslocoScope('chat-documents-upload')], ngImport: i0, template: "<div class=\"alert alert-danger\" *ngIf=\"deletingAll\">\n <span>{{ 'chatDocumentsUpload.deleteAllDocumentsText' | transloco }}</span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"deletingAll=false\">{{ 'chatDocumentsUpload.cancel' | transloco }}</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteAllDocuments()\">{{ 'chatDocumentsUpload.confirm' | transloco }}</button>\n </div>\n</div>\n\n<div *ngFor=\"let group of (groupedUploadedDocuments$ | async)\" class=\"uploaded-docs\">\n <span class=\"uploaded-docs-date\">{{group.key | transloco}}</span>\n <div *ngFor=\"let doc of group.value\">\n <div class=\"uploaded-doc p-2\">\n <sq-format-icon [extension]=\"doc.fileExt\" class=\"me-1\"></sq-format-icon>\n <span class=\"title me-1\" [title]=\"doc.fileName\">{{doc.fileName}}</span>\n <button\n type=\"button\"\n (click)=\"deleteDocument($event, doc)\"\n [title]=\"'chatDocumentsUpload.delete' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"uploaded-doc-actions fas fa-trash ms-1\"></i>\n </button>\n </div>\n\n <div class=\"alert alert-warning\" *ngIf=\"documentToDelete && documentToDelete.id === doc.id\">\n <span>\n {{ 'chatDocumentsUpload.deleteDocumentText' | transloco: { title: documentToDelete!.fileName } }}\n </span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"documentToDelete=undefined\">{{ 'chatDocumentsUpload.cancel' | transloco }}</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteDocument()\">{{ 'chatDocumentsUpload.confirm' | transloco }}</button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.uploaded-docs{padding:.3rem 1rem}.uploaded-docs-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.uploaded-docs .uploaded-doc{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.uploaded-docs .uploaded-doc span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.uploaded-docs .uploaded-doc .uploaded-doc-actions{display:none}.uploaded-docs .uploaded-doc .uploaded-doc-actions:hover{color:var(--ast-primary-color, #005DA7)}.uploaded-docs .uploaded-doc:hover{background-color:var(--ast-uploaded-doc-hover-background, #f2f8fe)}.uploaded-docs .uploaded-doc:hover .uploaded-doc-actions{display:block}.uploaded-docs .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
5500
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5501
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DocumentListComponent, isStandalone: true, selector: "sq-document-list", providers: [provideTranslocoScope('chat-documents-upload')], ngImport: i0, template: "<div class=\"alert alert-danger\" *ngIf=\"deletingAll\">\n <span>{{ 'chatDocumentsUpload.deleteAllDocumentsText' | transloco }}</span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"deletingAll=false\">{{ 'chatDocumentsUpload.cancel' | transloco }}</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteAllDocuments()\">{{ 'chatDocumentsUpload.confirm' | transloco }}</button>\n </div>\n</div>\n\n<div *ngFor=\"let group of (groupedUploadedDocuments$ | async)\" class=\"uploaded-docs\">\n <span class=\"uploaded-docs-date\">{{group.key | transloco}}</span>\n <div *ngFor=\"let doc of group.value\">\n <div class=\"uploaded-doc p-2\">\n <sq-format-icon [extension]=\"doc.fileExt\" class=\"me-1\"></sq-format-icon>\n <span class=\"title me-1\" [title]=\"doc.fileName\">{{doc.fileName}}</span>\n <button\n type=\"button\"\n (click)=\"deleteDocument($event, doc)\"\n [title]=\"'chatDocumentsUpload.delete' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"uploaded-doc-actions fas fa-trash ms-1\"></i>\n </button>\n </div>\n\n <div class=\"alert alert-warning\" *ngIf=\"documentToDelete && documentToDelete.id === doc.id\">\n <span>\n {{ 'chatDocumentsUpload.deleteDocumentText' | transloco: { title: documentToDelete!.fileName } }}\n </span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"documentToDelete=undefined\">{{ 'chatDocumentsUpload.cancel' | transloco }}</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteDocument()\">{{ 'chatDocumentsUpload.confirm' | transloco }}</button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.uploaded-docs{padding:.3rem 1rem}.uploaded-docs-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.uploaded-docs .uploaded-doc{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.uploaded-docs .uploaded-doc span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.uploaded-docs .uploaded-doc .uploaded-doc-actions{display:none}.uploaded-docs .uploaded-doc .uploaded-doc-actions:hover{color:var(--ast-primary-color, #005DA7)}.uploaded-docs .uploaded-doc:hover{background-color:var(--ast-uploaded-doc-hover-background, #f2f8fe)}.uploaded-docs .uploaded-doc:hover .uploaded-doc-actions{display:block}.uploaded-docs .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
5391
5502
  }
5392
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentListComponent, decorators: [{
5503
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentListComponent, decorators: [{
5393
5504
  type: Component,
5394
5505
  args: [{ selector: "sq-document-list", standalone: true, providers: [provideTranslocoScope('chat-documents-upload')], imports: [CommonModule, FormatIconComponent, TranslocoPipe], template: "<div class=\"alert alert-danger\" *ngIf=\"deletingAll\">\n <span>{{ 'chatDocumentsUpload.deleteAllDocumentsText' | transloco }}</span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"deletingAll=false\">{{ 'chatDocumentsUpload.cancel' | transloco }}</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteAllDocuments()\">{{ 'chatDocumentsUpload.confirm' | transloco }}</button>\n </div>\n</div>\n\n<div *ngFor=\"let group of (groupedUploadedDocuments$ | async)\" class=\"uploaded-docs\">\n <span class=\"uploaded-docs-date\">{{group.key | transloco}}</span>\n <div *ngFor=\"let doc of group.value\">\n <div class=\"uploaded-doc p-2\">\n <sq-format-icon [extension]=\"doc.fileExt\" class=\"me-1\"></sq-format-icon>\n <span class=\"title me-1\" [title]=\"doc.fileName\">{{doc.fileName}}</span>\n <button\n type=\"button\"\n (click)=\"deleteDocument($event, doc)\"\n [title]=\"'chatDocumentsUpload.delete' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"uploaded-doc-actions fas fa-trash ms-1\"></i>\n </button>\n </div>\n\n <div class=\"alert alert-warning\" *ngIf=\"documentToDelete && documentToDelete.id === doc.id\">\n <span>\n {{ 'chatDocumentsUpload.deleteDocumentText' | transloco: { title: documentToDelete!.fileName } }}\n </span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"documentToDelete=undefined\">{{ 'chatDocumentsUpload.cancel' | transloco }}</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteDocument()\">{{ 'chatDocumentsUpload.confirm' | transloco }}</button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.uploaded-docs{padding:.3rem 1rem}.uploaded-docs-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.uploaded-docs .uploaded-doc{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.uploaded-docs .uploaded-doc span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.uploaded-docs .uploaded-doc .uploaded-doc-actions{display:none}.uploaded-docs .uploaded-doc .uploaded-doc-actions:hover{color:var(--ast-primary-color, #005DA7)}.uploaded-docs .uploaded-doc:hover{background-color:var(--ast-uploaded-doc-hover-background, #f2f8fe)}.uploaded-docs .uploaded-doc:hover .uploaded-doc-actions{display:block}.uploaded-docs .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
5395
5506
  }] });
5396
5507
 
5397
5508
  class DocumentOverviewComponent {
5398
- constructor() {
5399
- this.disabledUpload = true;
5400
- this.onUpload = new EventEmitter();
5401
- this._subscription = new Subscription();
5402
- this.documentsUploadService = inject(DocumentsUploadService);
5403
- this.notificationsService = inject(NotificationsService);
5404
- this.appService = inject(AppService);
5405
- }
5509
+ disabledUpload = true;
5510
+ onUpload = new EventEmitter();
5511
+ _subscription = new Subscription();
5512
+ documentsUploadService = inject(DocumentsUploadService);
5513
+ notificationsService = inject(NotificationsService);
5514
+ appService = inject(AppService);
5406
5515
  ngOnInit() {
5407
5516
  this._subscription.add(of(isAuthenticated()).pipe(switchMap((_) => this.appService.init()), tap((_) => this.documentsUploadService.init()), switchMap((_) => this.documentsUploadService.getDocumentsList()), catchError$1((error) => {
5408
5517
  console.error(error);
@@ -5414,10 +5523,10 @@ class DocumentOverviewComponent {
5414
5523
  ngOnDestroy() {
5415
5524
  this._subscription.unsubscribe();
5416
5525
  }
5417
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentOverviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5418
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DocumentOverviewComponent, isStandalone: true, selector: "sq-document-overview", inputs: { disabledUpload: "disabledUpload" }, outputs: { onUpload: "onUpload" }, providers: [provideTranslocoScope('chat-documents-upload')], ngImport: i0, template: "<div class=\"d-flex\">\n <span class=\"overview-text flex-grow-1\">\n {{ 'chatDocumentsUpload.uploadedDocuments' | transloco: { count: (documentsUploadService.uploadedDocuments$ | async)?.length || 0 } }}\n </span>\n <button class=\"btn btn-light\" [title]=\"'chatDocumentsUpload.uploadToSources' | transloco\" (click)=\"onUpload.emit()\" [disabled]=\"disabledUpload\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n </button>\n</div>\n", styles: [".overview-text{font-style:italic;padding:.5rem .8rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
5526
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentOverviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5527
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DocumentOverviewComponent, isStandalone: true, selector: "sq-document-overview", inputs: { disabledUpload: "disabledUpload" }, outputs: { onUpload: "onUpload" }, providers: [provideTranslocoScope('chat-documents-upload')], ngImport: i0, template: "<div class=\"d-flex\">\n <span class=\"overview-text flex-grow-1\">\n {{ 'chatDocumentsUpload.uploadedDocuments' | transloco: { count: (documentsUploadService.uploadedDocuments$ | async)?.length || 0 } }}\n </span>\n <button class=\"btn btn-light\" [title]=\"'chatDocumentsUpload.uploadToSources' | transloco\" (click)=\"onUpload.emit()\" [disabled]=\"disabledUpload\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n </button>\n</div>\n", styles: [".overview-text{font-style:italic;padding:.5rem .8rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
5419
5528
  }
5420
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentOverviewComponent, decorators: [{
5529
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentOverviewComponent, decorators: [{
5421
5530
  type: Component,
5422
5531
  args: [{ selector: "sq-document-overview", standalone: true, providers: [provideTranslocoScope('chat-documents-upload')], imports: [CommonModule, TranslocoPipe], template: "<div class=\"d-flex\">\n <span class=\"overview-text flex-grow-1\">\n {{ 'chatDocumentsUpload.uploadedDocuments' | transloco: { count: (documentsUploadService.uploadedDocuments$ | async)?.length || 0 } }}\n </span>\n <button class=\"btn btn-light\" [title]=\"'chatDocumentsUpload.uploadToSources' | transloco\" (click)=\"onUpload.emit()\" [disabled]=\"disabledUpload\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n </button>\n</div>\n", styles: [".overview-text{font-style:italic;padding:.5rem .8rem}\n"] }]
5423
5532
  }], propDecorators: { disabledUpload: [{
@@ -5427,14 +5536,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5427
5536
  }] } });
5428
5537
 
5429
5538
  class ChatReferenceImageComponent {
5430
- constructor() {
5431
- this.id = input.required();
5432
- this.ref = input.required();
5433
- this.openPreview = output();
5434
- this.openDocument = output();
5435
- this.openModal = output();
5436
- this.modalTpl = viewChild("modal");
5437
- }
5539
+ id = input.required(...(ngDevMode ? [{ debugName: "id" }] : []));
5540
+ ref = input.required(...(ngDevMode ? [{ debugName: "ref" }] : []));
5541
+ openPreview = output();
5542
+ openDocument = output();
5543
+ openModal = output();
5544
+ modalTpl = viewChild("modal", ...(ngDevMode ? [{ debugName: "modalTpl" }] : []));
5438
5545
  previewClicked() {
5439
5546
  if (!this.ref() || !this.ref().article || !this.ref().articleId)
5440
5547
  return;
@@ -5456,23 +5563,21 @@ class ChatReferenceImageComponent {
5456
5563
  modalClicked() {
5457
5564
  this.modalTpl()?.nativeElement?.showModal();
5458
5565
  }
5459
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatReferenceImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5460
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ChatReferenceImageComponent, isStandalone: true, selector: "ChatReferenceImage", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, ref: { classPropertyName: "ref", publicName: "ref", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { openPreview: "openPreview", openDocument: "openDocument", openModal: "openModal" }, providers: [provideTranslocoScope('chat-reference')], viewQueries: [{ propertyName: "modalTpl", first: true, predicate: ["modal"], descendants: true, isSignal: true }], ngImport: i0, template: "<header>\n <span class=\"reference\">{{ id().split('.')[0] }}</span>\n\n <sq-format-icon [extension]=\"ref().article?.fileext\" />\n\n <p>{{ ref().article?.title ?? ('chatReference.untitledImage' | transloco) }}</p>\n\n <a role=\"button\" [title]=\"'chatReference.previewDocument' | transloco\" (click)=\"previewClicked()\">\n <i class=\"fas fa-eye\"></i>\n </a>\n\n @if (ref().article?.url1 || ref().article?.originalUrl) {\n <a role=\"button\" [title]=\"'chatReference.openDocument' | transloco\" (click)=\"documentClicked()\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </a>\n }\n</header>\n\n@if (ref().url) {\n <div style=\"display: flex; align-items: start; gap: 0.25rem\">\n <span class=\"reference\">Img-{{ id() }}</span>\n\n <img [src]=\"ref().url\" (click)=\"modalClicked()\" [alt]=\"ref().description\" />\n </div>\n}\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"ref().url\" [alt]=\"ref().description\"/>\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:flex;flex-direction:column;gap:.5rem;padding:.5rem;background-color:#00f;box-shadow:0 .5rem 1rem #00000026;font-size:.875rem;background-color:var(--ast-reference-expanded-hover-bg, white)}\n"], dependencies: [{ kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
5566
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatReferenceImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5567
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ChatReferenceImageComponent, isStandalone: true, selector: "ChatReferenceImage", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, ref: { classPropertyName: "ref", publicName: "ref", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { openPreview: "openPreview", openDocument: "openDocument", openModal: "openModal" }, providers: [provideTranslocoScope('chat-reference')], viewQueries: [{ propertyName: "modalTpl", first: true, predicate: ["modal"], descendants: true, isSignal: true }], ngImport: i0, template: "<header>\n <span class=\"reference\">{{ id().split('.')[0] }}</span>\n\n <sq-format-icon [extension]=\"ref().article?.fileext\" />\n\n <p>{{ ref().article?.title ?? ('chatReference.untitledImage' | transloco) }}</p>\n\n <a role=\"button\" [title]=\"'chatReference.previewDocument' | transloco\" (click)=\"previewClicked()\">\n <i class=\"fas fa-eye\"></i>\n </a>\n\n @if (ref().article?.url1 || ref().article?.originalUrl) {\n <a role=\"button\" [title]=\"'chatReference.openDocument' | transloco\" (click)=\"documentClicked()\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </a>\n }\n</header>\n\n@if (ref().url) {\n <div style=\"display: flex; align-items: start; gap: 0.25rem\">\n <span class=\"reference\">Img-{{ id() }}</span>\n\n <img [src]=\"ref().url\" (click)=\"modalClicked()\" [alt]=\"ref().description\" />\n </div>\n}\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"ref().url\" [alt]=\"ref().description\"/>\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:flex;flex-direction:column;gap:.5rem;padding:.5rem;background-color:#00f;box-shadow:0 .5rem 1rem #00000026;font-size:.875rem;background-color:var(--ast-reference-expanded-hover-bg, white)}\n"], dependencies: [{ kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
5461
5568
  }
5462
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatReferenceImageComponent, decorators: [{
5569
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatReferenceImageComponent, decorators: [{
5463
5570
  type: Component,
5464
5571
  args: [{ selector: "ChatReferenceImage", standalone: true, providers: [provideTranslocoScope('chat-reference')], imports: [FormatIconComponent, TranslocoPipe], template: "<header>\n <span class=\"reference\">{{ id().split('.')[0] }}</span>\n\n <sq-format-icon [extension]=\"ref().article?.fileext\" />\n\n <p>{{ ref().article?.title ?? ('chatReference.untitledImage' | transloco) }}</p>\n\n <a role=\"button\" [title]=\"'chatReference.previewDocument' | transloco\" (click)=\"previewClicked()\">\n <i class=\"fas fa-eye\"></i>\n </a>\n\n @if (ref().article?.url1 || ref().article?.originalUrl) {\n <a role=\"button\" [title]=\"'chatReference.openDocument' | transloco\" (click)=\"documentClicked()\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </a>\n }\n</header>\n\n@if (ref().url) {\n <div style=\"display: flex; align-items: start; gap: 0.25rem\">\n <span class=\"reference\">Img-{{ id() }}</span>\n\n <img [src]=\"ref().url\" (click)=\"modalClicked()\" [alt]=\"ref().description\" />\n </div>\n}\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"ref().url\" [alt]=\"ref().description\"/>\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:flex;flex-direction:column;gap:.5rem;padding:.5rem;background-color:#00f;box-shadow:0 .5rem 1rem #00000026;font-size:.875rem;background-color:var(--ast-reference-expanded-hover-bg, white)}\n"] }]
5465
- }] });
5572
+ }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: true }] }], ref: [{ type: i0.Input, args: [{ isSignal: true, alias: "ref", required: true }] }], openPreview: [{ type: i0.Output, args: ["openPreview"] }], openDocument: [{ type: i0.Output, args: ["openDocument"] }], openModal: [{ type: i0.Output, args: ["openModal"] }], modalTpl: [{ type: i0.ViewChild, args: ["modal", { isSignal: true }] }] } });
5466
5573
 
5467
5574
  class ChatReferencePageComponent {
5468
- constructor() {
5469
- this.id = input.required();
5470
- this.ref = input.required();
5471
- this.openPreview = output();
5472
- this.openDocument = output();
5473
- this.openModal = output();
5474
- this.modalTpl = viewChild("modal");
5475
- }
5575
+ id = input.required(...(ngDevMode ? [{ debugName: "id" }] : []));
5576
+ ref = input.required(...(ngDevMode ? [{ debugName: "ref" }] : []));
5577
+ openPreview = output();
5578
+ openDocument = output();
5579
+ openModal = output();
5580
+ modalTpl = viewChild("modal", ...(ngDevMode ? [{ debugName: "modalTpl" }] : []));
5476
5581
  previewClicked() {
5477
5582
  if (!this.ref() || !this.ref().article || !this.ref().articleId)
5478
5583
  return;
@@ -5494,13 +5599,13 @@ class ChatReferencePageComponent {
5494
5599
  modalClicked() {
5495
5600
  this.modalTpl()?.nativeElement?.showModal();
5496
5601
  }
5497
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatReferencePageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5498
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ChatReferencePageComponent, isStandalone: true, selector: "ChatReferencePage", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, ref: { classPropertyName: "ref", publicName: "ref", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { openPreview: "openPreview", openDocument: "openDocument", openModal: "openModal" }, providers: [provideTranslocoScope('chat-reference')], viewQueries: [{ propertyName: "modalTpl", first: true, predicate: ["modal"], descendants: true, isSignal: true }], ngImport: i0, template: "<header>\n <span class=\"reference\">{{ id().split(\".\")[0] }}</span>\n\n <sq-format-icon [extension]=\"ref().article?.fileext\" />\n\n <p>{{ ref().article?.title ?? ('chatReference.untitledImage' | transloco) }}</p>\n\n <a role=\"button\" [title]=\"'chatReference.previewDocument' | transloco\" (click)=\"previewClicked()\">\n <i class=\"fas fa-eye\"></i>\n </a>\n\n @if (ref().article?.url1 || ref().article?.originalUrl) {\n <a role=\"button\" [title]=\"'chatReference.openDocument' | transloco\" (click)=\"documentClicked()\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </a>\n }\n</header>\n\n@if (ref().url) {\n <div style=\"display: flex; align-items: start; gap: 0.25rem\">\n <span class=\"reference\">Page-{{ id() }}</span>\n\n <img [src]=\"ref().url\" (click)=\"modalClicked()\" [alt]=\"ref().description\" />\n </div>\n}\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"ref().url\" [alt]=\"ref().description\" />\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:flex;flex-direction:column;gap:.5rem;padding:.5rem;background-color:#00f;box-shadow:0 .5rem 1rem #00000026;font-size:.875rem;background-color:var(--ast-reference-expanded-hover-bg, white)}\n"], dependencies: [{ kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
5602
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatReferencePageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5603
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ChatReferencePageComponent, isStandalone: true, selector: "ChatReferencePage", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, ref: { classPropertyName: "ref", publicName: "ref", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { openPreview: "openPreview", openDocument: "openDocument", openModal: "openModal" }, providers: [provideTranslocoScope('chat-reference')], viewQueries: [{ propertyName: "modalTpl", first: true, predicate: ["modal"], descendants: true, isSignal: true }], ngImport: i0, template: "<header>\n <span class=\"reference\">{{ id().split(\".\")[0] }}</span>\n\n <sq-format-icon [extension]=\"ref().article?.fileext\" />\n\n <p>{{ ref().article?.title ?? ('chatReference.untitledImage' | transloco) }}</p>\n\n <a role=\"button\" [title]=\"'chatReference.previewDocument' | transloco\" (click)=\"previewClicked()\">\n <i class=\"fas fa-eye\"></i>\n </a>\n\n @if (ref().article?.url1 || ref().article?.originalUrl) {\n <a role=\"button\" [title]=\"'chatReference.openDocument' | transloco\" (click)=\"documentClicked()\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </a>\n }\n</header>\n\n@if (ref().url) {\n <div style=\"display: flex; align-items: start; gap: 0.25rem\">\n <span class=\"reference\">Page-{{ id() }}</span>\n\n <img [src]=\"ref().url\" (click)=\"modalClicked()\" [alt]=\"ref().description\" />\n </div>\n}\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"ref().url\" [alt]=\"ref().description\" />\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:flex;flex-direction:column;gap:.5rem;padding:.5rem;background-color:#00f;box-shadow:0 .5rem 1rem #00000026;font-size:.875rem;background-color:var(--ast-reference-expanded-hover-bg, white)}\n"], dependencies: [{ kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
5499
5604
  }
5500
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatReferencePageComponent, decorators: [{
5605
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChatReferencePageComponent, decorators: [{
5501
5606
  type: Component,
5502
5607
  args: [{ selector: "ChatReferencePage", standalone: true, providers: [provideTranslocoScope('chat-reference')], imports: [FormatIconComponent, TranslocoPipe], template: "<header>\n <span class=\"reference\">{{ id().split(\".\")[0] }}</span>\n\n <sq-format-icon [extension]=\"ref().article?.fileext\" />\n\n <p>{{ ref().article?.title ?? ('chatReference.untitledImage' | transloco) }}</p>\n\n <a role=\"button\" [title]=\"'chatReference.previewDocument' | transloco\" (click)=\"previewClicked()\">\n <i class=\"fas fa-eye\"></i>\n </a>\n\n @if (ref().article?.url1 || ref().article?.originalUrl) {\n <a role=\"button\" [title]=\"'chatReference.openDocument' | transloco\" (click)=\"documentClicked()\">\n <i class=\"fas fa-arrow-up-right-from-square\"></i>\n </a>\n }\n</header>\n\n@if (ref().url) {\n <div style=\"display: flex; align-items: start; gap: 0.25rem\">\n <span class=\"reference\">Page-{{ id() }}</span>\n\n <img [src]=\"ref().url\" (click)=\"modalClicked()\" [alt]=\"ref().description\" />\n </div>\n}\n\n<dialog #modal>\n <button class=\"close\" (click)=\"modalTpl()?.nativeElement?.close()\">\n <i class=\"fas fa-xmark\"></i>\n </button>\n\n <img [src]=\"ref().url\" [alt]=\"ref().description\" />\n</dialog>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference,:host ::ng-deep .attachment .reference{position:relative;bottom:var(--ast-reference-bottom, .3em);font-weight:var(--ast-reference-font-weight, bold);padding:var(--ast-reference-padding, 0 .2em);margin:var(--ast-reference-margin, 0 .1em);border-radius:var(--ast-reference-border-radius, .2em);background-color:var(--ast-reference-background-color, lightblue);color:var(--ast-reference-color, black)}:host ::ng-deep .reference,:host ::ng-deep .message-content .reference{font-size:var(--ast-reference-message-font-size, .7em)}:host ::ng-deep .attachment .reference{font-size:var(--ast-reference-attachment-font-size, 13px)}sq-format-icon{color:var(--ast-secondary-color, #FF732E);margin-left:var(--ast-size-1, .25rem);margin-right:var(--ast-size-2, .5rem)}.reference-data{display:flex;flex-direction:row;align-items:baseline;padding:var(--ast-size-1, .25rem);cursor:pointer}.reference-data span.title{color:var(--ast-secondary-color, #FF732E);flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:var(--font-weight-bold, 500);cursor:pointer}.reference-data i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}.reference-data i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}.reference-data:not(.expanded) i{opacity:0}.reference-data:not(.expanded):hover i{opacity:1}.reference-passages{white-space:normal;font-style:italic;font-weight:400;padding:1rem 0;color:var(--ast-reference-passages-color, black)}.reference-passages .reference-passage{display:flex;align-items:baseline;padding-left:2.5rem;padding-right:1rem;word-wrap:break-word}.reference-passages .reference-passage+.reference-passage{padding-top:1rem}.reference-passages .reference-passage .reference{white-space:nowrap;margin-right:var(--ast-size-2, .5rem)}.reference-tooltip{max-width:600px!important;box-shadow:0 .5rem 1rem #00000026;padding:.5rem;font-size:.875rem}.w-100{width:100%}header{display:flex;flex-direction:row;align-items:baseline;gap:var(--ast-size-1, .25rem);cursor:pointer}header a{color:var(--ast-secondary-color, #FF732E);font-weight:var(--font-weight-bold, 500)}header i{padding:var(--ast-size-1, .25rem);margin-left:var(--ast-size-1, .25rem);cursor:pointer;color:var(--ast-reference-icon-color, black)}header i.active{color:var(--ast-reference-icon-active-color, white);background-color:var(--ast-secondary-color, #FF732E)}header p{flex-grow:1;flex-shrink:1;margin:0!important;overflow-x:hidden;text-overflow:ellipsis}img{max-width:30vw;max-height:30vh;object-fit:contain}dialog ::backdrop{background-color:#000c}dialog img{max-width:90vw;max-height:90vh;object-fit:contain}dialog button.close{position:absolute;top:0;right:0;border:solid 1px black;background-color:#fff;color:#000;font-size:1rem;cursor:pointer}\n", ":host{display:flex;flex-direction:column;gap:.5rem;padding:.5rem;background-color:#00f;box-shadow:0 .5rem 1rem #00000026;font-size:.875rem;background-color:var(--ast-reference-expanded-hover-bg, white)}\n"] }]
5503
- }] });
5608
+ }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: true }] }], ref: [{ type: i0.Input, args: [{ isSignal: true, alias: "ref", required: true }] }], openPreview: [{ type: i0.Output, args: ["openPreview"] }], openDocument: [{ type: i0.Output, args: ["openDocument"] }], openModal: [{ type: i0.Output, args: ["openModal"] }], modalTpl: [{ type: i0.ViewChild, args: ["modal", { isSignal: true }] }] } });
5504
5609
 
5505
5610
  const ASSISTANT_CUSTOM_ELEMENTS = new InjectionToken('ASSISTANT_CUSTOM_ELEMENTS', {
5506
5611
  providedIn: 'root',
@@ -5513,10 +5618,8 @@ const ASSISTANT_CUSTOM_ELEMENTS = new InjectionToken('ASSISTANT_CUSTOM_ELEMENTS'
5513
5618
  * It is called through APP_INITIALIZER to ensure that custom elements are registered before the application starts.
5514
5619
  */
5515
5620
  class CustomElementsService {
5516
- constructor() {
5517
- this._injector = inject(Injector);
5518
- this._customElements = inject(ASSISTANT_CUSTOM_ELEMENTS);
5519
- }
5621
+ _injector = inject(Injector);
5622
+ _customElements = inject(ASSISTANT_CUSTOM_ELEMENTS);
5520
5623
  setupCustomElements() {
5521
5624
  Object.entries(this._customElements).forEach(([tagName, component]) => {
5522
5625
  if (!customElements.get(tagName)) {
@@ -5527,10 +5630,10 @@ class CustomElementsService {
5527
5630
  }
5528
5631
  });
5529
5632
  }
5530
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomElementsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5531
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomElementsService, providedIn: "root" }); }
5633
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CustomElementsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
5634
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CustomElementsService, providedIn: "root" });
5532
5635
  }
5533
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomElementsService, decorators: [{
5636
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CustomElementsService, decorators: [{
5534
5637
  type: Injectable,
5535
5638
  args: [{ providedIn: "root" }]
5536
5639
  }] });
@@ -5539,9 +5642,10 @@ function initializeCustomElements(customElementsService) {
5539
5642
  }
5540
5643
 
5541
5644
  class DocumentReferenceComponent {
5542
- constructor() {
5543
- this.ref = {};
5544
- }
5645
+ // je suis obligé d'utiliser les décorateurs @Input() car Angular ne supporte pas les inputs (signal) dans les web elements en Angular v18
5646
+ id;
5647
+ attachment;
5648
+ ref = {};
5545
5649
  ngOnChanges() {
5546
5650
  if (!this.attachment)
5547
5651
  return;
@@ -5565,8 +5669,8 @@ class DocumentReferenceComponent {
5565
5669
  detail: { reference: attachment }
5566
5670
  }));
5567
5671
  }
5568
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5569
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DocumentReferenceComponent, isStandalone: true, selector: "document-reference", inputs: { id: "id", attachment: "attachment" }, usesOnChanges: true, ngImport: i0, template: `
5672
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5673
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DocumentReferenceComponent, isStandalone: true, selector: "document-reference", inputs: { id: "id", attachment: "attachment" }, usesOnChanges: true, ngImport: i0, template: `
5570
5674
  <a
5571
5675
  class="reference"
5572
5676
  role="button"
@@ -5587,9 +5691,9 @@ class DocumentReferenceComponent {
5587
5691
  (openDocument)="onOpenDocument($event)"
5588
5692
  ></sq-chat-reference>
5589
5693
  </ng-template>
5590
- `, isInline: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: ChatReferenceComponent, selector: "sq-chat-reference", inputs: ["reference", "attachment", "partId", "referenceMap", "images", "pages"], outputs: ["openDocument", "openPreview"] }] }); }
5694
+ `, isInline: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: ChatReferenceComponent, selector: "sq-chat-reference", inputs: ["reference", "attachment", "partId", "referenceMap", "images", "pages"], outputs: ["openDocument", "openPreview"] }] });
5591
5695
  }
5592
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentReferenceComponent, decorators: [{
5696
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DocumentReferenceComponent, decorators: [{
5593
5697
  type: Component,
5594
5698
  args: [{ selector: "document-reference", imports: [TooltipDirective, ChatReferenceComponent], template: `
5595
5699
  <a
@@ -5620,9 +5724,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5620
5724
  }] } });
5621
5725
 
5622
5726
  class PageReferenceComponent {
5623
- constructor() {
5624
- this.ref = {};
5625
- }
5727
+ // je suis obligé d'utiliser les décorateurs @Input() car Angular ne supporte pas les inputs (signal) dans les web elements en Angular v18
5728
+ id;
5729
+ attachment;
5730
+ ref = {};
5626
5731
  ngOnChanges() {
5627
5732
  if (!this.attachment)
5628
5733
  return;
@@ -5646,8 +5751,8 @@ class PageReferenceComponent {
5646
5751
  detail: { reference: attachment }
5647
5752
  }));
5648
5753
  }
5649
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PageReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5650
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PageReferenceComponent, isStandalone: true, selector: "page-reference", inputs: { id: "id", attachment: "attachment" }, usesOnChanges: true, ngImport: i0, template: `
5754
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PageReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5755
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: PageReferenceComponent, isStandalone: true, selector: "page-reference", inputs: { id: "id", attachment: "attachment" }, usesOnChanges: true, ngImport: i0, template: `
5651
5756
  <span
5652
5757
  class="reference"
5653
5758
  [sqTooltip]="{ obj: ref, id }"
@@ -5665,9 +5770,9 @@ class PageReferenceComponent {
5665
5770
  (openDocument)="onOpenDocument($event)"
5666
5771
  />
5667
5772
  </ng-template>
5668
- `, isInline: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: ChatReferencePageComponent, selector: "ChatReferencePage", inputs: ["id", "ref"], outputs: ["openPreview", "openDocument", "openModal"] }] }); }
5773
+ `, isInline: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: ChatReferencePageComponent, selector: "ChatReferencePage", inputs: ["id", "ref"], outputs: ["openPreview", "openDocument", "openModal"] }] });
5669
5774
  }
5670
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PageReferenceComponent, decorators: [{
5775
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PageReferenceComponent, decorators: [{
5671
5776
  type: Component,
5672
5777
  args: [{ selector: "page-reference", imports: [TooltipDirective, ChatReferencePageComponent], template: `
5673
5778
  <span
@@ -5695,9 +5800,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5695
5800
  }] } });
5696
5801
 
5697
5802
  class ImageReferenceComponent {
5698
- constructor() {
5699
- this.ref = {};
5700
- }
5803
+ // je suis obligé d'utiliser les décorateurs @Input() car Angular ne supporte pas les inputs (signal) dans les web elements en Angular v18
5804
+ id;
5805
+ attachment;
5806
+ ref = {};
5701
5807
  ngOnChanges() {
5702
5808
  if (!this.attachment)
5703
5809
  return;
@@ -5721,8 +5827,8 @@ class ImageReferenceComponent {
5721
5827
  detail: { reference: attachment }
5722
5828
  }));
5723
5829
  }
5724
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5725
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ImageReferenceComponent, isStandalone: true, selector: "image-reference", inputs: { id: "id", attachment: "attachment" }, usesOnChanges: true, ngImport: i0, template: `
5830
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageReferenceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5831
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ImageReferenceComponent, isStandalone: true, selector: "image-reference", inputs: { id: "id", attachment: "attachment" }, usesOnChanges: true, ngImport: i0, template: `
5726
5832
  <span
5727
5833
  class="reference"
5728
5834
  [sqTooltip]="{ obj: ref, id }"
@@ -5740,9 +5846,9 @@ class ImageReferenceComponent {
5740
5846
  (openDocument)="onOpenDocument($event)"
5741
5847
  />
5742
5848
  </ng-template>
5743
- `, isInline: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: ChatReferenceImageComponent, selector: "ChatReferenceImage", inputs: ["id", "ref"], outputs: ["openPreview", "openDocument", "openModal"] }] }); }
5849
+ `, isInline: true, styles: ["div{border:1px solid #ccc;padding:8px;border-radius:4px;display:flex;gap:8px;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "component", type: ChatReferenceImageComponent, selector: "ChatReferenceImage", inputs: ["id", "ref"], outputs: ["openPreview", "openDocument", "openModal"] }] });
5744
5850
  }
5745
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageReferenceComponent, decorators: [{
5851
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ImageReferenceComponent, decorators: [{
5746
5852
  type: Component,
5747
5853
  args: [{ selector: "image-reference", imports: [TooltipDirective, ChatReferenceImageComponent], template: `
5748
5854
  <span
@@ -5770,11 +5876,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5770
5876
  }] } });
5771
5877
 
5772
5878
  class CodeBlockComponent {
5773
- constructor() {
5774
- this.langname = "";
5775
- this.el = inject(ElementRef);
5776
- this.copying = signal(false);
5777
- }
5879
+ langname = "";
5880
+ el = inject(ElementRef);
5881
+ copying = signal(false, ...(ngDevMode ? [{ debugName: "copying" }] : []));
5778
5882
  handleClick(event) {
5779
5883
  event.stopPropagation();
5780
5884
  // get the code content
@@ -5821,8 +5925,8 @@ class CodeBlockComponent {
5821
5925
  document.body.removeChild(textarea);
5822
5926
  }
5823
5927
  }
5824
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CodeBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5825
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CodeBlockComponent, isStandalone: true, selector: "code-block", inputs: { langname: "langname" }, ngImport: i0, template: `
5928
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CodeBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5929
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: CodeBlockComponent, isStandalone: true, selector: "code-block", inputs: { langname: "langname" }, ngImport: i0, template: `
5826
5930
  <div class="card mb-2">
5827
5931
  <div class="card-header d-flex justify-content-end align-items-center">
5828
5932
  <span class="me-auto">{{ langname || 'code'}}</span>
@@ -5836,13 +5940,12 @@ class CodeBlockComponent {
5836
5940
  </div>
5837
5941
  <ng-content></ng-content>
5838
5942
  </div>
5839
- `, isInline: true }); }
5943
+ `, isInline: true });
5840
5944
  }
5841
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CodeBlockComponent, decorators: [{
5945
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CodeBlockComponent, decorators: [{
5842
5946
  type: Component,
5843
5947
  args: [{
5844
5948
  selector: "code-block",
5845
- imports: [],
5846
5949
  template: `
5847
5950
  <div class="card mb-2">
5848
5951
  <div class="card-header d-flex justify-content-end align-items-center">
@@ -5865,10 +5968,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5865
5968
  }] } });
5866
5969
 
5867
5970
  class TableToolsComponent {
5868
- constructor() {
5869
- this.host = inject((ElementRef));
5870
- this.copied = signal(false);
5871
- }
5971
+ host = inject((ElementRef));
5972
+ copied = signal(false, ...(ngDevMode ? [{ debugName: "copied" }] : []));
5872
5973
  get table() {
5873
5974
  return this.host.nativeElement.querySelector('table');
5874
5975
  }
@@ -5925,8 +6026,8 @@ class TableToolsComponent {
5925
6026
  .join(','));
5926
6027
  return rows.join('\n');
5927
6028
  }
5928
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableToolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5929
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TableToolsComponent, isStandalone: true, selector: "table-tools", providers: [provideTranslocoScope('custom-elements')], ngImport: i0, template: `
6029
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TableToolsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6030
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: TableToolsComponent, isStandalone: true, selector: "table-tools", providers: [provideTranslocoScope('custom-elements')], ngImport: i0, template: `
5930
6031
  <div class="card mb-2">
5931
6032
  <div class="card-header d-flex justify-content-end align-items-center">
5932
6033
  <button class="btn btn-light btn-sm" (click)="copyAsCSV()" [sqTooltip]="copied() ? ('customElements.copied' | transloco) : ('customElements.copyAsCSV' | transloco)">
@@ -5942,9 +6043,9 @@ class TableToolsComponent {
5942
6043
  </div>
5943
6044
  <ng-content></ng-content>
5944
6045
  </div>
5945
- `, isInline: true, dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
6046
+ `, isInline: true, dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] });
5946
6047
  }
5947
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableToolsComponent, decorators: [{
6048
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TableToolsComponent, decorators: [{
5948
6049
  type: Component,
5949
6050
  args: [{
5950
6051
  selector: 'table-tools',
@@ -5971,6 +6072,62 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
5971
6072
  }]
5972
6073
  }] });
5973
6074
 
6075
+ class ChartPlotComponent {
6076
+ chartPlotRef;
6077
+ destroyRef = inject(DestroyRef);
6078
+ chart;
6079
+ constructor() {
6080
+ // Cleanup on destroy
6081
+ this.destroyRef.onDestroy(() => {
6082
+ this.chart?.destroy();
6083
+ });
6084
+ }
6085
+ ngAfterViewInit() {
6086
+ const config = this.parseChartJsConfig();
6087
+ if (!config)
6088
+ return;
6089
+ // ✅ Render chart directly into canvas
6090
+ this.chart = new Chart(this.chartPlotRef.nativeElement, config);
6091
+ }
6092
+ parseChartJsConfig() {
6093
+ const rawConfig = this.getChartJsConfig();
6094
+ if (!rawConfig)
6095
+ return null;
6096
+ try {
6097
+ return JSON.parse(rawConfig);
6098
+ }
6099
+ catch (e) {
6100
+ return null;
6101
+ }
6102
+ }
6103
+ getChartJsConfig() {
6104
+ return this.chartPlotRef.nativeElement.parentElement?.textContent?.trim() ?? '';
6105
+ }
6106
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartPlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6107
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ChartPlotComponent, isStandalone: true, selector: "chart-plot", viewQueries: [{ propertyName: "chartPlotRef", first: true, predicate: ["chartPlot"], descendants: true, static: true }], ngImport: i0, template: `
6108
+ <canvas #chartPlot></canvas>
6109
+ <div style="display:none">
6110
+ <ng-content></ng-content>
6111
+ </div>
6112
+ `, isInline: true });
6113
+ }
6114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartPlotComponent, decorators: [{
6115
+ type: Component,
6116
+ args: [{
6117
+ selector: 'chart-plot',
6118
+ standalone: true,
6119
+ template: `
6120
+ <canvas #chartPlot></canvas>
6121
+ <div style="display:none">
6122
+ <ng-content></ng-content>
6123
+ </div>
6124
+ `
6125
+ }]
6126
+ }], ctorParameters: () => [], propDecorators: { chartPlotRef: [{
6127
+ type: ViewChild,
6128
+ args: ['chartPlot', { static: true }]
6129
+ }] } });
6130
+
5974
6131
  function markdownItCodeBlockPlugin(md) {
5975
6132
  const defaultFenceRenderer = md.renderer.rules.fence;
5976
6133
  md.renderer.rules.fence = (tokens, idx, options, env, self) => {
@@ -6212,6 +6369,24 @@ function markdownItTableToolsPlugin(md) {
6212
6369
  };
6213
6370
  }
6214
6371
 
6372
+ /**
6373
+ * Markdown-it plugin to replace ```chartjs fenced blocks
6374
+ * with <chart-plot> custom elements.
6375
+ */
6376
+ function markdownItChartJsPlugin(md) {
6377
+ const defaultFence = md.renderer.rules.fence;
6378
+ md.renderer.rules.fence = (tokens, idx, options, env, self) => {
6379
+ const token = tokens[idx];
6380
+ // Only process fenced blocks labeled 'chartjs'
6381
+ if (token.info.trim() !== 'chartjs') {
6382
+ return defaultFence(tokens, idx, options, env, self);
6383
+ }
6384
+ const content = token.content.trim();
6385
+ console.log('chartjs content:', content);
6386
+ return `<chart-plot>${content}</chart-plot>`;
6387
+ };
6388
+ }
6389
+
6215
6390
  // src/app/core/app-injector.ts
6216
6391
  /**
6217
6392
  * Static variable to hold the root Angular Injector.
@@ -6236,13 +6411,13 @@ function getAppInjector() {
6236
6411
  */
6237
6412
  const ASSISTANT_UNAUTHORIZED_ACTION_TOKEN = new InjectionToken('Function to execute on 401 unauthorized');
6238
6413
  class GlobalErrorHandlerService {
6414
+ unauthorizedAction = inject(ASSISTANT_UNAUTHORIZED_ACTION_TOKEN, { optional: true });
6415
+ /** Prevents infinite unauthorized attempts */
6416
+ _authAttempted = false;
6417
+ /** Tracks if a re-authentication process is currently in progress */
6418
+ _reauthInProgress = false;
6419
+ authEventListener = null;
6239
6420
  constructor() {
6240
- this.unauthorizedAction = inject(ASSISTANT_UNAUTHORIZED_ACTION_TOKEN, { optional: true });
6241
- /** Prevents infinite unauthorized attempts */
6242
- this._authAttempted = false;
6243
- /** Tracks if a re-authentication process is currently in progress */
6244
- this._reauthInProgress = false;
6245
- this.authEventListener = null;
6246
6421
  this.setupAuthEventListener();
6247
6422
  }
6248
6423
  /**
@@ -6311,10 +6486,10 @@ class GlobalErrorHandlerService {
6311
6486
  this.authEventListener = null;
6312
6487
  }
6313
6488
  }
6314
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GlobalErrorHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6315
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GlobalErrorHandlerService, providedIn: 'root' }); }
6489
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GlobalErrorHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
6490
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GlobalErrorHandlerService, providedIn: 'root' });
6316
6491
  }
6317
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GlobalErrorHandlerService, decorators: [{
6492
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GlobalErrorHandlerService, decorators: [{
6318
6493
  type: Injectable,
6319
6494
  args: [{
6320
6495
  providedIn: 'root',
@@ -6404,5 +6579,5 @@ const handleUnauthorizedLogic = () => {
6404
6579
  * Generated bundle index. Do not edit.
6405
6580
  */
6406
6581
 
6407
- export { ASSISTANT_CUSTOM_ELEMENTS, ASSISTANT_MARKDOWN_IT_PLUGINS, ASSISTANT_UNAUTHORIZED_ACTION_TOKEN, ChatComponent, ChatReferenceComponent, ChatReferenceImageComponent, ChatReferencePageComponent, ChatService, ChatSettingsV3Component, CodeBlockComponent, CustomElementsService, DocumentListComponent, DocumentOverviewComponent, DocumentReferenceComponent, DocumentUploadComponent, DocumentsUploadService, EMBEDDED_IMAGE_NAME, EMBEDDED_PAGE_NAME, FormatIconComponent, GlobalErrorHandlerService, ImageReferenceComponent, InitialsAvatarComponent, InstanceManagerService, NotificationsService, PageReferenceComponent, SavedChatsComponent, TableToolsComponent, chatConfigSchema, connectionSettingsSchema, getAppInjector, handleUnauthorizedLogic, initializeCustomElements, initializeFetchInterceptor, markdownItCodeBlockPlugin, markdownItDocumentReferencePlugin, markdownItImageReferencePlugin, markdownItLinkPlugin, markdownItPageReferencePlugin, markdownItTableToolsPlugin, setAppInjector };
6582
+ export { ASSISTANT_CUSTOM_ELEMENTS, ASSISTANT_MARKDOWN_IT_PLUGINS, ASSISTANT_UNAUTHORIZED_ACTION_TOKEN, ChartPlotComponent, ChatComponent, ChatReferenceComponent, ChatReferenceImageComponent, ChatReferencePageComponent, ChatService, ChatSettingsV3Component, CodeBlockComponent, CustomElementsService, DocumentListComponent, DocumentOverviewComponent, DocumentReferenceComponent, DocumentUploadComponent, DocumentsUploadService, EMBEDDED_IMAGE_NAME, EMBEDDED_PAGE_NAME, FormatIconComponent, GlobalErrorHandlerService, ImageReferenceComponent, InitialsAvatarComponent, InstanceManagerService, NotificationsService, PageReferenceComponent, SavedChatsComponent, TableToolsComponent, chatConfigSchema, connectionSettingsSchema, getAppInjector, handleUnauthorizedLogic, initializeCustomElements, initializeFetchInterceptor, markdownItChartJsPlugin, markdownItCodeBlockPlugin, markdownItDocumentReferencePlugin, markdownItImageReferencePlugin, markdownItLinkPlugin, markdownItPageReferencePlugin, markdownItTableToolsPlugin, setAppInjector };
6408
6583
  //# sourceMappingURL=sinequa-assistant-chat.mjs.map