@nuraly/lumenui 0.1.0 → 0.2.2

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 (821) hide show
  1. package/dist/nuralyui.bundle.js +23283 -16875
  2. package/dist/nuralyui.bundle.js.gz +0 -0
  3. package/dist/src/components/alert/alert.component.d.ts +8 -5
  4. package/dist/src/components/alert/alert.component.js +24 -20
  5. package/dist/src/components/alert/alert.style.d.ts +0 -7
  6. package/dist/src/components/alert/alert.style.js +48 -90
  7. package/dist/src/components/alert/bundle.js +82 -108
  8. package/dist/src/components/alert/bundle.js.gz +0 -0
  9. package/dist/src/components/badge/badge.component.d.ts +9 -8
  10. package/dist/src/components/badge/badge.component.js +17 -14
  11. package/dist/src/components/badge/badge.style.d.ts +0 -7
  12. package/dist/src/components/badge/badge.style.js +49 -107
  13. package/dist/src/components/badge/bundle.js +81 -119
  14. package/dist/src/components/badge/bundle.js.gz +0 -0
  15. package/dist/src/components/breadcrumb/breadcrumb.component.d.ts +8 -10
  16. package/dist/src/components/breadcrumb/breadcrumb.component.js +16 -15
  17. package/dist/src/components/breadcrumb/breadcrumb.style.d.ts +0 -7
  18. package/dist/src/components/breadcrumb/breadcrumb.style.js +42 -60
  19. package/dist/src/components/breadcrumb/bundle.js +96 -93
  20. package/dist/src/components/breadcrumb/bundle.js.gz +0 -0
  21. package/dist/src/components/button/bundle.js +221 -470
  22. package/dist/src/components/button/bundle.js.gz +0 -0
  23. package/dist/src/components/button/button.component.d.ts +2 -1
  24. package/dist/src/components/button/button.component.js +6 -6
  25. package/dist/src/components/button/button.style.d.ts +0 -7
  26. package/dist/src/components/button/button.style.js +167 -433
  27. package/dist/src/components/button/controllers/base.controller.d.ts +15 -0
  28. package/dist/src/components/button/controllers/base.controller.js +13 -0
  29. package/dist/src/components/button/controllers/index.d.ts +10 -0
  30. package/dist/src/components/button/controllers/index.js +10 -0
  31. package/dist/src/components/button/controllers/keyboard.controller.d.ts +32 -0
  32. package/dist/src/components/button/controllers/keyboard.controller.js +78 -0
  33. package/dist/src/components/button/controllers/link.controller.d.ts +30 -0
  34. package/dist/src/components/button/controllers/link.controller.js +75 -0
  35. package/dist/src/components/button/controllers/ripple.controller.d.ts +23 -0
  36. package/dist/src/components/button/controllers/ripple.controller.js +69 -0
  37. package/dist/src/components/button/interfaces/base-controller.interface.d.ts +61 -0
  38. package/dist/src/components/button/interfaces/base-controller.interface.js +7 -0
  39. package/dist/src/components/button/interfaces/index.d.ts +2 -0
  40. package/dist/src/components/button/interfaces/index.js +2 -0
  41. package/dist/src/components/button/test/nr-button_test.d.ts +2 -0
  42. package/dist/src/components/button/test/nr-button_test.js +91 -0
  43. package/dist/src/components/canvas/base-canvas.component.d.ts +4 -2
  44. package/dist/src/components/canvas/base-canvas.component.js +7 -0
  45. package/dist/src/components/canvas/bundle.js +17218 -9667
  46. package/dist/src/components/canvas/bundle.js.gz +0 -0
  47. package/dist/src/components/canvas/canvas.constants.d.ts +1 -1
  48. package/dist/src/components/canvas/canvas.constants.js +1 -1
  49. package/dist/src/components/canvas/chatbot-panel.style.js +54 -63
  50. package/dist/src/components/canvas/chatbot-trigger/chatbot-trigger-fields.component.d.ts +115 -0
  51. package/dist/src/components/canvas/chatbot-trigger/chatbot-trigger-fields.component.js +480 -0
  52. package/dist/src/components/canvas/chatbot-trigger/chatbot-trigger-fields.style.d.ts +7 -0
  53. package/dist/src/components/canvas/chatbot-trigger/chatbot-trigger-fields.style.js +323 -0
  54. package/dist/src/components/canvas/chatbot-trigger/chatbot-trigger.types.d.ts +162 -0
  55. package/dist/src/components/canvas/chatbot-trigger/chatbot-trigger.types.js +88 -0
  56. package/dist/src/components/canvas/chatbot-trigger/index.d.ts +9 -0
  57. package/dist/src/components/canvas/chatbot-trigger/index.js +12 -0
  58. package/dist/src/components/canvas/controllers/base.controller.d.ts +53 -0
  59. package/dist/src/components/canvas/controllers/base.controller.js +80 -0
  60. package/dist/src/components/canvas/controllers/clipboard.controller.d.ts +80 -0
  61. package/dist/src/components/canvas/controllers/clipboard.controller.js +300 -0
  62. package/dist/src/components/canvas/controllers/collaboration.controller.d.ts +54 -0
  63. package/dist/src/components/canvas/controllers/collaboration.controller.js +425 -0
  64. package/dist/src/components/canvas/controllers/config.controller.d.ts +61 -0
  65. package/dist/src/components/canvas/controllers/config.controller.js +118 -0
  66. package/dist/src/components/canvas/controllers/connection.controller.d.ts +69 -0
  67. package/dist/src/components/canvas/controllers/connection.controller.js +183 -0
  68. package/dist/src/components/canvas/controllers/drag.controller.d.ts +56 -0
  69. package/dist/src/components/canvas/controllers/drag.controller.js +195 -0
  70. package/dist/src/components/canvas/controllers/frame.controller.d.ts +94 -0
  71. package/dist/src/components/canvas/controllers/frame.controller.js +456 -0
  72. package/dist/src/components/canvas/controllers/index.d.ts +19 -0
  73. package/dist/src/components/canvas/controllers/index.js +32 -0
  74. package/dist/src/components/canvas/controllers/keyboard.controller.d.ts +44 -0
  75. package/dist/src/components/canvas/controllers/keyboard.controller.js +275 -0
  76. package/dist/src/components/canvas/controllers/marquee.controller.d.ts +71 -0
  77. package/dist/src/components/canvas/controllers/marquee.controller.js +128 -0
  78. package/dist/src/components/canvas/controllers/selection.controller.d.ts +85 -0
  79. package/dist/src/components/canvas/controllers/selection.controller.js +202 -0
  80. package/dist/src/components/canvas/controllers/touch.controller.d.ts +55 -0
  81. package/dist/src/components/canvas/controllers/touch.controller.js +299 -0
  82. package/dist/src/components/canvas/controllers/undo.controller.d.ts +100 -0
  83. package/dist/src/components/canvas/controllers/undo.controller.js +218 -0
  84. package/dist/src/components/canvas/controllers/viewport.controller.d.ts +91 -0
  85. package/dist/src/components/canvas/controllers/viewport.controller.js +287 -0
  86. package/dist/src/components/canvas/data-node/data-node-config.component.d.ts +67 -0
  87. package/dist/src/components/canvas/data-node/data-node-config.component.js +496 -0
  88. package/dist/src/components/canvas/data-node/data-node-fields.component.d.ts +198 -0
  89. package/dist/src/components/canvas/data-node/data-node-fields.component.js +931 -0
  90. package/dist/src/components/canvas/data-node/data-node-fields.style.d.ts +7 -0
  91. package/dist/src/components/canvas/data-node/data-node-fields.style.js +448 -0
  92. package/dist/src/components/canvas/data-node/data-node.types.d.ts +245 -0
  93. package/dist/src/components/canvas/data-node/data-node.types.js +158 -0
  94. package/dist/src/components/canvas/data-node/index.d.ts +9 -0
  95. package/dist/src/components/canvas/data-node/index.js +12 -0
  96. package/dist/src/components/canvas/data-node/schema-select.component.d.ts +36 -0
  97. package/dist/src/components/canvas/data-node/schema-select.component.js +196 -0
  98. package/dist/src/components/canvas/data-node/table-select.component.d.ts +38 -0
  99. package/dist/src/components/canvas/data-node/table-select.component.js +199 -0
  100. package/dist/src/components/canvas/index.d.ts +2 -0
  101. package/dist/src/components/canvas/index.js +3 -0
  102. package/dist/src/components/canvas/interfaces/canvas-host.interface.d.ts +91 -0
  103. package/dist/src/components/canvas/interfaces/canvas-host.interface.js +7 -0
  104. package/dist/src/components/canvas/interfaces/collaboration.interface.d.ts +58 -0
  105. package/dist/src/components/canvas/interfaces/collaboration.interface.js +10 -0
  106. package/dist/src/components/canvas/interfaces/index.d.ts +8 -0
  107. package/dist/src/components/canvas/interfaces/index.js +7 -0
  108. package/dist/src/components/canvas/templates/chatbot-panel.template.d.ts +28 -0
  109. package/dist/src/components/canvas/templates/chatbot-panel.template.js +49 -0
  110. package/dist/src/components/canvas/templates/config-panel.template.d.ts +22 -0
  111. package/dist/src/components/canvas/templates/config-panel.template.js +22 -0
  112. package/dist/src/components/canvas/templates/context-menu.template.d.ts +30 -0
  113. package/dist/src/components/canvas/templates/context-menu.template.js +80 -0
  114. package/dist/src/components/canvas/templates/edges.template.d.ts +41 -0
  115. package/dist/src/components/canvas/templates/edges.template.js +243 -0
  116. package/dist/src/components/canvas/templates/empty-state.template.d.ts +17 -0
  117. package/dist/src/components/canvas/templates/empty-state.template.js +25 -0
  118. package/dist/src/components/canvas/templates/frame.template.d.ts +24 -0
  119. package/dist/src/components/canvas/templates/frame.template.js +74 -0
  120. package/dist/src/components/canvas/templates/index.d.ts +18 -0
  121. package/dist/src/components/canvas/templates/index.js +30 -0
  122. package/dist/src/components/canvas/templates/palette.template.d.ts +27 -0
  123. package/dist/src/components/canvas/templates/palette.template.js +110 -0
  124. package/dist/src/components/canvas/templates/presence-bar.template.d.ts +18 -0
  125. package/dist/src/components/canvas/templates/presence-bar.template.js +60 -0
  126. package/dist/src/components/canvas/templates/remote-cursors.template.d.ts +19 -0
  127. package/dist/src/components/canvas/templates/remote-cursors.template.js +43 -0
  128. package/dist/src/components/canvas/templates/toolbar.template.d.ts +52 -0
  129. package/dist/src/components/canvas/templates/toolbar.template.js +118 -0
  130. package/dist/src/components/canvas/templates/wb-floating-toolbar.template.d.ts +30 -0
  131. package/dist/src/components/canvas/templates/wb-floating-toolbar.template.js +219 -0
  132. package/dist/src/components/canvas/templates/wb-sidebar.template.d.ts +23 -0
  133. package/dist/src/components/canvas/templates/wb-sidebar.template.js +152 -0
  134. package/dist/src/components/canvas/utils/variable-resolver.d.ts +71 -0
  135. package/dist/src/components/canvas/utils/variable-resolver.js +280 -0
  136. package/dist/src/components/canvas/whiteboard-canvas.component.d.ts +3 -1
  137. package/dist/src/components/canvas/whiteboard-canvas.component.js +19 -1
  138. package/dist/src/components/canvas/whiteboard-canvas.style.js +159 -138
  139. package/dist/src/components/canvas/whiteboard-node.component.d.ts +2 -1
  140. package/dist/src/components/canvas/whiteboard-node.component.js +2 -1
  141. package/dist/src/components/canvas/whiteboard-node.style.js +44 -44
  142. package/dist/src/components/canvas/workflow-canvas-only.d.ts +4 -0
  143. package/dist/src/components/canvas/workflow-canvas-only.js +5 -0
  144. package/dist/src/components/canvas/workflow-canvas.component.d.ts +3 -1
  145. package/dist/src/components/canvas/workflow-canvas.component.js +30 -2
  146. package/dist/src/components/canvas/workflow-canvas.style.js +794 -675
  147. package/dist/src/components/canvas/workflow-canvas.types.d.ts +113 -4
  148. package/dist/src/components/canvas/workflow-canvas.types.js +646 -3
  149. package/dist/src/components/canvas/workflow-node.component.d.ts +3 -2
  150. package/dist/src/components/canvas/workflow-node.component.js +5 -5
  151. package/dist/src/components/canvas/workflow-node.style.js +183 -181
  152. package/dist/src/components/card/bundle.js +43 -35
  153. package/dist/src/components/card/bundle.js.gz +0 -0
  154. package/dist/src/components/card/card.component.d.ts +6 -1
  155. package/dist/src/components/card/card.component.js +8 -2
  156. package/dist/src/components/card/card.style.js +26 -30
  157. package/dist/src/components/carousel/bundle.js +8 -8
  158. package/dist/src/components/carousel/bundle.js.gz +0 -0
  159. package/dist/src/components/carousel/carousel.component.d.ts +12 -0
  160. package/dist/src/components/carousel/carousel.component.js +16 -4
  161. package/dist/src/components/carousel/demo/carousel-demo.d.ts +6 -0
  162. package/dist/src/components/carousel/demo/carousel-demo.js +68 -0
  163. package/dist/src/components/chatbot/audio-compress.d.ts +26 -0
  164. package/dist/src/components/chatbot/audio-compress.js +84 -0
  165. package/dist/src/components/chatbot/bundle.js +690 -430
  166. package/dist/src/components/chatbot/bundle.js.gz +0 -0
  167. package/dist/src/components/chatbot/chatbot-audio.controller.d.ts +35 -0
  168. package/dist/src/components/chatbot/chatbot-audio.controller.js +160 -0
  169. package/dist/src/components/chatbot/chatbot.component.d.ts +14 -1
  170. package/dist/src/components/chatbot/chatbot.component.js +42 -2
  171. package/dist/src/components/chatbot/chatbot.style.js +418 -277
  172. package/dist/src/components/chatbot/chatbot.types.d.ts +8 -0
  173. package/dist/src/components/chatbot/controllers/index.d.ts +8 -0
  174. package/dist/src/components/chatbot/controllers/index.js +8 -0
  175. package/dist/src/components/chatbot/controllers/scroll.controller.d.ts +34 -0
  176. package/dist/src/components/chatbot/controllers/scroll.controller.js +43 -0
  177. package/dist/src/components/chatbot/core/chatbot-core.controller.d.ts +283 -0
  178. package/dist/src/components/chatbot/core/chatbot-core.controller.js +824 -0
  179. package/dist/src/components/chatbot/core/event-bus.d.ts +54 -0
  180. package/dist/src/components/chatbot/core/event-bus.js +102 -0
  181. package/dist/src/components/chatbot/core/index.d.ts +12 -0
  182. package/dist/src/components/chatbot/core/index.js +15 -0
  183. package/dist/src/components/chatbot/core/types.d.ts +403 -0
  184. package/dist/src/components/chatbot/core/types.js +16 -0
  185. package/dist/src/components/chatbot/locales/locale-codes.d.ts +14 -0
  186. package/dist/src/components/chatbot/locales/locale-codes.js +23 -0
  187. package/dist/src/components/chatbot/plugins/analytics-plugin.d.ts +23 -0
  188. package/dist/src/components/chatbot/plugins/analytics-plugin.js +52 -0
  189. package/dist/src/components/chatbot/plugins/artifact-plugin.d.ts +71 -0
  190. package/dist/src/components/chatbot/plugins/artifact-plugin.js +313 -0
  191. package/dist/src/components/chatbot/plugins/chat-plugin.d.ts +44 -0
  192. package/dist/src/components/chatbot/plugins/chat-plugin.js +58 -0
  193. package/dist/src/components/chatbot/plugins/flight-card-plugin.d.ts +116 -0
  194. package/dist/src/components/chatbot/plugins/flight-card-plugin.js +594 -0
  195. package/dist/src/components/chatbot/plugins/flow-diagram-plugin.d.ts +23 -0
  196. package/dist/src/components/chatbot/plugins/flow-diagram-plugin.js +495 -0
  197. package/dist/src/components/chatbot/plugins/index.d.ts +16 -0
  198. package/dist/src/components/chatbot/plugins/index.js +17 -0
  199. package/dist/src/components/chatbot/plugins/json-graph-renderer-plugin.d.ts +43 -0
  200. package/dist/src/components/chatbot/plugins/json-graph-renderer-plugin.js +166 -0
  201. package/dist/src/components/chatbot/plugins/markdown-plugin.d.ts +26 -0
  202. package/dist/src/components/chatbot/plugins/markdown-plugin.js +68 -0
  203. package/dist/src/components/chatbot/plugins/persistence-plugin.d.ts +30 -0
  204. package/dist/src/components/chatbot/plugins/persistence-plugin.js +91 -0
  205. package/dist/src/components/chatbot/plugins/print-job-card-plugin.d.ts +110 -0
  206. package/dist/src/components/chatbot/plugins/print-job-card-plugin.js +505 -0
  207. package/dist/src/components/chatbot/plugins/selection-card-plugin.d.ts +111 -0
  208. package/dist/src/components/chatbot/plugins/selection-card-plugin.js +318 -0
  209. package/dist/src/components/chatbot/providers/custom-api-provider.d.ts +63 -0
  210. package/dist/src/components/chatbot/providers/custom-api-provider.js +240 -0
  211. package/dist/src/components/chatbot/providers/index.d.ts +16 -0
  212. package/dist/src/components/chatbot/providers/index.js +13 -0
  213. package/dist/src/components/chatbot/providers/mock-provider.d.ts +154 -0
  214. package/dist/src/components/chatbot/providers/mock-provider.js +411 -0
  215. package/dist/src/components/chatbot/providers/native-ws-provider.d.ts +184 -0
  216. package/dist/src/components/chatbot/providers/native-ws-provider.js +544 -0
  217. package/dist/src/components/chatbot/providers/openai-provider.d.ts +32 -0
  218. package/dist/src/components/chatbot/providers/openai-provider.js +246 -0
  219. package/dist/src/components/chatbot/providers/socket-provider.d.ts +159 -0
  220. package/dist/src/components/chatbot/providers/socket-provider.js +390 -0
  221. package/dist/src/components/chatbot/providers/workflow-socket-provider.d.ts +116 -0
  222. package/dist/src/components/chatbot/providers/workflow-socket-provider.js +484 -0
  223. package/dist/src/components/chatbot/storage/index.d.ts +7 -0
  224. package/dist/src/components/chatbot/storage/index.js +8 -0
  225. package/dist/src/components/chatbot/storage/storage-implementations.d.ts +43 -0
  226. package/dist/src/components/chatbot/storage/storage-implementations.js +179 -0
  227. package/dist/src/components/chatbot/templates/artifact-panel.template.d.ts +22 -0
  228. package/dist/src/components/chatbot/templates/artifact-panel.template.js +81 -0
  229. package/dist/src/components/chatbot/templates/chatbot-main.template.d.ts +49 -0
  230. package/dist/src/components/chatbot/templates/chatbot-main.template.js +115 -0
  231. package/dist/src/components/chatbot/templates/file-preview-modal.template.d.ts +19 -0
  232. package/dist/src/components/chatbot/templates/file-preview-modal.template.js +74 -0
  233. package/dist/src/components/chatbot/templates/file-upload-area.template.d.ts +19 -0
  234. package/dist/src/components/chatbot/templates/file-upload-area.template.js +29 -0
  235. package/dist/src/components/chatbot/templates/index.d.ts +15 -0
  236. package/dist/src/components/chatbot/templates/index.js +15 -0
  237. package/dist/src/components/chatbot/templates/input-box.template.d.ts +49 -0
  238. package/dist/src/components/chatbot/templates/input-box.template.js +317 -0
  239. package/dist/src/components/chatbot/templates/message.template.d.ts +31 -0
  240. package/dist/src/components/chatbot/templates/message.template.js +214 -0
  241. package/dist/src/components/chatbot/templates/suggestion.template.d.ts +20 -0
  242. package/dist/src/components/chatbot/templates/suggestion.template.js +40 -0
  243. package/dist/src/components/chatbot/templates/thread-sidebar.template.d.ts +24 -0
  244. package/dist/src/components/chatbot/templates/thread-sidebar.template.js +160 -0
  245. package/dist/src/components/chatbot/templates/url-modal.template.d.ts +25 -0
  246. package/dist/src/components/chatbot/templates/url-modal.template.js +100 -0
  247. package/dist/src/components/chatbot/utils/format.d.ts +23 -0
  248. package/dist/src/components/chatbot/utils/format.js +84 -0
  249. package/dist/src/components/chatbot/utils/index.d.ts +7 -0
  250. package/dist/src/components/chatbot/utils/index.js +7 -0
  251. package/dist/src/components/checkbox/bundle.js +86 -245
  252. package/dist/src/components/checkbox/bundle.js.gz +0 -0
  253. package/dist/src/components/checkbox/checkbox.component.d.ts +5 -2
  254. package/dist/src/components/checkbox/checkbox.component.js +11 -13
  255. package/dist/src/components/checkbox/checkbox.style.js +56 -231
  256. package/dist/src/components/checkbox/mixins/checkbox-event-mixin.d.ts +87 -0
  257. package/dist/src/components/checkbox/mixins/checkbox-event-mixin.js +94 -0
  258. package/dist/src/components/checkbox/mixins/checkbox-focus-mixin.d.ts +55 -0
  259. package/dist/src/components/checkbox/mixins/checkbox-focus-mixin.js +57 -0
  260. package/dist/src/components/checkbox/mixins/index.d.ts +10 -0
  261. package/dist/src/components/checkbox/mixins/index.js +8 -0
  262. package/dist/src/components/checkbox/test/checkbox_test.d.ts +2 -0
  263. package/dist/src/components/checkbox/test/checkbox_test.js +88 -0
  264. package/dist/src/components/code-editor/bundle.js +151 -25
  265. package/dist/src/components/code-editor/bundle.js.gz +0 -0
  266. package/dist/src/components/code-editor/code-editor.component.d.ts +18 -56
  267. package/dist/src/components/code-editor/code-editor.component.js +141 -394
  268. package/dist/src/components/code-editor/code-editor.style.js +139 -15
  269. package/dist/src/components/collapse/bundle.js +97 -84
  270. package/dist/src/components/collapse/bundle.js.gz +0 -0
  271. package/dist/src/components/collapse/collapse.component.d.ts +7 -1
  272. package/dist/src/components/collapse/collapse.component.js +11 -2
  273. package/dist/src/components/collapse/collapse.style.js +60 -60
  274. package/dist/src/components/collapse/controllers/accordion.controller.d.ts +60 -0
  275. package/dist/src/components/collapse/controllers/accordion.controller.js +132 -0
  276. package/dist/src/components/collapse/controllers/animation.controller.d.ts +40 -0
  277. package/dist/src/components/collapse/controllers/animation.controller.js +125 -0
  278. package/dist/src/components/collapse/controllers/base.controller.d.ts +48 -0
  279. package/dist/src/components/collapse/controllers/base.controller.js +69 -0
  280. package/dist/src/components/collapse/controllers/index.d.ts +12 -0
  281. package/dist/src/components/collapse/controllers/index.js +11 -0
  282. package/dist/src/components/collapse/controllers/keyboard.controller.d.ts +73 -0
  283. package/dist/src/components/collapse/controllers/keyboard.controller.js +186 -0
  284. package/dist/src/components/colorpicker/bundle.js +85 -48
  285. package/dist/src/components/colorpicker/bundle.js.gz +0 -0
  286. package/dist/src/components/colorpicker/color-holder.component.d.ts +2 -4
  287. package/dist/src/components/colorpicker/color-holder.component.js +5 -6
  288. package/dist/src/components/colorpicker/color-holder.style.js +11 -11
  289. package/dist/src/components/colorpicker/color-picker.component.d.ts +2 -1
  290. package/dist/src/components/colorpicker/color-picker.component.js +1 -0
  291. package/dist/src/components/colorpicker/color-picker.style.js +12 -12
  292. package/dist/src/components/colorpicker/controllers/base.controller.d.ts +14 -0
  293. package/dist/src/components/colorpicker/controllers/base.controller.js +15 -0
  294. package/dist/src/components/colorpicker/controllers/dropdown.controller.d.ts +60 -0
  295. package/dist/src/components/colorpicker/controllers/dropdown.controller.js +243 -0
  296. package/dist/src/components/colorpicker/controllers/event.controller.d.ts +46 -0
  297. package/dist/src/components/colorpicker/controllers/event.controller.js +130 -0
  298. package/dist/src/components/colorpicker/controllers/index.d.ts +4 -0
  299. package/dist/src/components/colorpicker/controllers/index.js +4 -0
  300. package/dist/src/components/colorpicker/default-color-sets.component.d.ts +2 -2
  301. package/dist/src/components/colorpicker/default-color-sets.component.js +4 -3
  302. package/dist/src/components/colorpicker/default-color-sets.style.js +5 -5
  303. package/dist/src/components/colorpicker/interfaces/index.d.ts +60 -0
  304. package/dist/src/components/colorpicker/interfaces/index.js +2 -0
  305. package/dist/src/components/container/bundle.js +24 -14
  306. package/dist/src/components/container/bundle.js.gz +0 -0
  307. package/dist/src/components/container/container.component.d.ts +4 -1
  308. package/dist/src/components/container/container.component.js +7 -5
  309. package/dist/src/components/container/container.style.js +9 -9
  310. package/dist/src/components/datepicker/bundle.js +193 -177
  311. package/dist/src/components/datepicker/bundle.js.gz +0 -0
  312. package/dist/src/components/datepicker/controllers/calendar.controller.d.ts +78 -0
  313. package/dist/src/components/datepicker/controllers/calendar.controller.js +225 -0
  314. package/dist/src/components/datepicker/controllers/index.d.ts +11 -0
  315. package/dist/src/components/datepicker/controllers/index.js +11 -0
  316. package/dist/src/components/datepicker/controllers/keyboard.controller.d.ts +96 -0
  317. package/dist/src/components/datepicker/controllers/keyboard.controller.js +246 -0
  318. package/dist/src/components/datepicker/controllers/month-year-dropdown.controller.d.ts +48 -0
  319. package/dist/src/components/datepicker/controllers/month-year-dropdown.controller.js +92 -0
  320. package/dist/src/components/datepicker/controllers/positioning.controller.d.ts +82 -0
  321. package/dist/src/components/datepicker/controllers/positioning.controller.js +247 -0
  322. package/dist/src/components/datepicker/controllers/selection.controller.d.ts +92 -0
  323. package/dist/src/components/datepicker/controllers/selection.controller.js +267 -0
  324. package/dist/src/components/datepicker/datepicker.component.d.ts +2 -1
  325. package/dist/src/components/datepicker/datepicker.component.js +1 -0
  326. package/dist/src/components/datepicker/datepicker.style.js +65 -65
  327. package/dist/src/components/datepicker/datepicker.style.variables.js +91 -91
  328. package/dist/src/components/datepicker/interfaces/base-controller.interface.d.ts +40 -0
  329. package/dist/src/components/datepicker/interfaces/base-controller.interface.js +7 -0
  330. package/dist/src/components/datepicker/interfaces/datepicker-controllers.interface.d.ts +112 -0
  331. package/dist/src/components/datepicker/interfaces/datepicker-controllers.interface.js +7 -0
  332. package/dist/src/components/datepicker/interfaces/index.d.ts +8 -0
  333. package/dist/src/components/datepicker/interfaces/index.js +7 -0
  334. package/dist/src/components/datepicker/templates/days.template.d.ts +4 -0
  335. package/dist/src/components/datepicker/templates/days.template.js +40 -0
  336. package/dist/src/components/datepicker/templates/dropdown.template.d.ts +10 -0
  337. package/dist/src/components/datepicker/templates/dropdown.template.js +50 -0
  338. package/dist/src/components/datepicker/templates/headers.template.d.ts +2 -0
  339. package/dist/src/components/datepicker/templates/headers.template.js +5 -0
  340. package/dist/src/components/datepicker/templates/months.template.d.ts +6 -0
  341. package/dist/src/components/datepicker/templates/months.template.js +10 -0
  342. package/dist/src/components/datepicker/templates/years.template.d.ts +6 -0
  343. package/dist/src/components/datepicker/templates/years.template.js +11 -0
  344. package/dist/src/components/datepicker/test/datepicker_test.d.ts +2 -0
  345. package/dist/src/components/datepicker/test/datepicker_test.js +134 -0
  346. package/dist/src/components/datepicker/utils/day.helper.d.ts +5 -0
  347. package/dist/src/components/datepicker/utils/day.helper.js +53 -0
  348. package/dist/src/components/datepicker/utils/formatter.d.ts +2 -0
  349. package/dist/src/components/datepicker/utils/formatter.js +9 -0
  350. package/dist/src/components/datepicker/utils/index.d.ts +11 -0
  351. package/dist/src/components/datepicker/utils/index.js +11 -0
  352. package/dist/src/components/datepicker/utils/locale.helper.d.ts +144 -0
  353. package/dist/src/components/datepicker/utils/locale.helper.js +151 -0
  354. package/dist/src/components/datepicker/utils/month.helper.d.ts +3 -0
  355. package/dist/src/components/datepicker/utils/month.helper.js +24 -0
  356. package/dist/src/components/datepicker/utils/string.helper.d.ts +2 -0
  357. package/dist/src/components/datepicker/utils/string.helper.js +4 -0
  358. package/dist/src/components/db-connection-select/bundle.js +7 -6
  359. package/dist/src/components/db-connection-select/bundle.js.gz +0 -0
  360. package/dist/src/components/db-connection-select/db-connection-select.component.d.ts +3 -0
  361. package/dist/src/components/db-connection-select/db-connection-select.component.js +4 -0
  362. package/dist/src/components/divider/bundle.js +61 -35
  363. package/dist/src/components/divider/bundle.js.gz +0 -0
  364. package/dist/src/components/divider/divider.component.d.ts +4 -6
  365. package/dist/src/components/divider/divider.component.js +10 -14
  366. package/dist/src/components/divider/divider.style.js +41 -31
  367. package/dist/src/components/document/bundle.js +50 -48
  368. package/dist/src/components/document/bundle.js.gz +0 -0
  369. package/dist/src/components/document/demo/document-demo.d.ts +12 -0
  370. package/dist/src/components/document/demo/document-demo.js +40 -0
  371. package/dist/src/components/document/document.component.d.ts +12 -1
  372. package/dist/src/components/document/document.component.js +18 -6
  373. package/dist/src/components/document/document.style.js +21 -36
  374. package/dist/src/components/dropdown/bundle.js +117 -101
  375. package/dist/src/components/dropdown/bundle.js.gz +0 -0
  376. package/dist/src/components/dropdown/controllers/base.controller.d.ts +18 -0
  377. package/dist/src/components/dropdown/controllers/base.controller.js +22 -0
  378. package/dist/src/components/dropdown/controllers/dropdown.controller.d.ts +50 -0
  379. package/dist/src/components/dropdown/controllers/dropdown.controller.js +408 -0
  380. package/dist/src/components/dropdown/controllers/index.d.ts +3 -0
  381. package/dist/src/components/dropdown/controllers/index.js +3 -0
  382. package/dist/src/components/dropdown/dropdown.component.d.ts +2 -1
  383. package/dist/src/components/dropdown/dropdown.component.js +1 -0
  384. package/dist/src/components/dropdown/dropdown.style.js +68 -68
  385. package/dist/src/components/dropdown/interfaces/controller-interfaces.d.ts +79 -0
  386. package/dist/src/components/dropdown/interfaces/controller-interfaces.js +2 -0
  387. package/dist/src/components/dropdown/interfaces/index.d.ts +2 -0
  388. package/dist/src/components/dropdown/interfaces/index.js +2 -0
  389. package/dist/src/components/dropdown/templates/nr-dropdown-item.d.ts +12 -0
  390. package/dist/src/components/dropdown/templates/nr-dropdown-item.js +55 -0
  391. package/dist/src/components/dropdown/templates/nr-dropdown-item.style.d.ts +2 -0
  392. package/dist/src/components/dropdown/templates/nr-dropdown-item.style.js +34 -0
  393. package/dist/src/components/dropdown/templates/nr-dropdown-menu.d.ts +18 -0
  394. package/dist/src/components/dropdown/templates/nr-dropdown-menu.js +70 -0
  395. package/dist/src/components/dropdown/templates/nr-dropdown-menu.style.d.ts +2 -0
  396. package/dist/src/components/dropdown/templates/nr-dropdown-menu.style.js +49 -0
  397. package/dist/src/components/file-upload/bundle.js +82 -76
  398. package/dist/src/components/file-upload/bundle.js.gz +0 -0
  399. package/dist/src/components/file-upload/demo/file-upload-demo.d.ts +18 -0
  400. package/dist/src/components/file-upload/demo/file-upload-demo.js +156 -0
  401. package/dist/src/components/file-upload/file-upload.component.d.ts +2 -1
  402. package/dist/src/components/file-upload/file-upload.component.js +1 -0
  403. package/dist/src/components/file-upload/styles.js +59 -59
  404. package/dist/src/components/flex/bundle.js +18 -8
  405. package/dist/src/components/flex/bundle.js.gz +0 -0
  406. package/dist/src/components/flex/flex.component.d.ts +4 -1
  407. package/dist/src/components/flex/flex.component.js +7 -4
  408. package/dist/src/components/flex/flex.style.js +2 -2
  409. package/dist/src/components/form/bundle.js +22 -10
  410. package/dist/src/components/form/bundle.js.gz +0 -0
  411. package/dist/src/components/form/controllers/submission.controller.d.ts +60 -0
  412. package/dist/src/components/form/controllers/submission.controller.js +220 -0
  413. package/dist/src/components/form/controllers/validation.controller.d.ts +87 -0
  414. package/dist/src/components/form/controllers/validation.controller.js +236 -0
  415. package/dist/src/components/form/form.component.d.ts +4 -1
  416. package/dist/src/components/form/form.component.js +5 -1
  417. package/dist/src/components/form/form.style.js +2 -2
  418. package/dist/src/components/form/interfaces/validation.interface.d.ts +118 -0
  419. package/dist/src/components/form/interfaces/validation.interface.js +7 -0
  420. package/dist/src/components/grid/bundle.js +26 -14
  421. package/dist/src/components/grid/bundle.js.gz +0 -0
  422. package/dist/src/components/grid/col.component.d.ts +4 -1
  423. package/dist/src/components/grid/col.component.js +4 -1
  424. package/dist/src/components/grid/col.style.js +2 -2
  425. package/dist/src/components/grid/row.component.d.ts +4 -1
  426. package/dist/src/components/grid/row.component.js +4 -1
  427. package/dist/src/components/grid/row.style.js +2 -2
  428. package/dist/src/components/icon/bundle.js +78 -252
  429. package/dist/src/components/icon/bundle.js.gz +0 -0
  430. package/dist/src/components/icon/icon-paths.d.ts +2 -0
  431. package/dist/src/components/icon/icon-paths.js +141 -0
  432. package/dist/src/components/icon/icon.component.d.ts +10 -12
  433. package/dist/src/components/icon/icon.component.js +42 -93
  434. package/dist/src/components/icon/icon.style.js +42 -130
  435. package/dist/src/components/icon/icon.variables.js +9 -9
  436. package/dist/src/components/icon/mixins/clickable-mixin.d.ts +57 -0
  437. package/dist/src/components/icon/mixins/clickable-mixin.js +111 -0
  438. package/dist/src/components/icon/mixins/index.d.ts +7 -0
  439. package/dist/src/components/icon/mixins/index.js +7 -0
  440. package/dist/src/components/iconpicker/bundle.js +859 -1511
  441. package/dist/src/components/iconpicker/bundle.js.gz +0 -0
  442. package/dist/src/components/iconpicker/controllers/event.controller.d.ts +38 -0
  443. package/dist/src/components/iconpicker/controllers/event.controller.js +68 -0
  444. package/dist/src/components/iconpicker/controllers/index.d.ts +9 -0
  445. package/dist/src/components/iconpicker/controllers/index.js +9 -0
  446. package/dist/src/components/iconpicker/controllers/search.controller.d.ts +34 -0
  447. package/dist/src/components/iconpicker/controllers/search.controller.js +55 -0
  448. package/dist/src/components/iconpicker/controllers/selection.controller.d.ts +27 -0
  449. package/dist/src/components/iconpicker/controllers/selection.controller.js +39 -0
  450. package/dist/src/components/iconpicker/icon-picker.component.d.ts +2 -1
  451. package/dist/src/components/iconpicker/icon-picker.component.js +1 -0
  452. package/dist/src/components/iconpicker/icon-picker.style.js +13 -13
  453. package/dist/src/components/iconpicker/interfaces/icon-picker.interface.d.ts +13 -0
  454. package/dist/src/components/iconpicker/interfaces/icon-picker.interface.js +7 -0
  455. package/dist/src/components/iconpicker/interfaces/index.d.ts +7 -0
  456. package/dist/src/components/iconpicker/interfaces/index.js +7 -0
  457. package/dist/src/components/iconpicker/utils/icon-filter.utils.d.ts +29 -0
  458. package/dist/src/components/iconpicker/utils/icon-filter.utils.js +96 -0
  459. package/dist/src/components/iconpicker/utils/icon-loader.utils.d.ts +39 -0
  460. package/dist/src/components/iconpicker/utils/icon-loader.utils.js +115 -0
  461. package/dist/src/components/iconpicker/utils/index.d.ts +8 -0
  462. package/dist/src/components/iconpicker/utils/index.js +8 -0
  463. package/dist/src/components/iconpicker/utils/lucide-icons.d.ts +10 -0
  464. package/dist/src/components/iconpicker/utils/lucide-icons.js +1624 -0
  465. package/dist/src/components/image/bundle.js +43 -33
  466. package/dist/src/components/image/bundle.js.gz +0 -0
  467. package/dist/src/components/image/image.component.d.ts +10 -1
  468. package/dist/src/components/image/image.component.js +13 -3
  469. package/dist/src/components/image/image.style.js +19 -26
  470. package/dist/src/components/input/bundle.js +420 -644
  471. package/dist/src/components/input/bundle.js.gz +0 -0
  472. package/dist/src/components/input/controllers/base.controller.d.ts +35 -0
  473. package/dist/src/components/input/controllers/base.controller.js +13 -0
  474. package/dist/src/components/input/controllers/event.controller.d.ts +111 -0
  475. package/dist/src/components/input/controllers/event.controller.js +355 -0
  476. package/dist/src/components/input/controllers/index.d.ts +14 -0
  477. package/dist/src/components/input/controllers/index.js +10 -0
  478. package/dist/src/components/input/controllers/state.controller.d.ts +153 -0
  479. package/dist/src/components/input/controllers/state.controller.js +245 -0
  480. package/dist/src/components/input/controllers/validation.controller.d.ts +205 -0
  481. package/dist/src/components/input/controllers/validation.controller.js +698 -0
  482. package/dist/src/components/input/input.component.d.ts +16 -3
  483. package/dist/src/components/input/input.component.js +43 -27
  484. package/dist/src/components/input/input.style.d.ts +1 -1
  485. package/dist/src/components/input/input.style.js +331 -634
  486. package/dist/src/components/input/mixins/focus-mixin.d.ts +60 -0
  487. package/dist/src/components/input/mixins/focus-mixin.js +65 -0
  488. package/dist/src/components/input/mixins/index.d.ts +12 -0
  489. package/dist/src/components/input/mixins/index.js +9 -0
  490. package/dist/src/components/input/mixins/number-mixin.d.ts +51 -0
  491. package/dist/src/components/input/mixins/number-mixin.js +128 -0
  492. package/dist/src/components/input/mixins/selection-mixin.d.ts +57 -0
  493. package/dist/src/components/input/mixins/selection-mixin.js +80 -0
  494. package/dist/src/components/input/test/nr-input_test.d.ts +2 -0
  495. package/dist/src/components/input/test/nr-input_test.js +159 -0
  496. package/dist/src/components/input/utils/index.d.ts +8 -0
  497. package/dist/src/components/input/utils/index.js +8 -0
  498. package/dist/src/components/input/utils/input-renderers.d.ts +54 -0
  499. package/dist/src/components/input/utils/input-renderers.js +178 -0
  500. package/dist/src/components/input/utils/input-validation.utils.d.ts +26 -0
  501. package/dist/src/components/input/utils/input-validation.utils.js +103 -0
  502. package/dist/src/components/kv-secret-select/bundle.js +2 -1
  503. package/dist/src/components/kv-secret-select/bundle.js.gz +0 -0
  504. package/dist/src/components/kv-secret-select/kv-secret-select.component.d.ts +3 -0
  505. package/dist/src/components/kv-secret-select/kv-secret-select.component.js +4 -0
  506. package/dist/src/components/label/bundle.js +37 -60
  507. package/dist/src/components/label/bundle.js.gz +0 -0
  508. package/dist/src/components/label/label.component.d.ts +8 -4
  509. package/dist/src/components/label/label.component.js +9 -14
  510. package/dist/src/components/label/label.style.js +17 -25
  511. package/dist/src/components/label/label.style.variables.js +18 -18
  512. package/dist/src/components/layout/bundle.js +86 -70
  513. package/dist/src/components/layout/bundle.js.gz +0 -0
  514. package/dist/src/components/layout/content.component.d.ts +2 -1
  515. package/dist/src/components/layout/content.component.js +2 -1
  516. package/dist/src/components/layout/content.style.js +3 -3
  517. package/dist/src/components/layout/footer.component.d.ts +2 -1
  518. package/dist/src/components/layout/footer.component.js +3 -2
  519. package/dist/src/components/layout/footer.style.js +7 -7
  520. package/dist/src/components/layout/header.component.d.ts +2 -1
  521. package/dist/src/components/layout/header.component.js +3 -2
  522. package/dist/src/components/layout/header.style.js +7 -7
  523. package/dist/src/components/layout/layout.component.d.ts +4 -7
  524. package/dist/src/components/layout/layout.component.js +9 -22
  525. package/dist/src/components/layout/layout.style.js +1 -1
  526. package/dist/src/components/layout/sider.component.d.ts +3 -1
  527. package/dist/src/components/layout/sider.component.js +3 -1
  528. package/dist/src/components/layout/sider.style.js +29 -29
  529. package/dist/src/components/menu/bundle.js +135 -125
  530. package/dist/src/components/menu/bundle.js.gz +0 -0
  531. package/dist/src/components/menu/controllers/accessibility.controller.d.ts +86 -0
  532. package/dist/src/components/menu/controllers/accessibility.controller.js +235 -0
  533. package/dist/src/components/menu/controllers/base.controller.d.ts +41 -0
  534. package/dist/src/components/menu/controllers/base.controller.js +61 -0
  535. package/dist/src/components/menu/controllers/index.d.ts +10 -0
  536. package/dist/src/components/menu/controllers/index.js +10 -0
  537. package/dist/src/components/menu/controllers/keyboard.controller.d.ts +84 -0
  538. package/dist/src/components/menu/controllers/keyboard.controller.js +328 -0
  539. package/dist/src/components/menu/controllers/state.controller.d.ts +106 -0
  540. package/dist/src/components/menu/controllers/state.controller.js +249 -0
  541. package/dist/src/components/menu/interfaces/controller.interface.d.ts +51 -0
  542. package/dist/src/components/menu/interfaces/controller.interface.js +7 -0
  543. package/dist/src/components/menu/interfaces/index.d.ts +7 -0
  544. package/dist/src/components/menu/interfaces/index.js +7 -0
  545. package/dist/src/components/menu/menu.component.d.ts +2 -1
  546. package/dist/src/components/menu/menu.component.js +1 -0
  547. package/dist/src/components/menu/menu.style.js +87 -87
  548. package/dist/src/components/modal/bundle.js +105 -96
  549. package/dist/src/components/modal/bundle.js.gz +0 -0
  550. package/dist/src/components/modal/controllers/index.d.ts +8 -0
  551. package/dist/src/components/modal/controllers/index.js +8 -0
  552. package/dist/src/components/modal/controllers/modal-drag-controller.d.ts +39 -0
  553. package/dist/src/components/modal/controllers/modal-drag-controller.js +108 -0
  554. package/dist/src/components/modal/controllers/modal-keyboard-controller.d.ts +36 -0
  555. package/dist/src/components/modal/controllers/modal-keyboard-controller.js +128 -0
  556. package/dist/src/components/modal/modal.component.d.ts +2 -1
  557. package/dist/src/components/modal/modal.component.js +1 -0
  558. package/dist/src/components/modal/modal.style.js +69 -71
  559. package/dist/src/components/panel/bundle.js +190 -391
  560. package/dist/src/components/panel/bundle.js.gz +0 -0
  561. package/dist/src/components/panel/controllers/index.d.ts +8 -0
  562. package/dist/src/components/panel/controllers/index.js +8 -0
  563. package/dist/src/components/panel/controllers/panel-drag-controller.d.ts +40 -0
  564. package/dist/src/components/panel/controllers/panel-drag-controller.js +118 -0
  565. package/dist/src/components/panel/controllers/panel-resize-controller.d.ts +37 -0
  566. package/dist/src/components/panel/controllers/panel-resize-controller.js +124 -0
  567. package/dist/src/components/panel/panel.component.d.ts +2 -1
  568. package/dist/src/components/panel/panel.component.js +1 -0
  569. package/dist/src/components/panel/panel.style.js +65 -65
  570. package/dist/src/components/popconfirm/bundle.js +107 -93
  571. package/dist/src/components/popconfirm/bundle.js.gz +0 -0
  572. package/dist/src/components/popconfirm/popconfirm-manager.component.d.ts +2 -1
  573. package/dist/src/components/popconfirm/popconfirm-manager.component.js +1 -0
  574. package/dist/src/components/popconfirm/popconfirm-manager.style.js +16 -16
  575. package/dist/src/components/popconfirm/popconfirm.component.d.ts +2 -1
  576. package/dist/src/components/popconfirm/popconfirm.component.js +9 -5
  577. package/dist/src/components/popconfirm/popconfirm.style.js +43 -43
  578. package/dist/src/components/presence/bundle.js +528 -0
  579. package/dist/src/components/presence/bundle.js.gz +0 -0
  580. package/dist/src/components/presence/index.d.ts +10 -0
  581. package/dist/src/components/presence/index.js +10 -0
  582. package/dist/src/components/presence/presence-avatars.component.d.ts +40 -0
  583. package/dist/src/components/presence/presence-avatars.component.js +83 -0
  584. package/dist/src/components/presence/presence-avatars.style.d.ts +7 -0
  585. package/dist/src/components/presence/presence-avatars.style.js +105 -0
  586. package/dist/src/components/presence/presence-chat.component.d.ts +53 -0
  587. package/dist/src/components/presence/presence-chat.component.js +228 -0
  588. package/dist/src/components/presence/presence-chat.style.d.ts +7 -0
  589. package/dist/src/components/presence/presence-chat.style.js +248 -0
  590. package/dist/src/components/presence/presence.component.d.ts +71 -0
  591. package/dist/src/components/presence/presence.component.js +263 -0
  592. package/dist/src/components/presence/presence.style.d.ts +7 -0
  593. package/dist/src/components/presence/presence.style.js +12 -0
  594. package/dist/src/components/presence/presence.types.d.ts +31 -0
  595. package/dist/src/components/presence/presence.types.js +7 -0
  596. package/dist/src/components/presence/react.d.ts +24 -0
  597. package/dist/src/components/presence/react.js +41 -0
  598. package/dist/src/components/radio/bundle.js +56 -86
  599. package/dist/src/components/radio/bundle.js.gz +0 -0
  600. package/dist/src/components/radio/radio.component.d.ts +8 -2
  601. package/dist/src/components/radio/radio.component.js +17 -9
  602. package/dist/src/components/radio/radio.style.js +30 -77
  603. package/dist/src/components/radio-group/bundle.js +125 -89
  604. package/dist/src/components/radio-group/bundle.js.gz +0 -0
  605. package/dist/src/components/radio-group/controllers/focus.controller.d.ts +98 -0
  606. package/dist/src/components/radio-group/controllers/focus.controller.js +216 -0
  607. package/dist/src/components/radio-group/controllers/group.controller.d.ts +140 -0
  608. package/dist/src/components/radio-group/controllers/group.controller.js +179 -0
  609. package/dist/src/components/radio-group/controllers/index.d.ts +11 -0
  610. package/dist/src/components/radio-group/controllers/index.js +11 -0
  611. package/dist/src/components/radio-group/controllers/keyboard.controller.d.ts +24 -0
  612. package/dist/src/components/radio-group/controllers/keyboard.controller.js +93 -0
  613. package/dist/src/components/radio-group/controllers/ripple.controller.d.ts +59 -0
  614. package/dist/src/components/radio-group/controllers/ripple.controller.js +208 -0
  615. package/dist/src/components/radio-group/controllers/validation.controller.d.ts +73 -0
  616. package/dist/src/components/radio-group/controllers/validation.controller.js +108 -0
  617. package/dist/src/components/radio-group/interfaces/base-controller.interface.d.ts +75 -0
  618. package/dist/src/components/radio-group/interfaces/base-controller.interface.js +7 -0
  619. package/dist/src/components/radio-group/interfaces/focus-controller.interface.d.ts +40 -0
  620. package/dist/src/components/radio-group/interfaces/focus-controller.interface.js +7 -0
  621. package/dist/src/components/radio-group/interfaces/index.d.ts +11 -0
  622. package/dist/src/components/radio-group/interfaces/index.js +7 -0
  623. package/dist/src/components/radio-group/interfaces/ripple-controller.interface.d.ts +31 -0
  624. package/dist/src/components/radio-group/interfaces/ripple-controller.interface.js +7 -0
  625. package/dist/src/components/radio-group/interfaces/selection-controller.interface.d.ts +45 -0
  626. package/dist/src/components/radio-group/interfaces/selection-controller.interface.js +7 -0
  627. package/dist/src/components/radio-group/interfaces/validation-controller.interface.d.ts +48 -0
  628. package/dist/src/components/radio-group/interfaces/validation-controller.interface.js +7 -0
  629. package/dist/src/components/radio-group/radio-group.component.d.ts +5 -1
  630. package/dist/src/components/radio-group/radio-group.component.js +18 -10
  631. package/dist/src/components/radio-group/radio-group.style.js +44 -44
  632. package/dist/src/components/radio-group/test/radio_test.d.ts +2 -0
  633. package/dist/src/components/radio-group/test/radio_test.js +79 -0
  634. package/dist/src/components/select/bundle.js +260 -367
  635. package/dist/src/components/select/bundle.js.gz +0 -0
  636. package/dist/src/components/select/controllers/base.controller.d.ts +10 -0
  637. package/dist/src/components/select/controllers/base.controller.js +8 -0
  638. package/dist/src/components/select/controllers/dropdown.controller.d.ts +76 -0
  639. package/dist/src/components/select/controllers/dropdown.controller.js +281 -0
  640. package/dist/src/components/select/controllers/event.controller.d.ts +54 -0
  641. package/dist/src/components/select/controllers/event.controller.js +113 -0
  642. package/dist/src/components/select/controllers/focus.controller.d.ts +79 -0
  643. package/dist/src/components/select/controllers/focus.controller.js +230 -0
  644. package/dist/src/components/select/controllers/index.d.ts +9 -0
  645. package/dist/src/components/select/controllers/index.js +9 -0
  646. package/dist/src/components/select/controllers/keyboard.controller.d.ts +75 -0
  647. package/dist/src/components/select/controllers/keyboard.controller.js +369 -0
  648. package/dist/src/components/select/controllers/search.controller.d.ts +71 -0
  649. package/dist/src/components/select/controllers/search.controller.js +167 -0
  650. package/dist/src/components/select/controllers/selection.controller.d.ts +67 -0
  651. package/dist/src/components/select/controllers/selection.controller.js +217 -0
  652. package/dist/src/components/select/controllers/validation.controller.d.ts +66 -0
  653. package/dist/src/components/select/controllers/validation.controller.js +189 -0
  654. package/dist/src/components/select/interfaces/base-controller.interface.d.ts +147 -0
  655. package/dist/src/components/select/interfaces/base-controller.interface.js +2 -0
  656. package/dist/src/components/select/interfaces/controller-interfaces.d.ts +94 -0
  657. package/dist/src/components/select/interfaces/controller-interfaces.js +11 -0
  658. package/dist/src/components/select/interfaces/index.d.ts +3 -0
  659. package/dist/src/components/select/interfaces/index.js +3 -0
  660. package/dist/src/components/select/select.component.d.ts +12 -17
  661. package/dist/src/components/select/select.component.js +35 -35
  662. package/dist/src/components/select/select.style.js +184 -324
  663. package/dist/src/components/skeleton/bundle.js +82 -162
  664. package/dist/src/components/skeleton/bundle.js.gz +0 -0
  665. package/dist/src/components/skeleton/skeleton.component.d.ts +10 -5
  666. package/dist/src/components/skeleton/skeleton.component.js +20 -7
  667. package/dist/src/components/skeleton/skeleton.style.js +34 -133
  668. package/dist/src/components/slider-input/bundle.js +89 -88
  669. package/dist/src/components/slider-input/bundle.js.gz +0 -0
  670. package/dist/src/components/slider-input/slider-input.component.d.ts +11 -0
  671. package/dist/src/components/slider-input/slider-input.component.js +20 -8
  672. package/dist/src/components/slider-input/slider-input.style.js +47 -47
  673. package/dist/src/components/slider-input/slider-input.style.variables.js +32 -32
  674. package/dist/src/components/slider-input/utils/debounce.d.ts +2 -0
  675. package/dist/src/components/slider-input/utils/debounce.js +8 -0
  676. package/dist/src/components/slider-input/utils/index.d.ts +2 -0
  677. package/dist/src/components/slider-input/utils/index.js +2 -0
  678. package/dist/src/components/table/bundle.js +149 -128
  679. package/dist/src/components/table/bundle.js.gz +0 -0
  680. package/dist/src/components/table/controllers/base.controller.d.ts +15 -0
  681. package/dist/src/components/table/controllers/base.controller.js +13 -0
  682. package/dist/src/components/table/controllers/filter.controller.d.ts +48 -0
  683. package/dist/src/components/table/controllers/filter.controller.js +152 -0
  684. package/dist/src/components/table/controllers/index.d.ts +11 -0
  685. package/dist/src/components/table/controllers/index.js +11 -0
  686. package/dist/src/components/table/controllers/pagination.controller.d.ts +36 -0
  687. package/dist/src/components/table/controllers/pagination.controller.js +110 -0
  688. package/dist/src/components/table/controllers/selection.controller.d.ts +40 -0
  689. package/dist/src/components/table/controllers/selection.controller.js +120 -0
  690. package/dist/src/components/table/controllers/sort.controller.d.ts +32 -0
  691. package/dist/src/components/table/controllers/sort.controller.js +102 -0
  692. package/dist/src/components/table/interfaces/index.d.ts +7 -0
  693. package/dist/src/components/table/interfaces/index.js +7 -0
  694. package/dist/src/components/table/interfaces/table-host.interface.d.ts +48 -0
  695. package/dist/src/components/table/interfaces/table-host.interface.js +7 -0
  696. package/dist/src/components/table/table.component.d.ts +2 -1
  697. package/dist/src/components/table/table.component.js +1 -0
  698. package/dist/src/components/table/table.style.js +79 -79
  699. package/dist/src/components/table/templates/actions.template.d.ts +14 -0
  700. package/dist/src/components/table/templates/actions.template.js +15 -0
  701. package/dist/src/components/table/templates/column-filter.template.d.ts +24 -0
  702. package/dist/src/components/table/templates/column-filter.template.js +76 -0
  703. package/dist/src/components/table/templates/content.template.d.ts +37 -0
  704. package/dist/src/components/table/templates/content.template.js +208 -0
  705. package/dist/src/components/table/templates/empty.template.d.ts +8 -0
  706. package/dist/src/components/table/templates/empty.template.js +47 -0
  707. package/dist/src/components/table/templates/filter.template.d.ts +14 -0
  708. package/dist/src/components/table/templates/filter.template.js +28 -0
  709. package/dist/src/components/table/templates/index.d.ts +8 -0
  710. package/dist/src/components/table/templates/index.js +8 -0
  711. package/dist/src/components/table/templates/loading.template.d.ts +21 -0
  712. package/dist/src/components/table/templates/loading.template.js +51 -0
  713. package/dist/src/components/table/templates/pagination.template.d.ts +24 -0
  714. package/dist/src/components/table/templates/pagination.template.js +52 -0
  715. package/dist/src/components/tabs/bundle.js +462 -663
  716. package/dist/src/components/tabs/bundle.js.gz +0 -0
  717. package/dist/src/components/tabs/controllers/base.controller.d.ts +49 -0
  718. package/dist/src/components/tabs/controllers/base.controller.js +26 -0
  719. package/dist/src/components/tabs/controllers/dragdrop.controller.d.ts +84 -0
  720. package/dist/src/components/tabs/controllers/dragdrop.controller.js +202 -0
  721. package/dist/src/components/tabs/controllers/editable.controller.d.ts +100 -0
  722. package/dist/src/components/tabs/controllers/editable.controller.js +242 -0
  723. package/dist/src/components/tabs/controllers/event.controller.d.ts +104 -0
  724. package/dist/src/components/tabs/controllers/event.controller.js +239 -0
  725. package/dist/src/components/tabs/controllers/index.d.ts +12 -0
  726. package/dist/src/components/tabs/controllers/index.js +18 -0
  727. package/dist/src/components/tabs/controllers/keyboard.controller.d.ts +85 -0
  728. package/dist/src/components/tabs/controllers/keyboard.controller.js +233 -0
  729. package/dist/src/components/tabs/controllers/popout.controller.d.ts +96 -0
  730. package/dist/src/components/tabs/controllers/popout.controller.js +441 -0
  731. package/dist/src/components/tabs/tabs.component.d.ts +6 -1
  732. package/dist/src/components/tabs/tabs.component.js +8 -1
  733. package/dist/src/components/tabs/tabs.style.js +200 -201
  734. package/dist/src/components/tag/bundle.js +44 -36
  735. package/dist/src/components/tag/bundle.js.gz +0 -0
  736. package/dist/src/components/tag/tag.component.d.ts +7 -6
  737. package/dist/src/components/tag/tag.component.js +10 -19
  738. package/dist/src/components/tag/tag.style.js +20 -24
  739. package/dist/src/components/textarea/bundle.js +131 -94
  740. package/dist/src/components/textarea/bundle.js.gz +0 -0
  741. package/dist/src/components/textarea/controllers/base.controller.d.ts +43 -0
  742. package/dist/src/components/textarea/controllers/base.controller.js +19 -0
  743. package/dist/src/components/textarea/controllers/event.controller.d.ts +169 -0
  744. package/dist/src/components/textarea/controllers/event.controller.js +408 -0
  745. package/dist/src/components/textarea/controllers/index.d.ts +9 -0
  746. package/dist/src/components/textarea/controllers/index.js +9 -0
  747. package/dist/src/components/textarea/controllers/validation.controller.d.ts +133 -0
  748. package/dist/src/components/textarea/controllers/validation.controller.js +315 -0
  749. package/dist/src/components/textarea/textarea.component.d.ts +7 -1
  750. package/dist/src/components/textarea/textarea.component.js +10 -3
  751. package/dist/src/components/textarea/textarea.style.d.ts +1 -13
  752. package/dist/src/components/textarea/textarea.style.js +79 -91
  753. package/dist/src/components/timeline/bundle.js +71 -134
  754. package/dist/src/components/timeline/bundle.js.gz +0 -0
  755. package/dist/src/components/timeline/timeline.component.d.ts +9 -6
  756. package/dist/src/components/timeline/timeline.component.js +16 -13
  757. package/dist/src/components/timeline/timeline.style.d.ts +0 -7
  758. package/dist/src/components/timeline/timeline.style.js +41 -122
  759. package/dist/src/components/timepicker/bundle.js +196 -166
  760. package/dist/src/components/timepicker/bundle.js.gz +0 -0
  761. package/dist/src/components/timepicker/controllers/formatting.controller.d.ts +93 -0
  762. package/dist/src/components/timepicker/controllers/formatting.controller.js +195 -0
  763. package/dist/src/components/timepicker/controllers/index.d.ts +9 -0
  764. package/dist/src/components/timepicker/controllers/index.js +9 -0
  765. package/dist/src/components/timepicker/controllers/selection.controller.d.ts +72 -0
  766. package/dist/src/components/timepicker/controllers/selection.controller.js +175 -0
  767. package/dist/src/components/timepicker/controllers/validation.controller.d.ts +88 -0
  768. package/dist/src/components/timepicker/controllers/validation.controller.js +200 -0
  769. package/dist/src/components/timepicker/interfaces/timepicker.interface.d.ts +103 -0
  770. package/dist/src/components/timepicker/interfaces/timepicker.interface.js +7 -0
  771. package/dist/src/components/timepicker/test/timepicker_test.d.ts +7 -0
  772. package/dist/src/components/timepicker/test/timepicker_test.js +218 -0
  773. package/dist/src/components/timepicker/timepicker.component.d.ts +2 -1
  774. package/dist/src/components/timepicker/timepicker.component.js +1 -0
  775. package/dist/src/components/timepicker/timepicker.style.js +42 -42
  776. package/dist/src/components/timepicker/timepicker.style.variables.js +91 -91
  777. package/dist/src/components/timepicker/utils/time.utils.d.ts +87 -0
  778. package/dist/src/components/timepicker/utils/time.utils.js +235 -0
  779. package/dist/src/components/toast/bundle.js +97 -81
  780. package/dist/src/components/toast/bundle.js.gz +0 -0
  781. package/dist/src/components/toast/controllers/base.controller.d.ts +20 -0
  782. package/dist/src/components/toast/controllers/base.controller.js +12 -0
  783. package/dist/src/components/toast/controllers/index.d.ts +8 -0
  784. package/dist/src/components/toast/controllers/index.js +7 -0
  785. package/dist/src/components/toast/toast.component.d.ts +2 -1
  786. package/dist/src/components/toast/toast.component.js +1 -0
  787. package/dist/src/components/toast/toast.style.js +62 -62
  788. package/dist/src/components/tooltips/bundle.js +10 -10
  789. package/dist/src/components/tooltips/bundle.js.gz +0 -0
  790. package/dist/src/components/tooltips/demo/tooltips-demo.d.ts +18 -0
  791. package/dist/src/components/tooltips/demo/tooltips-demo.js +132 -0
  792. package/dist/src/components/tooltips/test/tooltips_test.d.ts +2 -0
  793. package/dist/src/components/tooltips/test/tooltips_test.js +145 -0
  794. package/dist/src/components/tooltips/tooltips.component.d.ts +8 -0
  795. package/dist/src/components/tooltips/tooltips.component.js +9 -1
  796. package/dist/src/components/tooltips/tooltips.style.js +6 -6
  797. package/dist/src/components/video/bundle.js +47 -36
  798. package/dist/src/components/video/bundle.js.gz +0 -0
  799. package/dist/src/components/video/video.component.d.ts +12 -1
  800. package/dist/src/components/video/video.component.js +18 -6
  801. package/dist/src/components/video/video.style.js +18 -24
  802. package/package.json +51 -12
  803. package/packages/common/dist/VERSIONS.md +2 -2
  804. package/packages/common/dist/shared/base-mixin.d.ts +21 -19
  805. package/packages/common/dist/shared/base-mixin.d.ts.map +1 -1
  806. package/packages/common/dist/shared/base-mixin.js +102 -18
  807. package/packages/common/dist/shared/base-mixin.js.map +1 -1
  808. package/packages/common/dist/shared/index.d.ts +1 -0
  809. package/packages/common/dist/shared/index.d.ts.map +1 -1
  810. package/packages/common/dist/shared/index.js +2 -0
  811. package/packages/common/dist/shared/index.js.map +1 -1
  812. package/packages/common/dist/shared/style-injector.d.ts +11 -0
  813. package/packages/common/dist/shared/style-injector.d.ts.map +1 -0
  814. package/packages/common/dist/shared/style-injector.js +53 -0
  815. package/packages/common/dist/shared/style-injector.js.map +1 -0
  816. package/packages/common/dist/shared/theme-mixin.d.ts +2 -24
  817. package/packages/common/dist/shared/theme-mixin.d.ts.map +1 -1
  818. package/packages/common/dist/shared/theme-mixin.js +5 -38
  819. package/packages/common/dist/shared/theme-mixin.js.map +1 -1
  820. package/packages/themes/dist/default.css +0 -10
  821. package/packages/themes/dist/package.json +1 -1
@@ -1,4 +1,4 @@
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";
1
+ import{css as t,nothing as e,html as n,LitElement as i}from"lit";import{property as o,state as s,customElement as r}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{repeat as c}from"lit/directives/repeat.js";import{styleMap as d}from"lit/directives/style-map.js";import{io as h}from"socket.io-client";
2
2
  /**
3
3
  * @license
4
4
  * Copyright 2021 Google LLC
@@ -8,13 +8,13 @@ import{css as t,nothing as e,html as n,LitElement as i}from"lit";import{property
8
8
  * @license
9
9
  * Copyright 2021 Google LLC
10
10
  * SPDX-License-Identifier: BSD-3-Clause
11
- */let v=f,g=!1;
11
+ */let g=f,m=!1;
12
12
  /**
13
13
  * @license
14
14
  * Copyright 2021 Google LLC
15
15
  * SPDX-License-Identifier: BSD-3-Clause
16
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));
17
+ class v{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 v(t));
18
18
  /**
19
19
  * @license
20
20
  * Copyright 2020 Google LLC
@@ -25,7 +25,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
25
25
  * @license
26
26
  * Copyright 2014 Travis Webb
27
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]}
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,s=0,r=40164,a=0,l=52210;for(let c=0;c<t.length;c++)n^=t.charCodeAt(c),e=435*n,i=435*o,s=435*r,a=435*l,s+=n<<8,a+=o<<8,i+=e>>>16,n=65535&e,s+=i>>>16,o=65535&i,l=a+(s>>>16)&65535,r=65535&s;return x[l>>8]+x[255&l]+x[r>>8]+x[255&r]+x[o>>8]+x[255&o]+x[n>>8]+x[255&n]}
29
29
  /**
30
30
  * @license
31
31
  * Copyright 2020 Google LLC
@@ -40,12 +40,12 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
40
40
  * @license
41
41
  * Copyright 2021 Google LLC
42
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`
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 P,M,T,E,C,z="",O=new y;O.resolve();let I=0;const R=t=>(function(t){if(m)throw new Error("lit-localize can only be configured once");g=t,m=!0}((t,e)=>k(C,t,e)),z=M=t.sourceLocale,T=new Set(t.targetLocales),T.add(t.sourceLocale),E=t.loadLocale,{getLocale:A,setLocale:j}),A=()=>z,j=t=>{if(t===(P??z))return O.promise;if(!T||!E)throw new Error("Internal error");if(!T.has(t))throw new Error("Invalid locale code");I++;const e=I;P=t,O.settled&&(O=new y),S({status:"loading",loadingLocale:t});return(t===M?Promise.resolve({templates:void 0}):E(t)).then(n=>{I===e&&(z=t,P=void 0,C=n.templates,S({status:"ready",readyLocale:t}),O.resolve())},n=>{I===e&&(S({status:"error",errorLocale:t,errorMessage:n.toString()}),O.reject(n))}),O.promise};var D=t`
44
44
  :host {
45
45
  display: block;
46
46
  width: 100%;
47
47
  height: 100%;
48
- min-width: var(--nuraly-size-chatbot-min-width, 320px);
48
+ min-width: 320px;
49
49
  box-sizing: border-box;
50
50
  overflow: visible;
51
51
 
@@ -60,10 +60,10 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
60
60
  display: flex;
61
61
  width: 100%;
62
62
  height: 100%;
63
- background-color: var(--nuraly-color-chatbot-background, #ffffff);
64
- border-radius: var(--nuraly-border-radius-chatbot);
63
+ background-color: #ffffff;
64
+ border-radius: 8px;
65
65
  position: relative;
66
- border: var(--nuraly-border-width-chatbot-input, 1px) solid var(--nuraly-color-chatbot-border, #e0e0e0);
66
+ border: 1px solid #e0e0e0;
67
67
  }
68
68
 
69
69
  .chatbot-container {
@@ -71,7 +71,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
71
71
  flex-direction: column;
72
72
  flex: 1;
73
73
  min-height: 0;
74
- min-width: var(--nuraly-size-chatbot-container-min-width, 300px);
74
+ min-width: 300px;
75
75
  }
76
76
 
77
77
  .chatbot-container--with-sidebar,
@@ -93,7 +93,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
93
93
  justify-content: space-between;
94
94
  gap: 0.5rem;
95
95
  padding: 0.5rem;
96
- border-bottom: 1px solid var(--nuraly-color-chatbot-border, #e0e0e0);
96
+ border-bottom: 1px solid #e0e0e0;
97
97
  }
98
98
 
99
99
  .chatbot-content {
@@ -105,7 +105,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
105
105
  }
106
106
 
107
107
  :host([boxed]) .chat-container {
108
- background-color: var(--nuraly-color-chatbot-background, #ffffff);
108
+ background-color: #ffffff;
109
109
  border: none;
110
110
  border-radius: 0;
111
111
  }
@@ -116,9 +116,9 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
116
116
 
117
117
  :host([boxed]) .chatbot-main {
118
118
  width: 100%;
119
- max-width: var(--nuraly-size-chatbot-boxed-max-width, 768px);
119
+ max-width: 768px;
120
120
  margin: 0 auto;
121
- background-color: var(--nuraly-color-chatbot-background, #ffffff);
121
+ background-color: #ffffff;
122
122
  border: none;
123
123
  border-radius: 0;
124
124
  box-shadow: none;
@@ -127,23 +127,23 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
127
127
 
128
128
  /* Boxed layout with threads: background comes from theme variable with white fallback */
129
129
  :host([boxed]) .chat-container--boxed.chat-container--with-threads {
130
- background-color: var(--nuraly-color-chatbot-background, #ffffff);
130
+ background-color: #ffffff;
131
131
  }
132
132
 
133
133
  .chat-container--boxed.chat-container--with-threads .chatbot-main {
134
- background-color: var(--nuraly-color-chatbot-background, #ffffff);
134
+ background-color: #ffffff;
135
135
  }
136
136
 
137
137
  .chat-container--boxed.chat-container--with-threads .chat-box {
138
- background-color: var(--nuraly-color-chatbot-background, #ffffff);
138
+ background-color: #ffffff;
139
139
  }
140
140
 
141
141
  .chat-container--boxed.chat-container--with-threads .messages {
142
- background-color: var(--nuraly-color-chatbot-background, #ffffff);
142
+ background-color: #ffffff;
143
143
  }
144
144
 
145
145
  .chat-container--boxed.chat-container--with-threads .input-container {
146
- background-color: var(--nuraly-color-chatbot-background, #ffffff);
146
+ background-color: #ffffff;
147
147
  }
148
148
 
149
149
  :host([boxed]) .chatbot-header {
@@ -175,13 +175,13 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
175
175
  left: 50%;
176
176
  transform: translate(-50%, calc(-50% - 80px));
177
177
  width: 100%;
178
- max-width: var(--nuraly-size-chatbot-boxed-max-width, 768px);
178
+ max-width: 768px;
179
179
  height: auto;
180
180
  padding: 0;
181
181
  display: flex;
182
182
  flex-direction: column;
183
183
  align-items: center;
184
- gap: var(--nuraly-spacing-06, 1.5rem);
184
+ gap: 1.5rem;
185
185
  }
186
186
 
187
187
  :host([boxed]) .empty-state__content {
@@ -195,7 +195,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
195
195
  left: 50%;
196
196
  transform: translate(-50%, calc(-50% + 40px));
197
197
  width: 100%;
198
- max-width: var(--nuraly-size-chatbot-boxed-max-width, 768px);
198
+ max-width: 768px;
199
199
  }
200
200
 
201
201
  :host([boxed]) .suggestion-container {
@@ -205,38 +205,38 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
205
205
  :host([boxed]) .messages {
206
206
  box-shadow: none;
207
207
  margin-bottom: 0;
208
- background-color: var(--nuraly-color-chatbot-background, #ffffff);
208
+ background-color: #ffffff;
209
209
  align-items: stretch;
210
210
  width: 98%;
211
- padding: var(--nuraly-spacing-chatbot-message-padding, 8px) var(--nuraly-spacing-06, 1.5rem);
211
+ padding: 8px 1.5rem;
212
212
  }
213
213
 
214
214
  :host([boxed]) .input-container {
215
215
  box-shadow: none;
216
216
  margin: 0;
217
- background-color: var(--nuraly-color-chatbot-background, #ffffff);
217
+ background-color: #ffffff;
218
218
  }
219
219
 
220
220
  .chat-container--with-threads {
221
- grid-template-columns: var(--nuraly-size-chatbot-sidebar-width) 1fr;
221
+ grid-template-columns: 240px 1fr;
222
222
  }
223
223
 
224
224
  .chat-container--disabled {
225
- opacity: var(--nuraly-opacity-chatbot-disabled, 0.5);
225
+ opacity: 0.5;
226
226
  pointer-events: none;
227
227
  }
228
228
 
229
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);
230
+ background-color: #f4f4f4;
231
+ border: 0.25rem dashed #7c3aed;
232
+ border-radius: 8px;
233
233
  }
234
234
 
235
235
  .thread-sidebar {
236
- width: var(--nuraly-size-chatbot-thread-sidebar-width, 260px);
236
+ width: 260px;
237
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);
238
+ background-color: #f4f4f4;
239
+ border-right: 1px solid #e0e0e0;
240
240
  display: flex;
241
241
  flex-direction: column;
242
242
  overflow: hidden;
@@ -248,25 +248,25 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
248
248
  display: flex;
249
249
  align-items: center;
250
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);
251
+ padding: 0.75rem;
252
+ border-bottom: 1px solid #e0e0e0;
253
253
  }
254
254
 
255
255
  .thread-sidebar__header h3 {
256
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);
257
+ font-size: 1rem;
258
+ font-weight: 600;
259
+ color: #161616;
260
260
  }
261
261
 
262
262
  .thread-list {
263
263
  flex: 1;
264
264
  overflow-y: auto;
265
- padding: var(--nuraly-spacing-chatbot-sidebar-padding);
265
+ padding: 0.75rem;
266
266
  }
267
267
 
268
268
  .thread-section {
269
- margin-bottom: var(--nuraly-spacing-chatbot-sidebar-padding, 8px);
269
+ margin-bottom: 8px;
270
270
  }
271
271
 
272
272
  .thread-section__label {
@@ -282,31 +282,31 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
282
282
  }
283
283
 
284
284
  .thread-section__label svg {
285
- color: var(--nuraly-color-chatbot-bookmark, #f59e0b);
285
+ color: #f59e0b;
286
286
  }
287
287
 
288
288
  .thread-item {
289
- padding: var(--nuraly-spacing-chatbot-sidebar-padding);
290
- border-radius: var(--nuraly-border-radius-chatbot);
289
+ padding: 0.75rem;
290
+ border-radius: 8px;
291
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;
292
+ margin-bottom: 0.5rem;
293
+ transition: background-color 0.15s;
294
+ border: 1px solid transparent;
295
295
  line-height: 1.6;
296
296
  }
297
297
 
298
298
  .thread-item:hover {
299
- background-color: var(--nuraly-color-chatbot-thread-background-hover);
299
+ background-color: #f4f4f4;
300
300
  }
301
301
 
302
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);
303
+ background-color: #f4f0fd;
304
+ color: #7c3aed;
305
+ border-color: #7c3aed;
306
306
  }
307
307
 
308
308
  .thread-item--active:hover {
309
- background-color: var(--nuraly-color-chatbot-thread-background-active-hover, var(--nuraly-color-chatbot-thread-background-active));
309
+ background-color: #f4f0fd;
310
310
  opacity: 0.95;
311
311
  }
312
312
 
@@ -314,12 +314,12 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
314
314
  display: flex;
315
315
  align-items: center;
316
316
  gap: 4px;
317
- margin-bottom: var(--nuraly-spacing-chatbot-suggestions-gap);
317
+ margin-bottom: 0.5rem;
318
318
  }
319
319
 
320
320
  .thread-item__title {
321
- font-weight: var(--nuraly-font-weight-medium, 500);
322
- font-size: var(--nuraly-font-size-chatbot-thread-title, 14px);
321
+ font-weight: 500;
322
+ font-size: 14px;
323
323
  white-space: nowrap;
324
324
  overflow: hidden;
325
325
  text-overflow: ellipsis;
@@ -347,12 +347,12 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
347
347
  margin: 0;
348
348
  background: none;
349
349
  border: none;
350
- border-radius: var(--nuraly-border-radius-chatbot, 4px);
350
+ border-radius: 4px;
351
351
  color: rgba(128, 128, 128, 0.6);
352
352
  cursor: pointer;
353
353
  flex-shrink: 0;
354
354
  line-height: 0;
355
- transition: color var(--nuraly-transition-chatbot-fast), background-color var(--nuraly-transition-chatbot-fast);
355
+ transition: color 0.15s, background-color 0.15s;
356
356
  }
357
357
 
358
358
  .thread-item__action-btn svg {
@@ -360,7 +360,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
360
360
  }
361
361
 
362
362
  .thread-item__action-btn:hover {
363
- color: var(--nuraly-color-chatbot-accent, #3b82f6);
363
+ color: #3b82f6;
364
364
  background-color: rgba(59, 130, 246, 0.1);
365
365
  }
366
366
 
@@ -369,7 +369,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
369
369
  }
370
370
 
371
371
  .thread-item__delete:hover {
372
- color: var(--nuraly-color-chatbot-error, #ef4444);
372
+ color: #ef4444;
373
373
  background-color: rgba(239, 68, 68, 0.1);
374
374
  }
375
375
 
@@ -378,40 +378,40 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
378
378
  }
379
379
 
380
380
  .thread-item--active .thread-item__action-btn:hover {
381
- color: var(--nuraly-color-chatbot-accent, #3b82f6);
381
+ color: #3b82f6;
382
382
  background-color: rgba(59, 130, 246, 0.15);
383
383
  }
384
384
 
385
385
  .thread-item--active .thread-item__delete:hover {
386
- color: var(--nuraly-color-chatbot-error, #ef4444);
386
+ color: #ef4444;
387
387
  background-color: rgba(239, 68, 68, 0.15);
388
388
  }
389
389
 
390
390
  .thread-item__bookmark--active {
391
- color: var(--nuraly-color-chatbot-bookmark, #f59e0b) !important;
391
+ color: #f59e0b !important;
392
392
  display: flex !important;
393
393
  }
394
394
 
395
395
  .thread-item__bookmark--active:hover {
396
- color: var(--nuraly-color-chatbot-bookmark-hover, #d97706) !important;
396
+ color: #d97706 !important;
397
397
  background-color: rgba(245, 158, 11, 0.1);
398
398
  }
399
399
 
400
400
  .thread-item--active .thread-item__bookmark--active {
401
- color: var(--nuraly-color-chatbot-bookmark, #f59e0b) !important;
401
+ color: #f59e0b !important;
402
402
  }
403
403
 
404
404
  .thread-item__rename-input {
405
405
  flex: 1;
406
406
  min-width: 0;
407
407
  padding: 2px 6px;
408
- font-size: var(--nuraly-font-size-chatbot-thread-title, 14px);
409
- font-weight: var(--nuraly-font-weight-medium, 500);
408
+ font-size: 14px;
409
+ font-weight: 500;
410
410
  font-family: inherit;
411
411
  color: inherit;
412
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);
413
+ border: 1px solid #3b82f6;
414
+ border-radius: 4px;
415
415
  outline: none;
416
416
  line-height: 1.4;
417
417
  }
@@ -421,12 +421,12 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
421
421
  }
422
422
 
423
423
  .thread-item__preview {
424
- font-size: var(--nuraly-font-size-chatbot-thread-preview, 13px);
424
+ font-size: 13px;
425
425
  color: rgba(128, 128, 128, 0.7);
426
426
  white-space: nowrap;
427
427
  overflow: hidden;
428
428
  text-overflow: ellipsis;
429
- margin-bottom: var(--nuraly-spacing-chatbot-suggestions-gap);
429
+ margin-bottom: 0.5rem;
430
430
  line-height: 1.5;
431
431
  }
432
432
 
@@ -435,7 +435,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
435
435
  }
436
436
 
437
437
  .thread-item__timestamp {
438
- font-size: var(--nuraly-font-size-chatbot-timestamp);
438
+ font-size: 0.75rem;
439
439
  color: rgba(128, 128, 128, 0.6);
440
440
  line-height: 1.4;
441
441
  }
@@ -459,8 +459,8 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
459
459
  display: flex;
460
460
  flex-direction: column;
461
461
  gap: 0;
462
- background-color: var(--nuraly-color-chatbot-background, #ffffff);
463
- padding: var(--nuraly-spacing-chatbot-message-padding, 8px 12px);
462
+ background-color: #ffffff;
463
+ padding: 8px 12px;
464
464
  justify-content: flex-start; /* Always align messages to top */
465
465
  }
466
466
 
@@ -471,24 +471,24 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
471
471
  justify-content: center;
472
472
  flex: 1; /* Take full height when empty */
473
473
  text-align: center;
474
- padding: var(--nuraly-spacing-09, 3rem) var(--nuraly-spacing-06, 1.5rem);
474
+ padding: 3rem 1.5rem;
475
475
  }
476
476
 
477
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);
478
+ color: #161616;
479
+ font-size: 2rem;
480
+ font-weight: 600;
481
+ margin-bottom: 3rem;
482
482
  letter-spacing: -0.02em;
483
483
  }
484
484
 
485
485
  .message {
486
486
  display: flex;
487
487
  flex-direction: column;
488
- max-width: var(--nuraly-size-chatbot-message-max-width);
488
+ max-width: 75%;
489
489
  word-wrap: break-word;
490
490
  word-break: break-word;
491
- margin-bottom: var(--nuraly-spacing-chatbot-message-margin);
491
+ margin-bottom: 0.5rem;
492
492
  position: relative;
493
493
  min-width: 0;
494
494
  flex-shrink: 0;
@@ -505,27 +505,27 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
505
505
  }
506
506
 
507
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);
508
+ padding: 8px 12px;
509
+ border-radius: 0;
510
+ font-size: 0.875rem;
511
+ line-height: 1.5;
512
512
  position: relative;
513
- font-weight: var(--nuraly-font-weight-normal, 400);
514
- box-shadow: var(--nuraly-shadow-chatbot-message, none);
513
+ font-weight: 400;
514
+ box-shadow: none;
515
515
  box-sizing: border-box;
516
516
  overflow-wrap: break-word;
517
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);
518
+ background-color: transparent;
519
+ color: inherit;
520
+ border: 0 solid transparent;
521
521
  }
522
522
 
523
523
  /* Message attachments (file tags) */
524
524
  .message__attachments {
525
525
  display: flex;
526
526
  flex-wrap: wrap;
527
- gap: var(--nuraly-spacing-02, 0.25rem);
528
- margin-top: var(--nuraly-spacing-02, 0.25rem);
527
+ gap: 0.25rem;
528
+ margin-top: 0.25rem;
529
529
  position: relative;
530
530
  z-index: 1;
531
531
  }
@@ -541,7 +541,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
541
541
  }
542
542
 
543
543
  .message__attachment-tag {
544
- --nuraly-tag-font-size: var(--nuraly-font-size-01, 0.75rem);
544
+ --nuraly-tag-font-size: 0.75rem;
545
545
  --nuraly-tag-padding-x: 4px;
546
546
  --nuraly-tag-padding-y: 0px;
547
547
  cursor: help;
@@ -552,8 +552,8 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
552
552
  display: flex;
553
553
  flex-direction: column;
554
554
  align-items: center;
555
- gap: var(--nuraly-spacing-03, 0.5rem);
556
- padding: var(--nuraly-spacing-04, 0.75rem);
555
+ gap: 0.5rem;
556
+ padding: 0.75rem;
557
557
  min-width: 200px;
558
558
  max-width: 300px;
559
559
  }
@@ -561,12 +561,12 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
561
561
  .message-file-preview-image {
562
562
  max-width: 100%;
563
563
  max-height: 200px;
564
- border-radius: var(--nuraly-border-radius-chatbot, 8px);
564
+ border-radius: 8px;
565
565
  object-fit: contain;
566
566
  }
567
567
 
568
568
  .message-file-preview-icon {
569
- color: var(--nuraly-color-chatbot-text-secondary, #6c757d);
569
+ color: #6c757d;
570
570
  opacity: 0.6;
571
571
  }
572
572
 
@@ -576,42 +576,42 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
576
576
  }
577
577
 
578
578
  .message-file-preview-name {
579
- font-size: var(--nuraly-font-size-02, 0.875rem);
579
+ font-size: 0.875rem;
580
580
  font-weight: 500;
581
- color: var(--nuraly-color-chatbot-text-primary, #1f2937);
581
+ color: #1f2937;
582
582
  white-space: nowrap;
583
583
  overflow: hidden;
584
584
  text-overflow: ellipsis;
585
- margin-bottom: var(--nuraly-spacing-02, 0.25rem);
585
+ margin-bottom: 0.25rem;
586
586
  }
587
587
 
588
588
  .message-file-preview-details {
589
- font-size: var(--nuraly-font-size-01, 0.75rem);
590
- color: var(--nuraly-color-chatbot-text-secondary, #6c757d);
589
+ font-size: 0.75rem;
590
+ color: #6c757d;
591
591
  }
592
592
 
593
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));
594
+ background-color: #7c3aed;
595
+ color: #ffffff;
596
+ border-radius: var(--chatbot-radius, 8px);
597
+ border: 0 solid transparent;
598
+ box-shadow: none;
599
599
  }
600
600
 
601
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));
602
+ background-color: transparent;
603
+ color: inherit;
604
+ border-radius: 0;
605
+ border: 0 solid transparent;
606
+ box-shadow: none;
607
607
  }
608
608
 
609
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));
610
+ background-color: transparent;
611
+ color: inherit;
612
+ border-radius: 0;
613
+ border: 0 solid transparent;
614
+ box-shadow: none;
615
615
  }
616
616
 
617
617
  /* Styled error message container */
@@ -619,19 +619,19 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
619
619
  display: flex;
620
620
  flex-direction: column;
621
621
  gap: 0.5rem;
622
- border-radius: var(--nuraly-border-radius-chatbot-message, 0.75rem);
622
+ border-radius: 0.75rem;
623
623
  }
624
624
 
625
625
  .message__error-title {
626
626
  font-weight: 600;
627
627
  font-size: 0.875rem;
628
- color: var(--nuraly-color-chatbot-error-title, #c00);
628
+ color: #c00;
629
629
  margin: 0;
630
630
  }
631
631
 
632
632
  .message__error-description {
633
633
  font-size: 0.875rem;
634
- color: var(--nuraly-color-chatbot-error-description, #666);
634
+ color: #666;
635
635
  margin: 0;
636
636
  line-height: 1.5;
637
637
  }
@@ -641,7 +641,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
641
641
  display: flex;
642
642
  align-items: center;
643
643
  gap: 0.5rem;
644
- margin-top: var(--nuraly-spacing-chatbot-timestamp-margin);
644
+ margin-top: 0.25rem;
645
645
  }
646
646
 
647
647
  .message.user .message__footer {
@@ -653,12 +653,12 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
653
653
  }
654
654
 
655
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);
656
+ font-size: 0.75rem;
657
+ color: #a8a8a8;
658
+ font-weight: 400;
659
659
  opacity: 0;
660
660
  visibility: hidden;
661
- transition: opacity var(--nuraly-transition-fast, 0.15s) ease, visibility var(--nuraly-transition-fast, 0.15s) ease;
661
+ transition: opacity 0.15s ease, visibility 0.15s ease;
662
662
  }
663
663
 
664
664
  .message__copy {
@@ -670,8 +670,8 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
670
670
  pointer-events: auto !important;
671
671
  opacity: 0;
672
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);
673
+ transition: opacity 0.15s ease, visibility 0.15s ease;
674
+ color: #a8a8a8;
675
675
  }
676
676
 
677
677
  .message:hover .message__copy {
@@ -680,7 +680,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
680
680
  }
681
681
 
682
682
  .message:hover .message__timestamp {
683
- opacity: var(--nuraly-opacity-chatbot-timestamp, 1);
683
+ opacity: 1;
684
684
  visibility: visible;
685
685
  }
686
686
 
@@ -689,12 +689,12 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
689
689
  }
690
690
 
691
691
  .message__copy:focus {
692
- outline: 2px solid var(--nuraly-focus-color, #0066cc);
692
+ outline: 2px solid #0066cc;
693
693
  outline-offset: 2px;
694
694
  }
695
695
 
696
696
  .message__retry {
697
- margin-top: var(--nuraly-spacing-chatbot-suggestions-gap);
697
+ margin-top: 0.5rem;
698
698
  align-self: flex-start;
699
699
  }
700
700
 
@@ -702,19 +702,19 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
702
702
  display: flex;
703
703
  align-items: center;
704
704
  gap: var(--chatbot-spacing-sm);
705
- background-color: var(--nuraly-color-chatbot-message-bot-background, transparent);
705
+ background-color: transparent;
706
706
  /* Set indicator color (affects spinner currentColor) */
707
- color: var(--chatbot-loading-indicator-color, var(--nuraly-color-chatbot-accent, var(--chatbot-text-secondary)));
707
+ color: var(--chatbot-loading-indicator-color, var(--chatbot-text-secondary));
708
708
  }
709
709
 
710
710
  .dots {
711
711
  display: flex;
712
- gap: var(--nuraly-spacing-01, 0.125rem);
712
+ gap: 0.125rem;
713
713
  }
714
714
 
715
715
  .dots span {
716
- width: var(--nuraly-spacing-03, 0.5rem);
717
- height: var(--nuraly-spacing-03, 0.5rem);
716
+ width: 0.5rem;
717
+ height: 0.5rem;
718
718
  background-color: currentColor;
719
719
  border-radius: 50%;
720
720
  animation: typing-dots 1.4s infinite;
@@ -786,13 +786,13 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
786
786
  .suggestion-container {
787
787
  display: flex;
788
788
  flex-wrap: wrap;
789
- gap: var(--nuraly-spacing-chatbot-suggestion-gap);
790
- margin-top: var(--nuraly-spacing-chatbot-suggestion-container-margin-top);
789
+ gap: 0.5rem;
790
+ margin-top: 0.5rem;
791
791
  max-width: 100%;
792
792
  margin-left: auto;
793
793
  margin-right: auto;
794
794
  justify-content: center;
795
- padding: 0 var(--nuraly-spacing-chatbot-container-padding);
795
+ padding: 0 1rem;
796
796
  overflow: hidden;
797
797
  box-sizing: border-box;
798
798
  }
@@ -801,16 +801,16 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
801
801
  display: inline-flex;
802
802
  align-items: center;
803
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);
804
+ padding: 6px 12px;
805
+ background-color: #ffffff;
806
+ color: #161616;
807
+ border: 1px solid #e0e0e0;
808
+ border-radius: 16px;
809
+ font-size: 13px;
810
+ font-weight: 500;
811
+ line-height: 1.3;
812
812
  cursor: pointer;
813
- transition: all var(--nuraly-animation-chatbot-transition-duration) var(--nuraly-animation-chatbot-transition-timing);
813
+ transition: all 0.2s ease;
814
814
  user-select: none;
815
815
  white-space: normal;
816
816
  word-break: break-word;
@@ -821,10 +821,10 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
821
821
  }
822
822
 
823
823
  .suggestion:hover {
824
- background-color: var(--nuraly-color-chatbot-suggestion-background-hover);
825
- border-color: var(--nuraly-color-chatbot-suggestion-border-hover);
824
+ background-color: #f4f4f4;
825
+ border-color: #c6c6c6;
826
826
  transform: translateY(-1px);
827
- box-shadow: var(--nuraly-shadow-chatbot-suggestion-hover);
827
+ box-shadow: 0 2px 8px rgba(0,0,0,0.15);
828
828
  }
829
829
 
830
830
  .suggestion:focus {
@@ -833,7 +833,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
833
833
 
834
834
  .suggestion:active {
835
835
  transform: translateY(0);
836
- background-color: var(--nuraly-color-chatbot-suggestion-background-active);
836
+ background-color: #f4f0fd;
837
837
  }
838
838
 
839
839
  .suggestion--disabled {
@@ -858,7 +858,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
858
858
 
859
859
  .input-only-suggestions {
860
860
  position: absolute;
861
- bottom: calc(100% + var(--nuraly-spacing-03, 0.5rem));
861
+ bottom: calc(100% + 0.5rem);
862
862
  left: 0;
863
863
  right: 0;
864
864
  display: flex;
@@ -872,7 +872,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
872
872
  flex-direction: row;
873
873
  flex-wrap: wrap;
874
874
  justify-content: center;
875
- gap: var(--nuraly-spacing-02, 0.25rem);
875
+ gap: 0.25rem;
876
876
  margin: 0;
877
877
  padding: 0;
878
878
  pointer-events: auto;
@@ -886,7 +886,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
886
886
  right: 0;
887
887
  bottom: 0;
888
888
  background-color: rgba(255, 255, 255, 0.95);
889
- border: var(--nuraly-spacing-02, 0.25rem) dashed var(--chatbot-user-message-bg);
889
+ border: 0.25rem dashed var(--chatbot-user-message-bg);
890
890
  border-radius: var(--chatbot-radius);
891
891
  z-index: 10;
892
892
  }
@@ -914,7 +914,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
914
914
  }
915
915
 
916
916
  .file-upload-area__help {
917
- font-size: var(--nuraly-font-size-01, 0.75rem);
917
+ font-size: 0.75rem;
918
918
  color: var(--chatbot-text-secondary);
919
919
  margin: var(--chatbot-spacing-xs) 0;
920
920
  }
@@ -933,14 +933,14 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
933
933
  gap: var(--chatbot-spacing-sm);
934
934
  padding: var(--chatbot-spacing-sm);
935
935
  background-color: var(--chatbot-background);
936
- border: var(--nuraly-border-width-chatbot-message, 1px) solid var(--chatbot-border);
936
+ border: 1px solid var(--chatbot-border);
937
937
  border-radius: var(--chatbot-radius);
938
- max-width: var(--nuraly-spacing-chatbot-file-upload-preview-size, 200px);
938
+ max-width: 200px;
939
939
  }
940
940
 
941
941
  .uploaded-file__preview {
942
- width: var(--nuraly-size-chatbot-send-button-width, 32px);
943
- height: var(--nuraly-size-chatbot-send-button-height, 32px);
942
+ width: 32px;
943
+ height: 32px;
944
944
  object-fit: cover;
945
945
  border-radius: var(--chatbot-spacing-xs);
946
946
  }
@@ -955,7 +955,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
955
955
  }
956
956
 
957
957
  .uploaded-file__name {
958
- font-size: var(--nuraly-font-size-01, 0.75rem);
958
+ font-size: 0.75rem;
959
959
  font-weight: 500;
960
960
  color: var(--chatbot-text-primary);
961
961
  white-space: nowrap;
@@ -964,14 +964,14 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
964
964
  }
965
965
 
966
966
  .uploaded-file__size {
967
- font-size: var(--nuraly-font-size-chatbot-file-size, 11px);
967
+ font-size: 11px;
968
968
  color: var(--chatbot-text-secondary);
969
969
  }
970
970
 
971
971
  .uploaded-file__progress {
972
- height: var(--nuraly-spacing-01, 0.125rem);
972
+ height: 0.125rem;
973
973
  background-color: var(--chatbot-border);
974
- border-radius: var(--nuraly-spacing-01, 0.125rem);
974
+ border-radius: 0.125rem;
975
975
  overflow: hidden;
976
976
  margin-top: var(--chatbot-spacing-xs);
977
977
  }
@@ -983,7 +983,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
983
983
  }
984
984
 
985
985
  .uploaded-file__error {
986
- font-size: var(--nuraly-font-size-chatbot-file-size, 11px);
986
+ font-size: 11px;
987
987
  color: var(--chatbot-error-text);
988
988
  margin-top: var(--chatbot-spacing-xs);
989
989
  }
@@ -995,21 +995,21 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
995
995
 
996
996
 
997
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));
998
+ background-color: #ffffff;
999
+ border: 1px solid #e0e0e0;
1000
+ border-radius: 8px;
1001
+ transition: all 0.2s ease;
1002
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
1003
1003
  overflow: visible;
1004
1004
  position: relative;
1005
- min-width: var(--nuraly-size-chatbot-input-min-width, 280px);
1005
+ min-width: 280px;
1006
1006
  }
1007
1007
 
1008
1008
  .context-tags-row {
1009
1009
  display: flex;
1010
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);
1011
+ gap: 0.5rem;
1012
+ padding: 0.75rem 1rem 0 1rem;
1013
1013
  position: relative;
1014
1014
  z-index: 2;
1015
1015
  }
@@ -1021,8 +1021,8 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1021
1021
 
1022
1022
 
1023
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);
1024
+ --nuraly-tag-font-size: 0.75rem;
1025
+ --nuraly-tag-padding-x: 0.5rem;
1026
1026
  --nuraly-tag-padding-y: 0;
1027
1027
  cursor: help;
1028
1028
  }
@@ -1032,8 +1032,8 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1032
1032
  display: flex;
1033
1033
  flex-direction: column;
1034
1034
  align-items: center;
1035
- gap: var(--nuraly-spacing-03, 0.5rem);
1036
- padding: var(--nuraly-spacing-04, 0.75rem);
1035
+ gap: 0.5rem;
1036
+ padding: 0.75rem;
1037
1037
  min-width: 200px;
1038
1038
  max-width: 300px;
1039
1039
  }
@@ -1041,12 +1041,12 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1041
1041
  .file-preview-image {
1042
1042
  max-width: 100%;
1043
1043
  max-height: 200px;
1044
- border-radius: var(--nuraly-border-radius-chatbot, 8px);
1044
+ border-radius: 8px;
1045
1045
  object-fit: contain;
1046
1046
  }
1047
1047
 
1048
1048
  .file-preview-icon {
1049
- color: var(--nuraly-color-chatbot-text-secondary, #6c757d);
1049
+ color: #6c757d;
1050
1050
  opacity: 0.6;
1051
1051
  }
1052
1052
 
@@ -1056,69 +1056,69 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1056
1056
  }
1057
1057
 
1058
1058
  .file-preview-name {
1059
- font-size: var(--nuraly-font-size-02, 0.875rem);
1059
+ font-size: 0.875rem;
1060
1060
  font-weight: 500;
1061
- color: var(--nuraly-color-chatbot-text-primary, #1f2937);
1061
+ color: #1f2937;
1062
1062
  white-space: nowrap;
1063
1063
  overflow: hidden;
1064
1064
  text-overflow: ellipsis;
1065
- margin-bottom: var(--nuraly-spacing-02, 0.25rem);
1065
+ margin-bottom: 0.25rem;
1066
1066
  }
1067
1067
 
1068
1068
  .file-preview-details {
1069
- font-size: var(--nuraly-font-size-01, 0.75rem);
1070
- color: var(--nuraly-color-chatbot-text-secondary, #6c757d);
1069
+ font-size: 0.75rem;
1070
+ color: #6c757d;
1071
1071
  }
1072
1072
 
1073
1073
  .input-container:focus-within {
1074
- border-color: var(--nuraly-color-chatbot-input-border-focus);
1074
+ border-color: #7c3aed;
1075
1075
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1076
1076
  }
1077
1077
 
1078
1078
  .input-row {
1079
1079
  display: flex;
1080
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);
1081
+ padding: 1rem 1rem 0.5rem 1rem;
1082
+ min-height: 1.5rem;
1083
1083
  }
1084
1084
 
1085
1085
  .chat-container--boxed .input-box {
1086
1086
  background-color: transparent;
1087
- padding: var(--nuraly-spacing-chatbot-boxed-content-padding) 0;
1087
+ padding: 1rem 0;
1088
1088
  width: 100%;
1089
1089
  box-sizing: border-box;
1090
1090
  }
1091
1091
 
1092
1092
  .chat-container--boxed .input-container {
1093
1093
  width: 100%;
1094
- max-width: var(--nuraly-size-chatbot-boxed-content-max-width, 768px);
1094
+ max-width: 768px;
1095
1095
  margin-left: auto;
1096
1096
  margin-right: auto;
1097
1097
  box-sizing: border-box;
1098
- padding-left: var(--nuraly-spacing-05, 1rem);
1099
- padding-right: var(--nuraly-spacing-05, 1rem);
1098
+ padding-left: 1rem;
1099
+ padding-right: 1rem;
1100
1100
  }
1101
1101
 
1102
1102
  .chat-container--boxed .messages {
1103
- max-width: var(--nuraly-size-chatbot-boxed-content-max-width);
1103
+ max-width: 768px;
1104
1104
  margin-left: auto;
1105
1105
  margin-right: auto;
1106
1106
  }
1107
1107
 
1108
1108
  :host(:not([boxed])) .input-container {
1109
- border-radius: var(--nuraly-border-radius-md, 12px);
1110
- margin: var(--nuraly-spacing-05, 1rem);
1109
+ border-radius: 12px;
1110
+ margin: 1rem;
1111
1111
  box-sizing: border-box;
1112
- width: calc(100% - 2 * var(--nuraly-spacing-05, 1rem));
1112
+ width: calc(100% - 2 * 1rem);
1113
1113
  }
1114
1114
 
1115
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);
1116
+ border-bottom-left-radius: 12px;
1117
+ border-bottom-right-radius: 12px;
1118
1118
  }
1119
1119
 
1120
1120
  :host(:not([boxed])) .messages {
1121
- padding: var(--nuraly-spacing-05, 1rem) !important;
1121
+ padding: 1rem !important;
1122
1122
  width: 100%;
1123
1123
  box-sizing: border-box;
1124
1124
  }
@@ -1127,25 +1127,25 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1127
1127
  display: flex;
1128
1128
  align-items: center;
1129
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);
1130
+ gap: 0.75rem;
1131
+ padding: 0.5rem 1rem 1rem 1rem;
1132
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);
1133
+ border-bottom-left-radius: 8px;
1134
+ border-bottom-right-radius: 8px;
1135
+ min-width: 240px;
1136
1136
  }
1137
1137
 
1138
1138
  .action-buttons-left {
1139
1139
  display: flex;
1140
1140
  align-items: center;
1141
- gap: var(--nuraly-spacing-03, 0.5rem);
1141
+ gap: 0.5rem;
1142
1142
  }
1143
1143
 
1144
1144
  .action-buttons-right {
1145
1145
  display: flex;
1146
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));
1147
+ gap: 0.5rem;
1148
+ min-width: calc(40px + 0.5rem);
1149
1149
  justify-content: flex-end;
1150
1150
  }
1151
1151
 
@@ -1157,7 +1157,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1157
1157
 
1158
1158
  /* Module select styling */
1159
1159
  .module-select {
1160
- max-width: var(--nuraly-size-chatbot-module-select-max-width, 300px);
1160
+ max-width: 300px;
1161
1161
  }
1162
1162
 
1163
1163
  /* Ensure buttons in action row match select height */
@@ -1166,58 +1166,58 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1166
1166
  }
1167
1167
 
1168
1168
  .module-display-placeholder {
1169
- color: var(--nuraly-color-chatbot-text-secondary, #6f6f6f);
1170
- font-size: var(--nuraly-font-size-02, 0.875rem); /* 14px */
1169
+ color: #6f6f6f;
1170
+ font-size: 0.875rem; /* 14px */
1171
1171
  }
1172
1172
 
1173
1173
  .module-display-single,
1174
1174
  .module-display-multiple {
1175
1175
  display: flex;
1176
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);
1177
+ gap: 0.5rem; /* 6px */
1178
+ font-size: 0.875rem; /* 14px */
1179
+ color: inherit;
1180
1180
  }
1181
1181
 
1182
1182
  .module-display-single nr-icon {
1183
- font-size: var(--nuraly-font-size-03, 1rem); /* 16px */
1183
+ font-size: 1rem; /* 16px */
1184
1184
  }
1185
1185
 
1186
1186
  .module-display-multiple {
1187
1187
  font-weight: 500;
1188
- color: var(--nuraly-color-chatbot-accent, var(--nuraly-color-primary));
1188
+ color: #7c3aed;
1189
1189
  }
1190
1190
 
1191
1191
  /* Dropdown styling inside chatbot */
1192
1192
  .input-box__upload-dropdown {
1193
1193
  position: relative;
1194
- z-index: var(--nuraly-z-index-chatbot-dropdown, 100);
1194
+ z-index: 100;
1195
1195
  }
1196
1196
 
1197
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);
1198
+ background-color: #ffffff;
1199
+ border: 1px solid #e0e0e0;
1200
+ border-radius: 8px;
1201
+ box-shadow: 0 2px 8px rgba(0,0,0,0.15);
1202
+ min-width: 200px;
1203
1203
  position: fixed !important; /* Use fixed positioning to break out of containers */
1204
- z-index: var(--nuraly-z-index-chatbot-dropdown, 100);
1204
+ z-index: 100;
1205
1205
  transform: none !important;
1206
1206
  }
1207
1207
 
1208
1208
  .input-box__input {
1209
1209
  flex: 1;
1210
1210
  width: 100%;
1211
- min-height: var(--nuraly-spacing-06, 1.5rem); /* 24px */
1212
- max-height: var(--nuraly-size-chatbot-input-max-height, 120px);
1211
+ min-height: 1.5rem; /* 24px */
1212
+ max-height: 120px;
1213
1213
  overflow-y: auto;
1214
1214
  padding: 0;
1215
1215
  border: none;
1216
1216
  outline: none;
1217
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);
1218
+ color: #161616;
1219
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
1220
+ font-size: 0.875rem;
1221
1221
  line-height: 1.4;
1222
1222
  resize: none;
1223
1223
  white-space: pre-wrap;
@@ -1226,7 +1226,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1226
1226
 
1227
1227
  .input-box__input:empty::before {
1228
1228
  content: attr(data-placeholder);
1229
- color: var(--nuraly-color-chatbot-input-placeholder);
1229
+ color: #a8a8a8;
1230
1230
  pointer-events: none;
1231
1231
  }
1232
1232
 
@@ -1245,54 +1245,54 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1245
1245
  .input-box__file-button button,
1246
1246
  .input-box__send-button button {
1247
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 */
1248
+ border: 1px solid #e0e0e0 !important;
1249
+ color: #161616 !important;
1250
+ padding: 0.5rem 0.75rem !important; /* 8px 12px */
1251
+ border-radius: 6px !important;
1252
+ font-size: 0.875rem !important; /* 14px */
1253
1253
  font-weight: 500 !important;
1254
1254
  min-width: auto !important;
1255
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;
1256
+ gap: 0.5rem !important; /* 8px */
1257
+ transition: all 0.2s ease !important;
1258
1258
  white-space: nowrap !important;
1259
1259
  }
1260
1260
 
1261
1261
  /* Send button specific styling for more rounded appearance */
1262
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 */
1263
+ border-radius: 6px !important;
1264
+ background-color: #7c3aed !important;
1265
+ color: #ffffff !important;
1266
+ border-color: #7c3aed !important;
1267
+ width: 40px !important; /* Match other button widths */
1268
+ height: 40px !important; /* Match other button heights */
1269
+ min-width: 40px !important; /* Prevent shrinking */
1270
1270
  }
1271
1271
 
1272
1272
  .input-box__file-button:hover button,
1273
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;
1274
+ background-color: #f4f4f4 !important;
1275
+ border-color: #c6c6c6 !important;
1276
1276
  transform: scale(1.05);
1277
1277
  }
1278
1278
 
1279
1279
  /* Send button hover specific styling */
1280
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;
1281
+ background-color: #6d28d9 !important;
1282
+ border-color: #6d28d9 !important;
1283
1283
  }
1284
1284
 
1285
1285
  .input-box__file-button:focus-within,
1286
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 */
1287
+ outline: 0.25rem solid #7c3aed; /* 2px */
1288
+ outline-offset: 0.25rem; /* 2px */
1289
1289
  }
1290
1290
 
1291
1291
  .input-box__send-button[disabled] button,
1292
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;
1293
+ background-color: #f4f4f4 !important;
1294
+ color: #c6c6c6 !important;
1295
+ border-color: #e0e0e0 !important;
1296
1296
  opacity: 0.6 !important;
1297
1297
  cursor: not-allowed !important;
1298
1298
  }
@@ -1303,6 +1303,147 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1303
1303
  pointer-events: none;
1304
1304
  }
1305
1305
 
1306
+ /* ── Audio mic buttons ─────────────────────────────────────────── */
1307
+ .audio-mic-btn {
1308
+ position: relative;
1309
+ display: flex;
1310
+ align-items: center;
1311
+ justify-content: center;
1312
+ width: 32px;
1313
+ height: 32px;
1314
+ border: none;
1315
+ border-radius: 50%;
1316
+ background: transparent;
1317
+ color: var(--chatbot-text-secondary, #8c8ca8);
1318
+ cursor: pointer;
1319
+ transition: background 150ms, color 150ms;
1320
+ flex-shrink: 0;
1321
+ }
1322
+
1323
+ .audio-mic-btn:hover {
1324
+ background: var(--chatbot-input-bg, #f5f5f8);
1325
+ color: var(--chatbot-accent, #7c3aed);
1326
+ }
1327
+
1328
+ .audio-mic-btn:disabled {
1329
+ opacity: 0.4;
1330
+ cursor: not-allowed;
1331
+ }
1332
+
1333
+ /* Small badge icon in the bottom-right corner of the mic button */
1334
+ .audio-mic-badge {
1335
+ position: absolute;
1336
+ bottom: 2px;
1337
+ right: 2px;
1338
+ background: var(--chatbot-bg, #fff);
1339
+ border-radius: 3px;
1340
+ pointer-events: none;
1341
+ }
1342
+
1343
+ /* ── Recording bar (replaces input row while active) ───────────── */
1344
+ .audio-recording-bar {
1345
+ display: flex;
1346
+ align-items: center;
1347
+ gap: 10px;
1348
+ padding: 8px 10px;
1349
+ min-height: 52px;
1350
+ }
1351
+
1352
+ .audio-rec-cancel {
1353
+ display: flex;
1354
+ align-items: center;
1355
+ justify-content: center;
1356
+ width: 34px;
1357
+ height: 34px;
1358
+ border: none;
1359
+ border-radius: 50%;
1360
+ background: transparent;
1361
+ color: #ef4444;
1362
+ cursor: pointer;
1363
+ flex-shrink: 0;
1364
+ transition: background 150ms;
1365
+ }
1366
+
1367
+ .audio-rec-cancel:hover { background: #fef2f2; }
1368
+
1369
+ .audio-rec-indicator {
1370
+ flex: 1;
1371
+ display: flex;
1372
+ align-items: center;
1373
+ gap: 8px;
1374
+ overflow: hidden;
1375
+ }
1376
+
1377
+ .audio-rec-dot {
1378
+ width: 10px;
1379
+ height: 10px;
1380
+ border-radius: 50%;
1381
+ background: #ef4444;
1382
+ flex-shrink: 0;
1383
+ animation: audioRecPulse 1s ease-in-out infinite;
1384
+ }
1385
+
1386
+ @keyframes audioRecPulse {
1387
+ 0%, 100% { opacity: 1; transform: scale(1); }
1388
+ 50% { opacity: 0.5; transform: scale(0.85); }
1389
+ }
1390
+
1391
+ .audio-rec-wave {
1392
+ flex: 1;
1393
+ display: flex;
1394
+ align-items: center;
1395
+ gap: 1.5px;
1396
+ height: 28px;
1397
+ overflow: hidden;
1398
+ }
1399
+
1400
+ .audio-rec-bar {
1401
+ width: 3px;
1402
+ min-height: 3px;
1403
+ border-radius: 1.5px;
1404
+ background: #ef4444;
1405
+ opacity: 0.75;
1406
+ transition: height 80ms ease;
1407
+ }
1408
+
1409
+ .audio-rec-time {
1410
+ font-size: 14px;
1411
+ font-weight: 600;
1412
+ font-variant-numeric: tabular-nums;
1413
+ color: var(--chatbot-text, #0f0f3c);
1414
+ flex-shrink: 0;
1415
+ min-width: 38px;
1416
+ }
1417
+
1418
+ .audio-rec-mode-label {
1419
+ font-size: 11px;
1420
+ font-weight: 600;
1421
+ color: var(--chatbot-text-secondary, #8c8ca8);
1422
+ white-space: nowrap;
1423
+ flex-shrink: 0;
1424
+ }
1425
+
1426
+ .audio-rec-send {
1427
+ display: flex;
1428
+ align-items: center;
1429
+ justify-content: center;
1430
+ width: 34px;
1431
+ height: 34px;
1432
+ border: none;
1433
+ border-radius: 50%;
1434
+ background: var(--chatbot-accent, #7c3aed);
1435
+ color: #fff;
1436
+ cursor: pointer;
1437
+ flex-shrink: 0;
1438
+ transition: background 150ms;
1439
+ }
1440
+
1441
+ .audio-rec-send:hover { background: #6d28d9; }
1442
+
1443
+ /* Transcribe mode: green tint to distinguish from send */
1444
+ .audio-rec-send--transcribe { background: #059669; }
1445
+ .audio-rec-send--transcribe:hover { background: #047857; }
1446
+
1306
1447
  /* RTL support */
1307
1448
  :host([dir='rtl']) .chat-container--with-threads {
1308
1449
  grid-template-columns: 1fr 280px;
@@ -1310,7 +1451,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1310
1451
 
1311
1452
  :host([dir='rtl']) .thread-sidebar {
1312
1453
  border-right: none;
1313
- border-left: var(--nuraly-border-width-chatbot-message, 1px) solid var(--chatbot-border);
1454
+ border-left: 1px solid var(--chatbot-border);
1314
1455
  }
1315
1456
 
1316
1457
  :host([dir='rtl']) .message.user {
@@ -1322,11 +1463,11 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1322
1463
  }
1323
1464
 
1324
1465
  :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)));
1466
+ border-radius: 0;
1326
1467
  }
1327
1468
 
1328
1469
  :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)));
1470
+ border-radius: 0;
1330
1471
  }
1331
1472
 
1332
1473
  :host([dir='rtl']) .message.user .message__timestamp {
@@ -1343,13 +1484,13 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1343
1484
 
1344
1485
  /* Size variants */
1345
1486
  :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);
1487
+ --chatbot-spacing-md: 0.75rem; /* 12px */
1488
+ font-size: 13px;
1348
1489
  }
1349
1490
 
1350
1491
  :host([data-size='large']) {
1351
- --chatbot-spacing-md: var(--nuraly-spacing-chatbot-large, 20px);
1352
- font-size: var(--nuraly-font-size-chatbot-message, 15px);
1492
+ --chatbot-spacing-md: 20px;
1493
+ font-size: 15px;
1353
1494
  }
1354
1495
 
1355
1496
  /* Variant styles */
@@ -1363,7 +1504,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1363
1504
 
1364
1505
  /* Mode-specific styles */
1365
1506
  :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));
1507
+ background: linear-gradient(135deg, transparent, #f1f1f1);
1367
1508
  }
1368
1509
 
1369
1510
  :host([data-mode='assistant']) .suggestion {
@@ -1378,12 +1519,12 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1378
1519
 
1379
1520
  /* Artifact panel */
1380
1521
  .artifact-panel {
1381
- width: var(--nuraly-size-chatbot-artifact-panel-width, 400px);
1382
- min-width: var(--nuraly-size-chatbot-artifact-panel-min-width, 300px);
1522
+ width: 400px;
1523
+ min-width: 300px;
1383
1524
  flex-shrink: 0;
1384
1525
  display: flex;
1385
1526
  flex-direction: row;
1386
- background-color: var(--nuraly-color-chatbot-background, #ffffff);
1527
+ background-color: #ffffff;
1387
1528
  overflow: hidden;
1388
1529
  position: relative;
1389
1530
  }
@@ -1395,24 +1536,24 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1395
1536
  display: flex;
1396
1537
  align-items: center;
1397
1538
  justify-content: center;
1398
- background: var(--nuraly-color-chatbot-border, #e0e0e0);
1539
+ background: #e0e0e0;
1399
1540
  transition: background 0.15s;
1400
1541
  z-index: 1;
1401
1542
  }
1402
1543
  .artifact-panel__resize-handle:hover,
1403
1544
  .artifact-panel__resize-handle--active {
1404
- background: var(--nuraly-color-chatbot-text-secondary, #9ca3af);
1545
+ background: #9ca3af;
1405
1546
  }
1406
1547
  .artifact-panel__resize-bar {
1407
1548
  width: 2px;
1408
1549
  height: 24px;
1409
1550
  border-radius: 1px;
1410
- background: var(--nuraly-color-chatbot-text-secondary, #9ca3af);
1551
+ background: #9ca3af;
1411
1552
  transition: background 0.15s;
1412
1553
  }
1413
1554
  .artifact-panel__resize-handle:hover .artifact-panel__resize-bar,
1414
1555
  .artifact-panel__resize-handle--active .artifact-panel__resize-bar {
1415
- background: var(--nuraly-color-chatbot-text-primary, #1f2937);
1556
+ background: #1f2937;
1416
1557
  }
1417
1558
 
1418
1559
  .artifact-panel__body {
@@ -1420,7 +1561,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1420
1561
  display: flex;
1421
1562
  flex-direction: column;
1422
1563
  min-width: 0;
1423
- border-left: 1px solid var(--nuraly-color-chatbot-border, #e0e0e0);
1564
+ border-left: 1px solid #e0e0e0;
1424
1565
  overflow: hidden;
1425
1566
  }
1426
1567
 
@@ -1429,7 +1570,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1429
1570
  align-items: center;
1430
1571
  justify-content: space-between;
1431
1572
  padding: 12px 16px;
1432
- border-bottom: 1px solid var(--nuraly-color-chatbot-border, #e0e0e0);
1573
+ border-bottom: 1px solid #e0e0e0;
1433
1574
  flex-shrink: 0;
1434
1575
  }
1435
1576
 
@@ -1451,7 +1592,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1451
1592
  .artifact-panel__title {
1452
1593
  font-size: 13px;
1453
1594
  font-weight: 500;
1454
- color: var(--nuraly-color-chatbot-text-primary, #1f2937);
1595
+ color: #1f2937;
1455
1596
  white-space: nowrap;
1456
1597
  overflow: hidden;
1457
1598
  text-overflow: ellipsis;
@@ -1473,7 +1614,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1473
1614
  .artifact-panel__code {
1474
1615
  margin: 0;
1475
1616
  padding: 16px;
1476
- background: var(--nuraly-color-chatbot-artifact-code-bg, #f6f8fa);
1617
+ background: #f6f8fa;
1477
1618
  border-radius: 8px;
1478
1619
  font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
1479
1620
  font-size: 13px;
@@ -1481,7 +1622,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1481
1622
  overflow: auto;
1482
1623
  white-space: pre-wrap;
1483
1624
  word-wrap: break-word;
1484
- color: var(--nuraly-color-chatbot-text-primary, #1f2937);
1625
+ color: #1f2937;
1485
1626
  tab-size: 2;
1486
1627
  }
1487
1628
 
@@ -1493,7 +1634,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1493
1634
  .artifact-panel__rendered-md {
1494
1635
  font-size: 14px;
1495
1636
  line-height: 1.6;
1496
- color: var(--nuraly-color-chatbot-text-primary, #1f2937);
1637
+ color: #1f2937;
1497
1638
  }
1498
1639
 
1499
1640
  .artifact-panel__rendered-md h1,
@@ -1508,7 +1649,7 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1508
1649
  }
1509
1650
 
1510
1651
  .artifact-panel__rendered-md pre {
1511
- background: var(--nuraly-color-chatbot-artifact-code-bg, #f6f8fa);
1652
+ background: #f6f8fa;
1512
1653
  padding: 12px;
1513
1654
  border-radius: 6px;
1514
1655
  overflow: auto;
@@ -1517,13 +1658,13 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1517
1658
  .artifact-panel__rendered-html {
1518
1659
  font-size: 14px;
1519
1660
  line-height: 1.6;
1520
- color: var(--nuraly-color-chatbot-text-primary, #1f2937);
1661
+ color: #1f2937;
1521
1662
  }
1522
1663
 
1523
1664
  .artifact-panel__rendered-text {
1524
1665
  font-size: 14px;
1525
1666
  line-height: 1.6;
1526
- color: var(--nuraly-color-chatbot-text-primary, #1f2937);
1667
+ color: #1f2937;
1527
1668
  white-space: pre-wrap;
1528
1669
  word-wrap: break-word;
1529
1670
  font-family: system-ui, -apple-system, sans-serif;
@@ -1585,22 +1726,22 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1585
1726
 
1586
1727
  :host([boxed]) .messages {
1587
1728
  width: 100%;
1588
- padding: var(--nuraly-spacing-chatbot-message-padding, 8px) var(--nuraly-spacing-04, 0.75rem);
1729
+ padding: 8px 0.75rem;
1589
1730
  }
1590
1731
 
1591
1732
  .chat-container--boxed .input-container {
1592
1733
  width: 100%;
1593
- padding-left: var(--nuraly-spacing-04, 0.75rem);
1594
- padding-right: var(--nuraly-spacing-04, 0.75rem);
1734
+ padding-left: 0.75rem;
1735
+ padding-right: 0.75rem;
1595
1736
  }
1596
1737
 
1597
1738
  .chat-container--boxed .input-box {
1598
- padding: var(--nuraly-spacing-04, 0.75rem) 0;
1739
+ padding: 0.75rem 0;
1599
1740
  }
1600
1741
 
1601
1742
  :host([boxed]) .chatbot-content:has(.empty-state) + .input-box {
1602
1743
  max-width: 100%;
1603
- padding: 0 var(--nuraly-spacing-04, 0.75rem);
1744
+ padding: 0 0.75rem;
1604
1745
  }
1605
1746
  }
1606
1747
 
@@ -1634,24 +1775,24 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1634
1775
 
1635
1776
  /* Boxed mode mobile fixes */
1636
1777
  :host([boxed]) .messages {
1637
- padding: var(--nuraly-spacing-chatbot-message-padding, 8px) var(--nuraly-spacing-03, 0.5rem);
1778
+ padding: 8px 0.5rem;
1638
1779
  }
1639
1780
 
1640
1781
  .chat-container--boxed .input-container {
1641
- padding-left: var(--nuraly-spacing-03, 0.5rem);
1642
- padding-right: var(--nuraly-spacing-03, 0.5rem);
1782
+ padding-left: 0.5rem;
1783
+ padding-right: 0.5rem;
1643
1784
  }
1644
1785
 
1645
1786
  .chat-container--boxed .input-box {
1646
- padding: var(--nuraly-spacing-03, 0.5rem) 0;
1787
+ padding: 0.5rem 0;
1647
1788
  }
1648
1789
 
1649
1790
  :host([boxed]) .chatbot-content:has(.empty-state) + .input-box {
1650
- padding: 0 var(--nuraly-spacing-03, 0.5rem);
1791
+ padding: 0 0.5rem;
1651
1792
  }
1652
1793
 
1653
1794
  .input-row {
1654
- padding: var(--nuraly-spacing-04, 0.75rem);
1795
+ padding: 0.75rem;
1655
1796
  }
1656
1797
  }
1657
1798
 
@@ -1680,20 +1821,36 @@ class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._res
1680
1821
  * @license
1681
1822
  * Copyright 2023 Nuraly, Laabidi Aymen
1682
1823
  * 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};
1824
+ */;const F=t=>class extends t{constructor(){super(...arguments),this.handleSystemThemeChange=()=>{this.closest("[data-theme]")||document.documentElement.hasAttribute("data-theme")||this.requestUpdate()}}connectedCallback(){super.connectedCallback(),this.setupThemeObserver(),this.setupDesignSystemObserver(),this.setupSystemThemeListener()}disconnectedCallback(){var t,e,n;super.disconnectedCallback(),null===(t=this.themeObserver)||void 0===t||t.disconnect(),null===(e=this.designSystemObserver)||void 0===e||e.disconnect(),null===(n=this.mediaQuery)||void 0===n||n.removeEventListener("change",this.handleSystemThemeChange)}get currentTheme(){var t,e;const n=(null===(t=this.closest("[data-theme]"))||void 0===t?void 0:t.getAttribute("data-theme"))||document.documentElement.getAttribute("data-theme");return n||((null===(e=window.matchMedia)||void 0===e?void 0:e.call(window,"(prefers-color-scheme: dark)").matches)?"dark":"light")}get currentDesignSystem(){var t;const e=(null===(t=this.closest("[design-system]"))||void 0===t?void 0:t.getAttribute("design-system"))||document.documentElement.getAttribute("design-system");return"carbon"===e?e:"default"}setupThemeObserver(){this.themeObserver=new MutationObserver(()=>{this.requestUpdate()}),this.themeObserver.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]})}setupDesignSystemObserver(){this.designSystemObserver=new MutationObserver(()=>{this.requestUpdate()}),this.designSystemObserver.observe(document.documentElement,{attributes:!0,attributeFilter:["design-system"]})}setupSystemThemeListener(){window.matchMedia&&(this.mediaQuery=window.matchMedia("(prefers-color-scheme: dark)"),this.mediaQuery.addEventListener("change",this.handleSystemThemeChange))}},N=()=>{var t;return void 0!==globalThis.litElementVersions||"undefined"!=typeof process&&"development"===(null===(t=process.env)||void 0===t?void 0:t.NODE_ENV)||"undefined"!=typeof window&&("localhost"===window.location.hostname||"127.0.0.1"===window.location.hostname)},B=t=>class extends t{constructor(){super(...arguments),this.requiredComponents=[]}validateDependencies(){if(N())for(const t of this.requiredComponents)if(!this.isComponentAvailable(t))throw new Error(`Required component "${t}" is not registered. Please import and register the component before using ${this.tagName.toLowerCase()}. Example: import '@nuralyui/${t}';`)}validateDependenciesWithHandler(t){if(!N())return!0;let e=!0;for(const n of this.requiredComponents)if(!this.isComponentAvailable(n)){e=!1;const i=new Error(`Required component "${n}" is not registered. Please import and register the component before using ${this.tagName.toLowerCase()}.`);t?t(n,i):console.error(i.message)}return e}isComponentAvailable(t){return!!customElements.get(t)}getMissingDependencies(){return this.requiredComponents.filter(t=>!this.isComponentAvailable(t))}areDependenciesAvailable(){return this.requiredComponents.every(t=>this.isComponentAvailable(t))}addRequiredComponent(t){this.requiredComponents.includes(t)||this.requiredComponents.push(t)}removeRequiredComponent(t){const e=this.requiredComponents.indexOf(t);e>-1&&this.requiredComponents.splice(e,1)}},L=t=>class extends t{dispatchCustomEvent(t,e){this.dispatchEvent(new CustomEvent(t,{detail:e,bubbles:!0,composed:!0}))}dispatchEventWithMetadata(t,e){var n;const i=Object.assign(Object.assign({},e),{timestamp:Date.now(),componentName:(null===(n=this.tagName)||void 0===n?void 0:n.toLowerCase())||"unknown"});this.dispatchCustomEvent(t,i)}dispatchInputEvent(t,e){const n=Object.assign({target:e.target||this,value:e.value,originalEvent:e.originalEvent},e);this.dispatchCustomEvent(t,n)}dispatchFocusEvent(t,e){const n=Object.assign({target:e.target||this,value:e.value,focused:e.focused,cursorPosition:e.cursorPosition,selectedText:e.selectedText},e);this.dispatchCustomEvent(t,n)}dispatchValidationEvent(t,e){var n;const i=Object.assign({target:e.target||this,value:e.value,isValid:null!==(n=e.isValid)&&void 0!==n&&n,error:e.error},e);this.dispatchCustomEvent(t,i)}dispatchActionEvent(t,e){const n=Object.assign({target:e.target||this,action:e.action,previousValue:e.previousValue,newValue:e.newValue},e);this.dispatchCustomEvent(t,n)}isReadonlyKeyAllowed(t){if(t.ctrlKey||t.metaKey){return["KeyA","KeyC"].includes(t.code)}return["Tab","Escape","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End","PageUp","PageDown"].includes(t.key)}isActivationKey(t){return"Enter"===t.key||" "===t.key}},U=new Set,W=new Map;
1825
+ /**
1826
+ * @license
1827
+ * Copyright 2023 Nuraly, Laabidi Aymen
1828
+ * SPDX-License-Identifier: MIT
1829
+ */
1830
+ /**
1831
+ * @license
1832
+ * Copyright 2023 Nuraly, Laabidi Aymen
1833
+ * SPDX-License-Identifier: MIT
1834
+ */
1835
+ const H=t=>{class e extends t{constructor(){super(...arguments),this.o=null}createRenderRoot(){return this.constructor.useShadowDom?super.createRenderRoot():this}connectedCallback(){const t=this.constructor.useShadowDom;if(!t&&null===this.o)for(this.o=[];this.firstChild;)this.o.push(this.removeChild(this.firstChild));if(super.connectedCallback(),!t){const t=this.constructor,e=this.tagName.toLowerCase(),n=t.styles;if(n){const t=J(n);t&&function(t,e,n){var i;if(!W.has(t)){const n=new CSSStyleSheet;n.replaceSync(e),W.set(t,n)}const o=W.get(t),s=`doc:${t}`;if(U.has(s)||(document.adoptedStyleSheets=[...document.adoptedStyleSheets,o],U.add(s)),n){let e=n;for(;e;){const n=e.getRootNode();if(!(n instanceof ShadowRoot))break;{const s=`shadow:${((null===(i=n.host)||void 0===i?void 0:i.tagName)||"").toLowerCase()}:${t}`;U.has(s)||(n.adoptedStyleSheets=[...n.adoptedStyleSheets,o],U.add(s)),e=n.host}}}}(e,t,this)}}}get lightChildren(){return this.o?this.o.filter(t=>!(t instanceof Element&&t.hasAttribute("slot"))):[]}lightChildrenNamed(t){return this.o?this.o.filter(e=>e instanceof Element&&e.getAttribute("slot")===t):[]}}return e.useShadowDom=!1,e};function J(t){return Array.isArray(t)?t.map(t=>J(t)).filter(Boolean).join("\n"):t&&"string"==typeof t.cssText?t.cssText:"string"==typeof t?t:""}
1836
+ /**
1837
+ * @license
1838
+ * Copyright 2023 Nuraly, Laabidi Aymen
1839
+ * SPDX-License-Identifier: MIT
1840
+ */var q,V,G,K,Y,X,Q;!function(t){t.User="user",t.Bot="bot",t.System="system"}(q||(q={})),function(t){t.Dots="dots",t.Spinner="spinner",t.Wave="wave",t.Typing="typing"}(V||(V={})),function(t){t.Small="small",t.Medium="medium",t.Large="large",t.Full="full"}(G||(G={})),function(t){t.Default="default",t.Minimal="minimal",t.Rounded="rounded",t.ChatGPT="chatgpt"}(K||(K={})),function(t){t.Default="default",t.Error="error",t.Success="success",t.Loading="loading",t.Pending="pending"}(Y||(Y={})),function(t){t.Image="image",t.Document="document",t.Audio="audio",t.Video="video",t.Archive="archive",t.Code="code",t.Unknown="unknown"}(X||(X={})),function(t){t.Upload="upload",t.Clear="clear",t.Export="export",t.Settings="settings",t.Microphone="microphone",t.Camera="camera",t.Attach="attach"}(Q||(Q={}));const Z="",tt=1e3,et=100,nt=10485760,it=5,ot=["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"],st={"image/":X.Image,"audio/":X.Audio,"video/":X.Video,"application/pdf":X.Document,"application/msword":X.Document,"application/vnd.openxmlformats-officedocument":X.Document,"text/":X.Document,"application/zip":X.Archive,"application/x-rar":X.Archive,"application/javascript":X.Code,"text/html":X.Code,"text/css":X.Code};
1684
1841
  /**
1685
1842
  * @license
1686
1843
  * Copyright 2023 Nuraly, Laabidi Aymen
1687
1844
  * SPDX-License-Identifier: MIT
1688
1845
  */
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}
1846
+ function rt(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 at(t){return t.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}const lt={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 ct(t){return lt[t]||t.charAt(0).toUpperCase()+t.slice(1)}function dt(t){let e=at(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
1847
  /**
1691
1848
  * @license
1692
1849
  * Copyright 2023 Nuraly, Laabidi Aymen
1693
1850
  * 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`
1851
+ */function ht(t,i){var o,s,r,c,d,h,u,p;const f=null===(o=t.text)||void 0===o?void 0:o.includes("[ERROR_START]"),m={error:!!t.error||f,introduction:!!t.introduction,[t.sender]:!0};return n`
1695
1852
  <div
1696
- class="message ${a(g)}"
1853
+ class="message ${a(m)}"
1697
1854
  part="message"
1698
1855
  data-sender="${t.sender}"
1699
1856
  data-id="${t.id}"
@@ -1704,10 +1861,10 @@ function Q(t){if(!t)return"";const e=t instanceof Date?t:new Date(t);if(Number.i
1704
1861
  ${t?n`<div class="message__error-title" part="message-error-title">${t}</div>`:""}
1705
1862
  <div class="message__error-description" part="message-error-description">${i}</div>
1706
1863
  </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>"))}
1864
+ `}return n`${t}`}(null!==(r=null===(s=t.text)||void 0===s?void 0:s.trim())&&void 0!==r?r:""):(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
1865
  </div>
1709
1866
  ${t.files&&t.files.length>0?n`
1710
- <div class="message__attachments" part="message-attachments" role="list" aria-label="${v("Attached files")}">
1867
+ <div class="message__attachments" part="message-attachments" role="list" aria-label="${g("Attached files")}">
1711
1868
  ${t.files.map(t=>{return n`
1712
1869
  <nr-dropdown
1713
1870
  trigger="hover"
@@ -1750,17 +1907,17 @@ function Q(t){if(!t)return"";const e=t instanceof Date?t:new Date(t);if(Number.i
1750
1907
  `:e}
1751
1908
  <div class="message__footer" part="message-footer">
1752
1909
  <div class="message__timestamp" part="message-timestamp">
1753
- ${Q(t.timestamp)}
1910
+ ${rt(t.timestamp)}
1754
1911
  </div>
1755
1912
  <nr-icon
1756
1913
  name="copy"
1757
1914
  size="small"
1758
- color="var(--nuraly-color-chatbot-timestamp)"
1915
+ color="#9ca3af"
1759
1916
  class="message__copy"
1760
1917
  @click=${()=>i.onCopy(t)}
1761
1918
  @keydown=${e=>i.onCopyKeydown(e,t)}
1762
- title="${v("Copy message")}"
1763
- aria-label="${v("Copy message")}"
1919
+ title="${g("Copy message")}"
1920
+ aria-label="${g("Copy message")}"
1764
1921
  role="button"
1765
1922
  tabindex="0"
1766
1923
  ></nr-icon>
@@ -1773,23 +1930,23 @@ function Q(t){if(!t)return"";const e=t instanceof Date?t:new Date(t);if(Number.i
1773
1930
  part="retry-button"
1774
1931
  @click=${()=>i.onRetry(t)}
1775
1932
  @keydown=${i.onRetryKeydown}
1776
- aria-label="${v("Retry message")}"
1933
+ aria-label="${g("Retry message")}"
1777
1934
  >
1778
- ${v("Retry")}
1935
+ ${g("Retry")}
1779
1936
  </nr-button>`:e}
1780
1937
  </div>
1781
- `}function ot(t,i,o,r){return n`
1938
+ `}function ut(t,i,o,s){return n`
1782
1939
  <div class="messages" part="messages">
1783
1940
  ${0===t.length?n`
1784
1941
  <div class="empty-state" part="empty-state">
1785
1942
  <slot name="empty-state">
1786
1943
  <div class="empty-state__content">
1787
- ${v("Start a conversation")}
1944
+ ${g("Start a conversation")}
1788
1945
  </div>
1789
1946
  </slot>
1790
1947
  </div>
1791
1948
  `:e}
1792
- ${t.map(t=>it(t,r))}
1949
+ ${t.map(t=>ht(t,s))}
1793
1950
  ${i}
1794
1951
  ${o}
1795
1952
  </div>
@@ -1798,7 +1955,7 @@ function Q(t){if(!t)return"";const e=t instanceof Date?t:new Date(t);if(Number.i
1798
1955
  * @license
1799
1956
  * Copyright 2023 Nuraly, Laabidi Aymen
1800
1957
  * SPDX-License-Identifier: MIT
1801
- */function rt(t,i,o){return i.length>0?n`
1958
+ */function pt(t,i,o){return i.length>0?n`
1802
1959
  <div class="suggestion-container" part="suggestions">
1803
1960
  ${i.map(t=>function(t,e){return n`
1804
1961
  <div
@@ -1809,7 +1966,7 @@ function Q(t){if(!t)return"";const e=t instanceof Date?t:new Date(t);if(Number.i
1809
1966
  @click=${()=>e.onClick(t)}
1810
1967
  @keydown=${e.onKeydown}
1811
1968
  data-id="${t.id}"
1812
- aria-label="${v("Select suggestion: ")}${t.text}"
1969
+ aria-label="${g("Select suggestion: ")}${t.text}"
1813
1970
  >
1814
1971
  ${t.text}
1815
1972
  </div>
@@ -1820,9 +1977,9 @@ function Q(t){if(!t)return"";const e=t instanceof Date?t:new Date(t);if(Number.i
1820
1977
  * @license
1821
1978
  * Copyright 2023 Nuraly, Laabidi Aymen
1822
1979
  * SPDX-License-Identifier: MIT
1823
- */function st(t,e,i){return n`
1980
+ */function ft(t,e,i){return n`
1824
1981
  <div class="context-tags-row" part="context-tags">
1825
- ${d(t,t=>t.id,t=>{return n`
1982
+ ${c(t,t=>t.id,t=>{return n`
1826
1983
  <nr-dropdown
1827
1984
  trigger="hover"
1828
1985
  placement="top"
@@ -1863,7 +2020,7 @@ function Q(t){if(!t)return"";const e=t instanceof Date?t:new Date(t);if(Number.i
1863
2020
  </nr-dropdown>
1864
2021
  `;var o})}
1865
2022
  </div>
1866
- `}function at(t,i){return n`
2023
+ `}function gt(t,i){return n`
1867
2024
  <div class="action-buttons-row">
1868
2025
  <div class="action-buttons-left">
1869
2026
  ${t.enableFileUpload?function(t,e){return n`
@@ -1883,8 +2040,8 @@ function Q(t){if(!t)return"";const e=t instanceof Date?t:new Date(t);if(Number.i
1883
2040
  size="small"
1884
2041
  .icon=${["upload"]}
1885
2042
  ?disabled=${t.disabled}
1886
- aria-label="${v("Attach files")}"
1887
- title="${v("Attach files")}"
2043
+ aria-label="${g("Attach files")}"
2044
+ title="${g("Attach files")}"
1888
2045
  >
1889
2046
  Attach
1890
2047
  </nr-button>
@@ -1899,12 +2056,12 @@ function Q(t){if(!t)return"";const e=t instanceof Date?t:new Date(t);if(Number.i
1899
2056
  size="small"
1900
2057
  ?disabled=${t.disabled}
1901
2058
  searchable
1902
- search-placeholder="${v("Search modules...")}"
2059
+ search-placeholder="${g("Search modules...")}"
1903
2060
  use-custom-selected-display
1904
2061
  part="module-select"
1905
2062
  class="module-select"
1906
2063
  @nr-change=${e.onModuleChange}
1907
- aria-label="${v("Select modules")}"
2064
+ aria-label="${g("Select modules")}"
1908
2065
  >
1909
2066
  <span slot="selected-display">
1910
2067
  ${t.renderModuleDisplay()}
@@ -1912,8 +2069,45 @@ function Q(t){if(!t)return"";const e=t instanceof Date?t:new Date(t);if(Number.i
1912
2069
  </nr-select>
1913
2070
  `}(t,i):e}
1914
2071
  </div>
1915
-
2072
+
1916
2073
  <div class="action-buttons-right">
2074
+ ${t.showAudioButton&&!t.isQueryRunning?n`
2075
+ <!-- Speech-to-text: mic + keyboard indicator -->
2076
+ <button
2077
+ class="audio-mic-btn"
2078
+ title="${g("Record speech to text")}"
2079
+ ?disabled=${t.disabled}
2080
+ @click=${()=>{var t;return null===(t=i.onAudioStart)||void 0===t?void 0:t.call(i,"transcribe")}}
2081
+ aria-label="${g("Record speech to text")}"
2082
+ >
2083
+ <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
2084
+ <path d="M12 1a3 3 0 00-3 3v8a3 3 0 006 0V4a3 3 0 00-3-3z"/>
2085
+ <path d="M19 10v2a7 7 0 01-14 0v-2"/>
2086
+ <line x1="12" y1="19" x2="12" y2="23"/>
2087
+ </svg>
2088
+ <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="audio-mic-badge">
2089
+ <rect x="2" y="7" width="20" height="14" rx="2"/>
2090
+ <path d="M7 12h2l2 3 2-5 2 2h2"/>
2091
+ </svg>
2092
+ </button>
2093
+ <!-- Voice message: mic + waveform indicator -->
2094
+ <button
2095
+ class="audio-mic-btn"
2096
+ title="${g("Send voice message")}"
2097
+ ?disabled=${t.disabled}
2098
+ @click=${()=>{var t;return null===(t=i.onAudioStart)||void 0===t?void 0:t.call(i,"message")}}
2099
+ aria-label="${g("Send voice message")}"
2100
+ >
2101
+ <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
2102
+ <path d="M12 1a3 3 0 00-3 3v8a3 3 0 006 0V4a3 3 0 00-3-3z"/>
2103
+ <path d="M19 10v2a7 7 0 01-14 0v-2"/>
2104
+ <line x1="12" y1="19" x2="12" y2="23"/>
2105
+ </svg>
2106
+ <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="audio-mic-badge">
2107
+ <path d="M2 12h2M6 8h2M10 6h2M14 8h2M18 12h2M22 12h2"/>
2108
+ </svg>
2109
+ </button>
2110
+ `:e}
1917
2111
  ${t.showSendButton&&(!t.disabled||t.isQueryRunning)&&(t.currentInput.trim()||t.uploadedFiles.length>0||t.isQueryRunning)?function(t,e){return n`
1918
2112
  <nr-button
1919
2113
  class="input-box__send-button"
@@ -1923,21 +2117,96 @@ function Q(t){if(!t)return"";const e=t instanceof Date?t:new Date(t);if(Number.i
1923
2117
  .iconRight=${t.isQueryRunning?"square":"arrow-up"}
1924
2118
  @click=${t.isQueryRunning?e.onStop:e.onSend}
1925
2119
  @keydown=${e.onSendKeydown}
1926
- aria-label="${t.isQueryRunning?v("Stop query"):v("Send message")}"
1927
- title="${t.isQueryRunning?v("Stop query"):v("Send message")}"
2120
+ aria-label="${t.isQueryRunning?g("Stop query"):g("Send message")}"
2121
+ title="${t.isQueryRunning?g("Stop query"):g("Send message")}"
1928
2122
  >
1929
- ${t.isQueryRunning?v("Stop"):v("Send")}
2123
+ ${t.isQueryRunning?g("Stop"):g("Send")}
1930
2124
  </nr-button>
1931
2125
  `}(t,i):e}
1932
2126
  </div>
1933
2127
  </div>
2128
+ `}function mt(t,i){return t.audioRecording.active?n`
2129
+ <div class="input-box" part="input-box">
2130
+ <div class="input-container" part="input-container">
2131
+ ${function(t,e){const{duration:i,bars:o}=t.audioRecording,s="transcribe"===t.audioMode,r=g(s?"Convert to text":"Send as voice message"),a=s?n`<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
2132
+ <rect x="2" y="3" width="20" height="14" rx="2"/><path d="M8 21h8M12 17v4"/>
2133
+ <path d="M7 10h2l2 3 2-6 2 3h2"/>
2134
+ </svg>`:n`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
2135
+ <path d="m22 2-7 20-4-9-9-4Z"/><path d="M22 2 11 13"/>
2136
+ </svg>`;return n`
2137
+ <div class="audio-recording-bar">
2138
+ <button
2139
+ class="audio-rec-cancel"
2140
+ title="${g("Cancel recording")}"
2141
+ @click=${e.onAudioCancel}
2142
+ aria-label="${g("Cancel recording")}"
2143
+ >
2144
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
2145
+ <polyline points="3 6 5 6 21 6"/>
2146
+ <path d="M19 6l-1 14a2 2 0 01-2 2H8a2 2 0 01-2-2L5 6"/>
2147
+ <path d="M10 11v6"/><path d="M14 11v6"/><path d="M9 6V4h6v2"/>
2148
+ </svg>
2149
+ </button>
2150
+
2151
+ <div class="audio-rec-indicator">
2152
+ <span class="audio-rec-dot"></span>
2153
+ <div class="audio-rec-wave">
2154
+ ${o.map(t=>n`
2155
+ <div class="audio-rec-bar" style=${d({height:`${Math.round(24*t)}px`})}></div>
2156
+ `)}
2157
+ </div>
2158
+ <span class="audio-rec-time">${i}</span>
2159
+ </div>
2160
+
2161
+ <span class="audio-rec-mode-label">
2162
+ ${g(s?"Speech to text":"Voice message")}
2163
+ </span>
2164
+
2165
+ <button
2166
+ class="audio-rec-send ${s?"audio-rec-send--transcribe":""}"
2167
+ title="${r}"
2168
+ @click=${e.onAudioSend}
2169
+ aria-label="${r}"
2170
+ >
2171
+ ${a}
2172
+ </button>
2173
+ </div>
2174
+ `}(t,i)}
2175
+ </div>
2176
+ </div>
2177
+ `:n`
2178
+ <div class="input-box" part="input-box">
2179
+ <div class="input-container" part="input-container">
2180
+ <!-- Context tags -->
2181
+ ${t.uploadedFiles.length>0?ft(t.uploadedFiles,i.onFileRemove,i.onFileClick):e}
2182
+
2183
+ <!-- Input area -->
2184
+ <div class="input-row">
2185
+ <div
2186
+ class="input-box__input"
2187
+ part="input"
2188
+ contenteditable="true"
2189
+ role="textbox"
2190
+ aria-multiline="true"
2191
+ aria-label="${g("Chat input")}"
2192
+ data-placeholder="${t.placeholder}"
2193
+ @input=${i.onInput}
2194
+ @keydown=${i.onKeydown}
2195
+ @focus=${i.onFocus}
2196
+ @blur=${i.onBlur}
2197
+ ></div>
2198
+ </div>
2199
+
2200
+ <!-- Action buttons -->
2201
+ ${gt(t,i)}
2202
+ </div>
2203
+ </div>
1934
2204
  `}
1935
2205
  /**
1936
2206
  * @license
1937
2207
  * Copyright 2023 Nuraly, Laabidi Aymen
1938
2208
  * 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`
2209
+ */function vt(t,e,i){const o=t.messages.length>0?t.messages[t.messages.length-1]:null,s=o&&"string"==typeof o.text?o.text:"";return n`
1941
2210
  <div
1942
2211
  class="thread-item ${a({"thread-item--active":t.id===e.activeThreadId})}"
1943
2212
  @click=${()=>i.onSelectThread(t.id)}
@@ -1954,13 +2223,13 @@ function lt(t,e,i){const o=t.messages.length>0?t.messages[t.messages.length-1]:n
1954
2223
  @blur=${e=>{const n=e.target.value.trim();n&&n!==t.title?i.onRenameThread(t.id,n):i.onRenameThread(t.id,t.title||"")}}
1955
2224
  />
1956
2225
  `:n`
1957
- <div class="thread-item__title">${t.title||v("New Chat")}</div>
2226
+ <div class="thread-item__title">${t.title||g("New Chat")}</div>
1958
2227
  `}
1959
2228
  <div class="thread-item__actions">
1960
2229
  ${i.onRenameThread&&e.editingThreadId!==t.id?n`
1961
2230
  <button
1962
2231
  class="thread-item__action-btn"
1963
- title="${v("Rename conversation")}"
2232
+ title="${g("Rename conversation")}"
1964
2233
  @click=${e=>{e.stopPropagation(),e.target.dispatchEvent(new CustomEvent("nr-thread-edit",{bubbles:!0,composed:!0,detail:{threadId:t.id}}))}}
1965
2234
  part="thread-rename"
1966
2235
  >
@@ -1970,7 +2239,7 @@ function lt(t,e,i){const o=t.messages.length>0?t.messages[t.messages.length-1]:n
1970
2239
  ${i.onBookmarkThread?n`
1971
2240
  <button
1972
2241
  class="thread-item__action-btn ${t.bookmarked?"thread-item__bookmark--active":""}"
1973
- title="${t.bookmarked?v("Remove bookmark"):v("Bookmark conversation")}"
2242
+ title="${t.bookmarked?g("Remove bookmark"):g("Bookmark conversation")}"
1974
2243
  @click=${e=>{e.stopPropagation(),i.onBookmarkThread(t.id)}}
1975
2244
  part="thread-bookmark"
1976
2245
  >
@@ -1983,10 +2252,10 @@ function lt(t,e,i){const o=t.messages.length>0?t.messages[t.messages.length-1]:n
1983
2252
  `:""}
1984
2253
  ${i.onDeleteThread?n`
1985
2254
  <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")}"
2255
+ title="${g("Delete this conversation?")}"
2256
+ description="${g("This action cannot be undone.")}"
2257
+ ok-text="${g("Delete")}"
2258
+ cancel-text="${g("Cancel")}"
1990
2259
  ok-type="danger"
1991
2260
  placement="right"
1992
2261
  @click=${t=>t.stopPropagation()}
@@ -1995,7 +2264,7 @@ function lt(t,e,i){const o=t.messages.length>0?t.messages[t.messages.length-1]:n
1995
2264
  <button
1996
2265
  slot="trigger"
1997
2266
  class="thread-item__action-btn thread-item__delete"
1998
- title="${v("Delete conversation")}"
2267
+ title="${g("Delete conversation")}"
1999
2268
  part="thread-delete"
2000
2269
  >
2001
2270
  <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>
@@ -2005,11 +2274,11 @@ function lt(t,e,i){const o=t.messages.length>0?t.messages[t.messages.length-1]:n
2005
2274
  </div>
2006
2275
  </div>
2007
2276
  <div class="thread-item__preview">
2008
- ${r}
2277
+ ${s}
2009
2278
  </div>
2010
- <div class="thread-item__timestamp">${Q(t.updatedAt)}</div>
2279
+ <div class="thread-item__timestamp">${rt(t.updatedAt)}</div>
2011
2280
  </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`
2281
+ `}function bt(t,i){if(!t.isOpen||!t.file)return e;const o=t.file,s=o.mimeType.startsWith("image/"),r="application/pdf"===o.mimeType||o.name.toLowerCase().endsWith(".pdf");return n`
2013
2282
  <nr-modal
2014
2283
  .open=${t.isOpen}
2015
2284
  size="large"
@@ -2017,13 +2286,13 @@ function lt(t,e,i){const o=t.messages.length>0?t.messages[t.messages.length-1]:n
2017
2286
  @modal-close=${i.onClose}
2018
2287
  >
2019
2288
  <div style="width: 100%; height: 75vh; display: flex; flex-direction: column; align-items: stretch; justify-content: stretch;">
2020
- ${r&&(o.url||o.previewUrl)?n`
2289
+ ${s&&(o.url||o.previewUrl)?n`
2021
2290
  <img
2022
2291
  src="${o.url||o.previewUrl}"
2023
2292
  alt="${o.name}"
2024
2293
  style="max-width: 100%; max-height: 100%; object-fit: contain; align-self: center;"
2025
2294
  />
2026
- `:s&&o.url?n`
2295
+ `:r&&o.url?n`
2027
2296
  <div style="width: 100%; height: 100%; position: relative;">
2028
2297
  <nr-document
2029
2298
  .src="${o.url}"
@@ -2038,7 +2307,7 @@ function lt(t,e,i){const o=t.messages.length>0?t.messages[t.messages.length-1]:n
2038
2307
  <div style="text-align: center; padding: 2rem; align-self: center;">
2039
2308
  <nr-icon name="file" size="xlarge" style="margin-bottom: 1rem;"></nr-icon>
2040
2309
  <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;">
2310
+ <p style="color: #9ca3af; margin-bottom: 1.5rem;">
2042
2311
  ${
2043
2312
  /**
2044
2313
  * @license
@@ -2064,7 +2333,7 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2064
2333
  * @license
2065
2334
  * Copyright 2023 Nuraly, Laabidi Aymen
2066
2335
  * 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`
2336
+ */function yt(t,i){var o;if(!t.isOpen||!t.artifact)return e;const s=t.artifact,r=ct(s.language);return n`
2068
2337
  <div class="artifact-panel" part="artifact-panel">
2069
2338
  <div class="artifact-panel__resize-handle" part="artifact-panel-resize-handle">
2070
2339
  <div class="artifact-panel__resize-bar"></div>
@@ -2072,30 +2341,30 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2072
2341
  <div class="artifact-panel__body">
2073
2342
  <div class="artifact-panel__header">
2074
2343
  <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>
2344
+ <nr-tag size="small" class="artifact-panel__lang-badge">${r}</nr-tag>
2345
+ <span class="artifact-panel__title">${s.title}</span>
2077
2346
  </div>
2078
2347
  <div class="artifact-panel__actions">
2079
2348
  <nr-button
2080
2349
  type="text"
2081
2350
  size="small"
2082
2351
  .icon=${["copy"]}
2083
- @click=${()=>i.onCopy(r)}
2084
- title="${v("Copy code")}"
2085
- aria-label="${v("Copy code")}"
2352
+ @click=${()=>i.onCopy(s)}
2353
+ title="${g("Copy code")}"
2354
+ aria-label="${g("Copy code")}"
2086
2355
  ></nr-button>
2087
2356
  <nr-button
2088
2357
  type="text"
2089
2358
  size="small"
2090
2359
  .icon=${["x"]}
2091
2360
  @click=${i.onClose}
2092
- title="${v("Close panel")}"
2093
- aria-label="${v("Close panel")}"
2361
+ title="${g("Close panel")}"
2362
+ aria-label="${g("Close panel")}"
2094
2363
  ></nr-button>
2095
2364
  </div>
2096
2365
  </div>
2097
2366
  <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)}
2367
+ ${(null===(o=t.renderContent)||void 0===o?void 0:o.call(t,s))||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(dt(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>`}}(s)}
2099
2368
  </div>
2100
2369
  </div>
2101
2370
  </div>
@@ -2104,9 +2373,9 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2104
2373
  * @license
2105
2374
  * Copyright 2023 Nuraly, Laabidi Aymen
2106
2375
  * SPDX-License-Identifier: MIT
2107
- */function ht(t,i){return!1!==t.showMessages?n`
2376
+ */function xt(t,i){return!1!==t.showMessages?n`
2108
2377
  <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`
2378
+ ${ut(t.messages,pt(t.chatStarted,t.suggestions,i.suggestion),t.isTyping?function(t,i,o){if(!t)return e;const s=i===V.Dots?n`
2110
2379
  <div class="dots">
2111
2380
  <span></span>
2112
2381
  <span></span>
@@ -2115,24 +2384,24 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2115
2384
  `:n`<div class="spinner"></div>`;return n`
2116
2385
  <div class="message bot loading" part="typing-indicator">
2117
2386
  <div class="message__content">
2118
- ${r}
2387
+ ${s}
2119
2388
  ${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
2389
  </div>
2121
2390
  </div>
2122
- `}(t.isTyping,t.loadingIndicator||F.Spinner,t.loadingText):e,i.message)}
2391
+ `}(t.isTyping,t.loadingIndicator||V.Spinner,t.loadingText):e,i.message)}
2123
2392
  <slot name="messages"></slot>
2124
2393
  </div>
2125
2394
  `:t.suggestions&&t.suggestions.length>0?n`
2126
2395
  <div class="input-only-suggestions" part="input-only-suggestions">
2127
- ${rt(0,t.suggestions,i.suggestion)}
2396
+ ${pt(0,t.suggestions,i.suggestion)}
2128
2397
  </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">
2398
+ `:e}function wt(t,i){var o;const s=t.enableArtifacts&&(null===(o=t.artifactPanel)||void 0===o?void 0:o.isOpen);return n`
2399
+ <div class="chatbot-container ${a({"chatbot-container--with-sidebar":t.enableThreads&&t.isThreadSidebarOpen,"chatbot-container--with-artifact-panel":!!s})}" part="container">
2131
2400
 
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`
2401
+ ${t.enableThreads&&t.isThreadSidebarOpen&&t.threadSidebar&&i.threadSidebar?function(t,i){const o=t.threads.filter(t=>t.bookmarked),s=t.threads.filter(t=>!t.bookmarked);return n`
2133
2402
  <div class="thread-sidebar" part="thread-sidebar">
2134
2403
  <div class="thread-sidebar__header">
2135
- <h3>${v("Conversations")}</h3>
2404
+ <h3>${g("Conversations")}</h3>
2136
2405
  </div>
2137
2406
 
2138
2407
  <div class="thread-list">
@@ -2140,18 +2409,18 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2140
2409
  <div class="thread-section" part="thread-section-bookmarks">
2141
2410
  <div class="thread-section__label">
2142
2411
  <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")}
2412
+ ${g("Bookmarks")}
2144
2413
  </div>
2145
- ${d(o,t=>t.id,e=>lt(e,t,i))}
2414
+ ${c(o,t=>t.id,e=>vt(e,t,i))}
2146
2415
  </div>
2147
2416
  `:e}
2148
- ${r.length>0||0===o.length?n`
2417
+ ${s.length>0||0===o.length?n`
2149
2418
  ${o.length>0?n`
2150
- <div class="thread-section__label">${v("All Conversations")}</div>
2419
+ <div class="thread-section__label">${g("All Conversations")}</div>
2151
2420
  `: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>
2421
+ ${c(s,t=>t.id,e=>vt(e,t,i))}
2422
+ ${0===s.length&&0===o.length?n`
2423
+ <p class="empty-msg">${g("No conversations yet")}</p>
2155
2424
  `:e}
2156
2425
  `:e}
2157
2426
  </div>
@@ -2173,8 +2442,8 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2173
2442
  size="small"
2174
2443
  .icon=${["panel-left"]}
2175
2444
  @click=${i.onToggleThreadSidebar}
2176
- title="${v(t.isThreadSidebarOpen?"Hide threads":"Show threads")}"
2177
- aria-label="${v(t.isThreadSidebarOpen?"Hide threads":"Show threads")}"
2445
+ title="${g(t.isThreadSidebarOpen?"Hide threads":"Show threads")}"
2446
+ aria-label="${g(t.isThreadSidebarOpen?"Hide threads":"Show threads")}"
2178
2447
  ></nr-button>
2179
2448
  ${t.enableThreadCreation&&t.messages.length>0?n`
2180
2449
  <nr-button
@@ -2182,8 +2451,8 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2182
2451
  size="small"
2183
2452
  .icon=${["square-pen"]}
2184
2453
  @click=${null===(o=i.threadSidebar)||void 0===o?void 0:o.onCreateNew}
2185
- title="${v("New conversation")}"
2186
- aria-label="${v("New conversation")}"
2454
+ title="${g("New conversation")}"
2455
+ aria-label="${g("New conversation")}"
2187
2456
  ></nr-button>
2188
2457
  `:""}
2189
2458
  </div>
@@ -2191,41 +2460,14 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2191
2460
 
2192
2461
  <slot name="header"></slot>
2193
2462
 
2194
- ${ht(t,i)}
2463
+ ${xt(t,i)}
2195
2464
 
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)}
2465
+ ${mt(t.inputBox,i.inputBox)}
2224
2466
 
2225
2467
  <slot name="footer"></slot>
2226
2468
  </div>
2227
2469
 
2228
- ${r&&t.artifactPanel&&i.artifactPanel?dt(t.artifactPanel,i.artifactPanel):""}
2470
+ ${s&&t.artifactPanel&&i.artifactPanel?yt(t.artifactPanel,i.artifactPanel):""}
2229
2471
 
2230
2472
  ${t.isDragging?function(t,e){return n`
2231
2473
  <div
@@ -2238,7 +2480,7 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2238
2480
  <div class="file-upload-area__content">
2239
2481
  <div class="file-upload-area__icon">📁</div>
2240
2482
  <div class="file-upload-area__text">
2241
- ${v("Drop files here to upload")}
2483
+ ${g("Drop files here to upload")}
2242
2484
  </div>
2243
2485
  </div>
2244
2486
  </div>
@@ -2255,7 +2497,7 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2255
2497
  @nr-modal-close=${i.onClose}
2256
2498
  part="url-modal"
2257
2499
  >
2258
- <div slot="header">${v("Add URL")}</div>
2500
+ <div slot="header">${g("Add URL")}</div>
2259
2501
 
2260
2502
  <div >
2261
2503
  <nr-row gutter="8" align="bottom">
@@ -2264,12 +2506,12 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2264
2506
 
2265
2507
  type="url"
2266
2508
  .value=${t.urlInput}
2267
- placeholder="${v("Enter URL...")}"
2509
+ placeholder="${g("Enter URL...")}"
2268
2510
  ?disabled=${t.isLoading}
2269
2511
  @nr-input=${i.onUrlInputChange}
2270
2512
  @keydown=${i.onUrlInputKeydown}
2271
2513
  >
2272
- <nr-label slot="label">${v("URL")}</nr-label>
2514
+ <nr-label slot="label">${g("URL")}</nr-label>
2273
2515
  </nr-input>
2274
2516
  </nr-col>
2275
2517
  <nr-col span="4" >
@@ -2279,7 +2521,7 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2279
2521
  size="small"
2280
2522
  ?disabled=${t.isLoading}
2281
2523
  @click=${i.onAttachFile}
2282
- title="${v("Load file from URL")}"
2524
+ title="${g("Load file from URL")}"
2283
2525
  style="margin-left: 0.5rem;"
2284
2526
  >
2285
2527
  </nr-button>
@@ -2301,7 +2543,7 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2301
2543
  type="success"
2302
2544
  style="margin-top: 1rem;"
2303
2545
  >
2304
- ${v("Selected file")}: ${t.selectedFileName}
2546
+ ${g("Selected file")}: ${t.selectedFileName}
2305
2547
  </nr-alert>
2306
2548
  `:e}
2307
2549
 
@@ -2310,7 +2552,7 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2310
2552
  type="info"
2311
2553
  style="margin-top: 1rem;"
2312
2554
  >
2313
- ${v("Loading file from URL...")}
2555
+ ${g("Loading file from URL...")}
2314
2556
  </nr-alert>
2315
2557
  `:e}
2316
2558
  </div>
@@ -2322,7 +2564,7 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2322
2564
  ?disabled=${t.isLoading}
2323
2565
  @click=${i.onClose}
2324
2566
  >
2325
- ${v("Cancel")}
2567
+ ${g("Cancel")}
2326
2568
  </nr-button>
2327
2569
  <nr-button
2328
2570
  type="primary"
@@ -2331,7 +2573,7 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2331
2573
  ?loading=${t.isLoading}
2332
2574
  @click=${i.onConfirm}
2333
2575
  >
2334
- ${v("Add")}
2576
+ ${g("Add")}
2335
2577
  </nr-button>
2336
2578
  </div>
2337
2579
  </nr-modal>
@@ -2340,11 +2582,16 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2340
2582
  <slot></slot>
2341
2583
  </div>
2342
2584
  `}
2585
+ /**
2586
+ * @license
2587
+ * Copyright 2024 Nuraly, Laabidi Aymen
2588
+ * SPDX-License-Identifier: MIT
2589
+ */var _t=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};const $t={active:!1,duration:"00:00",bars:[]};class kt{constructor(t){this.state=Object.assign({},$t),this._mediaRecorder=null,this._audioChunks=[],this._waveformSamples=[],this._analyser=null,this._timer=null,this._animFrame=0,this._startTime=0,this._stopResolve=null,this.host=t,t.addController(this)}hostConnected(){}hostDisconnected(){this.cancel()}start(){return _t(this,void 0,void 0,function*(){try{const t=yield navigator.mediaDevices.getUserMedia({audio:!0});this._audioChunks=[],this._waveformSamples=[];const e=["audio/webm;codecs=opus","audio/webm","audio/mp4","audio/aac",""].find(t=>!t||MediaRecorder.isTypeSupported(t))||"";this._mediaRecorder=new MediaRecorder(t,e?{mimeType:e}:void 0);const n=new AudioContext;"suspended"===n.state&&(yield n.resume());const i=n.createMediaStreamSource(t);this._analyser=n.createAnalyser(),this._analyser.fftSize=256,this._analyser.smoothingTimeConstant=.3,i.connect(this._analyser),this._mediaRecorder.ondataavailable=t=>{t.data.size>0&&this._audioChunks.push(t.data)},this._mediaRecorder.onstop=()=>{var e;t.getTracks().forEach(t=>t.stop()),n.close().catch(()=>{}),this._timer&&clearInterval(this._timer),cancelAnimationFrame(this._animFrame),this._analyser=null,null===(e=this._stopResolve)||void 0===e||e.call(this,[...this._audioChunks]),this._stopResolve=null},this._mediaRecorder.start(100),this._startTime=Date.now(),this.state={active:!0,duration:"00:00",bars:[]},this.host.requestUpdate(),this._timer=setInterval(()=>{const t=Math.floor((Date.now()-this._startTime)/1e3),e=Math.floor(t/60).toString().padStart(2,"0"),n=(t%60).toString().padStart(2,"0");this.state=Object.assign(Object.assign({},this.state),{duration:`${e}:${n}`}),this.host.requestUpdate()},500);let o=0;const s=()=>{if(!this._analyser||!this.state.active)return;const t=performance.now();if(t-o>80){o=t;const e=this._analyser.frequencyBinCount,n=new Uint8Array(e);this._analyser.getByteFrequencyData(n);let i=n.reduce((t,e)=>t+e,0)/e;if(i<1){this._analyser.getByteTimeDomainData(n);let t=0;for(let i=0;i<e;i++){const e=Math.abs(n[i]-128);e>t&&(t=e)}i=t}const s=Math.min(1,i/128);this._waveformSamples.push(s);const r=this._waveformSamples.slice(-40).map(t=>Math.max(.08,t));this.state=Object.assign(Object.assign({},this.state),{bars:r}),this.host.requestUpdate()}this._animFrame=requestAnimationFrame(s)};this._animFrame=requestAnimationFrame(s)}catch(t){console.error("[ChatbotAudio] Mic access denied")}})}cancel(){var t;"recording"===(null===(t=this._mediaRecorder)||void 0===t?void 0:t.state)&&(this._stopResolve=null,this._mediaRecorder.stop()),this._audioChunks=[],this._waveformSamples=[],this._timer&&clearInterval(this._timer),cancelAnimationFrame(this._animFrame),this._analyser=null,this.state=Object.assign({},$t),this.host.requestUpdate()}stop(){return _t(this,void 0,void 0,function*(){var t;if(!this._mediaRecorder||"recording"!==this._mediaRecorder.state)return null;const e=this.state.duration,n=yield new Promise(t=>{this._stopResolve=t,this._mediaRecorder.stop()});yield new Promise(t=>setTimeout(t,200)),this.state=Object.assign({},$t),this.host.requestUpdate();const i=(null===(t=this._mediaRecorder)||void 0===t?void 0:t.mimeType)||"audio/webm",o=new Blob(n,{type:i});this._audioChunks=[],this._waveformSamples=[];try{const{compressToOpus:t}=yield Promise.resolve().then(function(){return Ze}),{blob:n,mimeType:s}=yield t(o,i);return{blob:n,mimeType:s,duration:e}}catch(t){return{blob:o,mimeType:i,duration:e}}})}}
2343
2590
  /**
2344
2591
  * @license
2345
2592
  * Copyright 2023 Nuraly, Laabidi Aymen
2346
2593
  * 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`
2594
+ */var St=function(t,e,n,i){for(var o,s=arguments.length,r=s<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,n):i,a=t.length-1;a>=0;a--)(o=t[a])&&(r=(s<3?o(r):s>3?o(e,n,r):o(e,n))||r);return s>3&&r&&Object.defineProperty(e,n,r),r},Pt=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};let Mt=class extends((t=>B(F(L(H(t)))))(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=G.Medium,this.variant=K.Default,this.loadingIndicator=V.Dots,this.loadingText=g("Agent is working..."),this.disabled=!1,this.placeholder=g("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=g("Select Modules"),this.enableArtifacts=!1,this.showAudioButton=!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._audio=new kt(this),this._audioMode="message",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 s=t;if("Enter"!==s.key&&" "!==s.key)return;const r=null===(n=(e=s.target).closest)||void 0===n?void 0:n.call(e,"[data-artifact-id]");if(r){s.preventDefault();const t=r.dataset.artifactId;return void(t&&this.handleArtifactClick(t))}const a=null===(o=(i=s.target).closest)||void 0===o?void 0:o.call(i,"[data-selection-value]");if(a){s.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,s;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===(s=this.selectedArtifact)||void 0===s?void 0:s.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),showAudioButton:this.showAudioButton,audioRecording:this._audio.state,audioMode:this._audioMode},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),onAudioStart:this.handleAudioStart.bind(this),onAudioCancel:this.handleAudioCancel.bind(this),onAudioSend:this.handleAudioSend.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
2595
  <div
2349
2596
  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
2597
  dir=${this.isRTL?"rtl":"ltr"}
@@ -2354,10 +2601,10 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2354
2601
  data-mode="${this.mode}"
2355
2602
  part="chat-container">
2356
2603
 
2357
- ${ut(e,i)}
2604
+ ${wt(e,i)}
2358
2605
  </div>
2359
2606
 
2360
- ${ct({isOpen:this.isFilePreviewModalOpen,file:this.previewFile},{onClose:this.handleFilePreviewModalClose.bind(this)})}
2607
+ ${bt({isOpen:this.isFilePreviewModalOpen,file:this.previewFile},{onClose:this.handleFilePreviewModalClose.bind(this)})}
2361
2608
  `}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
2609
  <span class="module-display-single">
2363
2610
  ${(null==t?void 0:t.icon)?n`<nr-icon name="${t.icon}" size="small"></nr-icon>`:e}
@@ -2365,163 +2612,176 @@ function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(102
2365
2612
  </span>
2366
2613
  `}return n`
2367
2614
  <span class="module-display-multiple">
2368
- ${t} ${v("modules selected")}
2615
+ ${t} ${g("modules selected")}
2369
2616
  </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);
2617
+ `}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()}handleAudioStart(t){this._audioMode=t,this._audio.start()}handleAudioCancel(){this._audio.cancel()}handleAudioSend(){return Pt(this,void 0,void 0,function*(){var t;const e=yield this._audio.stop();if(!e)return;const n=this._audioMode;null===(t=this.onAudioRecorded)||void 0===t||t.call(this,e.blob,e.mimeType,e.duration,n),this.dispatchEvent(new CustomEvent("nr-chatbot-audio-recorded",{detail:{blob:e.blob,mimeType:e.mimeType,duration:e.duration,mode:n},bubbles:!0,composed:!0}))})}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=>Pt(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 Pt(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 s=!1,r=0,a=0;const l=t=>{if(!s)return;const e=t.clientX-r,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=()=>{s&&(s=!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(),s=!0,r=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||q.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}};Mt.useShadowDom=!0,Mt.styles=D,St([o({type:Array})],Mt.prototype,"messages",void 0),St([o({type:String})],Mt.prototype,"currentInput",void 0),St([o({type:Boolean})],Mt.prototype,"isBotTyping",void 0),St([o({type:Boolean})],Mt.prototype,"isQueryRunning",void 0),St([o({type:Array})],Mt.prototype,"suggestions",void 0),St([o({type:Boolean})],Mt.prototype,"chatStarted",void 0),St([o({type:Boolean})],Mt.prototype,"isRTL",void 0),St([o({type:String})],Mt.prototype,"size",void 0),St([o({type:String})],Mt.prototype,"variant",void 0),St([o({type:String})],Mt.prototype,"loadingIndicator",void 0),St([o({type:String})],Mt.prototype,"loadingText",void 0),St([o({type:Boolean})],Mt.prototype,"disabled",void 0),St([o({type:String})],Mt.prototype,"placeholder",void 0),St([o({type:Boolean})],Mt.prototype,"showSendButton",void 0),St([o({type:Boolean})],Mt.prototype,"autoScroll",void 0),St([o({type:Boolean})],Mt.prototype,"showThreads",void 0),St([o({type:Boolean})],Mt.prototype,"enableThreadCreation",void 0),St([o({type:Array})],Mt.prototype,"threads",void 0),St([o({type:String})],Mt.prototype,"activeThreadId",void 0),St([o({type:String})],Mt.prototype,"mode",void 0),St([o({type:Boolean,reflect:!0})],Mt.prototype,"boxed",void 0),St([o({type:Boolean})],Mt.prototype,"enableUrlSync",void 0),St([o({type:Boolean})],Mt.prototype,"showMessages",void 0),St([o({type:Boolean})],Mt.prototype,"enableFileUpload",void 0),St([o({type:Array})],Mt.prototype,"uploadedFiles",void 0),St([o({type:Array})],Mt.prototype,"actionButtons",void 0),St([o({type:Boolean})],Mt.prototype,"enableModuleSelection",void 0),St([o({type:Array})],Mt.prototype,"modules",void 0),St([o({type:Array})],Mt.prototype,"selectedModules",void 0),St([o({type:String})],Mt.prototype,"moduleSelectionLabel",void 0),St([o({type:Boolean})],Mt.prototype,"enableArtifacts",void 0),St([o({type:Boolean,attribute:"show-audio-button"})],Mt.prototype,"showAudioButton",void 0),St([o({type:Function})],Mt.prototype,"onAudioRecorded",void 0),St([o({type:Function})],Mt.prototype,"renderArtifactContent",void 0),St([o({type:Object})],Mt.prototype,"controller",void 0),St([s()],Mt.prototype,"statusText",void 0),St([s()],Mt.prototype,"focused",void 0),St([s()],Mt.prototype,"isArtifactPanelOpen",void 0),St([s()],Mt.prototype,"selectedArtifact",void 0),St([s()],Mt.prototype,"isThreadSidebarOpen",void 0),St([s()],Mt.prototype,"_editingThreadId",void 0),St([s()],Mt.prototype,"isUrlModalOpen",void 0),St([s()],Mt.prototype,"urlInput",void 0),St([s()],Mt.prototype,"urlModalError",void 0),St([s()],Mt.prototype,"isUrlLoading",void 0),St([s()],Mt.prototype,"selectedUrlFileName",void 0),St([s()],Mt.prototype,"isFilePreviewModalOpen",void 0),St([s()],Mt.prototype,"previewFile",void 0),Mt=St([(t,e)=>(t.addInitializer(b),t),r("nr-chatbot")],Mt);
2371
2618
  /**
2372
2619
  * @license
2373
2620
  * Copyright 2023 Nuraly, Laabidi Aymen
2374
2621
  * SPDX-License-Identifier: MIT
2375
2622
  */
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())}}
2623
+ class Tt{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
2624
  /**
2378
2625
  * @license
2379
2626
  * Copyright 2023 Nuraly, Laabidi Aymen
2380
2627
  * SPDX-License-Identifier: MIT
2381
- */class mt extends Error{constructor(t){super(t.join(", ")),this.errors=t,this.name="ValidationError"}}
2628
+ */class Et extends Error{constructor(t){super(t.join(", ")),this.errors=t,this.name="ValidationError"}}
2382
2629
  /**
2383
2630
  * @license
2384
2631
  * Copyright 2023 Nuraly, Laabidi Aymen
2385
2632
  * 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)}}
2633
+ */class Ct{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
2634
  /**
2388
2635
  * @license
2389
2636
  * Copyright 2023 Nuraly, Laabidi Aymen
2390
2637
  * 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)}`}}
2638
+ */class zt{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
2639
  /**
2393
2640
  * @license
2394
2641
  * Copyright 2023 Nuraly, Laabidi Aymen
2395
2642
  * 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)}`}}
2643
+ */var Ot=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};class It{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 Ot(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
2644
  /**
2398
2645
  * @license
2399
2646
  * Copyright 2023 Nuraly, Laabidi Aymen
2400
2647
  * 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)}`}}
2648
+ */var Rt=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};class At{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 Rt(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
2649
  /**
2403
2650
  * @license
2404
2651
  * Copyright 2023 Nuraly, Laabidi Aymen
2405
2652
  * 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:[]})}}
2653
+ */class jt{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
2654
  /**
2408
2655
  * @license
2409
2656
  * Copyright 2023 Nuraly, Laabidi Aymen
2410
2657
  * 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)})}}
2658
+ */class Dt{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
2659
  /**
2413
2660
  * @license
2414
2661
  * Copyright 2023 Nuraly, Laabidi Aymen
2415
2662
  * 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)}}
2663
+ */var Ft=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};class Nt{constructor(t,e,n,i,o,s,r){this.stateHandler=e,this.messageHandler=n,this.fileHandler=i,this.eventBus=o,this.ui=s,this.plugins=r,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 Ft(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 Ft(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 s="",r="",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(r)?d.slice(r.length):d;r=d,s+=h;let u="",p=!1;for(;s.length;){const t=o[o.length-1];if(t){const e=t.buffer+s,i=e.indexOf(t.close);if(-1===i){t.buffer=e,s="";break}const r=e.slice(0,i),a="function"==typeof t.plugin.renderHtmlBlock?t.plugin.renderHtmlBlock(t.name,r):"";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(),s=e.slice(i+t.close.length);continue}if(0===i.length){u+=s,s="";break}let e=null;for(const t of i)for(const n of t.htmlTags){const i=s.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&&s.length>a-1){const t=s.length-(a-1);u+=s.slice(0,t),s=s.slice(t)}break}{u+=s.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}),s=s.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&&(s&&this.messageHandler.appendToBotMessage(n.id,s),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 Ft(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
2664
  /**
2418
2665
  * @license
2419
2666
  * Copyright 2023 Nuraly, Laabidi Aymen
2420
2667
  * 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)}}
2668
+ */var Bt=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};class Lt{constructor(t){this.validators=[],this.validators=t.validators||[]}validateMessage(t){return Bt(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
2669
  /**
2423
2670
  * @license
2424
2671
  * Copyright 2023 Nuraly, Laabidi Aymen
2425
2672
  * 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)}}
2673
+ */var Ut=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};class Wt{constructor(t,e,n){this.stateHandler=e,this.config=n,this.storage=t,this.setupAutoSave()}setStorage(t){this.storage=t,this.setupAutoSave()}saveState(){return Ut(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 Ut(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 Ut(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
2674
  /**
2428
2675
  * @license
2429
2676
  * Copyright 2023 Nuraly, Laabidi Aymen
2430
2677
  * 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}();
2678
+ */var Ht=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};class Jt{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 Ht(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 qt=["ar","fr"],Vt="__nuraly_localization__";!function(){if(globalThis[Vt])return globalThis[Vt];const t=R({sourceLocale:"en",targetLocales:qt,loadLocale:t=>import(`../../locales/generated/${t}.js`)});globalThis[Vt]=t}();
2432
2679
  /**
2433
2680
  * @license
2434
2681
  * Copyright 2023 Nuraly, Laabidi Aymen
2435
2682
  * SPDX-License-Identifier: MIT
2436
2683
  */
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)}}
2684
+ var Gt=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};class Kt{constructor(t={}){this.plugins=new Map,this.config=t,this.ui=t.ui||{},this.eventBus=new Tt,this.pluginService=new Jt,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 Ct(e,this.eventBus,this.ui,this.plugins,this.config),this.messageHandler=new zt(this.stateHandler,this.eventBus,this.plugins),this.threadHandler=new It(this.stateHandler,this.eventBus,this.ui,this.config,t.provider),this.fileHandler=new At(this.stateHandler,this.eventBus),this.moduleHandler=new jt(this.stateHandler,this.eventBus),this.suggestionHandler=new Dt(this.stateHandler),this.providerService=new Nt(t.provider,this.stateHandler,this.messageHandler,this.fileHandler,this.eventBus,this.ui,this.plugins),this.validationService=new Lt(this.config),this.storageService=new Wt(t.storage,this.stateHandler,this.config),t.provider){const e=t.provider;queueMicrotask(()=>{this.initializeProvider(e)})}this.setupLifecycleHooks()}initializeProvider(t){return Gt(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,s=o.close;let r=0;for(;;){const a=n.indexOf(e,r);if(-1===a)break;const l=a+e.length,c=n.indexOf(s,l);if(-1===c){r=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+s.length),i=!0,r=a+h.length):r=c+s.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 Gt(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 Gt(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 Et(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 s=this.stateHandler.getState();return(e.threadId||s.currentThreadId)&&this.threadHandler.updateThreadMessages(e.threadId||s.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 Gt(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 Gt(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 Gt(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 Gt(this,void 0,void 0,function*(){this.log("Message sent:",t)})}beforeProviderCall(t){return Gt(this,void 0,void 0,function*(){this.log("Calling provider for message:",t.id)})}afterProviderCall(){return Gt(this,void 0,void 0,function*(){this.log("Provider call completed")})}handleProviderError(t){return Gt(this,void 0,void 0,function*(){this.logError("Provider error:",t);const e=this.messageHandler.createMessage({sender:q.Bot,text:"Sorry, there was an error processing your request.",state:Y.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(()=>Gt(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 Gt(this,arguments,void 0,function*(t="chatbot-state"){yield this.storageService.saveState(t)})}loadFromStorage(){return Gt(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 Gt(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
2685
  /**
2439
2686
  * @license
2440
2687
  * Copyright 2023 Nuraly, Laabidi Aymen
2441
2688
  * 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"}}
2689
+ */var Yt=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})},Xt=function(t){return this instanceof Xt?(this.v=t,this):new Xt(t)},Qt=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),s=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),r("next"),r("throw"),r("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function r(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){s.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 Xt?Promise.resolve(n.value.v).then(l,c):d(s[0][2],n)}catch(t){d(s[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),s.shift(),s.length&&a(s[0][0],s[0][1])}};class Zt{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 Yt(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 Yt(this,void 0,void 0,function*(){this.connected=!1,console.log("[OpenAIProvider] Disconnected")})}isConnected(){return this.connected}sendMessage(t,e){return Qt(this,arguments,function*(){var n,i,o;if(!this.connected)throw new Error("Provider not connected");const s=this.buildMessages(t,e),r=yield Xt(fetch(`${this.apiUrl}/chat/completions`,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify({model:this.model,messages:s,temperature:this.temperature,max_tokens:this.maxTokens,stream:!0})}));if(!r.ok)throw new Error(`OpenAI API error: ${r.statusText}`);if(!r.body)throw new Error("Response body is null");const a=r.body.getReader(),l=new TextDecoder;let c="";try{for(;;){const{done:t,value:e}=yield Xt(a.read());if(t)break;c+=l.decode(e,{stream:!0});const s=c.split("\n");c=s.pop()||"";for(const t of s)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 Xt(t))}catch(t){console.error("Error parsing SSE data:",t)}}}}finally{a.releaseLock()}})}getAvailableModules(){return Yt(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 Yt(this,void 0,void 0,function*(){return console.log(`[OpenAIProvider] Calling module: ${t}`,e),{success:!0,result:"Module executed"}})}uploadFile(t){return Yt(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
2690
  /**
2444
2691
  * @license
2445
2692
  * Copyright 2023 Nuraly, Laabidi Aymen
2446
2693
  * 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)}}
2694
+ */var te=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,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||[]),s=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),r("next"),r("throw"),r("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function r(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){s.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(s[0][2],n)}catch(t){d(s[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),s.shift(),s.length&&a(s[0][0],s[0][1])}};class ie{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 te(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 te(this,void 0,void 0,function*(){this.connected=!1,console.log("[CustomAPIProvider] Disconnected")})}isConnected(){return this.connected}sendMessage(t,e){return ne(this,arguments,function*(){var n;if(!this.connected)return yield yield ee(this.formatError("Provider not connected","Please check your connection settings.")),yield ee(void 0);try{const i=this.buildPayload(t,e);let o,s;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,s=Object.assign({},this.headers),delete s["Content-Type"]):(o=JSON.stringify(i),s=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,s=Object.assign({},this.headers),delete s["Content-Type"]}const r=yield ee(fetch(this.apiUrl,{method:"POST",headers:s,body:o}));if(!r.ok){const t=yield ee(r.text().catch(()=>r.statusText));return yield yield ee(this.formatError(`${r.status} ${r.statusText}`,t||"The server returned an error. Please try again.")),yield ee(void 0)}if(!r.body)return yield yield ee(this.formatError("Response Error","The server response body is empty.")),yield ee(void 0);const a=r.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(r);let e=yield ee(t.next());for(;!e.done;)yield yield ee(e.value),e=yield ee(t.next())}else try{const t=yield ee(r.json());yield yield ee(this.extractMessage(t))}catch(t){yield yield ee(this.formatError("Parse Error","Failed to parse the server response."))}}catch(t){const e=t instanceof Error?t.message:String(t);yield yield ee(this.formatError("Network Error",e)),this.onError(t instanceof Error?t:new Error(String(t)))}})}handleStreamResponse(t){return ne(this,arguments,function*(){const e=t.body.getReader(),n=new TextDecoder;let i="";try{for(;;){const{done:t,value:o}=yield ee(e.read());if(t)break;i+=n.decode(o,{stream:!0}),yield yield ee(i)}i.length>0&&(yield yield ee(i))}catch(t){const e=t instanceof Error?t.message:String(t);yield yield ee("\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
2695
  /**
2449
2696
  * @license
2450
2697
  * Copyright 2023 Nuraly, Laabidi Aymen
2451
2698
  * 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})};
2699
+ */var oe=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})},se=function(t){return this instanceof se?(this.v=t,this):new se(t)},re=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)})}}},ae=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),s=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),r("next"),r("throw"),r("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function r(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){s.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(s[0][2],n)}catch(t){d(s[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),s.shift(),s.length&&a(s[0][0],s[0][1])}};const le=["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:"],ce={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 de{constructor(t={}){var e,n,i,o,s,r,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===(s=t.contextualResponses)||void 0===s||s,echoMode:null!==(r=t.echoMode)&&void 0!==r&&r,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 oe(this,void 0,void 0,function*(){yield this.delay(100),this.connected=!0,console.log("🤖 Mock Provider connected")})}disconnect(){return oe(this,void 0,void 0,function*(){this.connected=!1,console.log("🤖 Mock Provider disconnected")})}isConnected(){return this.connected}sendMessage(t,e){return ae(this,arguments,function*(){var n,i,o,s,r,a;if(this.messageCount++,Math.random()<this.config.errorRate)throw yield se(this.delay(this.config.delay/2)),new Error("Simulated API error for testing");if(yield se(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===(r=this.onToolCall)||void 0===r||r.call(this,e),yield se(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=re(this.streamResponse(l));!(n=(c=yield se(h.next())).done);d=!0){s=c.value,d=!1;const t=s;yield yield se(t)}}catch(t){i={error:t}}finally{try{d||n||!(o=h.return)||(yield se(o.call(h)))}finally{if(i)throw i.error}}else yield yield se(l)})}uploadFile(t){return oe(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/")?X.Image:t.startsWith("video/")?X.Video:t.startsWith("audio/")?X.Audio:t.startsWith("application/pdf")||t.includes("document")||t.includes("text")?X.Document:t.includes("zip")||t.includes("rar")||t.includes("tar")?X.Archive:t.includes("javascript")||t.includes("json")||t.includes("xml")?X.Code:X.Unknown}generateResponse(t,e){var n,i;const o=(null==e?void 0:e.messages)||[],s=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,r="number"==typeof s&&(null===(i=o[s])||void 0===i?void 0:i.text)?o[s].text:t;if(this.config.echoMode)return`You said: "${r}"`;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(r);if(t)return t}if(this.config.useHistory&&o.length>0&&"number"==typeof s){const t=[...o].slice(0,s).reverse().find(t=>"user"===t.sender&&!!t.text);return t&&t.text?`Great point about "${String(r).substring(0,60)}". Considering your earlier message about "${String(t.text).substring(0,30)}...", ${this.getRandomResponse()}`:`Regarding "${String(r).substring(0,60)}", ${this.getRandomResponse()}`}return`Regarding "${String(r).substring(0,60)}", ${this.getRandomResponse()}`}getContextualResponse(t){const e=t.toLowerCase();for(const[t,n]of Object.entries(ce))if(e.includes(t)){return n[Math.floor(Math.random()*n.length)]}return null}getRandomResponse(){const t=Math.floor(Math.random()*le.length);return le[t]}streamResponse(t){return ae(this,arguments,function*(){let e="";const n=t.split(" ");for(let t=0;t<n.length;t++){e+=(t>0?" ":"")+n[t],yield yield se(e),t<n.length-1&&(yield se(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 he={fast:()=>new de({delay:300,streaming:!1,contextualResponses:!0}),realistic:()=>new de({delay:1200,streaming:!0,streamingInterval:50,contextualResponses:!0,useHistory:!0}),slow:()=>new de({delay:3e3,streaming:!1}),echo:()=>new de({delay:500,echoMode:!0}),streaming:()=>new de({delay:800,streaming:!0,streamingSpeed:2,streamingInterval:30}),unreliable:()=>new de({delay:1e3,errorRate:.3}),custom:t=>new de({delay:800,customResponses:t})};
2453
2700
  /**
2454
2701
  * @license
2455
2702
  * Copyright 2024 Nuraly, Laabidi Aymen
2456
2703
  * 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)}}
2704
+ */var ue=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})},pe=function(t){return this instanceof pe?(this.v=t,this):new pe(t)},fe=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),s=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),r("next"),r("throw"),r("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function r(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){s.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 pe?Promise.resolve(n.value.v).then(l,c):d(s[0][2],n)}catch(t){d(s[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),s.shift(),s.length&&a(s[0][0],s[0][1])}};const ge={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 me{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 ue(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({},ge),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 ue(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 fe(this,arguments,function*(){if(!this.connected||!this.socket||!this.config)return yield yield pe(this.formatError("Not Connected","Socket is not connected. Please check your connection.")),yield pe(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 pe(t);clearInterval(o),yield yield pe(e)}catch(t){throw clearInterval(o),t}}else{const e=yield pe(t);yield yield pe(e)}}catch(t){const e=t instanceof Error?t.message:String(t);yield yield pe(this.formatError("Socket Error",e)),this.onError(t instanceof Error?t:new Error(String(t)))}})}buildPayload(t,e,n){var i,o,s;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===(s=e.uploadedFiles)||void 0===s?void 0:s.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
2705
  /**
2459
2706
  * @license
2460
2707
  * Copyright 2024 Nuraly, Laabidi Aymen
2461
2708
  * 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)}}
2709
+ */var ve=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})},be=function(t){return this instanceof be?(this.v=t,this):new be(t)},ye=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),s=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),r("next"),r("throw"),r("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function r(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){s.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 be?Promise.resolve(n.value.v).then(l,c):d(s[0][2],n)}catch(t){d(s[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),s.shift(),s.length&&a(s[0][0],s[0][1])}};class xe{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 ve(this,void 0,void 0,function*(){if(!t.workflowId)throw new Error("Workflow ID is required");this.config=Object.assign({socketUrl:t.socketUrl||("undefined"!=typeof window?window.location.origin:"http://localhost:8000"),socketPath:t.socketPath||"/__nk_socketio/",triggerEndpoint:t.triggerEndpoint||"/api/v1/workflows/{workflowId}/trigger/chat",responseTimeout:t.responseTimeout||6e4},t);const e=`${this.config.socketUrl}/nk/apps/workflows/socket`;return this.socket=h(e,{path:this.config.socketPath,query:{l:JSON.stringify({workflowId:this.config.workflowId})},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),this.subscribeToWorkflow(this.config.workflowId),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("nk:subscribe:workflow",{workflowId:t}),console.log("[WorkflowSocketProvider] Subscribed to workflow:",t))}subscribeToExecution(t){this.socket&&(this.socket.emit("nk:subscribe:execution",{executionId:t}),console.log("[WorkflowSocketProvider] Subscribed to execution:",t))}setupEventListeners(){this.socket&&(this.socket.onAny((t,...e)=>{console.log("[WorkflowSocketProvider] RAW event:",t,e[0])}),this.socket.on("nk:data",t=>{(null==t?void 0:t.event)&&t.data&&this._handleEvent(t.event,t.data)}),this.socket.on("execution:chat-message",t=>this._handleEvent("execution:chat-message",t)),this.socket.on("execution:started",t=>this._handleEvent("execution:started",t)),this.socket.on("execution:completed",t=>this._handleEvent("execution:completed",t)),this.socket.on("execution:failed",t=>this._handleEvent("execution:failed",t)),this.socket.on("execution:node-started",t=>this._handleEvent("execution:node-started",t)),this.socket.on("execution:node-completed",t=>this._handleEvent("execution:node-completed",t)))}_handleEvent(t,e){var n,i,o,s,r;switch(t){case"execution:chat-message":{const t=e.executionId,o=e.message;if(console.log("[WorkflowSocketProvider] Chat message received:",t,o),!t||!o)return;const s=this.activeExecutions.get(t);if(!s)return void(null===(i=null===(n=this.config)||void 0===n?void 0:n.onMessage)||void 0===i||i.call(n,o));s.completed||s.messages.push(o);break}case"execution:started":console.log("[WorkflowSocketProvider] Execution started (event):",e.executionId);break;case"execution:completed":{const t=e.executionId;if(console.log("[WorkflowSocketProvider] Execution completed:",t),!t)return;const n=this.activeExecutions.get(t);if(!n||n.completed)return;n.completed=!0;let i="";if(null===(o=this.config)||void 0===o?void 0:o.extractResponse)i=this.config.extractResponse(e);else if(n.messages.length>0)i=n.messages.join("\n\n");else if(e.outputData)try{const t="string"==typeof e.outputData?JSON.parse(e.outputData):e.outputData;i=t.response||t.message||t.result||JSON.stringify(t)}catch(t){i=e.outputData}n.resolve(i||"Workflow completed"),this.activeExecutions.delete(t);break}case"execution:failed":{const t=e.executionId,n=e.errorMessage||e.error||"Workflow execution failed";if(console.error("[WorkflowSocketProvider] Execution failed:",t,n),!t)return;const i=this.activeExecutions.get(t);if(!i||i.completed)return;i.completed=!0,i.reject(new Error(n)),this.activeExecutions.delete(t);break}case"execution:node-started":console.log("[WorkflowSocketProvider] Node started:",e.nodeName),e.nodeName&&(null===(s=this.onNodeStarted)||void 0===s||s.call(this,e.nodeName));break;case"execution:node-completed":console.log("[WorkflowSocketProvider] Node completed:",e.nodeName),e.nodeName&&(null===(r=this.onNodeCompleted)||void 0===r||r.call(this,e.nodeName))}}disconnect(){return ve(this,void 0,void 0,function*(){var t;this.socket&&((null===(t=this.config)||void 0===t?void 0:t.workflowId)&&this.socket.emit("nk: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 ye(this,arguments,function*(){var n,i;if(!this.connected||!this.socket||!this.config)return yield yield be(this.formatError("Not Connected","Socket is not connected. Please check your connection.")),yield be(void 0);try{const o=this.buildInput(t,e),s=this.config.triggerEndpoint.replace("{workflowId}",this.config.workflowId),r=`${this.config.socketUrl}${s}`;console.log("[WorkflowSocketProvider] Triggering workflow:",r,o);const a=yield be(fetch(r,{method:"POST",headers:Object.assign({"Content-Type":"application/json"},this.config.headers),body:JSON.stringify(o)}));if(!a.ok){const t=yield be(a.text().catch(()=>a.statusText));return yield yield be(this.formatError(`${a.status} ${a.statusText}`,t)),yield be(void 0)}const l=a.headers.get("X-Execution-Id")||(null===(n=yield be(a.json().catch(()=>({}))))||void 0===n?void 0:n.executionId);if(!l)return yield yield be(this.formatError("Execution Error","No execution ID received from server")),yield be(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 be(t)}yield be(new Promise(t=>setTimeout(t,200)))}clearInterval(u);const t=yield be(c);yield yield be(t)}catch(t){throw clearInterval(u),t}}catch(t){const e=t instanceof Error?t.message:String(t);yield yield be(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 s=(null===(i=e.currentThread)||void 0===i?void 0:i.id)||this.sessionId,r={message:t,threadId:s,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:",s,"files count:",r.files.length),r}setWorkflowId(t){this.config&&(this.socket&&this.config.workflowId&&this.socket.emit("nk:unsubscribe:workflow",{workflowId:this.config.workflowId}),this.config.workflowId=t,this.socket&&this.connected&&this.subscribeToWorkflow(t))}getSocket(){return this.socket}uploadFile(t){return ve(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",s=this.determineFileType(o);return console.log(`[WorkflowSocketProvider] File prepared: ${t.name} (${t.size} bytes)`),{id:e,name:t.name,size:t.size,type:s,mimeType:o,url:n,previewUrl:s===X.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/")?X.Image:t.startsWith("video/")?X.Video:t.startsWith("audio/")?X.Audio:t.startsWith("application/pdf")||t.includes("document")||t.startsWith("text/")?X.Document:t.includes("zip")||t.includes("rar")||t.includes("tar")?X.Archive:t.includes("javascript")||t.includes("json")||t.includes("xml")?X.Code:X.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
2710
  /**
2464
2711
  * @license
2465
2712
  * Copyright 2024 Nuraly, Laabidi Aymen
2466
2713
  * 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)}}
2714
+ */var we=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})},_e=function(t){return this instanceof _e?(this.v=t,this):new _e(t)},$e=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),s=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),r("next"),r("throw"),r("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function r(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){s.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 _e?Promise.resolve(n.value.v).then(l,c):d(s[0][2],n)}catch(t){d(s[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),s.shift(),s.length&&a(s[0][0],s[0][1])}};const ke={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 Se{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 we(this,void 0,void 0,function*(){var e,n,i,o,s,r,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({},ke),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!==(s=t.reconnectMaxDelay)&&void 0!==s?s:3e4,connectionTimeout:null!==(r=t.connectionTimeout)&&void 0!==r?r: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 s=this.connected;this.connected=!1,this.stopHeartbeat(),console.log("[NativeWebSocketProvider] Disconnected:",t.code,t.reason),s&&(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&&s?this.attemptReconnect():s||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 s=o[null!==(e=this.config.typeField)&&void 0!==e?e:"type"],r=this.config.messageTypes;if(s!==r.pong)if(s!==r.ping){if(s===r.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(s,o)}if(s===r.toolCallEnd)return null===(i=this.onToolCallEnd)||void 0===i||i.call(this),void this.dispatchToListeners(s,o);this.dispatchToListeners(s,o),s!==r.response?s!==r.stream?s===r.error&&this.handleErrorMessage(o):this.handleStreamMessage(o):this.handleResponseMessage(o)}else this.send(r.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,s;if(!(null===(t=this.config)||void 0===t?void 0:t.autoReconnect))return;const r=null!==(e=this.config.maxReconnectAttempts)&&void 0!==e?e:5;if(this.reconnectAttempt>=r)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}/${r})`),null===(s=(o=this.config).onReconnectAttempt)||void 0===s||s.call(o,this.reconnectAttempt,r),this.reconnectTimer=setTimeout(()=>we(this,void 0,void 0,function*(){try{yield this.createConnection(),console.log("[NativeWebSocketProvider] Reconnected successfully")}catch(t){}}),c)}disconnect(){return we(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 $e(this,arguments,function*(){if(!this.connected||!this.ws||!this.config)return yield yield _e(this.formatError("Not Connected","WebSocket is not connected. Please check your connection.")),yield _e(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 _e(t);clearInterval(o),yield yield _e(e)}catch(t){throw clearInterval(o),t}}else{const e=yield _e(t);yield yield _e(e)}}catch(t){const e=t instanceof Error?t.message:String(t);yield yield _e(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,s;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===(s=e.uploadedFiles)||void 0===s?void 0:s.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
2715
  /**
2469
2716
  * @license
2470
2717
  * Copyright 2023 Nuraly, Laabidi Aymen
2471
2718
  * 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)}})}}
2719
+ */var Pe=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};class Me{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 Pe(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 Pe(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 Pe(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
2720
  /**
2474
2721
  * @license
2475
2722
  * Copyright 2023 Nuraly, Laabidi Aymen
2476
2723
  * 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()})}}
2724
+ */class Te{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
2725
  /**
2479
2726
  * @license
2480
2727
  * Copyright 2023 Nuraly, Laabidi Aymen
2481
2728
  * 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){}}}
2729
+ */class Ee{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
2730
  /**
2484
2731
  * @license
2485
2732
  * Copyright 2023 Nuraly, Laabidi Aymen
2486
2733
  * 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 "}}
2734
+ */var Ce=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};class ze extends Ee{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)}${dt(e)}`}afterReceive(t){return Ce(this,void 0,void 0,function*(){return t.includes("[MD]")&&t.includes("[/MD]")?t:dt(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: #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
2735
  /**
2489
2736
  * @license
2490
2737
  * Copyright 2023 Nuraly, Laabidi Aymen
2491
2738
  * 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 `}}
2739
+ */var Oe=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};class Ie extends Ee{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 Oe(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:s,arrivalDate:r,terminal:a,gate:l,arrivalTerminal:c,arrivalGate:d,duration:h,flightNumber:u,airline:p,status:f,updated:g,source:m}=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">${s?this.escapeHtml(s):""}</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">${r?this.escapeHtml(r):""}</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 ${g||m||f?`\n <div class="${this.cssPrefix}__footer">\n ${g?`<span class="${this.cssPrefix}__updated">${this.escapeHtml(g)}</span>`:""}\n ${m?`<span class="${this.cssPrefix}__source">Source : ${this.escapeHtml(m)}</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
2740
  /**
2494
2741
  * @license
2495
2742
  * Copyright 2023 Nuraly, Laabidi Aymen
2496
2743
  * 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 `}}
2744
+ */class Re extends Ee{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
2745
  /**
2499
2746
  * @license
2500
2747
  * Copyright 2023 Nuraly, Laabidi Aymen
2501
2748
  * 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 "}}
2749
+ */var Ae=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};class je extends Ee{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===q.Bot);i&&!(null===(n=i.metadata)||void 0===n?void 0:n.hasArtifacts)&&this.processMessage(i)}catch(t){}})}onMessageReceived(t){return Ae(this,void 0,void 0,function*(){t.sender===q.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 s=[];let r=0;for(;null!==(o=i.exec(n));){const e=(o[1]||"text").toLowerCase(),n=o[2],i=`artifact-${t.id}-${r}`,a={id:i,language:e,content:n,title:this.extractTitle(n,e,r),messageId:t.id,index:r};s.push(a),this.artifacts.set(i,a),r++}if(0===s.length)return;let a=n,l=0;a=a.replaceAll(i,()=>`\0ARTIFACT_CARD_${s[l++].id}\0`),a=dt(a);for(const t of s)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:s.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 s=/```(\w*)\n([\s\S]*?)```/g;let r,a=0;for(;null!==(r=s.exec(o));){const e=(r[1]||"text").toLowerCase(),n=r[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`${ct(e)} Snippet ${n+1}`}renderPlaceholderCard(t){const e=ct(t.language),n=at(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: #f6f8fa;\n border: 1px solid #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: #eaeef2;\n border-color: #8b949e;\n }\n .nr-artifact-card:focus-visible {\n outline: 2px solid #0b5fff;\n outline-offset: 2px;\n }\n .nr-artifact-card__icon {\n flex-shrink: 0;\n color: #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: #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: #6c757d;\n }\n @media (prefers-color-scheme: dark) {\n .nr-artifact-card {\n background: #161b22;\n border-color: #30363d;\n }\n .nr-artifact-card:hover {\n background: #1c2128;\n border-color: #484f58;\n }\n .nr-artifact-card__icon {\n color: #c9d1d9;\n }\n .nr-artifact-card__title {\n color: #c9d1d9;\n }\n .nr-artifact-card__chevron {\n color: #8b949e;\n }\n }\n "}}
2503
2750
  /**
2504
2751
  * @license
2505
2752
  * Copyright 2023 Nuraly, Laabidi Aymen
2506
2753
  * 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)}}
2754
+ */class De extends Ee{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),s=24*n;if(!i&&!o)return`\n <div style="display:flex;align-items:center;gap:8px;margin-left:${s}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 ${at(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 ">${at(this.formatValue(e))}</span>\n </div>\n `;const r=o?e.map((t,e)=>[String(e),t]):Object.entries(e),a=o?`[ ${r.length} ]`:`{ ${r.length} }`,l=o?"#8b5cf6":"#0ea5e9";return`\n <div style="margin-left:${s}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 ${at(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 ${r.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
2755
  /**
2509
2756
  * @license
2510
2757
  * Copyright 2023 Nuraly, Laabidi Aymen
2511
2758
  * 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>`:""}}
2759
+ */const Fe="nuraly:flow-diagram:split-width",Ne="nuraly:flow-diagram:panel-width",Be="nr-flow-diagram-editor";class Le 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(Ne,String(t))}),this._panelObserver.observe(n));const i=this.attachShadow({mode:"open"}),o=null!==(t=this.getAttribute("content"))&&void 0!==t?t:"",s=this.unescapeHtml(o),r=this.prettyPrint(s);let a=null;try{a=JSON.parse(s)}catch(t){}i.innerHTML=`\n <style>${Le.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=r);const c=localStorage.getItem(Fe);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(Ne);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,s=0,r=0;const a=t=>{if(!o)return;const i=t.clientX-s,a=e.getBoundingClientRect().width,l=Math.max(200,Math.min(r+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(Fe,String(t)),document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",l)};i.addEventListener("mousedown",t=>{const e=t;e.preventDefault(),o=!0,s=e.clientX,r=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">${at(t)}</span>`).join("");return`\n <div class="header">\n <span class="header-icon">&#x2B21;</span>\n <span class="header-name">${at(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 s=i[t];o.push("event"===s.type?this.renderEventNode(s.name,null!==(e=s.eventType)&&void 0!==e?e:""):this.renderStepNode(s.name,null!==(n=s.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 s=[],r=null===(e=t.Events)||void 0===e?void 0:e.StartEvent,a=null===(n=t.Events)||void 0===n?void 0:n.EndEvent;r&&s.push({type:"event",name:r.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),s.push({type:"step",name:c,step:t.Steps[c]});const e=l[c];if(!e||"EndEvent"===e.Target)break;c=e.Target}return a&&s.push({type:"event",name:a.Name||"End",eventType:"end"}),s}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">${at(t)}</span>\n </div>\n `}renderStepNode(t,e){var n,i,o;const s=null!==(n=e.StepType)&&void 0!==n?n:"",r=null!==(o=null===(i=e.Description)||void 0===i?void 0:i.trim())&&void 0!==o?o:"",a=s?`<span class="step-badge ${"Worker"===s?"badge-worker":"badge-system"}">${at(s)}</span>`:"",l=r?`<div class="step-desc">${at(r)}</div>`:"";return`\n <div class="node step-node">\n <div class="step-header">\n <span class="step-name">${at(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 Ue extends Ee{constructor(){super(...arguments),this.id="flow-diagram",this.name="Flow Diagram",this.version="1.0.0"}onInit(){customElements.get(Be)||customElements.define(Be,Le)}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="${at(t.content)}"></nr-flow-diagram-editor>`:""}}
2513
2760
  /**
2514
2761
  * @license
2515
2762
  * Copyright 2023 Nuraly, Laabidi Aymen
2516
2763
  * 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 `}}
2764
+ */var We=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};class He extends Ee{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 We(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()),s=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 ${s}\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
2765
  /**
2519
2766
  * @license
2520
2767
  * Copyright 2023 Nuraly, Laabidi Aymen
2521
2768
  * 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))})}}
2769
+ */var Je=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};class qe{constructor(){this.store=new Map}save(t,e){return Je(this,void 0,void 0,function*(){this.store.set(t,JSON.parse(JSON.stringify(e)))})}load(t){return Je(this,void 0,void 0,function*(){const e=this.store.get(t);return e?JSON.parse(JSON.stringify(e)):null})}remove(t){return Je(this,void 0,void 0,function*(){this.store.delete(t)})}clear(){return Je(this,void 0,void 0,function*(){this.store.clear()})}has(t){return Je(this,void 0,void 0,function*(){return this.store.has(t)})}}class Ve{save(t,e){return Je(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 Je(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 Je(this,void 0,void 0,function*(){localStorage.removeItem(t)})}clear(){return Je(this,void 0,void 0,function*(){Object.keys(localStorage).filter(t=>t.startsWith("chatbot-")).forEach(t=>{localStorage.removeItem(t)})})}has(t){return Je(this,void 0,void 0,function*(){return null!==localStorage.getItem(t)})}}class Ge{constructor(t="chatbot-db",e="chatbot-store"){this.dbName=t,this.storeName=e}getDB(){return Je(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 Je(this,void 0,void 0,function*(){const n=yield this.getDB();return new Promise((i,o)=>{const s=n.transaction([this.storeName],"readwrite").objectStore(this.storeName).put(e,t);s.onerror=()=>o(s.error),s.onsuccess=()=>i()})})}load(t){return Je(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 Je(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 Je(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 Je(this,void 0,void 0,function*(){return null!==(yield this.load(t))})}}
2523
2770
  /**
2524
2771
  * @license
2525
2772
  * Copyright 2023 Nuraly, Laabidi Aymen
2526
2773
  * 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};
2774
+ */class Ke{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})}}
2775
+ /**
2776
+ * @license
2777
+ * Copyright 2024 Nuraly, Laabidi Aymen
2778
+ * SPDX-License-Identifier: MIT
2779
+ *
2780
+ * Re-encodes any browser-recorded audio blob to OGG Opus at 32 kbps.
2781
+ * Falls back to the original blob unchanged on browsers that do not support
2782
+ * OGG Opus MediaRecorder recording (e.g. Safari).
2783
+ *
2784
+ * Pipeline:
2785
+ * input blob → AudioContext.decodeAudioData → BufferSource → MediaStreamDestination
2786
+ * → MediaRecorder(ogg/opus, 32 kbps) → output blob
2787
+ */var Ye=function(t,e,n,i){return new(n||(n=Promise))(function(o,s){function r(t){try{l(i.next(t))}catch(t){s(t)}}function a(t){try{l(i.throw(t))}catch(t){s(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(r,a)}l((i=i.apply(t,e||[])).next())})};const Xe="audio/ogg;codecs=opus";function Qe(){try{return"undefined"!=typeof MediaRecorder&&MediaRecorder.isTypeSupported(Xe)}catch(t){return!1}}var Ze=Object.freeze({__proto__:null,canEncodeOgg:Qe,compressToOpus:function(t,e){return Ye(this,void 0,void 0,function*(){if(!Qe()){const n=e.includes("mp4")?"mp4":e.includes("aac")?"aac":"webm";return{blob:t,mimeType:e,ext:n}}const n=yield t.arrayBuffer(),i=new AudioContext;let o;try{o=yield i.decodeAudioData(n)}finally{i.close().catch(()=>{})}const s=new AudioContext({sampleRate:o.sampleRate}),r=s.createMediaStreamDestination(),a=new MediaRecorder(r.stream,{mimeType:Xe,audioBitsPerSecond:32e3}),l=[];a.ondataavailable=t=>{t.data.size>0&&l.push(t.data)};const c=new Promise((t,e)=>{a.onstop=()=>t(),a.onerror=t=>{var n;return e(null!==(n=t.error)&&void 0!==n?n:new Error("MediaRecorder error"))}});a.start(100);const d=s.createBufferSource();return d.buffer=o,d.connect(r),d.onended=()=>{setTimeout(()=>{"recording"===a.state&&a.stop()},120)},d.start(0),yield c,s.close().catch(()=>{}),{blob:new Blob(l,{type:Xe}),mimeType:Xe,ext:"ogg"}})}});export{Te as AnalyticsPlugin,je as ArtifactPlugin,Ee as ChatPluginBase,Q as ChatbotActionType,Kt as ChatbotCoreController,X as ChatbotFileType,V as ChatbotLoadingType,Y as ChatbotMessageState,Ke as ChatbotScrollController,q as ChatbotSender,G as ChatbotSize,K as ChatbotVariant,ie as CustomAPIProvider,ot as DEFAULT_ALLOWED_FILE_TYPES,it as DEFAULT_MAX_FILES,nt as DEFAULT_MAX_FILE_SIZE,et as DEFAULT_MAX_MESSAGES,tt as DEFAULT_TYPING_DELAY,Z as EMPTY_STRING,Tt as EventBus,st as FILE_TYPE_MAPPINGS,At as FileHandler,Ie as FlightCardPlugin,Ue as FlowDiagramPlugin,Ge as IndexedDBStorage,De as JsonGraphRendererPlugin,Ve as LocalStorageAdapter,ze as MarkdownPlugin,qe as MemoryStorage,zt as MessageHandler,de as MockProvider,he as MockProviders,jt as ModuleHandler,Se as NativeWebSocketProvider,Mt as NrChatbotElement,Zt as OpenAIProvider,Me as PersistencePlugin,Jt as PluginService,Re as PrintJobCardPlugin,Nt as ProviderService,He as SelectionCardPlugin,me as SocketProvider,Ct as StateHandler,Wt as StorageService,Dt as SuggestionHandler,It as ThreadHandler,Et as ValidationError,Lt as ValidationService,xe as WorkflowSocketProvider};