@nuraly/lumenui 0.1.0

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 (755) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +248 -0
  3. package/dist/nuralyui.bundle.js +29209 -0
  4. package/dist/nuralyui.bundle.js.gz +0 -0
  5. package/dist/src/components/alert/alert.component.d.ts +103 -0
  6. package/dist/src/components/alert/alert.component.js +225 -0
  7. package/dist/src/components/alert/alert.style.d.ts +14 -0
  8. package/dist/src/components/alert/alert.style.js +191 -0
  9. package/dist/src/components/alert/alert.types.d.ts +46 -0
  10. package/dist/src/components/alert/alert.types.js +7 -0
  11. package/dist/src/components/alert/bundle.js +231 -0
  12. package/dist/src/components/alert/bundle.js.gz +0 -0
  13. package/dist/src/components/alert/index.d.ts +8 -0
  14. package/dist/src/components/alert/index.js +8 -0
  15. package/dist/src/components/alert/react.d.ts +5 -0
  16. package/dist/src/components/alert/react.js +17 -0
  17. package/dist/src/components/badge/badge.component.d.ts +148 -0
  18. package/dist/src/components/badge/badge.component.js +270 -0
  19. package/dist/src/components/badge/badge.style.d.ts +14 -0
  20. package/dist/src/components/badge/badge.style.js +250 -0
  21. package/dist/src/components/badge/badge.types.d.ts +84 -0
  22. package/dist/src/components/badge/badge.types.js +7 -0
  23. package/dist/src/components/badge/bundle.js +277 -0
  24. package/dist/src/components/badge/bundle.js.gz +0 -0
  25. package/dist/src/components/badge/index.d.ts +2 -0
  26. package/dist/src/components/badge/index.js +2 -0
  27. package/dist/src/components/badge/react.d.ts +3 -0
  28. package/dist/src/components/badge/react.js +10 -0
  29. package/dist/src/components/breadcrumb/breadcrumb.component.d.ts +121 -0
  30. package/dist/src/components/breadcrumb/breadcrumb.component.js +257 -0
  31. package/dist/src/components/breadcrumb/breadcrumb.style.d.ts +14 -0
  32. package/dist/src/components/breadcrumb/breadcrumb.style.js +153 -0
  33. package/dist/src/components/breadcrumb/breadcrumb.types.d.ts +63 -0
  34. package/dist/src/components/breadcrumb/breadcrumb.types.js +7 -0
  35. package/dist/src/components/breadcrumb/bundle.js +213 -0
  36. package/dist/src/components/breadcrumb/bundle.js.gz +0 -0
  37. package/dist/src/components/breadcrumb/index.d.ts +2 -0
  38. package/dist/src/components/breadcrumb/index.js +2 -0
  39. package/dist/src/components/breadcrumb/react.d.ts +5 -0
  40. package/dist/src/components/breadcrumb/react.js +12 -0
  41. package/dist/src/components/button/bundle.js +606 -0
  42. package/dist/src/components/button/bundle.js.gz +0 -0
  43. package/dist/src/components/button/button.component.d.ts +96 -0
  44. package/dist/src/components/button/button.component.js +312 -0
  45. package/dist/src/components/button/button.style.d.ts +10 -0
  46. package/dist/src/components/button/button.style.js +535 -0
  47. package/dist/src/components/button/button.types.d.ts +57 -0
  48. package/dist/src/components/button/button.types.js +2 -0
  49. package/dist/src/components/button/index.d.ts +2 -0
  50. package/dist/src/components/button/index.js +2 -0
  51. package/dist/src/components/button/react.d.ts +5 -0
  52. package/dist/src/components/button/react.js +12 -0
  53. package/dist/src/components/canvas/base-canvas.component.d.ts +177 -0
  54. package/dist/src/components/canvas/base-canvas.component.js +865 -0
  55. package/dist/src/components/canvas/bundle.js +16664 -0
  56. package/dist/src/components/canvas/bundle.js.gz +0 -0
  57. package/dist/src/components/canvas/canvas.component.d.ts +2 -0
  58. package/dist/src/components/canvas/canvas.component.js +295 -0
  59. package/dist/src/components/canvas/canvas.constants.d.ts +66 -0
  60. package/dist/src/components/canvas/canvas.constants.js +61 -0
  61. package/dist/src/components/canvas/chatbot-panel.style.d.ts +11 -0
  62. package/dist/src/components/canvas/chatbot-panel.style.js +189 -0
  63. package/dist/src/components/canvas/index.d.ts +13 -0
  64. package/dist/src/components/canvas/index.js +21 -0
  65. package/dist/src/components/canvas/react.d.ts +354 -0
  66. package/dist/src/components/canvas/react.js +41 -0
  67. package/dist/src/components/canvas/whiteboard-canvas.component.d.ts +63 -0
  68. package/dist/src/components/canvas/whiteboard-canvas.component.js +356 -0
  69. package/dist/src/components/canvas/whiteboard-canvas.style.d.ts +7 -0
  70. package/dist/src/components/canvas/whiteboard-canvas.style.js +1011 -0
  71. package/dist/src/components/canvas/whiteboard-node.component.d.ts +87 -0
  72. package/dist/src/components/canvas/whiteboard-node.component.js +809 -0
  73. package/dist/src/components/canvas/whiteboard-node.style.d.ts +7 -0
  74. package/dist/src/components/canvas/whiteboard-node.style.js +775 -0
  75. package/dist/src/components/canvas/workflow-canvas.component.d.ts +150 -0
  76. package/dist/src/components/canvas/workflow-canvas.component.js +1468 -0
  77. package/dist/src/components/canvas/workflow-canvas.style.d.ts +8 -0
  78. package/dist/src/components/canvas/workflow-canvas.style.js +2903 -0
  79. package/dist/src/components/canvas/workflow-canvas.types.d.ts +710 -0
  80. package/dist/src/components/canvas/workflow-canvas.types.js +2305 -0
  81. package/dist/src/components/canvas/workflow-node.component.d.ts +96 -0
  82. package/dist/src/components/canvas/workflow-node.component.js +752 -0
  83. package/dist/src/components/canvas/workflow-node.style.d.ts +8 -0
  84. package/dist/src/components/canvas/workflow-node.style.js +1053 -0
  85. package/dist/src/components/card/bundle.js +69 -0
  86. package/dist/src/components/card/bundle.js.gz +0 -0
  87. package/dist/src/components/card/card.component.d.ts +30 -0
  88. package/dist/src/components/card/card.component.js +64 -0
  89. package/dist/src/components/card/card.style.d.ts +2 -0
  90. package/dist/src/components/card/card.style.js +62 -0
  91. package/dist/src/components/card/card.types.d.ts +17 -0
  92. package/dist/src/components/card/card.types.js +2 -0
  93. package/dist/src/components/card/index.d.ts +3 -0
  94. package/dist/src/components/card/index.js +3 -0
  95. package/dist/src/components/card/react.d.ts +5 -0
  96. package/dist/src/components/card/react.js +12 -0
  97. package/dist/src/components/carousel/bundle.js +96 -0
  98. package/dist/src/components/carousel/bundle.js.gz +0 -0
  99. package/dist/src/components/carousel/carousel.component.d.ts +19 -0
  100. package/dist/src/components/carousel/carousel.component.js +128 -0
  101. package/dist/src/components/carousel/carousel.style.d.ts +2 -0
  102. package/dist/src/components/carousel/carousel.style.js +68 -0
  103. package/dist/src/components/carousel/index.d.ts +2 -0
  104. package/dist/src/components/carousel/index.js +2 -0
  105. package/dist/src/components/carousel/react.d.ts +5 -0
  106. package/dist/src/components/carousel/react.js +12 -0
  107. package/dist/src/components/chatbot/bundle.js +2527 -0
  108. package/dist/src/components/chatbot/bundle.js.gz +0 -0
  109. package/dist/src/components/chatbot/chatbot.component.d.ts +215 -0
  110. package/dist/src/components/chatbot/chatbot.component.js +1097 -0
  111. package/dist/src/components/chatbot/chatbot.style.d.ts +3 -0
  112. package/dist/src/components/chatbot/chatbot.style.js +1638 -0
  113. package/dist/src/components/chatbot/chatbot.types.d.ts +246 -0
  114. package/dist/src/components/chatbot/chatbot.types.js +124 -0
  115. package/dist/src/components/chatbot/index.d.ts +13 -0
  116. package/dist/src/components/chatbot/index.js +20 -0
  117. package/dist/src/components/chatbot/react.d.ts +54 -0
  118. package/dist/src/components/chatbot/react.js +55 -0
  119. package/dist/src/components/checkbox/bundle.js +352 -0
  120. package/dist/src/components/checkbox/bundle.js.gz +0 -0
  121. package/dist/src/components/checkbox/checkbox.component.d.ts +62 -0
  122. package/dist/src/components/checkbox/checkbox.component.js +178 -0
  123. package/dist/src/components/checkbox/checkbox.style.d.ts +2 -0
  124. package/dist/src/components/checkbox/checkbox.style.js +323 -0
  125. package/dist/src/components/checkbox/checkbox.types.d.ts +6 -0
  126. package/dist/src/components/checkbox/checkbox.types.js +2 -0
  127. package/dist/src/components/checkbox/index.d.ts +2 -0
  128. package/dist/src/components/checkbox/index.js +2 -0
  129. package/dist/src/components/checkbox/react.d.ts +5 -0
  130. package/dist/src/components/checkbox/react.js +12 -0
  131. package/dist/src/components/code-editor/bundle.js +55 -0
  132. package/dist/src/components/code-editor/bundle.js.gz +0 -0
  133. package/dist/src/components/code-editor/code-editor.component.d.ts +119 -0
  134. package/dist/src/components/code-editor/code-editor.component.js +532 -0
  135. package/dist/src/components/code-editor/code-editor.style.d.ts +7 -0
  136. package/dist/src/components/code-editor/code-editor.style.js +39 -0
  137. package/dist/src/components/code-editor/code-editor.types.d.ts +39 -0
  138. package/dist/src/components/code-editor/code-editor.types.js +22 -0
  139. package/dist/src/components/code-editor/index.d.ts +9 -0
  140. package/dist/src/components/code-editor/index.js +9 -0
  141. package/dist/src/components/collapse/bundle.js +308 -0
  142. package/dist/src/components/collapse/bundle.js.gz +0 -0
  143. package/dist/src/components/collapse/collapse.component.d.ts +93 -0
  144. package/dist/src/components/collapse/collapse.component.js +322 -0
  145. package/dist/src/components/collapse/collapse.style.d.ts +11 -0
  146. package/dist/src/components/collapse/collapse.style.js +234 -0
  147. package/dist/src/components/collapse/collapse.type.d.ts +79 -0
  148. package/dist/src/components/collapse/collapse.type.js +11 -0
  149. package/dist/src/components/collapse/index.d.ts +2 -0
  150. package/dist/src/components/collapse/index.js +2 -0
  151. package/dist/src/components/collapse/react.d.ts +6 -0
  152. package/dist/src/components/collapse/react.js +13 -0
  153. package/dist/src/components/colorpicker/bundle.js +242 -0
  154. package/dist/src/components/colorpicker/bundle.js.gz +0 -0
  155. package/dist/src/components/colorpicker/color-holder.component.d.ts +50 -0
  156. package/dist/src/components/colorpicker/color-holder.component.js +116 -0
  157. package/dist/src/components/colorpicker/color-holder.style.d.ts +2 -0
  158. package/dist/src/components/colorpicker/color-holder.style.js +45 -0
  159. package/dist/src/components/colorpicker/color-picker.component.d.ts +178 -0
  160. package/dist/src/components/colorpicker/color-picker.component.js +374 -0
  161. package/dist/src/components/colorpicker/color-picker.style.d.ts +10 -0
  162. package/dist/src/components/colorpicker/color-picker.style.js +86 -0
  163. package/dist/src/components/colorpicker/color-picker.types.d.ts +60 -0
  164. package/dist/src/components/colorpicker/color-picker.types.js +2 -0
  165. package/dist/src/components/colorpicker/default-color-sets.component.d.ts +45 -0
  166. package/dist/src/components/colorpicker/default-color-sets.component.js +121 -0
  167. package/dist/src/components/colorpicker/default-color-sets.style.d.ts +2 -0
  168. package/dist/src/components/colorpicker/default-color-sets.style.js +34 -0
  169. package/dist/src/components/colorpicker/index.d.ts +3 -0
  170. package/dist/src/components/colorpicker/index.js +3 -0
  171. package/dist/src/components/colorpicker/react.d.ts +6 -0
  172. package/dist/src/components/colorpicker/react.js +13 -0
  173. package/dist/src/components/console/react.d.ts +340 -0
  174. package/dist/src/components/console/react.js +13 -0
  175. package/dist/src/components/container/bundle.js +161 -0
  176. package/dist/src/components/container/bundle.js.gz +0 -0
  177. package/dist/src/components/container/container.component.d.ts +85 -0
  178. package/dist/src/components/container/container.component.js +223 -0
  179. package/dist/src/components/container/container.style.d.ts +6 -0
  180. package/dist/src/components/container/container.style.js +146 -0
  181. package/dist/src/components/container/container.types.d.ts +67 -0
  182. package/dist/src/components/container/container.types.js +5 -0
  183. package/dist/src/components/container/index.d.ts +3 -0
  184. package/dist/src/components/container/index.js +3 -0
  185. package/dist/src/components/container/react.d.ts +3 -0
  186. package/dist/src/components/container/react.js +10 -0
  187. package/dist/src/components/datepicker/bundle.js +706 -0
  188. package/dist/src/components/datepicker/bundle.js.gz +0 -0
  189. package/dist/src/components/datepicker/datepicker.component.d.ts +190 -0
  190. package/dist/src/components/datepicker/datepicker.component.js +673 -0
  191. package/dist/src/components/datepicker/datepicker.constant.d.ts +60 -0
  192. package/dist/src/components/datepicker/datepicker.constant.js +60 -0
  193. package/dist/src/components/datepicker/datepicker.style.d.ts +17 -0
  194. package/dist/src/components/datepicker/datepicker.style.js +453 -0
  195. package/dist/src/components/datepicker/datepicker.style.variables.d.ts +2 -0
  196. package/dist/src/components/datepicker/datepicker.style.variables.js +119 -0
  197. package/dist/src/components/datepicker/datepicker.types.d.ts +142 -0
  198. package/dist/src/components/datepicker/datepicker.types.js +75 -0
  199. package/dist/src/components/datepicker/index.d.ts +4 -0
  200. package/dist/src/components/datepicker/index.js +4 -0
  201. package/dist/src/components/datepicker/react.d.ts +16 -0
  202. package/dist/src/components/datepicker/react.js +23 -0
  203. package/dist/src/components/db-connection-select/bundle.js +308 -0
  204. package/dist/src/components/db-connection-select/bundle.js.gz +0 -0
  205. package/dist/src/components/db-connection-select/db-connection-select.component.d.ts +105 -0
  206. package/dist/src/components/db-connection-select/db-connection-select.component.js +573 -0
  207. package/dist/src/components/db-connection-select/index.d.ts +7 -0
  208. package/dist/src/components/db-connection-select/index.js +7 -0
  209. package/dist/src/components/divider/bundle.js +143 -0
  210. package/dist/src/components/divider/bundle.js.gz +0 -0
  211. package/dist/src/components/divider/divider.component.d.ts +90 -0
  212. package/dist/src/components/divider/divider.component.js +168 -0
  213. package/dist/src/components/divider/divider.style.d.ts +3 -0
  214. package/dist/src/components/divider/divider.style.js +139 -0
  215. package/dist/src/components/divider/divider.types.d.ts +55 -0
  216. package/dist/src/components/divider/divider.types.js +6 -0
  217. package/dist/src/components/divider/index.d.ts +3 -0
  218. package/dist/src/components/divider/index.js +3 -0
  219. package/dist/src/components/divider/react.d.ts +3 -0
  220. package/dist/src/components/divider/react.js +10 -0
  221. package/dist/src/components/document/bundle.js +242 -0
  222. package/dist/src/components/document/bundle.js.gz +0 -0
  223. package/dist/src/components/document/document.component.d.ts +27 -0
  224. package/dist/src/components/document/document.component.js +136 -0
  225. package/dist/src/components/document/document.style.d.ts +3 -0
  226. package/dist/src/components/document/document.style.js +210 -0
  227. package/dist/src/components/document/document.types.d.ts +68 -0
  228. package/dist/src/components/document/document.types.js +7 -0
  229. package/dist/src/components/document/index.d.ts +3 -0
  230. package/dist/src/components/document/index.js +3 -0
  231. package/dist/src/components/document/react.d.ts +8 -0
  232. package/dist/src/components/document/react.js +15 -0
  233. package/dist/src/components/dropdown/bundle.js +528 -0
  234. package/dist/src/components/dropdown/bundle.js.gz +0 -0
  235. package/dist/src/components/dropdown/dropdown.component.d.ts +120 -0
  236. package/dist/src/components/dropdown/dropdown.component.js +390 -0
  237. package/dist/src/components/dropdown/dropdown.style.d.ts +2 -0
  238. package/dist/src/components/dropdown/dropdown.style.js +460 -0
  239. package/dist/src/components/dropdown/dropdown.types.d.ts +99 -0
  240. package/dist/src/components/dropdown/dropdown.types.js +2 -0
  241. package/dist/src/components/dropdown/index.d.ts +3 -0
  242. package/dist/src/components/dropdown/index.js +3 -0
  243. package/dist/src/components/dropdown/react.d.ts +7 -0
  244. package/dist/src/components/dropdown/react.js +14 -0
  245. package/dist/src/components/file-upload/bundle.js +472 -0
  246. package/dist/src/components/file-upload/bundle.js.gz +0 -0
  247. package/dist/src/components/file-upload/file-upload.component.d.ts +43 -0
  248. package/dist/src/components/file-upload/file-upload.component.js +398 -0
  249. package/dist/src/components/file-upload/index.d.ts +2 -0
  250. package/dist/src/components/file-upload/index.js +2 -0
  251. package/dist/src/components/file-upload/react.d.ts +7 -0
  252. package/dist/src/components/file-upload/react.js +14 -0
  253. package/dist/src/components/file-upload/styles.d.ts +2 -0
  254. package/dist/src/components/file-upload/styles.js +373 -0
  255. package/dist/src/components/file-upload/types.d.ts +11 -0
  256. package/dist/src/components/file-upload/types.js +2 -0
  257. package/dist/src/components/file-upload/utils.d.ts +6 -0
  258. package/dist/src/components/file-upload/utils.js +24 -0
  259. package/dist/src/components/flex/bundle.js +114 -0
  260. package/dist/src/components/flex/bundle.js.gz +0 -0
  261. package/dist/src/components/flex/flex.component.d.ts +89 -0
  262. package/dist/src/components/flex/flex.component.js +178 -0
  263. package/dist/src/components/flex/flex.style.d.ts +6 -0
  264. package/dist/src/components/flex/flex.style.js +101 -0
  265. package/dist/src/components/flex/flex.types.d.ts +63 -0
  266. package/dist/src/components/flex/flex.types.js +5 -0
  267. package/dist/src/components/flex/index.d.ts +3 -0
  268. package/dist/src/components/flex/index.js +3 -0
  269. package/dist/src/components/flex/react.d.ts +3 -0
  270. package/dist/src/components/flex/react.js +10 -0
  271. package/dist/src/components/form/bundle.js +98 -0
  272. package/dist/src/components/form/bundle.js.gz +0 -0
  273. package/dist/src/components/form/form.component.d.ts +279 -0
  274. package/dist/src/components/form/form.component.js +644 -0
  275. package/dist/src/components/form/form.style.d.ts +7 -0
  276. package/dist/src/components/form/form.style.js +68 -0
  277. package/dist/src/components/form/form.types.d.ts +92 -0
  278. package/dist/src/components/form/form.types.js +38 -0
  279. package/dist/src/components/form/index.d.ts +10 -0
  280. package/dist/src/components/form/index.js +13 -0
  281. package/dist/src/components/grid/bundle.js +202 -0
  282. package/dist/src/components/grid/bundle.js.gz +0 -0
  283. package/dist/src/components/grid/col.component.d.ts +103 -0
  284. package/dist/src/components/grid/col.component.js +253 -0
  285. package/dist/src/components/grid/col.style.d.ts +6 -0
  286. package/dist/src/components/grid/col.style.js +117 -0
  287. package/dist/src/components/grid/grid.types.d.ts +80 -0
  288. package/dist/src/components/grid/grid.types.js +16 -0
  289. package/dist/src/components/grid/index.d.ts +4 -0
  290. package/dist/src/components/grid/index.js +4 -0
  291. package/dist/src/components/grid/react.d.ts +5 -0
  292. package/dist/src/components/grid/react.js +17 -0
  293. package/dist/src/components/grid/row.component.d.ts +83 -0
  294. package/dist/src/components/grid/row.component.js +197 -0
  295. package/dist/src/components/grid/row.style.d.ts +6 -0
  296. package/dist/src/components/grid/row.style.js +68 -0
  297. package/dist/src/components/icon/bundle.js +340 -0
  298. package/dist/src/components/icon/bundle.js.gz +0 -0
  299. package/dist/src/components/icon/icon.component.d.ts +64 -0
  300. package/dist/src/components/icon/icon.component.js +207 -0
  301. package/dist/src/components/icon/icon.style.d.ts +2 -0
  302. package/dist/src/components/icon/icon.style.js +211 -0
  303. package/dist/src/components/icon/icon.types.d.ts +5 -0
  304. package/dist/src/components/icon/icon.types.js +2 -0
  305. package/dist/src/components/icon/icon.variables.d.ts +17 -0
  306. package/dist/src/components/icon/icon.variables.js +132 -0
  307. package/dist/src/components/icon/index.d.ts +2 -0
  308. package/dist/src/components/icon/index.js +2 -0
  309. package/dist/src/components/icon/react.d.ts +3 -0
  310. package/dist/src/components/icon/react.js +9 -0
  311. package/dist/src/components/iconpicker/bundle.js +2811 -0
  312. package/dist/src/components/iconpicker/bundle.js.gz +0 -0
  313. package/dist/src/components/iconpicker/icon-picker.component.d.ts +119 -0
  314. package/dist/src/components/iconpicker/icon-picker.component.js +337 -0
  315. package/dist/src/components/iconpicker/icon-picker.constant.d.ts +15 -0
  316. package/dist/src/components/iconpicker/icon-picker.constant.js +31 -0
  317. package/dist/src/components/iconpicker/icon-picker.style.d.ts +8 -0
  318. package/dist/src/components/iconpicker/icon-picker.style.js +216 -0
  319. package/dist/src/components/iconpicker/icon-picker.types.d.ts +49 -0
  320. package/dist/src/components/iconpicker/icon-picker.types.js +7 -0
  321. package/dist/src/components/iconpicker/index.d.ts +9 -0
  322. package/dist/src/components/iconpicker/index.js +9 -0
  323. package/dist/src/components/iconpicker/react.d.ts +14 -0
  324. package/dist/src/components/iconpicker/react.js +21 -0
  325. package/dist/src/components/image/bundle.js +98 -0
  326. package/dist/src/components/image/bundle.js.gz +0 -0
  327. package/dist/src/components/image/image.component.d.ts +31 -0
  328. package/dist/src/components/image/image.component.js +143 -0
  329. package/dist/src/components/image/image.style.d.ts +3 -0
  330. package/dist/src/components/image/image.style.js +83 -0
  331. package/dist/src/components/image/image.types.d.ts +68 -0
  332. package/dist/src/components/image/image.types.js +7 -0
  333. package/dist/src/components/image/index.d.ts +3 -0
  334. package/dist/src/components/image/index.js +3 -0
  335. package/dist/src/components/image/react.d.ts +8 -0
  336. package/dist/src/components/image/react.js +15 -0
  337. package/dist/src/components/input/bundle.js +930 -0
  338. package/dist/src/components/input/bundle.js.gz +0 -0
  339. package/dist/src/components/input/index.d.ts +3 -0
  340. package/dist/src/components/input/index.js +3 -0
  341. package/dist/src/components/input/input.component.d.ts +174 -0
  342. package/dist/src/components/input/input.component.js +490 -0
  343. package/dist/src/components/input/input.style.d.ts +2 -0
  344. package/dist/src/components/input/input.style.js +810 -0
  345. package/dist/src/components/input/input.types.d.ts +127 -0
  346. package/dist/src/components/input/input.types.js +75 -0
  347. package/dist/src/components/input/react.d.ts +9 -0
  348. package/dist/src/components/input/react.js +16 -0
  349. package/dist/src/components/input/validation.d.ts +3 -0
  350. package/dist/src/components/input/validation.js +3 -0
  351. package/dist/src/components/kv-secret-select/bundle.js +183 -0
  352. package/dist/src/components/kv-secret-select/bundle.js.gz +0 -0
  353. package/dist/src/components/kv-secret-select/index.d.ts +2 -0
  354. package/dist/src/components/kv-secret-select/index.js +2 -0
  355. package/dist/src/components/kv-secret-select/kv-secret-select.component.d.ts +83 -0
  356. package/dist/src/components/kv-secret-select/kv-secret-select.component.js +360 -0
  357. package/dist/src/components/label/bundle.js +104 -0
  358. package/dist/src/components/label/bundle.js.gz +0 -0
  359. package/dist/src/components/label/index.d.ts +2 -0
  360. package/dist/src/components/label/index.js +2 -0
  361. package/dist/src/components/label/label.component.d.ts +18 -0
  362. package/dist/src/components/label/label.component.js +64 -0
  363. package/dist/src/components/label/label.style.d.ts +3 -0
  364. package/dist/src/components/label/label.style.js +70 -0
  365. package/dist/src/components/label/label.style.variables.d.ts +2 -0
  366. package/dist/src/components/label/label.style.variables.js +35 -0
  367. package/dist/src/components/label/label.types.d.ts +42 -0
  368. package/dist/src/components/label/label.types.js +2 -0
  369. package/dist/src/components/label/react.d.ts +339 -0
  370. package/dist/src/components/label/react.js +12 -0
  371. package/dist/src/components/layout/bundle.js +220 -0
  372. package/dist/src/components/layout/bundle.js.gz +0 -0
  373. package/dist/src/components/layout/content.component.d.ts +35 -0
  374. package/dist/src/components/layout/content.component.js +47 -0
  375. package/dist/src/components/layout/content.style.d.ts +2 -0
  376. package/dist/src/components/layout/content.style.js +17 -0
  377. package/dist/src/components/layout/footer.component.d.ts +38 -0
  378. package/dist/src/components/layout/footer.component.js +60 -0
  379. package/dist/src/components/layout/footer.style.d.ts +2 -0
  380. package/dist/src/components/layout/footer.style.js +17 -0
  381. package/dist/src/components/layout/header.component.d.ts +39 -0
  382. package/dist/src/components/layout/header.component.js +61 -0
  383. package/dist/src/components/layout/header.style.d.ts +2 -0
  384. package/dist/src/components/layout/header.style.js +19 -0
  385. package/dist/src/components/layout/index.d.ts +8 -0
  386. package/dist/src/components/layout/index.js +7 -0
  387. package/dist/src/components/layout/layout.component.d.ts +50 -0
  388. package/dist/src/components/layout/layout.component.js +89 -0
  389. package/dist/src/components/layout/layout.style.d.ts +2 -0
  390. package/dist/src/components/layout/layout.style.js +23 -0
  391. package/dist/src/components/layout/layout.types.d.ts +75 -0
  392. package/dist/src/components/layout/layout.types.js +12 -0
  393. package/dist/src/components/layout/react.d.ts +14 -0
  394. package/dist/src/components/layout/react.js +37 -0
  395. package/dist/src/components/layout/sider.component.d.ts +116 -0
  396. package/dist/src/components/layout/sider.component.js +273 -0
  397. package/dist/src/components/layout/sider.style.d.ts +2 -0
  398. package/dist/src/components/layout/sider.style.js +104 -0
  399. package/dist/src/components/menu/bundle.js +520 -0
  400. package/dist/src/components/menu/bundle.js.gz +0 -0
  401. package/dist/src/components/menu/index.d.ts +4 -0
  402. package/dist/src/components/menu/index.js +2 -0
  403. package/dist/src/components/menu/menu.component.d.ts +87 -0
  404. package/dist/src/components/menu/menu.component.js +596 -0
  405. package/dist/src/components/menu/menu.constants.d.ts +12 -0
  406. package/dist/src/components/menu/menu.constants.js +14 -0
  407. package/dist/src/components/menu/menu.style.d.ts +2 -0
  408. package/dist/src/components/menu/menu.style.js +372 -0
  409. package/dist/src/components/menu/menu.types.d.ts +66 -0
  410. package/dist/src/components/menu/menu.types.js +7 -0
  411. package/dist/src/components/menu/react.d.ts +5 -0
  412. package/dist/src/components/menu/react.js +12 -0
  413. package/dist/src/components/modal/bundle.js +442 -0
  414. package/dist/src/components/modal/bundle.js.gz +0 -0
  415. package/dist/src/components/modal/index.d.ts +10 -0
  416. package/dist/src/components/modal/index.js +10 -0
  417. package/dist/src/components/modal/modal-manager.d.ts +72 -0
  418. package/dist/src/components/modal/modal-manager.js +170 -0
  419. package/dist/src/components/modal/modal.component.d.ts +121 -0
  420. package/dist/src/components/modal/modal.component.js +461 -0
  421. package/dist/src/components/modal/modal.style.d.ts +9 -0
  422. package/dist/src/components/modal/modal.style.js +369 -0
  423. package/dist/src/components/modal/modal.types.d.ts +105 -0
  424. package/dist/src/components/modal/modal.types.js +93 -0
  425. package/dist/src/components/modal/react.d.ts +9 -0
  426. package/dist/src/components/modal/react.js +16 -0
  427. package/dist/src/components/panel/bundle.js +1075 -0
  428. package/dist/src/components/panel/bundle.js.gz +0 -0
  429. package/dist/src/components/panel/index.d.ts +9 -0
  430. package/dist/src/components/panel/index.js +9 -0
  431. package/dist/src/components/panel/panel.component.d.ts +199 -0
  432. package/dist/src/components/panel/panel.component.js +720 -0
  433. package/dist/src/components/panel/panel.style.d.ts +7 -0
  434. package/dist/src/components/panel/panel.style.js +497 -0
  435. package/dist/src/components/panel/panel.types.d.ts +94 -0
  436. package/dist/src/components/panel/panel.types.js +50 -0
  437. package/dist/src/components/panel/react.d.ts +11 -0
  438. package/dist/src/components/panel/react.js +18 -0
  439. package/dist/src/components/popconfirm/bundle.js +438 -0
  440. package/dist/src/components/popconfirm/bundle.js.gz +0 -0
  441. package/dist/src/components/popconfirm/index.d.ts +4 -0
  442. package/dist/src/components/popconfirm/index.js +4 -0
  443. package/dist/src/components/popconfirm/popconfirm-manager.component.d.ts +129 -0
  444. package/dist/src/components/popconfirm/popconfirm-manager.component.js +372 -0
  445. package/dist/src/components/popconfirm/popconfirm-manager.style.d.ts +2 -0
  446. package/dist/src/components/popconfirm/popconfirm-manager.style.js +137 -0
  447. package/dist/src/components/popconfirm/popconfirm.component.d.ts +179 -0
  448. package/dist/src/components/popconfirm/popconfirm.component.js +409 -0
  449. package/dist/src/components/popconfirm/popconfirm.style.d.ts +2 -0
  450. package/dist/src/components/popconfirm/popconfirm.style.js +207 -0
  451. package/dist/src/components/popconfirm/popconfirm.types.d.ts +104 -0
  452. package/dist/src/components/popconfirm/popconfirm.types.js +2 -0
  453. package/dist/src/components/popconfirm/react.d.ts +7 -0
  454. package/dist/src/components/popconfirm/react.js +14 -0
  455. package/dist/src/components/radio/bundle.js +180 -0
  456. package/dist/src/components/radio/bundle.js.gz +0 -0
  457. package/dist/src/components/radio/index.d.ts +3 -0
  458. package/dist/src/components/radio/index.js +3 -0
  459. package/dist/src/components/radio/radio.component.d.ts +70 -0
  460. package/dist/src/components/radio/radio.component.js +187 -0
  461. package/dist/src/components/radio/radio.style.d.ts +7 -0
  462. package/dist/src/components/radio/radio.style.js +149 -0
  463. package/dist/src/components/radio/radio.types.d.ts +14 -0
  464. package/dist/src/components/radio/radio.types.js +15 -0
  465. package/dist/src/components/radio/react.d.ts +12 -0
  466. package/dist/src/components/radio/react.js +19 -0
  467. package/dist/src/components/radio-group/bundle.js +430 -0
  468. package/dist/src/components/radio-group/bundle.js.gz +0 -0
  469. package/dist/src/components/radio-group/index.d.ts +3 -0
  470. package/dist/src/components/radio-group/index.js +3 -0
  471. package/dist/src/components/radio-group/radio-group.component.d.ts +165 -0
  472. package/dist/src/components/radio-group/radio-group.component.js +437 -0
  473. package/dist/src/components/radio-group/radio-group.style.d.ts +7 -0
  474. package/dist/src/components/radio-group/radio-group.style.js +270 -0
  475. package/dist/src/components/radio-group/radio-group.types.d.ts +39 -0
  476. package/dist/src/components/radio-group/radio-group.types.js +29 -0
  477. package/dist/src/components/radio-group/radio.constant.d.ts +2 -0
  478. package/dist/src/components/radio-group/radio.constant.js +2 -0
  479. package/dist/src/components/radio-group/react.d.ts +10 -0
  480. package/dist/src/components/radio-group/react.js +17 -0
  481. package/dist/src/components/select/bundle.js +721 -0
  482. package/dist/src/components/select/bundle.js.gz +0 -0
  483. package/dist/src/components/select/index.d.ts +17 -0
  484. package/dist/src/components/select/index.js +20 -0
  485. package/dist/src/components/select/react.d.ts +19 -0
  486. package/dist/src/components/select/react.js +26 -0
  487. package/dist/src/components/select/select.component.d.ts +359 -0
  488. package/dist/src/components/select/select.component.js +775 -0
  489. package/dist/src/components/select/select.constant.d.ts +133 -0
  490. package/dist/src/components/select/select.constant.js +136 -0
  491. package/dist/src/components/select/select.style.d.ts +2 -0
  492. package/dist/src/components/select/select.style.js +533 -0
  493. package/dist/src/components/select/select.types.d.ts +100 -0
  494. package/dist/src/components/select/select.types.js +73 -0
  495. package/dist/src/components/skeleton/bundle.js +293 -0
  496. package/dist/src/components/skeleton/bundle.js.gz +0 -0
  497. package/dist/src/components/skeleton/index.d.ts +3 -0
  498. package/dist/src/components/skeleton/index.js +3 -0
  499. package/dist/src/components/skeleton/react.d.ts +3 -0
  500. package/dist/src/components/skeleton/react.js +10 -0
  501. package/dist/src/components/skeleton/skeleton.component.d.ts +165 -0
  502. package/dist/src/components/skeleton/skeleton.component.js +387 -0
  503. package/dist/src/components/skeleton/skeleton.style.d.ts +2 -0
  504. package/dist/src/components/skeleton/skeleton.style.js +224 -0
  505. package/dist/src/components/skeleton/skeleton.types.d.ts +82 -0
  506. package/dist/src/components/skeleton/skeleton.types.js +2 -0
  507. package/dist/src/components/slider-input/bundle.js +241 -0
  508. package/dist/src/components/slider-input/bundle.js.gz +0 -0
  509. package/dist/src/components/slider-input/index.d.ts +3 -0
  510. package/dist/src/components/slider-input/index.js +3 -0
  511. package/dist/src/components/slider-input/react.d.ts +340 -0
  512. package/dist/src/components/slider-input/react.js +13 -0
  513. package/dist/src/components/slider-input/slider-input.component.d.ts +38 -0
  514. package/dist/src/components/slider-input/slider-input.component.js +191 -0
  515. package/dist/src/components/slider-input/slider-input.style.d.ts +3 -0
  516. package/dist/src/components/slider-input/slider-input.style.js +171 -0
  517. package/dist/src/components/slider-input/slider-input.style.variables.d.ts +2 -0
  518. package/dist/src/components/slider-input/slider-input.style.variables.js +59 -0
  519. package/dist/src/components/slider-input/slider-input.types.d.ts +21 -0
  520. package/dist/src/components/slider-input/slider-input.types.js +6 -0
  521. package/dist/src/components/table/bundle.js +987 -0
  522. package/dist/src/components/table/bundle.js.gz +0 -0
  523. package/dist/src/components/table/index.d.ts +2 -0
  524. package/dist/src/components/table/index.js +2 -0
  525. package/dist/src/components/table/react.d.ts +7 -0
  526. package/dist/src/components/table/react.js +14 -0
  527. package/dist/src/components/table/table.component.d.ts +140 -0
  528. package/dist/src/components/table/table.component.js +433 -0
  529. package/dist/src/components/table/table.style.d.ts +3 -0
  530. package/dist/src/components/table/table.style.js +702 -0
  531. package/dist/src/components/table/table.types.d.ts +103 -0
  532. package/dist/src/components/table/table.types.js +2 -0
  533. package/dist/src/components/tabs/bundle.js +1782 -0
  534. package/dist/src/components/tabs/bundle.js.gz +0 -0
  535. package/dist/src/components/tabs/index.d.ts +9 -0
  536. package/dist/src/components/tabs/index.js +10 -0
  537. package/dist/src/components/tabs/react.d.ts +50 -0
  538. package/dist/src/components/tabs/react.js +50 -0
  539. package/dist/src/components/tabs/tabs.component.d.ts +100 -0
  540. package/dist/src/components/tabs/tabs.component.js +461 -0
  541. package/dist/src/components/tabs/tabs.constant.d.ts +20 -0
  542. package/dist/src/components/tabs/tabs.constant.js +21 -0
  543. package/dist/src/components/tabs/tabs.style.d.ts +9 -0
  544. package/dist/src/components/tabs/tabs.style.js +577 -0
  545. package/dist/src/components/tabs/tabs.types.d.ts +241 -0
  546. package/dist/src/components/tabs/tabs.types.js +13 -0
  547. package/dist/src/components/tag/bundle.js +108 -0
  548. package/dist/src/components/tag/bundle.js.gz +0 -0
  549. package/dist/src/components/tag/index.d.ts +2 -0
  550. package/dist/src/components/tag/index.js +2 -0
  551. package/dist/src/components/tag/react.d.ts +6 -0
  552. package/dist/src/components/tag/react.js +13 -0
  553. package/dist/src/components/tag/tag.component.d.ts +57 -0
  554. package/dist/src/components/tag/tag.component.js +157 -0
  555. package/dist/src/components/tag/tag.style.d.ts +7 -0
  556. package/dist/src/components/tag/tag.style.js +88 -0
  557. package/dist/src/components/tag/tag.types.d.ts +28 -0
  558. package/dist/src/components/tag/tag.types.js +7 -0
  559. package/dist/src/components/textarea/bundle.js +404 -0
  560. package/dist/src/components/textarea/bundle.js.gz +0 -0
  561. package/dist/src/components/textarea/index.d.ts +8 -0
  562. package/dist/src/components/textarea/index.js +7 -0
  563. package/dist/src/components/textarea/react.d.ts +9 -0
  564. package/dist/src/components/textarea/react.js +16 -0
  565. package/dist/src/components/textarea/textarea.component.d.ts +203 -0
  566. package/dist/src/components/textarea/textarea.component.js +657 -0
  567. package/dist/src/components/textarea/textarea.style.d.ts +59 -0
  568. package/dist/src/components/textarea/textarea.style.js +386 -0
  569. package/dist/src/components/textarea/textarea.types.d.ts +102 -0
  570. package/dist/src/components/textarea/textarea.types.js +14 -0
  571. package/dist/src/components/timeline/bundle.js +261 -0
  572. package/dist/src/components/timeline/bundle.js.gz +0 -0
  573. package/dist/src/components/timeline/index.d.ts +2 -0
  574. package/dist/src/components/timeline/index.js +2 -0
  575. package/dist/src/components/timeline/react.d.ts +3 -0
  576. package/dist/src/components/timeline/react.js +10 -0
  577. package/dist/src/components/timeline/timeline.component.d.ts +109 -0
  578. package/dist/src/components/timeline/timeline.component.js +214 -0
  579. package/dist/src/components/timeline/timeline.style.d.ts +14 -0
  580. package/dist/src/components/timeline/timeline.style.js +234 -0
  581. package/dist/src/components/timeline/timeline.types.d.ts +62 -0
  582. package/dist/src/components/timeline/timeline.types.js +7 -0
  583. package/dist/src/components/timepicker/bundle.js +810 -0
  584. package/dist/src/components/timepicker/bundle.js.gz +0 -0
  585. package/dist/src/components/timepicker/index.d.ts +12 -0
  586. package/dist/src/components/timepicker/index.js +12 -0
  587. package/dist/src/components/timepicker/timepicker.component.d.ts +115 -0
  588. package/dist/src/components/timepicker/timepicker.component.js +743 -0
  589. package/dist/src/components/timepicker/timepicker.constants.d.ts +85 -0
  590. package/dist/src/components/timepicker/timepicker.constants.js +85 -0
  591. package/dist/src/components/timepicker/timepicker.style.d.ts +7 -0
  592. package/dist/src/components/timepicker/timepicker.style.js +568 -0
  593. package/dist/src/components/timepicker/timepicker.style.variables.d.ts +2 -0
  594. package/dist/src/components/timepicker/timepicker.style.variables.js +122 -0
  595. package/dist/src/components/timepicker/timepicker.types.d.ts +161 -0
  596. package/dist/src/components/timepicker/timepicker.types.js +125 -0
  597. package/dist/src/components/toast/bundle.js +393 -0
  598. package/dist/src/components/toast/bundle.js.gz +0 -0
  599. package/dist/src/components/toast/index.d.ts +9 -0
  600. package/dist/src/components/toast/index.js +9 -0
  601. package/dist/src/components/toast/react.d.ts +7 -0
  602. package/dist/src/components/toast/react.js +19 -0
  603. package/dist/src/components/toast/toast.component.d.ts +152 -0
  604. package/dist/src/components/toast/toast.component.js +368 -0
  605. package/dist/src/components/toast/toast.style.d.ts +14 -0
  606. package/dist/src/components/toast/toast.style.js +338 -0
  607. package/dist/src/components/toast/toast.types.d.ts +124 -0
  608. package/dist/src/components/toast/toast.types.js +9 -0
  609. package/dist/src/components/tooltips/bundle.js +123 -0
  610. package/dist/src/components/tooltips/bundle.js.gz +0 -0
  611. package/dist/src/components/tooltips/index.d.ts +2 -0
  612. package/dist/src/components/tooltips/index.js +2 -0
  613. package/dist/src/components/tooltips/react.d.ts +1 -0
  614. package/dist/src/components/tooltips/react.js +2 -0
  615. package/dist/src/components/tooltips/tooltips.component.d.ts +33 -0
  616. package/dist/src/components/tooltips/tooltips.component.js +313 -0
  617. package/dist/src/components/tooltips/tooltips.constant.d.ts +13 -0
  618. package/dist/src/components/tooltips/tooltips.constant.js +15 -0
  619. package/dist/src/components/tooltips/tooltips.style.d.ts +2 -0
  620. package/dist/src/components/tooltips/tooltips.style.js +103 -0
  621. package/dist/src/components/tooltips/tooltips.variables.d.ts +2 -0
  622. package/dist/src/components/tooltips/tooltips.variables.js +14 -0
  623. package/dist/src/components/video/bundle.js +171 -0
  624. package/dist/src/components/video/bundle.js.gz +0 -0
  625. package/dist/src/components/video/index.d.ts +3 -0
  626. package/dist/src/components/video/index.js +3 -0
  627. package/dist/src/components/video/react.d.ts +10 -0
  628. package/dist/src/components/video/react.js +17 -0
  629. package/dist/src/components/video/video.component.d.ts +34 -0
  630. package/dist/src/components/video/video.component.js +184 -0
  631. package/dist/src/components/video/video.style.d.ts +3 -0
  632. package/dist/src/components/video/video.style.js +124 -0
  633. package/dist/src/components/video/video.types.d.ts +80 -0
  634. package/dist/src/components/video/video.types.js +7 -0
  635. package/package.json +215 -0
  636. package/packages/common/README.md +137 -0
  637. package/packages/common/dist/LICENSE +28 -0
  638. package/packages/common/dist/README.md +137 -0
  639. package/packages/common/dist/VERSIONS.md +4 -0
  640. package/packages/common/dist/constants/index.d.ts +2 -0
  641. package/packages/common/dist/constants/index.d.ts.map +1 -0
  642. package/packages/common/dist/constants/index.js +2 -0
  643. package/packages/common/dist/constants/index.js.map +1 -0
  644. package/packages/common/dist/constants.d.ts +17 -0
  645. package/packages/common/dist/constants.d.ts.map +1 -0
  646. package/packages/common/dist/constants.js +7 -0
  647. package/packages/common/dist/constants.js.map +1 -0
  648. package/packages/common/dist/controllers/index.d.ts +2 -0
  649. package/packages/common/dist/controllers/index.d.ts.map +1 -0
  650. package/packages/common/dist/controllers/index.js +2 -0
  651. package/packages/common/dist/controllers/index.js.map +1 -0
  652. package/packages/common/dist/controllers.d.ts +21 -0
  653. package/packages/common/dist/controllers.d.ts.map +1 -0
  654. package/packages/common/dist/controllers.js +22 -0
  655. package/packages/common/dist/controllers.js.map +1 -0
  656. package/packages/common/dist/index.d.ts +25 -0
  657. package/packages/common/dist/index.d.ts.map +1 -0
  658. package/packages/common/dist/index.js +27 -0
  659. package/packages/common/dist/index.js.map +1 -0
  660. package/packages/common/dist/mixins/index.d.ts +2 -0
  661. package/packages/common/dist/mixins/index.d.ts.map +1 -0
  662. package/packages/common/dist/mixins/index.js +3 -0
  663. package/packages/common/dist/mixins/index.js.map +1 -0
  664. package/packages/common/dist/mixins.d.ts +26 -0
  665. package/packages/common/dist/mixins.d.ts.map +1 -0
  666. package/packages/common/dist/mixins.js +29 -0
  667. package/packages/common/dist/mixins.js.map +1 -0
  668. package/packages/common/dist/shared/base-mixin.d.ts +42 -0
  669. package/packages/common/dist/shared/base-mixin.d.ts.map +1 -0
  670. package/packages/common/dist/shared/base-mixin.js +38 -0
  671. package/packages/common/dist/shared/base-mixin.js.map +1 -0
  672. package/packages/common/dist/shared/constants.d.ts +1 -0
  673. package/packages/common/dist/shared/constants.d.ts.map +1 -0
  674. package/packages/common/dist/shared/constants.js +2 -0
  675. package/packages/common/dist/shared/constants.js.map +1 -0
  676. package/packages/common/dist/shared/controllers/base-validation.controller.d.ts +81 -0
  677. package/packages/common/dist/shared/controllers/base-validation.controller.d.ts.map +1 -0
  678. package/packages/common/dist/shared/controllers/base-validation.controller.js +104 -0
  679. package/packages/common/dist/shared/controllers/base-validation.controller.js.map +1 -0
  680. package/packages/common/dist/shared/controllers/base.controller.d.ts +76 -0
  681. package/packages/common/dist/shared/controllers/base.controller.d.ts.map +1 -0
  682. package/packages/common/dist/shared/controllers/base.controller.js +129 -0
  683. package/packages/common/dist/shared/controllers/base.controller.js.map +1 -0
  684. package/packages/common/dist/shared/controllers/dropdown.controller.d.ts +77 -0
  685. package/packages/common/dist/shared/controllers/dropdown.controller.d.ts.map +1 -0
  686. package/packages/common/dist/shared/controllers/dropdown.controller.js +341 -0
  687. package/packages/common/dist/shared/controllers/dropdown.controller.js.map +1 -0
  688. package/packages/common/dist/shared/controllers/dropdown.interface.d.ts +37 -0
  689. package/packages/common/dist/shared/controllers/dropdown.interface.d.ts.map +1 -0
  690. package/packages/common/dist/shared/controllers/dropdown.interface.js +2 -0
  691. package/packages/common/dist/shared/controllers/dropdown.interface.js.map +1 -0
  692. package/packages/common/dist/shared/controllers/index.d.ts +6 -0
  693. package/packages/common/dist/shared/controllers/index.d.ts.map +1 -0
  694. package/packages/common/dist/shared/controllers/index.js +6 -0
  695. package/packages/common/dist/shared/controllers/index.js.map +1 -0
  696. package/packages/common/dist/shared/controllers/theme.controller.d.ts +48 -0
  697. package/packages/common/dist/shared/controllers/theme.controller.d.ts.map +1 -0
  698. package/packages/common/dist/shared/controllers/theme.controller.js +133 -0
  699. package/packages/common/dist/shared/controllers/theme.controller.js.map +1 -0
  700. package/packages/common/dist/shared/dependency-mixin.d.ts +37 -0
  701. package/packages/common/dist/shared/dependency-mixin.d.ts.map +1 -0
  702. package/packages/common/dist/shared/dependency-mixin.js +141 -0
  703. package/packages/common/dist/shared/dependency-mixin.js.map +1 -0
  704. package/packages/common/dist/shared/event-handler-mixin.d.ts +64 -0
  705. package/packages/common/dist/shared/event-handler-mixin.d.ts.map +1 -0
  706. package/packages/common/dist/shared/event-handler-mixin.js +95 -0
  707. package/packages/common/dist/shared/event-handler-mixin.js.map +1 -0
  708. package/packages/common/dist/shared/index.d.ts +13 -0
  709. package/packages/common/dist/shared/index.d.ts.map +1 -0
  710. package/packages/common/dist/shared/index.js +17 -0
  711. package/packages/common/dist/shared/index.js.map +1 -0
  712. package/packages/common/dist/shared/render-utils.d.ts +103 -0
  713. package/packages/common/dist/shared/render-utils.d.ts.map +1 -0
  714. package/packages/common/dist/shared/render-utils.js +132 -0
  715. package/packages/common/dist/shared/render-utils.js.map +1 -0
  716. package/packages/common/dist/shared/theme-mixin.d.ts +78 -0
  717. package/packages/common/dist/shared/theme-mixin.d.ts.map +1 -0
  718. package/packages/common/dist/shared/theme-mixin.js +194 -0
  719. package/packages/common/dist/shared/theme-mixin.js.map +1 -0
  720. package/packages/common/dist/shared/themes.d.ts +44 -0
  721. package/packages/common/dist/shared/themes.d.ts.map +1 -0
  722. package/packages/common/dist/shared/themes.js +85 -0
  723. package/packages/common/dist/shared/themes.js.map +1 -0
  724. package/packages/common/dist/shared/utils.d.ts +60 -0
  725. package/packages/common/dist/shared/utils.d.ts.map +1 -0
  726. package/packages/common/dist/shared/utils.js +85 -0
  727. package/packages/common/dist/shared/utils.js.map +1 -0
  728. package/packages/common/dist/shared/validation.types.d.ts +108 -0
  729. package/packages/common/dist/shared/validation.types.d.ts.map +1 -0
  730. package/packages/common/dist/shared/validation.types.js +17 -0
  731. package/packages/common/dist/shared/validation.types.js.map +1 -0
  732. package/packages/common/dist/themes/index.d.ts +2 -0
  733. package/packages/common/dist/themes/index.d.ts.map +1 -0
  734. package/packages/common/dist/themes/index.js +2 -0
  735. package/packages/common/dist/themes/index.js.map +1 -0
  736. package/packages/common/dist/themes.d.ts +22 -0
  737. package/packages/common/dist/themes.d.ts.map +1 -0
  738. package/packages/common/dist/themes.js +23 -0
  739. package/packages/common/dist/themes.js.map +1 -0
  740. package/packages/common/dist/utils/index.d.ts +2 -0
  741. package/packages/common/dist/utils/index.d.ts.map +1 -0
  742. package/packages/common/dist/utils/index.js +2 -0
  743. package/packages/common/dist/utils/index.js.map +1 -0
  744. package/packages/common/dist/utils.d.ts +22 -0
  745. package/packages/common/dist/utils.d.ts.map +1 -0
  746. package/packages/common/dist/utils.js +24 -0
  747. package/packages/common/dist/utils.js.map +1 -0
  748. package/packages/themes/README.md +146 -0
  749. package/packages/themes/dist/README.md +146 -0
  750. package/packages/themes/dist/carbon.css +2987 -0
  751. package/packages/themes/dist/default.css +2757 -0
  752. package/packages/themes/dist/editor.css +1063 -0
  753. package/packages/themes/dist/index.cjs +46 -0
  754. package/packages/themes/dist/index.js +46 -0
  755. package/packages/themes/dist/package.json +59 -0
@@ -0,0 +1,2527 @@
1
+ import{css as t,nothing as e,html as n,LitElement as i}from"lit";import{property as o,state as r,customElement as s}from"lit/decorators.js";import{classMap as a}from"lit/directives/class-map.js";import{unsafeHTML as l}from"lit/directives/unsafe-html.js";import{NuralyUIBaseMixin as c}from"@nuralyui/common/mixins";import{repeat as d}from"lit/directives/repeat.js";import{io as h}from"socket.io-client";
2
+ /**
3
+ * @license
4
+ * Copyright 2021 Google LLC
5
+ * SPDX-License-Identifier: BSD-3-Clause
6
+ */const u="lit-localize-status",p=(t,e,n)=>{let i=t[0];for(let o=1;o<t.length;o++)i+=e[n?n[o-1]:o-1],i+=t[o];return i},f=t=>{return"string"!=typeof(e=t)&&"strTag"in e?p(t.strings,t.values):t;var e};
7
+ /**
8
+ * @license
9
+ * Copyright 2021 Google LLC
10
+ * SPDX-License-Identifier: BSD-3-Clause
11
+ */let v=f,g=!1;
12
+ /**
13
+ * @license
14
+ * Copyright 2021 Google LLC
15
+ * SPDX-License-Identifier: BSD-3-Clause
16
+ */
17
+ class m{constructor(t){this.t=t=>{"ready"===t.detail.status&&this.host.requestUpdate()},this.host=t}hostConnected(){window.addEventListener(u,this.t)}hostDisconnected(){window.removeEventListener(u,this.t)}}const b=t=>t.addController(new m(t));
18
+ /**
19
+ * @license
20
+ * Copyright 2020 Google LLC
21
+ * SPDX-License-Identifier: BSD-3-Clause
22
+ */
23
+ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._resolve=t,this._reject=e})}resolve(t){this.settled=!0,this._resolve(t)}reject(t){this.settled=!0,this._reject(t)}}
24
+ /**
25
+ * @license
26
+ * Copyright 2014 Travis Webb
27
+ * SPDX-License-Identifier: MIT
28
+ */const x=[];for(let t=0;t<256;t++)x[t]=(t>>4&15).toString(16)+(15&t).toString(16);function w(t,e){return(e?"h":"s")+function(t){let e=0,n=8997,i=0,o=33826,r=0,s=40164,a=0,l=52210;for(let c=0;c<t.length;c++)n^=t.charCodeAt(c),e=435*n,i=435*o,r=435*s,a=435*l,r+=n<<8,a+=o<<8,i+=e>>>16,n=65535&e,r+=i>>>16,o=65535&i,l=a+(r>>>16)&65535,s=65535&r;return x[l>>8]+x[255&l]+x[s>>8]+x[255&s]+x[o>>8]+x[255&o]+x[n>>8]+x[255&n]}
29
+ /**
30
+ * @license
31
+ * Copyright 2020 Google LLC
32
+ * SPDX-License-Identifier: BSD-3-Clause
33
+ */("string"==typeof t?t:t.join(""))}
34
+ /**
35
+ * @license
36
+ * Copyright 2021 Google LLC
37
+ * SPDX-License-Identifier: BSD-3-Clause
38
+ */const _=new WeakMap,$=new Map;function k(t,e,n){if(t){const i=n?.id??function(t){const e="string"==typeof t?t:t.strings;let n=$.get(e);void 0===n&&(n=w(e,"string"!=typeof t&&!("strTag"in t)),$.set(e,n));return n}
39
+ /**
40
+ * @license
41
+ * Copyright 2021 Google LLC
42
+ * SPDX-License-Identifier: BSD-3-Clause
43
+ */(e),o=t[i];if(o){if("string"==typeof o)return o;if("strTag"in o)return p(o.strings,e.values,o.values);{let t=_.get(o);return void 0===t&&(t=o.values,_.set(o,t)),{...o,values:t.map(t=>e.values[t])}}}}return f(e)}function S(t){window.dispatchEvent(new CustomEvent(u,{detail:t}))}let z,P,T,M,E,C="",I=new y;I.resolve();let O=0;const R=t=>(function(t){if(g)throw new Error("lit-localize can only be configured once");v=t,g=!0}((t,e)=>k(E,t,e)),C=P=t.sourceLocale,T=new Set(t.targetLocales),T.add(t.sourceLocale),M=t.loadLocale,{getLocale:j,setLocale:A}),j=()=>C,A=t=>{if(t===(z??C))return I.promise;if(!T||!M)throw new Error("Internal error");if(!T.has(t))throw new Error("Invalid locale code");O++;const e=O;z=t,I.settled&&(I=new y),S({status:"loading",loadingLocale:t});return(t===P?Promise.resolve({templates:void 0}):M(t)).then(n=>{O===e&&(C=t,z=void 0,E=n.templates,S({status:"ready",readyLocale:t}),I.resolve())},n=>{O===e&&(S({status:"error",errorLocale:t,errorMessage:n.toString()}),I.reject(n))}),I.promise};var D,F,N,L,B,U,W,H=t`
44
+ :host {
45
+ display: block;
46
+ width: 100%;
47
+ height: 100%;
48
+ min-width: var(--nuraly-size-chatbot-min-width, 320px);
49
+ box-sizing: border-box;
50
+ overflow: visible;
51
+
52
+ font-family: var(--chatbot-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif);
53
+ font-feature-settings: "cv02", "cv03", "cv04", "cv11";
54
+ text-rendering: optimizeLegibility;
55
+ -webkit-font-smoothing: antialiased;
56
+ -moz-osx-font-smoothing: grayscale;
57
+ }
58
+
59
+ .chat-container {
60
+ display: flex;
61
+ width: 100%;
62
+ height: 100%;
63
+ background-color: var(--nuraly-color-chatbot-background, #ffffff);
64
+ border-radius: var(--nuraly-border-radius-chatbot);
65
+ position: relative;
66
+ border: var(--nuraly-border-width-chatbot-input, 1px) solid var(--nuraly-color-chatbot-border, #e0e0e0);
67
+ }
68
+
69
+ .chatbot-container {
70
+ display: flex;
71
+ flex-direction: column;
72
+ flex: 1;
73
+ min-height: 0;
74
+ min-width: var(--nuraly-size-chatbot-container-min-width, 300px);
75
+ }
76
+
77
+ .chatbot-container--with-sidebar,
78
+ .chatbot-container--with-artifact-panel {
79
+ flex-direction: row;
80
+ }
81
+
82
+ .chatbot-main {
83
+ display: flex;
84
+ flex-direction: column;
85
+ flex: 1;
86
+ min-height: 0;
87
+ min-width: 0;
88
+ }
89
+
90
+ .chatbot-header {
91
+ display: flex;
92
+ align-items: center;
93
+ justify-content: space-between;
94
+ gap: 0.5rem;
95
+ padding: 0.5rem;
96
+ border-bottom: 1px solid var(--nuraly-color-chatbot-border, #e0e0e0);
97
+ }
98
+
99
+ .chatbot-content {
100
+ flex: 1;
101
+ display: flex;
102
+ flex-direction: column;
103
+ min-height: 0;
104
+ overflow: hidden;
105
+ }
106
+
107
+ :host([boxed]) .chat-container {
108
+ background-color: var(--nuraly-color-chatbot-background, #ffffff);
109
+ border: none;
110
+ border-radius: 0;
111
+ }
112
+
113
+ :host([boxed]) .chatbot-container {
114
+ width: 100%;
115
+ }
116
+
117
+ :host([boxed]) .chatbot-main {
118
+ width: 100%;
119
+ max-width: var(--nuraly-size-chatbot-boxed-max-width, 768px);
120
+ margin: 0 auto;
121
+ background-color: var(--nuraly-color-chatbot-background, #ffffff);
122
+ border: none;
123
+ border-radius: 0;
124
+ box-shadow: none;
125
+ height: 100%;
126
+ }
127
+
128
+ /* Boxed layout with threads: background comes from theme variable with white fallback */
129
+ :host([boxed]) .chat-container--boxed.chat-container--with-threads {
130
+ background-color: var(--nuraly-color-chatbot-background, #ffffff);
131
+ }
132
+
133
+ .chat-container--boxed.chat-container--with-threads .chatbot-main {
134
+ background-color: var(--nuraly-color-chatbot-background, #ffffff);
135
+ }
136
+
137
+ .chat-container--boxed.chat-container--with-threads .chat-box {
138
+ background-color: var(--nuraly-color-chatbot-background, #ffffff);
139
+ }
140
+
141
+ .chat-container--boxed.chat-container--with-threads .messages {
142
+ background-color: var(--nuraly-color-chatbot-background, #ffffff);
143
+ }
144
+
145
+ .chat-container--boxed.chat-container--with-threads .input-container {
146
+ background-color: var(--nuraly-color-chatbot-background, #ffffff);
147
+ }
148
+
149
+ :host([boxed]) .chatbot-header {
150
+ /* Keep header at the top */
151
+ flex: 0 0 auto;
152
+ border-bottom: none;
153
+ }
154
+
155
+ :host([boxed]) .chatbot-content:has(.empty-state) {
156
+ /* Don't let content flex grow when empty */
157
+ flex: 0 0 auto;
158
+ }
159
+
160
+ :host([boxed]) .chatbot-content:not(:has(.empty-state)) {
161
+ /* Normal flex behavior when messages exist */
162
+ flex: 1;
163
+ min-height: 0;
164
+ }
165
+
166
+ :host([boxed]) .chatbot-main:has(.empty-state) {
167
+ /* Make main container relative for absolute positioning */
168
+ position: relative;
169
+ }
170
+
171
+ :host([boxed]) .empty-state {
172
+ /* Position empty state in the center - moved up */
173
+ position: absolute;
174
+ top: 50%;
175
+ left: 50%;
176
+ transform: translate(-50%, calc(-50% - 80px));
177
+ width: 100%;
178
+ max-width: var(--nuraly-size-chatbot-boxed-max-width, 768px);
179
+ height: auto;
180
+ padding: 0;
181
+ display: flex;
182
+ flex-direction: column;
183
+ align-items: center;
184
+ gap: var(--nuraly-spacing-06, 1.5rem);
185
+ }
186
+
187
+ :host([boxed]) .empty-state__content {
188
+ margin-bottom: 0;
189
+ }
190
+
191
+ :host([boxed]) .chatbot-content:has(.empty-state) + .input-box {
192
+ /* Position input-box in the middle with empty state - moved up */
193
+ position: absolute;
194
+ top: 50%;
195
+ left: 50%;
196
+ transform: translate(-50%, calc(-50% + 40px));
197
+ width: 100%;
198
+ max-width: var(--nuraly-size-chatbot-boxed-max-width, 768px);
199
+ }
200
+
201
+ :host([boxed]) .suggestion-container {
202
+ margin-top: 0;
203
+ }
204
+
205
+ :host([boxed]) .messages {
206
+ box-shadow: none;
207
+ margin-bottom: 0;
208
+ background-color: var(--nuraly-color-chatbot-background, #ffffff);
209
+ align-items: stretch;
210
+ width: 98%;
211
+ padding: var(--nuraly-spacing-chatbot-message-padding, 8px) var(--nuraly-spacing-06, 1.5rem);
212
+ }
213
+
214
+ :host([boxed]) .input-container {
215
+ box-shadow: none;
216
+ margin: 0;
217
+ background-color: var(--nuraly-color-chatbot-background, #ffffff);
218
+ }
219
+
220
+ .chat-container--with-threads {
221
+ grid-template-columns: var(--nuraly-size-chatbot-sidebar-width) 1fr;
222
+ }
223
+
224
+ .chat-container--disabled {
225
+ opacity: var(--nuraly-opacity-chatbot-disabled, 0.5);
226
+ pointer-events: none;
227
+ }
228
+
229
+ .chat-container--drag-over {
230
+ background-color: var(--nuraly-color-chatbot-file-upload-background-hover);
231
+ border: var(--nuraly-spacing-02, 0.25rem) dashed var(--nuraly-color-chatbot-accent);
232
+ border-radius: var(--nuraly-border-radius-chatbot-file-upload);
233
+ }
234
+
235
+ .thread-sidebar {
236
+ width: var(--nuraly-size-chatbot-thread-sidebar-width, 260px);
237
+ flex-shrink: 0;
238
+ background-color: var(--nuraly-color-chatbot-sidebar-background);
239
+ border-right: var(--nuraly-border-width-chatbot-message, 1px) solid var(--nuraly-color-chatbot-sidebar-border);
240
+ display: flex;
241
+ flex-direction: column;
242
+ overflow: hidden;
243
+ position: relative;
244
+ z-index: 1;
245
+ }
246
+
247
+ .thread-sidebar__header {
248
+ display: flex;
249
+ align-items: center;
250
+ justify-content: space-between;
251
+ padding: var(--nuraly-spacing-chatbot-sidebar-padding);
252
+ border-bottom: var(--nuraly-border-width-chatbot-message, 1px) solid var(--nuraly-color-chatbot-sidebar-border);
253
+ }
254
+
255
+ .thread-sidebar__header h3 {
256
+ margin: 0;
257
+ font-size: var(--nuraly-font-size-03, 1rem);
258
+ font-weight: var(--nuraly-font-weight-semibold, 600);
259
+ color: var(--nuraly-color-chatbot-sidebar-text);
260
+ }
261
+
262
+ .thread-list {
263
+ flex: 1;
264
+ overflow-y: auto;
265
+ padding: var(--nuraly-spacing-chatbot-sidebar-padding);
266
+ }
267
+
268
+ .thread-section {
269
+ margin-bottom: var(--nuraly-spacing-chatbot-sidebar-padding, 8px);
270
+ }
271
+
272
+ .thread-section__label {
273
+ display: flex;
274
+ align-items: center;
275
+ gap: 6px;
276
+ font-size: 11px;
277
+ font-weight: 600;
278
+ text-transform: uppercase;
279
+ letter-spacing: 0.05em;
280
+ color: rgba(128, 128, 128, 0.6);
281
+ padding: 8px 12px 4px;
282
+ }
283
+
284
+ .thread-section__label svg {
285
+ color: var(--nuraly-color-chatbot-bookmark, #f59e0b);
286
+ }
287
+
288
+ .thread-item {
289
+ padding: var(--nuraly-spacing-chatbot-sidebar-padding);
290
+ border-radius: var(--nuraly-border-radius-chatbot);
291
+ cursor: pointer;
292
+ margin-bottom: var(--nuraly-spacing-chatbot-suggestions-gap);
293
+ transition: background-color var(--nuraly-transition-chatbot-fast);
294
+ border: var(--nuraly-border-width-chatbot-message, 1px) solid transparent;
295
+ line-height: 1.6;
296
+ }
297
+
298
+ .thread-item:hover {
299
+ background-color: var(--nuraly-color-chatbot-thread-background-hover);
300
+ }
301
+
302
+ .thread-item--active {
303
+ background-color: var(--nuraly-color-chatbot-thread-background-active);
304
+ color: var(--nuraly-color-chatbot-thread-text-active);
305
+ border-color: var(--nuraly-color-chatbot-accent);
306
+ }
307
+
308
+ .thread-item--active:hover {
309
+ background-color: var(--nuraly-color-chatbot-thread-background-active-hover, var(--nuraly-color-chatbot-thread-background-active));
310
+ opacity: 0.95;
311
+ }
312
+
313
+ .thread-item__header {
314
+ display: flex;
315
+ align-items: center;
316
+ gap: 4px;
317
+ margin-bottom: var(--nuraly-spacing-chatbot-suggestions-gap);
318
+ }
319
+
320
+ .thread-item__title {
321
+ font-weight: var(--nuraly-font-weight-medium, 500);
322
+ font-size: var(--nuraly-font-size-chatbot-thread-title, 14px);
323
+ white-space: nowrap;
324
+ overflow: hidden;
325
+ text-overflow: ellipsis;
326
+ line-height: 1.4;
327
+ flex: 1;
328
+ min-width: 0;
329
+ }
330
+
331
+ .thread-item__actions {
332
+ display: none;
333
+ align-items: center;
334
+ gap: 2px;
335
+ flex-shrink: 0;
336
+ }
337
+
338
+ .thread-item:hover .thread-item__actions {
339
+ display: flex;
340
+ }
341
+
342
+ .thread-item__action-btn {
343
+ display: flex;
344
+ align-items: center;
345
+ justify-content: center;
346
+ padding: 4px;
347
+ margin: 0;
348
+ background: none;
349
+ border: none;
350
+ border-radius: var(--nuraly-border-radius-chatbot, 4px);
351
+ color: rgba(128, 128, 128, 0.6);
352
+ cursor: pointer;
353
+ flex-shrink: 0;
354
+ line-height: 0;
355
+ transition: color var(--nuraly-transition-chatbot-fast), background-color var(--nuraly-transition-chatbot-fast);
356
+ }
357
+
358
+ .thread-item__action-btn svg {
359
+ display: block;
360
+ }
361
+
362
+ .thread-item__action-btn:hover {
363
+ color: var(--nuraly-color-chatbot-accent, #3b82f6);
364
+ background-color: rgba(59, 130, 246, 0.1);
365
+ }
366
+
367
+ .thread-item__actions nr-popconfirm {
368
+ margin-top: 4px;
369
+ }
370
+
371
+ .thread-item__delete:hover {
372
+ color: var(--nuraly-color-chatbot-error, #ef4444);
373
+ background-color: rgba(239, 68, 68, 0.1);
374
+ }
375
+
376
+ .thread-item--active .thread-item__action-btn {
377
+ color: rgba(255, 255, 255, 0.55);
378
+ }
379
+
380
+ .thread-item--active .thread-item__action-btn:hover {
381
+ color: var(--nuraly-color-chatbot-accent, #3b82f6);
382
+ background-color: rgba(59, 130, 246, 0.15);
383
+ }
384
+
385
+ .thread-item--active .thread-item__delete:hover {
386
+ color: var(--nuraly-color-chatbot-error, #ef4444);
387
+ background-color: rgba(239, 68, 68, 0.15);
388
+ }
389
+
390
+ .thread-item__bookmark--active {
391
+ color: var(--nuraly-color-chatbot-bookmark, #f59e0b) !important;
392
+ display: flex !important;
393
+ }
394
+
395
+ .thread-item__bookmark--active:hover {
396
+ color: var(--nuraly-color-chatbot-bookmark-hover, #d97706) !important;
397
+ background-color: rgba(245, 158, 11, 0.1);
398
+ }
399
+
400
+ .thread-item--active .thread-item__bookmark--active {
401
+ color: var(--nuraly-color-chatbot-bookmark, #f59e0b) !important;
402
+ }
403
+
404
+ .thread-item__rename-input {
405
+ flex: 1;
406
+ min-width: 0;
407
+ padding: 2px 6px;
408
+ font-size: var(--nuraly-font-size-chatbot-thread-title, 14px);
409
+ font-weight: var(--nuraly-font-weight-medium, 500);
410
+ font-family: inherit;
411
+ color: inherit;
412
+ background: rgba(0, 0, 0, 0.2);
413
+ border: 1px solid var(--nuraly-color-chatbot-accent, #3b82f6);
414
+ border-radius: var(--nuraly-border-radius-chatbot, 4px);
415
+ outline: none;
416
+ line-height: 1.4;
417
+ }
418
+
419
+ .thread-item--active .thread-item__rename-input {
420
+ background: rgba(255, 255, 255, 0.1);
421
+ }
422
+
423
+ .thread-item__preview {
424
+ font-size: var(--nuraly-font-size-chatbot-thread-preview, 13px);
425
+ color: rgba(128, 128, 128, 0.7);
426
+ white-space: nowrap;
427
+ overflow: hidden;
428
+ text-overflow: ellipsis;
429
+ margin-bottom: var(--nuraly-spacing-chatbot-suggestions-gap);
430
+ line-height: 1.5;
431
+ }
432
+
433
+ .thread-item--active .thread-item__preview {
434
+ color: rgba(255, 255, 255, 0.65);
435
+ }
436
+
437
+ .thread-item__timestamp {
438
+ font-size: var(--nuraly-font-size-chatbot-timestamp);
439
+ color: rgba(128, 128, 128, 0.6);
440
+ line-height: 1.4;
441
+ }
442
+
443
+ .thread-item--active .thread-item__timestamp {
444
+ color: rgba(255, 255, 255, 0.55);
445
+ }
446
+
447
+ .chat-box {
448
+ display: flex;
449
+ flex-direction: column;
450
+ flex: 1;
451
+ height: 100%;
452
+ overflow: hidden;
453
+ position: relative;
454
+ }
455
+
456
+ .messages {
457
+ flex: 1;
458
+ overflow-y: auto;
459
+ display: flex;
460
+ flex-direction: column;
461
+ gap: 0;
462
+ background-color: var(--nuraly-color-chatbot-background, #ffffff);
463
+ padding: var(--nuraly-spacing-chatbot-message-padding, 8px 12px);
464
+ justify-content: flex-start; /* Always align messages to top */
465
+ }
466
+
467
+ .empty-state {
468
+ display: flex;
469
+ flex-direction: column;
470
+ align-items: center;
471
+ justify-content: center;
472
+ flex: 1; /* Take full height when empty */
473
+ text-align: center;
474
+ padding: var(--nuraly-spacing-09, 3rem) var(--nuraly-spacing-06, 1.5rem);
475
+ }
476
+
477
+ .empty-state__content {
478
+ color: var(--nuraly-color-chatbot-text-primary);
479
+ font-size: var(--nuraly-font-size-08, 2rem);
480
+ font-weight: var(--nuraly-font-weight-semibold, 600);
481
+ margin-bottom: var(--nuraly-spacing-09, 3rem);
482
+ letter-spacing: -0.02em;
483
+ }
484
+
485
+ .message {
486
+ display: flex;
487
+ flex-direction: column;
488
+ max-width: var(--nuraly-size-chatbot-message-max-width);
489
+ word-wrap: break-word;
490
+ word-break: break-word;
491
+ margin-bottom: var(--nuraly-spacing-chatbot-message-margin);
492
+ position: relative;
493
+ min-width: 0;
494
+ flex-shrink: 0;
495
+ }
496
+
497
+ .message.user {
498
+ align-self: flex-end;
499
+ align-items: flex-end;
500
+ }
501
+
502
+ .message.bot {
503
+ align-self: flex-start;
504
+ align-items: flex-start;
505
+ }
506
+
507
+ .message__content {
508
+ padding: var(--nuraly-spacing-chatbot-message-padding, 8px 12px);
509
+ border-radius: var(--nuraly-border-radius-chatbot-message, 0);
510
+ font-size: var(--nuraly-font-size-chatbot-message);
511
+ line-height: var(--nuraly-line-height-chatbot-message);
512
+ position: relative;
513
+ font-weight: var(--nuraly-font-weight-normal, 400);
514
+ box-shadow: var(--nuraly-shadow-chatbot-message, none);
515
+ box-sizing: border-box;
516
+ overflow-wrap: break-word;
517
+ white-space: normal;
518
+ background-color: var(--nuraly-color-chatbot-message-background, transparent);
519
+ color: var(--nuraly-color-chatbot-message-text, inherit);
520
+ border: var(--nuraly-border-width-chatbot-message, 0) solid var(--nuraly-color-chatbot-message-border, transparent);
521
+ }
522
+
523
+ /* Message attachments (file tags) */
524
+ .message__attachments {
525
+ display: flex;
526
+ flex-wrap: wrap;
527
+ gap: var(--nuraly-spacing-02, 0.25rem);
528
+ margin-top: var(--nuraly-spacing-02, 0.25rem);
529
+ position: relative;
530
+ z-index: 1;
531
+ }
532
+
533
+ .message-file-preview-dropdown {
534
+ display: inline-block;
535
+ position: relative;
536
+ }
537
+
538
+ /* Ensure dropdown panel appears above everything */
539
+ .message-file-preview-dropdown nr-dropdown {
540
+ --nuraly-dropdown-z-index: 10000;
541
+ }
542
+
543
+ .message__attachment-tag {
544
+ --nuraly-tag-font-size: var(--nuraly-font-size-01, 0.75rem);
545
+ --nuraly-tag-padding-x: 4px;
546
+ --nuraly-tag-padding-y: 0px;
547
+ cursor: help;
548
+ }
549
+
550
+ /* Message file preview dropdown content */
551
+ .message-file-preview-content {
552
+ display: flex;
553
+ flex-direction: column;
554
+ align-items: center;
555
+ gap: var(--nuraly-spacing-03, 0.5rem);
556
+ padding: var(--nuraly-spacing-04, 0.75rem);
557
+ min-width: 200px;
558
+ max-width: 300px;
559
+ }
560
+
561
+ .message-file-preview-image {
562
+ max-width: 100%;
563
+ max-height: 200px;
564
+ border-radius: var(--nuraly-border-radius-chatbot, 8px);
565
+ object-fit: contain;
566
+ }
567
+
568
+ .message-file-preview-icon {
569
+ color: var(--nuraly-color-chatbot-text-secondary, #6c757d);
570
+ opacity: 0.6;
571
+ }
572
+
573
+ .message-file-preview-info {
574
+ width: 100%;
575
+ text-align: center;
576
+ }
577
+
578
+ .message-file-preview-name {
579
+ font-size: var(--nuraly-font-size-02, 0.875rem);
580
+ font-weight: 500;
581
+ color: var(--nuraly-color-chatbot-text-primary, #1f2937);
582
+ white-space: nowrap;
583
+ overflow: hidden;
584
+ text-overflow: ellipsis;
585
+ margin-bottom: var(--nuraly-spacing-02, 0.25rem);
586
+ }
587
+
588
+ .message-file-preview-details {
589
+ font-size: var(--nuraly-font-size-01, 0.75rem);
590
+ color: var(--nuraly-color-chatbot-text-secondary, #6c757d);
591
+ }
592
+
593
+ .message.user .message__content {
594
+ background-color: var(--nuraly-color-chatbot-message-user-background);
595
+ color: var(--nuraly-color-chatbot-message-user-text);
596
+ border-radius: var(--nuraly-border-radius-chatbot-message-user, var(--nuraly-border-radius-chatbot-message, 0));
597
+ border: var(--nuraly-border-width-chatbot-message-user, var(--nuraly-border-width-chatbot-message, 0)) solid var(--nuraly-color-chatbot-message-user-border, transparent);
598
+ box-shadow: var(--nuraly-shadow-chatbot-message-user, var(--nuraly-shadow-chatbot-message, none));
599
+ }
600
+
601
+ .message.bot .message__content {
602
+ background-color: var(--nuraly-color-chatbot-message-bot-background, transparent);
603
+ color: var(--nuraly-color-chatbot-message-bot-text, inherit);
604
+ border-radius: var(--nuraly-border-radius-chatbot-message-bot, var(--nuraly-border-radius-chatbot-message, 0));
605
+ border: var(--nuraly-border-width-chatbot-message-bot, var(--nuraly-border-width-chatbot-message, 0)) solid var(--nuraly-color-chatbot-message-bot-border, transparent);
606
+ box-shadow: var(--nuraly-shadow-chatbot-message-bot, var(--nuraly-shadow-chatbot-message, none));
607
+ }
608
+
609
+ .message.error .message__content {
610
+ background-color: var(--nuraly-color-chatbot-message-error-background, transparent);
611
+ color: var(--nuraly-color-chatbot-message-error-text, inherit);
612
+ border-radius: var(--nuraly-border-radius-chatbot-message-error, var(--nuraly-border-radius-chatbot-message, 0));
613
+ border: var(--nuraly-border-width-chatbot-message-error, var(--nuraly-border-width-chatbot-message, 0)) solid var(--nuraly-color-chatbot-message-error-border, transparent);
614
+ box-shadow: var(--nuraly-shadow-chatbot-message-error, var(--nuraly-shadow-chatbot-message, none));
615
+ }
616
+
617
+ /* Styled error message container */
618
+ .message__error-container {
619
+ display: flex;
620
+ flex-direction: column;
621
+ gap: 0.5rem;
622
+ border-radius: var(--nuraly-border-radius-chatbot-message, 0.75rem);
623
+ }
624
+
625
+ .message__error-title {
626
+ font-weight: 600;
627
+ font-size: 0.875rem;
628
+ color: var(--nuraly-color-chatbot-error-title, #c00);
629
+ margin: 0;
630
+ }
631
+
632
+ .message__error-description {
633
+ font-size: 0.875rem;
634
+ color: var(--nuraly-color-chatbot-error-description, #666);
635
+ margin: 0;
636
+ line-height: 1.5;
637
+ }
638
+
639
+ /* Message footer - contains timestamp and copy icon */
640
+ .message__footer {
641
+ display: flex;
642
+ align-items: center;
643
+ gap: 0.5rem;
644
+ margin-top: var(--nuraly-spacing-chatbot-timestamp-margin);
645
+ }
646
+
647
+ .message.user .message__footer {
648
+ justify-content: flex-end;
649
+ }
650
+
651
+ .message.bot .message__footer {
652
+ justify-content: flex-start;
653
+ }
654
+
655
+ .message__timestamp {
656
+ font-size: var(--nuraly-font-size-chatbot-timestamp);
657
+ color: var(--nuraly-color-chatbot-timestamp);
658
+ font-weight: var(--nuraly-font-weight-normal, 400);
659
+ opacity: 0;
660
+ visibility: hidden;
661
+ transition: opacity var(--nuraly-transition-fast, 0.15s) ease, visibility var(--nuraly-transition-fast, 0.15s) ease;
662
+ }
663
+
664
+ .message__copy {
665
+ display: inline-flex;
666
+ align-items: center;
667
+ justify-content: center;
668
+ cursor: pointer !important;
669
+ --nuraly-cursor-default: pointer;
670
+ pointer-events: auto !important;
671
+ opacity: 0;
672
+ visibility: hidden;
673
+ transition: opacity var(--nuraly-transition-fast, 0.15s) ease, visibility var(--nuraly-transition-fast, 0.15s) ease;
674
+ color: var(--nuraly-color-chatbot-timestamp);
675
+ }
676
+
677
+ .message:hover .message__copy {
678
+ opacity: 1;
679
+ visibility: visible;
680
+ }
681
+
682
+ .message:hover .message__timestamp {
683
+ opacity: var(--nuraly-opacity-chatbot-timestamp, 1);
684
+ visibility: visible;
685
+ }
686
+
687
+ .message__copy:hover {
688
+ cursor: pointer !important;
689
+ }
690
+
691
+ .message__copy:focus {
692
+ outline: 2px solid var(--nuraly-focus-color, #0066cc);
693
+ outline-offset: 2px;
694
+ }
695
+
696
+ .message__retry {
697
+ margin-top: var(--nuraly-spacing-chatbot-suggestions-gap);
698
+ align-self: flex-start;
699
+ }
700
+
701
+ .message.loading .message__content {
702
+ display: flex;
703
+ align-items: center;
704
+ gap: var(--chatbot-spacing-sm);
705
+ background-color: var(--nuraly-color-chatbot-message-bot-background, transparent);
706
+ /* Set indicator color (affects spinner currentColor) */
707
+ color: var(--chatbot-loading-indicator-color, var(--nuraly-color-chatbot-accent, var(--chatbot-text-secondary)));
708
+ }
709
+
710
+ .dots {
711
+ display: flex;
712
+ gap: var(--nuraly-spacing-01, 0.125rem);
713
+ }
714
+
715
+ .dots span {
716
+ width: var(--nuraly-spacing-03, 0.5rem);
717
+ height: var(--nuraly-spacing-03, 0.5rem);
718
+ background-color: currentColor;
719
+ border-radius: 50%;
720
+ animation: typing-dots 1.4s infinite;
721
+ }
722
+
723
+ .dots span:nth-child(2) {
724
+ animation-delay: 0.2s;
725
+ }
726
+
727
+ .dots span:nth-child(3) {
728
+ animation-delay: 0.4s;
729
+ }
730
+
731
+ .loading-text {
732
+ font-style: italic;
733
+ color: var(--chatbot-text-secondary);
734
+ font-size: var(--chatbot-font-size-sm, 0.8125rem);
735
+ white-space: nowrap;
736
+ overflow: hidden;
737
+ text-overflow: ellipsis;
738
+ max-width: 280px;
739
+ display: inline-flex;
740
+ padding-left: 0.5rem;
741
+ }
742
+
743
+ .loading-text__char {
744
+ display: inline-block;
745
+ animation: chatbot-status-wave 1.4s ease-in-out infinite;
746
+ opacity: 0.4;
747
+ }
748
+
749
+ @keyframes chatbot-status-wave {
750
+ 0%, 100% { opacity: 0.4; }
751
+ 50% { opacity: 1; }
752
+ }
753
+
754
+ /* Spinner indicator (for loadingIndicator = Spinner) */
755
+ .spinner {
756
+ --_size: var(--chatbot-spinner-size, 1.25rem);
757
+ --_bw: var(--chatbot-spinner-border-width, 2px);
758
+ --_color: var(--chatbot-spinner-color, currentColor);
759
+ --_speed: var(--chatbot-spinner-speed, 0.8s);
760
+
761
+ display: inline-block;
762
+ width: var(--_size);
763
+ height: var(--_size);
764
+ border: var(--_bw) solid transparent;
765
+ border-top-color: var(--_color);
766
+ border-radius: 50%;
767
+ animation: chatbot-spin var(--_speed) linear infinite;
768
+ }
769
+
770
+ @keyframes chatbot-spin {
771
+ to { transform: rotate(360deg); }
772
+ }
773
+
774
+ @keyframes typing-dots {
775
+ 0%, 60%, 100% {
776
+ opacity: 0.3;
777
+ transform: scale(0.8);
778
+ }
779
+ 30% {
780
+ opacity: 1;
781
+ transform: scale(1);
782
+ }
783
+ }
784
+
785
+ /* Suggestions - styled pills */
786
+ .suggestion-container {
787
+ display: flex;
788
+ flex-wrap: wrap;
789
+ gap: var(--nuraly-spacing-chatbot-suggestion-gap);
790
+ margin-top: var(--nuraly-spacing-chatbot-suggestion-container-margin-top);
791
+ max-width: 100%;
792
+ margin-left: auto;
793
+ margin-right: auto;
794
+ justify-content: center;
795
+ padding: 0 var(--nuraly-spacing-chatbot-container-padding);
796
+ overflow: hidden;
797
+ box-sizing: border-box;
798
+ }
799
+
800
+ .suggestion {
801
+ display: inline-flex;
802
+ align-items: center;
803
+ justify-content: center;
804
+ padding: var(--nuraly-spacing-chatbot-suggestion-padding, 6px 12px);
805
+ background-color: var(--nuraly-color-chatbot-suggestion-background);
806
+ color: var(--nuraly-color-chatbot-suggestion-text);
807
+ border: var(--nuraly-border-width-chatbot-message, 1px) solid var(--nuraly-color-chatbot-suggestion-border);
808
+ border-radius: var(--nuraly-border-radius-chatbot-suggestion, 16px);
809
+ font-size: var(--nuraly-typography-chatbot-suggestion-font-size, 13px);
810
+ font-weight: var(--nuraly-typography-chatbot-suggestion-font-weight);
811
+ line-height: var(--nuraly-typography-chatbot-suggestion-line-height, 1.3);
812
+ cursor: pointer;
813
+ transition: all var(--nuraly-animation-chatbot-transition-duration) var(--nuraly-animation-chatbot-transition-timing);
814
+ user-select: none;
815
+ white-space: normal;
816
+ word-break: break-word;
817
+ text-decoration: none;
818
+ outline: none;
819
+ max-width: 100%;
820
+ text-align: center;
821
+ }
822
+
823
+ .suggestion:hover {
824
+ background-color: var(--nuraly-color-chatbot-suggestion-background-hover);
825
+ border-color: var(--nuraly-color-chatbot-suggestion-border-hover);
826
+ transform: translateY(-1px);
827
+ box-shadow: var(--nuraly-shadow-chatbot-suggestion-hover);
828
+ }
829
+
830
+ .suggestion:focus {
831
+ outline: none;
832
+ }
833
+
834
+ .suggestion:active {
835
+ transform: translateY(0);
836
+ background-color: var(--nuraly-color-chatbot-suggestion-background-active);
837
+ }
838
+
839
+ .suggestion--disabled {
840
+ opacity: 0.5;
841
+ cursor: not-allowed;
842
+ pointer-events: none;
843
+ }
844
+
845
+ /* Input-only mode styles - suggestions float above the container */
846
+ .chat-container:has(.input-only-suggestions) {
847
+ position: relative;
848
+ overflow: visible;
849
+ }
850
+
851
+ .chatbot-container:has(.input-only-suggestions) {
852
+ overflow: visible;
853
+ }
854
+
855
+ .chatbot-main:has(.input-only-suggestions) {
856
+ overflow: visible;
857
+ }
858
+
859
+ .input-only-suggestions {
860
+ position: absolute;
861
+ bottom: calc(100% + var(--nuraly-spacing-03, 0.5rem));
862
+ left: 0;
863
+ right: 0;
864
+ display: flex;
865
+ justify-content: center;
866
+ pointer-events: none;
867
+ z-index: 10;
868
+ }
869
+
870
+ .input-only-suggestions .suggestion-container {
871
+ display: flex;
872
+ flex-direction: row;
873
+ flex-wrap: wrap;
874
+ justify-content: center;
875
+ gap: var(--nuraly-spacing-02, 0.25rem);
876
+ margin: 0;
877
+ padding: 0;
878
+ pointer-events: auto;
879
+ }
880
+
881
+ .file-upload-area {
882
+ display: none;
883
+ position: absolute;
884
+ top: 0;
885
+ left: 0;
886
+ right: 0;
887
+ bottom: 0;
888
+ background-color: rgba(255, 255, 255, 0.95);
889
+ border: var(--nuraly-spacing-02, 0.25rem) dashed var(--chatbot-user-message-bg);
890
+ border-radius: var(--chatbot-radius);
891
+ z-index: 10;
892
+ }
893
+
894
+ .file-upload-area--visible {
895
+ display: flex;
896
+ align-items: center;
897
+ justify-content: center;
898
+ }
899
+
900
+ .file-upload-area--drag-over {
901
+ background-color: rgba(15, 98, 254, 0.1);
902
+ border-color: var(--chatbot-user-message-bg);
903
+ }
904
+
905
+ .file-upload-area__content {
906
+ text-align: center;
907
+ padding: var(--chatbot-spacing-xl);
908
+ color: var(--chatbot-text-primary);
909
+ }
910
+
911
+ .file-upload-area__content nr-icon {
912
+ color: var(--chatbot-user-message-bg);
913
+ margin-bottom: var(--chatbot-spacing-md);
914
+ }
915
+
916
+ .file-upload-area__help {
917
+ font-size: var(--nuraly-font-size-01, 0.75rem);
918
+ color: var(--chatbot-text-secondary);
919
+ margin: var(--chatbot-spacing-xs) 0;
920
+ }
921
+
922
+ .uploaded-files {
923
+ display: flex;
924
+ flex-wrap: wrap;
925
+ gap: var(--chatbot-spacing-sm);
926
+ padding: var(--chatbot-spacing-sm);
927
+ background-color: var(--chatbot-surface);
928
+ }
929
+
930
+ .uploaded-file {
931
+ display: flex;
932
+ align-items: center;
933
+ gap: var(--chatbot-spacing-sm);
934
+ padding: var(--chatbot-spacing-sm);
935
+ background-color: var(--chatbot-background);
936
+ border: var(--nuraly-border-width-chatbot-message, 1px) solid var(--chatbot-border);
937
+ border-radius: var(--chatbot-radius);
938
+ max-width: var(--nuraly-spacing-chatbot-file-upload-preview-size, 200px);
939
+ }
940
+
941
+ .uploaded-file__preview {
942
+ width: var(--nuraly-size-chatbot-send-button-width, 32px);
943
+ height: var(--nuraly-size-chatbot-send-button-height, 32px);
944
+ object-fit: cover;
945
+ border-radius: var(--chatbot-spacing-xs);
946
+ }
947
+
948
+ .uploaded-file__icon {
949
+ color: var(--chatbot-text-secondary);
950
+ }
951
+
952
+ .uploaded-file__info {
953
+ flex: 1;
954
+ min-width: 0;
955
+ }
956
+
957
+ .uploaded-file__name {
958
+ font-size: var(--nuraly-font-size-01, 0.75rem);
959
+ font-weight: 500;
960
+ color: var(--chatbot-text-primary);
961
+ white-space: nowrap;
962
+ overflow: hidden;
963
+ text-overflow: ellipsis;
964
+ }
965
+
966
+ .uploaded-file__size {
967
+ font-size: var(--nuraly-font-size-chatbot-file-size, 11px);
968
+ color: var(--chatbot-text-secondary);
969
+ }
970
+
971
+ .uploaded-file__progress {
972
+ height: var(--nuraly-spacing-01, 0.125rem);
973
+ background-color: var(--chatbot-border);
974
+ border-radius: var(--nuraly-spacing-01, 0.125rem);
975
+ overflow: hidden;
976
+ margin-top: var(--chatbot-spacing-xs);
977
+ }
978
+
979
+ .uploaded-file__progress-bar {
980
+ height: 100%;
981
+ background-color: var(--chatbot-user-message-bg);
982
+ transition: width 0.3s ease;
983
+ }
984
+
985
+ .uploaded-file__error {
986
+ font-size: var(--nuraly-font-size-chatbot-file-size, 11px);
987
+ color: var(--chatbot-error-text);
988
+ margin-top: var(--chatbot-spacing-xs);
989
+ }
990
+
991
+ .uploaded-file__remove {
992
+ color: var(--chatbot-text-helper);
993
+ }
994
+
995
+
996
+
997
+ .input-container {
998
+ background-color: var(--nuraly-color-chatbot-input-background);
999
+ border: var(--nuraly-border-width-chatbot-input, 1px) solid var(--nuraly-color-chatbot-input-border);
1000
+ border-radius: var(--nuraly-border-radius-chatbot-input);
1001
+ transition: var(--nuraly-transition-chatbot-all, all 0.2s ease);
1002
+ box-shadow: var(--nuraly-shadow-chatbot-input, 0 2px 8px rgba(0, 0, 0, 0.1));
1003
+ overflow: visible;
1004
+ position: relative;
1005
+ min-width: var(--nuraly-size-chatbot-input-min-width, 280px);
1006
+ }
1007
+
1008
+ .context-tags-row {
1009
+ display: flex;
1010
+ flex-wrap: wrap;
1011
+ gap: var(--nuraly-spacing-03, 0.5rem);
1012
+ padding: var(--nuraly-spacing-04, 0.75rem) var(--nuraly-spacing-05, 1rem) 0 var(--nuraly-spacing-05, 1rem);
1013
+ position: relative;
1014
+ z-index: 2;
1015
+ }
1016
+
1017
+ .file-preview-dropdown {
1018
+ display: inline-block;
1019
+ position: relative;
1020
+ }
1021
+
1022
+
1023
+ .context-tag {
1024
+ --nuraly-tag-font-size: var(--nuraly-font-size-01, 0.75rem);
1025
+ --nuraly-tag-padding-x: var(--nuraly-spacing-03, 0.5rem);
1026
+ --nuraly-tag-padding-y: 0;
1027
+ cursor: help;
1028
+ }
1029
+
1030
+ /* File preview dropdown content */
1031
+ .file-preview-content {
1032
+ display: flex;
1033
+ flex-direction: column;
1034
+ align-items: center;
1035
+ gap: var(--nuraly-spacing-03, 0.5rem);
1036
+ padding: var(--nuraly-spacing-04, 0.75rem);
1037
+ min-width: 200px;
1038
+ max-width: 300px;
1039
+ }
1040
+
1041
+ .file-preview-image {
1042
+ max-width: 100%;
1043
+ max-height: 200px;
1044
+ border-radius: var(--nuraly-border-radius-chatbot, 8px);
1045
+ object-fit: contain;
1046
+ }
1047
+
1048
+ .file-preview-icon {
1049
+ color: var(--nuraly-color-chatbot-text-secondary, #6c757d);
1050
+ opacity: 0.6;
1051
+ }
1052
+
1053
+ .file-preview-info {
1054
+ width: 100%;
1055
+ text-align: center;
1056
+ }
1057
+
1058
+ .file-preview-name {
1059
+ font-size: var(--nuraly-font-size-02, 0.875rem);
1060
+ font-weight: 500;
1061
+ color: var(--nuraly-color-chatbot-text-primary, #1f2937);
1062
+ white-space: nowrap;
1063
+ overflow: hidden;
1064
+ text-overflow: ellipsis;
1065
+ margin-bottom: var(--nuraly-spacing-02, 0.25rem);
1066
+ }
1067
+
1068
+ .file-preview-details {
1069
+ font-size: var(--nuraly-font-size-01, 0.75rem);
1070
+ color: var(--nuraly-color-chatbot-text-secondary, #6c757d);
1071
+ }
1072
+
1073
+ .input-container:focus-within {
1074
+ border-color: var(--nuraly-color-chatbot-input-border-focus);
1075
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1076
+ }
1077
+
1078
+ .input-row {
1079
+ display: flex;
1080
+ align-items: flex-start;
1081
+ padding: var(--nuraly-spacing-05, 1rem) var(--nuraly-spacing-05, 1rem) var(--nuraly-spacing-03, 0.5rem) var(--nuraly-spacing-05, 1rem);
1082
+ min-height: var(--nuraly-spacing-06, 1.5rem);
1083
+ }
1084
+
1085
+ .chat-container--boxed .input-box {
1086
+ background-color: transparent;
1087
+ padding: var(--nuraly-spacing-chatbot-boxed-content-padding) 0;
1088
+ width: 100%;
1089
+ box-sizing: border-box;
1090
+ }
1091
+
1092
+ .chat-container--boxed .input-container {
1093
+ width: 100%;
1094
+ max-width: var(--nuraly-size-chatbot-boxed-content-max-width, 768px);
1095
+ margin-left: auto;
1096
+ margin-right: auto;
1097
+ box-sizing: border-box;
1098
+ padding-left: var(--nuraly-spacing-05, 1rem);
1099
+ padding-right: var(--nuraly-spacing-05, 1rem);
1100
+ }
1101
+
1102
+ .chat-container--boxed .messages {
1103
+ max-width: var(--nuraly-size-chatbot-boxed-content-max-width);
1104
+ margin-left: auto;
1105
+ margin-right: auto;
1106
+ }
1107
+
1108
+ :host(:not([boxed])) .input-container {
1109
+ border-radius: var(--nuraly-border-radius-md, 12px);
1110
+ margin: var(--nuraly-spacing-05, 1rem);
1111
+ box-sizing: border-box;
1112
+ width: calc(100% - 2 * var(--nuraly-spacing-05, 1rem));
1113
+ }
1114
+
1115
+ :host(:not([boxed])) .action-buttons-row {
1116
+ border-bottom-left-radius: var(--nuraly-border-radius-md, 12px);
1117
+ border-bottom-right-radius: var(--nuraly-border-radius-md, 12px);
1118
+ }
1119
+
1120
+ :host(:not([boxed])) .messages {
1121
+ padding: var(--nuraly-spacing-05, 1rem) !important;
1122
+ width: 100%;
1123
+ box-sizing: border-box;
1124
+ }
1125
+
1126
+ .action-buttons-row {
1127
+ display: flex;
1128
+ align-items: center;
1129
+ justify-content: space-between;
1130
+ gap: var(--nuraly-spacing-04, 0.75rem);
1131
+ padding: var(--nuraly-spacing-03, 0.5rem) var(--nuraly-spacing-05, 1rem) var(--nuraly-spacing-05, 1rem) var(--nuraly-spacing-05, 1rem);
1132
+ background-color: transparent;
1133
+ border-bottom-left-radius: var(--nuraly-border-radius-chatbot-input);
1134
+ border-bottom-right-radius: var(--nuraly-border-radius-chatbot-input);
1135
+ min-width: var(--nuraly-size-chatbot-actions-min-width, 240px);
1136
+ }
1137
+
1138
+ .action-buttons-left {
1139
+ display: flex;
1140
+ align-items: center;
1141
+ gap: var(--nuraly-spacing-03, 0.5rem);
1142
+ }
1143
+
1144
+ .action-buttons-right {
1145
+ display: flex;
1146
+ align-items: center;
1147
+ gap: var(--nuraly-spacing-03, 0.5rem);
1148
+ min-width: calc(var(--nuraly-size-md, 40px) + var(--nuraly-spacing-03, 0.5rem));
1149
+ justify-content: flex-end;
1150
+ }
1151
+
1152
+ .action-buttons-row nr-dropdown {
1153
+ display: inline-flex;
1154
+ align-items: center;
1155
+ --nuraly-size-md: 40px; /* Match select height */
1156
+ }
1157
+
1158
+ /* Module select styling */
1159
+ .module-select {
1160
+ max-width: var(--nuraly-size-chatbot-module-select-max-width, 300px);
1161
+ }
1162
+
1163
+ /* Ensure buttons in action row match select height */
1164
+ .action-buttons-row nr-button {
1165
+ --nuraly-size-md: 40px; /* Match select height */
1166
+ }
1167
+
1168
+ .module-display-placeholder {
1169
+ color: var(--nuraly-color-chatbot-text-secondary, #6f6f6f);
1170
+ font-size: var(--nuraly-font-size-02, 0.875rem); /* 14px */
1171
+ }
1172
+
1173
+ .module-display-single,
1174
+ .module-display-multiple {
1175
+ display: flex;
1176
+ align-items: center;
1177
+ gap: var(--nuraly-spacing-03, 0.5rem); /* 6px */
1178
+ font-size: var(--nuraly-font-size-02, 0.875rem); /* 14px */
1179
+ color: var(--nuraly-color-chatbot-text, inherit);
1180
+ }
1181
+
1182
+ .module-display-single nr-icon {
1183
+ font-size: var(--nuraly-font-size-03, 1rem); /* 16px */
1184
+ }
1185
+
1186
+ .module-display-multiple {
1187
+ font-weight: 500;
1188
+ color: var(--nuraly-color-chatbot-accent, var(--nuraly-color-primary));
1189
+ }
1190
+
1191
+ /* Dropdown styling inside chatbot */
1192
+ .input-box__upload-dropdown {
1193
+ position: relative;
1194
+ z-index: var(--nuraly-z-index-chatbot-dropdown, 100);
1195
+ }
1196
+
1197
+ .input-box__upload-dropdown ::part(panel) {
1198
+ background-color: var(--nuraly-color-chatbot-dropdown-panel-background);
1199
+ border: var(--nuraly-border-width-chatbot-message, 1px) solid var(--nuraly-color-chatbot-dropdown-panel-border);
1200
+ border-radius: var(--nuraly-border-radius-chatbot-dropdown-panel);
1201
+ box-shadow: var(--nuraly-shadow-chatbot-dropdown-panel);
1202
+ min-width: var(--nuraly-size-chatbot-dropdown-panel-min-width);
1203
+ position: fixed !important; /* Use fixed positioning to break out of containers */
1204
+ z-index: var(--nuraly-z-index-chatbot-dropdown, 100);
1205
+ transform: none !important;
1206
+ }
1207
+
1208
+ .input-box__input {
1209
+ flex: 1;
1210
+ width: 100%;
1211
+ min-height: var(--nuraly-spacing-06, 1.5rem); /* 24px */
1212
+ max-height: var(--nuraly-size-chatbot-input-max-height, 120px);
1213
+ overflow-y: auto;
1214
+ padding: 0;
1215
+ border: none;
1216
+ outline: none;
1217
+ background: transparent;
1218
+ color: var(--nuraly-color-chatbot-input-text);
1219
+ font-family: var(--nuraly-font-family-chatbot-input);
1220
+ font-size: var(--nuraly-font-size-chatbot-input);
1221
+ line-height: 1.4;
1222
+ resize: none;
1223
+ white-space: pre-wrap;
1224
+ word-wrap: break-word;
1225
+ }
1226
+
1227
+ .input-box__input:empty::before {
1228
+ content: attr(data-placeholder);
1229
+ color: var(--nuraly-color-chatbot-input-placeholder);
1230
+ pointer-events: none;
1231
+ }
1232
+
1233
+ .input-box__input:focus {
1234
+ outline: none;
1235
+ }
1236
+
1237
+ /* Styled action buttons using nr-button with CSS variable overrides */
1238
+ .input-box__file-button,
1239
+ .input-box__send-button {
1240
+ /* Remove any default margins */
1241
+ margin: 0;
1242
+ }
1243
+
1244
+ /* Target the actual button element inside nr-button components */
1245
+ .input-box__file-button button,
1246
+ .input-box__send-button button {
1247
+ background: transparent !important;
1248
+ border: var(--nuraly-border-width-chatbot-message, 1px) solid var(--nuraly-color-chatbot-action-button-border) !important;
1249
+ color: var(--nuraly-color-chatbot-action-button-text) !important;
1250
+ padding: var(--nuraly-spacing-chatbot-action-button-padding, var(--nuraly-spacing-03, 0.5rem) var(--nuraly-spacing-04, 0.75rem)) !important; /* 8px 12px */
1251
+ border-radius: var(--nuraly-border-radius-chatbot-action-button) !important;
1252
+ font-size: var(--nuraly-font-size-02, 0.875rem) !important; /* 14px */
1253
+ font-weight: 500 !important;
1254
+ min-width: auto !important;
1255
+ height: auto !important;
1256
+ gap: var(--nuraly-spacing-03, 0.5rem) !important; /* 8px */
1257
+ transition: var(--nuraly-transition-chatbot-all, all 0.2s ease) !important;
1258
+ white-space: nowrap !important;
1259
+ }
1260
+
1261
+ /* Send button specific styling for more rounded appearance */
1262
+ .input-box__send-button button {
1263
+ border-radius: var(--nuraly-border-radius-chatbot-send-button) !important;
1264
+ background-color: var(--nuraly-color-chatbot-send-button-background) !important;
1265
+ color: var(--nuraly-color-chatbot-send-button-text) !important;
1266
+ border-color: var(--nuraly-color-chatbot-send-button-border) !important;
1267
+ width: var(--nuraly-size-md, 40px) !important; /* Match other button widths */
1268
+ height: var(--nuraly-size-md, 40px) !important; /* Match other button heights */
1269
+ min-width: var(--nuraly-size-md, 40px) !important; /* Prevent shrinking */
1270
+ }
1271
+
1272
+ .input-box__file-button:hover button,
1273
+ .input-box__send-button:hover button {
1274
+ background-color: var(--nuraly-color-chatbot-action-button-background-hover) !important;
1275
+ border-color: var(--nuraly-color-chatbot-action-button-border-hover) !important;
1276
+ transform: scale(1.05);
1277
+ }
1278
+
1279
+ /* Send button hover specific styling */
1280
+ .input-box__send-button:hover button {
1281
+ background-color: var(--nuraly-color-chatbot-send-button-background-hover) !important;
1282
+ border-color: var(--nuraly-color-chatbot-send-button-border-hover) !important;
1283
+ }
1284
+
1285
+ .input-box__file-button:focus-within,
1286
+ .input-box__send-button:focus-within {
1287
+ outline: var(--nuraly-spacing-02, 0.25rem) solid var(--nuraly-color-chatbot-action-button-focus); /* 2px */
1288
+ outline-offset: var(--nuraly-spacing-02, 0.25rem); /* 2px */
1289
+ }
1290
+
1291
+ .input-box__send-button[disabled] button,
1292
+ .input-box__file-button[disabled] button {
1293
+ background-color: var(--nuraly-color-chatbot-action-button-background-disabled) !important;
1294
+ color: var(--nuraly-color-chatbot-action-button-text-disabled) !important;
1295
+ border-color: var(--nuraly-color-chatbot-action-button-border-disabled) !important;
1296
+ opacity: 0.6 !important;
1297
+ cursor: not-allowed !important;
1298
+ }
1299
+
1300
+ /* Ensure icons are properly styled within the buttons */
1301
+ .input-box__send-button nr-icon,
1302
+ .input-box__file-button nr-icon {
1303
+ pointer-events: none;
1304
+ }
1305
+
1306
+ /* RTL support */
1307
+ :host([dir='rtl']) .chat-container--with-threads {
1308
+ grid-template-columns: 1fr 280px;
1309
+ }
1310
+
1311
+ :host([dir='rtl']) .thread-sidebar {
1312
+ border-right: none;
1313
+ border-left: var(--nuraly-border-width-chatbot-message, 1px) solid var(--chatbot-border);
1314
+ }
1315
+
1316
+ :host([dir='rtl']) .message.user {
1317
+ align-self: flex-start;
1318
+ }
1319
+
1320
+ :host([dir='rtl']) .message.bot {
1321
+ align-self: flex-end;
1322
+ }
1323
+
1324
+ :host([dir='rtl']) .message.user .message__content {
1325
+ border-radius: var(--nuraly-border-radius-chatbot-message-user-rtl, var(--nuraly-border-radius-chatbot-message-user, var(--nuraly-border-radius-chatbot-message, 0)));
1326
+ }
1327
+
1328
+ :host([dir='rtl']) .message.bot .message__content {
1329
+ border-radius: var(--nuraly-border-radius-chatbot-message-bot-rtl, var(--nuraly-border-radius-chatbot-message-bot, var(--nuraly-border-radius-chatbot-message, 0)));
1330
+ }
1331
+
1332
+ :host([dir='rtl']) .message.user .message__timestamp {
1333
+ text-align: left;
1334
+ }
1335
+
1336
+ :host([dir='rtl']) .message.bot .message__timestamp {
1337
+ text-align: right;
1338
+ }
1339
+
1340
+ :host([dir='rtl']) .input-row {
1341
+ flex-direction: row-reverse;
1342
+ }
1343
+
1344
+ /* Size variants */
1345
+ :host([data-size='small']) {
1346
+ --chatbot-spacing-md: var(--nuraly-spacing-04, 0.75rem); /* 12px */
1347
+ font-size: var(--nuraly-font-size-chatbot-small, 13px);
1348
+ }
1349
+
1350
+ :host([data-size='large']) {
1351
+ --chatbot-spacing-md: var(--nuraly-spacing-chatbot-large, 20px);
1352
+ font-size: var(--nuraly-font-size-chatbot-message, 15px);
1353
+ }
1354
+
1355
+ /* Variant styles */
1356
+ :host([data-variant='rounded']) {
1357
+ --chatbot-radius: 16px;
1358
+ }
1359
+
1360
+ :host([data-variant='squared']) {
1361
+ --chatbot-radius: 4px;
1362
+ }
1363
+
1364
+ /* Mode-specific styles */
1365
+ :host([data-mode='assistant']) .message.bot .message__content {
1366
+ background: linear-gradient(135deg, var(--nuraly-color-chatbot-message-bot-background, transparent), var(--nuraly-color-chatbot-surface-hover, #f1f1f1));
1367
+ }
1368
+
1369
+ :host([data-mode='assistant']) .suggestion {
1370
+ background: linear-gradient(135deg, var(--chatbot-surface), var(--chatbot-surface-hover));
1371
+ }
1372
+
1373
+ /* Focus states */
1374
+ .chat-container--focused {
1375
+ outline: 2px solid var(--chatbot-user-message-bg);
1376
+ outline-offset: 2px;
1377
+ }
1378
+
1379
+ /* Artifact panel */
1380
+ .artifact-panel {
1381
+ width: var(--nuraly-size-chatbot-artifact-panel-width, 400px);
1382
+ min-width: var(--nuraly-size-chatbot-artifact-panel-min-width, 300px);
1383
+ flex-shrink: 0;
1384
+ display: flex;
1385
+ flex-direction: row;
1386
+ background-color: var(--nuraly-color-chatbot-background, #ffffff);
1387
+ overflow: hidden;
1388
+ position: relative;
1389
+ }
1390
+
1391
+ .artifact-panel__resize-handle {
1392
+ flex-shrink: 0;
1393
+ width: 8px;
1394
+ cursor: col-resize;
1395
+ display: flex;
1396
+ align-items: center;
1397
+ justify-content: center;
1398
+ background: var(--nuraly-color-chatbot-border, #e0e0e0);
1399
+ transition: background 0.15s;
1400
+ z-index: 1;
1401
+ }
1402
+ .artifact-panel__resize-handle:hover,
1403
+ .artifact-panel__resize-handle--active {
1404
+ background: var(--nuraly-color-chatbot-text-secondary, #9ca3af);
1405
+ }
1406
+ .artifact-panel__resize-bar {
1407
+ width: 2px;
1408
+ height: 24px;
1409
+ border-radius: 1px;
1410
+ background: var(--nuraly-color-chatbot-text-secondary, #9ca3af);
1411
+ transition: background 0.15s;
1412
+ }
1413
+ .artifact-panel__resize-handle:hover .artifact-panel__resize-bar,
1414
+ .artifact-panel__resize-handle--active .artifact-panel__resize-bar {
1415
+ background: var(--nuraly-color-chatbot-text-primary, #1f2937);
1416
+ }
1417
+
1418
+ .artifact-panel__body {
1419
+ flex: 1;
1420
+ display: flex;
1421
+ flex-direction: column;
1422
+ min-width: 0;
1423
+ border-left: 1px solid var(--nuraly-color-chatbot-border, #e0e0e0);
1424
+ overflow: hidden;
1425
+ }
1426
+
1427
+ .artifact-panel__header {
1428
+ display: flex;
1429
+ align-items: center;
1430
+ justify-content: space-between;
1431
+ padding: 12px 16px;
1432
+ border-bottom: 1px solid var(--nuraly-color-chatbot-border, #e0e0e0);
1433
+ flex-shrink: 0;
1434
+ }
1435
+
1436
+ .artifact-panel__header-info {
1437
+ display: flex;
1438
+ align-items: center;
1439
+ gap: 8px;
1440
+ min-width: 0;
1441
+ flex: 1;
1442
+ }
1443
+
1444
+ .artifact-panel__lang-badge {
1445
+ flex-shrink: 0;
1446
+ --nuraly-tag-font-size: 11px;
1447
+ text-transform: uppercase;
1448
+ letter-spacing: 0.02em;
1449
+ }
1450
+
1451
+ .artifact-panel__title {
1452
+ font-size: 13px;
1453
+ font-weight: 500;
1454
+ color: var(--nuraly-color-chatbot-text-primary, #1f2937);
1455
+ white-space: nowrap;
1456
+ overflow: hidden;
1457
+ text-overflow: ellipsis;
1458
+ }
1459
+
1460
+ .artifact-panel__actions {
1461
+ display: flex;
1462
+ align-items: center;
1463
+ gap: 4px;
1464
+ flex-shrink: 0;
1465
+ }
1466
+
1467
+ .artifact-panel__content {
1468
+ flex: 1;
1469
+ overflow: auto;
1470
+ padding: 16px;
1471
+ }
1472
+
1473
+ .artifact-panel__code {
1474
+ margin: 0;
1475
+ padding: 16px;
1476
+ background: var(--nuraly-color-chatbot-artifact-code-bg, #f6f8fa);
1477
+ border-radius: 8px;
1478
+ font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
1479
+ font-size: 13px;
1480
+ line-height: 1.5;
1481
+ overflow: auto;
1482
+ white-space: pre-wrap;
1483
+ word-wrap: break-word;
1484
+ color: var(--nuraly-color-chatbot-text-primary, #1f2937);
1485
+ tab-size: 2;
1486
+ }
1487
+
1488
+ .artifact-panel__code code {
1489
+ font-family: inherit;
1490
+ font-size: inherit;
1491
+ }
1492
+
1493
+ .artifact-panel__rendered-md {
1494
+ font-size: 14px;
1495
+ line-height: 1.6;
1496
+ color: var(--nuraly-color-chatbot-text-primary, #1f2937);
1497
+ }
1498
+
1499
+ .artifact-panel__rendered-md h1,
1500
+ .artifact-panel__rendered-md h2,
1501
+ .artifact-panel__rendered-md h3 {
1502
+ margin: 0.6em 0 0.4em;
1503
+ font-weight: 600;
1504
+ }
1505
+
1506
+ .artifact-panel__rendered-md p {
1507
+ margin: 0.5em 0;
1508
+ }
1509
+
1510
+ .artifact-panel__rendered-md pre {
1511
+ background: var(--nuraly-color-chatbot-artifact-code-bg, #f6f8fa);
1512
+ padding: 12px;
1513
+ border-radius: 6px;
1514
+ overflow: auto;
1515
+ }
1516
+
1517
+ .artifact-panel__rendered-html {
1518
+ font-size: 14px;
1519
+ line-height: 1.6;
1520
+ color: var(--nuraly-color-chatbot-text-primary, #1f2937);
1521
+ }
1522
+
1523
+ .artifact-panel__rendered-text {
1524
+ font-size: 14px;
1525
+ line-height: 1.6;
1526
+ color: var(--nuraly-color-chatbot-text-primary, #1f2937);
1527
+ white-space: pre-wrap;
1528
+ word-wrap: break-word;
1529
+ font-family: system-ui, -apple-system, sans-serif;
1530
+ }
1531
+
1532
+ /* Responsive design */
1533
+ @media (max-width: 768px) {
1534
+ :host {
1535
+ min-width: 0;
1536
+ }
1537
+
1538
+ .chatbot-container {
1539
+ min-width: 0;
1540
+ }
1541
+
1542
+ .chatbot-container--with-artifact-panel {
1543
+ position: relative;
1544
+ }
1545
+
1546
+ .artifact-panel {
1547
+ position: absolute;
1548
+ top: 0;
1549
+ right: 0;
1550
+ bottom: 0;
1551
+ width: 100% !important;
1552
+ min-width: 0;
1553
+ z-index: 20;
1554
+ box-shadow: -2px 0 8px rgba(0, 0, 0, 0.15);
1555
+ }
1556
+
1557
+ .artifact-panel__resize-handle {
1558
+ display: none;
1559
+ }
1560
+
1561
+ .thread-sidebar {
1562
+ width: 200px;
1563
+ }
1564
+
1565
+ .input-container {
1566
+ min-width: 0;
1567
+ }
1568
+
1569
+ .action-buttons-row {
1570
+ min-width: 0;
1571
+ }
1572
+
1573
+ .message {
1574
+ max-width: 90%;
1575
+ }
1576
+
1577
+ .input-row {
1578
+ flex-wrap: wrap;
1579
+ }
1580
+
1581
+ /* Boxed mode responsive fixes */
1582
+ :host([boxed]) .chatbot-main {
1583
+ max-width: 100%;
1584
+ }
1585
+
1586
+ :host([boxed]) .messages {
1587
+ width: 100%;
1588
+ padding: var(--nuraly-spacing-chatbot-message-padding, 8px) var(--nuraly-spacing-04, 0.75rem);
1589
+ }
1590
+
1591
+ .chat-container--boxed .input-container {
1592
+ width: 100%;
1593
+ padding-left: var(--nuraly-spacing-04, 0.75rem);
1594
+ padding-right: var(--nuraly-spacing-04, 0.75rem);
1595
+ }
1596
+
1597
+ .chat-container--boxed .input-box {
1598
+ padding: var(--nuraly-spacing-04, 0.75rem) 0;
1599
+ }
1600
+
1601
+ :host([boxed]) .chatbot-content:has(.empty-state) + .input-box {
1602
+ max-width: 100%;
1603
+ padding: 0 var(--nuraly-spacing-04, 0.75rem);
1604
+ }
1605
+ }
1606
+
1607
+ @media (max-width: 480px) {
1608
+ .chatbot-container--with-sidebar {
1609
+ position: relative;
1610
+ }
1611
+
1612
+ .thread-sidebar {
1613
+ position: absolute;
1614
+ top: 0;
1615
+ left: 0;
1616
+ bottom: 0;
1617
+ width: 260px;
1618
+ z-index: 10;
1619
+ box-shadow: 2px 0 8px rgba(0, 0, 0, 0.15);
1620
+ }
1621
+
1622
+ .message {
1623
+ max-width: 95%;
1624
+ }
1625
+
1626
+ .uploaded-file {
1627
+ max-width: 150px;
1628
+ }
1629
+
1630
+ .input-container {
1631
+ min-width: 0;
1632
+ width: 100%;
1633
+ }
1634
+
1635
+ /* Boxed mode mobile fixes */
1636
+ :host([boxed]) .messages {
1637
+ padding: var(--nuraly-spacing-chatbot-message-padding, 8px) var(--nuraly-spacing-03, 0.5rem);
1638
+ }
1639
+
1640
+ .chat-container--boxed .input-container {
1641
+ padding-left: var(--nuraly-spacing-03, 0.5rem);
1642
+ padding-right: var(--nuraly-spacing-03, 0.5rem);
1643
+ }
1644
+
1645
+ .chat-container--boxed .input-box {
1646
+ padding: var(--nuraly-spacing-03, 0.5rem) 0;
1647
+ }
1648
+
1649
+ :host([boxed]) .chatbot-content:has(.empty-state) + .input-box {
1650
+ padding: 0 var(--nuraly-spacing-03, 0.5rem);
1651
+ }
1652
+
1653
+ .input-row {
1654
+ padding: var(--nuraly-spacing-04, 0.75rem);
1655
+ }
1656
+ }
1657
+
1658
+
1659
+ /* High contrast mode */
1660
+ @media (prefers-contrast: high) {
1661
+ :host {
1662
+ --chatbot-border: #000000;
1663
+ --chatbot-text-primary: #000000;
1664
+ --chatbot-user-message-bg: #0000ff;
1665
+ --chatbot-error-border: #ff0000;
1666
+ }
1667
+ }
1668
+
1669
+ /* Reduced motion */
1670
+ @media (prefers-reduced-motion: reduce) {
1671
+ * {
1672
+ animation-duration: 0.01ms !important;
1673
+ animation-iteration-count: 1 !important;
1674
+ transition-duration: 0.01ms !important;
1675
+ }
1676
+ }
1677
+
1678
+ `
1679
+ /**
1680
+ * @license
1681
+ * Copyright 2023 Nuraly, Laabidi Aymen
1682
+ * SPDX-License-Identifier: MIT
1683
+ */;!function(t){t.User="user",t.Bot="bot",t.System="system"}(D||(D={})),function(t){t.Dots="dots",t.Spinner="spinner",t.Wave="wave",t.Typing="typing"}(F||(F={})),function(t){t.Small="small",t.Medium="medium",t.Large="large",t.Full="full"}(N||(N={})),function(t){t.Default="default",t.Minimal="minimal",t.Rounded="rounded",t.ChatGPT="chatgpt"}(L||(L={})),function(t){t.Default="default",t.Error="error",t.Success="success",t.Loading="loading",t.Pending="pending"}(B||(B={})),function(t){t.Image="image",t.Document="document",t.Audio="audio",t.Video="video",t.Archive="archive",t.Code="code",t.Unknown="unknown"}(U||(U={})),function(t){t.Upload="upload",t.Clear="clear",t.Export="export",t.Settings="settings",t.Microphone="microphone",t.Camera="camera",t.Attach="attach"}(W||(W={}));const J="",q=1e3,V=100,G=10485760,K=5,Y=["image/jpeg","image/png","image/gif","image/webp","application/pdf","text/plain","text/csv","application/json","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],X={"image/":U.Image,"audio/":U.Audio,"video/":U.Video,"application/pdf":U.Document,"application/msword":U.Document,"application/vnd.openxmlformats-officedocument":U.Document,"text/":U.Document,"application/zip":U.Archive,"application/x-rar":U.Archive,"application/javascript":U.Code,"text/html":U.Code,"text/css":U.Code};
1684
+ /**
1685
+ * @license
1686
+ * Copyright 2023 Nuraly, Laabidi Aymen
1687
+ * SPDX-License-Identifier: MIT
1688
+ */
1689
+ function Q(t){if(!t)return"";const e=t instanceof Date?t:new Date(t);if(Number.isNaN(e.getTime()))return"";const n=new Date,i={hour:"numeric",minute:"2-digit",hour12:!0};if(e.toDateString()===n.toDateString())return e.toLocaleTimeString(void 0,i);const o=Object.assign({month:"short",day:"numeric"},i);return e.toLocaleDateString(void 0,o)}function Z(t){return t.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}const tt={javascript:"JavaScript",typescript:"TypeScript",python:"Python",java:"Java",go:"Go",rust:"Rust",c:"C",cpp:"C++",csharp:"C#",ruby:"Ruby",php:"PHP",swift:"Swift",kotlin:"Kotlin",html:"HTML",css:"CSS",scss:"SCSS",sql:"SQL",graphql:"GraphQL",json:"JSON",yaml:"YAML",xml:"XML",toml:"TOML",markdown:"Markdown",md:"Markdown",bash:"Bash",shell:"Shell",sh:"Shell",zsh:"Zsh",dockerfile:"Dockerfile",makefile:"Makefile",text:"Text"};function et(t){return tt[t]||t.charAt(0).toUpperCase()+t.slice(1)}function nt(t){let e=Z(t);return e=e.replaceAll(/```([\s\S]*?)```/g,'<pre class="md-code"><code>$1</code></pre>'),e=e.replaceAll(/`([^`]+)`/g,'<code class="md-inline-code">$1</code>'),e=e.replaceAll(/^###[^\S\n]+(.+)$/gm,"<h3>$1</h3>"),e=e.replaceAll(/^##[^\S\n]+(.+)$/gm,"<h2>$1</h2>"),e=e.replaceAll(/^#[^\S\n]+(.+)$/gm,"<h1>$1</h1>"),e=e.replaceAll(/\*\*([^*]+)\*\*/g,"<strong>$1</strong>"),e=e.replaceAll(/\*([^*]+)\*/g,"<em>$1</em>"),e=e.replaceAll(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" target="_blank" rel="noopener noreferrer">$1</a>'),e=e.replaceAll(/(?:^|\n)-\s+(.+)(?=\n|$)/g,(t,e)=>`\n<ul><li>${e}</li></ul>`),e=e.replaceAll(/<ul>\s*<li>([\s\S]*?)<\/li>\s*<\/ul>\n<ul>/g,"<ul><li>$1</li>"),e=e.split(/\n\n+/).map(t=>/^(<h\d|<pre|<ul|<ol|<blockquote)/.test(t.trim())?t:`<p>${t.replaceAll("\n","<br/>")}</p>`).join("\n"),e}
1690
+ /**
1691
+ * @license
1692
+ * Copyright 2023 Nuraly, Laabidi Aymen
1693
+ * SPDX-License-Identifier: MIT
1694
+ */function it(t,i){var o,r,s,c,d,h,u,p;const f=null===(o=t.text)||void 0===o?void 0:o.includes("[ERROR_START]"),g={error:!!t.error||f,introduction:!!t.introduction,[t.sender]:!0};return n`
1695
+ <div
1696
+ class="message ${a(g)}"
1697
+ part="message"
1698
+ data-sender="${t.sender}"
1699
+ data-id="${t.id}"
1700
+ >
1701
+ <div class="message__content" part="message-content">
1702
+ ${f?function(t){const e=t.match(/\[ERROR_START\]\[ERROR_TITLE_START\]([\s\S]*?)\[ERROR_TITLE_END\]([\s\S]*?)\[ERROR_END\]/);if(e){const t=e[1],i=e[2];return n`
1703
+ <div class="message__error-container" part="message-error">
1704
+ ${t?n`<div class="message__error-title" part="message-error-title">${t}</div>`:""}
1705
+ <div class="message__error-description" part="message-error-description">${i}</div>
1706
+ </div>
1707
+ `}return n`${t}`}(null!==(s=null===(r=t.text)||void 0===r?void 0:r.trim())&&void 0!==s?s:""):(null===(c=null==t?void 0:t.metadata)||void 0===c?void 0:c.renderAsHtml)?l(null!==(h=null===(d=t.text)||void 0===d?void 0:d.trim())&&void 0!==h?h:""):l((null!==(p=null===(u=t.text)||void 0===u?void 0:u.trim())&&void 0!==p?p:"").replaceAll("\n","<br>"))}
1708
+ </div>
1709
+ ${t.files&&t.files.length>0?n`
1710
+ <div class="message__attachments" part="message-attachments" role="list" aria-label="${v("Attached files")}">
1711
+ ${t.files.map(t=>{return n`
1712
+ <nr-dropdown
1713
+ trigger="hover"
1714
+ placement="top-end"
1715
+ size="small"
1716
+ class="message-file-preview-dropdown"
1717
+ >
1718
+ <nr-tag
1719
+ slot="trigger"
1720
+ class="message__attachment-tag"
1721
+ size="small"
1722
+ @click=${()=>{var e;return null===(e=i.onFileClick)||void 0===e?void 0:e.call(i,t)}}
1723
+ style="cursor: pointer;"
1724
+ >${t.name}</nr-tag>
1725
+
1726
+ <div slot="content" class="message-file-preview-content">
1727
+ ${e=t.mimeType,e.startsWith("image/")&&(t.url||t.previewUrl)?n`
1728
+ <img
1729
+ src="${t.previewUrl||t.url}"
1730
+ alt="${t.name}"
1731
+ class="message-file-preview-image"
1732
+ />
1733
+ `:n`
1734
+ <nr-icon
1735
+ .name=${function(t){return t.startsWith("image/")?"image":t.startsWith("video/")?"video":t.startsWith("audio/")?"music":"application/pdf"===t?"file-pdf":t.startsWith("text/")?"file-text":"file"}(t.mimeType)}
1736
+ size="large"
1737
+ class="message-file-preview-icon"
1738
+ ></nr-icon>
1739
+ `}
1740
+ <div class="message-file-preview-info">
1741
+ <div class="message-file-preview-name" title="${t.name}">${t.name}</div>
1742
+ <div class="message-file-preview-details">
1743
+ <span>${function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(1024));return Math.round(t/Math.pow(1024,e)*100)/100+" "+["Bytes","KB","MB","GB"][e]}(t.size)}</span>
1744
+ </div>
1745
+ </div>
1746
+ </div>
1747
+ </nr-dropdown>
1748
+ `;var e})}
1749
+ </div>
1750
+ `:e}
1751
+ <div class="message__footer" part="message-footer">
1752
+ <div class="message__timestamp" part="message-timestamp">
1753
+ ${Q(t.timestamp)}
1754
+ </div>
1755
+ <nr-icon
1756
+ name="copy"
1757
+ size="small"
1758
+ color="var(--nuraly-color-chatbot-timestamp)"
1759
+ class="message__copy"
1760
+ @click=${()=>i.onCopy(t)}
1761
+ @keydown=${e=>i.onCopyKeydown(e,t)}
1762
+ title="${v("Copy message")}"
1763
+ aria-label="${v("Copy message")}"
1764
+ role="button"
1765
+ tabindex="0"
1766
+ ></nr-icon>
1767
+ </div>
1768
+ ${t.error?n`
1769
+ <nr-button
1770
+ type="secondary"
1771
+ size="small"
1772
+ class="message__retry"
1773
+ part="retry-button"
1774
+ @click=${()=>i.onRetry(t)}
1775
+ @keydown=${i.onRetryKeydown}
1776
+ aria-label="${v("Retry message")}"
1777
+ >
1778
+ ${v("Retry")}
1779
+ </nr-button>`:e}
1780
+ </div>
1781
+ `}function ot(t,i,o,r){return n`
1782
+ <div class="messages" part="messages">
1783
+ ${0===t.length?n`
1784
+ <div class="empty-state" part="empty-state">
1785
+ <slot name="empty-state">
1786
+ <div class="empty-state__content">
1787
+ ${v("Start a conversation")}
1788
+ </div>
1789
+ </slot>
1790
+ </div>
1791
+ `:e}
1792
+ ${t.map(t=>it(t,r))}
1793
+ ${i}
1794
+ ${o}
1795
+ </div>
1796
+ `}
1797
+ /**
1798
+ * @license
1799
+ * Copyright 2023 Nuraly, Laabidi Aymen
1800
+ * SPDX-License-Identifier: MIT
1801
+ */function rt(t,i,o){return i.length>0?n`
1802
+ <div class="suggestion-container" part="suggestions">
1803
+ ${i.map(t=>function(t,e){return n`
1804
+ <div
1805
+ class="suggestion ${a({"suggestion--disabled":!1===t.enabled})}"
1806
+ part="suggestion"
1807
+ role="button"
1808
+ tabindex="0"
1809
+ @click=${()=>e.onClick(t)}
1810
+ @keydown=${e.onKeydown}
1811
+ data-id="${t.id}"
1812
+ aria-label="${v("Select suggestion: ")}${t.text}"
1813
+ >
1814
+ ${t.text}
1815
+ </div>
1816
+ `}(t,o))}
1817
+ </div>
1818
+ `:e}
1819
+ /**
1820
+ * @license
1821
+ * Copyright 2023 Nuraly, Laabidi Aymen
1822
+ * SPDX-License-Identifier: MIT
1823
+ */function st(t,e,i){return n`
1824
+ <div class="context-tags-row" part="context-tags">
1825
+ ${d(t,t=>t.id,t=>{return n`
1826
+ <nr-dropdown
1827
+ trigger="hover"
1828
+ placement="top"
1829
+ size="small"
1830
+ class="file-preview-dropdown"
1831
+ >
1832
+ <nr-tag
1833
+ slot="trigger"
1834
+ class="context-tag"
1835
+ size="small"
1836
+ closable
1837
+ @click=${()=>null==i?void 0:i(t)}
1838
+ @nr-tag-close=${()=>e(t.id)}
1839
+ style="cursor: pointer;"
1840
+ >${t.name}</nr-tag>
1841
+
1842
+ <div slot="content" class="file-preview-content">
1843
+ ${o=t.mimeType,o.startsWith("image/")&&(t.url||t.previewUrl)?n`
1844
+ <img
1845
+ src="${t.previewUrl||t.url}"
1846
+ alt="${t.name}"
1847
+ class="file-preview-image"
1848
+ />
1849
+ `:n`
1850
+ <nr-icon
1851
+ .name=${(t=>t.startsWith("image/")?"image":t.startsWith("video/")?"video":t.startsWith("audio/")?"music":"application/pdf"===t?"file-pdf":t.startsWith("text/")?"file-text":"file")(t.mimeType)}
1852
+ size="large"
1853
+ class="file-preview-icon"
1854
+ ></nr-icon>
1855
+ `}
1856
+ <div class="file-preview-info">
1857
+ <div class="file-preview-name" title="${t.name}">${t.name}</div>
1858
+ <div class="file-preview-details">
1859
+ <span>${(t=>{if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(1024));return Math.round(t/Math.pow(1024,e)*100)/100+" "+["Bytes","KB","MB","GB"][e]})(t.size)}</span>
1860
+ </div>
1861
+ </div>
1862
+ </div>
1863
+ </nr-dropdown>
1864
+ `;var o})}
1865
+ </div>
1866
+ `}function at(t,i){return n`
1867
+ <div class="action-buttons-row">
1868
+ <div class="action-buttons-left">
1869
+ ${t.enableFileUpload?function(t,e){return n`
1870
+ <nr-dropdown
1871
+ .items=${t.fileUploadItems}
1872
+ trigger="click"
1873
+ placement="top-start"
1874
+ size="small"
1875
+ auto-close
1876
+ ?disabled=${t.disabled}
1877
+ @nr-dropdown-item-click=${e.onFileDropdownClick}
1878
+ >
1879
+ <nr-button
1880
+ slot="trigger"
1881
+ part="file-button"
1882
+ type="default"
1883
+ size="small"
1884
+ .icon=${["upload"]}
1885
+ ?disabled=${t.disabled}
1886
+ aria-label="${v("Attach files")}"
1887
+ title="${v("Attach files")}"
1888
+ >
1889
+ Attach
1890
+ </nr-button>
1891
+ </nr-dropdown>
1892
+ `}(t,i):e}
1893
+ ${t.enableModuleSelection&&t.moduleOptions.length>0?function(t,e){return n`
1894
+ <nr-select
1895
+ .options=${t.moduleOptions}
1896
+ .value=${t.selectedModules}
1897
+ multiple
1898
+ placeholder="${t.moduleSelectionLabel}"
1899
+ size="small"
1900
+ ?disabled=${t.disabled}
1901
+ searchable
1902
+ search-placeholder="${v("Search modules...")}"
1903
+ use-custom-selected-display
1904
+ part="module-select"
1905
+ class="module-select"
1906
+ @nr-change=${e.onModuleChange}
1907
+ aria-label="${v("Select modules")}"
1908
+ >
1909
+ <span slot="selected-display">
1910
+ ${t.renderModuleDisplay()}
1911
+ </span>
1912
+ </nr-select>
1913
+ `}(t,i):e}
1914
+ </div>
1915
+
1916
+ <div class="action-buttons-right">
1917
+ ${t.showSendButton&&(!t.disabled||t.isQueryRunning)&&(t.currentInput.trim()||t.uploadedFiles.length>0||t.isQueryRunning)?function(t,e){return n`
1918
+ <nr-button
1919
+ class="input-box__send-button"
1920
+ part="send-button"
1921
+ type="default"
1922
+ size="small"
1923
+ .iconRight=${t.isQueryRunning?"square":"arrow-up"}
1924
+ @click=${t.isQueryRunning?e.onStop:e.onSend}
1925
+ @keydown=${e.onSendKeydown}
1926
+ aria-label="${t.isQueryRunning?v("Stop query"):v("Send message")}"
1927
+ title="${t.isQueryRunning?v("Stop query"):v("Send message")}"
1928
+ >
1929
+ ${t.isQueryRunning?v("Stop"):v("Send")}
1930
+ </nr-button>
1931
+ `}(t,i):e}
1932
+ </div>
1933
+ </div>
1934
+ `}
1935
+ /**
1936
+ * @license
1937
+ * Copyright 2023 Nuraly, Laabidi Aymen
1938
+ * SPDX-License-Identifier: MIT
1939
+ */
1940
+ function lt(t,e,i){const o=t.messages.length>0?t.messages[t.messages.length-1]:null,r=o&&"string"==typeof o.text?o.text:"";return n`
1941
+ <div
1942
+ class="thread-item ${a({"thread-item--active":t.id===e.activeThreadId})}"
1943
+ @click=${()=>i.onSelectThread(t.id)}
1944
+ part="thread-item"
1945
+ >
1946
+ <div class="thread-item__header">
1947
+ ${e.editingThreadId===t.id&&i.onRenameThread?n`
1948
+ <input
1949
+ class="thread-item__rename-input"
1950
+ type="text"
1951
+ .value=${t.title||""}
1952
+ @click=${t=>t.stopPropagation()}
1953
+ @keydown=${e=>{if("Enter"===e.key){const n=e.target.value.trim();n&&i.onRenameThread(t.id,n)}"Escape"===e.key&&i.onRenameThread(t.id,t.title||"")}}
1954
+ @blur=${e=>{const n=e.target.value.trim();n&&n!==t.title?i.onRenameThread(t.id,n):i.onRenameThread(t.id,t.title||"")}}
1955
+ />
1956
+ `:n`
1957
+ <div class="thread-item__title">${t.title||v("New Chat")}</div>
1958
+ `}
1959
+ <div class="thread-item__actions">
1960
+ ${i.onRenameThread&&e.editingThreadId!==t.id?n`
1961
+ <button
1962
+ class="thread-item__action-btn"
1963
+ title="${v("Rename conversation")}"
1964
+ @click=${e=>{e.stopPropagation(),e.target.dispatchEvent(new CustomEvent("nr-thread-edit",{bubbles:!0,composed:!0,detail:{threadId:t.id}}))}}
1965
+ part="thread-rename"
1966
+ >
1967
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/></svg>
1968
+ </button>
1969
+ `:""}
1970
+ ${i.onBookmarkThread?n`
1971
+ <button
1972
+ class="thread-item__action-btn ${t.bookmarked?"thread-item__bookmark--active":""}"
1973
+ title="${t.bookmarked?v("Remove bookmark"):v("Bookmark conversation")}"
1974
+ @click=${e=>{e.stopPropagation(),i.onBookmarkThread(t.id)}}
1975
+ part="thread-bookmark"
1976
+ >
1977
+ ${t.bookmarked?n`
1978
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg>
1979
+ `:n`
1980
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg>
1981
+ `}
1982
+ </button>
1983
+ `:""}
1984
+ ${i.onDeleteThread?n`
1985
+ <nr-popconfirm
1986
+ title="${v("Delete this conversation?")}"
1987
+ description="${v("This action cannot be undone.")}"
1988
+ ok-text="${v("Delete")}"
1989
+ cancel-text="${v("Cancel")}"
1990
+ ok-type="danger"
1991
+ placement="right"
1992
+ @click=${t=>t.stopPropagation()}
1993
+ @nr-confirm=${()=>i.onDeleteThread(t.id)}
1994
+ >
1995
+ <button
1996
+ slot="trigger"
1997
+ class="thread-item__action-btn thread-item__delete"
1998
+ title="${v("Delete conversation")}"
1999
+ part="thread-delete"
2000
+ >
2001
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"/><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/><line x1="10" y1="11" x2="10" y2="17"/><line x1="14" y1="11" x2="14" y2="17"/></svg>
2002
+ </button>
2003
+ </nr-popconfirm>
2004
+ `:""}
2005
+ </div>
2006
+ </div>
2007
+ <div class="thread-item__preview">
2008
+ ${r}
2009
+ </div>
2010
+ <div class="thread-item__timestamp">${Q(t.updatedAt)}</div>
2011
+ </div>
2012
+ `}function ct(t,i){if(!t.isOpen||!t.file)return e;const o=t.file,r=o.mimeType.startsWith("image/"),s="application/pdf"===o.mimeType||o.name.toLowerCase().endsWith(".pdf");return n`
2013
+ <nr-modal
2014
+ .open=${t.isOpen}
2015
+ size="large"
2016
+ title="${o.name}"
2017
+ @modal-close=${i.onClose}
2018
+ >
2019
+ <div style="width: 100%; height: 75vh; display: flex; flex-direction: column; align-items: stretch; justify-content: stretch;">
2020
+ ${r&&(o.url||o.previewUrl)?n`
2021
+ <img
2022
+ src="${o.url||o.previewUrl}"
2023
+ alt="${o.name}"
2024
+ style="max-width: 100%; max-height: 100%; object-fit: contain; align-self: center;"
2025
+ />
2026
+ `:s&&o.url?n`
2027
+ <div style="width: 100%; height: 100%; position: relative;">
2028
+ <nr-document
2029
+ .src="${o.url}"
2030
+ .type="${"pdf"}"
2031
+ .width="${"100%"}"
2032
+ .height="${"100%"}"
2033
+ .block="${!0}"
2034
+ style="width: 100%; height: 100%; display: block;"
2035
+ ></nr-document>
2036
+ </div>
2037
+ `:n`
2038
+ <div style="text-align: center; padding: 2rem; align-self: center;">
2039
+ <nr-icon name="file" size="xlarge" style="margin-bottom: 1rem;"></nr-icon>
2040
+ <p style="font-size: 1.1rem; font-weight: 500; margin-bottom: 0.5rem;">${o.name}</p>
2041
+ <p style="color: var(--nuraly-color-chatbot-timestamp); margin-bottom: 1.5rem;">
2042
+ ${
2043
+ /**
2044
+ * @license
2045
+ * Copyright 2023 Nuraly, Laabidi Aymen
2046
+ * SPDX-License-Identifier: MIT
2047
+ */
2048
+ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(1024));return Math.round(t/Math.pow(1024,e)*100)/100+" "+["Bytes","KB","MB","GB"][e]}(o.size)}
2049
+ </p>
2050
+ ${o.url?n`
2051
+ <nr-button
2052
+ type="primary"
2053
+ @click=${()=>window.open(o.url,"_blank")}
2054
+ >
2055
+ Open File
2056
+ </nr-button>
2057
+ `:e}
2058
+ </div>
2059
+ `}
2060
+ </div>
2061
+ </nr-modal>
2062
+ `}
2063
+ /**
2064
+ * @license
2065
+ * Copyright 2023 Nuraly, Laabidi Aymen
2066
+ * SPDX-License-Identifier: MIT
2067
+ */function dt(t,i){var o;if(!t.isOpen||!t.artifact)return e;const r=t.artifact,s=et(r.language);return n`
2068
+ <div class="artifact-panel" part="artifact-panel">
2069
+ <div class="artifact-panel__resize-handle" part="artifact-panel-resize-handle">
2070
+ <div class="artifact-panel__resize-bar"></div>
2071
+ </div>
2072
+ <div class="artifact-panel__body">
2073
+ <div class="artifact-panel__header">
2074
+ <div class="artifact-panel__header-info">
2075
+ <nr-tag size="small" class="artifact-panel__lang-badge">${s}</nr-tag>
2076
+ <span class="artifact-panel__title">${r.title}</span>
2077
+ </div>
2078
+ <div class="artifact-panel__actions">
2079
+ <nr-button
2080
+ type="text"
2081
+ size="small"
2082
+ .icon=${["copy"]}
2083
+ @click=${()=>i.onCopy(r)}
2084
+ title="${v("Copy code")}"
2085
+ aria-label="${v("Copy code")}"
2086
+ ></nr-button>
2087
+ <nr-button
2088
+ type="text"
2089
+ size="small"
2090
+ .icon=${["x"]}
2091
+ @click=${i.onClose}
2092
+ title="${v("Close panel")}"
2093
+ aria-label="${v("Close panel")}"
2094
+ ></nr-button>
2095
+ </div>
2096
+ </div>
2097
+ <div class="artifact-panel__content">
2098
+ ${(null===(o=t.renderContent)||void 0===o?void 0:o.call(t,r))||function(t){switch(t.language){case"json":{let e;try{e=JSON.stringify(JSON.parse(t.content),null,2)}catch(n){e=t.content}return n`<pre class="artifact-panel__code"><code>${e}</code></pre>`}case"md":case"markdown":return n`<div class="artifact-panel__rendered-md">${l(nt(t.content))}</div>`;case"html":return n`<div class="artifact-panel__rendered-html">${l(t.content)}</div>`;case"text":case"txt":return n`<div class="artifact-panel__rendered-text">${t.content}</div>`;default:return n`<pre class="artifact-panel__code"><code>${t.content}</code></pre>`}}(r)}
2099
+ </div>
2100
+ </div>
2101
+ </div>
2102
+ `}
2103
+ /**
2104
+ * @license
2105
+ * Copyright 2023 Nuraly, Laabidi Aymen
2106
+ * SPDX-License-Identifier: MIT
2107
+ */function ht(t,i){return!1!==t.showMessages?n`
2108
+ <div class="chatbot-content" part="content">
2109
+ ${ot(t.messages,rt(t.chatStarted,t.suggestions,i.suggestion),t.isTyping?function(t,i,o){if(!t)return e;const r=i===F.Dots?n`
2110
+ <div class="dots">
2111
+ <span></span>
2112
+ <span></span>
2113
+ <span></span>
2114
+ </div>
2115
+ `:n`<div class="spinner"></div>`;return n`
2116
+ <div class="message bot loading" part="typing-indicator">
2117
+ <div class="message__content">
2118
+ ${r}
2119
+ ${o?n`<span class="loading-text">${o.split("").map((t,e)=>n`<span class="loading-text__char" style="animation-delay:${.04*e}s">${" "===t?"Β ":t}</span>`)}</span>`:e}
2120
+ </div>
2121
+ </div>
2122
+ `}(t.isTyping,t.loadingIndicator||F.Spinner,t.loadingText):e,i.message)}
2123
+ <slot name="messages"></slot>
2124
+ </div>
2125
+ `:t.suggestions&&t.suggestions.length>0?n`
2126
+ <div class="input-only-suggestions" part="input-only-suggestions">
2127
+ ${rt(0,t.suggestions,i.suggestion)}
2128
+ </div>
2129
+ `:e}function ut(t,i){var o;const r=t.enableArtifacts&&(null===(o=t.artifactPanel)||void 0===o?void 0:o.isOpen);return n`
2130
+ <div class="chatbot-container ${a({"chatbot-container--with-sidebar":t.enableThreads&&t.isThreadSidebarOpen,"chatbot-container--with-artifact-panel":!!r})}" part="container">
2131
+
2132
+ ${t.enableThreads&&t.isThreadSidebarOpen&&t.threadSidebar&&i.threadSidebar?function(t,i){const o=t.threads.filter(t=>t.bookmarked),r=t.threads.filter(t=>!t.bookmarked);return n`
2133
+ <div class="thread-sidebar" part="thread-sidebar">
2134
+ <div class="thread-sidebar__header">
2135
+ <h3>${v("Conversations")}</h3>
2136
+ </div>
2137
+
2138
+ <div class="thread-list">
2139
+ ${o.length>0?n`
2140
+ <div class="thread-section" part="thread-section-bookmarks">
2141
+ <div class="thread-section__label">
2142
+ <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg>
2143
+ ${v("Bookmarks")}
2144
+ </div>
2145
+ ${d(o,t=>t.id,e=>lt(e,t,i))}
2146
+ </div>
2147
+ `:e}
2148
+ ${r.length>0||0===o.length?n`
2149
+ ${o.length>0?n`
2150
+ <div class="thread-section__label">${v("All Conversations")}</div>
2151
+ `:e}
2152
+ ${d(r,t=>t.id,e=>lt(e,t,i))}
2153
+ ${0===r.length&&0===o.length?n`
2154
+ <p class="empty-msg">${v("No conversations yet")}</p>
2155
+ `:e}
2156
+ `:e}
2157
+ </div>
2158
+
2159
+ <slot name="thread-sidebar"></slot>
2160
+ </div>
2161
+ `}
2162
+ /**
2163
+ * @license
2164
+ * Copyright 2023 Nuraly, Laabidi Aymen
2165
+ * SPDX-License-Identifier: MIT
2166
+ */(t.threadSidebar,i.threadSidebar):""}
2167
+
2168
+ <div class="chatbot-main" part="main">
2169
+ ${function(t,i){var o;return t.enableThreads?n`
2170
+ <div class="chatbot-header" part="chatbot-header">
2171
+ <nr-button
2172
+ type="text"
2173
+ size="small"
2174
+ .icon=${["panel-left"]}
2175
+ @click=${i.onToggleThreadSidebar}
2176
+ title="${v(t.isThreadSidebarOpen?"Hide threads":"Show threads")}"
2177
+ aria-label="${v(t.isThreadSidebarOpen?"Hide threads":"Show threads")}"
2178
+ ></nr-button>
2179
+ ${t.enableThreadCreation&&t.messages.length>0?n`
2180
+ <nr-button
2181
+ type="text"
2182
+ size="small"
2183
+ .icon=${["square-pen"]}
2184
+ @click=${null===(o=i.threadSidebar)||void 0===o?void 0:o.onCreateNew}
2185
+ title="${v("New conversation")}"
2186
+ aria-label="${v("New conversation")}"
2187
+ ></nr-button>
2188
+ `:""}
2189
+ </div>
2190
+ `:e}(t,i)}
2191
+
2192
+ <slot name="header"></slot>
2193
+
2194
+ ${ht(t,i)}
2195
+
2196
+ ${function(t,i){return n`
2197
+ <div class="input-box" part="input-box">
2198
+ <div class="input-container">
2199
+ <!-- Context tags -->
2200
+ ${t.uploadedFiles.length>0?st(t.uploadedFiles,i.onFileRemove,i.onFileClick):e}
2201
+
2202
+ <!-- Input area -->
2203
+ <div class="input-row">
2204
+ <div
2205
+ class="input-box__input"
2206
+ part="input"
2207
+ contenteditable="true"
2208
+ role="textbox"
2209
+ aria-multiline="true"
2210
+ aria-label="${v("Chat input")}"
2211
+ data-placeholder="${t.placeholder}"
2212
+ @input=${i.onInput}
2213
+ @keydown=${i.onKeydown}
2214
+ @focus=${i.onFocus}
2215
+ @blur=${i.onBlur}
2216
+ ></div>
2217
+ </div>
2218
+
2219
+ <!-- Action buttons -->
2220
+ ${at(t,i)}
2221
+ </div>
2222
+ </div>
2223
+ `}(t.inputBox,i.inputBox)}
2224
+
2225
+ <slot name="footer"></slot>
2226
+ </div>
2227
+
2228
+ ${r&&t.artifactPanel&&i.artifactPanel?dt(t.artifactPanel,i.artifactPanel):""}
2229
+
2230
+ ${t.isDragging?function(t,e){return n`
2231
+ <div
2232
+ class="file-upload-area ${t.isDragging?"file-upload-area--dragging":""}"
2233
+ part="file-upload-area"
2234
+ @drop=${e.onDrop}
2235
+ @dragover=${e.onDragOver}
2236
+ @dragleave=${e.onDragLeave}
2237
+ >
2238
+ <div class="file-upload-area__content">
2239
+ <div class="file-upload-area__icon">πŸ“</div>
2240
+ <div class="file-upload-area__text">
2241
+ ${v("Drop files here to upload")}
2242
+ </div>
2243
+ </div>
2244
+ </div>
2245
+ `}
2246
+ /**
2247
+ * @license
2248
+ * Copyright 2023 Nuraly, Laabidi Aymen
2249
+ * SPDX-License-Identifier: MIT
2250
+ */({isDragging:t.isDragging},i.fileUploadArea):""}
2251
+
2252
+ ${t.urlModal&&i.urlModal?function(t,i){return n`
2253
+ <nr-modal
2254
+ ?open=${t.isOpen}
2255
+ @nr-modal-close=${i.onClose}
2256
+ part="url-modal"
2257
+ >
2258
+ <div slot="header">${v("Add URL")}</div>
2259
+
2260
+ <div >
2261
+ <nr-row gutter="8" align="bottom">
2262
+ <nr-col span="20" >
2263
+ <nr-input
2264
+
2265
+ type="url"
2266
+ .value=${t.urlInput}
2267
+ placeholder="${v("Enter URL...")}"
2268
+ ?disabled=${t.isLoading}
2269
+ @nr-input=${i.onUrlInputChange}
2270
+ @keydown=${i.onUrlInputKeydown}
2271
+ >
2272
+ <nr-label slot="label">${v("URL")}</nr-label>
2273
+ </nr-input>
2274
+ </nr-col>
2275
+ <nr-col span="4" >
2276
+ <nr-button
2277
+ type="default"
2278
+ .icon=${["paperclip"]}
2279
+ size="small"
2280
+ ?disabled=${t.isLoading}
2281
+ @click=${i.onAttachFile}
2282
+ title="${v("Load file from URL")}"
2283
+ style="margin-left: 0.5rem;"
2284
+ >
2285
+ </nr-button>
2286
+ </nr-col>
2287
+ </nr-row>
2288
+
2289
+ ${t.error?n`
2290
+ <nr-alert
2291
+ type="error"
2292
+ closable
2293
+ style="margin-top: 1rem;"
2294
+ >
2295
+ ${t.error}
2296
+ </nr-alert>
2297
+ `:e}
2298
+
2299
+ ${t.selectedFileName?n`
2300
+ <nr-alert
2301
+ type="success"
2302
+ style="margin-top: 1rem;"
2303
+ >
2304
+ ${v("Selected file")}: ${t.selectedFileName}
2305
+ </nr-alert>
2306
+ `:e}
2307
+
2308
+ ${t.isLoading?n`
2309
+ <nr-alert
2310
+ type="info"
2311
+ style="margin-top: 1rem;"
2312
+ >
2313
+ ${v("Loading file from URL...")}
2314
+ </nr-alert>
2315
+ `:e}
2316
+ </div>
2317
+
2318
+ <div slot="footer">
2319
+ <nr-button
2320
+ type="default"
2321
+ size="small"
2322
+ ?disabled=${t.isLoading}
2323
+ @click=${i.onClose}
2324
+ >
2325
+ ${v("Cancel")}
2326
+ </nr-button>
2327
+ <nr-button
2328
+ type="primary"
2329
+ size="small"
2330
+ ?disabled=${!t.urlInput&&!t.selectedFileName||t.isLoading}
2331
+ ?loading=${t.isLoading}
2332
+ @click=${i.onConfirm}
2333
+ >
2334
+ ${v("Add")}
2335
+ </nr-button>
2336
+ </div>
2337
+ </nr-modal>
2338
+ `}(t.urlModal,i.urlModal):""}
2339
+
2340
+ <slot></slot>
2341
+ </div>
2342
+ `}
2343
+ /**
2344
+ * @license
2345
+ * Copyright 2023 Nuraly, Laabidi Aymen
2346
+ * SPDX-License-Identifier: MIT
2347
+ */var pt=function(t,e,n,i){for(var o,r=arguments.length,s=r<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,n):i,a=t.length-1;a>=0;a--)(o=t[a])&&(s=(r<3?o(s):r>3?o(e,n,s):o(e,n))||s);return r>3&&s&&Object.defineProperty(e,n,s),s},ft=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};let vt=class extends(c(i)){constructor(){super(...arguments),this.requiredComponents=["nr-input","nr-button","nr-icon","nr-dropdown","nr-select","nr-modal","nr-popconfirm"],this.messages=[],this.currentInput="",this.isBotTyping=!1,this.isQueryRunning=!1,this.suggestions=[],this.chatStarted=!1,this.isRTL=!1,this.size=N.Medium,this.variant=L.Default,this.loadingIndicator=F.Dots,this.loadingText=v("Agent is working..."),this.disabled=!1,this.placeholder=v("Type your message..."),this.showSendButton=!0,this.autoScroll=!0,this.showThreads=!1,this.enableThreadCreation=!1,this.threads=[],this.mode="chat",this.boxed=!1,this.enableUrlSync=!1,this.showMessages=!0,this.enableFileUpload=!1,this.uploadedFiles=[],this.actionButtons=[],this.enableModuleSelection=!1,this.modules=[],this.selectedModules=[],this.moduleSelectionLabel=v("Select Modules"),this.enableArtifacts=!1,this.focused=!1,this.isArtifactPanelOpen=!1,this.selectedArtifact=null,this.isThreadSidebarOpen=!0,this.isUrlModalOpen=!1,this.urlInput="",this.urlModalError="",this.isUrlLoading=!1,this.selectedUrlFileName="",this.isFilePreviewModalOpen=!1,this.previewFile=null,this.controllerUnsubscribes=[],this._artifactResizeBound=!1,this.toggleThreadSidebar=()=>{this.isThreadSidebarOpen=!this.isThreadSidebarOpen}}get moduleSelectOptions(){return this.modules.map(t=>({value:t.id,label:t.name,icon:t.icon,disabled:!1===t.enabled,description:t.description}))}connectedCallback(){super.connectedCallback(),this.controller&&this.setupControllerIntegration(),this.setupUrlSync()}firstUpdated(){var t,e,n,i;null===(t=this.shadowRoot)||void 0===t||t.addEventListener("click",t=>{var e,n;const i=null===(n=(e=t.target).closest)||void 0===n?void 0:n.call(e,"[data-artifact-id]");if(i){const t=i.dataset.artifactId;t&&this.handleArtifactClick(t)}}),null===(e=this.shadowRoot)||void 0===e||e.addEventListener("nr-thread-edit",t=>{const e=t.detail;(null==e?void 0:e.threadId)&&(this._editingThreadId=e.threadId,this.requestUpdate(),this.updateComplete.then(()=>{var t;const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(".thread-item__rename-input");e&&(e.focus(),e.select())}))}),null===(n=this.shadowRoot)||void 0===n||n.addEventListener("click",t=>{var e,n;const i=null===(n=(e=t.target).closest)||void 0===n?void 0:n.call(e,"[data-selection-value]");if(i){const t=i.dataset.selectionValue;t&&this.controller&&this.controller.sendMessage(t)}}),null===(i=this.shadowRoot)||void 0===i||i.addEventListener("keydown",t=>{var e,n,i,o;const r=t;if("Enter"!==r.key&&" "!==r.key)return;const s=null===(n=(e=r.target).closest)||void 0===n?void 0:n.call(e,"[data-artifact-id]");if(s){r.preventDefault();const t=s.dataset.artifactId;return void(t&&this.handleArtifactClick(t))}const a=null===(o=(i=r.target).closest)||void 0===o?void 0:o.call(i,"[data-selection-value]");if(a){r.preventDefault();const t=a.dataset.selectionValue;t&&this.controller&&this.controller.sendMessage(t)}})}disconnectedCallback(){var t;super.disconnectedCallback(),this.controller&&this.cleanupControllerIntegration(),this.teardownUrlSync(),null===(t=this._artifactResizeCleanup)||void 0===t||t.call(this),this._artifactResizeBound=!1}updated(t){if(super.updated(t),t.has("controller")&&(this.cleanupControllerIntegration(),this.controller)){this.setupControllerIntegration();try{const t=this.controller.getState();this.handleControllerStateChange(t)}catch(t){}this.enableUrlSync&&this.handleHashChange()}if(t.has("enableUrlSync")&&(this.enableUrlSync?this.setupUrlSync():this.teardownUrlSync()),this.controller&&!t.has("controller")){if(t.has("messages")||t.has("suggestions")||t.has("threads"))try{const t=this.controller.getState();this.handleControllerStateChange(t)}catch(t){}}t.has("messages")&&this.autoScroll&&this.messages.length>0&&this.scrollToLatestMessage(),this.updateArtifactPanelResize()}scrollToLatestMessage(){requestAnimationFrame(()=>{var t;const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(".messages");e&&(e.scrollTop=e.scrollHeight)})}setupControllerIntegration(){this.controller&&this.controllerUnsubscribes.push(this.controller.on("state:changed",this.handleControllerStateChange.bind(this)),this.controller.on("message:sent",this.handleControllerMessageSent.bind(this)),this.controller.on("message:received",this.handleControllerMessageReceived.bind(this)),this.controller.on("error",this.handleControllerError.bind(this)))}cleanupControllerIntegration(){if(this.controllerUnsubscribes.length)try{this.controllerUnsubscribes.forEach(t=>{try{t()}catch(t){}})}finally{this.controllerUnsubscribes=[]}}setupUrlSync(){this.enableUrlSync&&!this._hashChangeHandler&&(this._hashChangeHandler=this.handleHashChange.bind(this),window.addEventListener("hashchange",this._hashChangeHandler),this.handleHashChange())}teardownUrlSync(){this._hashChangeHandler&&(window.removeEventListener("hashchange",this._hashChangeHandler),this._hashChangeHandler=void 0)}handleHashChange(){const t=window.location.hash.match(/^#conversation\/(.+)$/);if(t){const e=decodeURIComponent(t[1]);e!==this.activeThreadId&&this.controller&&this.controller.switchThread(e)}}handleControllerStateChange(t){var e,n,i,o,r;if(t.messages&&(this.messages=t.messages),t.threads&&(this.threads=t.threads),t.suggestions&&t.suggestions.length>0&&(this.suggestions=t.suggestions),t.currentThreadId&&(this.activeThreadId=t.currentThreadId),this.enableUrlSync&&t.currentThreadId){const e=`#conversation/${encodeURIComponent(t.currentThreadId)}`;window.location.hash!==e&&history.replaceState(null,"",e)}if(this.chatStarted=(null===(e=t.messages)||void 0===e?void 0:e.length)>0,this.isBotTyping=t.isTyping||!1,this.statusText=t.statusText,this.isQueryRunning=t.isProcessing||!1,t.uploadedFiles&&(this.uploadedFiles=t.uploadedFiles),this.enableArtifacts){const e=null===(n=t.messages)||void 0===n?void 0:n.some(t=>{var e,n;return(null===(n=null===(e=t.metadata)||void 0===e?void 0:e.artifactIds)||void 0===n?void 0:n.length)>0});e||(this.isArtifactPanelOpen=!1,this.selectedArtifact=null)}if(this.enableArtifacts&&(null===(i=t.messages)||void 0===i?void 0:i.length)){const e=[...t.messages].reverse().find(t=>"bot"===t.sender),n=null===(o=null==e?void 0:e.metadata)||void 0===o?void 0:o.artifactIds;if(null==n?void 0:n.length){const t=n[n.length-1];if((null===(r=this.selectedArtifact)||void 0===r?void 0:r.id)!==t){const e=this.getArtifactPlugin(),n=null==e?void 0:e.getArtifact(t);n&&(this.selectedArtifact=n,this.isArtifactPanelOpen=!0)}}}}handleControllerMessageSent(t){this.isQueryRunning=!0,this.isBotTyping=!0}handleControllerMessageReceived(t){}handleControllerError(t){this.isQueryRunning=!1,this.isBotTyping=!1,console.error("Controller error:",t.error)}render(){var t;const e={boxed:this.boxed,showMessages:this.showMessages,messages:this.messages,isTyping:this.isBotTyping,loadingIndicator:this.loadingIndicator,loadingText:this.statusText||this.loadingText,chatStarted:this.chatStarted,suggestions:this.suggestions,inputBox:{placeholder:this.placeholder,disabled:this.disabled||this.isQueryRunning,currentInput:this.currentInput,uploadedFiles:this.uploadedFiles,isQueryRunning:this.isQueryRunning,showSendButton:this.showSendButton,enableFileUpload:this.enableFileUpload,fileUploadItems:[{id:"upload-file",label:"Upload File",icon:"upload"},{id:"upload-url",label:"Upload from URL",icon:"link"}],enableModuleSelection:this.enableModuleSelection,moduleOptions:this.moduleSelectOptions,selectedModules:this.selectedModules,moduleSelectionLabel:this.moduleSelectionLabel,renderModuleDisplay:this.renderModuleSelectedDisplay.bind(this)},enableThreads:this.showThreads,enableThreadCreation:this.enableThreadCreation,isThreadSidebarOpen:this.showThreads&&this.isThreadSidebarOpen,threadSidebar:this.showThreads?{threads:this.threads,activeThreadId:this.activeThreadId,editingThreadId:this._editingThreadId}:void 0,isDragging:!1,enableArtifacts:this.enableArtifacts,artifactPanel:this.enableArtifacts?{artifact:this.selectedArtifact,isOpen:this.isArtifactPanelOpen,renderContent:null!==(t=this.renderArtifactContent)&&void 0!==t?t:this.getPluginArtifactRenderer()}:void 0,urlModal:this.isUrlModalOpen?{isOpen:this.isUrlModalOpen,urlInput:this.urlInput,isLoading:this.isUrlLoading,error:this.urlModalError,selectedFileName:this.selectedUrlFileName}:void 0},i={message:{onRetry:this.handleRetry.bind(this),onRetryKeydown:()=>{},onCopy:this.handleCopyMessage.bind(this),onCopyKeydown:()=>{},onFileClick:this.handleFilePreview.bind(this)},suggestion:{onClick:this.handleSuggestionClick.bind(this),onKeydown:()=>{}},inputBox:{onInput:this.handleContentEditableInput.bind(this),onKeydown:this.handleKeyDown.bind(this),onFocus:this.handleInputFocus.bind(this),onBlur:this.handleInputBlur.bind(this),onSend:this.handleSendMessage.bind(this),onStop:this.handleStopQuery.bind(this),onSendKeydown:()=>{},onFileDropdownClick:this.handleFileDropdownClick.bind(this),onModuleChange:this.handleModuleSelectionChange.bind(this),onFileRemove:this.handleFileRemove.bind(this),onFileClick:this.handleFilePreview.bind(this)},threadSidebar:this.showThreads?{onCreateNew:()=>{var t;null===(t=this.controller)||void 0===t||t.createThread("New Chat")},onSelectThread:t=>{var e;this.enableUrlSync&&history.pushState(null,"",`#conversation/${encodeURIComponent(t)}`),null===(e=this.controller)||void 0===e||e.switchThread(t)},onDeleteThread:t=>{var e;null===(e=this.controller)||void 0===e||e.deleteThread(t)},onBookmarkThread:t=>{var e;null===(e=this.controller)||void 0===e||e.bookmarkThread(t)},onRenameThread:(t,e)=>{var n;null===(n=this.controller)||void 0===n||n.renameThread(t,e),this._editingThreadId=void 0}}:void 0,fileUploadArea:{onDrop:()=>{},onDragOver:()=>{},onDragLeave:()=>{}},urlModal:this.isUrlModalOpen?{onClose:this.handleUrlModalClose.bind(this),onUrlInputChange:this.handleUrlInputChange.bind(this),onUrlInputKeydown:this.handleUrlInputKeydown.bind(this),onConfirm:this.handleUrlConfirm.bind(this),onAttachFile:this.handleUrlAttachFile.bind(this)}:void 0,artifactPanel:this.enableArtifacts?{onClose:this.handleArtifactPanelClose.bind(this),onCopy:this.handleArtifactCopy.bind(this)}:void 0,onToggleThreadSidebar:this.showThreads?this.toggleThreadSidebar.bind(this):void 0};return n`
2348
+ <div
2349
+ class="chat-container ${a({"chat-container--with-threads":this.showThreads,"chat-container--disabled":this.disabled,"chat-container--focused":this.focused,"chat-container--boxed":this.boxed})}"
2350
+ dir=${this.isRTL?"rtl":"ltr"}
2351
+ data-size="${this.size}"
2352
+ data-variant="${this.variant}"
2353
+ data-theme="${this.currentTheme}"
2354
+ data-mode="${this.mode}"
2355
+ part="chat-container">
2356
+
2357
+ ${ut(e,i)}
2358
+ </div>
2359
+
2360
+ ${ct({isOpen:this.isFilePreviewModalOpen,file:this.previewFile},{onClose:this.handleFilePreviewModalClose.bind(this)})}
2361
+ `}renderModuleSelectedDisplay(){const t=this.selectedModules.length;if(0===t)return n`<span class="module-display-placeholder">${this.moduleSelectionLabel}</span>`;if(1===t){const t=this.modules.find(t=>t.id===this.selectedModules[0]);return n`
2362
+ <span class="module-display-single">
2363
+ ${(null==t?void 0:t.icon)?n`<nr-icon name="${t.icon}" size="small"></nr-icon>`:e}
2364
+ ${(null==t?void 0:t.name)||this.selectedModules[0]}
2365
+ </span>
2366
+ `}return n`
2367
+ <span class="module-display-multiple">
2368
+ ${t} ${v("modules selected")}
2369
+ </span>
2370
+ `}handleContentEditableInput(t){const e=t.target.textContent||"";this.currentInput=e,this.dispatchEventWithMetadata("nr-chatbot-input-changed",{metadata:{value:e}})}handleInputFocus(t){this.focused=!0,this.dispatchEventWithMetadata("nr-chatbot-input-focused",{metadata:{event:t}})}handleInputBlur(t){this.focused=!1,this.dispatchEventWithMetadata("nr-chatbot-input-blurred",{metadata:{event:t}})}clearInput(){var t;this.currentInput="";const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(".input-box__input");e&&(e.textContent="")}focusInput(){var t;const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(".input-box__input");e&&e.focus()}handleKeyDown(t){"Enter"!==t.key||t.shiftKey||(t.preventDefault(),this.handleSendMessage())}handleSendMessage(){if(!this.currentInput.trim()||this.disabled)return;if(!this.controller)return void console.warn("nr-chatbot: No controller is attached; message will not be sent.");const t=this.uploadedFiles&&this.uploadedFiles.length>0?[...this.uploadedFiles]:void 0;this.controller.sendMessage(this.currentInput.trim(),{files:t,metadata:{selectedModules:this.selectedModules}}),this.clearInput(),this.chatStarted=!0,this.dispatchEventWithMetadata("nr-chatbot-message-sent",{metadata:{text:this.currentInput}})}handleStopQuery(){var t;try{null===(t=this.controller)||void 0===t||t.stop()}catch(t){console.warn("nr-chatbot: stop failed",t)}this.dispatchEventWithMetadata("nr-chatbot-query-stopped",{metadata:{action:"stop"}})}handleRetry(t){t.text&&(this.currentInput=t.text,this.handleSendMessage())}handleCopyMessage(t){const e=t.text;if(!e)return;const n=()=>{this.dispatchEventWithMetadata("nr-chatbot-message-copied",{metadata:{messageId:t.id}})};navigator.clipboard?navigator.clipboard.writeText(e).then(n).catch(()=>{this.copyViaFallback(e,n)}):this.copyViaFallback(e,n)}copyViaFallback(t,e){const n=document.createElement("textarea");n.value=t,n.style.position="fixed",n.style.left="-9999px",n.style.top="-9999px",document.body.appendChild(n),n.focus(),n.select();try{document.execCommand("copy"),e()}catch(t){}n.remove()}handleSuggestionClick(t){this.currentInput=t.text,this.handleSendMessage(),this.dispatchEventWithMetadata("nr-chatbot-suggestion-clicked",{metadata:{suggestion:t}})}handleModuleSelectionChange(t){const e=t.detail.value;this.selectedModules=e,this.dispatchEventWithMetadata("nr-chatbot-modules-selected",{metadata:{modules:e}})}handleFileDropdownClick(t){const e=t.detail.item.id;"upload-file"===e?this.openFileDialog():"upload-url"===e&&this.openUrlModal()}openFileDialog(){const t=document.createElement("input");t.type="file",t.multiple=!0,t.accept="image/*,application/pdf,text/*,video/*,audio/*",t.addEventListener("change",t=>ft(this,void 0,void 0,function*(){var e;const n=t.target;if(n.files&&n.files.length>0){const t=Array.from(n.files);yield null===(e=this.controller)||void 0===e?void 0:e.uploadFiles(t)}})),t.click()}openUrlModal(){this.isUrlModalOpen=!0,this.urlInput="",this.urlModalError="",this.selectedUrlFileName=""}handleUrlModalClose(){this.isUrlModalOpen=!1,this.urlInput="",this.urlModalError="",this.isUrlLoading=!1,this.selectedUrlFileName=""}handleUrlInputChange(t){const e=t.target;this.urlInput=e.value,this.urlModalError=""}handleUrlInputKeydown(t){"Enter"===t.key&&(t.preventDefault(),this.handleUrlAttachFile())}handleUrlConfirm(){this.handleUrlModalClose()}handleUrlAttachFile(){return ft(this,void 0,void 0,function*(){if(this.urlInput.trim()){this.isUrlLoading=!0,this.urlModalError="";try{const t=yield fetch(this.urlInput);if(!t.ok)throw new Error(`Failed to fetch file: ${t.statusText}`);const e=yield t.blob(),n=this.urlInput.split("/").pop()||"downloaded-file",i=new File([e],n,{type:e.type});this.selectedUrlFileName=n,this.controller&&(yield this.controller.uploadFiles([i])),this.isUrlLoading=!1,setTimeout(()=>{this.handleUrlModalClose()},1e3)}catch(t){this.isUrlLoading=!1,this.urlModalError=t instanceof Error?t.message:"Failed to load file from URL"}}else this.urlModalError="Please enter a URL"})}handleFileRemove(t){var e;null===(e=this.controller)||void 0===e||e.removeFile(t)}handleFilePreview(t){this.previewFile=t,this.isFilePreviewModalOpen=!0}handleArtifactClick(t){if(!this.enableArtifacts||!this.controller)return;const e=this.getArtifactPlugin();if(!e)return;const n=e.getArtifact(t);n&&(this.selectedArtifact=n,this.isArtifactPanelOpen=!0)}handleArtifactPanelClose(){this.isArtifactPanelOpen=!1,this.selectedArtifact=null}updateArtifactPanelResize(){var t,e,n;const i=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(".artifact-panel__resize-handle"),o=null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector(".artifact-panel");if(!i||!o)return null===(n=this._artifactResizeCleanup)||void 0===n||n.call(this),void(this._artifactResizeBound=!1);if(this._artifactResizeBound)return;this._artifactResizeBound=!0;let r=!1,s=0,a=0;const l=t=>{if(!r)return;const e=t.clientX-s,n=o.parentElement,i=n?.85*n.getBoundingClientRect().width:1200,l=Number.parseInt(getComputedStyle(o).minWidth,10)||300,c=Math.max(l,Math.min(a-e,i));o.style.width=`${c}px`},c=()=>{r&&(r=!1,i.classList.remove("artifact-panel__resize-handle--active"),document.body.style.cursor="",document.body.style.userSelect="",document.removeEventListener("mousemove",l),document.removeEventListener("mouseup",c))},d=t=>{t.preventDefault(),r=!0,s=t.clientX,a=o.getBoundingClientRect().width,i.classList.add("artifact-panel__resize-handle--active"),document.body.style.cursor="col-resize",document.body.style.userSelect="none",document.addEventListener("mousemove",l),document.addEventListener("mouseup",c)};i.addEventListener("mousedown",d),this._artifactResizeCleanup=()=>{i.removeEventListener("mousedown",d),c()}}handleArtifactCopy(t){const e=t.content;e&&(navigator.clipboard?navigator.clipboard.writeText(e).catch(()=>{this.copyViaFallback(e,()=>{})}):this.copyViaFallback(e,()=>{}))}getArtifactPlugin(){var t;try{const e=null===(t=this.controller)||void 0===t?void 0:t.plugins;return e&&"function"==typeof e.get?e.get("artifact"):void 0}catch(t){return}}getPluginArtifactRenderer(){var t;try{const e=null===(t=this.controller)||void 0===t?void 0:t.plugins;if(!e||"function"!=typeof e.values)return;for(const t of e.values())if("function"==typeof t.renderArtifactContent)return e=>{const i=t.renderArtifactContent(e);if(i)return n`${l(i)}`};return}catch(t){return}}handleFilePreviewModalClose(){this.isFilePreviewModalOpen=!1,this.previewFile=null}addMessage(t){var e;const n=Object.assign({id:t.id||`msg-${Date.now()}`,sender:t.sender||D.User,text:t.text||"",timestamp:t.timestamp||(new Date).toISOString()},t);return null===(e=this.controller)||void 0===e||e.addMessage(n),this.chatStarted=!0,n}clearMessages(){this.messages=[],this.chatStarted=!1}};vt.styles=H,pt([o({type:Array})],vt.prototype,"messages",void 0),pt([o({type:String})],vt.prototype,"currentInput",void 0),pt([o({type:Boolean})],vt.prototype,"isBotTyping",void 0),pt([o({type:Boolean})],vt.prototype,"isQueryRunning",void 0),pt([o({type:Array})],vt.prototype,"suggestions",void 0),pt([o({type:Boolean})],vt.prototype,"chatStarted",void 0),pt([o({type:Boolean})],vt.prototype,"isRTL",void 0),pt([o({type:String})],vt.prototype,"size",void 0),pt([o({type:String})],vt.prototype,"variant",void 0),pt([o({type:String})],vt.prototype,"loadingIndicator",void 0),pt([o({type:String})],vt.prototype,"loadingText",void 0),pt([o({type:Boolean})],vt.prototype,"disabled",void 0),pt([o({type:String})],vt.prototype,"placeholder",void 0),pt([o({type:Boolean})],vt.prototype,"showSendButton",void 0),pt([o({type:Boolean})],vt.prototype,"autoScroll",void 0),pt([o({type:Boolean})],vt.prototype,"showThreads",void 0),pt([o({type:Boolean})],vt.prototype,"enableThreadCreation",void 0),pt([o({type:Array})],vt.prototype,"threads",void 0),pt([o({type:String})],vt.prototype,"activeThreadId",void 0),pt([o({type:String})],vt.prototype,"mode",void 0),pt([o({type:Boolean,reflect:!0})],vt.prototype,"boxed",void 0),pt([o({type:Boolean})],vt.prototype,"enableUrlSync",void 0),pt([o({type:Boolean})],vt.prototype,"showMessages",void 0),pt([o({type:Boolean})],vt.prototype,"enableFileUpload",void 0),pt([o({type:Array})],vt.prototype,"uploadedFiles",void 0),pt([o({type:Array})],vt.prototype,"actionButtons",void 0),pt([o({type:Boolean})],vt.prototype,"enableModuleSelection",void 0),pt([o({type:Array})],vt.prototype,"modules",void 0),pt([o({type:Array})],vt.prototype,"selectedModules",void 0),pt([o({type:String})],vt.prototype,"moduleSelectionLabel",void 0),pt([o({type:Boolean})],vt.prototype,"enableArtifacts",void 0),pt([o({type:Function})],vt.prototype,"renderArtifactContent",void 0),pt([o({type:Object})],vt.prototype,"controller",void 0),pt([r()],vt.prototype,"statusText",void 0),pt([r()],vt.prototype,"focused",void 0),pt([r()],vt.prototype,"isArtifactPanelOpen",void 0),pt([r()],vt.prototype,"selectedArtifact",void 0),pt([r()],vt.prototype,"isThreadSidebarOpen",void 0),pt([r()],vt.prototype,"_editingThreadId",void 0),pt([r()],vt.prototype,"isUrlModalOpen",void 0),pt([r()],vt.prototype,"urlInput",void 0),pt([r()],vt.prototype,"urlModalError",void 0),pt([r()],vt.prototype,"isUrlLoading",void 0),pt([r()],vt.prototype,"selectedUrlFileName",void 0),pt([r()],vt.prototype,"isFilePreviewModalOpen",void 0),pt([r()],vt.prototype,"previewFile",void 0),vt=pt([(t,e)=>(t.addInitializer(b),t),s("nr-chatbot")],vt);
2371
+ /**
2372
+ * @license
2373
+ * Copyright 2023 Nuraly, Laabidi Aymen
2374
+ * SPDX-License-Identifier: MIT
2375
+ */
2376
+ class gt{constructor(){this.listeners=new Map}on(t,e){return this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(e),()=>{var n,i;null===(n=this.listeners.get(t))||void 0===n||n.delete(e),0===(null===(i=this.listeners.get(t))||void 0===i?void 0:i.size)&&this.listeners.delete(t)}}once(t,e){const n=(...i)=>{e(...i),this.off(t,n)};this.on(t,n)}off(t,e){var n;null===(n=this.listeners.get(t))||void 0===n||n.delete(e)}emit(t,e){const n=this.listeners.get(t);n&&n.forEach(n=>{try{n(e)}catch(e){console.error(`Error in event handler for "${t}":`,e)}})}removeAllListeners(t){t?this.listeners.delete(t):this.listeners.clear()}listenerCount(t){var e;return(null===(e=this.listeners.get(t))||void 0===e?void 0:e.size)||0}eventNames(){return Array.from(this.listeners.keys())}}
2377
+ /**
2378
+ * @license
2379
+ * Copyright 2023 Nuraly, Laabidi Aymen
2380
+ * SPDX-License-Identifier: MIT
2381
+ */class mt extends Error{constructor(t){super(t.join(", ")),this.errors=t,this.name="ValidationError"}}
2382
+ /**
2383
+ * @license
2384
+ * Copyright 2023 Nuraly, Laabidi Aymen
2385
+ * SPDX-License-Identifier: MIT
2386
+ */class bt{constructor(t,e,n,i,o){this.eventBus=e,this.ui=n,this.plugins=i,this.config=o,this.state=t}getState(){return Object.freeze(Object.assign({},this.state))}updateState(t){if(this.state=Object.assign(Object.assign({},this.state),t),this.ui.onStateChange)try{this.ui.onStateChange(this.getState())}catch(t){this.logError("Error in UI state change callback:",t)}this.eventBus.emit("state:changed",this.state),this.plugins.forEach(t=>{if(t.onStateChange)try{t.onStateChange(this.getState())}catch(t){this.logError("Error in plugin state change handler:",t)}})}addMessageToState(t){this.state.messages=[...this.state.messages,t],t.suggestions&&t.suggestions.length>0?this.state.suggestions=[...t.suggestions]:this.state.messages.length>1&&(this.state.suggestions=[]),this.config.maxMessages&&this.state.messages.length>this.config.maxMessages&&(this.state.messages=this.state.messages.slice(-this.config.maxMessages)),this.ui.onStateChange&&this.ui.onStateChange(this.getState()),this.eventBus.emit("state:changed",this.state),this.ui.scrollToBottom&&this.ui.scrollToBottom(),this.eventBus.emit("message:added",t)}updateMessageInState(t,e){this.state.messages=this.state.messages.map(n=>n.id===t?Object.assign(Object.assign({},n),e):n),this.ui.onStateChange&&this.ui.onStateChange(this.getState()),this.eventBus.emit("state:changed",this.state);const n=this.state.messages.find(e=>e.id===t);n&&this.eventBus.emit("message:updated",n)}removeMessageFromState(t){this.state.messages=this.state.messages.filter(e=>e.id!==t),this.ui.onStateChange&&this.ui.onStateChange(this.getState()),this.eventBus.emit("state:changed",this.state),this.eventBus.emit("message:deleted",t)}resetState(t){this.state=Object.assign({},t),this.updateState(this.state)}getMessages(){return[...this.state.messages]}getMessageById(t){return this.state.messages.find(e=>e.id===t)}isTyping(){return this.state.isTyping}isProcessing(){return this.state.isProcessing}setTyping(t){this.updateState({isTyping:t}),t&&this.ui.onTypingStart?this.ui.onTypingStart():!t&&this.ui.onTypingEnd&&this.ui.onTypingEnd()}setProcessing(t){this.updateState({isProcessing:t})}logError(t,e){console.error(`[StateHandler] ${t}`,e)}}
2387
+ /**
2388
+ * @license
2389
+ * Copyright 2023 Nuraly, Laabidi Aymen
2390
+ * SPDX-License-Identifier: MIT
2391
+ */class yt{constructor(t,e,n){this.stateHandler=t,this.eventBus=e,this.plugins=n}createMessage(t){return Object.assign({id:this.generateId("msg"),sender:t.sender||"user",text:t.text||"",timestamp:t.timestamp||(new Date).toISOString()},t)}createUserMessage(t,e){return this.createMessage({sender:"user",text:t,metadata:e})}createBotMessage(t,e){return this.createMessage({sender:"bot",text:t,metadata:e})}addMessage(t){const e=this.createMessage(t);return this.stateHandler.addMessageToState(e),"bot"===e.sender?(this.eventBus.emit("message:received",e),this.plugins.forEach(t=>{t.onMessageReceived&&t.onMessageReceived(e)})):(this.eventBus.emit("message:sent",e),this.plugins.forEach(t=>{t.onMessageSent&&t.onMessageSent(e)})),e}updateMessage(t,e){this.stateHandler.updateMessageInState(t,e)}deleteMessage(t){this.stateHandler.removeMessageFromState(t)}clearMessages(){this.stateHandler.updateState({messages:[]})}getMessages(){return this.stateHandler.getMessages()}getMessageById(t){return this.stateHandler.getMessageById(t)}updateBotMessageText(t,e){const n=this.getMessageById(t);n&&"bot"===n.sender&&this.updateMessage(t,{text:e})}appendToBotMessage(t,e){const n=this.getMessageById(t);n&&"bot"===n.sender&&this.updateMessage(t,{text:n.text+e})}generateId(t){return`${t}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}
2392
+ /**
2393
+ * @license
2394
+ * Copyright 2023 Nuraly, Laabidi Aymen
2395
+ * SPDX-License-Identifier: MIT
2396
+ */var xt=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class wt{constructor(t,e,n,i,o){this.stateHandler=t,this.eventBus=e,this.ui=n,this.config=i,this.provider=o}setProvider(t){this.provider=t}createThread(t){return xt(this,void 0,void 0,function*(){if(!this.config.enableThreads)throw new Error("Threads are not enabled");const e=this.stateHandler.getState(),n={id:this.generateId("thread"),title:t||`Chat ${e.threads.length+1}`,messages:[],createdAt:(new Date).toISOString(),updatedAt:(new Date).toISOString()};if(this.provider&&"function"==typeof this.provider.createConversation)try{const t=yield this.provider.createConversation(n.title);t&&t.id&&(n.id=String(t.id),n.conversationId=t.id)}catch(t){console.error("Error calling provider.createConversation:",t)}return this.stateHandler.updateState({threads:[n,...e.threads],currentThreadId:n.id,messages:[]}),this.eventBus.emit("thread:created",n),this.eventBus.emit("thread:selected",n),this.ui.focusInput&&setTimeout(()=>{this.ui.focusInput()},100),n})}switchThread(t){const e=this.stateHandler.getState(),n=e.threads.find(e=>e.id===t);if(!n)throw new Error(`Thread "${t}" not found`);e.currentThreadId&&this.saveCurrentThread(),this.stateHandler.updateState({currentThreadId:t,messages:[...n.messages]}),this.eventBus.emit("thread:selected",n)}bookmarkThread(t){const e=this.stateHandler.getState(),n=e.threads.find(e=>e.id===t);if(!n)throw new Error(`Thread "${t}" not found`);const i=!n.bookmarked,o=e.threads.map(e=>e.id===t?Object.assign(Object.assign({},e),{bookmarked:i}):e);this.stateHandler.updateState({threads:o}),this.eventBus.emit("thread:bookmarked",{threadId:t,bookmarked:i})}renameThread(t,e){const n=this.stateHandler.getState();if(!n.threads.find(e=>e.id===t))throw new Error(`Thread "${t}" not found`);const i=n.threads.map(n=>n.id===t?Object.assign(Object.assign({},n),{title:e,updatedAt:(new Date).toISOString()}):n);this.stateHandler.updateState({threads:i}),this.eventBus.emit("thread:renamed",{threadId:t,title:e})}deleteThread(t){const e=this.stateHandler.getState(),n=e.threads.filter(e=>e.id!==t);e.currentThreadId===t?n.length>0?(this.stateHandler.updateState({threads:n}),this.switchThread(n[0].id)):this.stateHandler.updateState({threads:n,currentThreadId:void 0,messages:[]}):this.stateHandler.updateState({threads:n}),this.eventBus.emit("thread:deleted",t)}getCurrentThread(){const t=this.stateHandler.getState();return t.threads.find(e=>e.id===t.currentThreadId)}getThreads(){return[...this.stateHandler.getState().threads]}saveCurrentThread(){const t=this.stateHandler.getState();t.currentThreadId&&this.updateThreadMessages(t.currentThreadId)}updateThreadMessages(t){const e=this.stateHandler.getState(),n=e.threads.map(n=>n.id===t?Object.assign(Object.assign({},n),{messages:[...e.messages],updatedAt:(new Date).toISOString()}):n);this.stateHandler.updateState({threads:n})}generateId(t){return`${t}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}
2397
+ /**
2398
+ * @license
2399
+ * Copyright 2023 Nuraly, Laabidi Aymen
2400
+ * SPDX-License-Identifier: MIT
2401
+ */var _t=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class $t{constructor(t,e){this.stateHandler=t,this.eventBus=e}addFile(t){const e=this.stateHandler.getState();this.stateHandler.updateState({uploadedFiles:[...e.uploadedFiles,t]}),this.eventBus.emit("file:uploaded",t)}removeFile(t){const e=this.stateHandler.getState();this.stateHandler.updateState({uploadedFiles:e.uploadedFiles.filter(e=>e.id!==t)}),this.eventBus.emit("file:removed",t)}clearFiles(){this.stateHandler.updateState({uploadedFiles:[]})}getUploadedFiles(){return[...this.stateHandler.getState().uploadedFiles]}getFileById(t){return this.stateHandler.getState().uploadedFiles.find(e=>e.id===t)}createChatbotFile(t){return _t(this,void 0,void 0,function*(){return{id:this.generateId("file"),name:t.name,size:t.size,type:this.determineFileType(t.type),mimeType:t.type,uploadProgress:100}})}determineFileType(t){return t.startsWith("image/")?"image":t.startsWith("video/")?"video":t.startsWith("audio/")?"audio":t.includes("pdf")?"pdf":t.includes("text/")?"text":"document"}generateId(t){return`${t}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}
2402
+ /**
2403
+ * @license
2404
+ * Copyright 2023 Nuraly, Laabidi Aymen
2405
+ * SPDX-License-Identifier: MIT
2406
+ */class kt{constructor(t,e){this.stateHandler=t,this.eventBus=e}setModules(t){this.stateHandler.updateState({modules:t})}selectModules(t){this.stateHandler.updateState({selectedModules:t}),this.eventBus.emit("module:selected",t)}toggleModule(t){const e=this.stateHandler.getState(),n=e.selectedModules.includes(t)?e.selectedModules.filter(e=>e!==t):[...e.selectedModules,t];this.selectModules(n)}getSelectedModules(){const t=this.stateHandler.getState();return(t.modules||[]).filter(e=>t.selectedModules.includes(e.id))}clearSelection(){this.stateHandler.updateState({selectedModules:[]})}}
2407
+ /**
2408
+ * @license
2409
+ * Copyright 2023 Nuraly, Laabidi Aymen
2410
+ * SPDX-License-Identifier: MIT
2411
+ */class St{constructor(t){this.stateHandler=t}setSuggestions(t){this.stateHandler.updateState({suggestions:t})}clearSuggestions(){this.stateHandler.updateState({suggestions:[]})}getSuggestions(){return[...this.stateHandler.getState().suggestions]}removeSuggestion(t){const e=this.stateHandler.getState();this.stateHandler.updateState({suggestions:e.suggestions.filter(e=>e.id!==t)})}}
2412
+ /**
2413
+ * @license
2414
+ * Copyright 2023 Nuraly, Laabidi Aymen
2415
+ * SPDX-License-Identifier: MIT
2416
+ */var zt=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class Pt{constructor(t,e,n,i,o,r,s){this.stateHandler=e,this.messageHandler=n,this.fileHandler=i,this.eventBus=o,this.ui=r,this.plugins=s,this.cancelRequested=!1,this.provider=t}setProvider(t){this.provider=t}stopCurrentProcessing(){this.cancelRequested=!0,this.eventBus.emit("processing:stopped")}hasProvider(){return!!this.provider&&this.provider.isConnected()}processMessage(t){return zt(this,void 0,void 0,function*(){if(this.provider){if(!this.provider.isConnected()){this.log("Provider not connected, attempting to connect...");try{yield this.provider.connect({})}catch(t){this.logError("Failed to auto-connect provider:",t)}if(!this.provider.isConnected())return void this.log("Provider is still not connected after attempt; aborting processing")}try{this.cancelRequested=!1,this.ui.onProcessingStart&&this.ui.onProcessingStart(),this.ui.onTypingStart&&this.ui.onTypingStart(),this.stateHandler.setTyping(!0),this.stateHandler.setProcessing(!0),this.eventBus.emit("processing:start");const e=this.buildContext(),n=this.provider.sendMessage(t.text,e);yield this.processStream(n)}catch(t){throw this.logError("Provider error:",t),this.eventBus.emit("error",t),t}finally{this.ui.onProcessingEnd&&this.ui.onProcessingEnd(),this.ui.onTypingEnd&&this.ui.onTypingEnd(),this.stateHandler.updateState({statusText:void 0}),this.stateHandler.setTyping(!1),this.stateHandler.setProcessing(!1),this.eventBus.emit("processing:end"),this.fileHandler.clearFiles()}}else this.log("No provider configured")})}processStream(t){return zt(this,void 0,void 0,function*(){var e;let n=null;const i=Array.from(this.plugins.values()).filter(t=>Array.isArray(t.htmlTags)),o=[];let r="",s="",a=0;if(i.length>0)for(const t of i)for(const e of t.htmlTags)a=Math.max(a,e.open.length,e.close.length);try{let l=!1;for(;!l&&!this.cancelRequested;){const c=yield t.next();if(l=c.done||!1,l||!c.value)break;const d=String(c.value),h=d.startsWith(s)?d.slice(s.length):d;s=d,r+=h;let u="",p=!1;for(;r.length;){const t=o[o.length-1];if(t){const e=t.buffer+r,i=e.indexOf(t.close);if(-1===i){t.buffer=e,r="";break}const s=e.slice(0,i),a="function"==typeof t.plugin.renderHtmlBlock?t.plugin.renderHtmlBlock(t.name,s):"";if(a)if(t.hasPlaceholder&&n){const t=/<div data-placeholder-id="[^"]*">[\s\S]*?<\/div>/;t.test(n.text)?(n.text=n.text.replace(t,a),this.messageHandler.updateMessage(n.id,{text:n.text})):(u+=a,p=!0)}else u+=a,p=!0;o.pop(),r=e.slice(i+t.close.length);continue}if(0===i.length){u+=r,r="";break}let e=null;for(const t of i)for(const n of t.htmlTags){const i=r.indexOf(n.open);-1!==i&&(!e||i<e.idx)&&(e={idx:i,plugin:t,name:n.name,open:n.open,close:n.close})}if(!e){if(a>0&&r.length>a-1){const t=r.length-(a-1);u+=r.slice(0,t),r=r.slice(t)}break}{u+=r.slice(0,e.idx);let t=!1;if("function"==typeof e.plugin.renderHtmlBlockPlaceholder){const n=e.plugin.renderHtmlBlockPlaceholder(e.name);n&&(u+=n,p=!0,t=!0)}o.push({plugin:e.plugin,name:e.name,open:e.open,close:e.close,buffer:"",hasPlaceholder:t}),r=r.slice(e.idx+e.open.length)}}if(u)for(const t of this.plugins.values()){!(Array.isArray(t.htmlTags)&&t.htmlTags.length>0)&&t.afterReceive&&(u=yield t.afterReceive(u))}const f=p||/<\w+[^>]*>/.test(u);n?u&&(this.messageHandler.appendToBotMessage(n.id,u),n.text+=u,f&&!(null===(e=n.metadata)||void 0===e?void 0:e.renderAsHtml)&&this.messageHandler.updateMessage(n.id,{metadata:Object.assign(Object.assign({},n.metadata||{}),{renderAsHtml:!0})})):(n=this.messageHandler.createBotMessage(u,f?{renderAsHtml:!0}:void 0),this.stateHandler.addMessageToState(n),this.ui.onTypingEnd&&this.ui.onTypingEnd(),this.stateHandler.setTyping(!1))}if(!this.cancelRequested&&n&&(r&&this.messageHandler.appendToBotMessage(n.id,r),o.length>0)){const t=o.map(t=>t.open+t.buffer).join("");t&&this.messageHandler.appendToBotMessage(n.id,t)}}catch(t){throw this.logError("Error processing stream:",t),t}})}buildContext(){const t=this.stateHandler.getState(),e=t.currentThreadId?t.threads.find(e=>e.id===t.currentThreadId):void 0;return console.log("[ProviderService] buildContext state.uploadedFiles:",t.uploadedFiles),{messages:t.messages,metadata:t.metadata,selectedModules:t.selectedModules,currentThread:e,uploadedFiles:t.uploadedFiles}}uploadFileToProvider(t){return zt(this,void 0,void 0,function*(){var e,n;if(!(null===(n=null===(e=this.provider)||void 0===e?void 0:e.capabilities)||void 0===n?void 0:n.fileUpload)||!this.provider.uploadFile)throw new Error("Provider does not support file upload");const i=this.buildContext();return yield this.provider.uploadFile(t,i)})}getCapabilities(){var t;return(null===(t=this.provider)||void 0===t?void 0:t.capabilities)||{streaming:!1,fileUpload:!1,contextWindow:0}}log(t,...e){console.log(`[ProviderService] ${t}`,...e)}logError(t,e){console.error(`[ProviderService] ${t}`,e)}}
2417
+ /**
2418
+ * @license
2419
+ * Copyright 2023 Nuraly, Laabidi Aymen
2420
+ * SPDX-License-Identifier: MIT
2421
+ */var Tt=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class Mt{constructor(t){this.validators=[],this.validators=t.validators||[]}validateMessage(t){return Tt(this,void 0,void 0,function*(){const e=[],n=[];t.trim()||e.push("Message cannot be empty");for(const i of this.validators)try{(yield i.validator(t))||(e.push(i.errorMessage),i.warningMessage&&n.push(i.warningMessage))}catch(t){this.logError("Validation error:",t),e.push("Validation failed")}return{isValid:0===e.length,errors:e,warnings:n}})}validateFile(t,e){const n=[],i=(null==e?void 0:e.maxFileSize)||10485760;if(t.size>i&&n.push(`File size exceeds maximum allowed (${this.formatFileSize(i)})`),(null==e?void 0:e.allowedTypes)&&e.allowedTypes.length>0){e.allowedTypes.some(e=>e.startsWith(".")?t.name.toLowerCase().endsWith(e.toLowerCase()):t.type.includes(e))||n.push(`File type not allowed. Allowed types: ${e.allowedTypes.join(", ")}`)}return{isValid:0===n.length,errors:n,warnings:[]}}addValidator(t){this.validators.push(t)}removeValidator(t){this.validators=this.validators.filter(e=>e.id!==t)}clearValidators(){this.validators=[]}getValidators(){return[...this.validators]}formatFileSize(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(1024));return Math.round(t/Math.pow(1024,e)*100)/100+" "+["Bytes","KB","MB","GB"][e]}logError(t,e){console.error(`[ValidationService] ${t}`,e)}}
2422
+ /**
2423
+ * @license
2424
+ * Copyright 2023 Nuraly, Laabidi Aymen
2425
+ * SPDX-License-Identifier: MIT
2426
+ */var Et=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class Ct{constructor(t,e,n){this.stateHandler=e,this.config=n,this.storage=t,this.setupAutoSave()}setStorage(t){this.storage=t,this.setupAutoSave()}saveState(){return Et(this,arguments,void 0,function*(t="chatbot-state"){if(!this.storage)throw new Error("No storage configured");try{const e=this.stateHandler.getState();yield this.storage.save(t,e),this.log("State saved to storage")}catch(t){throw this.logError("Error saving to storage:",t),t}})}loadState(){return Et(this,arguments,void 0,function*(t="chatbot-state"){if(!this.storage)throw new Error("No storage configured");try{const e=yield this.storage.load(t);e&&(this.stateHandler.updateState(e),this.log("State loaded from storage"))}catch(t){throw this.logError("Error loading from storage:",t),t}})}clearStorage(){return Et(this,void 0,void 0,function*(){if(!this.storage)throw new Error("No storage configured");try{yield this.storage.clear(),this.log("Storage cleared")}catch(t){throw this.logError("Error clearing storage:",t),t}})}setupAutoSave(){this.autoSaveTimer&&clearInterval(this.autoSaveTimer),this.config.autoSaveInterval&&this.storage&&(this.autoSaveTimer=setInterval(()=>{this.saveState().catch(t=>{this.logError("Auto-save failed:",t)})},this.config.autoSaveInterval))}stopAutoSave(){this.autoSaveTimer&&(clearInterval(this.autoSaveTimer),this.autoSaveTimer=void 0)}startAutoSave(t){this.config.autoSaveInterval=t,this.setupAutoSave()}hasStorage(){return!!this.storage}destroy(){this.stopAutoSave()}log(t){console.log(`[StorageService] ${t}`)}logError(t,e){console.error(`[StorageService] ${t}`,e)}}
2427
+ /**
2428
+ * @license
2429
+ * Copyright 2023 Nuraly, Laabidi Aymen
2430
+ * SPDX-License-Identifier: MIT
2431
+ */var It=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class Ot{constructor(t){this.plugins=new Map,t&&t.forEach(t=>this.registerPlugin(t))}registerPlugin(t,e){if(this.plugins.has(t.id))this.log(`Plugin "${t.id}" is already registered, skipping`);else if(this.plugins.set(t.id,t),this.log(`Registered plugin: ${t.name} v${t.version}`),t.onInit&&e)try{t.onInit(e)}catch(e){this.logError(`Error initializing plugin "${t.id}":`,e)}}unregisterPlugin(t){const e=this.plugins.get(t);if(e&&e.onDestroy)try{e.onDestroy()}catch(e){this.logError(`Error destroying plugin "${t}":`,e)}this.plugins.delete(t),this.log(`Unregistered plugin: ${t}`)}getPlugin(t){return this.plugins.get(t)}getAllPlugins(){return Array.from(this.plugins.values())}hasPlugin(t){return this.plugins.has(t)}getPluginsMap(){return this.plugins}executeHook(t,...e){return It(this,void 0,void 0,function*(){for(const n of this.plugins.values()){const i=n[t];if("function"==typeof i)try{yield i(...e)}catch(e){this.logError(`Error executing hook "${String(t)}" on plugin "${n.id}":`,e)}}})}clearPlugins(){this.plugins.forEach((t,e)=>{this.unregisterPlugin(e)}),this.plugins.clear()}getPluginCount(){return this.plugins.size}log(t){console.log(`[PluginService] ${t}`)}logError(t,e){console.error(`[PluginService] ${t}`,e)}}const Rt=["ar","fr"],jt="__nuraly_localization__";!function(){if(globalThis[jt])return globalThis[jt];const t=R({sourceLocale:"en",targetLocales:Rt,loadLocale:t=>import(`../../locales/generated/${t}.js`)});globalThis[jt]=t}();
2432
+ /**
2433
+ * @license
2434
+ * Copyright 2023 Nuraly, Laabidi Aymen
2435
+ * SPDX-License-Identifier: MIT
2436
+ */
2437
+ var At=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class Dt{constructor(t={}){this.plugins=new Map,this.config=t,this.ui=t.ui||{},this.eventBus=new gt,this.pluginService=new Ot,this.plugins=this.pluginService.getPluginsMap(),t.plugins&&t.plugins.forEach(t=>this.pluginService.registerPlugin(t,this));const e=this.initializeState(t);if(this.stateHandler=new bt(e,this.eventBus,this.ui,this.plugins,this.config),this.messageHandler=new yt(this.stateHandler,this.eventBus,this.plugins),this.threadHandler=new wt(this.stateHandler,this.eventBus,this.ui,this.config,t.provider),this.fileHandler=new $t(this.stateHandler,this.eventBus),this.moduleHandler=new kt(this.stateHandler,this.eventBus),this.suggestionHandler=new St(this.stateHandler),this.providerService=new Pt(t.provider,this.stateHandler,this.messageHandler,this.fileHandler,this.eventBus,this.ui,this.plugins),this.validationService=new Mt(this.config),this.storageService=new Ct(t.storage,this.stateHandler,this.config),t.provider){const e=t.provider;queueMicrotask(()=>{this.initializeProvider(e)})}this.setupLifecycleHooks()}initializeProvider(t){return At(this,void 0,void 0,function*(){try{t.isConnected()||(yield t.connect({})),yield this.autoLoadConversations(t)}catch(t){this.logError("Failed to connect provider:",t)}})}initializeState(t){const e=t.initialMessages?t.initialMessages.map(t=>this.processMessageThroughPlugins(t)):[];return{messages:e,threads:t.initialThreads||[],modules:t.enableModules?[]:void 0,selectedModules:[],uploadedFiles:[],suggestions:t.initialSuggestions||[],isTyping:!1,isProcessing:!1,currentThreadId:void 0,metadata:t.metadata||{}}}processMessageThroughPlugins(t){if(!t.text||"string"!=typeof t.text)return t;const e=Array.from(this.plugins.values()).filter(t=>Array.isArray(t.htmlTags)&&t.htmlTags.length>0);if(0===e.length)return t;let n=t.text,i=!1;for(const t of e){const e=t.htmlTags;for(const o of e){const e=o.open,r=o.close;let s=0;for(;;){const a=n.indexOf(e,s);if(-1===a)break;const l=a+e.length,c=n.indexOf(r,l);if(-1===c){s=l;continue}const d=n.substring(l,c);let h="";if("function"==typeof t.renderHtmlBlock)try{h=t.renderHtmlBlock(o.name,d)}catch(e){console.error(`[ChatbotCore] Error rendering HTML block for plugin ${t.id}:`,e)}h?(n=n.substring(0,a)+h+n.substring(c+r.length),i=!0,s=a+h.length):s=c+r.length}}}return i?Object.assign(Object.assign({},t),{text:n,metadata:Object.assign(Object.assign({},t.metadata),{renderAsHtml:!0})}):t}processRestoredMessagesForPlugins(){const t=this.stateHandler.getState();if(t.messages&&0!==t.messages.length)for(const e of t.messages)"bot"===e.sender&&this.plugins.forEach(t=>{if(t.onMessageReceived)try{t.onMessageReceived(e)}catch(t){}})}setupLifecycleHooks(){this.onBeforeInit(),this.onReady().catch(t=>{this.logError("Error during initialization:",t)})}onBeforeInit(){this.log("Initializing chatbot controller...")}onReady(){return At(this,void 0,void 0,function*(){this.log("Chatbot controller ready");try{const t=this.stateHandler.getState(),e=t.messages&&t.messages.length>0?t.messages[0]:void 0;e&&"bot"===e.sender&&e.introduction&&Array.isArray(e.suggestions)&&e.suggestions.length>0&&this.suggestionHandler.setSuggestions(e.suggestions)}catch(t){this.logError("Error initializing suggestions from initial messages:",t)}this.processRestoredMessagesForPlugins(),this.ui.onStateChange&&this.ui.onStateChange(this.getState()),this.emit("ready",this.stateHandler.getState())})}onDestroy(){this.log("Destroying chatbot controller..."),this.storageService.stopAutoSave(),this.pluginService.clearPlugins(),this.eventBus.removeAllListeners()}updateState(t){this.stateHandler.updateState(t)}sendMessage(t){return At(this,arguments,void 0,function*(t,e={}){this.log("Sending message:",t);try{const n=this.stateHandler.getState();this.config.enableThreads&&!n.currentThreadId&&(yield this.threadHandler.createThread("New Chat"));const i=yield this.beforeMessageSent(t,e);if(!e.skipValidation){const t=yield this.validationService.validateMessage(i);if(!t.isValid){const e=new mt(t.errors);throw this.handleValidationError(e),e}}const o=this.messageHandler.createUserMessage(i,e.metadata);e.files&&(o.files=e.files),this.messageHandler.addMessage(o);const r=this.stateHandler.getState();return(e.threadId||r.currentThreadId)&&this.threadHandler.updateThreadMessages(e.threadId||r.currentThreadId),yield this.afterMessageSent(o),this.providerService.processMessage(o).catch(t=>{this.logError("Error processing with provider:",t)}),o}catch(t){throw this.handleError(t),t}})}stop(){this.providerService.stopCurrentProcessing()}addMessage(t){const e=this.messageHandler.createMessage(t),n="bot"===e.sender?this.processMessageThroughPlugins(e):e;return this.messageHandler.addMessage(n),n}updateMessage(t,e){this.messageHandler.updateMessage(t,e)}deleteMessage(t){this.messageHandler.deleteMessage(t)}clearMessages(){this.updateState({messages:[]})}getMessages(){return this.stateHandler.getState().messages}uploadFiles(t){return At(this,void 0,void 0,function*(){if(!this.config.enableFileUpload)throw new Error("File upload is not enabled");let e=t;if(!e&&this.ui.openFileDialog&&(e=yield this.ui.openFileDialog()),!e||0===e.length)return[];const n=[];for(const t of e)try{const e=yield this.validationService.validateFile(t,{maxFileSize:this.config.maxFileSize,allowedTypes:this.config.allowedFileTypes});if(!e.isValid){this.ui.showNotification&&this.ui.showNotification(e.errors[0]||"File validation failed","error");continue}const i=yield this.fileHandler.createChatbotFile(t),o=yield this.providerService.uploadFileToProvider(t);o&&Object.assign(i,o),n.push(i),this.fileHandler.addFile(i),this.ui.showFilePreview&&this.ui.showFilePreview(i)}catch(e){this.logError("Error uploading file:",e),this.ui.showNotification&&this.ui.showNotification(`Failed to upload ${t.name}`,"error")}return n})}removeFile(t){this.fileHandler.removeFile(t)}clearFiles(){this.fileHandler.clearFiles()}getUploadedFiles(){return this.stateHandler.getState().uploadedFiles}createThread(t){return At(this,void 0,void 0,function*(){return yield this.threadHandler.createThread(t)})}switchThread(t){this.threadHandler.switchThread(t),this.processRestoredMessagesForPlugins()}deleteThread(t){this.threadHandler.deleteThread(t)}renameThread(t,e){this.threadHandler.renameThread(t,e)}bookmarkThread(t){this.threadHandler.bookmarkThread(t)}getCurrentThread(){const t=this.stateHandler.getState();return t.threads.find(e=>e.id===t.currentThreadId)}getThreads(){return this.stateHandler.getState().threads}setModules(t){this.moduleHandler.setModules(t)}selectModules(t){this.moduleHandler.selectModules(t)}toggleModule(t){this.moduleHandler.toggleModule(t)}getSelectedModules(){return this.moduleHandler.getSelectedModules()}setSuggestions(t){this.suggestionHandler.setSuggestions(t)}clearSuggestions(){this.suggestionHandler.clearSuggestions()}beforeMessageSent(t,e){return At(this,void 0,void 0,function*(){let e=t;for(const t of this.plugins.values())t.beforeSend&&(e=yield t.beforeSend(e));return e})}afterMessageSent(t){return At(this,void 0,void 0,function*(){this.log("Message sent:",t)})}beforeProviderCall(t){return At(this,void 0,void 0,function*(){this.log("Calling provider for message:",t.id)})}afterProviderCall(){return At(this,void 0,void 0,function*(){this.log("Provider call completed")})}handleProviderError(t){return At(this,void 0,void 0,function*(){this.logError("Provider error:",t);const e=this.messageHandler.createMessage({sender:D.Bot,text:"Sorry, there was an error processing your request.",state:B.Error,timestamp:(new Date).toISOString()});this.messageHandler.addMessage(e),this.ui.showNotification&&this.ui.showNotification("Failed to process message","error"),this.emit("provider:error",t),yield this.pluginService.executeHook("onError",t)})}handleValidationError(t){this.logError("Validation error:",t),this.ui.showNotification&&this.ui.showNotification(t.errors[0],"error"),this.emit("validation:error",t)}handleError(t){this.logError("Error:",t),this.emit("error",t),this.plugins.forEach(e=>{e.onError&&e.onError(t)})}registerPlugin(t){this.pluginService.registerPlugin(t,this)}unregisterPlugin(t){this.pluginService.unregisterPlugin(t)}getPlugin(t){return this.pluginService.getPlugin(t)}setProvider(t){this.providerService.setProvider(t),t.isConnected()?(this.autoLoadConversations(t).catch(t=>{this.logError("Failed to auto-load conversations:",t)}),this.emit("provider:connected",t.id)):t.connect({}).then(()=>At(this,void 0,void 0,function*(){yield this.autoLoadConversations(t),this.emit("provider:connected",t.id)})).catch(t=>{this.logError("Failed to connect provider:",t)})}setStorage(t){this.storageService.setStorage(t)}saveToStorage(){return At(this,arguments,void 0,function*(t="chatbot-state"){yield this.storageService.saveState(t)})}loadFromStorage(){return At(this,arguments,void 0,function*(t="chatbot-state"){yield this.storageService.loadState(t);const e=this.stateHandler.getState();if(e.messages&&e.messages.length>0){const t=e.messages.map(t=>this.processMessageThroughPlugins(t));this.stateHandler.updateState({messages:t}),this.processRestoredMessagesForPlugins()}})}on(t,e){return this.eventBus.on(t,e)}emit(t,e){this.eventBus.emit(t,e)}getState(){return this.stateHandler.getState()}setState(t){t.messages&&Array.isArray(t.messages)&&(t.messages=t.messages.map(t=>this.processMessageThroughPlugins(t))),t.threads&&Array.isArray(t.threads)&&(t.threads=t.threads.map(t=>Object.assign(Object.assign({},t),{messages:t.messages.map(t=>this.processMessageThroughPlugins(t))}))),this.updateState(t),t.messages&&this.processRestoredMessagesForPlugins()}loadConversations(t){const e=t.map(t=>Object.assign(Object.assign({},t),{messages:t.messages.map(t=>this.processMessageThroughPlugins(t))}));this.updateState({threads:e,currentThreadId:e.length>0?e[0].id:void 0,messages:e.length>0?e[0].messages:[]}),this.processRestoredMessagesForPlugins()}autoLoadConversations(t){return At(this,void 0,void 0,function*(){if(t&&"function"==typeof t.loadConversations)try{this.log("Auto-loading conversations from provider...");const e=yield t.loadConversations();if(Array.isArray(e)&&e.length>0){this.log(`Loaded ${e.length} conversation summaries`);const n=[];if("function"==typeof t.loadConversation)for(const i of e)try{const e=yield t.loadConversation(i.id);if(e){const t={id:e.id,title:e.title,messages:e.messages||[],createdAt:e.createdAt,updatedAt:e.updatedAt};n.push(t)}}catch(t){this.logError(`Failed to load conversation ${i.id}:`,t)}else for(const t of e){const e={id:t.id,title:t.title,messages:[],createdAt:t.createdAt,updatedAt:t.updatedAt};n.push(e)}n.length>0&&(this.log(`Successfully loaded ${n.length} conversations`),this.loadConversations(n))}else this.log("No conversations to load from provider")}catch(t){this.logError("Failed to auto-load conversations from provider:",t)}})}setUICallbacks(t){this.ui=Object.assign(Object.assign({},this.ui),t)}getConfig(){return Object.freeze(Object.assign({},this.config))}updateConfig(t){this.config=Object.assign(Object.assign({},this.config),t)}setTyping(t){this.updateState({isTyping:t}),this.emit(t?"typing:start":"typing:end")}setStatusText(t){this.updateState({statusText:t})}clearStatusText(){this.updateState({statusText:void 0})}getContext(){const t=this.stateHandler.getState();return{messages:t.messages,currentThread:this.getCurrentThread(),selectedModules:t.selectedModules,metadata:t.metadata,uploadedFiles:t.uploadedFiles}}destroy(){this.onDestroy()}generateId(t){return`${t}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}formatFileSize(t){return t<1024?`${t} B`:t<1048576?`${(t/1024).toFixed(2)} KB`:`${(t/1048576).toFixed(2)} MB`}log(...t){this.config.debug&&console.log("[ChatbotCore]",...t)}logError(...t){console.error("[ChatbotCore]",...t)}}
2438
+ /**
2439
+ * @license
2440
+ * Copyright 2023 Nuraly, Laabidi Aymen
2441
+ * SPDX-License-Identifier: MIT
2442
+ */var Ft=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})},Nt=function(t){return this instanceof Nt?(this.v=t,this):new Nt(t)},Lt=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),r=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function s(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){r.push([t,e,n,i])>1||a(t,e)})},e&&(i[t]=e(i[t])))}function a(t,e){try{(n=o[t](e)).value instanceof Nt?Promise.resolve(n.value.v).then(l,c):d(r[0][2],n)}catch(t){d(r[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),r.shift(),r.length&&a(r[0][0],r[0][1])}};class Bt{constructor(){this.id="openai",this.name="OpenAI",this.capabilities={streaming:!0,fileUpload:!0,modules:!0,functions:!0,imageGeneration:!0},this.apiKey="",this.apiUrl="https://api.openai.com/v1",this.model="gpt-4",this.temperature=.7,this.connected=!1}connect(t){return Ft(this,void 0,void 0,function*(){var e;if(!t.apiKey)throw new Error("OpenAI API key is required");this.apiKey=t.apiKey,this.apiUrl=t.apiUrl||this.apiUrl,this.model=t.model||this.model,this.temperature=null!==(e=t.temperature)&&void 0!==e?e:this.temperature,this.maxTokens=t.maxTokens;try{const t=yield fetch(`${this.apiUrl}/models`,{headers:{Authorization:`Bearer ${this.apiKey}`}});if(!t.ok)throw new Error(`OpenAI connection failed: ${t.statusText}`);this.connected=!0,console.log("[OpenAIProvider] Connected successfully")}catch(t){throw this.connected=!1,t}})}disconnect(){return Ft(this,void 0,void 0,function*(){this.connected=!1,console.log("[OpenAIProvider] Disconnected")})}isConnected(){return this.connected}sendMessage(t,e){return Lt(this,arguments,function*(){var n,i,o;if(!this.connected)throw new Error("Provider not connected");const r=this.buildMessages(t,e),s=yield Nt(fetch(`${this.apiUrl}/chat/completions`,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify({model:this.model,messages:r,temperature:this.temperature,max_tokens:this.maxTokens,stream:!0})}));if(!s.ok)throw new Error(`OpenAI API error: ${s.statusText}`);if(!s.body)throw new Error("Response body is null");const a=s.body.getReader(),l=new TextDecoder;let c="";try{for(;;){const{done:t,value:e}=yield Nt(a.read());if(t)break;c+=l.decode(e,{stream:!0});const r=c.split("\n");c=r.pop()||"";for(const t of r)if(""!==t.trim()&&"data: [DONE]"!==t.trim()&&t.startsWith("data: ")){const e=t.slice(6);try{const t=null===(o=null===(i=null===(n=JSON.parse(e).choices)||void 0===n?void 0:n[0])||void 0===i?void 0:i.delta)||void 0===o?void 0:o.content;t&&(yield yield Nt(t))}catch(t){console.error("Error parsing SSE data:",t)}}}}finally{a.releaseLock()}})}getAvailableModules(){return Ft(this,void 0,void 0,function*(){return[{id:"web-search",name:"Web Search",description:"Search the web for information",icon:"search",enabled:!0},{id:"code-interpreter",name:"Code Interpreter",description:"Execute Python code",icon:"code",enabled:!0},{id:"dalle",name:"DALL-E",description:"Generate images",icon:"image",enabled:!0}]})}callModule(t,e){return Ft(this,void 0,void 0,function*(){return console.log(`[OpenAIProvider] Calling module: ${t}`,e),{success:!0,result:"Module executed"}})}uploadFile(t){return Ft(this,void 0,void 0,function*(){const e=new FormData;e.append("file",t),e.append("purpose","assistants");const n=yield fetch(`${this.apiUrl}/files`,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`},body:e});if(!n.ok)throw new Error(`File upload failed: ${n.statusText}`);const i=yield n.json();return{id:i.id,name:t.name,size:t.size,type:this.determineFileType(t.type),mimeType:t.type,url:i.url}})}onError(t){console.error("[OpenAIProvider] Error:",t)}buildMessages(t,e){const n=[],i=e.messages.slice(-10);for(const t of i)n.push({role:"user"===t.sender?"user":"assistant",content:t.text});return n.find(e=>"user"===e.role&&e.content===t)||n.push({role:"user",content:t}),n}determineFileType(t){return t.startsWith("image/")?"image":t.startsWith("video/")?"video":t.startsWith("audio/")?"audio":"document"}}
2443
+ /**
2444
+ * @license
2445
+ * Copyright 2023 Nuraly, Laabidi Aymen
2446
+ * SPDX-License-Identifier: MIT
2447
+ */var Ut=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})},Wt=function(t){return this instanceof Wt?(this.v=t,this):new Wt(t)},Ht=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),r=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function s(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){r.push([t,e,n,i])>1||a(t,e)})},e&&(i[t]=e(i[t])))}function a(t,e){try{(n=o[t](e)).value instanceof Wt?Promise.resolve(n.value.v).then(l,c):d(r[0][2],n)}catch(t){d(r[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),r.shift(),r.length&&a(r[0][0],r[0][1])}};class Jt{constructor(){this.id="custom-api",this.name="Custom API",this.capabilities={streaming:!0,fileUpload:!1,modules:!1,functions:!1},this.apiUrl="",this.headers={},this.connected=!1}connect(t){return Ut(this,void 0,void 0,function*(){if(!t.apiUrl)throw new Error("API URL is required");this.apiUrl=t.apiUrl,this.headers=Object.assign({},t.headers),this.headers["Content-Type"]||(this.headers["Content-Type"]="application/json"),t.apiKey&&(this.headers.Authorization=`Bearer ${t.apiKey}`),this.connected=!0,console.log("[CustomAPIProvider] Connected")})}disconnect(){return Ut(this,void 0,void 0,function*(){this.connected=!1,console.log("[CustomAPIProvider] Disconnected")})}isConnected(){return this.connected}sendMessage(t,e){return Ht(this,arguments,function*(){var n;if(!this.connected)return yield yield Wt(this.formatError("Provider not connected","Please check your connection settings.")),yield Wt(void 0);try{const i=this.buildPayload(t,e);let o,r;if(!(null===(n=this.headers["Content-Type"])||void 0===n?void 0:n.includes("multipart/form-data"))||"object"!=typeof i||i instanceof FormData)i instanceof FormData?(o=i,r=Object.assign({},this.headers),delete r["Content-Type"]):(o=JSON.stringify(i),r=this.headers);else{const t=new FormData;for(const[e,n]of Object.entries(i))null!=n&&t.append(e,"object"==typeof n?JSON.stringify(n):String(n));o=t,r=Object.assign({},this.headers),delete r["Content-Type"]}const s=yield Wt(fetch(this.apiUrl,{method:"POST",headers:r,body:o}));if(!s.ok){const t=yield Wt(s.text().catch(()=>s.statusText));return yield yield Wt(this.formatError(`${s.status} ${s.statusText}`,t||"The server returned an error. Please try again.")),yield Wt(void 0)}if(!s.body)return yield yield Wt(this.formatError("Response Error","The server response body is empty.")),yield Wt(void 0);const a=s.headers.get("content-type");if((null==a?void 0:a.includes("text/event-stream"))||(null==a?void 0:a.includes("stream"))||(null==a?void 0:a.includes("text/plain"))){const t=this.handleStreamResponse(s);let e=yield Wt(t.next());for(;!e.done;)yield yield Wt(e.value),e=yield Wt(t.next())}else try{const t=yield Wt(s.json());yield yield Wt(this.extractMessage(t))}catch(t){yield yield Wt(this.formatError("Parse Error","Failed to parse the server response."))}}catch(t){const e=t instanceof Error?t.message:String(t);yield yield Wt(this.formatError("Network Error",e)),this.onError(t instanceof Error?t:new Error(String(t)))}})}handleStreamResponse(t){return Ht(this,arguments,function*(){const e=t.body.getReader(),n=new TextDecoder;let i="";try{for(;;){const{done:t,value:o}=yield Wt(e.read());if(t)break;i+=n.decode(o,{stream:!0}),yield yield Wt(i)}i.length>0&&(yield yield Wt(i))}catch(t){const e=t instanceof Error?t.message:String(t);yield yield Wt("\n\n"+this.formatError("Streaming Error",e)),this.onError(t instanceof Error?t:new Error(String(t)))}finally{e.releaseLock()}})}buildPayload(t,e){return{userMessage:t,variables:e.metadata||{},stream:!0}}extractMessage(t){return t.message||t.text||t.response||JSON.stringify(t)}formatError(t,e){return`[ERROR_START][ERROR_TITLE_START]${t}[ERROR_TITLE_END]${e}[ERROR_END]`}onError(t){console.error("[CustomAPIProvider] Error:",t)}}
2448
+ /**
2449
+ * @license
2450
+ * Copyright 2023 Nuraly, Laabidi Aymen
2451
+ * SPDX-License-Identifier: MIT
2452
+ */var qt=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})},Vt=function(t){return this instanceof Vt?(this.v=t,this):new Vt(t)},Gt=function(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e,n=t[Symbol.asyncIterator];return n?n.call(t):(t="function"==typeof __values?__values(t):t[Symbol.iterator](),e={},i("next"),i("throw"),i("return"),e[Symbol.asyncIterator]=function(){return this},e);function i(n){e[n]=t[n]&&function(e){return new Promise(function(i,o){(function(t,e,n,i){Promise.resolve(i).then(function(e){t({value:e,done:n})},e)})(i,o,(e=t[n](e)).done,e.value)})}}},Kt=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),r=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function s(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){r.push([t,e,n,i])>1||a(t,e)})},e&&(i[t]=e(i[t])))}function a(t,e){try{(n=o[t](e)).value instanceof Vt?Promise.resolve(n.value.v).then(l,c):d(r[0][2],n)}catch(t){d(r[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),r.shift(),r.length&&a(r[0][0],r[0][1])}};const Yt=["That's an interesting question! Let me think about that...","I understand what you're asking. Here's what I think:","Great point! Based on what you've told me, I would suggest:","I'd be happy to help with that. Let me explain:","That's a common question. The answer is:","I see where you're coming from. Let me clarify:","Excellent question! Here's my perspective:","I can definitely help you with that. Consider this:"],Xt={hello:["Hello! πŸ‘‹ How can I help you today?","Hi there! What can I do for you?","Hey! Great to see you. What's on your mind?"],help:["I'm here to help! You can ask me anything. Try asking about features, getting started, or technical questions.","I can assist with various topics. What do you need help with?","Sure! I'm ready to help. What would you like to know?"],bye:["Goodbye! Feel free to come back anytime! πŸ‘‹","See you later! Have a great day!","Bye! It was nice chatting with you!"],thanks:["You're welcome! Happy to help! 😊","Glad I could help!","Anytime! That's what I'm here for!"],how:["Great question! Here's how it works: First, you need to understand the basics. Then, you can dive deeper into the specifics.","Let me explain the process step by step...","That's actually quite straightforward. Let me break it down for you:"],what:["Good question! Let me explain what that means...","That refers to a concept that's important to understand. Here's the breakdown:","Interesting topic! Here's what you need to know:"],why:["That's because of several factors. Let me explain the reasoning:","Great question! The main reason is that it provides better functionality and user experience.","There are multiple reasons for this. The primary one is:"]};class Qt{constructor(t={}){var e,n,i,o,r,s,a,l,c,d,h,u;this.id="mock-provider",this.name="Mock Provider",this.capabilities={streaming:!0,fileUpload:!0,modules:!1,functions:!0},this.messageCount=0,this.connected=!1,this.config={delay:null!==(e=t.delay)&&void 0!==e?e:800,streaming:null!==(n=t.streaming)&&void 0!==n&&n,streamingSpeed:null!==(i=t.streamingSpeed)&&void 0!==i?i:3,streamingInterval:null!==(o=t.streamingInterval)&&void 0!==o?o:50,contextualResponses:null===(r=t.contextualResponses)||void 0===r||r,echoMode:null!==(s=t.echoMode)&&void 0!==s&&s,customResponses:null!==(a=t.customResponses)&&void 0!==a?a:[],errorRate:null!==(l=t.errorRate)&&void 0!==l?l:0,useHistory:null===(c=t.useHistory)||void 0===c||c,simulateToolCalls:null!==(d=t.simulateToolCalls)&&void 0!==d&&d,toolCallNames:null!==(h=t.toolCallNames)&&void 0!==h?h:["search_web","get_weather","run_code"],toolCallDelay:null!==(u=t.toolCallDelay)&&void 0!==u?u:1500}}connect(t){return qt(this,void 0,void 0,function*(){yield this.delay(100),this.connected=!0,console.log("πŸ€– Mock Provider connected")})}disconnect(){return qt(this,void 0,void 0,function*(){this.connected=!1,console.log("πŸ€– Mock Provider disconnected")})}isConnected(){return this.connected}sendMessage(t,e){return Kt(this,arguments,function*(){var n,i,o,r,s,a;if(this.messageCount++,Math.random()<this.config.errorRate)throw yield Vt(this.delay(this.config.delay/2)),new Error("Simulated API error for testing");if(yield Vt(this.delay(this.config.delay)),this.config.simulateToolCalls){const t=this.config.toolCallNames,e=1+Math.floor(Math.random()*Math.min(t.length,3));for(let n=0;n<e;n++){const e=t[n%t.length];null===(s=this.onToolCall)||void 0===s||s.call(this,e),yield Vt(this.delay(this.config.toolCallDelay)),null===(a=this.onToolCallEnd)||void 0===a||a.call(this)}}const l=this.generateResponse(t,e);if(this.config.streaming)try{for(var c,d=!0,h=Gt(this.streamResponse(l));!(n=(c=yield Vt(h.next())).done);d=!0){r=c.value,d=!1;const t=r;yield yield Vt(t)}}catch(t){i={error:t}}finally{try{d||n||!(o=h.return)||(yield Vt(o.call(h)))}finally{if(i)throw i.error}}else yield yield Vt(l)})}uploadFile(t){return qt(this,void 0,void 0,function*(){if(yield this.delay(this.config.delay),Math.random()<this.config.errorRate)throw new Error("Simulated file upload error for testing");const e=t.type||"application/octet-stream",n=this.determineFileType(e),i=`mock-file-${Date.now()}-${Math.random().toString(36).substr(2,9)}`;console.log(`πŸ“Ž Mock Provider: File uploaded - ${t.name} (${t.size} bytes) - ID: ${i}`);return{id:i,name:t.name,size:t.size,type:n,mimeType:e,url:URL.createObjectURL(t),previewUrl:"image"===n?URL.createObjectURL(t):void 0,uploadProgress:100,metadata:{provider:"mock",uploadedAt:(new Date).toISOString()}}})}determineFileType(t){return t.startsWith("image/")?U.Image:t.startsWith("video/")?U.Video:t.startsWith("audio/")?U.Audio:t.startsWith("application/pdf")||t.includes("document")||t.includes("text")?U.Document:t.includes("zip")||t.includes("rar")||t.includes("tar")?U.Archive:t.includes("javascript")||t.includes("json")||t.includes("xml")?U.Code:U.Unknown}generateResponse(t,e){var n,i;const o=(null==e?void 0:e.messages)||[],r=null===(n=[...o].map((t,e)=>({m:t,i:e})).reverse().find(({m:t})=>"user"===t.sender&&!!t.text))||void 0===n?void 0:n.i,s="number"==typeof r&&(null===(i=o[r])||void 0===i?void 0:i.text)?o[r].text:t;if(this.config.echoMode)return`You said: "${s}"`;if(this.config.customResponses.length>0){const t=(this.messageCount-1)%this.config.customResponses.length;return this.config.customResponses[t]}if(this.config.contextualResponses){const t=this.getContextualResponse(s);if(t)return t}if(this.config.useHistory&&o.length>0&&"number"==typeof r){const t=[...o].slice(0,r).reverse().find(t=>"user"===t.sender&&!!t.text);return t&&t.text?`Great point about "${String(s).substring(0,60)}". Considering your earlier message about "${String(t.text).substring(0,30)}...", ${this.getRandomResponse()}`:`Regarding "${String(s).substring(0,60)}", ${this.getRandomResponse()}`}return`Regarding "${String(s).substring(0,60)}", ${this.getRandomResponse()}`}getContextualResponse(t){const e=t.toLowerCase();for(const[t,n]of Object.entries(Xt))if(e.includes(t)){return n[Math.floor(Math.random()*n.length)]}return null}getRandomResponse(){const t=Math.floor(Math.random()*Yt.length);return Yt[t]}streamResponse(t){return Kt(this,arguments,function*(){let e="";const n=t.split(" ");for(let t=0;t<n.length;t++){e+=(t>0?" ":"")+n[t],yield yield Vt(e),t<n.length-1&&(yield Vt(this.delay(this.config.streamingInterval)))}})}delay(t){return new Promise(e=>setTimeout(e,t))}reset(){this.messageCount=0}updateConfig(t){Object.assign(this.config,t)}getConfig(){return Object.assign({},this.config)}}const Zt={fast:()=>new Qt({delay:300,streaming:!1,contextualResponses:!0}),realistic:()=>new Qt({delay:1200,streaming:!0,streamingInterval:50,contextualResponses:!0,useHistory:!0}),slow:()=>new Qt({delay:3e3,streaming:!1}),echo:()=>new Qt({delay:500,echoMode:!0}),streaming:()=>new Qt({delay:800,streaming:!0,streamingSpeed:2,streamingInterval:30}),unreliable:()=>new Qt({delay:1e3,errorRate:.3}),custom:t=>new Qt({delay:800,customResponses:t})};
2453
+ /**
2454
+ * @license
2455
+ * Copyright 2024 Nuraly, Laabidi Aymen
2456
+ * SPDX-License-Identifier: MIT
2457
+ */var te=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})},ee=function(t){return this instanceof ee?(this.v=t,this):new ee(t)},ne=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),r=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function s(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){r.push([t,e,n,i])>1||a(t,e)})},e&&(i[t]=e(i[t])))}function a(t,e){try{(n=o[t](e)).value instanceof ee?Promise.resolve(n.value.v).then(l,c):d(r[0][2],n)}catch(t){d(r[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),r.shift(),r.length&&a(r[0][0],r[0][1])}};const ie={send:"message:send",response:"message:response",stream:"message:stream",error:"message:error",typingStart:"typing:start",typingEnd:"typing:end",toolCall:"tool:call",toolCallEnd:"tool:end"};class oe{constructor(){this.id="socket",this.name="Socket.io Provider",this.capabilities={streaming:!0,fileUpload:!1,modules:!1,functions:!1},this.socket=null,this.config=null,this.connected=!1,this.responseResolvers=new Map}connect(t){return te(this,void 0,void 0,function*(){var e,n,i;if(!t.url)throw new Error("Socket URL is required");this.config=Object.assign(Object.assign({},t),{events:Object.assign(Object.assign({},ie),t.events),autoReconnect:null===(e=t.autoReconnect)||void 0===e||e,reconnectionAttempts:null!==(n=t.reconnectionAttempts)&&void 0!==n?n:5,responseTimeout:null!==(i=t.responseTimeout)&&void 0!==i?i:3e4});const o=t.namespace?`${t.url}${t.namespace}`:t.url;return this.socket=h(o,{path:t.path||"/socket.io",transports:["websocket","polling"],autoConnect:!0,reconnection:this.config.autoReconnect,reconnectionAttempts:this.config.reconnectionAttempts,extraHeaders:t.headers}),new Promise((t,e)=>{const n=setTimeout(()=>{e(new Error("Socket connection timeout"))},1e4);this.socket.on("connect",()=>{clearTimeout(n),this.connected=!0,console.log("[SocketProvider] Connected:",this.socket.id),t()}),this.socket.on("connect_error",t=>{clearTimeout(n),console.error("[SocketProvider] Connection error:",t),e(t)}),this.socket.on("disconnect",t=>{this.connected=!1,console.log("[SocketProvider] Disconnected:",t)}),this.setupEventListeners()})})}setupEventListeners(){if(!this.socket||!this.config)return;const t=this.config.events;this.socket.on(t.response,t=>{console.log("[SocketProvider] Response received:",t);const e=this.extractMessageId(t),n=this.responseResolvers.get(e)||this.getLatestResolver();if(n){const i=this.extractMessage(t);n.resolve(i),this.responseResolvers.delete(e)}}),t.stream&&this.socket.on(t.stream,t=>{console.log("[SocketProvider] Stream chunk:",t);const e=this.extractMessageId(t),n=this.responseResolvers.get(e)||this.getLatestResolver();if(n){n.isStreaming=!0;const e=this.extractMessage(t);n.chunks.push(e)}}),t.error&&this.socket.on(t.error,t=>{console.error("[SocketProvider] Error event:",t);const e=this.extractMessageId(t),n=this.responseResolvers.get(e)||this.getLatestResolver();if(n){const i=t.error||t.message||"Unknown error";n.reject(new Error(i)),this.responseResolvers.delete(e)}}),t.toolCall&&this.socket.on(t.toolCall,t=>{var e;const n=t.name||t.toolName||t.function||"unknown";null===(e=this.onToolCall)||void 0===e||e.call(this,n)}),t.toolCallEnd&&this.socket.on(t.toolCallEnd,()=>{var t;null===(t=this.onToolCallEnd)||void 0===t||t.call(this)})}getLatestResolver(){const t=Array.from(this.responseResolvers.keys());return t.length>0?this.responseResolvers.get(t[t.length-1]):null}extractMessageId(t){return t.messageId||t.id||t.executionId||"default"}extractMessage(t){var e,n,i;return(null===(e=this.config)||void 0===e?void 0:e.extractMessage)?this.config.extractMessage(t):"string"==typeof t?t:t.message?t.message:t.text?t.text:t.response?t.response:t.content?t.content:(null===(n=t.data)||void 0===n?void 0:n.message)?t.data.message:(null===(i=t.data)||void 0===i?void 0:i.output)?JSON.stringify(t.data.output):JSON.stringify(t)}disconnect(){return te(this,void 0,void 0,function*(){this.socket&&(this.socket.disconnect(),this.socket=null),this.connected=!1,this.responseResolvers.clear(),console.log("[SocketProvider] Disconnected")})}isConnected(){var t;return this.connected&&!0===(null===(t=this.socket)||void 0===t?void 0:t.connected)}sendMessage(t,e){return ne(this,arguments,function*(){if(!this.connected||!this.socket||!this.config)return yield yield ee(this.formatError("Not Connected","Socket is not connected. Please check your connection.")),yield ee(void 0);const n=`msg_${Date.now()}_${crypto.randomUUID().slice(0,9)}`,i=this.buildPayload(t,e,n);try{const t=new Promise((t,e)=>{this.responseResolvers.set(n,{resolve:t,reject:e,chunks:[],isStreaming:!1}),setTimeout(()=>{const i=this.responseResolvers.get(n);i&&(i.chunks.length>0?t(i.chunks.join("")):e(new Error("Response timeout")),this.responseResolvers.delete(n))},this.config.responseTimeout)});if(console.log("[SocketProvider] Sending message:",this.config.events.send,i),this.socket.emit(this.config.events.send,i),this.config.events.stream){const e=this.responseResolvers.get(n);let i=0;const o=setInterval(()=>{e&&e.chunks.length>i&&(i=e.chunks.length)},50);try{const e=yield ee(t);clearInterval(o),yield yield ee(e)}catch(t){throw clearInterval(o),t}}else{const e=yield ee(t);yield yield ee(e)}}catch(t){const e=t instanceof Error?t.message:String(t);yield yield ee(this.formatError("Socket Error",e)),this.onError(t instanceof Error?t:new Error(String(t)))}})}buildPayload(t,e,n){var i,o,r;if(null===(i=this.config)||void 0===i?void 0:i.buildPayload){const i=this.config.buildPayload(t,e);return Object.assign(Object.assign({},i),{messageId:n})}return{messageId:n,message:t,text:t,threadId:null===(o=e.currentThread)||void 0===o?void 0:o.id,modules:e.selectedModules,metadata:e.metadata,files:null===(r=e.uploadedFiles)||void 0===r?void 0:r.map(t=>({id:t.id,name:t.name,type:t.type,url:t.url}))}}emit(t,e){this.socket&&this.connected&&this.socket.emit(t,e)}on(t,e){this.socket&&this.socket.on(t,e)}off(t,e){this.socket&&this.socket.off(t,e)}getSocket(){return this.socket}formatError(t,e){return`[ERROR_START][ERROR_TITLE_START]${t}[ERROR_TITLE_END]${e}[ERROR_END]`}onError(t){console.error("[SocketProvider] Error:",t)}}
2458
+ /**
2459
+ * @license
2460
+ * Copyright 2024 Nuraly, Laabidi Aymen
2461
+ * SPDX-License-Identifier: MIT
2462
+ */var re=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})},se=function(t){return this instanceof se?(this.v=t,this):new se(t)},ae=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),r=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function s(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){r.push([t,e,n,i])>1||a(t,e)})},e&&(i[t]=e(i[t])))}function a(t,e){try{(n=o[t](e)).value instanceof se?Promise.resolve(n.value.v).then(l,c):d(r[0][2],n)}catch(t){d(r[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),r.shift(),r.length&&a(r[0][0],r[0][1])}};class le{constructor(){this.id="workflow-socket",this.name="Workflow Socket Provider",this.capabilities={streaming:!0,fileUpload:!0,modules:!0,functions:!1},this.socket=null,this.config=null,this.connected=!1,this.sessionId=`session_${Date.now()}_${Math.random().toString(36).substring(2,11)}`,this.activeExecutions=new Map}connect(t){return re(this,void 0,void 0,function*(){if(!t.workflowId)throw new Error("Workflow ID is required");return this.config=Object.assign({socketUrl:t.socketUrl||("undefined"!=typeof window?window.location.origin:"http://localhost:8000"),socketPath:t.socketPath||"/socket.io/workflow",triggerEndpoint:t.triggerEndpoint||"/api/v1/workflows/{workflowId}/trigger/chat",responseTimeout:t.responseTimeout||6e4},t),this.socket=h(this.config.socketUrl,{path:this.config.socketPath,transports:["websocket","polling"],autoConnect:!0,reconnection:!0,reconnectionAttempts:5}),new Promise((t,e)=>{const n=setTimeout(()=>{e(new Error("Socket connection timeout"))},1e4);this.socket.on("connect",()=>{clearTimeout(n),this.connected=!0,console.log("[WorkflowSocketProvider] Connected:",this.socket.id),t()}),this.socket.on("connect_error",t=>{clearTimeout(n),console.error("[WorkflowSocketProvider] Connection error:",t),e(t)}),this.socket.on("disconnect",t=>{this.connected=!1,console.log("[WorkflowSocketProvider] Disconnected:",t)}),this.setupEventListeners()})})}subscribeToWorkflow(t){this.socket&&(this.socket.emit("subscribe:workflow",{workflowId:t}),console.log("[WorkflowSocketProvider] Subscribed to workflow:",t))}subscribeToExecution(t){this.socket&&(this.socket.emit("subscribe:execution",{executionId:t}),console.log("[WorkflowSocketProvider] Subscribed to execution:",t))}setupEventListeners(){this.socket&&(this.socket.on("chat:message",t=>{var e,n,i,o;console.log("[WorkflowSocketProvider] Chat message received:",t);const r=t.executionId||(null===(e=t.data)||void 0===e?void 0:e.executionId),s=(null===(n=t.data)||void 0===n?void 0:n.message)||t.message;if(r&&s){let t=this.activeExecutions.get(r);if(!t)return void(null===(o=null===(i=this.config)||void 0===i?void 0:i.onMessage)||void 0===o||o.call(i,s));t.completed||t.messages.push(s)}}),this.socket.on("execution:started",t=>{console.log("[WorkflowSocketProvider] Execution started:",t)}),this.socket.on("execution:completed",t=>{var e,n,i;console.log("[WorkflowSocketProvider] Execution completed:",t);const o=t.executionId||(null===(e=t.data)||void 0===e?void 0:e.executionId);if(o){const e=this.activeExecutions.get(o);if(e&&!e.completed){e.completed=!0;let r="";if(null===(n=this.config)||void 0===n?void 0:n.extractResponse)r=this.config.extractResponse(t);else if(e.messages.length>0)r=e.messages.join("\n\n");else if(null===(i=t.data)||void 0===i?void 0:i.outputData)try{const e="string"==typeof t.data.outputData?JSON.parse(t.data.outputData):t.data.outputData;r=e.response||e.message||e.result||JSON.stringify(e)}catch(e){r=t.data.outputData}e.resolve(r||"Workflow completed"),this.activeExecutions.delete(o)}}}),this.socket.on("execution:failed",t=>{var e,n,i;console.error("[WorkflowSocketProvider] Execution failed:",t);const o=t.executionId||(null===(e=t.data)||void 0===e?void 0:e.executionId),r=(null===(n=t.data)||void 0===n?void 0:n.errorMessage)||(null===(i=t.data)||void 0===i?void 0:i.error)||"Workflow execution failed";if(o){const t=this.activeExecutions.get(o);t&&!t.completed&&(t.completed=!0,t.reject(new Error(r)),this.activeExecutions.delete(o))}}),this.socket.on("execution:node-started",t=>{var e,n;const i=null===(e=t.data)||void 0===e?void 0:e.nodeName;console.log("[WorkflowSocketProvider] Node started:",i),i&&(null===(n=this.onNodeStarted)||void 0===n||n.call(this,i))}),this.socket.on("execution:node-completed",t=>{var e,n;const i=null===(e=t.data)||void 0===e?void 0:e.nodeName;console.log("[WorkflowSocketProvider] Node completed:",i),i&&(null===(n=this.onNodeCompleted)||void 0===n||n.call(this,i))}))}disconnect(){return re(this,void 0,void 0,function*(){var t;this.socket&&((null===(t=this.config)||void 0===t?void 0:t.workflowId)&&this.socket.emit("unsubscribe:workflow",{workflowId:this.config.workflowId}),this.socket.disconnect(),this.socket=null),this.connected=!1,this.activeExecutions.clear(),console.log("[WorkflowSocketProvider] Disconnected")})}isConnected(){var t;return this.connected&&!0===(null===(t=this.socket)||void 0===t?void 0:t.connected)}sendMessage(t,e){return ae(this,arguments,function*(){var n,i;if(!this.connected||!this.socket||!this.config)return yield yield se(this.formatError("Not Connected","Socket is not connected. Please check your connection.")),yield se(void 0);try{const o=this.buildInput(t,e),r=this.config.triggerEndpoint.replace("{workflowId}",this.config.workflowId),s=`${this.config.socketUrl}${r}`;console.log("[WorkflowSocketProvider] Triggering workflow:",s,o);const a=yield se(fetch(s,{method:"POST",headers:Object.assign({"Content-Type":"application/json"},this.config.headers),body:JSON.stringify(o)}));if(!a.ok){const t=yield se(a.text().catch(()=>a.statusText));return yield yield se(this.formatError(`${a.status} ${a.statusText}`,t)),yield se(void 0)}const l=a.headers.get("X-Execution-Id")||(null===(n=yield se(a.json().catch(()=>({}))))||void 0===n?void 0:n.executionId);if(!l)return yield yield se(this.formatError("Execution Error","No execution ID received from server")),yield se(void 0);console.log("[WorkflowSocketProvider] Execution started:",l),(null===(i=this.config)||void 0===i?void 0:i.onExecutionStart)&&this.config.onExecutionStart(l,this.config.workflowId),this.subscribeToExecution(l);const c=new Promise((t,e)=>{this.activeExecutions.set(l,{messages:[],resolve:t,reject:e,completed:!1}),setTimeout(()=>{const n=this.activeExecutions.get(l);n&&!n.completed&&(n.completed=!0,n.messages.length>0?t(n.messages.join("\n\n")):e(new Error("Execution timeout")),this.activeExecutions.delete(l))},this.config.responseTimeout)}),d=this.activeExecutions.get(l);let h=0;const u=setInterval(()=>{d.messages.length>h&&(h=d.messages.length)},100);try{for(;!d.completed;){if(d.messages.length>0){const t=d.messages.join("\n\n");yield yield se(t)}yield se(new Promise(t=>setTimeout(t,200)))}clearInterval(u);const t=yield se(c);yield yield se(t)}catch(t){throw clearInterval(u),t}}catch(t){const e=t instanceof Error?t.message:String(t);yield yield se(this.formatError("Workflow Error",e)),this.onError(t instanceof Error?t:new Error(String(t)))}})}buildInput(t,e){var n,i,o;if(null===(n=this.config)||void 0===n?void 0:n.buildInput)return this.config.buildInput(t,e);console.log("[WorkflowSocketProvider] buildInput context.uploadedFiles:",e.uploadedFiles);const r=(null===(i=e.currentThread)||void 0===i?void 0:i.id)||this.sessionId,s={message:t,threadId:r,modules:e.selectedModules,metadata:e.metadata,files:(null===(o=e.uploadedFiles)||void 0===o?void 0:o.map(t=>{var e;return{id:t.id,name:t.name,type:t.type,mimeType:t.mimeType,url:t.url,base64:null===(e=t.metadata)||void 0===e?void 0:e.base64}}))||[]};return console.log("[WorkflowSocketProvider] buildInput threadId:",r,"files count:",s.files.length),s}setWorkflowId(t){this.config&&(this.socket&&this.config.workflowId&&this.socket.emit("unsubscribe:workflow",{workflowId:this.config.workflowId}),this.config.workflowId=t,this.socket&&this.connected&&this.subscribeToWorkflow(t))}getSocket(){return this.socket}uploadFile(t){return re(this,void 0,void 0,function*(){const e=`file-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,n=URL.createObjectURL(t),i=yield this.fileToBase64(t),o=t.type||"application/octet-stream",r=this.determineFileType(o);return console.log(`[WorkflowSocketProvider] File prepared: ${t.name} (${t.size} bytes)`),{id:e,name:t.name,size:t.size,type:r,mimeType:o,url:n,previewUrl:r===U.Image?n:void 0,uploadProgress:100,metadata:{provider:"workflow-socket",uploadedAt:(new Date).toISOString(),base64:i}}})}fileToBase64(t){return new Promise((e,n)=>{const i=new FileReader;i.onload=()=>{const t=i.result,n=t.split(",")[1]||t;e(n)},i.onerror=n,i.readAsDataURL(t)})}determineFileType(t){return t.startsWith("image/")?U.Image:t.startsWith("video/")?U.Video:t.startsWith("audio/")?U.Audio:t.startsWith("application/pdf")||t.includes("document")||t.startsWith("text/")?U.Document:t.includes("zip")||t.includes("rar")||t.includes("tar")?U.Archive:t.includes("javascript")||t.includes("json")||t.includes("xml")?U.Code:U.Unknown}formatError(t,e){return`[ERROR_START][ERROR_TITLE_START]${t}[ERROR_TITLE_END]${e}[ERROR_END]`}onError(t){console.error("[WorkflowSocketProvider] Error:",t)}}
2463
+ /**
2464
+ * @license
2465
+ * Copyright 2024 Nuraly, Laabidi Aymen
2466
+ * SPDX-License-Identifier: MIT
2467
+ */var ce=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})},de=function(t){return this instanceof de?(this.v=t,this):new de(t)},he=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),r=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function s(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){r.push([t,e,n,i])>1||a(t,e)})},e&&(i[t]=e(i[t])))}function a(t,e){try{(n=o[t](e)).value instanceof de?Promise.resolve(n.value.v).then(l,c):d(r[0][2],n)}catch(t){d(r[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),r.shift(),r.length&&a(r[0][0],r[0][1])}};const ue={send:"message:send",response:"message:response",stream:"message:stream",error:"message:error",typingStart:"typing:start",typingEnd:"typing:end",ping:"ping",pong:"pong",toolCall:"tool:call",toolCallEnd:"tool:end"};class pe{constructor(){this.id="native-websocket",this.name="Native WebSocket Provider",this.capabilities={streaming:!0,fileUpload:!1,modules:!1,functions:!1},this.ws=null,this.config=null,this.connected=!1,this.responseResolvers=new Map,this.reconnectAttempt=0,this.reconnectTimer=null,this.heartbeatTimer=null,this.pongTimer=null,this.intentionalClose=!1,this.messageListeners=new Map}connect(t){return ce(this,void 0,void 0,function*(){var e,n,i,o,r,s,a,l,c,d;if(!t.url)throw new Error("WebSocket URL is required");return this.config=Object.assign(Object.assign({},t),{messageTypes:Object.assign(Object.assign({},ue),t.messageTypes),typeField:null!==(e=t.typeField)&&void 0!==e?e:"type",autoReconnect:null===(n=t.autoReconnect)||void 0===n||n,maxReconnectAttempts:null!==(i=t.maxReconnectAttempts)&&void 0!==i?i:5,reconnectBaseDelay:null!==(o=t.reconnectBaseDelay)&&void 0!==o?o:1e3,reconnectMaxDelay:null!==(r=t.reconnectMaxDelay)&&void 0!==r?r:3e4,connectionTimeout:null!==(s=t.connectionTimeout)&&void 0!==s?s:1e4,responseTimeout:null!==(a=t.responseTimeout)&&void 0!==a?a:3e4,enableHeartbeat:null===(l=t.enableHeartbeat)||void 0===l||l,heartbeatInterval:null!==(c=t.heartbeatInterval)&&void 0!==c?c:3e4,heartbeatTimeout:null!==(d=t.heartbeatTimeout)&&void 0!==d?d:1e4}),this.intentionalClose=!1,this.reconnectAttempt=0,this.createConnection()})}createConnection(){return new Promise((t,e)=>{const n=this.config;if(!n)return void e(new Error("Provider not configured"));const i=this.buildUrl();try{this.ws=n.protocols?new WebSocket(i,n.protocols):new WebSocket(i)}catch(t){return void e(new Error(`Failed to create WebSocket: ${t instanceof Error?t.message:String(t)}`))}const o=setTimeout(()=>{this.ws&&this.ws.readyState!==WebSocket.OPEN&&(this.ws.close(),e(new Error("WebSocket connection timeout")))},n.connectionTimeout);this.ws.onopen=()=>{var e,n;clearTimeout(o),this.connected=!0,this.reconnectAttempt=0,console.log("[NativeWebSocketProvider] Connected"),null===(n=null===(e=this.config)||void 0===e?void 0:e.onConnectionChange)||void 0===n||n.call(e,!0),this.startHeartbeat(),t()},this.ws.onclose=t=>{var n,i;clearTimeout(o);const r=this.connected;this.connected=!1,this.stopHeartbeat(),console.log("[NativeWebSocketProvider] Disconnected:",t.code,t.reason),r&&(null===(i=null===(n=this.config)||void 0===n?void 0:n.onConnectionChange)||void 0===i||i.call(n,!1));for(const[t,e]of this.responseResolvers)e.chunks.length>0?e.resolve(e.chunks.join("")):e.reject(new Error("WebSocket connection closed")),this.responseResolvers.delete(t);!this.intentionalClose&&r?this.attemptReconnect():r||e(new Error(`WebSocket connection failed (code: ${t.code})`))},this.ws.onerror=t=>{console.error("[NativeWebSocketProvider] Error:",t)},this.ws.onmessage=t=>{this.handleMessage(t)}})}buildUrl(){const t=this.config;if(!t)return"";let e=t.url;const n=t.queryParams;if(n&&Object.keys(n).length>0){const t=e.includes("?")?"&":"?";e=`${e}${t}${Object.entries(n).map(([t,e])=>`${encodeURIComponent(t)}=${encodeURIComponent(e)}`).join("&")}`}return e}handleMessage(t){var e,n,i;if(!this.config)return;const o=this.parseMessageData(t.data);if(!o)return;const r=o[null!==(e=this.config.typeField)&&void 0!==e?e:"type"],s=this.config.messageTypes;if(r!==s.pong)if(r!==s.ping){if(r===s.toolCall){const t=o.name||o.toolName||o.function||"unknown";return null===(n=this.onToolCall)||void 0===n||n.call(this,t),void this.dispatchToListeners(r,o)}if(r===s.toolCallEnd)return null===(i=this.onToolCallEnd)||void 0===i||i.call(this),void this.dispatchToListeners(r,o);this.dispatchToListeners(r,o),r!==s.response?r!==s.stream?r===s.error&&this.handleErrorMessage(o):this.handleStreamMessage(o):this.handleResponseMessage(o)}else this.send(s.pong,{timestamp:Date.now()});else this.handlePong()}parseMessageData(t){try{return"string"==typeof t?JSON.parse(t):t}catch(e){return console.warn("[NativeWebSocketProvider] Non-JSON message received:",t),null}}dispatchToListeners(t,e){if(!t)return;const n=this.messageListeners.get(t);if(n)for(const t of n)try{t(e)}catch(t){console.error("[NativeWebSocketProvider] Listener error:",t)}}handleResponseMessage(t){const e=this.extractMessageId(t),n=this.responseResolvers.get(e)||this.getLatestResolver();if(n){const i=this.extractMessageContent(t);n.resolve(i),this.responseResolvers.delete(e)}}handleStreamMessage(t){const e=this.extractMessageId(t),n=this.responseResolvers.get(e)||this.getLatestResolver();if(n){n.isStreaming=!0;const e=this.extractMessageContent(t);n.chunks.push(e)}}handleErrorMessage(t){const e=this.extractMessageId(t),n=this.responseResolvers.get(e)||this.getLatestResolver();if(n){const i=t.error||t.message||"Unknown error";n.reject(new Error(i)),this.responseResolvers.delete(e)}}getLatestResolver(){const t=Array.from(this.responseResolvers.keys()).at(-1);return void 0!==t?this.responseResolvers.get(t):null}extractMessageId(t){return t.messageId||t.id||t.executionId||"default"}extractMessageContent(t){var e,n,i;return(null===(e=this.config)||void 0===e?void 0:e.extractMessage)?this.config.extractMessage(t):"string"==typeof t?t:t.message?t.message:t.text?t.text:t.response?t.response:t.content?t.content:(null===(n=t.data)||void 0===n?void 0:n.message)?t.data.message:(null===(i=t.data)||void 0===i?void 0:i.output)?JSON.stringify(t.data.output):JSON.stringify(t)}startHeartbeat(){var t;if(!(null===(t=this.config)||void 0===t?void 0:t.enableHeartbeat))return;this.stopHeartbeat();const e=this.config.messageTypes;this.heartbeatTimer=setInterval(()=>{var t,n,i;this.connected&&(null===(t=this.ws)||void 0===t?void 0:t.readyState)===WebSocket.OPEN&&(this.send(e.ping,{timestamp:Date.now()}),this.pongTimer=setTimeout(()=>{var t;console.warn("[NativeWebSocketProvider] Heartbeat timeout β€” closing connection"),null===(t=this.ws)||void 0===t||t.close(4e3,"Heartbeat timeout")},null!==(i=null===(n=this.config)||void 0===n?void 0:n.heartbeatTimeout)&&void 0!==i?i:1e4))},this.config.heartbeatInterval)}handlePong(){this.pongTimer&&(clearTimeout(this.pongTimer),this.pongTimer=null)}stopHeartbeat(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null),this.pongTimer&&(clearTimeout(this.pongTimer),this.pongTimer=null)}attemptReconnect(){var t,e,n,i,o,r;if(!(null===(t=this.config)||void 0===t?void 0:t.autoReconnect))return;const s=null!==(e=this.config.maxReconnectAttempts)&&void 0!==e?e:5;if(this.reconnectAttempt>=s)return void console.error("[NativeWebSocketProvider] Max reconnection attempts reached");this.reconnectAttempt++;const a=null!==(n=this.config.reconnectBaseDelay)&&void 0!==n?n:1e3,l=null!==(i=this.config.reconnectMaxDelay)&&void 0!==i?i:3e4,c=Math.min(a*Math.pow(2,this.reconnectAttempt-1)+Math.random()*a,l);console.log(`[NativeWebSocketProvider] Reconnecting in ${Math.round(c)}ms (attempt ${this.reconnectAttempt}/${s})`),null===(r=(o=this.config).onReconnectAttempt)||void 0===r||r.call(o,this.reconnectAttempt,s),this.reconnectTimer=setTimeout(()=>ce(this,void 0,void 0,function*(){try{yield this.createConnection(),console.log("[NativeWebSocketProvider] Reconnected successfully")}catch(t){}}),c)}disconnect(){return ce(this,void 0,void 0,function*(){this.intentionalClose=!0,this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.stopHeartbeat(),this.ws&&(this.ws.close(1e3,"Client disconnect"),this.ws=null),this.connected=!1,this.responseResolvers.clear(),this.messageListeners.clear(),console.log("[NativeWebSocketProvider] Disconnected")})}isConnected(){var t;return this.connected&&(null===(t=this.ws)||void 0===t?void 0:t.readyState)===WebSocket.OPEN}sendMessage(t,e){return he(this,arguments,function*(){if(!this.connected||!this.ws||!this.config)return yield yield de(this.formatError("Not Connected","WebSocket is not connected. Please check your connection.")),yield de(void 0);const n=`msg_${Date.now()}_${crypto.randomUUID().slice(0,9)}`,i=this.buildPayload(t,e,n);try{const t=new Promise((t,e)=>{var i,o;this.responseResolvers.set(n,{resolve:t,reject:e,chunks:[],isStreaming:!1}),setTimeout(()=>{const i=this.responseResolvers.get(n);i&&(i.chunks.length>0?t(i.chunks.join("")):e(new Error("Response timeout")),this.responseResolvers.delete(n))},null!==(o=null===(i=this.config)||void 0===i?void 0:i.responseTimeout)&&void 0!==o?o:3e4)}),e=this.config.messageTypes;if(this.send(e.send,Object.assign(Object.assign({},i),{messageId:n})),this.config.messageTypes.stream){const e=this.responseResolvers.get(n);let i=0;const o=setInterval(()=>{e&&e.chunks.length>i&&(i=e.chunks.length)},50);try{const e=yield de(t);clearInterval(o),yield yield de(e)}catch(t){throw clearInterval(o),t}}else{const e=yield de(t);yield yield de(e)}}catch(t){const e=t instanceof Error?t.message:String(t);yield yield de(this.formatError("WebSocket Error",e)),this.onError(t instanceof Error?t:new Error(String(t)))}})}send(t,e){var n;if(this.ws&&this.ws.readyState===WebSocket.OPEN&&this.config){const i=null!==(n=this.config.typeField)&&void 0!==n?n:"type",o=Object.assign({[i]:t},e);this.ws.send(JSON.stringify(o))}}onMessage(t,e){var n;return this.messageListeners.has(t)||this.messageListeners.set(t,new Set),null===(n=this.messageListeners.get(t))||void 0===n||n.add(e),()=>{const n=this.messageListeners.get(t);n&&(n.delete(e),0===n.size&&this.messageListeners.delete(t))}}getWebSocket(){return this.ws}buildPayload(t,e,n){var i,o,r;if(null===(i=this.config)||void 0===i?void 0:i.buildPayload){const i=this.config.buildPayload(t,e);return Object.assign(Object.assign({},i),{messageId:n})}return{messageId:n,message:t,text:t,threadId:null===(o=e.currentThread)||void 0===o?void 0:o.id,modules:e.selectedModules,metadata:e.metadata,files:null===(r=e.uploadedFiles)||void 0===r?void 0:r.map(t=>({id:t.id,name:t.name,type:t.type,url:t.url}))}}formatError(t,e){return`[ERROR_START][ERROR_TITLE_START]${t}[ERROR_TITLE_END]${e}[ERROR_END]`}onError(t){console.error("[NativeWebSocketProvider] Error:",t)}}
2468
+ /**
2469
+ * @license
2470
+ * Copyright 2023 Nuraly, Laabidi Aymen
2471
+ * SPDX-License-Identifier: MIT
2472
+ */var fe=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class ve{constructor(t,e={}){this.id="persistence",this.name="Persistence Plugin",this.version="1.0.0",this.storage=t,this.storageKey=e.storageKey||"chatbot-state",e.autoSaveInterval&&(this.autoSaveInterval=setInterval(()=>{this.saveState()},e.autoSaveInterval))}onInit(t){this.controller=t,this.loadState(),console.log("[PersistencePlugin] Initialized")}onDestroy(){this.autoSaveInterval&&clearInterval(this.autoSaveInterval),this.saveState(),console.log("[PersistencePlugin] Destroyed")}onStateChange(){this.saveState()}saveState(){return fe(this,void 0,void 0,function*(){if(this.controller)try{const t=this.controller.getState();yield this.storage.save(this.storageKey,t),console.log("[PersistencePlugin] State saved")}catch(t){console.error("[PersistencePlugin] Error saving state:",t)}})}loadState(){return fe(this,void 0,void 0,function*(){if(this.controller)try{const t=yield this.storage.load(this.storageKey);t&&(this.controller.setState(t),console.log("[PersistencePlugin] State loaded"))}catch(t){console.error("[PersistencePlugin] Error loading state:",t)}})}clearStorage(){return fe(this,void 0,void 0,function*(){try{yield this.storage.remove(this.storageKey),console.log("[PersistencePlugin] Storage cleared")}catch(t){console.error("[PersistencePlugin] Error clearing storage:",t)}})}}
2473
+ /**
2474
+ * @license
2475
+ * Copyright 2023 Nuraly, Laabidi Aymen
2476
+ * SPDX-License-Identifier: MIT
2477
+ */class ge{constructor(t){this.id="analytics",this.name="Analytics Plugin",this.version="1.0.0",this.trackEvent=t}onInit(){this.trackEvent("chatbot:initialized",{timestamp:(new Date).toISOString()}),console.log("[AnalyticsPlugin] Initialized")}onDestroy(){this.trackEvent("chatbot:destroyed",{timestamp:(new Date).toISOString()}),console.log("[AnalyticsPlugin] Destroyed")}onMessageSent(t){this.trackEvent("chatbot:message:sent",{messageId:t.id,messageLength:t.text.length,hasFiles:!!t.files&&t.files.length>0,timestamp:t.timestamp})}onMessageReceived(t){this.trackEvent("chatbot:message:received",{messageId:t.id,messageLength:t.text.length,sender:t.sender,timestamp:t.timestamp})}onError(t){this.trackEvent("chatbot:error",{error:t.message,stack:t.stack,timestamp:(new Date).toISOString()})}}
2478
+ /**
2479
+ * @license
2480
+ * Copyright 2023 Nuraly, Laabidi Aymen
2481
+ * SPDX-License-Identifier: MIT
2482
+ */class me{constructor(){this._stylesInjected=!1}getOncePerConversationStyleTag(t,e="nr-chatbot"){var n;const i=`data-plugin-styles-${this.id}`;let o=!1;try{const t=document.querySelector(e);o=!!(null===(n=null==t?void 0:t.shadowRoot)||void 0===n?void 0:n.querySelector(`style[${i}]`))}catch(t){}return this._stylesInjected||o?"":(this._stylesInjected=!0,`<style ${i}="true">${t}</style>`)}onStateChange(t){try{const e=null==t?void 0:t.currentThreadId;e!==this._lastThreadId&&(this._lastThreadId=e,this._stylesInjected=!1)}catch(t){}}}
2483
+ /**
2484
+ * @license
2485
+ * Copyright 2023 Nuraly, Laabidi Aymen
2486
+ * SPDX-License-Identifier: MIT
2487
+ */var be=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class ye extends me{constructor(){super(...arguments),this.id="markdown",this.name="Markdown Plugin",this.version="2.0.0",this.htmlTags=[{name:"md",open:"[MD]",close:"[/MD]"}]}onInit(){console.log("[MarkdownPlugin] Initialized")}renderHtmlBlock(t,e){if("md"!==t)return"";const n=this.getStyles();return`${this.getOncePerConversationStyleTag(n)}${nt(e)}`}afterReceive(t){return be(this,void 0,void 0,function*(){return t.includes("[MD]")&&t.includes("[/MD]")?t:nt(t)})}getStyles(){return"\n .md-code { background: #f6f8fa; padding: 12px; border-radius: 6px; overflow: auto; }\n .md-inline-code { background: rgba(27,31,35,.05); padding: 0 4px; border-radius: 4px; }\n h1, h2, h3 { margin: 0.6em 0 0.4em; font-weight: 600; }\n p { margin: 0.5em 0; }\n ul { margin: 0.5em 0 0.5em 1.2em; }\n a { color: var(--nuraly-color-primary, #0b5fff); text-decoration: underline; }\n @media (prefers-color-scheme: dark) {\n .md-code { background: #0f1115; color: #eaeef2; }\n .md-inline-code { background: rgba(255,255,255,.08); }\n }\n "}}
2488
+ /**
2489
+ * @license
2490
+ * Copyright 2023 Nuraly, Laabidi Aymen
2491
+ * SPDX-License-Identifier: MIT
2492
+ */var xe=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class we extends me{constructor(){super(...arguments),this.id="flight-card",this.name="Flight Card Plugin",this.version="1.0.0",this.htmlTags=[{name:"flight",open:"[FLIGHT]",close:"[/FLIGHT]"}],this.cssPrefix="nr-flight-card"}renderHtmlBlockPlaceholder(t){if("flight"!==t.toLowerCase())return"";return`<div data-placeholder-id="${`flight-skeleton-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}"><nr-skeleton \n active \n style="min-width: 400px; max-width: 600px; margin: 16px 0;"\n ></nr-skeleton></div>`}onInit(){console.log("[FlightCardPlugin] Initialized")}afterReceive(t){return xe(this,void 0,void 0,function*(){try{const e=JSON.parse(t);if("flight"===e.type||this.isFlightData(e))return this.renderFlightCard(e)}catch(t){}const e=/\[FLIGHT\]([\s\S]*?)\[\/FLIGHT\]/g;let n,i=t;for(;null!==(n=e.exec(t));)try{const t=JSON.parse(n[1]),e=this.renderFlightCard(t);i=i.replace(n[0],e)}catch(t){console.warn("[FlightCardPlugin] Failed to parse flight data:",t)}return i})}renderHtmlBlock(t,e){if("flight"!==t.toLowerCase())return"";try{const t=JSON.parse(e);return this.renderFlightCard(t)}catch(t){return console.warn("[FlightCardPlugin] renderHtmlBlock parse error:",t),""}}isFlightData(t){return t&&"object"==typeof t&&t.origin&&t.destination&&t.departureTime}renderFlightCard(t){const{origin:e,destination:n,departureTime:i,arrivalTime:o,departureDate:r,arrivalDate:s,terminal:a,gate:l,arrivalTerminal:c,arrivalGate:d,duration:h,flightNumber:u,airline:p,status:f,updated:v,source:g}=t;return`\n ${this.getOncePerConversationStyleTag(this.getStyles())}\n <div class="${this.cssPrefix}" data-nr-flight-card="true">\n <div class="${this.cssPrefix}__header">\n <div class="${this.cssPrefix}__route">\n <span class="${this.cssPrefix}__airport-code">${this.escapeHtml(e)}</span>\n <div class="${this.cssPrefix}__flight-line">\n <svg class="${this.cssPrefix}__plane-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path d="M21 16v-2l-8-5V3.5c0-.83-.67-1.5-1.5-1.5S10 2.67 10 3.5V9l-8 5v2l8-2.5V19l-2 1.5V22l3.5-1 3.5 1v-1.5L13 19v-5.5l8 2.5z" fill="currentColor"/>\n </svg>\n ${h?`<span class="${this.cssPrefix}__duration">${this.escapeHtml(h)}</span>`:""}\n </div>\n <span class="${this.cssPrefix}__airport-code">${this.escapeHtml(n)}</span>\n </div>\n ${u||p?`\n <div class="${this.cssPrefix}__flight-info">\n ${p?`<span class="${this.cssPrefix}__airline">${this.escapeHtml(p)}</span>`:""}\n ${u?`<span class="${this.cssPrefix}__flight-number">${this.escapeHtml(u)}</span>`:""}\n </div>\n `:""}\n </div>\n\n <div class="${this.cssPrefix}__details">\n <div class="${this.cssPrefix}__section ${this.cssPrefix}__section--departure">\n <div class="${this.cssPrefix}__label">Infos sur l'aΓ©roport</div>\n <div class="${this.cssPrefix}__location">\n <span class="${this.cssPrefix}__city">${this.getCityName(e)}</span>\n <span class="${this.cssPrefix}__date">${r?this.escapeHtml(r):""}</span>\n </div>\n <div class="${this.cssPrefix}__time-group">\n <div class="${this.cssPrefix}__time-label">Heure de dΓ©part prΓ©vue</div>\n <div class="${this.cssPrefix}__time-value">${this.escapeHtml(i)}</div>\n </div>\n <div class="${this.cssPrefix}__terminal-gate">\n ${a?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Terminal</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(a)}</span>\n </div>\n `:""}\n ${l?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(l)}</span>\n </div>\n `:void 0===l?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">-</span>\n </div>\n `:""}\n </div>\n </div>\n\n <div class="${this.cssPrefix}__divider"></div>\n\n <div class="${this.cssPrefix}__section ${this.cssPrefix}__section--arrival">\n <div class="${this.cssPrefix}__label">Infos sur l'aΓ©roport</div>\n <div class="${this.cssPrefix}__location">\n <span class="${this.cssPrefix}__city">${this.getCityName(n)}</span>\n <span class="${this.cssPrefix}__date">${s?this.escapeHtml(s):""}</span>\n </div>\n <div class="${this.cssPrefix}__time-group">\n <div class="${this.cssPrefix}__time-label">Heure d'arrivΓ©e prΓ©vue</div>\n <div class="${this.cssPrefix}__time-value">${this.escapeHtml(o)}</div>\n </div>\n <div class="${this.cssPrefix}__terminal-gate">\n ${c?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Terminal</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(c)}</span>\n </div>\n `:""}\n ${d?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(d)}</span>\n </div>\n `:void 0===d?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">-</span>\n </div>\n `:""}\n </div>\n </div>\n </div>\n\n ${v||g||f?`\n <div class="${this.cssPrefix}__footer">\n ${v?`<span class="${this.cssPrefix}__updated">${this.escapeHtml(v)}</span>`:""}\n ${g?`<span class="${this.cssPrefix}__source">Source : ${this.escapeHtml(g)}</span>`:""}\n ${f?`<span class="${this.cssPrefix}__status">${this.escapeHtml(f)}</span>`:""}\n </div>\n `:""}\n </div>\n `}getCityName(t){return{JED:"Djeddah",TUN:"Tunis",CDG:"Paris",LHR:"London",JFK:"New York",DXB:"Dubai",LAX:"Los Angeles",ORD:"Chicago",ATL:"Atlanta",DFW:"Dallas",DEN:"Denver",SFO:"San Francisco",SEA:"Seattle",LAS:"Las Vegas",MCO:"Orlando",MIA:"Miami",IAH:"Houston",PHX:"Phoenix",BOS:"Boston",MSP:"Minneapolis",DTW:"Detroit",FLL:"Fort Lauderdale",PHL:"Philadelphia",LGA:"New York",BWI:"Baltimore",SLC:"Salt Lake City",SAN:"San Diego",DCA:"Washington",TPA:"Tampa",PDX:"Portland",STL:"St. Louis"}[t.toUpperCase()]||t}escapeHtml(t){const e=document.createElement("div");return e.textContent=t,e.innerHTML}getStyles(){return`\n .${this.cssPrefix} {\n background: #ffffff;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n padding: 24px;\n margin: 16px 0;\n font-family: system-ui, -apple-system, sans-serif;\n max-width: 600px;\n }\n\n .${this.cssPrefix}__header {\n margin-bottom: 24px;\n }\n\n .${this.cssPrefix}__route {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 8px;\n }\n\n .${this.cssPrefix}__airport-code {\n font-size: 32px;\n font-weight: 700;\n color: #1a1a1a;\n letter-spacing: 0.5px;\n }\n\n .${this.cssPrefix}__flight-line {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n padding: 0 16px;\n }\n\n .${this.cssPrefix}__flight-line::before {\n content: '';\n position: absolute;\n top: 50%;\n left: 0;\n right: 0;\n height: 2px;\n background: linear-gradient(to right, #e0e0e0 0%, #e0e0e0 100%);\n z-index: 0;\n }\n\n .${this.cssPrefix}__plane-icon {\n width: 24px;\n height: 24px;\n color: #666;\n background: white;\n padding: 4px;\n position: relative;\n z-index: 1;\n transform: rotate(90deg);\n }\n\n .${this.cssPrefix}__duration {\n position: absolute;\n top: -24px;\n background: white;\n padding: 2px 8px;\n font-size: 13px;\n color: #666;\n white-space: nowrap;\n }\n\n .${this.cssPrefix}__flight-info {\n display: flex;\n gap: 8px;\n align-items: center;\n font-size: 14px;\n color: #666;\n }\n\n .${this.cssPrefix}__airline {\n font-weight: 500;\n }\n\n .${this.cssPrefix}__flight-number {\n color: #999;\n }\n\n .${this.cssPrefix}__details {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n gap: 24px;\n }\n\n .${this.cssPrefix}__divider {\n width: 1px;\n background: #e0e0e0;\n }\n\n .${this.cssPrefix}__section {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .${this.cssPrefix}__label {\n font-size: 12px;\n color: #999;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n font-weight: 500;\n text-decoration: underline;\n }\n\n .${this.cssPrefix}__location {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .${this.cssPrefix}__city {\n font-size: 16px;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .${this.cssPrefix}__date {\n font-size: 13px;\n color: #666;\n }\n\n .${this.cssPrefix}__time-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .${this.cssPrefix}__time-label {\n font-size: 12px;\n color: #666;\n }\n\n .${this.cssPrefix}__time-value {\n font-size: 24px;\n font-weight: 700;\n color: #2d6a3e;\n }\n\n .${this.cssPrefix}__terminal-gate {\n display: flex;\n gap: 16px;\n }\n\n .${this.cssPrefix}__info-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .${this.cssPrefix}__info-label {\n font-size: 11px;\n color: #999;\n }\n\n .${this.cssPrefix}__info-value {\n font-size: 18px;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .${this.cssPrefix}__footer {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid #e0e0e0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 12px;\n color: #666;\n gap: 12px;\n }\n\n .${this.cssPrefix}__updated {\n color: #999;\n }\n\n .${this.cssPrefix}__source {\n color: #666;\n }\n\n .${this.cssPrefix}__source::before {\n content: '';\n display: inline-block;\n width: 4px;\n height: 4px;\n background: #666;\n border-radius: 50%;\n margin-right: 8px;\n vertical-align: middle;\n }\n\n .${this.cssPrefix}__status {\n padding: 4px 8px;\n background: #e8f5e9;\n color: #2d6a3e;\n border-radius: 4px;\n font-weight: 500;\n }\n\n /* Share button styling */\n .${this.cssPrefix}__footer button {\n background: none;\n border: none;\n color: #666;\n cursor: pointer;\n padding: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .${this.cssPrefix}__footer button:hover {\n color: #1a1a1a;\n }\n\n /* Dark mode support */\n @media (prefers-color-scheme: dark) {\n .${this.cssPrefix} {\n background: #2a2a2a;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n }\n\n .${this.cssPrefix}__airport-code,\n .${this.cssPrefix}__city,\n .${this.cssPrefix}__info-value {\n color: #ffffff;\n }\n\n .${this.cssPrefix}__flight-line::before {\n background: linear-gradient(to right, #444 0%, #444 100%);\n }\n\n .${this.cssPrefix}__plane-icon {\n background: #2a2a2a;\n color: #999;\n }\n\n .${this.cssPrefix}__duration {\n background: #2a2a2a;\n }\n\n .${this.cssPrefix}__divider {\n background: #444;\n }\n\n .${this.cssPrefix}__footer {\n border-top-color: #444;\n }\n }\n\n /* Responsive design */\n @media (max-width: 640px) {\n .${this.cssPrefix} {\n padding: 16px;\n }\n\n .${this.cssPrefix}__details {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .${this.cssPrefix}__divider {\n height: 1px;\n width: 100%;\n }\n\n .${this.cssPrefix}__airport-code {\n font-size: 24px;\n }\n\n .${this.cssPrefix}__time-value {\n font-size: 20px;\n }\n\n .${this.cssPrefix}__footer {\n flex-direction: column;\n align-items: flex-start;\n }\n }\n `}}
2493
+ /**
2494
+ * @license
2495
+ * Copyright 2023 Nuraly, Laabidi Aymen
2496
+ * SPDX-License-Identifier: MIT
2497
+ */class _e extends me{constructor(){super(...arguments),this.id="print-job-card",this.name="Print Job Card Plugin",this.version="1.0.0",this.htmlTags=[{name:"printjob",open:"[PRINTJOB]",close:"[/PRINTJOB]"}],this.cssPrefix="nr-print-job-card"}renderHtmlBlockPlaceholder(t){if("printjob"!==t.toLowerCase())return"";return`<div data-placeholder-id="${`printjob-skeleton-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}"><nr-skeleton \n active \n avatar\n paragraph='{"rows":3}'\n style="min-width: 350px; max-width: 500px; margin: 8px 0;"\n ></nr-skeleton></div>`}onInit(){console.log("[PrintJobCardPlugin] Initialized")}renderHtmlBlock(t,e){if("printjob"!==t.toLowerCase())return"";try{const t=JSON.parse(e);return this.renderPrintJobCard(t)}catch(t){return console.warn("[PrintJobCardPlugin] renderHtmlBlock parse error:",t),""}}renderPrintJobCard(t){const e=this.getStatusIcon(t.status),n=t.pagesPrinted&&t.totalPages?Math.round(t.pagesPrinted/t.totalPages*100):0;return`\n ${this.getOncePerConversationStyleTag(this.getStyles())}\n <div class="${this.cssPrefix}" data-nr-print-job-card="true">\n <div class="${this.cssPrefix}__header">\n <div class="${this.cssPrefix}__printer-icon">\n πŸ–¨οΈ\n </div>\n <div class="${this.cssPrefix}__header-content">\n <div class="${this.cssPrefix}__title">${this.escapeHtml(t.documentName)}</div>\n <div class="${this.cssPrefix}__subtitle">${this.escapeHtml(t.printerName)}</div>\n </div>\n <div class="${this.cssPrefix}__job-id">#${this.escapeHtml(t.jobId)}</div>\n </div>\n\n <div class="${this.cssPrefix}__status-row">\n <span class="${this.cssPrefix}__status-badge ${this.cssPrefix}__status-badge--${t.status}">\n ${e} ${this.formatStatus(t.status)}\n </span>\n ${t.priority&&"normal"!==t.priority?`\n <span class="${this.cssPrefix}__priority-badge ${this.cssPrefix}__priority-badge--${t.priority}">\n ${"high"===t.priority?"⚑":"πŸ”½"} ${this.capitalize(t.priority)} Priority\n </span>\n `:""}\n </div>\n\n ${"printing"===t.status&&t.pagesPrinted&&t.totalPages?`\n <div class="${this.cssPrefix}__progress">\n <div class="${this.cssPrefix}__progress-bar">\n <div class="${this.cssPrefix}__progress-fill" style="width: ${n}%"></div>\n </div>\n <div class="${this.cssPrefix}__progress-text">\n ${t.pagesPrinted} / ${t.totalPages} pages (${n}%)\n </div>\n </div>\n `:""}\n\n ${"error"===t.status&&t.errorMessage?`\n <div class="${this.cssPrefix}__error-message">\n ⚠️ ${this.escapeHtml(t.errorMessage)}\n </div>\n `:""}\n\n <div class="${this.cssPrefix}__details">\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Pages:</span>\n <span class="${this.cssPrefix}__detail-value">${t.totalPages}</span>\n </div>\n ${t.copies&&t.copies>1?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Copies:</span>\n <span class="${this.cssPrefix}__detail-value">${t.copies}</span>\n </div>\n `:""}\n ${t.colorMode?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Color Mode:</span>\n <span class="${this.cssPrefix}__detail-value">${this.capitalize(t.colorMode)}</span>\n </div>\n `:""}\n ${t.paperSize?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Paper Size:</span>\n <span class="${this.cssPrefix}__detail-value">${t.paperSize}</span>\n </div>\n `:""}\n ${t.userName?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">User:</span>\n <span class="${this.cssPrefix}__detail-value">${this.escapeHtml(t.userName)}</span>\n </div>\n `:""}\n ${t.estimatedTime&&"printing"===t.status?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Est. Time:</span>\n <span class="${this.cssPrefix}__detail-value">${t.estimatedTime}</span>\n </div>\n `:""}\n </div>\n\n <div class="${this.cssPrefix}__footer">\n <span class="${this.cssPrefix}__timestamp">\n πŸ“… Submitted: ${this.formatTimestamp(t.submittedAt)}\n </span>\n ${t.completedAt?`\n <span class="${this.cssPrefix}__timestamp">\n βœ… Completed: ${this.formatTimestamp(t.completedAt)}\n </span>\n `:""}\n </div>\n </div>\n `}getStatusColor(t){return{queued:"#ffa726",printing:"#42a5f5",completed:"#66bb6a",paused:"#ffb74d",error:"#ef5350",cancelled:"#78909c"}[t]||"#999"}getStatusIcon(t){return{queued:"⏳",printing:"πŸ”„",completed:"βœ…",paused:"⏸️",error:"❌",cancelled:"🚫"}[t]||"πŸ“„"}formatStatus(t){return t.charAt(0).toUpperCase()+t.slice(1)}capitalize(t){return t.charAt(0).toUpperCase()+t.slice(1)}formatTimestamp(t){try{return new Date(t).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch(e){return t}}escapeHtml(t){const e=document.createElement("div");return e.textContent=t,e.innerHTML}getStyles(){return`\n .${this.cssPrefix} {\n background: #ffffff;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n padding: 20px;\n margin: 12px 0;\n font-family: system-ui, -apple-system, sans-serif;\n max-width: 500px;\n border-left: 4px solid #42a5f5;\n }\n\n .${this.cssPrefix}__header {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n margin-bottom: 16px;\n }\n\n .${this.cssPrefix}__printer-icon {\n font-size: 32px;\n line-height: 1;\n flex-shrink: 0;\n }\n\n .${this.cssPrefix}__header-content {\n flex: 1;\n min-width: 0;\n }\n\n .${this.cssPrefix}__title {\n font-size: 16px;\n font-weight: 600;\n color: #1a1a1a;\n margin-bottom: 4px;\n word-break: break-word;\n }\n\n .${this.cssPrefix}__subtitle {\n font-size: 13px;\n color: #666;\n }\n\n .${this.cssPrefix}__job-id {\n font-size: 12px;\n color: #999;\n font-family: 'Monaco', 'Courier New', monospace;\n background: #f5f5f5;\n padding: 4px 8px;\n border-radius: 4px;\n flex-shrink: 0;\n }\n\n .${this.cssPrefix}__status-row {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n margin-bottom: 16px;\n }\n\n .${this.cssPrefix}__status-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n }\n\n .${this.cssPrefix}__status-badge--queued {\n background: #fff3e0;\n color: #e65100;\n }\n\n .${this.cssPrefix}__status-badge--printing {\n background: #e3f2fd;\n color: #0d47a1;\n }\n\n .${this.cssPrefix}__status-badge--completed {\n background: #e8f5e9;\n color: #1b5e20;\n }\n\n .${this.cssPrefix}__status-badge--paused {\n background: #fff3e0;\n color: #e65100;\n }\n\n .${this.cssPrefix}__status-badge--error {\n background: #ffebee;\n color: #b71c1c;\n }\n\n .${this.cssPrefix}__status-badge--cancelled {\n background: #f5f5f5;\n color: #616161;\n }\n\n .${this.cssPrefix}__priority-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n }\n\n .${this.cssPrefix}__priority-badge--high {\n background: #fff3e0;\n color: #e65100;\n }\n\n .${this.cssPrefix}__priority-badge--low {\n background: #f5f5f5;\n color: #666;\n }\n\n .${this.cssPrefix}__progress {\n margin-bottom: 16px;\n }\n\n .${this.cssPrefix}__progress-bar {\n width: 100%;\n height: 8px;\n background: #e0e0e0;\n border-radius: 4px;\n overflow: hidden;\n margin-bottom: 8px;\n }\n\n .${this.cssPrefix}__progress-fill {\n height: 100%;\n background: linear-gradient(90deg, #42a5f5 0%, #1976d2 100%);\n transition: width 0.3s ease;\n border-radius: 4px;\n }\n\n .${this.cssPrefix}__progress-text {\n font-size: 13px;\n color: #666;\n text-align: center;\n }\n\n .${this.cssPrefix}__error-message {\n background: #ffebee;\n border-left: 3px solid #ef5350;\n padding: 12px;\n margin-bottom: 16px;\n border-radius: 4px;\n font-size: 13px;\n color: #b71c1c;\n }\n\n .${this.cssPrefix}__details {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n margin-bottom: 16px;\n padding: 16px;\n background: #f9f9f9;\n border-radius: 8px;\n }\n\n .${this.cssPrefix}__detail-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n }\n\n .${this.cssPrefix}__detail-label {\n font-size: 12px;\n color: #666;\n }\n\n .${this.cssPrefix}__detail-value {\n font-size: 13px;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .${this.cssPrefix}__footer {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding-top: 12px;\n border-top: 1px solid #e0e0e0;\n }\n\n .${this.cssPrefix}__timestamp {\n font-size: 11px;\n color: #999;\n }\n\n /* Dark mode support */\n @media (prefers-color-scheme: dark) {\n .${this.cssPrefix} {\n background: #2a2a2a;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n border-left-color: #42a5f5;\n }\n\n .${this.cssPrefix}__title,\n .${this.cssPrefix}__detail-value {\n color: #ffffff;\n }\n\n .${this.cssPrefix}__subtitle,\n .${this.cssPrefix}__detail-label {\n color: #b0b0b0;\n }\n\n .${this.cssPrefix}__job-id {\n background: #3a3a3a;\n color: #b0b0b0;\n }\n\n .${this.cssPrefix}__details {\n background: #333;\n }\n\n .${this.cssPrefix}__progress-bar {\n background: #444;\n }\n\n .${this.cssPrefix}__footer {\n border-top-color: #444;\n }\n }\n\n /* Responsive design */\n @media (max-width: 480px) {\n .${this.cssPrefix} {\n padding: 16px;\n }\n\n .${this.cssPrefix}__details {\n grid-template-columns: 1fr;\n }\n\n .${this.cssPrefix}__header {\n flex-wrap: wrap;\n }\n\n .${this.cssPrefix}__job-id {\n order: -1;\n width: 100%;\n }\n }\n `}}
2498
+ /**
2499
+ * @license
2500
+ * Copyright 2023 Nuraly, Laabidi Aymen
2501
+ * SPDX-License-Identifier: MIT
2502
+ */var $e=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class ke extends me{constructor(){super(...arguments),this.id="artifact",this.name="Artifact Plugin",this.version="1.0.0",this.artifacts=new Map}onInit(t){this.controller=t,t&&"function"==typeof t.on&&t.on("processing:end",()=>{var e,n;try{const i=[...(null===(e=t.getMessages)||void 0===e?void 0:e.call(t))||[]].reverse().find(t=>t.sender===D.Bot);i&&!(null===(n=i.metadata)||void 0===n?void 0:n.hasArtifacts)&&this.processMessage(i)}catch(t){}})}onMessageReceived(t){return $e(this,void 0,void 0,function*(){t.sender===D.Bot&&this.processMessage(t)})}processMessage(t){var e;if(null===(e=t.metadata)||void 0===e?void 0:e.hasArtifacts)return void this.rebuildArtifactsFromMetadata(t);const n=t.text;if(!n)return;const i=/```(\w*)\n([\s\S]*?)```/g;let o;const r=[];let s=0;for(;null!==(o=i.exec(n));){const e=(o[1]||"text").toLowerCase(),n=o[2],i=`artifact-${t.id}-${s}`,a={id:i,language:e,content:n,title:this.extractTitle(n,e,s),messageId:t.id,index:s};r.push(a),this.artifacts.set(i,a),s++}if(0===r.length)return;let a=n,l=0;a=a.replaceAll(i,()=>`\0ARTIFACT_CARD_${r[l++].id}\0`),a=nt(a);for(const t of r)a=a.replace(`\0ARTIFACT_CARD_${t.id}\0`,this.renderPlaceholderCard(t));const c=this.getOncePerConversationStyleTag(this.getStyles());this.controller&&"function"==typeof this.controller.updateMessage&&this.controller.updateMessage(t.id,{text:c+a,metadata:Object.assign(Object.assign({},t.metadata),{renderAsHtml:!0,hasArtifacts:!0,artifactIds:r.map(t=>t.id),artifactOriginalText:n})})}rebuildArtifactsFromMetadata(t){var e,n;const i=null===(e=t.metadata)||void 0===e?void 0:e.artifactIds;if(!(null==i?void 0:i.length))return;if(i.every(t=>this.artifacts.has(t)))return;const o=null===(n=t.metadata)||void 0===n?void 0:n.artifactOriginalText;if(!o)return;const r=/```(\w*)\n([\s\S]*?)```/g;let s,a=0;for(;null!==(s=r.exec(o));){const e=(s[1]||"text").toLowerCase(),n=s[2],i=`artifact-${t.id}-${a}`,o=this.extractTitle(n,e,a);this.artifacts.set(i,{id:i,language:e,content:n,title:o,messageId:t.id,index:a}),a++}}getArtifact(t){return this.artifacts.get(t)}getAllArtifacts(){return Array.from(this.artifacts.values())}getArtifactsForMessage(t){return Array.from(this.artifacts.values()).filter(e=>e.messageId===t)}extractTitle(t,e,n){const i=t.trimStart().split("\n")[0]||"",o=[/^\/\/\s*(.+)/,/^#\s*(.+)/,/^--\s*(.+)/,/^\/\*\s*(.*?)\*\//,/^<!--\s*(.*?)-->/];for(const t of o){const e=t.exec(i);if(null==e?void 0:e[1]){const t=e[1].trim();if(t.length>0&&t.length<=60)return t}}return`${et(e)} Snippet ${n+1}`}renderPlaceholderCard(t){const e=et(t.language),n=Z(t.title);return`<div class="nr-artifact-card" data-artifact-id="${t.id}" role="button" tabindex="0" aria-label="View ${n}">\n <nr-icon name="code" size="small" class="nr-artifact-card__icon"></nr-icon>\n <span class="nr-artifact-card__info">\n <span class="nr-artifact-card__title">${n}</span>\n <nr-tag size="small" class="nr-artifact-card__lang">${e}</nr-tag>\n </span>\n <nr-icon name="chevron-right" size="small" class="nr-artifact-card__chevron"></nr-icon>\n</div>`}getStyles(){return"\n .nr-artifact-card {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n margin: 8px 0;\n background: var(--nuraly-color-chatbot-artifact-card-bg, #f6f8fa);\n border: 1px solid var(--nuraly-color-chatbot-artifact-card-border, #d0d7de);\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s ease, border-color 0.15s ease;\n user-select: none;\n max-width: 100%;\n }\n .nr-artifact-card:hover {\n background: var(--nuraly-color-chatbot-artifact-card-bg-hover, #eaeef2);\n border-color: var(--nuraly-color-chatbot-artifact-card-border-hover, #8b949e);\n }\n .nr-artifact-card:focus-visible {\n outline: 2px solid var(--nuraly-color-primary, #0b5fff);\n outline-offset: 2px;\n }\n .nr-artifact-card__icon {\n flex-shrink: 0;\n color: var(--nuraly-color-chatbot-artifact-icon-text, #57606a);\n }\n .nr-artifact-card__info {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1;\n }\n .nr-artifact-card__title {\n font-size: 13px;\n font-weight: 500;\n color: var(--nuraly-color-chatbot-text-primary, #1f2937);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 1.3;\n }\n .nr-artifact-card__lang {\n align-self: flex-start;\n }\n .nr-artifact-card__chevron {\n flex-shrink: 0;\n color: var(--nuraly-color-chatbot-text-secondary, #6c757d);\n }\n @media (prefers-color-scheme: dark) {\n .nr-artifact-card {\n background: var(--nuraly-color-chatbot-artifact-card-bg, #161b22);\n border-color: var(--nuraly-color-chatbot-artifact-card-border, #30363d);\n }\n .nr-artifact-card:hover {\n background: var(--nuraly-color-chatbot-artifact-card-bg-hover, #1c2128);\n border-color: var(--nuraly-color-chatbot-artifact-card-border-hover, #484f58);\n }\n .nr-artifact-card__icon {\n color: var(--nuraly-color-chatbot-artifact-icon-text, #c9d1d9);\n }\n .nr-artifact-card__title {\n color: var(--nuraly-color-chatbot-text-primary, #c9d1d9);\n }\n .nr-artifact-card__chevron {\n color: var(--nuraly-color-chatbot-text-secondary, #8b949e);\n }\n }\n "}}
2503
+ /**
2504
+ * @license
2505
+ * Copyright 2023 Nuraly, Laabidi Aymen
2506
+ * SPDX-License-Identifier: MIT
2507
+ */class Se extends me{constructor(){super(...arguments),this.id="json-graph-renderer",this.name="JSON Graph Renderer",this.version="1.0.0"}renderArtifactContent(t){if("json"!==t.language)return"";let e;try{e=JSON.parse(t.content)}catch(t){return""}if(null===e||"object"!=typeof e)return"";const n=Array.isArray(e)?e.map((t,e)=>this.renderNode(String(e),t)):Object.entries(e).map(([t,e])=>this.renderNode(t,e));return`\n <div style="padding:20px;font-family:system-ui,-apple-system,sans-serif;overflow:auto;">\n <div style="\n display:flex;align-items:center;gap:8px;\n margin-bottom:16px;padding-bottom:12px;\n border-bottom:1px solid #e2e8f0;\n ">\n <span style="\n display:inline-flex;align-items:center;justify-content:center;\n width:28px;height:28px;border-radius:6px;\n background:linear-gradient(135deg,#0ea5e9,#8b5cf6);\n color:#fff;font-size:14px;font-weight:700;\n ">{}</span>\n <span style="font-size:15px;font-weight:600;color:#1e293b;">\n JSON Graph View\n </span>\n <span style="\n margin-left:auto;font-size:12px;padding:2px 8px;border-radius:10px;\n background:#f1f5f9;color:#64748b;\n ">${Array.isArray(e)?e.length:Object.keys(e).length} root keys</span>\n </div>\n ${n.join("")}\n </div>\n `}renderNode(t,e,n=0){const i=null!==e&&"object"==typeof e&&!Array.isArray(e),o=Array.isArray(e),r=24*n;if(!i&&!o)return`\n <div style="display:flex;align-items:center;gap:8px;margin-left:${r}px;margin-bottom:6px;">\n <span style="\n display:inline-block;width:8px;height:8px;border-radius:50%;\n background:${this.typeColor(e)};flex-shrink:0;\n "></span>\n <span style="font-weight:600;font-size:13px;color:#334155;">\n ${Z(t)}\n </span>\n <span style="\n font-size:13px;padding:2px 8px;border-radius:4px;\n background:${this.typeBg(e)};color:${this.typeColor(e)};\n border:1px solid ${this.typeColor(e)}20;\n ">${Z(this.formatValue(e))}</span>\n </div>\n `;const s=o?e.map((t,e)=>[String(e),t]):Object.entries(e),a=o?`[ ${s.length} ]`:`{ ${s.length} }`,l=o?"#8b5cf6":"#0ea5e9";return`\n <div style="margin-left:${r}px;margin-bottom:4px;">\n <div style="display:flex;align-items:center;gap:8px;margin-bottom:4px;">\n <span style="\n display:inline-flex;align-items:center;justify-content:center;\n width:20px;height:20px;border-radius:4px;\n background:${l}15;color:${l};font-size:11px;font-weight:700;\n border:1px solid ${l}30;\n ">${o?"[]":"{}"}</span>\n <span style="font-weight:600;font-size:13px;color:#334155;">\n ${Z(t)}\n </span>\n <span style="\n font-size:11px;padding:1px 6px;border-radius:10px;\n background:${l}10;color:${l};font-weight:500;\n ">${a}</span>\n </div>\n <div style="margin-left:9px;padding-left:16px;border-left:2px solid #e2e8f0;">\n ${s.map(([t,e])=>this.renderNode(t,e,0)).join("")}\n </div>\n </div>\n `}typeColor(t){if(null===t)return"#94a3b8";switch(typeof t){case"string":return"#22c55e";case"number":return"#3b82f6";case"boolean":return"#f59e0b";default:return"#94a3b8"}}typeBg(t){if(null===t)return"#f1f5f9";switch(typeof t){case"string":return"#f0fdf4";case"number":return"#eff6ff";case"boolean":return"#fffbeb";default:return"#f1f5f9"}}formatValue(t){return null==t?"null":"string"==typeof t?`"${t}"`:"number"==typeof t||"boolean"==typeof t?String(t):JSON.stringify(t)}}
2508
+ /**
2509
+ * @license
2510
+ * Copyright 2023 Nuraly, Laabidi Aymen
2511
+ * SPDX-License-Identifier: MIT
2512
+ */const ze="nuraly:flow-diagram:split-width",Pe="nuraly:flow-diagram:panel-width",Te="nr-flow-diagram-editor";class Me extends HTMLElement{connectedCallback(){var t;const e=this.loadPanelWidth(),n=this.closestPanel();n&&(n.style.setProperty("width",`${e}px`),this._panelObserver=new ResizeObserver(()=>{const t=Math.round(n.getBoundingClientRect().width);t>=200&&localStorage.setItem(Pe,String(t))}),this._panelObserver.observe(n));const i=this.attachShadow({mode:"open"}),o=null!==(t=this.getAttribute("content"))&&void 0!==t?t:"",r=this.unescapeHtml(o),s=this.prettyPrint(r);let a=null;try{a=JSON.parse(r)}catch(t){}i.innerHTML=`\n <style>${Me.styles()}</style>\n ${this.renderHeader(a)}\n <div class="split">\n <div class="editor-pane">\n <textarea class="editor-textarea" spellcheck="false"></textarea>\n </div>\n <div class="resize-handle"><div class="resize-handle-bar"></div></div>\n <div class="diagram-pane">\n ${a?this.renderDiagram(a):'<div class="empty">Invalid JSON</div>'}\n </div>\n </div>\n <div class="error-bar" style="display:none;"></div>\n `;const l=i.querySelector(".editor-textarea");l&&(l.value=s);const c=localStorage.getItem(ze);c&&requestAnimationFrame(()=>{const t=i.querySelector(".editor-pane");t&&(t.style.flex="none",t.style.width=`${c}px`)});const d=i.querySelector(".diagram-pane"),h=i.querySelector(".error-bar");l&&d&&h&&(l.addEventListener("input",()=>{try{const t=JSON.parse(l.value);if(t.Steps&&t.Transitions){d.innerHTML=this.renderDiagram(t);const e=i.querySelector(".header");if(e){const n=document.createElement("template");n.innerHTML=this.renderHeader(t).trim();const i=n.content.firstElementChild;i&&e.replaceWith(i)}}h.style.display="none"}catch(t){h.textContent=`Parse error: ${t.message}`,h.style.display="flex"}}),this.initResize(i))}disconnectedCallback(){var t,e;null===(t=this._panelObserver)||void 0===t||t.disconnect(),null===(e=this.closestPanel())||void 0===e||e.style.removeProperty("width")}loadPanelWidth(){const t=localStorage.getItem(Pe);return t?Math.max(300,Number.parseInt(t,10)):500}closestPanel(){var t,e,n,i;let o=null!==(e=null!==(t=this.parentElement)&&void 0!==t?t:this.getRootNode().host)&&void 0!==e?e:null;for(;o;){if(o instanceof HTMLElement&&o.classList.contains("artifact-panel"))return o;o=null!==(i=null!==(n=o.parentElement)&&void 0!==n?n:o.getRootNode().host)&&void 0!==i?i:null}return null}initResize(t){const e=t.querySelector(".split"),n=t.querySelector(".editor-pane"),i=t.querySelector(".resize-handle");if(!e||!n||!i)return;let o=!1,r=0,s=0;const a=t=>{if(!o)return;const i=t.clientX-r,a=e.getBoundingClientRect().width,l=Math.max(200,Math.min(s+i,a-200));n.style.flex="none",n.style.width=`${l}px`},l=()=>{if(!o)return;o=!1,i.classList.remove("active"),document.body.style.cursor="",document.body.style.userSelect="";const t=Math.round(n.getBoundingClientRect().width);t>=200&&localStorage.setItem(ze,String(t)),document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",l)};i.addEventListener("mousedown",t=>{const e=t;e.preventDefault(),o=!0,r=e.clientX,s=n.getBoundingClientRect().width,i.classList.add("active"),document.body.style.cursor="col-resize",document.body.style.userSelect="none",document.addEventListener("mousemove",a),document.addEventListener("mouseup",l)})}prettyPrint(t){try{return JSON.stringify(JSON.parse(t),null,2)}catch(e){return t}}unescapeHtml(t){const e=document.createElement("textarea");return e.innerHTML=t,e.value}renderHeader(t){var e,n;const i=null!==(e=null==t?void 0:t.Name)&&void 0!==e?e:"Workflow",o=(null!==(n=null==t?void 0:t.DocflowTags)&&void 0!==n?n:[]).map(t=>`<span class="tag">${Z(t)}</span>`).join("");return`\n <div class="header">\n <span class="header-icon">&#x2B21;</span>\n <span class="header-name">${Z(i)}</span>\n ${o}\n </div>\n `}renderDiagram(t){var e,n;const i=this.buildOrderedSteps(t),o=[];for(let t=0;t<i.length;t++){const r=i[t];o.push("event"===r.type?this.renderEventNode(r.name,null!==(e=r.eventType)&&void 0!==e?e:""):this.renderStepNode(r.name,null!==(n=r.step)&&void 0!==n?n:{})),t<i.length-1&&o.push(this.renderConnector())}return`<div class="diagram">${o.join("")}</div>`}buildOrderedSteps(t){var e,n,i,o;const r=[],s=null===(e=t.Events)||void 0===e?void 0:e.StartEvent,a=null===(n=t.Events)||void 0===n?void 0:n.EndEvent;s&&r.push({type:"event",name:s.Name||"Start",eventType:"start"});const l={};for(const e of Object.values(t.Transitions))l[e.Source]=e;let c=null!==(o=null===(i=l.StartEvent)||void 0===i?void 0:i.Target)&&void 0!==o?o:Object.keys(t.Steps)[0];const d=new Set;for(;c&&t.Steps[c]&&!d.has(c);){d.add(c),r.push({type:"step",name:c,step:t.Steps[c]});const e=l[c];if(!e||"EndEvent"===e.Target)break;c=e.Target}return a&&r.push({type:"event",name:a.Name||"End",eventType:"end"}),r}renderEventNode(t,e){const n="start"===e;return`\n <div class="node event-node ${n?"event-start":"event-end"}">\n <span class="event-icon">${n?"&#9679;":"&#9632;"}</span>\n <span class="event-label">${Z(t)}</span>\n </div>\n `}renderStepNode(t,e){var n,i,o;const r=null!==(n=e.StepType)&&void 0!==n?n:"",s=null!==(o=null===(i=e.Description)||void 0===i?void 0:i.trim())&&void 0!==o?o:"",a=r?`<span class="step-badge ${"Worker"===r?"badge-worker":"badge-system"}">${Z(r)}</span>`:"",l=s?`<div class="step-desc">${Z(s)}</div>`:"";return`\n <div class="node step-node">\n <div class="step-header">\n <span class="step-name">${Z(t)}</span>\n ${a}\n </div>\n ${l}\n </div>\n `}renderConnector(){return'\n <div class="connector">\n <div class="connector-line"></div>\n <div class="connector-arrow">&#9660;</div>\n </div>\n '}static styles(){return"\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n min-width: 480px;\n height: 100%;\n font-family: system-ui, -apple-system, sans-serif;\n color: #1e293b;\n overflow: hidden;\n }\n\n .header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-bottom: 1px solid #e2e8f0;\n background: #f8fafc;\n flex-shrink: 0;\n }\n .header-icon { font-size: 18px; color: #6366f1; }\n .header-name { font-weight: 600; font-size: 15px; }\n .tag {\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 10px;\n background: #ede9fe;\n color: #6366f1;\n font-weight: 500;\n }\n\n .split {\n display: flex;\n flex: 1;\n min-height: 0;\n }\n\n .editor-pane {\n flex: 1;\n min-width: 200px;\n display: flex;\n overflow: hidden;\n }\n .editor-textarea {\n flex: 1;\n width: 100%;\n height: 100%;\n border: none;\n outline: none;\n resize: none;\n padding: 12px;\n font-family: 'Fira Code', 'Cascadia Code', Consolas, monospace;\n font-size: 12px;\n line-height: 1.6;\n color: #1e293b;\n background: #ffffff;\n box-sizing: border-box;\n tab-size: 2;\n }\n\n /* ── Resize handle ──────────────────────────────── */\n\n .resize-handle {\n flex-shrink: 0;\n width: 8px;\n cursor: col-resize;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #f1f5f9;\n border-left: 1px solid #e2e8f0;\n border-right: 1px solid #e2e8f0;\n transition: background 0.15s;\n }\n .resize-handle:hover,\n .resize-handle.active { background: #e2e8f0; }\n .resize-handle-bar {\n width: 2px;\n height: 24px;\n border-radius: 1px;\n background: #cbd5e1;\n transition: background 0.15s;\n }\n .resize-handle:hover .resize-handle-bar,\n .resize-handle.active .resize-handle-bar { background: #94a3b8; }\n\n .diagram-pane {\n flex: 1;\n min-width: 200px;\n overflow-y: auto;\n padding: 24px;\n background: #f8fafc;\n }\n\n .diagram {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n .empty {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: #94a3b8;\n font-size: 14px;\n }\n\n /* ── Event nodes ──────────────────────────────────── */\n\n .event-node {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 20px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n }\n .event-start { background: #ecfdf5; border: 1.5px solid #86efac; color: #166534; }\n .event-start .event-icon { color: #22c55e; font-size: 10px; }\n .event-end { background: #fef2f2; border: 1.5px solid #fca5a5; color: #991b1b; }\n .event-end .event-icon { color: #ef4444; font-size: 10px; }\n\n /* ── Step nodes ───────────────────────────────────── */\n\n .step-node {\n width: 220px;\n padding: 12px 16px;\n border-radius: 8px;\n background: #ffffff;\n border: 1.5px solid #e2e8f0;\n box-shadow: 0 1px 3px rgba(0,0,0,0.06);\n }\n .step-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n }\n .step-name { font-weight: 600; font-size: 13px; color: #1e293b; }\n .step-badge {\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.02em;\n flex-shrink: 0;\n }\n .badge-worker { background: #dbeafe; color: #1d4ed8; }\n .badge-system { background: #fef3c7; color: #92400e; }\n .step-desc { margin-top: 6px; font-size: 11px; color: #64748b; line-height: 1.4; }\n\n /* ── Connectors ───────────────────────────────────── */\n\n .connector {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 32px;\n }\n .connector-line { width: 2px; flex: 1; background: #cbd5e1; }\n .connector-arrow { font-size: 8px; color: #cbd5e1; line-height: 1; margin-top: -2px; }\n\n /* ── Error bar ────────────────────────────────────── */\n\n .error-bar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: #fef2f2;\n border-top: 1px solid #fecaca;\n color: #dc2626;\n font-size: 12px;\n flex-shrink: 0;\n }\n .error-bar::before { content: '⚠'; }\n "}}class Ee extends me{constructor(){super(...arguments),this.id="flow-diagram",this.name="Flow Diagram",this.version="1.0.0"}onInit(){customElements.get(Te)||customElements.define(Te,Me)}renderArtifactContent(t){if("json"!==t.language)return"";let e;try{e=JSON.parse(t.content)}catch(t){return""}return null!==e&&"object"==typeof e&&e.Steps&&"object"==typeof e.Steps&&e.Transitions&&"object"==typeof e.Transitions?`<nr-flow-diagram-editor content="${Z(t.content)}"></nr-flow-diagram-editor>`:""}}
2513
+ /**
2514
+ * @license
2515
+ * Copyright 2023 Nuraly, Laabidi Aymen
2516
+ * SPDX-License-Identifier: MIT
2517
+ */var Ce=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class Ie extends me{constructor(){super(...arguments),this.id="selection-card",this.name="Selection Card Plugin",this.version="1.0.0",this.htmlTags=[{name:"selection",open:"[SELECTION]",close:"[/SELECTION]"}],this.cssPrefix="nr-selection-card"}renderHtmlBlockPlaceholder(t){if("selection"!==t.toLowerCase())return"";return`<div data-placeholder-id="${`selection-skeleton-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}"><nr-skeleton\n active\n style="min-width: 300px; max-width: 500px; height: 80px; margin: 16px 0;"\n ></nr-skeleton></div>`}onInit(){console.log("[SelectionCardPlugin] Initialized")}afterReceive(t){return Ce(this,void 0,void 0,function*(){try{const e=JSON.parse(t);if("selection"===e.type||this.isSelectionData(e))return this.renderSelectionCard(e)}catch(t){}const e=/\[SELECTION\]([\s\S]*?)\[\/SELECTION\]/g;let n,i=t;for(;null!==(n=e.exec(t));)try{const t=JSON.parse(n[1]),e=this.renderSelectionCard(t);i=i.replace(n[0],e)}catch(t){console.warn("[SelectionCardPlugin] Failed to parse selection data:",t)}return i})}renderHtmlBlock(t,e){if("selection"!==t.toLowerCase())return"";try{const t=JSON.parse(e);return this.renderSelectionCard(t)}catch(t){return console.warn("[SelectionCardPlugin] renderHtmlBlock parse error:",t),""}}isSelectionData(t){return t&&"object"==typeof t&&Array.isArray(t.options)&&t.options.length>0&&t.options[0].label&&t.options[0].value}renderSelectionCard(t){const{title:e,options:n,columns:i=1}=t,o=this.getOncePerConversationStyleTag(this.getStyles()),r=n.map(t=>{const e=t.disabled?'aria-disabled="true"':"",n=t.disabled?`${this.cssPrefix}__option--disabled`:"",i=t.disabled?"-1":"0",o=t.disabled?"":`data-selection-value="${this.escapeHtml(t.value)}"`;return`\n <div class="${this.cssPrefix}__option ${n}"\n ${o}\n role="button"\n tabindex="${i}"\n ${e}>\n ${t.icon?`<nr-icon class="${this.cssPrefix}__option-icon" name="${this.escapeHtml(t.icon)}" size="small"></nr-icon>`:""}\n <div class="${this.cssPrefix}__option-content">\n <span class="${this.cssPrefix}__option-label">${this.escapeHtml(t.label)}</span>\n ${t.description?`<span class="${this.cssPrefix}__option-description">${this.escapeHtml(t.description)}</span>`:""}\n </div>\n </div>\n `}).join("");return`\n ${o}\n <div class="${this.cssPrefix}" data-nr-selection-card="true">\n ${e?`<div class="${this.cssPrefix}__title">${this.escapeHtml(e)}</div>`:""}\n <div class="${this.cssPrefix}__grid ${this.cssPrefix}__grid--cols-${i}">\n ${r}\n </div>\n </div>\n `}escapeHtml(t){const e=document.createElement("div");return e.textContent=t,e.innerHTML}getStyles(){return`\n .${this.cssPrefix} {\n margin: 12px 0;\n max-width: 500px;\n font-family: system-ui, -apple-system, sans-serif;\n }\n\n .${this.cssPrefix}__title {\n font-size: 14px;\n font-weight: 600;\n color: #1a1a1a;\n margin-bottom: 10px;\n }\n\n .${this.cssPrefix}__grid {\n display: grid;\n gap: 8px;\n }\n\n .${this.cssPrefix}__grid--cols-1 {\n grid-template-columns: 1fr;\n }\n\n .${this.cssPrefix}__grid--cols-2 {\n grid-template-columns: 1fr 1fr;\n }\n\n .${this.cssPrefix}__grid--cols-3 {\n grid-template-columns: 1fr 1fr 1fr;\n }\n\n .${this.cssPrefix}__option {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n background: #ffffff;\n border: 1px solid #e0e0e0;\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.15s ease;\n user-select: none;\n -webkit-user-select: none;\n }\n\n .${this.cssPrefix}__option:hover {\n border-color: #4f8cff;\n background: #f0f6ff;\n box-shadow: 0 1px 4px rgba(79, 140, 255, 0.12);\n }\n\n .${this.cssPrefix}__option:focus-visible {\n outline: 2px solid #4f8cff;\n outline-offset: 2px;\n }\n\n .${this.cssPrefix}__option:active:not([aria-disabled="true"]) {\n transform: scale(0.98);\n background: #dfeaff;\n }\n\n .${this.cssPrefix}__option--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n }\n\n .${this.cssPrefix}__option-icon {\n flex-shrink: 0;\n color: #555;\n }\n\n .${this.cssPrefix}__option-content {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n }\n\n .${this.cssPrefix}__option-label {\n font-size: 14px;\n font-weight: 500;\n color: #1a1a1a;\n line-height: 1.3;\n }\n\n .${this.cssPrefix}__option-description {\n font-size: 12px;\n color: #666;\n line-height: 1.3;\n }\n\n /* Dark mode support */\n @media (prefers-color-scheme: dark) {\n .${this.cssPrefix}__title {\n color: #ffffff;\n }\n\n .${this.cssPrefix}__option {\n background: #2a2a2a;\n border-color: #444;\n }\n\n .${this.cssPrefix}__option:hover {\n border-color: #5a9aff;\n background: #1e2d44;\n box-shadow: 0 1px 4px rgba(90, 154, 255, 0.15);\n }\n\n .${this.cssPrefix}__option:active:not([aria-disabled="true"]) {\n background: #1a2638;\n }\n\n .${this.cssPrefix}__option-icon {\n color: #aaa;\n }\n\n .${this.cssPrefix}__option-label {\n color: #ffffff;\n }\n\n .${this.cssPrefix}__option-description {\n color: #999;\n }\n }\n\n /* Responsive: force single column on mobile */\n @media (max-width: 480px) {\n .${this.cssPrefix}__grid--cols-2,\n .${this.cssPrefix}__grid--cols-3 {\n grid-template-columns: 1fr;\n }\n }\n `}}
2518
+ /**
2519
+ * @license
2520
+ * Copyright 2023 Nuraly, Laabidi Aymen
2521
+ * SPDX-License-Identifier: MIT
2522
+ */var Oe=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class Re{constructor(){this.store=new Map}save(t,e){return Oe(this,void 0,void 0,function*(){this.store.set(t,JSON.parse(JSON.stringify(e)))})}load(t){return Oe(this,void 0,void 0,function*(){const e=this.store.get(t);return e?JSON.parse(JSON.stringify(e)):null})}remove(t){return Oe(this,void 0,void 0,function*(){this.store.delete(t)})}clear(){return Oe(this,void 0,void 0,function*(){this.store.clear()})}has(t){return Oe(this,void 0,void 0,function*(){return this.store.has(t)})}}class je{save(t,e){return Oe(this,void 0,void 0,function*(){try{localStorage.setItem(t,JSON.stringify(e))}catch(t){throw console.error("[LocalStorage] Save error:",t),new Error(`Failed to save to localStorage: ${t}`)}})}load(t){return Oe(this,void 0,void 0,function*(){try{const e=localStorage.getItem(t);return e?JSON.parse(e):null}catch(t){return console.error("[LocalStorage] Load error:",t),null}})}remove(t){return Oe(this,void 0,void 0,function*(){localStorage.removeItem(t)})}clear(){return Oe(this,void 0,void 0,function*(){Object.keys(localStorage).filter(t=>t.startsWith("chatbot-")).forEach(t=>{localStorage.removeItem(t)})})}has(t){return Oe(this,void 0,void 0,function*(){return null!==localStorage.getItem(t)})}}class Ae{constructor(t="chatbot-db",e="chatbot-store"){this.dbName=t,this.storeName=e}getDB(){return Oe(this,void 0,void 0,function*(){return this.db?this.db:new Promise((t,e)=>{const n=indexedDB.open(this.dbName,1);n.onerror=()=>e(n.error),n.onsuccess=()=>{this.db=n.result,t(this.db)},n.onupgradeneeded=t=>{const e=t.target.result;e.objectStoreNames.contains(this.storeName)||e.createObjectStore(this.storeName)}})})}save(t,e){return Oe(this,void 0,void 0,function*(){const n=yield this.getDB();return new Promise((i,o)=>{const r=n.transaction([this.storeName],"readwrite").objectStore(this.storeName).put(e,t);r.onerror=()=>o(r.error),r.onsuccess=()=>i()})})}load(t){return Oe(this,void 0,void 0,function*(){const e=yield this.getDB();return new Promise((n,i)=>{const o=e.transaction([this.storeName],"readonly").objectStore(this.storeName).get(t);o.onerror=()=>i(o.error),o.onsuccess=()=>n(o.result||null)})})}remove(t){return Oe(this,void 0,void 0,function*(){const e=yield this.getDB();return new Promise((n,i)=>{const o=e.transaction([this.storeName],"readwrite").objectStore(this.storeName).delete(t);o.onerror=()=>i(o.error),o.onsuccess=()=>n()})})}clear(){return Oe(this,void 0,void 0,function*(){const t=yield this.getDB();return new Promise((e,n)=>{const i=t.transaction([this.storeName],"readwrite").objectStore(this.storeName).clear();i.onerror=()=>n(i.error),i.onsuccess=()=>e()})})}has(t){return Oe(this,void 0,void 0,function*(){return null!==(yield this.load(t))})}}
2523
+ /**
2524
+ * @license
2525
+ * Copyright 2023 Nuraly, Laabidi Aymen
2526
+ * SPDX-License-Identifier: MIT
2527
+ */class De{constructor(t){this.host=t,t.addController(this)}hostConnected(){}hostDisconnected(){}handleMessagesUpdate(){var t;if(!this.host.autoScroll)return;(null===(t=this.host.shadowRoot)||void 0===t?void 0:t.querySelector(".messages"))&&this.scrollToBottom()}scrollToBottom(){var t;const e=null===(t=this.host.shadowRoot)||void 0===t?void 0:t.querySelector(".messages");e&&requestAnimationFrame(()=>{e.scrollTop=e.scrollHeight})}}export{ge as AnalyticsPlugin,ke as ArtifactPlugin,me as ChatPluginBase,W as ChatbotActionType,Dt as ChatbotCoreController,U as ChatbotFileType,F as ChatbotLoadingType,B as ChatbotMessageState,De as ChatbotScrollController,D as ChatbotSender,N as ChatbotSize,L as ChatbotVariant,Jt as CustomAPIProvider,Y as DEFAULT_ALLOWED_FILE_TYPES,K as DEFAULT_MAX_FILES,G as DEFAULT_MAX_FILE_SIZE,V as DEFAULT_MAX_MESSAGES,q as DEFAULT_TYPING_DELAY,J as EMPTY_STRING,gt as EventBus,X as FILE_TYPE_MAPPINGS,$t as FileHandler,we as FlightCardPlugin,Ee as FlowDiagramPlugin,Ae as IndexedDBStorage,Se as JsonGraphRendererPlugin,je as LocalStorageAdapter,ye as MarkdownPlugin,Re as MemoryStorage,yt as MessageHandler,Qt as MockProvider,Zt as MockProviders,kt as ModuleHandler,pe as NativeWebSocketProvider,vt as NrChatbotElement,Bt as OpenAIProvider,ve as PersistencePlugin,Ot as PluginService,_e as PrintJobCardPlugin,Pt as ProviderService,Ie as SelectionCardPlugin,oe as SocketProvider,bt as StateHandler,Ct as StorageService,St as SuggestionHandler,wt as ThreadHandler,mt as ValidationError,Mt as ValidationService,le as WorkflowSocketProvider};