@nuraly/lumenui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +28 -0
- package/README.md +248 -0
- package/dist/nuralyui.bundle.js +29209 -0
- package/dist/nuralyui.bundle.js.gz +0 -0
- package/dist/src/components/alert/alert.component.d.ts +103 -0
- package/dist/src/components/alert/alert.component.js +225 -0
- package/dist/src/components/alert/alert.style.d.ts +14 -0
- package/dist/src/components/alert/alert.style.js +191 -0
- package/dist/src/components/alert/alert.types.d.ts +46 -0
- package/dist/src/components/alert/alert.types.js +7 -0
- package/dist/src/components/alert/bundle.js +231 -0
- package/dist/src/components/alert/bundle.js.gz +0 -0
- package/dist/src/components/alert/index.d.ts +8 -0
- package/dist/src/components/alert/index.js +8 -0
- package/dist/src/components/alert/react.d.ts +5 -0
- package/dist/src/components/alert/react.js +17 -0
- package/dist/src/components/badge/badge.component.d.ts +148 -0
- package/dist/src/components/badge/badge.component.js +270 -0
- package/dist/src/components/badge/badge.style.d.ts +14 -0
- package/dist/src/components/badge/badge.style.js +250 -0
- package/dist/src/components/badge/badge.types.d.ts +84 -0
- package/dist/src/components/badge/badge.types.js +7 -0
- package/dist/src/components/badge/bundle.js +277 -0
- package/dist/src/components/badge/bundle.js.gz +0 -0
- package/dist/src/components/badge/index.d.ts +2 -0
- package/dist/src/components/badge/index.js +2 -0
- package/dist/src/components/badge/react.d.ts +3 -0
- package/dist/src/components/badge/react.js +10 -0
- package/dist/src/components/breadcrumb/breadcrumb.component.d.ts +121 -0
- package/dist/src/components/breadcrumb/breadcrumb.component.js +257 -0
- package/dist/src/components/breadcrumb/breadcrumb.style.d.ts +14 -0
- package/dist/src/components/breadcrumb/breadcrumb.style.js +153 -0
- package/dist/src/components/breadcrumb/breadcrumb.types.d.ts +63 -0
- package/dist/src/components/breadcrumb/breadcrumb.types.js +7 -0
- package/dist/src/components/breadcrumb/bundle.js +213 -0
- package/dist/src/components/breadcrumb/bundle.js.gz +0 -0
- package/dist/src/components/breadcrumb/index.d.ts +2 -0
- package/dist/src/components/breadcrumb/index.js +2 -0
- package/dist/src/components/breadcrumb/react.d.ts +5 -0
- package/dist/src/components/breadcrumb/react.js +12 -0
- package/dist/src/components/button/bundle.js +606 -0
- package/dist/src/components/button/bundle.js.gz +0 -0
- package/dist/src/components/button/button.component.d.ts +96 -0
- package/dist/src/components/button/button.component.js +312 -0
- package/dist/src/components/button/button.style.d.ts +10 -0
- package/dist/src/components/button/button.style.js +535 -0
- package/dist/src/components/button/button.types.d.ts +57 -0
- package/dist/src/components/button/button.types.js +2 -0
- package/dist/src/components/button/index.d.ts +2 -0
- package/dist/src/components/button/index.js +2 -0
- package/dist/src/components/button/react.d.ts +5 -0
- package/dist/src/components/button/react.js +12 -0
- package/dist/src/components/canvas/base-canvas.component.d.ts +177 -0
- package/dist/src/components/canvas/base-canvas.component.js +865 -0
- package/dist/src/components/canvas/bundle.js +16664 -0
- package/dist/src/components/canvas/bundle.js.gz +0 -0
- package/dist/src/components/canvas/canvas.component.d.ts +2 -0
- package/dist/src/components/canvas/canvas.component.js +295 -0
- package/dist/src/components/canvas/canvas.constants.d.ts +66 -0
- package/dist/src/components/canvas/canvas.constants.js +61 -0
- package/dist/src/components/canvas/chatbot-panel.style.d.ts +11 -0
- package/dist/src/components/canvas/chatbot-panel.style.js +189 -0
- package/dist/src/components/canvas/index.d.ts +13 -0
- package/dist/src/components/canvas/index.js +21 -0
- package/dist/src/components/canvas/react.d.ts +354 -0
- package/dist/src/components/canvas/react.js +41 -0
- package/dist/src/components/canvas/whiteboard-canvas.component.d.ts +63 -0
- package/dist/src/components/canvas/whiteboard-canvas.component.js +356 -0
- package/dist/src/components/canvas/whiteboard-canvas.style.d.ts +7 -0
- package/dist/src/components/canvas/whiteboard-canvas.style.js +1011 -0
- package/dist/src/components/canvas/whiteboard-node.component.d.ts +87 -0
- package/dist/src/components/canvas/whiteboard-node.component.js +809 -0
- package/dist/src/components/canvas/whiteboard-node.style.d.ts +7 -0
- package/dist/src/components/canvas/whiteboard-node.style.js +775 -0
- package/dist/src/components/canvas/workflow-canvas.component.d.ts +150 -0
- package/dist/src/components/canvas/workflow-canvas.component.js +1468 -0
- package/dist/src/components/canvas/workflow-canvas.style.d.ts +8 -0
- package/dist/src/components/canvas/workflow-canvas.style.js +2903 -0
- package/dist/src/components/canvas/workflow-canvas.types.d.ts +710 -0
- package/dist/src/components/canvas/workflow-canvas.types.js +2305 -0
- package/dist/src/components/canvas/workflow-node.component.d.ts +96 -0
- package/dist/src/components/canvas/workflow-node.component.js +752 -0
- package/dist/src/components/canvas/workflow-node.style.d.ts +8 -0
- package/dist/src/components/canvas/workflow-node.style.js +1053 -0
- package/dist/src/components/card/bundle.js +69 -0
- package/dist/src/components/card/bundle.js.gz +0 -0
- package/dist/src/components/card/card.component.d.ts +30 -0
- package/dist/src/components/card/card.component.js +64 -0
- package/dist/src/components/card/card.style.d.ts +2 -0
- package/dist/src/components/card/card.style.js +62 -0
- package/dist/src/components/card/card.types.d.ts +17 -0
- package/dist/src/components/card/card.types.js +2 -0
- package/dist/src/components/card/index.d.ts +3 -0
- package/dist/src/components/card/index.js +3 -0
- package/dist/src/components/card/react.d.ts +5 -0
- package/dist/src/components/card/react.js +12 -0
- package/dist/src/components/carousel/bundle.js +96 -0
- package/dist/src/components/carousel/bundle.js.gz +0 -0
- package/dist/src/components/carousel/carousel.component.d.ts +19 -0
- package/dist/src/components/carousel/carousel.component.js +128 -0
- package/dist/src/components/carousel/carousel.style.d.ts +2 -0
- package/dist/src/components/carousel/carousel.style.js +68 -0
- package/dist/src/components/carousel/index.d.ts +2 -0
- package/dist/src/components/carousel/index.js +2 -0
- package/dist/src/components/carousel/react.d.ts +5 -0
- package/dist/src/components/carousel/react.js +12 -0
- package/dist/src/components/chatbot/bundle.js +2527 -0
- package/dist/src/components/chatbot/bundle.js.gz +0 -0
- package/dist/src/components/chatbot/chatbot.component.d.ts +215 -0
- package/dist/src/components/chatbot/chatbot.component.js +1097 -0
- package/dist/src/components/chatbot/chatbot.style.d.ts +3 -0
- package/dist/src/components/chatbot/chatbot.style.js +1638 -0
- package/dist/src/components/chatbot/chatbot.types.d.ts +246 -0
- package/dist/src/components/chatbot/chatbot.types.js +124 -0
- package/dist/src/components/chatbot/index.d.ts +13 -0
- package/dist/src/components/chatbot/index.js +20 -0
- package/dist/src/components/chatbot/react.d.ts +54 -0
- package/dist/src/components/chatbot/react.js +55 -0
- package/dist/src/components/checkbox/bundle.js +352 -0
- package/dist/src/components/checkbox/bundle.js.gz +0 -0
- package/dist/src/components/checkbox/checkbox.component.d.ts +62 -0
- package/dist/src/components/checkbox/checkbox.component.js +178 -0
- package/dist/src/components/checkbox/checkbox.style.d.ts +2 -0
- package/dist/src/components/checkbox/checkbox.style.js +323 -0
- package/dist/src/components/checkbox/checkbox.types.d.ts +6 -0
- package/dist/src/components/checkbox/checkbox.types.js +2 -0
- package/dist/src/components/checkbox/index.d.ts +2 -0
- package/dist/src/components/checkbox/index.js +2 -0
- package/dist/src/components/checkbox/react.d.ts +5 -0
- package/dist/src/components/checkbox/react.js +12 -0
- package/dist/src/components/code-editor/bundle.js +55 -0
- package/dist/src/components/code-editor/bundle.js.gz +0 -0
- package/dist/src/components/code-editor/code-editor.component.d.ts +119 -0
- package/dist/src/components/code-editor/code-editor.component.js +532 -0
- package/dist/src/components/code-editor/code-editor.style.d.ts +7 -0
- package/dist/src/components/code-editor/code-editor.style.js +39 -0
- package/dist/src/components/code-editor/code-editor.types.d.ts +39 -0
- package/dist/src/components/code-editor/code-editor.types.js +22 -0
- package/dist/src/components/code-editor/index.d.ts +9 -0
- package/dist/src/components/code-editor/index.js +9 -0
- package/dist/src/components/collapse/bundle.js +308 -0
- package/dist/src/components/collapse/bundle.js.gz +0 -0
- package/dist/src/components/collapse/collapse.component.d.ts +93 -0
- package/dist/src/components/collapse/collapse.component.js +322 -0
- package/dist/src/components/collapse/collapse.style.d.ts +11 -0
- package/dist/src/components/collapse/collapse.style.js +234 -0
- package/dist/src/components/collapse/collapse.type.d.ts +79 -0
- package/dist/src/components/collapse/collapse.type.js +11 -0
- package/dist/src/components/collapse/index.d.ts +2 -0
- package/dist/src/components/collapse/index.js +2 -0
- package/dist/src/components/collapse/react.d.ts +6 -0
- package/dist/src/components/collapse/react.js +13 -0
- package/dist/src/components/colorpicker/bundle.js +242 -0
- package/dist/src/components/colorpicker/bundle.js.gz +0 -0
- package/dist/src/components/colorpicker/color-holder.component.d.ts +50 -0
- package/dist/src/components/colorpicker/color-holder.component.js +116 -0
- package/dist/src/components/colorpicker/color-holder.style.d.ts +2 -0
- package/dist/src/components/colorpicker/color-holder.style.js +45 -0
- package/dist/src/components/colorpicker/color-picker.component.d.ts +178 -0
- package/dist/src/components/colorpicker/color-picker.component.js +374 -0
- package/dist/src/components/colorpicker/color-picker.style.d.ts +10 -0
- package/dist/src/components/colorpicker/color-picker.style.js +86 -0
- package/dist/src/components/colorpicker/color-picker.types.d.ts +60 -0
- package/dist/src/components/colorpicker/color-picker.types.js +2 -0
- package/dist/src/components/colorpicker/default-color-sets.component.d.ts +45 -0
- package/dist/src/components/colorpicker/default-color-sets.component.js +121 -0
- package/dist/src/components/colorpicker/default-color-sets.style.d.ts +2 -0
- package/dist/src/components/colorpicker/default-color-sets.style.js +34 -0
- package/dist/src/components/colorpicker/index.d.ts +3 -0
- package/dist/src/components/colorpicker/index.js +3 -0
- package/dist/src/components/colorpicker/react.d.ts +6 -0
- package/dist/src/components/colorpicker/react.js +13 -0
- package/dist/src/components/console/react.d.ts +340 -0
- package/dist/src/components/console/react.js +13 -0
- package/dist/src/components/container/bundle.js +161 -0
- package/dist/src/components/container/bundle.js.gz +0 -0
- package/dist/src/components/container/container.component.d.ts +85 -0
- package/dist/src/components/container/container.component.js +223 -0
- package/dist/src/components/container/container.style.d.ts +6 -0
- package/dist/src/components/container/container.style.js +146 -0
- package/dist/src/components/container/container.types.d.ts +67 -0
- package/dist/src/components/container/container.types.js +5 -0
- package/dist/src/components/container/index.d.ts +3 -0
- package/dist/src/components/container/index.js +3 -0
- package/dist/src/components/container/react.d.ts +3 -0
- package/dist/src/components/container/react.js +10 -0
- package/dist/src/components/datepicker/bundle.js +706 -0
- package/dist/src/components/datepicker/bundle.js.gz +0 -0
- package/dist/src/components/datepicker/datepicker.component.d.ts +190 -0
- package/dist/src/components/datepicker/datepicker.component.js +673 -0
- package/dist/src/components/datepicker/datepicker.constant.d.ts +60 -0
- package/dist/src/components/datepicker/datepicker.constant.js +60 -0
- package/dist/src/components/datepicker/datepicker.style.d.ts +17 -0
- package/dist/src/components/datepicker/datepicker.style.js +453 -0
- package/dist/src/components/datepicker/datepicker.style.variables.d.ts +2 -0
- package/dist/src/components/datepicker/datepicker.style.variables.js +119 -0
- package/dist/src/components/datepicker/datepicker.types.d.ts +142 -0
- package/dist/src/components/datepicker/datepicker.types.js +75 -0
- package/dist/src/components/datepicker/index.d.ts +4 -0
- package/dist/src/components/datepicker/index.js +4 -0
- package/dist/src/components/datepicker/react.d.ts +16 -0
- package/dist/src/components/datepicker/react.js +23 -0
- package/dist/src/components/db-connection-select/bundle.js +308 -0
- package/dist/src/components/db-connection-select/bundle.js.gz +0 -0
- package/dist/src/components/db-connection-select/db-connection-select.component.d.ts +105 -0
- package/dist/src/components/db-connection-select/db-connection-select.component.js +573 -0
- package/dist/src/components/db-connection-select/index.d.ts +7 -0
- package/dist/src/components/db-connection-select/index.js +7 -0
- package/dist/src/components/divider/bundle.js +143 -0
- package/dist/src/components/divider/bundle.js.gz +0 -0
- package/dist/src/components/divider/divider.component.d.ts +90 -0
- package/dist/src/components/divider/divider.component.js +168 -0
- package/dist/src/components/divider/divider.style.d.ts +3 -0
- package/dist/src/components/divider/divider.style.js +139 -0
- package/dist/src/components/divider/divider.types.d.ts +55 -0
- package/dist/src/components/divider/divider.types.js +6 -0
- package/dist/src/components/divider/index.d.ts +3 -0
- package/dist/src/components/divider/index.js +3 -0
- package/dist/src/components/divider/react.d.ts +3 -0
- package/dist/src/components/divider/react.js +10 -0
- package/dist/src/components/document/bundle.js +242 -0
- package/dist/src/components/document/bundle.js.gz +0 -0
- package/dist/src/components/document/document.component.d.ts +27 -0
- package/dist/src/components/document/document.component.js +136 -0
- package/dist/src/components/document/document.style.d.ts +3 -0
- package/dist/src/components/document/document.style.js +210 -0
- package/dist/src/components/document/document.types.d.ts +68 -0
- package/dist/src/components/document/document.types.js +7 -0
- package/dist/src/components/document/index.d.ts +3 -0
- package/dist/src/components/document/index.js +3 -0
- package/dist/src/components/document/react.d.ts +8 -0
- package/dist/src/components/document/react.js +15 -0
- package/dist/src/components/dropdown/bundle.js +528 -0
- package/dist/src/components/dropdown/bundle.js.gz +0 -0
- package/dist/src/components/dropdown/dropdown.component.d.ts +120 -0
- package/dist/src/components/dropdown/dropdown.component.js +390 -0
- package/dist/src/components/dropdown/dropdown.style.d.ts +2 -0
- package/dist/src/components/dropdown/dropdown.style.js +460 -0
- package/dist/src/components/dropdown/dropdown.types.d.ts +99 -0
- package/dist/src/components/dropdown/dropdown.types.js +2 -0
- package/dist/src/components/dropdown/index.d.ts +3 -0
- package/dist/src/components/dropdown/index.js +3 -0
- package/dist/src/components/dropdown/react.d.ts +7 -0
- package/dist/src/components/dropdown/react.js +14 -0
- package/dist/src/components/file-upload/bundle.js +472 -0
- package/dist/src/components/file-upload/bundle.js.gz +0 -0
- package/dist/src/components/file-upload/file-upload.component.d.ts +43 -0
- package/dist/src/components/file-upload/file-upload.component.js +398 -0
- package/dist/src/components/file-upload/index.d.ts +2 -0
- package/dist/src/components/file-upload/index.js +2 -0
- package/dist/src/components/file-upload/react.d.ts +7 -0
- package/dist/src/components/file-upload/react.js +14 -0
- package/dist/src/components/file-upload/styles.d.ts +2 -0
- package/dist/src/components/file-upload/styles.js +373 -0
- package/dist/src/components/file-upload/types.d.ts +11 -0
- package/dist/src/components/file-upload/types.js +2 -0
- package/dist/src/components/file-upload/utils.d.ts +6 -0
- package/dist/src/components/file-upload/utils.js +24 -0
- package/dist/src/components/flex/bundle.js +114 -0
- package/dist/src/components/flex/bundle.js.gz +0 -0
- package/dist/src/components/flex/flex.component.d.ts +89 -0
- package/dist/src/components/flex/flex.component.js +178 -0
- package/dist/src/components/flex/flex.style.d.ts +6 -0
- package/dist/src/components/flex/flex.style.js +101 -0
- package/dist/src/components/flex/flex.types.d.ts +63 -0
- package/dist/src/components/flex/flex.types.js +5 -0
- package/dist/src/components/flex/index.d.ts +3 -0
- package/dist/src/components/flex/index.js +3 -0
- package/dist/src/components/flex/react.d.ts +3 -0
- package/dist/src/components/flex/react.js +10 -0
- package/dist/src/components/form/bundle.js +98 -0
- package/dist/src/components/form/bundle.js.gz +0 -0
- package/dist/src/components/form/form.component.d.ts +279 -0
- package/dist/src/components/form/form.component.js +644 -0
- package/dist/src/components/form/form.style.d.ts +7 -0
- package/dist/src/components/form/form.style.js +68 -0
- package/dist/src/components/form/form.types.d.ts +92 -0
- package/dist/src/components/form/form.types.js +38 -0
- package/dist/src/components/form/index.d.ts +10 -0
- package/dist/src/components/form/index.js +13 -0
- package/dist/src/components/grid/bundle.js +202 -0
- package/dist/src/components/grid/bundle.js.gz +0 -0
- package/dist/src/components/grid/col.component.d.ts +103 -0
- package/dist/src/components/grid/col.component.js +253 -0
- package/dist/src/components/grid/col.style.d.ts +6 -0
- package/dist/src/components/grid/col.style.js +117 -0
- package/dist/src/components/grid/grid.types.d.ts +80 -0
- package/dist/src/components/grid/grid.types.js +16 -0
- package/dist/src/components/grid/index.d.ts +4 -0
- package/dist/src/components/grid/index.js +4 -0
- package/dist/src/components/grid/react.d.ts +5 -0
- package/dist/src/components/grid/react.js +17 -0
- package/dist/src/components/grid/row.component.d.ts +83 -0
- package/dist/src/components/grid/row.component.js +197 -0
- package/dist/src/components/grid/row.style.d.ts +6 -0
- package/dist/src/components/grid/row.style.js +68 -0
- package/dist/src/components/icon/bundle.js +340 -0
- package/dist/src/components/icon/bundle.js.gz +0 -0
- package/dist/src/components/icon/icon.component.d.ts +64 -0
- package/dist/src/components/icon/icon.component.js +207 -0
- package/dist/src/components/icon/icon.style.d.ts +2 -0
- package/dist/src/components/icon/icon.style.js +211 -0
- package/dist/src/components/icon/icon.types.d.ts +5 -0
- package/dist/src/components/icon/icon.types.js +2 -0
- package/dist/src/components/icon/icon.variables.d.ts +17 -0
- package/dist/src/components/icon/icon.variables.js +132 -0
- package/dist/src/components/icon/index.d.ts +2 -0
- package/dist/src/components/icon/index.js +2 -0
- package/dist/src/components/icon/react.d.ts +3 -0
- package/dist/src/components/icon/react.js +9 -0
- package/dist/src/components/iconpicker/bundle.js +2811 -0
- package/dist/src/components/iconpicker/bundle.js.gz +0 -0
- package/dist/src/components/iconpicker/icon-picker.component.d.ts +119 -0
- package/dist/src/components/iconpicker/icon-picker.component.js +337 -0
- package/dist/src/components/iconpicker/icon-picker.constant.d.ts +15 -0
- package/dist/src/components/iconpicker/icon-picker.constant.js +31 -0
- package/dist/src/components/iconpicker/icon-picker.style.d.ts +8 -0
- package/dist/src/components/iconpicker/icon-picker.style.js +216 -0
- package/dist/src/components/iconpicker/icon-picker.types.d.ts +49 -0
- package/dist/src/components/iconpicker/icon-picker.types.js +7 -0
- package/dist/src/components/iconpicker/index.d.ts +9 -0
- package/dist/src/components/iconpicker/index.js +9 -0
- package/dist/src/components/iconpicker/react.d.ts +14 -0
- package/dist/src/components/iconpicker/react.js +21 -0
- package/dist/src/components/image/bundle.js +98 -0
- package/dist/src/components/image/bundle.js.gz +0 -0
- package/dist/src/components/image/image.component.d.ts +31 -0
- package/dist/src/components/image/image.component.js +143 -0
- package/dist/src/components/image/image.style.d.ts +3 -0
- package/dist/src/components/image/image.style.js +83 -0
- package/dist/src/components/image/image.types.d.ts +68 -0
- package/dist/src/components/image/image.types.js +7 -0
- package/dist/src/components/image/index.d.ts +3 -0
- package/dist/src/components/image/index.js +3 -0
- package/dist/src/components/image/react.d.ts +8 -0
- package/dist/src/components/image/react.js +15 -0
- package/dist/src/components/input/bundle.js +930 -0
- package/dist/src/components/input/bundle.js.gz +0 -0
- package/dist/src/components/input/index.d.ts +3 -0
- package/dist/src/components/input/index.js +3 -0
- package/dist/src/components/input/input.component.d.ts +174 -0
- package/dist/src/components/input/input.component.js +490 -0
- package/dist/src/components/input/input.style.d.ts +2 -0
- package/dist/src/components/input/input.style.js +810 -0
- package/dist/src/components/input/input.types.d.ts +127 -0
- package/dist/src/components/input/input.types.js +75 -0
- package/dist/src/components/input/react.d.ts +9 -0
- package/dist/src/components/input/react.js +16 -0
- package/dist/src/components/input/validation.d.ts +3 -0
- package/dist/src/components/input/validation.js +3 -0
- package/dist/src/components/kv-secret-select/bundle.js +183 -0
- package/dist/src/components/kv-secret-select/bundle.js.gz +0 -0
- package/dist/src/components/kv-secret-select/index.d.ts +2 -0
- package/dist/src/components/kv-secret-select/index.js +2 -0
- package/dist/src/components/kv-secret-select/kv-secret-select.component.d.ts +83 -0
- package/dist/src/components/kv-secret-select/kv-secret-select.component.js +360 -0
- package/dist/src/components/label/bundle.js +104 -0
- package/dist/src/components/label/bundle.js.gz +0 -0
- package/dist/src/components/label/index.d.ts +2 -0
- package/dist/src/components/label/index.js +2 -0
- package/dist/src/components/label/label.component.d.ts +18 -0
- package/dist/src/components/label/label.component.js +64 -0
- package/dist/src/components/label/label.style.d.ts +3 -0
- package/dist/src/components/label/label.style.js +70 -0
- package/dist/src/components/label/label.style.variables.d.ts +2 -0
- package/dist/src/components/label/label.style.variables.js +35 -0
- package/dist/src/components/label/label.types.d.ts +42 -0
- package/dist/src/components/label/label.types.js +2 -0
- package/dist/src/components/label/react.d.ts +339 -0
- package/dist/src/components/label/react.js +12 -0
- package/dist/src/components/layout/bundle.js +220 -0
- package/dist/src/components/layout/bundle.js.gz +0 -0
- package/dist/src/components/layout/content.component.d.ts +35 -0
- package/dist/src/components/layout/content.component.js +47 -0
- package/dist/src/components/layout/content.style.d.ts +2 -0
- package/dist/src/components/layout/content.style.js +17 -0
- package/dist/src/components/layout/footer.component.d.ts +38 -0
- package/dist/src/components/layout/footer.component.js +60 -0
- package/dist/src/components/layout/footer.style.d.ts +2 -0
- package/dist/src/components/layout/footer.style.js +17 -0
- package/dist/src/components/layout/header.component.d.ts +39 -0
- package/dist/src/components/layout/header.component.js +61 -0
- package/dist/src/components/layout/header.style.d.ts +2 -0
- package/dist/src/components/layout/header.style.js +19 -0
- package/dist/src/components/layout/index.d.ts +8 -0
- package/dist/src/components/layout/index.js +7 -0
- package/dist/src/components/layout/layout.component.d.ts +50 -0
- package/dist/src/components/layout/layout.component.js +89 -0
- package/dist/src/components/layout/layout.style.d.ts +2 -0
- package/dist/src/components/layout/layout.style.js +23 -0
- package/dist/src/components/layout/layout.types.d.ts +75 -0
- package/dist/src/components/layout/layout.types.js +12 -0
- package/dist/src/components/layout/react.d.ts +14 -0
- package/dist/src/components/layout/react.js +37 -0
- package/dist/src/components/layout/sider.component.d.ts +116 -0
- package/dist/src/components/layout/sider.component.js +273 -0
- package/dist/src/components/layout/sider.style.d.ts +2 -0
- package/dist/src/components/layout/sider.style.js +104 -0
- package/dist/src/components/menu/bundle.js +520 -0
- package/dist/src/components/menu/bundle.js.gz +0 -0
- package/dist/src/components/menu/index.d.ts +4 -0
- package/dist/src/components/menu/index.js +2 -0
- package/dist/src/components/menu/menu.component.d.ts +87 -0
- package/dist/src/components/menu/menu.component.js +596 -0
- package/dist/src/components/menu/menu.constants.d.ts +12 -0
- package/dist/src/components/menu/menu.constants.js +14 -0
- package/dist/src/components/menu/menu.style.d.ts +2 -0
- package/dist/src/components/menu/menu.style.js +372 -0
- package/dist/src/components/menu/menu.types.d.ts +66 -0
- package/dist/src/components/menu/menu.types.js +7 -0
- package/dist/src/components/menu/react.d.ts +5 -0
- package/dist/src/components/menu/react.js +12 -0
- package/dist/src/components/modal/bundle.js +442 -0
- package/dist/src/components/modal/bundle.js.gz +0 -0
- package/dist/src/components/modal/index.d.ts +10 -0
- package/dist/src/components/modal/index.js +10 -0
- package/dist/src/components/modal/modal-manager.d.ts +72 -0
- package/dist/src/components/modal/modal-manager.js +170 -0
- package/dist/src/components/modal/modal.component.d.ts +121 -0
- package/dist/src/components/modal/modal.component.js +461 -0
- package/dist/src/components/modal/modal.style.d.ts +9 -0
- package/dist/src/components/modal/modal.style.js +369 -0
- package/dist/src/components/modal/modal.types.d.ts +105 -0
- package/dist/src/components/modal/modal.types.js +93 -0
- package/dist/src/components/modal/react.d.ts +9 -0
- package/dist/src/components/modal/react.js +16 -0
- package/dist/src/components/panel/bundle.js +1075 -0
- package/dist/src/components/panel/bundle.js.gz +0 -0
- package/dist/src/components/panel/index.d.ts +9 -0
- package/dist/src/components/panel/index.js +9 -0
- package/dist/src/components/panel/panel.component.d.ts +199 -0
- package/dist/src/components/panel/panel.component.js +720 -0
- package/dist/src/components/panel/panel.style.d.ts +7 -0
- package/dist/src/components/panel/panel.style.js +497 -0
- package/dist/src/components/panel/panel.types.d.ts +94 -0
- package/dist/src/components/panel/panel.types.js +50 -0
- package/dist/src/components/panel/react.d.ts +11 -0
- package/dist/src/components/panel/react.js +18 -0
- package/dist/src/components/popconfirm/bundle.js +438 -0
- package/dist/src/components/popconfirm/bundle.js.gz +0 -0
- package/dist/src/components/popconfirm/index.d.ts +4 -0
- package/dist/src/components/popconfirm/index.js +4 -0
- package/dist/src/components/popconfirm/popconfirm-manager.component.d.ts +129 -0
- package/dist/src/components/popconfirm/popconfirm-manager.component.js +372 -0
- package/dist/src/components/popconfirm/popconfirm-manager.style.d.ts +2 -0
- package/dist/src/components/popconfirm/popconfirm-manager.style.js +137 -0
- package/dist/src/components/popconfirm/popconfirm.component.d.ts +179 -0
- package/dist/src/components/popconfirm/popconfirm.component.js +409 -0
- package/dist/src/components/popconfirm/popconfirm.style.d.ts +2 -0
- package/dist/src/components/popconfirm/popconfirm.style.js +207 -0
- package/dist/src/components/popconfirm/popconfirm.types.d.ts +104 -0
- package/dist/src/components/popconfirm/popconfirm.types.js +2 -0
- package/dist/src/components/popconfirm/react.d.ts +7 -0
- package/dist/src/components/popconfirm/react.js +14 -0
- package/dist/src/components/radio/bundle.js +180 -0
- package/dist/src/components/radio/bundle.js.gz +0 -0
- package/dist/src/components/radio/index.d.ts +3 -0
- package/dist/src/components/radio/index.js +3 -0
- package/dist/src/components/radio/radio.component.d.ts +70 -0
- package/dist/src/components/radio/radio.component.js +187 -0
- package/dist/src/components/radio/radio.style.d.ts +7 -0
- package/dist/src/components/radio/radio.style.js +149 -0
- package/dist/src/components/radio/radio.types.d.ts +14 -0
- package/dist/src/components/radio/radio.types.js +15 -0
- package/dist/src/components/radio/react.d.ts +12 -0
- package/dist/src/components/radio/react.js +19 -0
- package/dist/src/components/radio-group/bundle.js +430 -0
- package/dist/src/components/radio-group/bundle.js.gz +0 -0
- package/dist/src/components/radio-group/index.d.ts +3 -0
- package/dist/src/components/radio-group/index.js +3 -0
- package/dist/src/components/radio-group/radio-group.component.d.ts +165 -0
- package/dist/src/components/radio-group/radio-group.component.js +437 -0
- package/dist/src/components/radio-group/radio-group.style.d.ts +7 -0
- package/dist/src/components/radio-group/radio-group.style.js +270 -0
- package/dist/src/components/radio-group/radio-group.types.d.ts +39 -0
- package/dist/src/components/radio-group/radio-group.types.js +29 -0
- package/dist/src/components/radio-group/radio.constant.d.ts +2 -0
- package/dist/src/components/radio-group/radio.constant.js +2 -0
- package/dist/src/components/radio-group/react.d.ts +10 -0
- package/dist/src/components/radio-group/react.js +17 -0
- package/dist/src/components/select/bundle.js +721 -0
- package/dist/src/components/select/bundle.js.gz +0 -0
- package/dist/src/components/select/index.d.ts +17 -0
- package/dist/src/components/select/index.js +20 -0
- package/dist/src/components/select/react.d.ts +19 -0
- package/dist/src/components/select/react.js +26 -0
- package/dist/src/components/select/select.component.d.ts +359 -0
- package/dist/src/components/select/select.component.js +775 -0
- package/dist/src/components/select/select.constant.d.ts +133 -0
- package/dist/src/components/select/select.constant.js +136 -0
- package/dist/src/components/select/select.style.d.ts +2 -0
- package/dist/src/components/select/select.style.js +533 -0
- package/dist/src/components/select/select.types.d.ts +100 -0
- package/dist/src/components/select/select.types.js +73 -0
- package/dist/src/components/skeleton/bundle.js +293 -0
- package/dist/src/components/skeleton/bundle.js.gz +0 -0
- package/dist/src/components/skeleton/index.d.ts +3 -0
- package/dist/src/components/skeleton/index.js +3 -0
- package/dist/src/components/skeleton/react.d.ts +3 -0
- package/dist/src/components/skeleton/react.js +10 -0
- package/dist/src/components/skeleton/skeleton.component.d.ts +165 -0
- package/dist/src/components/skeleton/skeleton.component.js +387 -0
- package/dist/src/components/skeleton/skeleton.style.d.ts +2 -0
- package/dist/src/components/skeleton/skeleton.style.js +224 -0
- package/dist/src/components/skeleton/skeleton.types.d.ts +82 -0
- package/dist/src/components/skeleton/skeleton.types.js +2 -0
- package/dist/src/components/slider-input/bundle.js +241 -0
- package/dist/src/components/slider-input/bundle.js.gz +0 -0
- package/dist/src/components/slider-input/index.d.ts +3 -0
- package/dist/src/components/slider-input/index.js +3 -0
- package/dist/src/components/slider-input/react.d.ts +340 -0
- package/dist/src/components/slider-input/react.js +13 -0
- package/dist/src/components/slider-input/slider-input.component.d.ts +38 -0
- package/dist/src/components/slider-input/slider-input.component.js +191 -0
- package/dist/src/components/slider-input/slider-input.style.d.ts +3 -0
- package/dist/src/components/slider-input/slider-input.style.js +171 -0
- package/dist/src/components/slider-input/slider-input.style.variables.d.ts +2 -0
- package/dist/src/components/slider-input/slider-input.style.variables.js +59 -0
- package/dist/src/components/slider-input/slider-input.types.d.ts +21 -0
- package/dist/src/components/slider-input/slider-input.types.js +6 -0
- package/dist/src/components/table/bundle.js +987 -0
- package/dist/src/components/table/bundle.js.gz +0 -0
- package/dist/src/components/table/index.d.ts +2 -0
- package/dist/src/components/table/index.js +2 -0
- package/dist/src/components/table/react.d.ts +7 -0
- package/dist/src/components/table/react.js +14 -0
- package/dist/src/components/table/table.component.d.ts +140 -0
- package/dist/src/components/table/table.component.js +433 -0
- package/dist/src/components/table/table.style.d.ts +3 -0
- package/dist/src/components/table/table.style.js +702 -0
- package/dist/src/components/table/table.types.d.ts +103 -0
- package/dist/src/components/table/table.types.js +2 -0
- package/dist/src/components/tabs/bundle.js +1782 -0
- package/dist/src/components/tabs/bundle.js.gz +0 -0
- package/dist/src/components/tabs/index.d.ts +9 -0
- package/dist/src/components/tabs/index.js +10 -0
- package/dist/src/components/tabs/react.d.ts +50 -0
- package/dist/src/components/tabs/react.js +50 -0
- package/dist/src/components/tabs/tabs.component.d.ts +100 -0
- package/dist/src/components/tabs/tabs.component.js +461 -0
- package/dist/src/components/tabs/tabs.constant.d.ts +20 -0
- package/dist/src/components/tabs/tabs.constant.js +21 -0
- package/dist/src/components/tabs/tabs.style.d.ts +9 -0
- package/dist/src/components/tabs/tabs.style.js +577 -0
- package/dist/src/components/tabs/tabs.types.d.ts +241 -0
- package/dist/src/components/tabs/tabs.types.js +13 -0
- package/dist/src/components/tag/bundle.js +108 -0
- package/dist/src/components/tag/bundle.js.gz +0 -0
- package/dist/src/components/tag/index.d.ts +2 -0
- package/dist/src/components/tag/index.js +2 -0
- package/dist/src/components/tag/react.d.ts +6 -0
- package/dist/src/components/tag/react.js +13 -0
- package/dist/src/components/tag/tag.component.d.ts +57 -0
- package/dist/src/components/tag/tag.component.js +157 -0
- package/dist/src/components/tag/tag.style.d.ts +7 -0
- package/dist/src/components/tag/tag.style.js +88 -0
- package/dist/src/components/tag/tag.types.d.ts +28 -0
- package/dist/src/components/tag/tag.types.js +7 -0
- package/dist/src/components/textarea/bundle.js +404 -0
- package/dist/src/components/textarea/bundle.js.gz +0 -0
- package/dist/src/components/textarea/index.d.ts +8 -0
- package/dist/src/components/textarea/index.js +7 -0
- package/dist/src/components/textarea/react.d.ts +9 -0
- package/dist/src/components/textarea/react.js +16 -0
- package/dist/src/components/textarea/textarea.component.d.ts +203 -0
- package/dist/src/components/textarea/textarea.component.js +657 -0
- package/dist/src/components/textarea/textarea.style.d.ts +59 -0
- package/dist/src/components/textarea/textarea.style.js +386 -0
- package/dist/src/components/textarea/textarea.types.d.ts +102 -0
- package/dist/src/components/textarea/textarea.types.js +14 -0
- package/dist/src/components/timeline/bundle.js +261 -0
- package/dist/src/components/timeline/bundle.js.gz +0 -0
- package/dist/src/components/timeline/index.d.ts +2 -0
- package/dist/src/components/timeline/index.js +2 -0
- package/dist/src/components/timeline/react.d.ts +3 -0
- package/dist/src/components/timeline/react.js +10 -0
- package/dist/src/components/timeline/timeline.component.d.ts +109 -0
- package/dist/src/components/timeline/timeline.component.js +214 -0
- package/dist/src/components/timeline/timeline.style.d.ts +14 -0
- package/dist/src/components/timeline/timeline.style.js +234 -0
- package/dist/src/components/timeline/timeline.types.d.ts +62 -0
- package/dist/src/components/timeline/timeline.types.js +7 -0
- package/dist/src/components/timepicker/bundle.js +810 -0
- package/dist/src/components/timepicker/bundle.js.gz +0 -0
- package/dist/src/components/timepicker/index.d.ts +12 -0
- package/dist/src/components/timepicker/index.js +12 -0
- package/dist/src/components/timepicker/timepicker.component.d.ts +115 -0
- package/dist/src/components/timepicker/timepicker.component.js +743 -0
- package/dist/src/components/timepicker/timepicker.constants.d.ts +85 -0
- package/dist/src/components/timepicker/timepicker.constants.js +85 -0
- package/dist/src/components/timepicker/timepicker.style.d.ts +7 -0
- package/dist/src/components/timepicker/timepicker.style.js +568 -0
- package/dist/src/components/timepicker/timepicker.style.variables.d.ts +2 -0
- package/dist/src/components/timepicker/timepicker.style.variables.js +122 -0
- package/dist/src/components/timepicker/timepicker.types.d.ts +161 -0
- package/dist/src/components/timepicker/timepicker.types.js +125 -0
- package/dist/src/components/toast/bundle.js +393 -0
- package/dist/src/components/toast/bundle.js.gz +0 -0
- package/dist/src/components/toast/index.d.ts +9 -0
- package/dist/src/components/toast/index.js +9 -0
- package/dist/src/components/toast/react.d.ts +7 -0
- package/dist/src/components/toast/react.js +19 -0
- package/dist/src/components/toast/toast.component.d.ts +152 -0
- package/dist/src/components/toast/toast.component.js +368 -0
- package/dist/src/components/toast/toast.style.d.ts +14 -0
- package/dist/src/components/toast/toast.style.js +338 -0
- package/dist/src/components/toast/toast.types.d.ts +124 -0
- package/dist/src/components/toast/toast.types.js +9 -0
- package/dist/src/components/tooltips/bundle.js +123 -0
- package/dist/src/components/tooltips/bundle.js.gz +0 -0
- package/dist/src/components/tooltips/index.d.ts +2 -0
- package/dist/src/components/tooltips/index.js +2 -0
- package/dist/src/components/tooltips/react.d.ts +1 -0
- package/dist/src/components/tooltips/react.js +2 -0
- package/dist/src/components/tooltips/tooltips.component.d.ts +33 -0
- package/dist/src/components/tooltips/tooltips.component.js +313 -0
- package/dist/src/components/tooltips/tooltips.constant.d.ts +13 -0
- package/dist/src/components/tooltips/tooltips.constant.js +15 -0
- package/dist/src/components/tooltips/tooltips.style.d.ts +2 -0
- package/dist/src/components/tooltips/tooltips.style.js +103 -0
- package/dist/src/components/tooltips/tooltips.variables.d.ts +2 -0
- package/dist/src/components/tooltips/tooltips.variables.js +14 -0
- package/dist/src/components/video/bundle.js +171 -0
- package/dist/src/components/video/bundle.js.gz +0 -0
- package/dist/src/components/video/index.d.ts +3 -0
- package/dist/src/components/video/index.js +3 -0
- package/dist/src/components/video/react.d.ts +10 -0
- package/dist/src/components/video/react.js +17 -0
- package/dist/src/components/video/video.component.d.ts +34 -0
- package/dist/src/components/video/video.component.js +184 -0
- package/dist/src/components/video/video.style.d.ts +3 -0
- package/dist/src/components/video/video.style.js +124 -0
- package/dist/src/components/video/video.types.d.ts +80 -0
- package/dist/src/components/video/video.types.js +7 -0
- package/package.json +215 -0
- package/packages/common/README.md +137 -0
- package/packages/common/dist/LICENSE +28 -0
- package/packages/common/dist/README.md +137 -0
- package/packages/common/dist/VERSIONS.md +4 -0
- package/packages/common/dist/constants/index.d.ts +2 -0
- package/packages/common/dist/constants/index.d.ts.map +1 -0
- package/packages/common/dist/constants/index.js +2 -0
- package/packages/common/dist/constants/index.js.map +1 -0
- package/packages/common/dist/constants.d.ts +17 -0
- package/packages/common/dist/constants.d.ts.map +1 -0
- package/packages/common/dist/constants.js +7 -0
- package/packages/common/dist/constants.js.map +1 -0
- package/packages/common/dist/controllers/index.d.ts +2 -0
- package/packages/common/dist/controllers/index.d.ts.map +1 -0
- package/packages/common/dist/controllers/index.js +2 -0
- package/packages/common/dist/controllers/index.js.map +1 -0
- package/packages/common/dist/controllers.d.ts +21 -0
- package/packages/common/dist/controllers.d.ts.map +1 -0
- package/packages/common/dist/controllers.js +22 -0
- package/packages/common/dist/controllers.js.map +1 -0
- package/packages/common/dist/index.d.ts +25 -0
- package/packages/common/dist/index.d.ts.map +1 -0
- package/packages/common/dist/index.js +27 -0
- package/packages/common/dist/index.js.map +1 -0
- package/packages/common/dist/mixins/index.d.ts +2 -0
- package/packages/common/dist/mixins/index.d.ts.map +1 -0
- package/packages/common/dist/mixins/index.js +3 -0
- package/packages/common/dist/mixins/index.js.map +1 -0
- package/packages/common/dist/mixins.d.ts +26 -0
- package/packages/common/dist/mixins.d.ts.map +1 -0
- package/packages/common/dist/mixins.js +29 -0
- package/packages/common/dist/mixins.js.map +1 -0
- package/packages/common/dist/shared/base-mixin.d.ts +42 -0
- package/packages/common/dist/shared/base-mixin.d.ts.map +1 -0
- package/packages/common/dist/shared/base-mixin.js +38 -0
- package/packages/common/dist/shared/base-mixin.js.map +1 -0
- package/packages/common/dist/shared/constants.d.ts +1 -0
- package/packages/common/dist/shared/constants.d.ts.map +1 -0
- package/packages/common/dist/shared/constants.js +2 -0
- package/packages/common/dist/shared/constants.js.map +1 -0
- package/packages/common/dist/shared/controllers/base-validation.controller.d.ts +81 -0
- package/packages/common/dist/shared/controllers/base-validation.controller.d.ts.map +1 -0
- package/packages/common/dist/shared/controllers/base-validation.controller.js +104 -0
- package/packages/common/dist/shared/controllers/base-validation.controller.js.map +1 -0
- package/packages/common/dist/shared/controllers/base.controller.d.ts +76 -0
- package/packages/common/dist/shared/controllers/base.controller.d.ts.map +1 -0
- package/packages/common/dist/shared/controllers/base.controller.js +129 -0
- package/packages/common/dist/shared/controllers/base.controller.js.map +1 -0
- package/packages/common/dist/shared/controllers/dropdown.controller.d.ts +77 -0
- package/packages/common/dist/shared/controllers/dropdown.controller.d.ts.map +1 -0
- package/packages/common/dist/shared/controllers/dropdown.controller.js +341 -0
- package/packages/common/dist/shared/controllers/dropdown.controller.js.map +1 -0
- package/packages/common/dist/shared/controllers/dropdown.interface.d.ts +37 -0
- package/packages/common/dist/shared/controllers/dropdown.interface.d.ts.map +1 -0
- package/packages/common/dist/shared/controllers/dropdown.interface.js +2 -0
- package/packages/common/dist/shared/controllers/dropdown.interface.js.map +1 -0
- package/packages/common/dist/shared/controllers/index.d.ts +6 -0
- package/packages/common/dist/shared/controllers/index.d.ts.map +1 -0
- package/packages/common/dist/shared/controllers/index.js +6 -0
- package/packages/common/dist/shared/controllers/index.js.map +1 -0
- package/packages/common/dist/shared/controllers/theme.controller.d.ts +48 -0
- package/packages/common/dist/shared/controllers/theme.controller.d.ts.map +1 -0
- package/packages/common/dist/shared/controllers/theme.controller.js +133 -0
- package/packages/common/dist/shared/controllers/theme.controller.js.map +1 -0
- package/packages/common/dist/shared/dependency-mixin.d.ts +37 -0
- package/packages/common/dist/shared/dependency-mixin.d.ts.map +1 -0
- package/packages/common/dist/shared/dependency-mixin.js +141 -0
- package/packages/common/dist/shared/dependency-mixin.js.map +1 -0
- package/packages/common/dist/shared/event-handler-mixin.d.ts +64 -0
- package/packages/common/dist/shared/event-handler-mixin.d.ts.map +1 -0
- package/packages/common/dist/shared/event-handler-mixin.js +95 -0
- package/packages/common/dist/shared/event-handler-mixin.js.map +1 -0
- package/packages/common/dist/shared/index.d.ts +13 -0
- package/packages/common/dist/shared/index.d.ts.map +1 -0
- package/packages/common/dist/shared/index.js +17 -0
- package/packages/common/dist/shared/index.js.map +1 -0
- package/packages/common/dist/shared/render-utils.d.ts +103 -0
- package/packages/common/dist/shared/render-utils.d.ts.map +1 -0
- package/packages/common/dist/shared/render-utils.js +132 -0
- package/packages/common/dist/shared/render-utils.js.map +1 -0
- package/packages/common/dist/shared/theme-mixin.d.ts +78 -0
- package/packages/common/dist/shared/theme-mixin.d.ts.map +1 -0
- package/packages/common/dist/shared/theme-mixin.js +194 -0
- package/packages/common/dist/shared/theme-mixin.js.map +1 -0
- package/packages/common/dist/shared/themes.d.ts +44 -0
- package/packages/common/dist/shared/themes.d.ts.map +1 -0
- package/packages/common/dist/shared/themes.js +85 -0
- package/packages/common/dist/shared/themes.js.map +1 -0
- package/packages/common/dist/shared/utils.d.ts +60 -0
- package/packages/common/dist/shared/utils.d.ts.map +1 -0
- package/packages/common/dist/shared/utils.js +85 -0
- package/packages/common/dist/shared/utils.js.map +1 -0
- package/packages/common/dist/shared/validation.types.d.ts +108 -0
- package/packages/common/dist/shared/validation.types.d.ts.map +1 -0
- package/packages/common/dist/shared/validation.types.js +17 -0
- package/packages/common/dist/shared/validation.types.js.map +1 -0
- package/packages/common/dist/themes/index.d.ts +2 -0
- package/packages/common/dist/themes/index.d.ts.map +1 -0
- package/packages/common/dist/themes/index.js +2 -0
- package/packages/common/dist/themes/index.js.map +1 -0
- package/packages/common/dist/themes.d.ts +22 -0
- package/packages/common/dist/themes.d.ts.map +1 -0
- package/packages/common/dist/themes.js +23 -0
- package/packages/common/dist/themes.js.map +1 -0
- package/packages/common/dist/utils/index.d.ts +2 -0
- package/packages/common/dist/utils/index.d.ts.map +1 -0
- package/packages/common/dist/utils/index.js +2 -0
- package/packages/common/dist/utils/index.js.map +1 -0
- package/packages/common/dist/utils.d.ts +22 -0
- package/packages/common/dist/utils.d.ts.map +1 -0
- package/packages/common/dist/utils.js +24 -0
- package/packages/common/dist/utils.js.map +1 -0
- package/packages/themes/README.md +146 -0
- package/packages/themes/dist/README.md +146 -0
- package/packages/themes/dist/carbon.css +2987 -0
- package/packages/themes/dist/default.css +2757 -0
- package/packages/themes/dist/editor.css +1063 -0
- package/packages/themes/dist/index.cjs +46 -0
- package/packages/themes/dist/index.js +46 -0
- package/packages/themes/dist/package.json +59 -0
|
@@ -0,0 +1,2527 @@
|
|
|
1
|
+
import{css as t,nothing as e,html as n,LitElement as i}from"lit";import{property as o,state as r,customElement as s}from"lit/decorators.js";import{classMap as a}from"lit/directives/class-map.js";import{unsafeHTML as l}from"lit/directives/unsafe-html.js";import{NuralyUIBaseMixin as c}from"@nuralyui/common/mixins";import{repeat as d}from"lit/directives/repeat.js";import{io as h}from"socket.io-client";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2021 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
6
|
+
*/const u="lit-localize-status",p=(t,e,n)=>{let i=t[0];for(let o=1;o<t.length;o++)i+=e[n?n[o-1]:o-1],i+=t[o];return i},f=t=>{return"string"!=typeof(e=t)&&"strTag"in e?p(t.strings,t.values):t;var e};
|
|
7
|
+
/**
|
|
8
|
+
* @license
|
|
9
|
+
* Copyright 2021 Google LLC
|
|
10
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
11
|
+
*/let v=f,g=!1;
|
|
12
|
+
/**
|
|
13
|
+
* @license
|
|
14
|
+
* Copyright 2021 Google LLC
|
|
15
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
16
|
+
*/
|
|
17
|
+
class m{constructor(t){this.t=t=>{"ready"===t.detail.status&&this.host.requestUpdate()},this.host=t}hostConnected(){window.addEventListener(u,this.t)}hostDisconnected(){window.removeEventListener(u,this.t)}}const b=t=>t.addController(new m(t));
|
|
18
|
+
/**
|
|
19
|
+
* @license
|
|
20
|
+
* Copyright 2020 Google LLC
|
|
21
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
22
|
+
*/
|
|
23
|
+
class y{constructor(){this.settled=!1,this.promise=new Promise((t,e)=>{this._resolve=t,this._reject=e})}resolve(t){this.settled=!0,this._resolve(t)}reject(t){this.settled=!0,this._reject(t)}}
|
|
24
|
+
/**
|
|
25
|
+
* @license
|
|
26
|
+
* Copyright 2014 Travis Webb
|
|
27
|
+
* SPDX-License-Identifier: MIT
|
|
28
|
+
*/const x=[];for(let t=0;t<256;t++)x[t]=(t>>4&15).toString(16)+(15&t).toString(16);function w(t,e){return(e?"h":"s")+function(t){let e=0,n=8997,i=0,o=33826,r=0,s=40164,a=0,l=52210;for(let c=0;c<t.length;c++)n^=t.charCodeAt(c),e=435*n,i=435*o,r=435*s,a=435*l,r+=n<<8,a+=o<<8,i+=e>>>16,n=65535&e,r+=i>>>16,o=65535&i,l=a+(r>>>16)&65535,s=65535&r;return x[l>>8]+x[255&l]+x[s>>8]+x[255&s]+x[o>>8]+x[255&o]+x[n>>8]+x[255&n]}
|
|
29
|
+
/**
|
|
30
|
+
* @license
|
|
31
|
+
* Copyright 2020 Google LLC
|
|
32
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
33
|
+
*/("string"==typeof t?t:t.join(""))}
|
|
34
|
+
/**
|
|
35
|
+
* @license
|
|
36
|
+
* Copyright 2021 Google LLC
|
|
37
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
38
|
+
*/const _=new WeakMap,$=new Map;function k(t,e,n){if(t){const i=n?.id??function(t){const e="string"==typeof t?t:t.strings;let n=$.get(e);void 0===n&&(n=w(e,"string"!=typeof t&&!("strTag"in t)),$.set(e,n));return n}
|
|
39
|
+
/**
|
|
40
|
+
* @license
|
|
41
|
+
* Copyright 2021 Google LLC
|
|
42
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
43
|
+
*/(e),o=t[i];if(o){if("string"==typeof o)return o;if("strTag"in o)return p(o.strings,e.values,o.values);{let t=_.get(o);return void 0===t&&(t=o.values,_.set(o,t)),{...o,values:t.map(t=>e.values[t])}}}}return f(e)}function S(t){window.dispatchEvent(new CustomEvent(u,{detail:t}))}let z,P,T,M,E,C="",I=new y;I.resolve();let O=0;const R=t=>(function(t){if(g)throw new Error("lit-localize can only be configured once");v=t,g=!0}((t,e)=>k(E,t,e)),C=P=t.sourceLocale,T=new Set(t.targetLocales),T.add(t.sourceLocale),M=t.loadLocale,{getLocale:j,setLocale:A}),j=()=>C,A=t=>{if(t===(z??C))return I.promise;if(!T||!M)throw new Error("Internal error");if(!T.has(t))throw new Error("Invalid locale code");O++;const e=O;z=t,I.settled&&(I=new y),S({status:"loading",loadingLocale:t});return(t===P?Promise.resolve({templates:void 0}):M(t)).then(n=>{O===e&&(C=t,z=void 0,E=n.templates,S({status:"ready",readyLocale:t}),I.resolve())},n=>{O===e&&(S({status:"error",errorLocale:t,errorMessage:n.toString()}),I.reject(n))}),I.promise};var D,F,N,L,B,U,W,H=t`
|
|
44
|
+
:host {
|
|
45
|
+
display: block;
|
|
46
|
+
width: 100%;
|
|
47
|
+
height: 100%;
|
|
48
|
+
min-width: var(--nuraly-size-chatbot-min-width, 320px);
|
|
49
|
+
box-sizing: border-box;
|
|
50
|
+
overflow: visible;
|
|
51
|
+
|
|
52
|
+
font-family: var(--chatbot-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif);
|
|
53
|
+
font-feature-settings: "cv02", "cv03", "cv04", "cv11";
|
|
54
|
+
text-rendering: optimizeLegibility;
|
|
55
|
+
-webkit-font-smoothing: antialiased;
|
|
56
|
+
-moz-osx-font-smoothing: grayscale;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.chat-container {
|
|
60
|
+
display: flex;
|
|
61
|
+
width: 100%;
|
|
62
|
+
height: 100%;
|
|
63
|
+
background-color: var(--nuraly-color-chatbot-background, #ffffff);
|
|
64
|
+
border-radius: var(--nuraly-border-radius-chatbot);
|
|
65
|
+
position: relative;
|
|
66
|
+
border: var(--nuraly-border-width-chatbot-input, 1px) solid var(--nuraly-color-chatbot-border, #e0e0e0);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.chatbot-container {
|
|
70
|
+
display: flex;
|
|
71
|
+
flex-direction: column;
|
|
72
|
+
flex: 1;
|
|
73
|
+
min-height: 0;
|
|
74
|
+
min-width: var(--nuraly-size-chatbot-container-min-width, 300px);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.chatbot-container--with-sidebar,
|
|
78
|
+
.chatbot-container--with-artifact-panel {
|
|
79
|
+
flex-direction: row;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.chatbot-main {
|
|
83
|
+
display: flex;
|
|
84
|
+
flex-direction: column;
|
|
85
|
+
flex: 1;
|
|
86
|
+
min-height: 0;
|
|
87
|
+
min-width: 0;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.chatbot-header {
|
|
91
|
+
display: flex;
|
|
92
|
+
align-items: center;
|
|
93
|
+
justify-content: space-between;
|
|
94
|
+
gap: 0.5rem;
|
|
95
|
+
padding: 0.5rem;
|
|
96
|
+
border-bottom: 1px solid var(--nuraly-color-chatbot-border, #e0e0e0);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.chatbot-content {
|
|
100
|
+
flex: 1;
|
|
101
|
+
display: flex;
|
|
102
|
+
flex-direction: column;
|
|
103
|
+
min-height: 0;
|
|
104
|
+
overflow: hidden;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
:host([boxed]) .chat-container {
|
|
108
|
+
background-color: var(--nuraly-color-chatbot-background, #ffffff);
|
|
109
|
+
border: none;
|
|
110
|
+
border-radius: 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
:host([boxed]) .chatbot-container {
|
|
114
|
+
width: 100%;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
:host([boxed]) .chatbot-main {
|
|
118
|
+
width: 100%;
|
|
119
|
+
max-width: var(--nuraly-size-chatbot-boxed-max-width, 768px);
|
|
120
|
+
margin: 0 auto;
|
|
121
|
+
background-color: var(--nuraly-color-chatbot-background, #ffffff);
|
|
122
|
+
border: none;
|
|
123
|
+
border-radius: 0;
|
|
124
|
+
box-shadow: none;
|
|
125
|
+
height: 100%;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/* Boxed layout with threads: background comes from theme variable with white fallback */
|
|
129
|
+
:host([boxed]) .chat-container--boxed.chat-container--with-threads {
|
|
130
|
+
background-color: var(--nuraly-color-chatbot-background, #ffffff);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.chat-container--boxed.chat-container--with-threads .chatbot-main {
|
|
134
|
+
background-color: var(--nuraly-color-chatbot-background, #ffffff);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.chat-container--boxed.chat-container--with-threads .chat-box {
|
|
138
|
+
background-color: var(--nuraly-color-chatbot-background, #ffffff);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.chat-container--boxed.chat-container--with-threads .messages {
|
|
142
|
+
background-color: var(--nuraly-color-chatbot-background, #ffffff);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.chat-container--boxed.chat-container--with-threads .input-container {
|
|
146
|
+
background-color: var(--nuraly-color-chatbot-background, #ffffff);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
:host([boxed]) .chatbot-header {
|
|
150
|
+
/* Keep header at the top */
|
|
151
|
+
flex: 0 0 auto;
|
|
152
|
+
border-bottom: none;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
:host([boxed]) .chatbot-content:has(.empty-state) {
|
|
156
|
+
/* Don't let content flex grow when empty */
|
|
157
|
+
flex: 0 0 auto;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
:host([boxed]) .chatbot-content:not(:has(.empty-state)) {
|
|
161
|
+
/* Normal flex behavior when messages exist */
|
|
162
|
+
flex: 1;
|
|
163
|
+
min-height: 0;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
:host([boxed]) .chatbot-main:has(.empty-state) {
|
|
167
|
+
/* Make main container relative for absolute positioning */
|
|
168
|
+
position: relative;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
:host([boxed]) .empty-state {
|
|
172
|
+
/* Position empty state in the center - moved up */
|
|
173
|
+
position: absolute;
|
|
174
|
+
top: 50%;
|
|
175
|
+
left: 50%;
|
|
176
|
+
transform: translate(-50%, calc(-50% - 80px));
|
|
177
|
+
width: 100%;
|
|
178
|
+
max-width: var(--nuraly-size-chatbot-boxed-max-width, 768px);
|
|
179
|
+
height: auto;
|
|
180
|
+
padding: 0;
|
|
181
|
+
display: flex;
|
|
182
|
+
flex-direction: column;
|
|
183
|
+
align-items: center;
|
|
184
|
+
gap: var(--nuraly-spacing-06, 1.5rem);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
:host([boxed]) .empty-state__content {
|
|
188
|
+
margin-bottom: 0;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
:host([boxed]) .chatbot-content:has(.empty-state) + .input-box {
|
|
192
|
+
/* Position input-box in the middle with empty state - moved up */
|
|
193
|
+
position: absolute;
|
|
194
|
+
top: 50%;
|
|
195
|
+
left: 50%;
|
|
196
|
+
transform: translate(-50%, calc(-50% + 40px));
|
|
197
|
+
width: 100%;
|
|
198
|
+
max-width: var(--nuraly-size-chatbot-boxed-max-width, 768px);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
:host([boxed]) .suggestion-container {
|
|
202
|
+
margin-top: 0;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
:host([boxed]) .messages {
|
|
206
|
+
box-shadow: none;
|
|
207
|
+
margin-bottom: 0;
|
|
208
|
+
background-color: var(--nuraly-color-chatbot-background, #ffffff);
|
|
209
|
+
align-items: stretch;
|
|
210
|
+
width: 98%;
|
|
211
|
+
padding: var(--nuraly-spacing-chatbot-message-padding, 8px) var(--nuraly-spacing-06, 1.5rem);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
:host([boxed]) .input-container {
|
|
215
|
+
box-shadow: none;
|
|
216
|
+
margin: 0;
|
|
217
|
+
background-color: var(--nuraly-color-chatbot-background, #ffffff);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.chat-container--with-threads {
|
|
221
|
+
grid-template-columns: var(--nuraly-size-chatbot-sidebar-width) 1fr;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.chat-container--disabled {
|
|
225
|
+
opacity: var(--nuraly-opacity-chatbot-disabled, 0.5);
|
|
226
|
+
pointer-events: none;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.chat-container--drag-over {
|
|
230
|
+
background-color: var(--nuraly-color-chatbot-file-upload-background-hover);
|
|
231
|
+
border: var(--nuraly-spacing-02, 0.25rem) dashed var(--nuraly-color-chatbot-accent);
|
|
232
|
+
border-radius: var(--nuraly-border-radius-chatbot-file-upload);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
.thread-sidebar {
|
|
236
|
+
width: var(--nuraly-size-chatbot-thread-sidebar-width, 260px);
|
|
237
|
+
flex-shrink: 0;
|
|
238
|
+
background-color: var(--nuraly-color-chatbot-sidebar-background);
|
|
239
|
+
border-right: var(--nuraly-border-width-chatbot-message, 1px) solid var(--nuraly-color-chatbot-sidebar-border);
|
|
240
|
+
display: flex;
|
|
241
|
+
flex-direction: column;
|
|
242
|
+
overflow: hidden;
|
|
243
|
+
position: relative;
|
|
244
|
+
z-index: 1;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.thread-sidebar__header {
|
|
248
|
+
display: flex;
|
|
249
|
+
align-items: center;
|
|
250
|
+
justify-content: space-between;
|
|
251
|
+
padding: var(--nuraly-spacing-chatbot-sidebar-padding);
|
|
252
|
+
border-bottom: var(--nuraly-border-width-chatbot-message, 1px) solid var(--nuraly-color-chatbot-sidebar-border);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.thread-sidebar__header h3 {
|
|
256
|
+
margin: 0;
|
|
257
|
+
font-size: var(--nuraly-font-size-03, 1rem);
|
|
258
|
+
font-weight: var(--nuraly-font-weight-semibold, 600);
|
|
259
|
+
color: var(--nuraly-color-chatbot-sidebar-text);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.thread-list {
|
|
263
|
+
flex: 1;
|
|
264
|
+
overflow-y: auto;
|
|
265
|
+
padding: var(--nuraly-spacing-chatbot-sidebar-padding);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.thread-section {
|
|
269
|
+
margin-bottom: var(--nuraly-spacing-chatbot-sidebar-padding, 8px);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
.thread-section__label {
|
|
273
|
+
display: flex;
|
|
274
|
+
align-items: center;
|
|
275
|
+
gap: 6px;
|
|
276
|
+
font-size: 11px;
|
|
277
|
+
font-weight: 600;
|
|
278
|
+
text-transform: uppercase;
|
|
279
|
+
letter-spacing: 0.05em;
|
|
280
|
+
color: rgba(128, 128, 128, 0.6);
|
|
281
|
+
padding: 8px 12px 4px;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.thread-section__label svg {
|
|
285
|
+
color: var(--nuraly-color-chatbot-bookmark, #f59e0b);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.thread-item {
|
|
289
|
+
padding: var(--nuraly-spacing-chatbot-sidebar-padding);
|
|
290
|
+
border-radius: var(--nuraly-border-radius-chatbot);
|
|
291
|
+
cursor: pointer;
|
|
292
|
+
margin-bottom: var(--nuraly-spacing-chatbot-suggestions-gap);
|
|
293
|
+
transition: background-color var(--nuraly-transition-chatbot-fast);
|
|
294
|
+
border: var(--nuraly-border-width-chatbot-message, 1px) solid transparent;
|
|
295
|
+
line-height: 1.6;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.thread-item:hover {
|
|
299
|
+
background-color: var(--nuraly-color-chatbot-thread-background-hover);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.thread-item--active {
|
|
303
|
+
background-color: var(--nuraly-color-chatbot-thread-background-active);
|
|
304
|
+
color: var(--nuraly-color-chatbot-thread-text-active);
|
|
305
|
+
border-color: var(--nuraly-color-chatbot-accent);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
.thread-item--active:hover {
|
|
309
|
+
background-color: var(--nuraly-color-chatbot-thread-background-active-hover, var(--nuraly-color-chatbot-thread-background-active));
|
|
310
|
+
opacity: 0.95;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.thread-item__header {
|
|
314
|
+
display: flex;
|
|
315
|
+
align-items: center;
|
|
316
|
+
gap: 4px;
|
|
317
|
+
margin-bottom: var(--nuraly-spacing-chatbot-suggestions-gap);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
.thread-item__title {
|
|
321
|
+
font-weight: var(--nuraly-font-weight-medium, 500);
|
|
322
|
+
font-size: var(--nuraly-font-size-chatbot-thread-title, 14px);
|
|
323
|
+
white-space: nowrap;
|
|
324
|
+
overflow: hidden;
|
|
325
|
+
text-overflow: ellipsis;
|
|
326
|
+
line-height: 1.4;
|
|
327
|
+
flex: 1;
|
|
328
|
+
min-width: 0;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.thread-item__actions {
|
|
332
|
+
display: none;
|
|
333
|
+
align-items: center;
|
|
334
|
+
gap: 2px;
|
|
335
|
+
flex-shrink: 0;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.thread-item:hover .thread-item__actions {
|
|
339
|
+
display: flex;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
.thread-item__action-btn {
|
|
343
|
+
display: flex;
|
|
344
|
+
align-items: center;
|
|
345
|
+
justify-content: center;
|
|
346
|
+
padding: 4px;
|
|
347
|
+
margin: 0;
|
|
348
|
+
background: none;
|
|
349
|
+
border: none;
|
|
350
|
+
border-radius: var(--nuraly-border-radius-chatbot, 4px);
|
|
351
|
+
color: rgba(128, 128, 128, 0.6);
|
|
352
|
+
cursor: pointer;
|
|
353
|
+
flex-shrink: 0;
|
|
354
|
+
line-height: 0;
|
|
355
|
+
transition: color var(--nuraly-transition-chatbot-fast), background-color var(--nuraly-transition-chatbot-fast);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
.thread-item__action-btn svg {
|
|
359
|
+
display: block;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
.thread-item__action-btn:hover {
|
|
363
|
+
color: var(--nuraly-color-chatbot-accent, #3b82f6);
|
|
364
|
+
background-color: rgba(59, 130, 246, 0.1);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
.thread-item__actions nr-popconfirm {
|
|
368
|
+
margin-top: 4px;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
.thread-item__delete:hover {
|
|
372
|
+
color: var(--nuraly-color-chatbot-error, #ef4444);
|
|
373
|
+
background-color: rgba(239, 68, 68, 0.1);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
.thread-item--active .thread-item__action-btn {
|
|
377
|
+
color: rgba(255, 255, 255, 0.55);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.thread-item--active .thread-item__action-btn:hover {
|
|
381
|
+
color: var(--nuraly-color-chatbot-accent, #3b82f6);
|
|
382
|
+
background-color: rgba(59, 130, 246, 0.15);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
.thread-item--active .thread-item__delete:hover {
|
|
386
|
+
color: var(--nuraly-color-chatbot-error, #ef4444);
|
|
387
|
+
background-color: rgba(239, 68, 68, 0.15);
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
.thread-item__bookmark--active {
|
|
391
|
+
color: var(--nuraly-color-chatbot-bookmark, #f59e0b) !important;
|
|
392
|
+
display: flex !important;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
.thread-item__bookmark--active:hover {
|
|
396
|
+
color: var(--nuraly-color-chatbot-bookmark-hover, #d97706) !important;
|
|
397
|
+
background-color: rgba(245, 158, 11, 0.1);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
.thread-item--active .thread-item__bookmark--active {
|
|
401
|
+
color: var(--nuraly-color-chatbot-bookmark, #f59e0b) !important;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
.thread-item__rename-input {
|
|
405
|
+
flex: 1;
|
|
406
|
+
min-width: 0;
|
|
407
|
+
padding: 2px 6px;
|
|
408
|
+
font-size: var(--nuraly-font-size-chatbot-thread-title, 14px);
|
|
409
|
+
font-weight: var(--nuraly-font-weight-medium, 500);
|
|
410
|
+
font-family: inherit;
|
|
411
|
+
color: inherit;
|
|
412
|
+
background: rgba(0, 0, 0, 0.2);
|
|
413
|
+
border: 1px solid var(--nuraly-color-chatbot-accent, #3b82f6);
|
|
414
|
+
border-radius: var(--nuraly-border-radius-chatbot, 4px);
|
|
415
|
+
outline: none;
|
|
416
|
+
line-height: 1.4;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
.thread-item--active .thread-item__rename-input {
|
|
420
|
+
background: rgba(255, 255, 255, 0.1);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
.thread-item__preview {
|
|
424
|
+
font-size: var(--nuraly-font-size-chatbot-thread-preview, 13px);
|
|
425
|
+
color: rgba(128, 128, 128, 0.7);
|
|
426
|
+
white-space: nowrap;
|
|
427
|
+
overflow: hidden;
|
|
428
|
+
text-overflow: ellipsis;
|
|
429
|
+
margin-bottom: var(--nuraly-spacing-chatbot-suggestions-gap);
|
|
430
|
+
line-height: 1.5;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
.thread-item--active .thread-item__preview {
|
|
434
|
+
color: rgba(255, 255, 255, 0.65);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
.thread-item__timestamp {
|
|
438
|
+
font-size: var(--nuraly-font-size-chatbot-timestamp);
|
|
439
|
+
color: rgba(128, 128, 128, 0.6);
|
|
440
|
+
line-height: 1.4;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
.thread-item--active .thread-item__timestamp {
|
|
444
|
+
color: rgba(255, 255, 255, 0.55);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
.chat-box {
|
|
448
|
+
display: flex;
|
|
449
|
+
flex-direction: column;
|
|
450
|
+
flex: 1;
|
|
451
|
+
height: 100%;
|
|
452
|
+
overflow: hidden;
|
|
453
|
+
position: relative;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
.messages {
|
|
457
|
+
flex: 1;
|
|
458
|
+
overflow-y: auto;
|
|
459
|
+
display: flex;
|
|
460
|
+
flex-direction: column;
|
|
461
|
+
gap: 0;
|
|
462
|
+
background-color: var(--nuraly-color-chatbot-background, #ffffff);
|
|
463
|
+
padding: var(--nuraly-spacing-chatbot-message-padding, 8px 12px);
|
|
464
|
+
justify-content: flex-start; /* Always align messages to top */
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
.empty-state {
|
|
468
|
+
display: flex;
|
|
469
|
+
flex-direction: column;
|
|
470
|
+
align-items: center;
|
|
471
|
+
justify-content: center;
|
|
472
|
+
flex: 1; /* Take full height when empty */
|
|
473
|
+
text-align: center;
|
|
474
|
+
padding: var(--nuraly-spacing-09, 3rem) var(--nuraly-spacing-06, 1.5rem);
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
.empty-state__content {
|
|
478
|
+
color: var(--nuraly-color-chatbot-text-primary);
|
|
479
|
+
font-size: var(--nuraly-font-size-08, 2rem);
|
|
480
|
+
font-weight: var(--nuraly-font-weight-semibold, 600);
|
|
481
|
+
margin-bottom: var(--nuraly-spacing-09, 3rem);
|
|
482
|
+
letter-spacing: -0.02em;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
.message {
|
|
486
|
+
display: flex;
|
|
487
|
+
flex-direction: column;
|
|
488
|
+
max-width: var(--nuraly-size-chatbot-message-max-width);
|
|
489
|
+
word-wrap: break-word;
|
|
490
|
+
word-break: break-word;
|
|
491
|
+
margin-bottom: var(--nuraly-spacing-chatbot-message-margin);
|
|
492
|
+
position: relative;
|
|
493
|
+
min-width: 0;
|
|
494
|
+
flex-shrink: 0;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
.message.user {
|
|
498
|
+
align-self: flex-end;
|
|
499
|
+
align-items: flex-end;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
.message.bot {
|
|
503
|
+
align-self: flex-start;
|
|
504
|
+
align-items: flex-start;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
.message__content {
|
|
508
|
+
padding: var(--nuraly-spacing-chatbot-message-padding, 8px 12px);
|
|
509
|
+
border-radius: var(--nuraly-border-radius-chatbot-message, 0);
|
|
510
|
+
font-size: var(--nuraly-font-size-chatbot-message);
|
|
511
|
+
line-height: var(--nuraly-line-height-chatbot-message);
|
|
512
|
+
position: relative;
|
|
513
|
+
font-weight: var(--nuraly-font-weight-normal, 400);
|
|
514
|
+
box-shadow: var(--nuraly-shadow-chatbot-message, none);
|
|
515
|
+
box-sizing: border-box;
|
|
516
|
+
overflow-wrap: break-word;
|
|
517
|
+
white-space: normal;
|
|
518
|
+
background-color: var(--nuraly-color-chatbot-message-background, transparent);
|
|
519
|
+
color: var(--nuraly-color-chatbot-message-text, inherit);
|
|
520
|
+
border: var(--nuraly-border-width-chatbot-message, 0) solid var(--nuraly-color-chatbot-message-border, transparent);
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/* Message attachments (file tags) */
|
|
524
|
+
.message__attachments {
|
|
525
|
+
display: flex;
|
|
526
|
+
flex-wrap: wrap;
|
|
527
|
+
gap: var(--nuraly-spacing-02, 0.25rem);
|
|
528
|
+
margin-top: var(--nuraly-spacing-02, 0.25rem);
|
|
529
|
+
position: relative;
|
|
530
|
+
z-index: 1;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
.message-file-preview-dropdown {
|
|
534
|
+
display: inline-block;
|
|
535
|
+
position: relative;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
/* Ensure dropdown panel appears above everything */
|
|
539
|
+
.message-file-preview-dropdown nr-dropdown {
|
|
540
|
+
--nuraly-dropdown-z-index: 10000;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
.message__attachment-tag {
|
|
544
|
+
--nuraly-tag-font-size: var(--nuraly-font-size-01, 0.75rem);
|
|
545
|
+
--nuraly-tag-padding-x: 4px;
|
|
546
|
+
--nuraly-tag-padding-y: 0px;
|
|
547
|
+
cursor: help;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
/* Message file preview dropdown content */
|
|
551
|
+
.message-file-preview-content {
|
|
552
|
+
display: flex;
|
|
553
|
+
flex-direction: column;
|
|
554
|
+
align-items: center;
|
|
555
|
+
gap: var(--nuraly-spacing-03, 0.5rem);
|
|
556
|
+
padding: var(--nuraly-spacing-04, 0.75rem);
|
|
557
|
+
min-width: 200px;
|
|
558
|
+
max-width: 300px;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
.message-file-preview-image {
|
|
562
|
+
max-width: 100%;
|
|
563
|
+
max-height: 200px;
|
|
564
|
+
border-radius: var(--nuraly-border-radius-chatbot, 8px);
|
|
565
|
+
object-fit: contain;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
.message-file-preview-icon {
|
|
569
|
+
color: var(--nuraly-color-chatbot-text-secondary, #6c757d);
|
|
570
|
+
opacity: 0.6;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
.message-file-preview-info {
|
|
574
|
+
width: 100%;
|
|
575
|
+
text-align: center;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
.message-file-preview-name {
|
|
579
|
+
font-size: var(--nuraly-font-size-02, 0.875rem);
|
|
580
|
+
font-weight: 500;
|
|
581
|
+
color: var(--nuraly-color-chatbot-text-primary, #1f2937);
|
|
582
|
+
white-space: nowrap;
|
|
583
|
+
overflow: hidden;
|
|
584
|
+
text-overflow: ellipsis;
|
|
585
|
+
margin-bottom: var(--nuraly-spacing-02, 0.25rem);
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
.message-file-preview-details {
|
|
589
|
+
font-size: var(--nuraly-font-size-01, 0.75rem);
|
|
590
|
+
color: var(--nuraly-color-chatbot-text-secondary, #6c757d);
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
.message.user .message__content {
|
|
594
|
+
background-color: var(--nuraly-color-chatbot-message-user-background);
|
|
595
|
+
color: var(--nuraly-color-chatbot-message-user-text);
|
|
596
|
+
border-radius: var(--nuraly-border-radius-chatbot-message-user, var(--nuraly-border-radius-chatbot-message, 0));
|
|
597
|
+
border: var(--nuraly-border-width-chatbot-message-user, var(--nuraly-border-width-chatbot-message, 0)) solid var(--nuraly-color-chatbot-message-user-border, transparent);
|
|
598
|
+
box-shadow: var(--nuraly-shadow-chatbot-message-user, var(--nuraly-shadow-chatbot-message, none));
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
.message.bot .message__content {
|
|
602
|
+
background-color: var(--nuraly-color-chatbot-message-bot-background, transparent);
|
|
603
|
+
color: var(--nuraly-color-chatbot-message-bot-text, inherit);
|
|
604
|
+
border-radius: var(--nuraly-border-radius-chatbot-message-bot, var(--nuraly-border-radius-chatbot-message, 0));
|
|
605
|
+
border: var(--nuraly-border-width-chatbot-message-bot, var(--nuraly-border-width-chatbot-message, 0)) solid var(--nuraly-color-chatbot-message-bot-border, transparent);
|
|
606
|
+
box-shadow: var(--nuraly-shadow-chatbot-message-bot, var(--nuraly-shadow-chatbot-message, none));
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
.message.error .message__content {
|
|
610
|
+
background-color: var(--nuraly-color-chatbot-message-error-background, transparent);
|
|
611
|
+
color: var(--nuraly-color-chatbot-message-error-text, inherit);
|
|
612
|
+
border-radius: var(--nuraly-border-radius-chatbot-message-error, var(--nuraly-border-radius-chatbot-message, 0));
|
|
613
|
+
border: var(--nuraly-border-width-chatbot-message-error, var(--nuraly-border-width-chatbot-message, 0)) solid var(--nuraly-color-chatbot-message-error-border, transparent);
|
|
614
|
+
box-shadow: var(--nuraly-shadow-chatbot-message-error, var(--nuraly-shadow-chatbot-message, none));
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
/* Styled error message container */
|
|
618
|
+
.message__error-container {
|
|
619
|
+
display: flex;
|
|
620
|
+
flex-direction: column;
|
|
621
|
+
gap: 0.5rem;
|
|
622
|
+
border-radius: var(--nuraly-border-radius-chatbot-message, 0.75rem);
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
.message__error-title {
|
|
626
|
+
font-weight: 600;
|
|
627
|
+
font-size: 0.875rem;
|
|
628
|
+
color: var(--nuraly-color-chatbot-error-title, #c00);
|
|
629
|
+
margin: 0;
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
.message__error-description {
|
|
633
|
+
font-size: 0.875rem;
|
|
634
|
+
color: var(--nuraly-color-chatbot-error-description, #666);
|
|
635
|
+
margin: 0;
|
|
636
|
+
line-height: 1.5;
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
/* Message footer - contains timestamp and copy icon */
|
|
640
|
+
.message__footer {
|
|
641
|
+
display: flex;
|
|
642
|
+
align-items: center;
|
|
643
|
+
gap: 0.5rem;
|
|
644
|
+
margin-top: var(--nuraly-spacing-chatbot-timestamp-margin);
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
.message.user .message__footer {
|
|
648
|
+
justify-content: flex-end;
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
.message.bot .message__footer {
|
|
652
|
+
justify-content: flex-start;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
.message__timestamp {
|
|
656
|
+
font-size: var(--nuraly-font-size-chatbot-timestamp);
|
|
657
|
+
color: var(--nuraly-color-chatbot-timestamp);
|
|
658
|
+
font-weight: var(--nuraly-font-weight-normal, 400);
|
|
659
|
+
opacity: 0;
|
|
660
|
+
visibility: hidden;
|
|
661
|
+
transition: opacity var(--nuraly-transition-fast, 0.15s) ease, visibility var(--nuraly-transition-fast, 0.15s) ease;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
.message__copy {
|
|
665
|
+
display: inline-flex;
|
|
666
|
+
align-items: center;
|
|
667
|
+
justify-content: center;
|
|
668
|
+
cursor: pointer !important;
|
|
669
|
+
--nuraly-cursor-default: pointer;
|
|
670
|
+
pointer-events: auto !important;
|
|
671
|
+
opacity: 0;
|
|
672
|
+
visibility: hidden;
|
|
673
|
+
transition: opacity var(--nuraly-transition-fast, 0.15s) ease, visibility var(--nuraly-transition-fast, 0.15s) ease;
|
|
674
|
+
color: var(--nuraly-color-chatbot-timestamp);
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
.message:hover .message__copy {
|
|
678
|
+
opacity: 1;
|
|
679
|
+
visibility: visible;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
.message:hover .message__timestamp {
|
|
683
|
+
opacity: var(--nuraly-opacity-chatbot-timestamp, 1);
|
|
684
|
+
visibility: visible;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
.message__copy:hover {
|
|
688
|
+
cursor: pointer !important;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
.message__copy:focus {
|
|
692
|
+
outline: 2px solid var(--nuraly-focus-color, #0066cc);
|
|
693
|
+
outline-offset: 2px;
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
.message__retry {
|
|
697
|
+
margin-top: var(--nuraly-spacing-chatbot-suggestions-gap);
|
|
698
|
+
align-self: flex-start;
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
.message.loading .message__content {
|
|
702
|
+
display: flex;
|
|
703
|
+
align-items: center;
|
|
704
|
+
gap: var(--chatbot-spacing-sm);
|
|
705
|
+
background-color: var(--nuraly-color-chatbot-message-bot-background, transparent);
|
|
706
|
+
/* Set indicator color (affects spinner currentColor) */
|
|
707
|
+
color: var(--chatbot-loading-indicator-color, var(--nuraly-color-chatbot-accent, var(--chatbot-text-secondary)));
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
.dots {
|
|
711
|
+
display: flex;
|
|
712
|
+
gap: var(--nuraly-spacing-01, 0.125rem);
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
.dots span {
|
|
716
|
+
width: var(--nuraly-spacing-03, 0.5rem);
|
|
717
|
+
height: var(--nuraly-spacing-03, 0.5rem);
|
|
718
|
+
background-color: currentColor;
|
|
719
|
+
border-radius: 50%;
|
|
720
|
+
animation: typing-dots 1.4s infinite;
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
.dots span:nth-child(2) {
|
|
724
|
+
animation-delay: 0.2s;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
.dots span:nth-child(3) {
|
|
728
|
+
animation-delay: 0.4s;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
.loading-text {
|
|
732
|
+
font-style: italic;
|
|
733
|
+
color: var(--chatbot-text-secondary);
|
|
734
|
+
font-size: var(--chatbot-font-size-sm, 0.8125rem);
|
|
735
|
+
white-space: nowrap;
|
|
736
|
+
overflow: hidden;
|
|
737
|
+
text-overflow: ellipsis;
|
|
738
|
+
max-width: 280px;
|
|
739
|
+
display: inline-flex;
|
|
740
|
+
padding-left: 0.5rem;
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
.loading-text__char {
|
|
744
|
+
display: inline-block;
|
|
745
|
+
animation: chatbot-status-wave 1.4s ease-in-out infinite;
|
|
746
|
+
opacity: 0.4;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
@keyframes chatbot-status-wave {
|
|
750
|
+
0%, 100% { opacity: 0.4; }
|
|
751
|
+
50% { opacity: 1; }
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
/* Spinner indicator (for loadingIndicator = Spinner) */
|
|
755
|
+
.spinner {
|
|
756
|
+
--_size: var(--chatbot-spinner-size, 1.25rem);
|
|
757
|
+
--_bw: var(--chatbot-spinner-border-width, 2px);
|
|
758
|
+
--_color: var(--chatbot-spinner-color, currentColor);
|
|
759
|
+
--_speed: var(--chatbot-spinner-speed, 0.8s);
|
|
760
|
+
|
|
761
|
+
display: inline-block;
|
|
762
|
+
width: var(--_size);
|
|
763
|
+
height: var(--_size);
|
|
764
|
+
border: var(--_bw) solid transparent;
|
|
765
|
+
border-top-color: var(--_color);
|
|
766
|
+
border-radius: 50%;
|
|
767
|
+
animation: chatbot-spin var(--_speed) linear infinite;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
@keyframes chatbot-spin {
|
|
771
|
+
to { transform: rotate(360deg); }
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
@keyframes typing-dots {
|
|
775
|
+
0%, 60%, 100% {
|
|
776
|
+
opacity: 0.3;
|
|
777
|
+
transform: scale(0.8);
|
|
778
|
+
}
|
|
779
|
+
30% {
|
|
780
|
+
opacity: 1;
|
|
781
|
+
transform: scale(1);
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
/* Suggestions - styled pills */
|
|
786
|
+
.suggestion-container {
|
|
787
|
+
display: flex;
|
|
788
|
+
flex-wrap: wrap;
|
|
789
|
+
gap: var(--nuraly-spacing-chatbot-suggestion-gap);
|
|
790
|
+
margin-top: var(--nuraly-spacing-chatbot-suggestion-container-margin-top);
|
|
791
|
+
max-width: 100%;
|
|
792
|
+
margin-left: auto;
|
|
793
|
+
margin-right: auto;
|
|
794
|
+
justify-content: center;
|
|
795
|
+
padding: 0 var(--nuraly-spacing-chatbot-container-padding);
|
|
796
|
+
overflow: hidden;
|
|
797
|
+
box-sizing: border-box;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
.suggestion {
|
|
801
|
+
display: inline-flex;
|
|
802
|
+
align-items: center;
|
|
803
|
+
justify-content: center;
|
|
804
|
+
padding: var(--nuraly-spacing-chatbot-suggestion-padding, 6px 12px);
|
|
805
|
+
background-color: var(--nuraly-color-chatbot-suggestion-background);
|
|
806
|
+
color: var(--nuraly-color-chatbot-suggestion-text);
|
|
807
|
+
border: var(--nuraly-border-width-chatbot-message, 1px) solid var(--nuraly-color-chatbot-suggestion-border);
|
|
808
|
+
border-radius: var(--nuraly-border-radius-chatbot-suggestion, 16px);
|
|
809
|
+
font-size: var(--nuraly-typography-chatbot-suggestion-font-size, 13px);
|
|
810
|
+
font-weight: var(--nuraly-typography-chatbot-suggestion-font-weight);
|
|
811
|
+
line-height: var(--nuraly-typography-chatbot-suggestion-line-height, 1.3);
|
|
812
|
+
cursor: pointer;
|
|
813
|
+
transition: all var(--nuraly-animation-chatbot-transition-duration) var(--nuraly-animation-chatbot-transition-timing);
|
|
814
|
+
user-select: none;
|
|
815
|
+
white-space: normal;
|
|
816
|
+
word-break: break-word;
|
|
817
|
+
text-decoration: none;
|
|
818
|
+
outline: none;
|
|
819
|
+
max-width: 100%;
|
|
820
|
+
text-align: center;
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
.suggestion:hover {
|
|
824
|
+
background-color: var(--nuraly-color-chatbot-suggestion-background-hover);
|
|
825
|
+
border-color: var(--nuraly-color-chatbot-suggestion-border-hover);
|
|
826
|
+
transform: translateY(-1px);
|
|
827
|
+
box-shadow: var(--nuraly-shadow-chatbot-suggestion-hover);
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
.suggestion:focus {
|
|
831
|
+
outline: none;
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
.suggestion:active {
|
|
835
|
+
transform: translateY(0);
|
|
836
|
+
background-color: var(--nuraly-color-chatbot-suggestion-background-active);
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
.suggestion--disabled {
|
|
840
|
+
opacity: 0.5;
|
|
841
|
+
cursor: not-allowed;
|
|
842
|
+
pointer-events: none;
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
/* Input-only mode styles - suggestions float above the container */
|
|
846
|
+
.chat-container:has(.input-only-suggestions) {
|
|
847
|
+
position: relative;
|
|
848
|
+
overflow: visible;
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
.chatbot-container:has(.input-only-suggestions) {
|
|
852
|
+
overflow: visible;
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
.chatbot-main:has(.input-only-suggestions) {
|
|
856
|
+
overflow: visible;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
.input-only-suggestions {
|
|
860
|
+
position: absolute;
|
|
861
|
+
bottom: calc(100% + var(--nuraly-spacing-03, 0.5rem));
|
|
862
|
+
left: 0;
|
|
863
|
+
right: 0;
|
|
864
|
+
display: flex;
|
|
865
|
+
justify-content: center;
|
|
866
|
+
pointer-events: none;
|
|
867
|
+
z-index: 10;
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
.input-only-suggestions .suggestion-container {
|
|
871
|
+
display: flex;
|
|
872
|
+
flex-direction: row;
|
|
873
|
+
flex-wrap: wrap;
|
|
874
|
+
justify-content: center;
|
|
875
|
+
gap: var(--nuraly-spacing-02, 0.25rem);
|
|
876
|
+
margin: 0;
|
|
877
|
+
padding: 0;
|
|
878
|
+
pointer-events: auto;
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
.file-upload-area {
|
|
882
|
+
display: none;
|
|
883
|
+
position: absolute;
|
|
884
|
+
top: 0;
|
|
885
|
+
left: 0;
|
|
886
|
+
right: 0;
|
|
887
|
+
bottom: 0;
|
|
888
|
+
background-color: rgba(255, 255, 255, 0.95);
|
|
889
|
+
border: var(--nuraly-spacing-02, 0.25rem) dashed var(--chatbot-user-message-bg);
|
|
890
|
+
border-radius: var(--chatbot-radius);
|
|
891
|
+
z-index: 10;
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
.file-upload-area--visible {
|
|
895
|
+
display: flex;
|
|
896
|
+
align-items: center;
|
|
897
|
+
justify-content: center;
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
.file-upload-area--drag-over {
|
|
901
|
+
background-color: rgba(15, 98, 254, 0.1);
|
|
902
|
+
border-color: var(--chatbot-user-message-bg);
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
.file-upload-area__content {
|
|
906
|
+
text-align: center;
|
|
907
|
+
padding: var(--chatbot-spacing-xl);
|
|
908
|
+
color: var(--chatbot-text-primary);
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
.file-upload-area__content nr-icon {
|
|
912
|
+
color: var(--chatbot-user-message-bg);
|
|
913
|
+
margin-bottom: var(--chatbot-spacing-md);
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
.file-upload-area__help {
|
|
917
|
+
font-size: var(--nuraly-font-size-01, 0.75rem);
|
|
918
|
+
color: var(--chatbot-text-secondary);
|
|
919
|
+
margin: var(--chatbot-spacing-xs) 0;
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
.uploaded-files {
|
|
923
|
+
display: flex;
|
|
924
|
+
flex-wrap: wrap;
|
|
925
|
+
gap: var(--chatbot-spacing-sm);
|
|
926
|
+
padding: var(--chatbot-spacing-sm);
|
|
927
|
+
background-color: var(--chatbot-surface);
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
.uploaded-file {
|
|
931
|
+
display: flex;
|
|
932
|
+
align-items: center;
|
|
933
|
+
gap: var(--chatbot-spacing-sm);
|
|
934
|
+
padding: var(--chatbot-spacing-sm);
|
|
935
|
+
background-color: var(--chatbot-background);
|
|
936
|
+
border: var(--nuraly-border-width-chatbot-message, 1px) solid var(--chatbot-border);
|
|
937
|
+
border-radius: var(--chatbot-radius);
|
|
938
|
+
max-width: var(--nuraly-spacing-chatbot-file-upload-preview-size, 200px);
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
.uploaded-file__preview {
|
|
942
|
+
width: var(--nuraly-size-chatbot-send-button-width, 32px);
|
|
943
|
+
height: var(--nuraly-size-chatbot-send-button-height, 32px);
|
|
944
|
+
object-fit: cover;
|
|
945
|
+
border-radius: var(--chatbot-spacing-xs);
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
.uploaded-file__icon {
|
|
949
|
+
color: var(--chatbot-text-secondary);
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
.uploaded-file__info {
|
|
953
|
+
flex: 1;
|
|
954
|
+
min-width: 0;
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
.uploaded-file__name {
|
|
958
|
+
font-size: var(--nuraly-font-size-01, 0.75rem);
|
|
959
|
+
font-weight: 500;
|
|
960
|
+
color: var(--chatbot-text-primary);
|
|
961
|
+
white-space: nowrap;
|
|
962
|
+
overflow: hidden;
|
|
963
|
+
text-overflow: ellipsis;
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
.uploaded-file__size {
|
|
967
|
+
font-size: var(--nuraly-font-size-chatbot-file-size, 11px);
|
|
968
|
+
color: var(--chatbot-text-secondary);
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
.uploaded-file__progress {
|
|
972
|
+
height: var(--nuraly-spacing-01, 0.125rem);
|
|
973
|
+
background-color: var(--chatbot-border);
|
|
974
|
+
border-radius: var(--nuraly-spacing-01, 0.125rem);
|
|
975
|
+
overflow: hidden;
|
|
976
|
+
margin-top: var(--chatbot-spacing-xs);
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
.uploaded-file__progress-bar {
|
|
980
|
+
height: 100%;
|
|
981
|
+
background-color: var(--chatbot-user-message-bg);
|
|
982
|
+
transition: width 0.3s ease;
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
.uploaded-file__error {
|
|
986
|
+
font-size: var(--nuraly-font-size-chatbot-file-size, 11px);
|
|
987
|
+
color: var(--chatbot-error-text);
|
|
988
|
+
margin-top: var(--chatbot-spacing-xs);
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
.uploaded-file__remove {
|
|
992
|
+
color: var(--chatbot-text-helper);
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
|
|
996
|
+
|
|
997
|
+
.input-container {
|
|
998
|
+
background-color: var(--nuraly-color-chatbot-input-background);
|
|
999
|
+
border: var(--nuraly-border-width-chatbot-input, 1px) solid var(--nuraly-color-chatbot-input-border);
|
|
1000
|
+
border-radius: var(--nuraly-border-radius-chatbot-input);
|
|
1001
|
+
transition: var(--nuraly-transition-chatbot-all, all 0.2s ease);
|
|
1002
|
+
box-shadow: var(--nuraly-shadow-chatbot-input, 0 2px 8px rgba(0, 0, 0, 0.1));
|
|
1003
|
+
overflow: visible;
|
|
1004
|
+
position: relative;
|
|
1005
|
+
min-width: var(--nuraly-size-chatbot-input-min-width, 280px);
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
.context-tags-row {
|
|
1009
|
+
display: flex;
|
|
1010
|
+
flex-wrap: wrap;
|
|
1011
|
+
gap: var(--nuraly-spacing-03, 0.5rem);
|
|
1012
|
+
padding: var(--nuraly-spacing-04, 0.75rem) var(--nuraly-spacing-05, 1rem) 0 var(--nuraly-spacing-05, 1rem);
|
|
1013
|
+
position: relative;
|
|
1014
|
+
z-index: 2;
|
|
1015
|
+
}
|
|
1016
|
+
|
|
1017
|
+
.file-preview-dropdown {
|
|
1018
|
+
display: inline-block;
|
|
1019
|
+
position: relative;
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
|
|
1023
|
+
.context-tag {
|
|
1024
|
+
--nuraly-tag-font-size: var(--nuraly-font-size-01, 0.75rem);
|
|
1025
|
+
--nuraly-tag-padding-x: var(--nuraly-spacing-03, 0.5rem);
|
|
1026
|
+
--nuraly-tag-padding-y: 0;
|
|
1027
|
+
cursor: help;
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
/* File preview dropdown content */
|
|
1031
|
+
.file-preview-content {
|
|
1032
|
+
display: flex;
|
|
1033
|
+
flex-direction: column;
|
|
1034
|
+
align-items: center;
|
|
1035
|
+
gap: var(--nuraly-spacing-03, 0.5rem);
|
|
1036
|
+
padding: var(--nuraly-spacing-04, 0.75rem);
|
|
1037
|
+
min-width: 200px;
|
|
1038
|
+
max-width: 300px;
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
.file-preview-image {
|
|
1042
|
+
max-width: 100%;
|
|
1043
|
+
max-height: 200px;
|
|
1044
|
+
border-radius: var(--nuraly-border-radius-chatbot, 8px);
|
|
1045
|
+
object-fit: contain;
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
.file-preview-icon {
|
|
1049
|
+
color: var(--nuraly-color-chatbot-text-secondary, #6c757d);
|
|
1050
|
+
opacity: 0.6;
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
.file-preview-info {
|
|
1054
|
+
width: 100%;
|
|
1055
|
+
text-align: center;
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
.file-preview-name {
|
|
1059
|
+
font-size: var(--nuraly-font-size-02, 0.875rem);
|
|
1060
|
+
font-weight: 500;
|
|
1061
|
+
color: var(--nuraly-color-chatbot-text-primary, #1f2937);
|
|
1062
|
+
white-space: nowrap;
|
|
1063
|
+
overflow: hidden;
|
|
1064
|
+
text-overflow: ellipsis;
|
|
1065
|
+
margin-bottom: var(--nuraly-spacing-02, 0.25rem);
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
.file-preview-details {
|
|
1069
|
+
font-size: var(--nuraly-font-size-01, 0.75rem);
|
|
1070
|
+
color: var(--nuraly-color-chatbot-text-secondary, #6c757d);
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
.input-container:focus-within {
|
|
1074
|
+
border-color: var(--nuraly-color-chatbot-input-border-focus);
|
|
1075
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
.input-row {
|
|
1079
|
+
display: flex;
|
|
1080
|
+
align-items: flex-start;
|
|
1081
|
+
padding: var(--nuraly-spacing-05, 1rem) var(--nuraly-spacing-05, 1rem) var(--nuraly-spacing-03, 0.5rem) var(--nuraly-spacing-05, 1rem);
|
|
1082
|
+
min-height: var(--nuraly-spacing-06, 1.5rem);
|
|
1083
|
+
}
|
|
1084
|
+
|
|
1085
|
+
.chat-container--boxed .input-box {
|
|
1086
|
+
background-color: transparent;
|
|
1087
|
+
padding: var(--nuraly-spacing-chatbot-boxed-content-padding) 0;
|
|
1088
|
+
width: 100%;
|
|
1089
|
+
box-sizing: border-box;
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1092
|
+
.chat-container--boxed .input-container {
|
|
1093
|
+
width: 100%;
|
|
1094
|
+
max-width: var(--nuraly-size-chatbot-boxed-content-max-width, 768px);
|
|
1095
|
+
margin-left: auto;
|
|
1096
|
+
margin-right: auto;
|
|
1097
|
+
box-sizing: border-box;
|
|
1098
|
+
padding-left: var(--nuraly-spacing-05, 1rem);
|
|
1099
|
+
padding-right: var(--nuraly-spacing-05, 1rem);
|
|
1100
|
+
}
|
|
1101
|
+
|
|
1102
|
+
.chat-container--boxed .messages {
|
|
1103
|
+
max-width: var(--nuraly-size-chatbot-boxed-content-max-width);
|
|
1104
|
+
margin-left: auto;
|
|
1105
|
+
margin-right: auto;
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
:host(:not([boxed])) .input-container {
|
|
1109
|
+
border-radius: var(--nuraly-border-radius-md, 12px);
|
|
1110
|
+
margin: var(--nuraly-spacing-05, 1rem);
|
|
1111
|
+
box-sizing: border-box;
|
|
1112
|
+
width: calc(100% - 2 * var(--nuraly-spacing-05, 1rem));
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
:host(:not([boxed])) .action-buttons-row {
|
|
1116
|
+
border-bottom-left-radius: var(--nuraly-border-radius-md, 12px);
|
|
1117
|
+
border-bottom-right-radius: var(--nuraly-border-radius-md, 12px);
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
:host(:not([boxed])) .messages {
|
|
1121
|
+
padding: var(--nuraly-spacing-05, 1rem) !important;
|
|
1122
|
+
width: 100%;
|
|
1123
|
+
box-sizing: border-box;
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1126
|
+
.action-buttons-row {
|
|
1127
|
+
display: flex;
|
|
1128
|
+
align-items: center;
|
|
1129
|
+
justify-content: space-between;
|
|
1130
|
+
gap: var(--nuraly-spacing-04, 0.75rem);
|
|
1131
|
+
padding: var(--nuraly-spacing-03, 0.5rem) var(--nuraly-spacing-05, 1rem) var(--nuraly-spacing-05, 1rem) var(--nuraly-spacing-05, 1rem);
|
|
1132
|
+
background-color: transparent;
|
|
1133
|
+
border-bottom-left-radius: var(--nuraly-border-radius-chatbot-input);
|
|
1134
|
+
border-bottom-right-radius: var(--nuraly-border-radius-chatbot-input);
|
|
1135
|
+
min-width: var(--nuraly-size-chatbot-actions-min-width, 240px);
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
.action-buttons-left {
|
|
1139
|
+
display: flex;
|
|
1140
|
+
align-items: center;
|
|
1141
|
+
gap: var(--nuraly-spacing-03, 0.5rem);
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
.action-buttons-right {
|
|
1145
|
+
display: flex;
|
|
1146
|
+
align-items: center;
|
|
1147
|
+
gap: var(--nuraly-spacing-03, 0.5rem);
|
|
1148
|
+
min-width: calc(var(--nuraly-size-md, 40px) + var(--nuraly-spacing-03, 0.5rem));
|
|
1149
|
+
justify-content: flex-end;
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
.action-buttons-row nr-dropdown {
|
|
1153
|
+
display: inline-flex;
|
|
1154
|
+
align-items: center;
|
|
1155
|
+
--nuraly-size-md: 40px; /* Match select height */
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
/* Module select styling */
|
|
1159
|
+
.module-select {
|
|
1160
|
+
max-width: var(--nuraly-size-chatbot-module-select-max-width, 300px);
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1163
|
+
/* Ensure buttons in action row match select height */
|
|
1164
|
+
.action-buttons-row nr-button {
|
|
1165
|
+
--nuraly-size-md: 40px; /* Match select height */
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
.module-display-placeholder {
|
|
1169
|
+
color: var(--nuraly-color-chatbot-text-secondary, #6f6f6f);
|
|
1170
|
+
font-size: var(--nuraly-font-size-02, 0.875rem); /* 14px */
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
.module-display-single,
|
|
1174
|
+
.module-display-multiple {
|
|
1175
|
+
display: flex;
|
|
1176
|
+
align-items: center;
|
|
1177
|
+
gap: var(--nuraly-spacing-03, 0.5rem); /* 6px */
|
|
1178
|
+
font-size: var(--nuraly-font-size-02, 0.875rem); /* 14px */
|
|
1179
|
+
color: var(--nuraly-color-chatbot-text, inherit);
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
.module-display-single nr-icon {
|
|
1183
|
+
font-size: var(--nuraly-font-size-03, 1rem); /* 16px */
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
.module-display-multiple {
|
|
1187
|
+
font-weight: 500;
|
|
1188
|
+
color: var(--nuraly-color-chatbot-accent, var(--nuraly-color-primary));
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
/* Dropdown styling inside chatbot */
|
|
1192
|
+
.input-box__upload-dropdown {
|
|
1193
|
+
position: relative;
|
|
1194
|
+
z-index: var(--nuraly-z-index-chatbot-dropdown, 100);
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
.input-box__upload-dropdown ::part(panel) {
|
|
1198
|
+
background-color: var(--nuraly-color-chatbot-dropdown-panel-background);
|
|
1199
|
+
border: var(--nuraly-border-width-chatbot-message, 1px) solid var(--nuraly-color-chatbot-dropdown-panel-border);
|
|
1200
|
+
border-radius: var(--nuraly-border-radius-chatbot-dropdown-panel);
|
|
1201
|
+
box-shadow: var(--nuraly-shadow-chatbot-dropdown-panel);
|
|
1202
|
+
min-width: var(--nuraly-size-chatbot-dropdown-panel-min-width);
|
|
1203
|
+
position: fixed !important; /* Use fixed positioning to break out of containers */
|
|
1204
|
+
z-index: var(--nuraly-z-index-chatbot-dropdown, 100);
|
|
1205
|
+
transform: none !important;
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1208
|
+
.input-box__input {
|
|
1209
|
+
flex: 1;
|
|
1210
|
+
width: 100%;
|
|
1211
|
+
min-height: var(--nuraly-spacing-06, 1.5rem); /* 24px */
|
|
1212
|
+
max-height: var(--nuraly-size-chatbot-input-max-height, 120px);
|
|
1213
|
+
overflow-y: auto;
|
|
1214
|
+
padding: 0;
|
|
1215
|
+
border: none;
|
|
1216
|
+
outline: none;
|
|
1217
|
+
background: transparent;
|
|
1218
|
+
color: var(--nuraly-color-chatbot-input-text);
|
|
1219
|
+
font-family: var(--nuraly-font-family-chatbot-input);
|
|
1220
|
+
font-size: var(--nuraly-font-size-chatbot-input);
|
|
1221
|
+
line-height: 1.4;
|
|
1222
|
+
resize: none;
|
|
1223
|
+
white-space: pre-wrap;
|
|
1224
|
+
word-wrap: break-word;
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
.input-box__input:empty::before {
|
|
1228
|
+
content: attr(data-placeholder);
|
|
1229
|
+
color: var(--nuraly-color-chatbot-input-placeholder);
|
|
1230
|
+
pointer-events: none;
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1233
|
+
.input-box__input:focus {
|
|
1234
|
+
outline: none;
|
|
1235
|
+
}
|
|
1236
|
+
|
|
1237
|
+
/* Styled action buttons using nr-button with CSS variable overrides */
|
|
1238
|
+
.input-box__file-button,
|
|
1239
|
+
.input-box__send-button {
|
|
1240
|
+
/* Remove any default margins */
|
|
1241
|
+
margin: 0;
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
/* Target the actual button element inside nr-button components */
|
|
1245
|
+
.input-box__file-button button,
|
|
1246
|
+
.input-box__send-button button {
|
|
1247
|
+
background: transparent !important;
|
|
1248
|
+
border: var(--nuraly-border-width-chatbot-message, 1px) solid var(--nuraly-color-chatbot-action-button-border) !important;
|
|
1249
|
+
color: var(--nuraly-color-chatbot-action-button-text) !important;
|
|
1250
|
+
padding: var(--nuraly-spacing-chatbot-action-button-padding, var(--nuraly-spacing-03, 0.5rem) var(--nuraly-spacing-04, 0.75rem)) !important; /* 8px 12px */
|
|
1251
|
+
border-radius: var(--nuraly-border-radius-chatbot-action-button) !important;
|
|
1252
|
+
font-size: var(--nuraly-font-size-02, 0.875rem) !important; /* 14px */
|
|
1253
|
+
font-weight: 500 !important;
|
|
1254
|
+
min-width: auto !important;
|
|
1255
|
+
height: auto !important;
|
|
1256
|
+
gap: var(--nuraly-spacing-03, 0.5rem) !important; /* 8px */
|
|
1257
|
+
transition: var(--nuraly-transition-chatbot-all, all 0.2s ease) !important;
|
|
1258
|
+
white-space: nowrap !important;
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
/* Send button specific styling for more rounded appearance */
|
|
1262
|
+
.input-box__send-button button {
|
|
1263
|
+
border-radius: var(--nuraly-border-radius-chatbot-send-button) !important;
|
|
1264
|
+
background-color: var(--nuraly-color-chatbot-send-button-background) !important;
|
|
1265
|
+
color: var(--nuraly-color-chatbot-send-button-text) !important;
|
|
1266
|
+
border-color: var(--nuraly-color-chatbot-send-button-border) !important;
|
|
1267
|
+
width: var(--nuraly-size-md, 40px) !important; /* Match other button widths */
|
|
1268
|
+
height: var(--nuraly-size-md, 40px) !important; /* Match other button heights */
|
|
1269
|
+
min-width: var(--nuraly-size-md, 40px) !important; /* Prevent shrinking */
|
|
1270
|
+
}
|
|
1271
|
+
|
|
1272
|
+
.input-box__file-button:hover button,
|
|
1273
|
+
.input-box__send-button:hover button {
|
|
1274
|
+
background-color: var(--nuraly-color-chatbot-action-button-background-hover) !important;
|
|
1275
|
+
border-color: var(--nuraly-color-chatbot-action-button-border-hover) !important;
|
|
1276
|
+
transform: scale(1.05);
|
|
1277
|
+
}
|
|
1278
|
+
|
|
1279
|
+
/* Send button hover specific styling */
|
|
1280
|
+
.input-box__send-button:hover button {
|
|
1281
|
+
background-color: var(--nuraly-color-chatbot-send-button-background-hover) !important;
|
|
1282
|
+
border-color: var(--nuraly-color-chatbot-send-button-border-hover) !important;
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1285
|
+
.input-box__file-button:focus-within,
|
|
1286
|
+
.input-box__send-button:focus-within {
|
|
1287
|
+
outline: var(--nuraly-spacing-02, 0.25rem) solid var(--nuraly-color-chatbot-action-button-focus); /* 2px */
|
|
1288
|
+
outline-offset: var(--nuraly-spacing-02, 0.25rem); /* 2px */
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
.input-box__send-button[disabled] button,
|
|
1292
|
+
.input-box__file-button[disabled] button {
|
|
1293
|
+
background-color: var(--nuraly-color-chatbot-action-button-background-disabled) !important;
|
|
1294
|
+
color: var(--nuraly-color-chatbot-action-button-text-disabled) !important;
|
|
1295
|
+
border-color: var(--nuraly-color-chatbot-action-button-border-disabled) !important;
|
|
1296
|
+
opacity: 0.6 !important;
|
|
1297
|
+
cursor: not-allowed !important;
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1300
|
+
/* Ensure icons are properly styled within the buttons */
|
|
1301
|
+
.input-box__send-button nr-icon,
|
|
1302
|
+
.input-box__file-button nr-icon {
|
|
1303
|
+
pointer-events: none;
|
|
1304
|
+
}
|
|
1305
|
+
|
|
1306
|
+
/* RTL support */
|
|
1307
|
+
:host([dir='rtl']) .chat-container--with-threads {
|
|
1308
|
+
grid-template-columns: 1fr 280px;
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
:host([dir='rtl']) .thread-sidebar {
|
|
1312
|
+
border-right: none;
|
|
1313
|
+
border-left: var(--nuraly-border-width-chatbot-message, 1px) solid var(--chatbot-border);
|
|
1314
|
+
}
|
|
1315
|
+
|
|
1316
|
+
:host([dir='rtl']) .message.user {
|
|
1317
|
+
align-self: flex-start;
|
|
1318
|
+
}
|
|
1319
|
+
|
|
1320
|
+
:host([dir='rtl']) .message.bot {
|
|
1321
|
+
align-self: flex-end;
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1324
|
+
:host([dir='rtl']) .message.user .message__content {
|
|
1325
|
+
border-radius: var(--nuraly-border-radius-chatbot-message-user-rtl, var(--nuraly-border-radius-chatbot-message-user, var(--nuraly-border-radius-chatbot-message, 0)));
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
:host([dir='rtl']) .message.bot .message__content {
|
|
1329
|
+
border-radius: var(--nuraly-border-radius-chatbot-message-bot-rtl, var(--nuraly-border-radius-chatbot-message-bot, var(--nuraly-border-radius-chatbot-message, 0)));
|
|
1330
|
+
}
|
|
1331
|
+
|
|
1332
|
+
:host([dir='rtl']) .message.user .message__timestamp {
|
|
1333
|
+
text-align: left;
|
|
1334
|
+
}
|
|
1335
|
+
|
|
1336
|
+
:host([dir='rtl']) .message.bot .message__timestamp {
|
|
1337
|
+
text-align: right;
|
|
1338
|
+
}
|
|
1339
|
+
|
|
1340
|
+
:host([dir='rtl']) .input-row {
|
|
1341
|
+
flex-direction: row-reverse;
|
|
1342
|
+
}
|
|
1343
|
+
|
|
1344
|
+
/* Size variants */
|
|
1345
|
+
:host([data-size='small']) {
|
|
1346
|
+
--chatbot-spacing-md: var(--nuraly-spacing-04, 0.75rem); /* 12px */
|
|
1347
|
+
font-size: var(--nuraly-font-size-chatbot-small, 13px);
|
|
1348
|
+
}
|
|
1349
|
+
|
|
1350
|
+
:host([data-size='large']) {
|
|
1351
|
+
--chatbot-spacing-md: var(--nuraly-spacing-chatbot-large, 20px);
|
|
1352
|
+
font-size: var(--nuraly-font-size-chatbot-message, 15px);
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
/* Variant styles */
|
|
1356
|
+
:host([data-variant='rounded']) {
|
|
1357
|
+
--chatbot-radius: 16px;
|
|
1358
|
+
}
|
|
1359
|
+
|
|
1360
|
+
:host([data-variant='squared']) {
|
|
1361
|
+
--chatbot-radius: 4px;
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1364
|
+
/* Mode-specific styles */
|
|
1365
|
+
:host([data-mode='assistant']) .message.bot .message__content {
|
|
1366
|
+
background: linear-gradient(135deg, var(--nuraly-color-chatbot-message-bot-background, transparent), var(--nuraly-color-chatbot-surface-hover, #f1f1f1));
|
|
1367
|
+
}
|
|
1368
|
+
|
|
1369
|
+
:host([data-mode='assistant']) .suggestion {
|
|
1370
|
+
background: linear-gradient(135deg, var(--chatbot-surface), var(--chatbot-surface-hover));
|
|
1371
|
+
}
|
|
1372
|
+
|
|
1373
|
+
/* Focus states */
|
|
1374
|
+
.chat-container--focused {
|
|
1375
|
+
outline: 2px solid var(--chatbot-user-message-bg);
|
|
1376
|
+
outline-offset: 2px;
|
|
1377
|
+
}
|
|
1378
|
+
|
|
1379
|
+
/* Artifact panel */
|
|
1380
|
+
.artifact-panel {
|
|
1381
|
+
width: var(--nuraly-size-chatbot-artifact-panel-width, 400px);
|
|
1382
|
+
min-width: var(--nuraly-size-chatbot-artifact-panel-min-width, 300px);
|
|
1383
|
+
flex-shrink: 0;
|
|
1384
|
+
display: flex;
|
|
1385
|
+
flex-direction: row;
|
|
1386
|
+
background-color: var(--nuraly-color-chatbot-background, #ffffff);
|
|
1387
|
+
overflow: hidden;
|
|
1388
|
+
position: relative;
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1391
|
+
.artifact-panel__resize-handle {
|
|
1392
|
+
flex-shrink: 0;
|
|
1393
|
+
width: 8px;
|
|
1394
|
+
cursor: col-resize;
|
|
1395
|
+
display: flex;
|
|
1396
|
+
align-items: center;
|
|
1397
|
+
justify-content: center;
|
|
1398
|
+
background: var(--nuraly-color-chatbot-border, #e0e0e0);
|
|
1399
|
+
transition: background 0.15s;
|
|
1400
|
+
z-index: 1;
|
|
1401
|
+
}
|
|
1402
|
+
.artifact-panel__resize-handle:hover,
|
|
1403
|
+
.artifact-panel__resize-handle--active {
|
|
1404
|
+
background: var(--nuraly-color-chatbot-text-secondary, #9ca3af);
|
|
1405
|
+
}
|
|
1406
|
+
.artifact-panel__resize-bar {
|
|
1407
|
+
width: 2px;
|
|
1408
|
+
height: 24px;
|
|
1409
|
+
border-radius: 1px;
|
|
1410
|
+
background: var(--nuraly-color-chatbot-text-secondary, #9ca3af);
|
|
1411
|
+
transition: background 0.15s;
|
|
1412
|
+
}
|
|
1413
|
+
.artifact-panel__resize-handle:hover .artifact-panel__resize-bar,
|
|
1414
|
+
.artifact-panel__resize-handle--active .artifact-panel__resize-bar {
|
|
1415
|
+
background: var(--nuraly-color-chatbot-text-primary, #1f2937);
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1418
|
+
.artifact-panel__body {
|
|
1419
|
+
flex: 1;
|
|
1420
|
+
display: flex;
|
|
1421
|
+
flex-direction: column;
|
|
1422
|
+
min-width: 0;
|
|
1423
|
+
border-left: 1px solid var(--nuraly-color-chatbot-border, #e0e0e0);
|
|
1424
|
+
overflow: hidden;
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1427
|
+
.artifact-panel__header {
|
|
1428
|
+
display: flex;
|
|
1429
|
+
align-items: center;
|
|
1430
|
+
justify-content: space-between;
|
|
1431
|
+
padding: 12px 16px;
|
|
1432
|
+
border-bottom: 1px solid var(--nuraly-color-chatbot-border, #e0e0e0);
|
|
1433
|
+
flex-shrink: 0;
|
|
1434
|
+
}
|
|
1435
|
+
|
|
1436
|
+
.artifact-panel__header-info {
|
|
1437
|
+
display: flex;
|
|
1438
|
+
align-items: center;
|
|
1439
|
+
gap: 8px;
|
|
1440
|
+
min-width: 0;
|
|
1441
|
+
flex: 1;
|
|
1442
|
+
}
|
|
1443
|
+
|
|
1444
|
+
.artifact-panel__lang-badge {
|
|
1445
|
+
flex-shrink: 0;
|
|
1446
|
+
--nuraly-tag-font-size: 11px;
|
|
1447
|
+
text-transform: uppercase;
|
|
1448
|
+
letter-spacing: 0.02em;
|
|
1449
|
+
}
|
|
1450
|
+
|
|
1451
|
+
.artifact-panel__title {
|
|
1452
|
+
font-size: 13px;
|
|
1453
|
+
font-weight: 500;
|
|
1454
|
+
color: var(--nuraly-color-chatbot-text-primary, #1f2937);
|
|
1455
|
+
white-space: nowrap;
|
|
1456
|
+
overflow: hidden;
|
|
1457
|
+
text-overflow: ellipsis;
|
|
1458
|
+
}
|
|
1459
|
+
|
|
1460
|
+
.artifact-panel__actions {
|
|
1461
|
+
display: flex;
|
|
1462
|
+
align-items: center;
|
|
1463
|
+
gap: 4px;
|
|
1464
|
+
flex-shrink: 0;
|
|
1465
|
+
}
|
|
1466
|
+
|
|
1467
|
+
.artifact-panel__content {
|
|
1468
|
+
flex: 1;
|
|
1469
|
+
overflow: auto;
|
|
1470
|
+
padding: 16px;
|
|
1471
|
+
}
|
|
1472
|
+
|
|
1473
|
+
.artifact-panel__code {
|
|
1474
|
+
margin: 0;
|
|
1475
|
+
padding: 16px;
|
|
1476
|
+
background: var(--nuraly-color-chatbot-artifact-code-bg, #f6f8fa);
|
|
1477
|
+
border-radius: 8px;
|
|
1478
|
+
font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
|
|
1479
|
+
font-size: 13px;
|
|
1480
|
+
line-height: 1.5;
|
|
1481
|
+
overflow: auto;
|
|
1482
|
+
white-space: pre-wrap;
|
|
1483
|
+
word-wrap: break-word;
|
|
1484
|
+
color: var(--nuraly-color-chatbot-text-primary, #1f2937);
|
|
1485
|
+
tab-size: 2;
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1488
|
+
.artifact-panel__code code {
|
|
1489
|
+
font-family: inherit;
|
|
1490
|
+
font-size: inherit;
|
|
1491
|
+
}
|
|
1492
|
+
|
|
1493
|
+
.artifact-panel__rendered-md {
|
|
1494
|
+
font-size: 14px;
|
|
1495
|
+
line-height: 1.6;
|
|
1496
|
+
color: var(--nuraly-color-chatbot-text-primary, #1f2937);
|
|
1497
|
+
}
|
|
1498
|
+
|
|
1499
|
+
.artifact-panel__rendered-md h1,
|
|
1500
|
+
.artifact-panel__rendered-md h2,
|
|
1501
|
+
.artifact-panel__rendered-md h3 {
|
|
1502
|
+
margin: 0.6em 0 0.4em;
|
|
1503
|
+
font-weight: 600;
|
|
1504
|
+
}
|
|
1505
|
+
|
|
1506
|
+
.artifact-panel__rendered-md p {
|
|
1507
|
+
margin: 0.5em 0;
|
|
1508
|
+
}
|
|
1509
|
+
|
|
1510
|
+
.artifact-panel__rendered-md pre {
|
|
1511
|
+
background: var(--nuraly-color-chatbot-artifact-code-bg, #f6f8fa);
|
|
1512
|
+
padding: 12px;
|
|
1513
|
+
border-radius: 6px;
|
|
1514
|
+
overflow: auto;
|
|
1515
|
+
}
|
|
1516
|
+
|
|
1517
|
+
.artifact-panel__rendered-html {
|
|
1518
|
+
font-size: 14px;
|
|
1519
|
+
line-height: 1.6;
|
|
1520
|
+
color: var(--nuraly-color-chatbot-text-primary, #1f2937);
|
|
1521
|
+
}
|
|
1522
|
+
|
|
1523
|
+
.artifact-panel__rendered-text {
|
|
1524
|
+
font-size: 14px;
|
|
1525
|
+
line-height: 1.6;
|
|
1526
|
+
color: var(--nuraly-color-chatbot-text-primary, #1f2937);
|
|
1527
|
+
white-space: pre-wrap;
|
|
1528
|
+
word-wrap: break-word;
|
|
1529
|
+
font-family: system-ui, -apple-system, sans-serif;
|
|
1530
|
+
}
|
|
1531
|
+
|
|
1532
|
+
/* Responsive design */
|
|
1533
|
+
@media (max-width: 768px) {
|
|
1534
|
+
:host {
|
|
1535
|
+
min-width: 0;
|
|
1536
|
+
}
|
|
1537
|
+
|
|
1538
|
+
.chatbot-container {
|
|
1539
|
+
min-width: 0;
|
|
1540
|
+
}
|
|
1541
|
+
|
|
1542
|
+
.chatbot-container--with-artifact-panel {
|
|
1543
|
+
position: relative;
|
|
1544
|
+
}
|
|
1545
|
+
|
|
1546
|
+
.artifact-panel {
|
|
1547
|
+
position: absolute;
|
|
1548
|
+
top: 0;
|
|
1549
|
+
right: 0;
|
|
1550
|
+
bottom: 0;
|
|
1551
|
+
width: 100% !important;
|
|
1552
|
+
min-width: 0;
|
|
1553
|
+
z-index: 20;
|
|
1554
|
+
box-shadow: -2px 0 8px rgba(0, 0, 0, 0.15);
|
|
1555
|
+
}
|
|
1556
|
+
|
|
1557
|
+
.artifact-panel__resize-handle {
|
|
1558
|
+
display: none;
|
|
1559
|
+
}
|
|
1560
|
+
|
|
1561
|
+
.thread-sidebar {
|
|
1562
|
+
width: 200px;
|
|
1563
|
+
}
|
|
1564
|
+
|
|
1565
|
+
.input-container {
|
|
1566
|
+
min-width: 0;
|
|
1567
|
+
}
|
|
1568
|
+
|
|
1569
|
+
.action-buttons-row {
|
|
1570
|
+
min-width: 0;
|
|
1571
|
+
}
|
|
1572
|
+
|
|
1573
|
+
.message {
|
|
1574
|
+
max-width: 90%;
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
.input-row {
|
|
1578
|
+
flex-wrap: wrap;
|
|
1579
|
+
}
|
|
1580
|
+
|
|
1581
|
+
/* Boxed mode responsive fixes */
|
|
1582
|
+
:host([boxed]) .chatbot-main {
|
|
1583
|
+
max-width: 100%;
|
|
1584
|
+
}
|
|
1585
|
+
|
|
1586
|
+
:host([boxed]) .messages {
|
|
1587
|
+
width: 100%;
|
|
1588
|
+
padding: var(--nuraly-spacing-chatbot-message-padding, 8px) var(--nuraly-spacing-04, 0.75rem);
|
|
1589
|
+
}
|
|
1590
|
+
|
|
1591
|
+
.chat-container--boxed .input-container {
|
|
1592
|
+
width: 100%;
|
|
1593
|
+
padding-left: var(--nuraly-spacing-04, 0.75rem);
|
|
1594
|
+
padding-right: var(--nuraly-spacing-04, 0.75rem);
|
|
1595
|
+
}
|
|
1596
|
+
|
|
1597
|
+
.chat-container--boxed .input-box {
|
|
1598
|
+
padding: var(--nuraly-spacing-04, 0.75rem) 0;
|
|
1599
|
+
}
|
|
1600
|
+
|
|
1601
|
+
:host([boxed]) .chatbot-content:has(.empty-state) + .input-box {
|
|
1602
|
+
max-width: 100%;
|
|
1603
|
+
padding: 0 var(--nuraly-spacing-04, 0.75rem);
|
|
1604
|
+
}
|
|
1605
|
+
}
|
|
1606
|
+
|
|
1607
|
+
@media (max-width: 480px) {
|
|
1608
|
+
.chatbot-container--with-sidebar {
|
|
1609
|
+
position: relative;
|
|
1610
|
+
}
|
|
1611
|
+
|
|
1612
|
+
.thread-sidebar {
|
|
1613
|
+
position: absolute;
|
|
1614
|
+
top: 0;
|
|
1615
|
+
left: 0;
|
|
1616
|
+
bottom: 0;
|
|
1617
|
+
width: 260px;
|
|
1618
|
+
z-index: 10;
|
|
1619
|
+
box-shadow: 2px 0 8px rgba(0, 0, 0, 0.15);
|
|
1620
|
+
}
|
|
1621
|
+
|
|
1622
|
+
.message {
|
|
1623
|
+
max-width: 95%;
|
|
1624
|
+
}
|
|
1625
|
+
|
|
1626
|
+
.uploaded-file {
|
|
1627
|
+
max-width: 150px;
|
|
1628
|
+
}
|
|
1629
|
+
|
|
1630
|
+
.input-container {
|
|
1631
|
+
min-width: 0;
|
|
1632
|
+
width: 100%;
|
|
1633
|
+
}
|
|
1634
|
+
|
|
1635
|
+
/* Boxed mode mobile fixes */
|
|
1636
|
+
:host([boxed]) .messages {
|
|
1637
|
+
padding: var(--nuraly-spacing-chatbot-message-padding, 8px) var(--nuraly-spacing-03, 0.5rem);
|
|
1638
|
+
}
|
|
1639
|
+
|
|
1640
|
+
.chat-container--boxed .input-container {
|
|
1641
|
+
padding-left: var(--nuraly-spacing-03, 0.5rem);
|
|
1642
|
+
padding-right: var(--nuraly-spacing-03, 0.5rem);
|
|
1643
|
+
}
|
|
1644
|
+
|
|
1645
|
+
.chat-container--boxed .input-box {
|
|
1646
|
+
padding: var(--nuraly-spacing-03, 0.5rem) 0;
|
|
1647
|
+
}
|
|
1648
|
+
|
|
1649
|
+
:host([boxed]) .chatbot-content:has(.empty-state) + .input-box {
|
|
1650
|
+
padding: 0 var(--nuraly-spacing-03, 0.5rem);
|
|
1651
|
+
}
|
|
1652
|
+
|
|
1653
|
+
.input-row {
|
|
1654
|
+
padding: var(--nuraly-spacing-04, 0.75rem);
|
|
1655
|
+
}
|
|
1656
|
+
}
|
|
1657
|
+
|
|
1658
|
+
|
|
1659
|
+
/* High contrast mode */
|
|
1660
|
+
@media (prefers-contrast: high) {
|
|
1661
|
+
:host {
|
|
1662
|
+
--chatbot-border: #000000;
|
|
1663
|
+
--chatbot-text-primary: #000000;
|
|
1664
|
+
--chatbot-user-message-bg: #0000ff;
|
|
1665
|
+
--chatbot-error-border: #ff0000;
|
|
1666
|
+
}
|
|
1667
|
+
}
|
|
1668
|
+
|
|
1669
|
+
/* Reduced motion */
|
|
1670
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1671
|
+
* {
|
|
1672
|
+
animation-duration: 0.01ms !important;
|
|
1673
|
+
animation-iteration-count: 1 !important;
|
|
1674
|
+
transition-duration: 0.01ms !important;
|
|
1675
|
+
}
|
|
1676
|
+
}
|
|
1677
|
+
|
|
1678
|
+
`
|
|
1679
|
+
/**
|
|
1680
|
+
* @license
|
|
1681
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
1682
|
+
* SPDX-License-Identifier: MIT
|
|
1683
|
+
*/;!function(t){t.User="user",t.Bot="bot",t.System="system"}(D||(D={})),function(t){t.Dots="dots",t.Spinner="spinner",t.Wave="wave",t.Typing="typing"}(F||(F={})),function(t){t.Small="small",t.Medium="medium",t.Large="large",t.Full="full"}(N||(N={})),function(t){t.Default="default",t.Minimal="minimal",t.Rounded="rounded",t.ChatGPT="chatgpt"}(L||(L={})),function(t){t.Default="default",t.Error="error",t.Success="success",t.Loading="loading",t.Pending="pending"}(B||(B={})),function(t){t.Image="image",t.Document="document",t.Audio="audio",t.Video="video",t.Archive="archive",t.Code="code",t.Unknown="unknown"}(U||(U={})),function(t){t.Upload="upload",t.Clear="clear",t.Export="export",t.Settings="settings",t.Microphone="microphone",t.Camera="camera",t.Attach="attach"}(W||(W={}));const J="",q=1e3,V=100,G=10485760,K=5,Y=["image/jpeg","image/png","image/gif","image/webp","application/pdf","text/plain","text/csv","application/json","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],X={"image/":U.Image,"audio/":U.Audio,"video/":U.Video,"application/pdf":U.Document,"application/msword":U.Document,"application/vnd.openxmlformats-officedocument":U.Document,"text/":U.Document,"application/zip":U.Archive,"application/x-rar":U.Archive,"application/javascript":U.Code,"text/html":U.Code,"text/css":U.Code};
|
|
1684
|
+
/**
|
|
1685
|
+
* @license
|
|
1686
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
1687
|
+
* SPDX-License-Identifier: MIT
|
|
1688
|
+
*/
|
|
1689
|
+
function Q(t){if(!t)return"";const e=t instanceof Date?t:new Date(t);if(Number.isNaN(e.getTime()))return"";const n=new Date,i={hour:"numeric",minute:"2-digit",hour12:!0};if(e.toDateString()===n.toDateString())return e.toLocaleTimeString(void 0,i);const o=Object.assign({month:"short",day:"numeric"},i);return e.toLocaleDateString(void 0,o)}function Z(t){return t.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}const tt={javascript:"JavaScript",typescript:"TypeScript",python:"Python",java:"Java",go:"Go",rust:"Rust",c:"C",cpp:"C++",csharp:"C#",ruby:"Ruby",php:"PHP",swift:"Swift",kotlin:"Kotlin",html:"HTML",css:"CSS",scss:"SCSS",sql:"SQL",graphql:"GraphQL",json:"JSON",yaml:"YAML",xml:"XML",toml:"TOML",markdown:"Markdown",md:"Markdown",bash:"Bash",shell:"Shell",sh:"Shell",zsh:"Zsh",dockerfile:"Dockerfile",makefile:"Makefile",text:"Text"};function et(t){return tt[t]||t.charAt(0).toUpperCase()+t.slice(1)}function nt(t){let e=Z(t);return e=e.replaceAll(/```([\s\S]*?)```/g,'<pre class="md-code"><code>$1</code></pre>'),e=e.replaceAll(/`([^`]+)`/g,'<code class="md-inline-code">$1</code>'),e=e.replaceAll(/^###[^\S\n]+(.+)$/gm,"<h3>$1</h3>"),e=e.replaceAll(/^##[^\S\n]+(.+)$/gm,"<h2>$1</h2>"),e=e.replaceAll(/^#[^\S\n]+(.+)$/gm,"<h1>$1</h1>"),e=e.replaceAll(/\*\*([^*]+)\*\*/g,"<strong>$1</strong>"),e=e.replaceAll(/\*([^*]+)\*/g,"<em>$1</em>"),e=e.replaceAll(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2" target="_blank" rel="noopener noreferrer">$1</a>'),e=e.replaceAll(/(?:^|\n)-\s+(.+)(?=\n|$)/g,(t,e)=>`\n<ul><li>${e}</li></ul>`),e=e.replaceAll(/<ul>\s*<li>([\s\S]*?)<\/li>\s*<\/ul>\n<ul>/g,"<ul><li>$1</li>"),e=e.split(/\n\n+/).map(t=>/^(<h\d|<pre|<ul|<ol|<blockquote)/.test(t.trim())?t:`<p>${t.replaceAll("\n","<br/>")}</p>`).join("\n"),e}
|
|
1690
|
+
/**
|
|
1691
|
+
* @license
|
|
1692
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
1693
|
+
* SPDX-License-Identifier: MIT
|
|
1694
|
+
*/function it(t,i){var o,r,s,c,d,h,u,p;const f=null===(o=t.text)||void 0===o?void 0:o.includes("[ERROR_START]"),g={error:!!t.error||f,introduction:!!t.introduction,[t.sender]:!0};return n`
|
|
1695
|
+
<div
|
|
1696
|
+
class="message ${a(g)}"
|
|
1697
|
+
part="message"
|
|
1698
|
+
data-sender="${t.sender}"
|
|
1699
|
+
data-id="${t.id}"
|
|
1700
|
+
>
|
|
1701
|
+
<div class="message__content" part="message-content">
|
|
1702
|
+
${f?function(t){const e=t.match(/\[ERROR_START\]\[ERROR_TITLE_START\]([\s\S]*?)\[ERROR_TITLE_END\]([\s\S]*?)\[ERROR_END\]/);if(e){const t=e[1],i=e[2];return n`
|
|
1703
|
+
<div class="message__error-container" part="message-error">
|
|
1704
|
+
${t?n`<div class="message__error-title" part="message-error-title">${t}</div>`:""}
|
|
1705
|
+
<div class="message__error-description" part="message-error-description">${i}</div>
|
|
1706
|
+
</div>
|
|
1707
|
+
`}return n`${t}`}(null!==(s=null===(r=t.text)||void 0===r?void 0:r.trim())&&void 0!==s?s:""):(null===(c=null==t?void 0:t.metadata)||void 0===c?void 0:c.renderAsHtml)?l(null!==(h=null===(d=t.text)||void 0===d?void 0:d.trim())&&void 0!==h?h:""):l((null!==(p=null===(u=t.text)||void 0===u?void 0:u.trim())&&void 0!==p?p:"").replaceAll("\n","<br>"))}
|
|
1708
|
+
</div>
|
|
1709
|
+
${t.files&&t.files.length>0?n`
|
|
1710
|
+
<div class="message__attachments" part="message-attachments" role="list" aria-label="${v("Attached files")}">
|
|
1711
|
+
${t.files.map(t=>{return n`
|
|
1712
|
+
<nr-dropdown
|
|
1713
|
+
trigger="hover"
|
|
1714
|
+
placement="top-end"
|
|
1715
|
+
size="small"
|
|
1716
|
+
class="message-file-preview-dropdown"
|
|
1717
|
+
>
|
|
1718
|
+
<nr-tag
|
|
1719
|
+
slot="trigger"
|
|
1720
|
+
class="message__attachment-tag"
|
|
1721
|
+
size="small"
|
|
1722
|
+
@click=${()=>{var e;return null===(e=i.onFileClick)||void 0===e?void 0:e.call(i,t)}}
|
|
1723
|
+
style="cursor: pointer;"
|
|
1724
|
+
>${t.name}</nr-tag>
|
|
1725
|
+
|
|
1726
|
+
<div slot="content" class="message-file-preview-content">
|
|
1727
|
+
${e=t.mimeType,e.startsWith("image/")&&(t.url||t.previewUrl)?n`
|
|
1728
|
+
<img
|
|
1729
|
+
src="${t.previewUrl||t.url}"
|
|
1730
|
+
alt="${t.name}"
|
|
1731
|
+
class="message-file-preview-image"
|
|
1732
|
+
/>
|
|
1733
|
+
`:n`
|
|
1734
|
+
<nr-icon
|
|
1735
|
+
.name=${function(t){return t.startsWith("image/")?"image":t.startsWith("video/")?"video":t.startsWith("audio/")?"music":"application/pdf"===t?"file-pdf":t.startsWith("text/")?"file-text":"file"}(t.mimeType)}
|
|
1736
|
+
size="large"
|
|
1737
|
+
class="message-file-preview-icon"
|
|
1738
|
+
></nr-icon>
|
|
1739
|
+
`}
|
|
1740
|
+
<div class="message-file-preview-info">
|
|
1741
|
+
<div class="message-file-preview-name" title="${t.name}">${t.name}</div>
|
|
1742
|
+
<div class="message-file-preview-details">
|
|
1743
|
+
<span>${function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(1024));return Math.round(t/Math.pow(1024,e)*100)/100+" "+["Bytes","KB","MB","GB"][e]}(t.size)}</span>
|
|
1744
|
+
</div>
|
|
1745
|
+
</div>
|
|
1746
|
+
</div>
|
|
1747
|
+
</nr-dropdown>
|
|
1748
|
+
`;var e})}
|
|
1749
|
+
</div>
|
|
1750
|
+
`:e}
|
|
1751
|
+
<div class="message__footer" part="message-footer">
|
|
1752
|
+
<div class="message__timestamp" part="message-timestamp">
|
|
1753
|
+
${Q(t.timestamp)}
|
|
1754
|
+
</div>
|
|
1755
|
+
<nr-icon
|
|
1756
|
+
name="copy"
|
|
1757
|
+
size="small"
|
|
1758
|
+
color="var(--nuraly-color-chatbot-timestamp)"
|
|
1759
|
+
class="message__copy"
|
|
1760
|
+
@click=${()=>i.onCopy(t)}
|
|
1761
|
+
@keydown=${e=>i.onCopyKeydown(e,t)}
|
|
1762
|
+
title="${v("Copy message")}"
|
|
1763
|
+
aria-label="${v("Copy message")}"
|
|
1764
|
+
role="button"
|
|
1765
|
+
tabindex="0"
|
|
1766
|
+
></nr-icon>
|
|
1767
|
+
</div>
|
|
1768
|
+
${t.error?n`
|
|
1769
|
+
<nr-button
|
|
1770
|
+
type="secondary"
|
|
1771
|
+
size="small"
|
|
1772
|
+
class="message__retry"
|
|
1773
|
+
part="retry-button"
|
|
1774
|
+
@click=${()=>i.onRetry(t)}
|
|
1775
|
+
@keydown=${i.onRetryKeydown}
|
|
1776
|
+
aria-label="${v("Retry message")}"
|
|
1777
|
+
>
|
|
1778
|
+
${v("Retry")}
|
|
1779
|
+
</nr-button>`:e}
|
|
1780
|
+
</div>
|
|
1781
|
+
`}function ot(t,i,o,r){return n`
|
|
1782
|
+
<div class="messages" part="messages">
|
|
1783
|
+
${0===t.length?n`
|
|
1784
|
+
<div class="empty-state" part="empty-state">
|
|
1785
|
+
<slot name="empty-state">
|
|
1786
|
+
<div class="empty-state__content">
|
|
1787
|
+
${v("Start a conversation")}
|
|
1788
|
+
</div>
|
|
1789
|
+
</slot>
|
|
1790
|
+
</div>
|
|
1791
|
+
`:e}
|
|
1792
|
+
${t.map(t=>it(t,r))}
|
|
1793
|
+
${i}
|
|
1794
|
+
${o}
|
|
1795
|
+
</div>
|
|
1796
|
+
`}
|
|
1797
|
+
/**
|
|
1798
|
+
* @license
|
|
1799
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
1800
|
+
* SPDX-License-Identifier: MIT
|
|
1801
|
+
*/function rt(t,i,o){return i.length>0?n`
|
|
1802
|
+
<div class="suggestion-container" part="suggestions">
|
|
1803
|
+
${i.map(t=>function(t,e){return n`
|
|
1804
|
+
<div
|
|
1805
|
+
class="suggestion ${a({"suggestion--disabled":!1===t.enabled})}"
|
|
1806
|
+
part="suggestion"
|
|
1807
|
+
role="button"
|
|
1808
|
+
tabindex="0"
|
|
1809
|
+
@click=${()=>e.onClick(t)}
|
|
1810
|
+
@keydown=${e.onKeydown}
|
|
1811
|
+
data-id="${t.id}"
|
|
1812
|
+
aria-label="${v("Select suggestion: ")}${t.text}"
|
|
1813
|
+
>
|
|
1814
|
+
${t.text}
|
|
1815
|
+
</div>
|
|
1816
|
+
`}(t,o))}
|
|
1817
|
+
</div>
|
|
1818
|
+
`:e}
|
|
1819
|
+
/**
|
|
1820
|
+
* @license
|
|
1821
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
1822
|
+
* SPDX-License-Identifier: MIT
|
|
1823
|
+
*/function st(t,e,i){return n`
|
|
1824
|
+
<div class="context-tags-row" part="context-tags">
|
|
1825
|
+
${d(t,t=>t.id,t=>{return n`
|
|
1826
|
+
<nr-dropdown
|
|
1827
|
+
trigger="hover"
|
|
1828
|
+
placement="top"
|
|
1829
|
+
size="small"
|
|
1830
|
+
class="file-preview-dropdown"
|
|
1831
|
+
>
|
|
1832
|
+
<nr-tag
|
|
1833
|
+
slot="trigger"
|
|
1834
|
+
class="context-tag"
|
|
1835
|
+
size="small"
|
|
1836
|
+
closable
|
|
1837
|
+
@click=${()=>null==i?void 0:i(t)}
|
|
1838
|
+
@nr-tag-close=${()=>e(t.id)}
|
|
1839
|
+
style="cursor: pointer;"
|
|
1840
|
+
>${t.name}</nr-tag>
|
|
1841
|
+
|
|
1842
|
+
<div slot="content" class="file-preview-content">
|
|
1843
|
+
${o=t.mimeType,o.startsWith("image/")&&(t.url||t.previewUrl)?n`
|
|
1844
|
+
<img
|
|
1845
|
+
src="${t.previewUrl||t.url}"
|
|
1846
|
+
alt="${t.name}"
|
|
1847
|
+
class="file-preview-image"
|
|
1848
|
+
/>
|
|
1849
|
+
`:n`
|
|
1850
|
+
<nr-icon
|
|
1851
|
+
.name=${(t=>t.startsWith("image/")?"image":t.startsWith("video/")?"video":t.startsWith("audio/")?"music":"application/pdf"===t?"file-pdf":t.startsWith("text/")?"file-text":"file")(t.mimeType)}
|
|
1852
|
+
size="large"
|
|
1853
|
+
class="file-preview-icon"
|
|
1854
|
+
></nr-icon>
|
|
1855
|
+
`}
|
|
1856
|
+
<div class="file-preview-info">
|
|
1857
|
+
<div class="file-preview-name" title="${t.name}">${t.name}</div>
|
|
1858
|
+
<div class="file-preview-details">
|
|
1859
|
+
<span>${(t=>{if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(1024));return Math.round(t/Math.pow(1024,e)*100)/100+" "+["Bytes","KB","MB","GB"][e]})(t.size)}</span>
|
|
1860
|
+
</div>
|
|
1861
|
+
</div>
|
|
1862
|
+
</div>
|
|
1863
|
+
</nr-dropdown>
|
|
1864
|
+
`;var o})}
|
|
1865
|
+
</div>
|
|
1866
|
+
`}function at(t,i){return n`
|
|
1867
|
+
<div class="action-buttons-row">
|
|
1868
|
+
<div class="action-buttons-left">
|
|
1869
|
+
${t.enableFileUpload?function(t,e){return n`
|
|
1870
|
+
<nr-dropdown
|
|
1871
|
+
.items=${t.fileUploadItems}
|
|
1872
|
+
trigger="click"
|
|
1873
|
+
placement="top-start"
|
|
1874
|
+
size="small"
|
|
1875
|
+
auto-close
|
|
1876
|
+
?disabled=${t.disabled}
|
|
1877
|
+
@nr-dropdown-item-click=${e.onFileDropdownClick}
|
|
1878
|
+
>
|
|
1879
|
+
<nr-button
|
|
1880
|
+
slot="trigger"
|
|
1881
|
+
part="file-button"
|
|
1882
|
+
type="default"
|
|
1883
|
+
size="small"
|
|
1884
|
+
.icon=${["upload"]}
|
|
1885
|
+
?disabled=${t.disabled}
|
|
1886
|
+
aria-label="${v("Attach files")}"
|
|
1887
|
+
title="${v("Attach files")}"
|
|
1888
|
+
>
|
|
1889
|
+
Attach
|
|
1890
|
+
</nr-button>
|
|
1891
|
+
</nr-dropdown>
|
|
1892
|
+
`}(t,i):e}
|
|
1893
|
+
${t.enableModuleSelection&&t.moduleOptions.length>0?function(t,e){return n`
|
|
1894
|
+
<nr-select
|
|
1895
|
+
.options=${t.moduleOptions}
|
|
1896
|
+
.value=${t.selectedModules}
|
|
1897
|
+
multiple
|
|
1898
|
+
placeholder="${t.moduleSelectionLabel}"
|
|
1899
|
+
size="small"
|
|
1900
|
+
?disabled=${t.disabled}
|
|
1901
|
+
searchable
|
|
1902
|
+
search-placeholder="${v("Search modules...")}"
|
|
1903
|
+
use-custom-selected-display
|
|
1904
|
+
part="module-select"
|
|
1905
|
+
class="module-select"
|
|
1906
|
+
@nr-change=${e.onModuleChange}
|
|
1907
|
+
aria-label="${v("Select modules")}"
|
|
1908
|
+
>
|
|
1909
|
+
<span slot="selected-display">
|
|
1910
|
+
${t.renderModuleDisplay()}
|
|
1911
|
+
</span>
|
|
1912
|
+
</nr-select>
|
|
1913
|
+
`}(t,i):e}
|
|
1914
|
+
</div>
|
|
1915
|
+
|
|
1916
|
+
<div class="action-buttons-right">
|
|
1917
|
+
${t.showSendButton&&(!t.disabled||t.isQueryRunning)&&(t.currentInput.trim()||t.uploadedFiles.length>0||t.isQueryRunning)?function(t,e){return n`
|
|
1918
|
+
<nr-button
|
|
1919
|
+
class="input-box__send-button"
|
|
1920
|
+
part="send-button"
|
|
1921
|
+
type="default"
|
|
1922
|
+
size="small"
|
|
1923
|
+
.iconRight=${t.isQueryRunning?"square":"arrow-up"}
|
|
1924
|
+
@click=${t.isQueryRunning?e.onStop:e.onSend}
|
|
1925
|
+
@keydown=${e.onSendKeydown}
|
|
1926
|
+
aria-label="${t.isQueryRunning?v("Stop query"):v("Send message")}"
|
|
1927
|
+
title="${t.isQueryRunning?v("Stop query"):v("Send message")}"
|
|
1928
|
+
>
|
|
1929
|
+
${t.isQueryRunning?v("Stop"):v("Send")}
|
|
1930
|
+
</nr-button>
|
|
1931
|
+
`}(t,i):e}
|
|
1932
|
+
</div>
|
|
1933
|
+
</div>
|
|
1934
|
+
`}
|
|
1935
|
+
/**
|
|
1936
|
+
* @license
|
|
1937
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
1938
|
+
* SPDX-License-Identifier: MIT
|
|
1939
|
+
*/
|
|
1940
|
+
function lt(t,e,i){const o=t.messages.length>0?t.messages[t.messages.length-1]:null,r=o&&"string"==typeof o.text?o.text:"";return n`
|
|
1941
|
+
<div
|
|
1942
|
+
class="thread-item ${a({"thread-item--active":t.id===e.activeThreadId})}"
|
|
1943
|
+
@click=${()=>i.onSelectThread(t.id)}
|
|
1944
|
+
part="thread-item"
|
|
1945
|
+
>
|
|
1946
|
+
<div class="thread-item__header">
|
|
1947
|
+
${e.editingThreadId===t.id&&i.onRenameThread?n`
|
|
1948
|
+
<input
|
|
1949
|
+
class="thread-item__rename-input"
|
|
1950
|
+
type="text"
|
|
1951
|
+
.value=${t.title||""}
|
|
1952
|
+
@click=${t=>t.stopPropagation()}
|
|
1953
|
+
@keydown=${e=>{if("Enter"===e.key){const n=e.target.value.trim();n&&i.onRenameThread(t.id,n)}"Escape"===e.key&&i.onRenameThread(t.id,t.title||"")}}
|
|
1954
|
+
@blur=${e=>{const n=e.target.value.trim();n&&n!==t.title?i.onRenameThread(t.id,n):i.onRenameThread(t.id,t.title||"")}}
|
|
1955
|
+
/>
|
|
1956
|
+
`:n`
|
|
1957
|
+
<div class="thread-item__title">${t.title||v("New Chat")}</div>
|
|
1958
|
+
`}
|
|
1959
|
+
<div class="thread-item__actions">
|
|
1960
|
+
${i.onRenameThread&&e.editingThreadId!==t.id?n`
|
|
1961
|
+
<button
|
|
1962
|
+
class="thread-item__action-btn"
|
|
1963
|
+
title="${v("Rename conversation")}"
|
|
1964
|
+
@click=${e=>{e.stopPropagation(),e.target.dispatchEvent(new CustomEvent("nr-thread-edit",{bubbles:!0,composed:!0,detail:{threadId:t.id}}))}}
|
|
1965
|
+
part="thread-rename"
|
|
1966
|
+
>
|
|
1967
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/></svg>
|
|
1968
|
+
</button>
|
|
1969
|
+
`:""}
|
|
1970
|
+
${i.onBookmarkThread?n`
|
|
1971
|
+
<button
|
|
1972
|
+
class="thread-item__action-btn ${t.bookmarked?"thread-item__bookmark--active":""}"
|
|
1973
|
+
title="${t.bookmarked?v("Remove bookmark"):v("Bookmark conversation")}"
|
|
1974
|
+
@click=${e=>{e.stopPropagation(),i.onBookmarkThread(t.id)}}
|
|
1975
|
+
part="thread-bookmark"
|
|
1976
|
+
>
|
|
1977
|
+
${t.bookmarked?n`
|
|
1978
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg>
|
|
1979
|
+
`:n`
|
|
1980
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg>
|
|
1981
|
+
`}
|
|
1982
|
+
</button>
|
|
1983
|
+
`:""}
|
|
1984
|
+
${i.onDeleteThread?n`
|
|
1985
|
+
<nr-popconfirm
|
|
1986
|
+
title="${v("Delete this conversation?")}"
|
|
1987
|
+
description="${v("This action cannot be undone.")}"
|
|
1988
|
+
ok-text="${v("Delete")}"
|
|
1989
|
+
cancel-text="${v("Cancel")}"
|
|
1990
|
+
ok-type="danger"
|
|
1991
|
+
placement="right"
|
|
1992
|
+
@click=${t=>t.stopPropagation()}
|
|
1993
|
+
@nr-confirm=${()=>i.onDeleteThread(t.id)}
|
|
1994
|
+
>
|
|
1995
|
+
<button
|
|
1996
|
+
slot="trigger"
|
|
1997
|
+
class="thread-item__action-btn thread-item__delete"
|
|
1998
|
+
title="${v("Delete conversation")}"
|
|
1999
|
+
part="thread-delete"
|
|
2000
|
+
>
|
|
2001
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"/><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/><line x1="10" y1="11" x2="10" y2="17"/><line x1="14" y1="11" x2="14" y2="17"/></svg>
|
|
2002
|
+
</button>
|
|
2003
|
+
</nr-popconfirm>
|
|
2004
|
+
`:""}
|
|
2005
|
+
</div>
|
|
2006
|
+
</div>
|
|
2007
|
+
<div class="thread-item__preview">
|
|
2008
|
+
${r}
|
|
2009
|
+
</div>
|
|
2010
|
+
<div class="thread-item__timestamp">${Q(t.updatedAt)}</div>
|
|
2011
|
+
</div>
|
|
2012
|
+
`}function ct(t,i){if(!t.isOpen||!t.file)return e;const o=t.file,r=o.mimeType.startsWith("image/"),s="application/pdf"===o.mimeType||o.name.toLowerCase().endsWith(".pdf");return n`
|
|
2013
|
+
<nr-modal
|
|
2014
|
+
.open=${t.isOpen}
|
|
2015
|
+
size="large"
|
|
2016
|
+
title="${o.name}"
|
|
2017
|
+
@modal-close=${i.onClose}
|
|
2018
|
+
>
|
|
2019
|
+
<div style="width: 100%; height: 75vh; display: flex; flex-direction: column; align-items: stretch; justify-content: stretch;">
|
|
2020
|
+
${r&&(o.url||o.previewUrl)?n`
|
|
2021
|
+
<img
|
|
2022
|
+
src="${o.url||o.previewUrl}"
|
|
2023
|
+
alt="${o.name}"
|
|
2024
|
+
style="max-width: 100%; max-height: 100%; object-fit: contain; align-self: center;"
|
|
2025
|
+
/>
|
|
2026
|
+
`:s&&o.url?n`
|
|
2027
|
+
<div style="width: 100%; height: 100%; position: relative;">
|
|
2028
|
+
<nr-document
|
|
2029
|
+
.src="${o.url}"
|
|
2030
|
+
.type="${"pdf"}"
|
|
2031
|
+
.width="${"100%"}"
|
|
2032
|
+
.height="${"100%"}"
|
|
2033
|
+
.block="${!0}"
|
|
2034
|
+
style="width: 100%; height: 100%; display: block;"
|
|
2035
|
+
></nr-document>
|
|
2036
|
+
</div>
|
|
2037
|
+
`:n`
|
|
2038
|
+
<div style="text-align: center; padding: 2rem; align-self: center;">
|
|
2039
|
+
<nr-icon name="file" size="xlarge" style="margin-bottom: 1rem;"></nr-icon>
|
|
2040
|
+
<p style="font-size: 1.1rem; font-weight: 500; margin-bottom: 0.5rem;">${o.name}</p>
|
|
2041
|
+
<p style="color: var(--nuraly-color-chatbot-timestamp); margin-bottom: 1.5rem;">
|
|
2042
|
+
${
|
|
2043
|
+
/**
|
|
2044
|
+
* @license
|
|
2045
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2046
|
+
* SPDX-License-Identifier: MIT
|
|
2047
|
+
*/
|
|
2048
|
+
function(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(1024));return Math.round(t/Math.pow(1024,e)*100)/100+" "+["Bytes","KB","MB","GB"][e]}(o.size)}
|
|
2049
|
+
</p>
|
|
2050
|
+
${o.url?n`
|
|
2051
|
+
<nr-button
|
|
2052
|
+
type="primary"
|
|
2053
|
+
@click=${()=>window.open(o.url,"_blank")}
|
|
2054
|
+
>
|
|
2055
|
+
Open File
|
|
2056
|
+
</nr-button>
|
|
2057
|
+
`:e}
|
|
2058
|
+
</div>
|
|
2059
|
+
`}
|
|
2060
|
+
</div>
|
|
2061
|
+
</nr-modal>
|
|
2062
|
+
`}
|
|
2063
|
+
/**
|
|
2064
|
+
* @license
|
|
2065
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2066
|
+
* SPDX-License-Identifier: MIT
|
|
2067
|
+
*/function dt(t,i){var o;if(!t.isOpen||!t.artifact)return e;const r=t.artifact,s=et(r.language);return n`
|
|
2068
|
+
<div class="artifact-panel" part="artifact-panel">
|
|
2069
|
+
<div class="artifact-panel__resize-handle" part="artifact-panel-resize-handle">
|
|
2070
|
+
<div class="artifact-panel__resize-bar"></div>
|
|
2071
|
+
</div>
|
|
2072
|
+
<div class="artifact-panel__body">
|
|
2073
|
+
<div class="artifact-panel__header">
|
|
2074
|
+
<div class="artifact-panel__header-info">
|
|
2075
|
+
<nr-tag size="small" class="artifact-panel__lang-badge">${s}</nr-tag>
|
|
2076
|
+
<span class="artifact-panel__title">${r.title}</span>
|
|
2077
|
+
</div>
|
|
2078
|
+
<div class="artifact-panel__actions">
|
|
2079
|
+
<nr-button
|
|
2080
|
+
type="text"
|
|
2081
|
+
size="small"
|
|
2082
|
+
.icon=${["copy"]}
|
|
2083
|
+
@click=${()=>i.onCopy(r)}
|
|
2084
|
+
title="${v("Copy code")}"
|
|
2085
|
+
aria-label="${v("Copy code")}"
|
|
2086
|
+
></nr-button>
|
|
2087
|
+
<nr-button
|
|
2088
|
+
type="text"
|
|
2089
|
+
size="small"
|
|
2090
|
+
.icon=${["x"]}
|
|
2091
|
+
@click=${i.onClose}
|
|
2092
|
+
title="${v("Close panel")}"
|
|
2093
|
+
aria-label="${v("Close panel")}"
|
|
2094
|
+
></nr-button>
|
|
2095
|
+
</div>
|
|
2096
|
+
</div>
|
|
2097
|
+
<div class="artifact-panel__content">
|
|
2098
|
+
${(null===(o=t.renderContent)||void 0===o?void 0:o.call(t,r))||function(t){switch(t.language){case"json":{let e;try{e=JSON.stringify(JSON.parse(t.content),null,2)}catch(n){e=t.content}return n`<pre class="artifact-panel__code"><code>${e}</code></pre>`}case"md":case"markdown":return n`<div class="artifact-panel__rendered-md">${l(nt(t.content))}</div>`;case"html":return n`<div class="artifact-panel__rendered-html">${l(t.content)}</div>`;case"text":case"txt":return n`<div class="artifact-panel__rendered-text">${t.content}</div>`;default:return n`<pre class="artifact-panel__code"><code>${t.content}</code></pre>`}}(r)}
|
|
2099
|
+
</div>
|
|
2100
|
+
</div>
|
|
2101
|
+
</div>
|
|
2102
|
+
`}
|
|
2103
|
+
/**
|
|
2104
|
+
* @license
|
|
2105
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2106
|
+
* SPDX-License-Identifier: MIT
|
|
2107
|
+
*/function ht(t,i){return!1!==t.showMessages?n`
|
|
2108
|
+
<div class="chatbot-content" part="content">
|
|
2109
|
+
${ot(t.messages,rt(t.chatStarted,t.suggestions,i.suggestion),t.isTyping?function(t,i,o){if(!t)return e;const r=i===F.Dots?n`
|
|
2110
|
+
<div class="dots">
|
|
2111
|
+
<span></span>
|
|
2112
|
+
<span></span>
|
|
2113
|
+
<span></span>
|
|
2114
|
+
</div>
|
|
2115
|
+
`:n`<div class="spinner"></div>`;return n`
|
|
2116
|
+
<div class="message bot loading" part="typing-indicator">
|
|
2117
|
+
<div class="message__content">
|
|
2118
|
+
${r}
|
|
2119
|
+
${o?n`<span class="loading-text">${o.split("").map((t,e)=>n`<span class="loading-text__char" style="animation-delay:${.04*e}s">${" "===t?"Β ":t}</span>`)}</span>`:e}
|
|
2120
|
+
</div>
|
|
2121
|
+
</div>
|
|
2122
|
+
`}(t.isTyping,t.loadingIndicator||F.Spinner,t.loadingText):e,i.message)}
|
|
2123
|
+
<slot name="messages"></slot>
|
|
2124
|
+
</div>
|
|
2125
|
+
`:t.suggestions&&t.suggestions.length>0?n`
|
|
2126
|
+
<div class="input-only-suggestions" part="input-only-suggestions">
|
|
2127
|
+
${rt(0,t.suggestions,i.suggestion)}
|
|
2128
|
+
</div>
|
|
2129
|
+
`:e}function ut(t,i){var o;const r=t.enableArtifacts&&(null===(o=t.artifactPanel)||void 0===o?void 0:o.isOpen);return n`
|
|
2130
|
+
<div class="chatbot-container ${a({"chatbot-container--with-sidebar":t.enableThreads&&t.isThreadSidebarOpen,"chatbot-container--with-artifact-panel":!!r})}" part="container">
|
|
2131
|
+
|
|
2132
|
+
${t.enableThreads&&t.isThreadSidebarOpen&&t.threadSidebar&&i.threadSidebar?function(t,i){const o=t.threads.filter(t=>t.bookmarked),r=t.threads.filter(t=>!t.bookmarked);return n`
|
|
2133
|
+
<div class="thread-sidebar" part="thread-sidebar">
|
|
2134
|
+
<div class="thread-sidebar__header">
|
|
2135
|
+
<h3>${v("Conversations")}</h3>
|
|
2136
|
+
</div>
|
|
2137
|
+
|
|
2138
|
+
<div class="thread-list">
|
|
2139
|
+
${o.length>0?n`
|
|
2140
|
+
<div class="thread-section" part="thread-section-bookmarks">
|
|
2141
|
+
<div class="thread-section__label">
|
|
2142
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"/></svg>
|
|
2143
|
+
${v("Bookmarks")}
|
|
2144
|
+
</div>
|
|
2145
|
+
${d(o,t=>t.id,e=>lt(e,t,i))}
|
|
2146
|
+
</div>
|
|
2147
|
+
`:e}
|
|
2148
|
+
${r.length>0||0===o.length?n`
|
|
2149
|
+
${o.length>0?n`
|
|
2150
|
+
<div class="thread-section__label">${v("All Conversations")}</div>
|
|
2151
|
+
`:e}
|
|
2152
|
+
${d(r,t=>t.id,e=>lt(e,t,i))}
|
|
2153
|
+
${0===r.length&&0===o.length?n`
|
|
2154
|
+
<p class="empty-msg">${v("No conversations yet")}</p>
|
|
2155
|
+
`:e}
|
|
2156
|
+
`:e}
|
|
2157
|
+
</div>
|
|
2158
|
+
|
|
2159
|
+
<slot name="thread-sidebar"></slot>
|
|
2160
|
+
</div>
|
|
2161
|
+
`}
|
|
2162
|
+
/**
|
|
2163
|
+
* @license
|
|
2164
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2165
|
+
* SPDX-License-Identifier: MIT
|
|
2166
|
+
*/(t.threadSidebar,i.threadSidebar):""}
|
|
2167
|
+
|
|
2168
|
+
<div class="chatbot-main" part="main">
|
|
2169
|
+
${function(t,i){var o;return t.enableThreads?n`
|
|
2170
|
+
<div class="chatbot-header" part="chatbot-header">
|
|
2171
|
+
<nr-button
|
|
2172
|
+
type="text"
|
|
2173
|
+
size="small"
|
|
2174
|
+
.icon=${["panel-left"]}
|
|
2175
|
+
@click=${i.onToggleThreadSidebar}
|
|
2176
|
+
title="${v(t.isThreadSidebarOpen?"Hide threads":"Show threads")}"
|
|
2177
|
+
aria-label="${v(t.isThreadSidebarOpen?"Hide threads":"Show threads")}"
|
|
2178
|
+
></nr-button>
|
|
2179
|
+
${t.enableThreadCreation&&t.messages.length>0?n`
|
|
2180
|
+
<nr-button
|
|
2181
|
+
type="text"
|
|
2182
|
+
size="small"
|
|
2183
|
+
.icon=${["square-pen"]}
|
|
2184
|
+
@click=${null===(o=i.threadSidebar)||void 0===o?void 0:o.onCreateNew}
|
|
2185
|
+
title="${v("New conversation")}"
|
|
2186
|
+
aria-label="${v("New conversation")}"
|
|
2187
|
+
></nr-button>
|
|
2188
|
+
`:""}
|
|
2189
|
+
</div>
|
|
2190
|
+
`:e}(t,i)}
|
|
2191
|
+
|
|
2192
|
+
<slot name="header"></slot>
|
|
2193
|
+
|
|
2194
|
+
${ht(t,i)}
|
|
2195
|
+
|
|
2196
|
+
${function(t,i){return n`
|
|
2197
|
+
<div class="input-box" part="input-box">
|
|
2198
|
+
<div class="input-container">
|
|
2199
|
+
<!-- Context tags -->
|
|
2200
|
+
${t.uploadedFiles.length>0?st(t.uploadedFiles,i.onFileRemove,i.onFileClick):e}
|
|
2201
|
+
|
|
2202
|
+
<!-- Input area -->
|
|
2203
|
+
<div class="input-row">
|
|
2204
|
+
<div
|
|
2205
|
+
class="input-box__input"
|
|
2206
|
+
part="input"
|
|
2207
|
+
contenteditable="true"
|
|
2208
|
+
role="textbox"
|
|
2209
|
+
aria-multiline="true"
|
|
2210
|
+
aria-label="${v("Chat input")}"
|
|
2211
|
+
data-placeholder="${t.placeholder}"
|
|
2212
|
+
@input=${i.onInput}
|
|
2213
|
+
@keydown=${i.onKeydown}
|
|
2214
|
+
@focus=${i.onFocus}
|
|
2215
|
+
@blur=${i.onBlur}
|
|
2216
|
+
></div>
|
|
2217
|
+
</div>
|
|
2218
|
+
|
|
2219
|
+
<!-- Action buttons -->
|
|
2220
|
+
${at(t,i)}
|
|
2221
|
+
</div>
|
|
2222
|
+
</div>
|
|
2223
|
+
`}(t.inputBox,i.inputBox)}
|
|
2224
|
+
|
|
2225
|
+
<slot name="footer"></slot>
|
|
2226
|
+
</div>
|
|
2227
|
+
|
|
2228
|
+
${r&&t.artifactPanel&&i.artifactPanel?dt(t.artifactPanel,i.artifactPanel):""}
|
|
2229
|
+
|
|
2230
|
+
${t.isDragging?function(t,e){return n`
|
|
2231
|
+
<div
|
|
2232
|
+
class="file-upload-area ${t.isDragging?"file-upload-area--dragging":""}"
|
|
2233
|
+
part="file-upload-area"
|
|
2234
|
+
@drop=${e.onDrop}
|
|
2235
|
+
@dragover=${e.onDragOver}
|
|
2236
|
+
@dragleave=${e.onDragLeave}
|
|
2237
|
+
>
|
|
2238
|
+
<div class="file-upload-area__content">
|
|
2239
|
+
<div class="file-upload-area__icon">π</div>
|
|
2240
|
+
<div class="file-upload-area__text">
|
|
2241
|
+
${v("Drop files here to upload")}
|
|
2242
|
+
</div>
|
|
2243
|
+
</div>
|
|
2244
|
+
</div>
|
|
2245
|
+
`}
|
|
2246
|
+
/**
|
|
2247
|
+
* @license
|
|
2248
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2249
|
+
* SPDX-License-Identifier: MIT
|
|
2250
|
+
*/({isDragging:t.isDragging},i.fileUploadArea):""}
|
|
2251
|
+
|
|
2252
|
+
${t.urlModal&&i.urlModal?function(t,i){return n`
|
|
2253
|
+
<nr-modal
|
|
2254
|
+
?open=${t.isOpen}
|
|
2255
|
+
@nr-modal-close=${i.onClose}
|
|
2256
|
+
part="url-modal"
|
|
2257
|
+
>
|
|
2258
|
+
<div slot="header">${v("Add URL")}</div>
|
|
2259
|
+
|
|
2260
|
+
<div >
|
|
2261
|
+
<nr-row gutter="8" align="bottom">
|
|
2262
|
+
<nr-col span="20" >
|
|
2263
|
+
<nr-input
|
|
2264
|
+
|
|
2265
|
+
type="url"
|
|
2266
|
+
.value=${t.urlInput}
|
|
2267
|
+
placeholder="${v("Enter URL...")}"
|
|
2268
|
+
?disabled=${t.isLoading}
|
|
2269
|
+
@nr-input=${i.onUrlInputChange}
|
|
2270
|
+
@keydown=${i.onUrlInputKeydown}
|
|
2271
|
+
>
|
|
2272
|
+
<nr-label slot="label">${v("URL")}</nr-label>
|
|
2273
|
+
</nr-input>
|
|
2274
|
+
</nr-col>
|
|
2275
|
+
<nr-col span="4" >
|
|
2276
|
+
<nr-button
|
|
2277
|
+
type="default"
|
|
2278
|
+
.icon=${["paperclip"]}
|
|
2279
|
+
size="small"
|
|
2280
|
+
?disabled=${t.isLoading}
|
|
2281
|
+
@click=${i.onAttachFile}
|
|
2282
|
+
title="${v("Load file from URL")}"
|
|
2283
|
+
style="margin-left: 0.5rem;"
|
|
2284
|
+
>
|
|
2285
|
+
</nr-button>
|
|
2286
|
+
</nr-col>
|
|
2287
|
+
</nr-row>
|
|
2288
|
+
|
|
2289
|
+
${t.error?n`
|
|
2290
|
+
<nr-alert
|
|
2291
|
+
type="error"
|
|
2292
|
+
closable
|
|
2293
|
+
style="margin-top: 1rem;"
|
|
2294
|
+
>
|
|
2295
|
+
${t.error}
|
|
2296
|
+
</nr-alert>
|
|
2297
|
+
`:e}
|
|
2298
|
+
|
|
2299
|
+
${t.selectedFileName?n`
|
|
2300
|
+
<nr-alert
|
|
2301
|
+
type="success"
|
|
2302
|
+
style="margin-top: 1rem;"
|
|
2303
|
+
>
|
|
2304
|
+
${v("Selected file")}: ${t.selectedFileName}
|
|
2305
|
+
</nr-alert>
|
|
2306
|
+
`:e}
|
|
2307
|
+
|
|
2308
|
+
${t.isLoading?n`
|
|
2309
|
+
<nr-alert
|
|
2310
|
+
type="info"
|
|
2311
|
+
style="margin-top: 1rem;"
|
|
2312
|
+
>
|
|
2313
|
+
${v("Loading file from URL...")}
|
|
2314
|
+
</nr-alert>
|
|
2315
|
+
`:e}
|
|
2316
|
+
</div>
|
|
2317
|
+
|
|
2318
|
+
<div slot="footer">
|
|
2319
|
+
<nr-button
|
|
2320
|
+
type="default"
|
|
2321
|
+
size="small"
|
|
2322
|
+
?disabled=${t.isLoading}
|
|
2323
|
+
@click=${i.onClose}
|
|
2324
|
+
>
|
|
2325
|
+
${v("Cancel")}
|
|
2326
|
+
</nr-button>
|
|
2327
|
+
<nr-button
|
|
2328
|
+
type="primary"
|
|
2329
|
+
size="small"
|
|
2330
|
+
?disabled=${!t.urlInput&&!t.selectedFileName||t.isLoading}
|
|
2331
|
+
?loading=${t.isLoading}
|
|
2332
|
+
@click=${i.onConfirm}
|
|
2333
|
+
>
|
|
2334
|
+
${v("Add")}
|
|
2335
|
+
</nr-button>
|
|
2336
|
+
</div>
|
|
2337
|
+
</nr-modal>
|
|
2338
|
+
`}(t.urlModal,i.urlModal):""}
|
|
2339
|
+
|
|
2340
|
+
<slot></slot>
|
|
2341
|
+
</div>
|
|
2342
|
+
`}
|
|
2343
|
+
/**
|
|
2344
|
+
* @license
|
|
2345
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2346
|
+
* SPDX-License-Identifier: MIT
|
|
2347
|
+
*/var pt=function(t,e,n,i){for(var o,r=arguments.length,s=r<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,n):i,a=t.length-1;a>=0;a--)(o=t[a])&&(s=(r<3?o(s):r>3?o(e,n,s):o(e,n))||s);return r>3&&s&&Object.defineProperty(e,n,s),s},ft=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};let vt=class extends(c(i)){constructor(){super(...arguments),this.requiredComponents=["nr-input","nr-button","nr-icon","nr-dropdown","nr-select","nr-modal","nr-popconfirm"],this.messages=[],this.currentInput="",this.isBotTyping=!1,this.isQueryRunning=!1,this.suggestions=[],this.chatStarted=!1,this.isRTL=!1,this.size=N.Medium,this.variant=L.Default,this.loadingIndicator=F.Dots,this.loadingText=v("Agent is working..."),this.disabled=!1,this.placeholder=v("Type your message..."),this.showSendButton=!0,this.autoScroll=!0,this.showThreads=!1,this.enableThreadCreation=!1,this.threads=[],this.mode="chat",this.boxed=!1,this.enableUrlSync=!1,this.showMessages=!0,this.enableFileUpload=!1,this.uploadedFiles=[],this.actionButtons=[],this.enableModuleSelection=!1,this.modules=[],this.selectedModules=[],this.moduleSelectionLabel=v("Select Modules"),this.enableArtifacts=!1,this.focused=!1,this.isArtifactPanelOpen=!1,this.selectedArtifact=null,this.isThreadSidebarOpen=!0,this.isUrlModalOpen=!1,this.urlInput="",this.urlModalError="",this.isUrlLoading=!1,this.selectedUrlFileName="",this.isFilePreviewModalOpen=!1,this.previewFile=null,this.controllerUnsubscribes=[],this._artifactResizeBound=!1,this.toggleThreadSidebar=()=>{this.isThreadSidebarOpen=!this.isThreadSidebarOpen}}get moduleSelectOptions(){return this.modules.map(t=>({value:t.id,label:t.name,icon:t.icon,disabled:!1===t.enabled,description:t.description}))}connectedCallback(){super.connectedCallback(),this.controller&&this.setupControllerIntegration(),this.setupUrlSync()}firstUpdated(){var t,e,n,i;null===(t=this.shadowRoot)||void 0===t||t.addEventListener("click",t=>{var e,n;const i=null===(n=(e=t.target).closest)||void 0===n?void 0:n.call(e,"[data-artifact-id]");if(i){const t=i.dataset.artifactId;t&&this.handleArtifactClick(t)}}),null===(e=this.shadowRoot)||void 0===e||e.addEventListener("nr-thread-edit",t=>{const e=t.detail;(null==e?void 0:e.threadId)&&(this._editingThreadId=e.threadId,this.requestUpdate(),this.updateComplete.then(()=>{var t;const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(".thread-item__rename-input");e&&(e.focus(),e.select())}))}),null===(n=this.shadowRoot)||void 0===n||n.addEventListener("click",t=>{var e,n;const i=null===(n=(e=t.target).closest)||void 0===n?void 0:n.call(e,"[data-selection-value]");if(i){const t=i.dataset.selectionValue;t&&this.controller&&this.controller.sendMessage(t)}}),null===(i=this.shadowRoot)||void 0===i||i.addEventListener("keydown",t=>{var e,n,i,o;const r=t;if("Enter"!==r.key&&" "!==r.key)return;const s=null===(n=(e=r.target).closest)||void 0===n?void 0:n.call(e,"[data-artifact-id]");if(s){r.preventDefault();const t=s.dataset.artifactId;return void(t&&this.handleArtifactClick(t))}const a=null===(o=(i=r.target).closest)||void 0===o?void 0:o.call(i,"[data-selection-value]");if(a){r.preventDefault();const t=a.dataset.selectionValue;t&&this.controller&&this.controller.sendMessage(t)}})}disconnectedCallback(){var t;super.disconnectedCallback(),this.controller&&this.cleanupControllerIntegration(),this.teardownUrlSync(),null===(t=this._artifactResizeCleanup)||void 0===t||t.call(this),this._artifactResizeBound=!1}updated(t){if(super.updated(t),t.has("controller")&&(this.cleanupControllerIntegration(),this.controller)){this.setupControllerIntegration();try{const t=this.controller.getState();this.handleControllerStateChange(t)}catch(t){}this.enableUrlSync&&this.handleHashChange()}if(t.has("enableUrlSync")&&(this.enableUrlSync?this.setupUrlSync():this.teardownUrlSync()),this.controller&&!t.has("controller")){if(t.has("messages")||t.has("suggestions")||t.has("threads"))try{const t=this.controller.getState();this.handleControllerStateChange(t)}catch(t){}}t.has("messages")&&this.autoScroll&&this.messages.length>0&&this.scrollToLatestMessage(),this.updateArtifactPanelResize()}scrollToLatestMessage(){requestAnimationFrame(()=>{var t;const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(".messages");e&&(e.scrollTop=e.scrollHeight)})}setupControllerIntegration(){this.controller&&this.controllerUnsubscribes.push(this.controller.on("state:changed",this.handleControllerStateChange.bind(this)),this.controller.on("message:sent",this.handleControllerMessageSent.bind(this)),this.controller.on("message:received",this.handleControllerMessageReceived.bind(this)),this.controller.on("error",this.handleControllerError.bind(this)))}cleanupControllerIntegration(){if(this.controllerUnsubscribes.length)try{this.controllerUnsubscribes.forEach(t=>{try{t()}catch(t){}})}finally{this.controllerUnsubscribes=[]}}setupUrlSync(){this.enableUrlSync&&!this._hashChangeHandler&&(this._hashChangeHandler=this.handleHashChange.bind(this),window.addEventListener("hashchange",this._hashChangeHandler),this.handleHashChange())}teardownUrlSync(){this._hashChangeHandler&&(window.removeEventListener("hashchange",this._hashChangeHandler),this._hashChangeHandler=void 0)}handleHashChange(){const t=window.location.hash.match(/^#conversation\/(.+)$/);if(t){const e=decodeURIComponent(t[1]);e!==this.activeThreadId&&this.controller&&this.controller.switchThread(e)}}handleControllerStateChange(t){var e,n,i,o,r;if(t.messages&&(this.messages=t.messages),t.threads&&(this.threads=t.threads),t.suggestions&&t.suggestions.length>0&&(this.suggestions=t.suggestions),t.currentThreadId&&(this.activeThreadId=t.currentThreadId),this.enableUrlSync&&t.currentThreadId){const e=`#conversation/${encodeURIComponent(t.currentThreadId)}`;window.location.hash!==e&&history.replaceState(null,"",e)}if(this.chatStarted=(null===(e=t.messages)||void 0===e?void 0:e.length)>0,this.isBotTyping=t.isTyping||!1,this.statusText=t.statusText,this.isQueryRunning=t.isProcessing||!1,t.uploadedFiles&&(this.uploadedFiles=t.uploadedFiles),this.enableArtifacts){const e=null===(n=t.messages)||void 0===n?void 0:n.some(t=>{var e,n;return(null===(n=null===(e=t.metadata)||void 0===e?void 0:e.artifactIds)||void 0===n?void 0:n.length)>0});e||(this.isArtifactPanelOpen=!1,this.selectedArtifact=null)}if(this.enableArtifacts&&(null===(i=t.messages)||void 0===i?void 0:i.length)){const e=[...t.messages].reverse().find(t=>"bot"===t.sender),n=null===(o=null==e?void 0:e.metadata)||void 0===o?void 0:o.artifactIds;if(null==n?void 0:n.length){const t=n[n.length-1];if((null===(r=this.selectedArtifact)||void 0===r?void 0:r.id)!==t){const e=this.getArtifactPlugin(),n=null==e?void 0:e.getArtifact(t);n&&(this.selectedArtifact=n,this.isArtifactPanelOpen=!0)}}}}handleControllerMessageSent(t){this.isQueryRunning=!0,this.isBotTyping=!0}handleControllerMessageReceived(t){}handleControllerError(t){this.isQueryRunning=!1,this.isBotTyping=!1,console.error("Controller error:",t.error)}render(){var t;const e={boxed:this.boxed,showMessages:this.showMessages,messages:this.messages,isTyping:this.isBotTyping,loadingIndicator:this.loadingIndicator,loadingText:this.statusText||this.loadingText,chatStarted:this.chatStarted,suggestions:this.suggestions,inputBox:{placeholder:this.placeholder,disabled:this.disabled||this.isQueryRunning,currentInput:this.currentInput,uploadedFiles:this.uploadedFiles,isQueryRunning:this.isQueryRunning,showSendButton:this.showSendButton,enableFileUpload:this.enableFileUpload,fileUploadItems:[{id:"upload-file",label:"Upload File",icon:"upload"},{id:"upload-url",label:"Upload from URL",icon:"link"}],enableModuleSelection:this.enableModuleSelection,moduleOptions:this.moduleSelectOptions,selectedModules:this.selectedModules,moduleSelectionLabel:this.moduleSelectionLabel,renderModuleDisplay:this.renderModuleSelectedDisplay.bind(this)},enableThreads:this.showThreads,enableThreadCreation:this.enableThreadCreation,isThreadSidebarOpen:this.showThreads&&this.isThreadSidebarOpen,threadSidebar:this.showThreads?{threads:this.threads,activeThreadId:this.activeThreadId,editingThreadId:this._editingThreadId}:void 0,isDragging:!1,enableArtifacts:this.enableArtifacts,artifactPanel:this.enableArtifacts?{artifact:this.selectedArtifact,isOpen:this.isArtifactPanelOpen,renderContent:null!==(t=this.renderArtifactContent)&&void 0!==t?t:this.getPluginArtifactRenderer()}:void 0,urlModal:this.isUrlModalOpen?{isOpen:this.isUrlModalOpen,urlInput:this.urlInput,isLoading:this.isUrlLoading,error:this.urlModalError,selectedFileName:this.selectedUrlFileName}:void 0},i={message:{onRetry:this.handleRetry.bind(this),onRetryKeydown:()=>{},onCopy:this.handleCopyMessage.bind(this),onCopyKeydown:()=>{},onFileClick:this.handleFilePreview.bind(this)},suggestion:{onClick:this.handleSuggestionClick.bind(this),onKeydown:()=>{}},inputBox:{onInput:this.handleContentEditableInput.bind(this),onKeydown:this.handleKeyDown.bind(this),onFocus:this.handleInputFocus.bind(this),onBlur:this.handleInputBlur.bind(this),onSend:this.handleSendMessage.bind(this),onStop:this.handleStopQuery.bind(this),onSendKeydown:()=>{},onFileDropdownClick:this.handleFileDropdownClick.bind(this),onModuleChange:this.handleModuleSelectionChange.bind(this),onFileRemove:this.handleFileRemove.bind(this),onFileClick:this.handleFilePreview.bind(this)},threadSidebar:this.showThreads?{onCreateNew:()=>{var t;null===(t=this.controller)||void 0===t||t.createThread("New Chat")},onSelectThread:t=>{var e;this.enableUrlSync&&history.pushState(null,"",`#conversation/${encodeURIComponent(t)}`),null===(e=this.controller)||void 0===e||e.switchThread(t)},onDeleteThread:t=>{var e;null===(e=this.controller)||void 0===e||e.deleteThread(t)},onBookmarkThread:t=>{var e;null===(e=this.controller)||void 0===e||e.bookmarkThread(t)},onRenameThread:(t,e)=>{var n;null===(n=this.controller)||void 0===n||n.renameThread(t,e),this._editingThreadId=void 0}}:void 0,fileUploadArea:{onDrop:()=>{},onDragOver:()=>{},onDragLeave:()=>{}},urlModal:this.isUrlModalOpen?{onClose:this.handleUrlModalClose.bind(this),onUrlInputChange:this.handleUrlInputChange.bind(this),onUrlInputKeydown:this.handleUrlInputKeydown.bind(this),onConfirm:this.handleUrlConfirm.bind(this),onAttachFile:this.handleUrlAttachFile.bind(this)}:void 0,artifactPanel:this.enableArtifacts?{onClose:this.handleArtifactPanelClose.bind(this),onCopy:this.handleArtifactCopy.bind(this)}:void 0,onToggleThreadSidebar:this.showThreads?this.toggleThreadSidebar.bind(this):void 0};return n`
|
|
2348
|
+
<div
|
|
2349
|
+
class="chat-container ${a({"chat-container--with-threads":this.showThreads,"chat-container--disabled":this.disabled,"chat-container--focused":this.focused,"chat-container--boxed":this.boxed})}"
|
|
2350
|
+
dir=${this.isRTL?"rtl":"ltr"}
|
|
2351
|
+
data-size="${this.size}"
|
|
2352
|
+
data-variant="${this.variant}"
|
|
2353
|
+
data-theme="${this.currentTheme}"
|
|
2354
|
+
data-mode="${this.mode}"
|
|
2355
|
+
part="chat-container">
|
|
2356
|
+
|
|
2357
|
+
${ut(e,i)}
|
|
2358
|
+
</div>
|
|
2359
|
+
|
|
2360
|
+
${ct({isOpen:this.isFilePreviewModalOpen,file:this.previewFile},{onClose:this.handleFilePreviewModalClose.bind(this)})}
|
|
2361
|
+
`}renderModuleSelectedDisplay(){const t=this.selectedModules.length;if(0===t)return n`<span class="module-display-placeholder">${this.moduleSelectionLabel}</span>`;if(1===t){const t=this.modules.find(t=>t.id===this.selectedModules[0]);return n`
|
|
2362
|
+
<span class="module-display-single">
|
|
2363
|
+
${(null==t?void 0:t.icon)?n`<nr-icon name="${t.icon}" size="small"></nr-icon>`:e}
|
|
2364
|
+
${(null==t?void 0:t.name)||this.selectedModules[0]}
|
|
2365
|
+
</span>
|
|
2366
|
+
`}return n`
|
|
2367
|
+
<span class="module-display-multiple">
|
|
2368
|
+
${t} ${v("modules selected")}
|
|
2369
|
+
</span>
|
|
2370
|
+
`}handleContentEditableInput(t){const e=t.target.textContent||"";this.currentInput=e,this.dispatchEventWithMetadata("nr-chatbot-input-changed",{metadata:{value:e}})}handleInputFocus(t){this.focused=!0,this.dispatchEventWithMetadata("nr-chatbot-input-focused",{metadata:{event:t}})}handleInputBlur(t){this.focused=!1,this.dispatchEventWithMetadata("nr-chatbot-input-blurred",{metadata:{event:t}})}clearInput(){var t;this.currentInput="";const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(".input-box__input");e&&(e.textContent="")}focusInput(){var t;const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(".input-box__input");e&&e.focus()}handleKeyDown(t){"Enter"!==t.key||t.shiftKey||(t.preventDefault(),this.handleSendMessage())}handleSendMessage(){if(!this.currentInput.trim()||this.disabled)return;if(!this.controller)return void console.warn("nr-chatbot: No controller is attached; message will not be sent.");const t=this.uploadedFiles&&this.uploadedFiles.length>0?[...this.uploadedFiles]:void 0;this.controller.sendMessage(this.currentInput.trim(),{files:t,metadata:{selectedModules:this.selectedModules}}),this.clearInput(),this.chatStarted=!0,this.dispatchEventWithMetadata("nr-chatbot-message-sent",{metadata:{text:this.currentInput}})}handleStopQuery(){var t;try{null===(t=this.controller)||void 0===t||t.stop()}catch(t){console.warn("nr-chatbot: stop failed",t)}this.dispatchEventWithMetadata("nr-chatbot-query-stopped",{metadata:{action:"stop"}})}handleRetry(t){t.text&&(this.currentInput=t.text,this.handleSendMessage())}handleCopyMessage(t){const e=t.text;if(!e)return;const n=()=>{this.dispatchEventWithMetadata("nr-chatbot-message-copied",{metadata:{messageId:t.id}})};navigator.clipboard?navigator.clipboard.writeText(e).then(n).catch(()=>{this.copyViaFallback(e,n)}):this.copyViaFallback(e,n)}copyViaFallback(t,e){const n=document.createElement("textarea");n.value=t,n.style.position="fixed",n.style.left="-9999px",n.style.top="-9999px",document.body.appendChild(n),n.focus(),n.select();try{document.execCommand("copy"),e()}catch(t){}n.remove()}handleSuggestionClick(t){this.currentInput=t.text,this.handleSendMessage(),this.dispatchEventWithMetadata("nr-chatbot-suggestion-clicked",{metadata:{suggestion:t}})}handleModuleSelectionChange(t){const e=t.detail.value;this.selectedModules=e,this.dispatchEventWithMetadata("nr-chatbot-modules-selected",{metadata:{modules:e}})}handleFileDropdownClick(t){const e=t.detail.item.id;"upload-file"===e?this.openFileDialog():"upload-url"===e&&this.openUrlModal()}openFileDialog(){const t=document.createElement("input");t.type="file",t.multiple=!0,t.accept="image/*,application/pdf,text/*,video/*,audio/*",t.addEventListener("change",t=>ft(this,void 0,void 0,function*(){var e;const n=t.target;if(n.files&&n.files.length>0){const t=Array.from(n.files);yield null===(e=this.controller)||void 0===e?void 0:e.uploadFiles(t)}})),t.click()}openUrlModal(){this.isUrlModalOpen=!0,this.urlInput="",this.urlModalError="",this.selectedUrlFileName=""}handleUrlModalClose(){this.isUrlModalOpen=!1,this.urlInput="",this.urlModalError="",this.isUrlLoading=!1,this.selectedUrlFileName=""}handleUrlInputChange(t){const e=t.target;this.urlInput=e.value,this.urlModalError=""}handleUrlInputKeydown(t){"Enter"===t.key&&(t.preventDefault(),this.handleUrlAttachFile())}handleUrlConfirm(){this.handleUrlModalClose()}handleUrlAttachFile(){return ft(this,void 0,void 0,function*(){if(this.urlInput.trim()){this.isUrlLoading=!0,this.urlModalError="";try{const t=yield fetch(this.urlInput);if(!t.ok)throw new Error(`Failed to fetch file: ${t.statusText}`);const e=yield t.blob(),n=this.urlInput.split("/").pop()||"downloaded-file",i=new File([e],n,{type:e.type});this.selectedUrlFileName=n,this.controller&&(yield this.controller.uploadFiles([i])),this.isUrlLoading=!1,setTimeout(()=>{this.handleUrlModalClose()},1e3)}catch(t){this.isUrlLoading=!1,this.urlModalError=t instanceof Error?t.message:"Failed to load file from URL"}}else this.urlModalError="Please enter a URL"})}handleFileRemove(t){var e;null===(e=this.controller)||void 0===e||e.removeFile(t)}handleFilePreview(t){this.previewFile=t,this.isFilePreviewModalOpen=!0}handleArtifactClick(t){if(!this.enableArtifacts||!this.controller)return;const e=this.getArtifactPlugin();if(!e)return;const n=e.getArtifact(t);n&&(this.selectedArtifact=n,this.isArtifactPanelOpen=!0)}handleArtifactPanelClose(){this.isArtifactPanelOpen=!1,this.selectedArtifact=null}updateArtifactPanelResize(){var t,e,n;const i=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(".artifact-panel__resize-handle"),o=null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector(".artifact-panel");if(!i||!o)return null===(n=this._artifactResizeCleanup)||void 0===n||n.call(this),void(this._artifactResizeBound=!1);if(this._artifactResizeBound)return;this._artifactResizeBound=!0;let r=!1,s=0,a=0;const l=t=>{if(!r)return;const e=t.clientX-s,n=o.parentElement,i=n?.85*n.getBoundingClientRect().width:1200,l=Number.parseInt(getComputedStyle(o).minWidth,10)||300,c=Math.max(l,Math.min(a-e,i));o.style.width=`${c}px`},c=()=>{r&&(r=!1,i.classList.remove("artifact-panel__resize-handle--active"),document.body.style.cursor="",document.body.style.userSelect="",document.removeEventListener("mousemove",l),document.removeEventListener("mouseup",c))},d=t=>{t.preventDefault(),r=!0,s=t.clientX,a=o.getBoundingClientRect().width,i.classList.add("artifact-panel__resize-handle--active"),document.body.style.cursor="col-resize",document.body.style.userSelect="none",document.addEventListener("mousemove",l),document.addEventListener("mouseup",c)};i.addEventListener("mousedown",d),this._artifactResizeCleanup=()=>{i.removeEventListener("mousedown",d),c()}}handleArtifactCopy(t){const e=t.content;e&&(navigator.clipboard?navigator.clipboard.writeText(e).catch(()=>{this.copyViaFallback(e,()=>{})}):this.copyViaFallback(e,()=>{}))}getArtifactPlugin(){var t;try{const e=null===(t=this.controller)||void 0===t?void 0:t.plugins;return e&&"function"==typeof e.get?e.get("artifact"):void 0}catch(t){return}}getPluginArtifactRenderer(){var t;try{const e=null===(t=this.controller)||void 0===t?void 0:t.plugins;if(!e||"function"!=typeof e.values)return;for(const t of e.values())if("function"==typeof t.renderArtifactContent)return e=>{const i=t.renderArtifactContent(e);if(i)return n`${l(i)}`};return}catch(t){return}}handleFilePreviewModalClose(){this.isFilePreviewModalOpen=!1,this.previewFile=null}addMessage(t){var e;const n=Object.assign({id:t.id||`msg-${Date.now()}`,sender:t.sender||D.User,text:t.text||"",timestamp:t.timestamp||(new Date).toISOString()},t);return null===(e=this.controller)||void 0===e||e.addMessage(n),this.chatStarted=!0,n}clearMessages(){this.messages=[],this.chatStarted=!1}};vt.styles=H,pt([o({type:Array})],vt.prototype,"messages",void 0),pt([o({type:String})],vt.prototype,"currentInput",void 0),pt([o({type:Boolean})],vt.prototype,"isBotTyping",void 0),pt([o({type:Boolean})],vt.prototype,"isQueryRunning",void 0),pt([o({type:Array})],vt.prototype,"suggestions",void 0),pt([o({type:Boolean})],vt.prototype,"chatStarted",void 0),pt([o({type:Boolean})],vt.prototype,"isRTL",void 0),pt([o({type:String})],vt.prototype,"size",void 0),pt([o({type:String})],vt.prototype,"variant",void 0),pt([o({type:String})],vt.prototype,"loadingIndicator",void 0),pt([o({type:String})],vt.prototype,"loadingText",void 0),pt([o({type:Boolean})],vt.prototype,"disabled",void 0),pt([o({type:String})],vt.prototype,"placeholder",void 0),pt([o({type:Boolean})],vt.prototype,"showSendButton",void 0),pt([o({type:Boolean})],vt.prototype,"autoScroll",void 0),pt([o({type:Boolean})],vt.prototype,"showThreads",void 0),pt([o({type:Boolean})],vt.prototype,"enableThreadCreation",void 0),pt([o({type:Array})],vt.prototype,"threads",void 0),pt([o({type:String})],vt.prototype,"activeThreadId",void 0),pt([o({type:String})],vt.prototype,"mode",void 0),pt([o({type:Boolean,reflect:!0})],vt.prototype,"boxed",void 0),pt([o({type:Boolean})],vt.prototype,"enableUrlSync",void 0),pt([o({type:Boolean})],vt.prototype,"showMessages",void 0),pt([o({type:Boolean})],vt.prototype,"enableFileUpload",void 0),pt([o({type:Array})],vt.prototype,"uploadedFiles",void 0),pt([o({type:Array})],vt.prototype,"actionButtons",void 0),pt([o({type:Boolean})],vt.prototype,"enableModuleSelection",void 0),pt([o({type:Array})],vt.prototype,"modules",void 0),pt([o({type:Array})],vt.prototype,"selectedModules",void 0),pt([o({type:String})],vt.prototype,"moduleSelectionLabel",void 0),pt([o({type:Boolean})],vt.prototype,"enableArtifacts",void 0),pt([o({type:Function})],vt.prototype,"renderArtifactContent",void 0),pt([o({type:Object})],vt.prototype,"controller",void 0),pt([r()],vt.prototype,"statusText",void 0),pt([r()],vt.prototype,"focused",void 0),pt([r()],vt.prototype,"isArtifactPanelOpen",void 0),pt([r()],vt.prototype,"selectedArtifact",void 0),pt([r()],vt.prototype,"isThreadSidebarOpen",void 0),pt([r()],vt.prototype,"_editingThreadId",void 0),pt([r()],vt.prototype,"isUrlModalOpen",void 0),pt([r()],vt.prototype,"urlInput",void 0),pt([r()],vt.prototype,"urlModalError",void 0),pt([r()],vt.prototype,"isUrlLoading",void 0),pt([r()],vt.prototype,"selectedUrlFileName",void 0),pt([r()],vt.prototype,"isFilePreviewModalOpen",void 0),pt([r()],vt.prototype,"previewFile",void 0),vt=pt([(t,e)=>(t.addInitializer(b),t),s("nr-chatbot")],vt);
|
|
2371
|
+
/**
|
|
2372
|
+
* @license
|
|
2373
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2374
|
+
* SPDX-License-Identifier: MIT
|
|
2375
|
+
*/
|
|
2376
|
+
class gt{constructor(){this.listeners=new Map}on(t,e){return this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(e),()=>{var n,i;null===(n=this.listeners.get(t))||void 0===n||n.delete(e),0===(null===(i=this.listeners.get(t))||void 0===i?void 0:i.size)&&this.listeners.delete(t)}}once(t,e){const n=(...i)=>{e(...i),this.off(t,n)};this.on(t,n)}off(t,e){var n;null===(n=this.listeners.get(t))||void 0===n||n.delete(e)}emit(t,e){const n=this.listeners.get(t);n&&n.forEach(n=>{try{n(e)}catch(e){console.error(`Error in event handler for "${t}":`,e)}})}removeAllListeners(t){t?this.listeners.delete(t):this.listeners.clear()}listenerCount(t){var e;return(null===(e=this.listeners.get(t))||void 0===e?void 0:e.size)||0}eventNames(){return Array.from(this.listeners.keys())}}
|
|
2377
|
+
/**
|
|
2378
|
+
* @license
|
|
2379
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2380
|
+
* SPDX-License-Identifier: MIT
|
|
2381
|
+
*/class mt extends Error{constructor(t){super(t.join(", ")),this.errors=t,this.name="ValidationError"}}
|
|
2382
|
+
/**
|
|
2383
|
+
* @license
|
|
2384
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2385
|
+
* SPDX-License-Identifier: MIT
|
|
2386
|
+
*/class bt{constructor(t,e,n,i,o){this.eventBus=e,this.ui=n,this.plugins=i,this.config=o,this.state=t}getState(){return Object.freeze(Object.assign({},this.state))}updateState(t){if(this.state=Object.assign(Object.assign({},this.state),t),this.ui.onStateChange)try{this.ui.onStateChange(this.getState())}catch(t){this.logError("Error in UI state change callback:",t)}this.eventBus.emit("state:changed",this.state),this.plugins.forEach(t=>{if(t.onStateChange)try{t.onStateChange(this.getState())}catch(t){this.logError("Error in plugin state change handler:",t)}})}addMessageToState(t){this.state.messages=[...this.state.messages,t],t.suggestions&&t.suggestions.length>0?this.state.suggestions=[...t.suggestions]:this.state.messages.length>1&&(this.state.suggestions=[]),this.config.maxMessages&&this.state.messages.length>this.config.maxMessages&&(this.state.messages=this.state.messages.slice(-this.config.maxMessages)),this.ui.onStateChange&&this.ui.onStateChange(this.getState()),this.eventBus.emit("state:changed",this.state),this.ui.scrollToBottom&&this.ui.scrollToBottom(),this.eventBus.emit("message:added",t)}updateMessageInState(t,e){this.state.messages=this.state.messages.map(n=>n.id===t?Object.assign(Object.assign({},n),e):n),this.ui.onStateChange&&this.ui.onStateChange(this.getState()),this.eventBus.emit("state:changed",this.state);const n=this.state.messages.find(e=>e.id===t);n&&this.eventBus.emit("message:updated",n)}removeMessageFromState(t){this.state.messages=this.state.messages.filter(e=>e.id!==t),this.ui.onStateChange&&this.ui.onStateChange(this.getState()),this.eventBus.emit("state:changed",this.state),this.eventBus.emit("message:deleted",t)}resetState(t){this.state=Object.assign({},t),this.updateState(this.state)}getMessages(){return[...this.state.messages]}getMessageById(t){return this.state.messages.find(e=>e.id===t)}isTyping(){return this.state.isTyping}isProcessing(){return this.state.isProcessing}setTyping(t){this.updateState({isTyping:t}),t&&this.ui.onTypingStart?this.ui.onTypingStart():!t&&this.ui.onTypingEnd&&this.ui.onTypingEnd()}setProcessing(t){this.updateState({isProcessing:t})}logError(t,e){console.error(`[StateHandler] ${t}`,e)}}
|
|
2387
|
+
/**
|
|
2388
|
+
* @license
|
|
2389
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2390
|
+
* SPDX-License-Identifier: MIT
|
|
2391
|
+
*/class yt{constructor(t,e,n){this.stateHandler=t,this.eventBus=e,this.plugins=n}createMessage(t){return Object.assign({id:this.generateId("msg"),sender:t.sender||"user",text:t.text||"",timestamp:t.timestamp||(new Date).toISOString()},t)}createUserMessage(t,e){return this.createMessage({sender:"user",text:t,metadata:e})}createBotMessage(t,e){return this.createMessage({sender:"bot",text:t,metadata:e})}addMessage(t){const e=this.createMessage(t);return this.stateHandler.addMessageToState(e),"bot"===e.sender?(this.eventBus.emit("message:received",e),this.plugins.forEach(t=>{t.onMessageReceived&&t.onMessageReceived(e)})):(this.eventBus.emit("message:sent",e),this.plugins.forEach(t=>{t.onMessageSent&&t.onMessageSent(e)})),e}updateMessage(t,e){this.stateHandler.updateMessageInState(t,e)}deleteMessage(t){this.stateHandler.removeMessageFromState(t)}clearMessages(){this.stateHandler.updateState({messages:[]})}getMessages(){return this.stateHandler.getMessages()}getMessageById(t){return this.stateHandler.getMessageById(t)}updateBotMessageText(t,e){const n=this.getMessageById(t);n&&"bot"===n.sender&&this.updateMessage(t,{text:e})}appendToBotMessage(t,e){const n=this.getMessageById(t);n&&"bot"===n.sender&&this.updateMessage(t,{text:n.text+e})}generateId(t){return`${t}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}
|
|
2392
|
+
/**
|
|
2393
|
+
* @license
|
|
2394
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2395
|
+
* SPDX-License-Identifier: MIT
|
|
2396
|
+
*/var xt=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class wt{constructor(t,e,n,i,o){this.stateHandler=t,this.eventBus=e,this.ui=n,this.config=i,this.provider=o}setProvider(t){this.provider=t}createThread(t){return xt(this,void 0,void 0,function*(){if(!this.config.enableThreads)throw new Error("Threads are not enabled");const e=this.stateHandler.getState(),n={id:this.generateId("thread"),title:t||`Chat ${e.threads.length+1}`,messages:[],createdAt:(new Date).toISOString(),updatedAt:(new Date).toISOString()};if(this.provider&&"function"==typeof this.provider.createConversation)try{const t=yield this.provider.createConversation(n.title);t&&t.id&&(n.id=String(t.id),n.conversationId=t.id)}catch(t){console.error("Error calling provider.createConversation:",t)}return this.stateHandler.updateState({threads:[n,...e.threads],currentThreadId:n.id,messages:[]}),this.eventBus.emit("thread:created",n),this.eventBus.emit("thread:selected",n),this.ui.focusInput&&setTimeout(()=>{this.ui.focusInput()},100),n})}switchThread(t){const e=this.stateHandler.getState(),n=e.threads.find(e=>e.id===t);if(!n)throw new Error(`Thread "${t}" not found`);e.currentThreadId&&this.saveCurrentThread(),this.stateHandler.updateState({currentThreadId:t,messages:[...n.messages]}),this.eventBus.emit("thread:selected",n)}bookmarkThread(t){const e=this.stateHandler.getState(),n=e.threads.find(e=>e.id===t);if(!n)throw new Error(`Thread "${t}" not found`);const i=!n.bookmarked,o=e.threads.map(e=>e.id===t?Object.assign(Object.assign({},e),{bookmarked:i}):e);this.stateHandler.updateState({threads:o}),this.eventBus.emit("thread:bookmarked",{threadId:t,bookmarked:i})}renameThread(t,e){const n=this.stateHandler.getState();if(!n.threads.find(e=>e.id===t))throw new Error(`Thread "${t}" not found`);const i=n.threads.map(n=>n.id===t?Object.assign(Object.assign({},n),{title:e,updatedAt:(new Date).toISOString()}):n);this.stateHandler.updateState({threads:i}),this.eventBus.emit("thread:renamed",{threadId:t,title:e})}deleteThread(t){const e=this.stateHandler.getState(),n=e.threads.filter(e=>e.id!==t);e.currentThreadId===t?n.length>0?(this.stateHandler.updateState({threads:n}),this.switchThread(n[0].id)):this.stateHandler.updateState({threads:n,currentThreadId:void 0,messages:[]}):this.stateHandler.updateState({threads:n}),this.eventBus.emit("thread:deleted",t)}getCurrentThread(){const t=this.stateHandler.getState();return t.threads.find(e=>e.id===t.currentThreadId)}getThreads(){return[...this.stateHandler.getState().threads]}saveCurrentThread(){const t=this.stateHandler.getState();t.currentThreadId&&this.updateThreadMessages(t.currentThreadId)}updateThreadMessages(t){const e=this.stateHandler.getState(),n=e.threads.map(n=>n.id===t?Object.assign(Object.assign({},n),{messages:[...e.messages],updatedAt:(new Date).toISOString()}):n);this.stateHandler.updateState({threads:n})}generateId(t){return`${t}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}
|
|
2397
|
+
/**
|
|
2398
|
+
* @license
|
|
2399
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2400
|
+
* SPDX-License-Identifier: MIT
|
|
2401
|
+
*/var _t=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class $t{constructor(t,e){this.stateHandler=t,this.eventBus=e}addFile(t){const e=this.stateHandler.getState();this.stateHandler.updateState({uploadedFiles:[...e.uploadedFiles,t]}),this.eventBus.emit("file:uploaded",t)}removeFile(t){const e=this.stateHandler.getState();this.stateHandler.updateState({uploadedFiles:e.uploadedFiles.filter(e=>e.id!==t)}),this.eventBus.emit("file:removed",t)}clearFiles(){this.stateHandler.updateState({uploadedFiles:[]})}getUploadedFiles(){return[...this.stateHandler.getState().uploadedFiles]}getFileById(t){return this.stateHandler.getState().uploadedFiles.find(e=>e.id===t)}createChatbotFile(t){return _t(this,void 0,void 0,function*(){return{id:this.generateId("file"),name:t.name,size:t.size,type:this.determineFileType(t.type),mimeType:t.type,uploadProgress:100}})}determineFileType(t){return t.startsWith("image/")?"image":t.startsWith("video/")?"video":t.startsWith("audio/")?"audio":t.includes("pdf")?"pdf":t.includes("text/")?"text":"document"}generateId(t){return`${t}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}
|
|
2402
|
+
/**
|
|
2403
|
+
* @license
|
|
2404
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2405
|
+
* SPDX-License-Identifier: MIT
|
|
2406
|
+
*/class kt{constructor(t,e){this.stateHandler=t,this.eventBus=e}setModules(t){this.stateHandler.updateState({modules:t})}selectModules(t){this.stateHandler.updateState({selectedModules:t}),this.eventBus.emit("module:selected",t)}toggleModule(t){const e=this.stateHandler.getState(),n=e.selectedModules.includes(t)?e.selectedModules.filter(e=>e!==t):[...e.selectedModules,t];this.selectModules(n)}getSelectedModules(){const t=this.stateHandler.getState();return(t.modules||[]).filter(e=>t.selectedModules.includes(e.id))}clearSelection(){this.stateHandler.updateState({selectedModules:[]})}}
|
|
2407
|
+
/**
|
|
2408
|
+
* @license
|
|
2409
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2410
|
+
* SPDX-License-Identifier: MIT
|
|
2411
|
+
*/class St{constructor(t){this.stateHandler=t}setSuggestions(t){this.stateHandler.updateState({suggestions:t})}clearSuggestions(){this.stateHandler.updateState({suggestions:[]})}getSuggestions(){return[...this.stateHandler.getState().suggestions]}removeSuggestion(t){const e=this.stateHandler.getState();this.stateHandler.updateState({suggestions:e.suggestions.filter(e=>e.id!==t)})}}
|
|
2412
|
+
/**
|
|
2413
|
+
* @license
|
|
2414
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2415
|
+
* SPDX-License-Identifier: MIT
|
|
2416
|
+
*/var zt=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class Pt{constructor(t,e,n,i,o,r,s){this.stateHandler=e,this.messageHandler=n,this.fileHandler=i,this.eventBus=o,this.ui=r,this.plugins=s,this.cancelRequested=!1,this.provider=t}setProvider(t){this.provider=t}stopCurrentProcessing(){this.cancelRequested=!0,this.eventBus.emit("processing:stopped")}hasProvider(){return!!this.provider&&this.provider.isConnected()}processMessage(t){return zt(this,void 0,void 0,function*(){if(this.provider){if(!this.provider.isConnected()){this.log("Provider not connected, attempting to connect...");try{yield this.provider.connect({})}catch(t){this.logError("Failed to auto-connect provider:",t)}if(!this.provider.isConnected())return void this.log("Provider is still not connected after attempt; aborting processing")}try{this.cancelRequested=!1,this.ui.onProcessingStart&&this.ui.onProcessingStart(),this.ui.onTypingStart&&this.ui.onTypingStart(),this.stateHandler.setTyping(!0),this.stateHandler.setProcessing(!0),this.eventBus.emit("processing:start");const e=this.buildContext(),n=this.provider.sendMessage(t.text,e);yield this.processStream(n)}catch(t){throw this.logError("Provider error:",t),this.eventBus.emit("error",t),t}finally{this.ui.onProcessingEnd&&this.ui.onProcessingEnd(),this.ui.onTypingEnd&&this.ui.onTypingEnd(),this.stateHandler.updateState({statusText:void 0}),this.stateHandler.setTyping(!1),this.stateHandler.setProcessing(!1),this.eventBus.emit("processing:end"),this.fileHandler.clearFiles()}}else this.log("No provider configured")})}processStream(t){return zt(this,void 0,void 0,function*(){var e;let n=null;const i=Array.from(this.plugins.values()).filter(t=>Array.isArray(t.htmlTags)),o=[];let r="",s="",a=0;if(i.length>0)for(const t of i)for(const e of t.htmlTags)a=Math.max(a,e.open.length,e.close.length);try{let l=!1;for(;!l&&!this.cancelRequested;){const c=yield t.next();if(l=c.done||!1,l||!c.value)break;const d=String(c.value),h=d.startsWith(s)?d.slice(s.length):d;s=d,r+=h;let u="",p=!1;for(;r.length;){const t=o[o.length-1];if(t){const e=t.buffer+r,i=e.indexOf(t.close);if(-1===i){t.buffer=e,r="";break}const s=e.slice(0,i),a="function"==typeof t.plugin.renderHtmlBlock?t.plugin.renderHtmlBlock(t.name,s):"";if(a)if(t.hasPlaceholder&&n){const t=/<div data-placeholder-id="[^"]*">[\s\S]*?<\/div>/;t.test(n.text)?(n.text=n.text.replace(t,a),this.messageHandler.updateMessage(n.id,{text:n.text})):(u+=a,p=!0)}else u+=a,p=!0;o.pop(),r=e.slice(i+t.close.length);continue}if(0===i.length){u+=r,r="";break}let e=null;for(const t of i)for(const n of t.htmlTags){const i=r.indexOf(n.open);-1!==i&&(!e||i<e.idx)&&(e={idx:i,plugin:t,name:n.name,open:n.open,close:n.close})}if(!e){if(a>0&&r.length>a-1){const t=r.length-(a-1);u+=r.slice(0,t),r=r.slice(t)}break}{u+=r.slice(0,e.idx);let t=!1;if("function"==typeof e.plugin.renderHtmlBlockPlaceholder){const n=e.plugin.renderHtmlBlockPlaceholder(e.name);n&&(u+=n,p=!0,t=!0)}o.push({plugin:e.plugin,name:e.name,open:e.open,close:e.close,buffer:"",hasPlaceholder:t}),r=r.slice(e.idx+e.open.length)}}if(u)for(const t of this.plugins.values()){!(Array.isArray(t.htmlTags)&&t.htmlTags.length>0)&&t.afterReceive&&(u=yield t.afterReceive(u))}const f=p||/<\w+[^>]*>/.test(u);n?u&&(this.messageHandler.appendToBotMessage(n.id,u),n.text+=u,f&&!(null===(e=n.metadata)||void 0===e?void 0:e.renderAsHtml)&&this.messageHandler.updateMessage(n.id,{metadata:Object.assign(Object.assign({},n.metadata||{}),{renderAsHtml:!0})})):(n=this.messageHandler.createBotMessage(u,f?{renderAsHtml:!0}:void 0),this.stateHandler.addMessageToState(n),this.ui.onTypingEnd&&this.ui.onTypingEnd(),this.stateHandler.setTyping(!1))}if(!this.cancelRequested&&n&&(r&&this.messageHandler.appendToBotMessage(n.id,r),o.length>0)){const t=o.map(t=>t.open+t.buffer).join("");t&&this.messageHandler.appendToBotMessage(n.id,t)}}catch(t){throw this.logError("Error processing stream:",t),t}})}buildContext(){const t=this.stateHandler.getState(),e=t.currentThreadId?t.threads.find(e=>e.id===t.currentThreadId):void 0;return console.log("[ProviderService] buildContext state.uploadedFiles:",t.uploadedFiles),{messages:t.messages,metadata:t.metadata,selectedModules:t.selectedModules,currentThread:e,uploadedFiles:t.uploadedFiles}}uploadFileToProvider(t){return zt(this,void 0,void 0,function*(){var e,n;if(!(null===(n=null===(e=this.provider)||void 0===e?void 0:e.capabilities)||void 0===n?void 0:n.fileUpload)||!this.provider.uploadFile)throw new Error("Provider does not support file upload");const i=this.buildContext();return yield this.provider.uploadFile(t,i)})}getCapabilities(){var t;return(null===(t=this.provider)||void 0===t?void 0:t.capabilities)||{streaming:!1,fileUpload:!1,contextWindow:0}}log(t,...e){console.log(`[ProviderService] ${t}`,...e)}logError(t,e){console.error(`[ProviderService] ${t}`,e)}}
|
|
2417
|
+
/**
|
|
2418
|
+
* @license
|
|
2419
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2420
|
+
* SPDX-License-Identifier: MIT
|
|
2421
|
+
*/var Tt=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class Mt{constructor(t){this.validators=[],this.validators=t.validators||[]}validateMessage(t){return Tt(this,void 0,void 0,function*(){const e=[],n=[];t.trim()||e.push("Message cannot be empty");for(const i of this.validators)try{(yield i.validator(t))||(e.push(i.errorMessage),i.warningMessage&&n.push(i.warningMessage))}catch(t){this.logError("Validation error:",t),e.push("Validation failed")}return{isValid:0===e.length,errors:e,warnings:n}})}validateFile(t,e){const n=[],i=(null==e?void 0:e.maxFileSize)||10485760;if(t.size>i&&n.push(`File size exceeds maximum allowed (${this.formatFileSize(i)})`),(null==e?void 0:e.allowedTypes)&&e.allowedTypes.length>0){e.allowedTypes.some(e=>e.startsWith(".")?t.name.toLowerCase().endsWith(e.toLowerCase()):t.type.includes(e))||n.push(`File type not allowed. Allowed types: ${e.allowedTypes.join(", ")}`)}return{isValid:0===n.length,errors:n,warnings:[]}}addValidator(t){this.validators.push(t)}removeValidator(t){this.validators=this.validators.filter(e=>e.id!==t)}clearValidators(){this.validators=[]}getValidators(){return[...this.validators]}formatFileSize(t){if(0===t)return"0 Bytes";const e=Math.floor(Math.log(t)/Math.log(1024));return Math.round(t/Math.pow(1024,e)*100)/100+" "+["Bytes","KB","MB","GB"][e]}logError(t,e){console.error(`[ValidationService] ${t}`,e)}}
|
|
2422
|
+
/**
|
|
2423
|
+
* @license
|
|
2424
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2425
|
+
* SPDX-License-Identifier: MIT
|
|
2426
|
+
*/var Et=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class Ct{constructor(t,e,n){this.stateHandler=e,this.config=n,this.storage=t,this.setupAutoSave()}setStorage(t){this.storage=t,this.setupAutoSave()}saveState(){return Et(this,arguments,void 0,function*(t="chatbot-state"){if(!this.storage)throw new Error("No storage configured");try{const e=this.stateHandler.getState();yield this.storage.save(t,e),this.log("State saved to storage")}catch(t){throw this.logError("Error saving to storage:",t),t}})}loadState(){return Et(this,arguments,void 0,function*(t="chatbot-state"){if(!this.storage)throw new Error("No storage configured");try{const e=yield this.storage.load(t);e&&(this.stateHandler.updateState(e),this.log("State loaded from storage"))}catch(t){throw this.logError("Error loading from storage:",t),t}})}clearStorage(){return Et(this,void 0,void 0,function*(){if(!this.storage)throw new Error("No storage configured");try{yield this.storage.clear(),this.log("Storage cleared")}catch(t){throw this.logError("Error clearing storage:",t),t}})}setupAutoSave(){this.autoSaveTimer&&clearInterval(this.autoSaveTimer),this.config.autoSaveInterval&&this.storage&&(this.autoSaveTimer=setInterval(()=>{this.saveState().catch(t=>{this.logError("Auto-save failed:",t)})},this.config.autoSaveInterval))}stopAutoSave(){this.autoSaveTimer&&(clearInterval(this.autoSaveTimer),this.autoSaveTimer=void 0)}startAutoSave(t){this.config.autoSaveInterval=t,this.setupAutoSave()}hasStorage(){return!!this.storage}destroy(){this.stopAutoSave()}log(t){console.log(`[StorageService] ${t}`)}logError(t,e){console.error(`[StorageService] ${t}`,e)}}
|
|
2427
|
+
/**
|
|
2428
|
+
* @license
|
|
2429
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2430
|
+
* SPDX-License-Identifier: MIT
|
|
2431
|
+
*/var It=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class Ot{constructor(t){this.plugins=new Map,t&&t.forEach(t=>this.registerPlugin(t))}registerPlugin(t,e){if(this.plugins.has(t.id))this.log(`Plugin "${t.id}" is already registered, skipping`);else if(this.plugins.set(t.id,t),this.log(`Registered plugin: ${t.name} v${t.version}`),t.onInit&&e)try{t.onInit(e)}catch(e){this.logError(`Error initializing plugin "${t.id}":`,e)}}unregisterPlugin(t){const e=this.plugins.get(t);if(e&&e.onDestroy)try{e.onDestroy()}catch(e){this.logError(`Error destroying plugin "${t}":`,e)}this.plugins.delete(t),this.log(`Unregistered plugin: ${t}`)}getPlugin(t){return this.plugins.get(t)}getAllPlugins(){return Array.from(this.plugins.values())}hasPlugin(t){return this.plugins.has(t)}getPluginsMap(){return this.plugins}executeHook(t,...e){return It(this,void 0,void 0,function*(){for(const n of this.plugins.values()){const i=n[t];if("function"==typeof i)try{yield i(...e)}catch(e){this.logError(`Error executing hook "${String(t)}" on plugin "${n.id}":`,e)}}})}clearPlugins(){this.plugins.forEach((t,e)=>{this.unregisterPlugin(e)}),this.plugins.clear()}getPluginCount(){return this.plugins.size}log(t){console.log(`[PluginService] ${t}`)}logError(t,e){console.error(`[PluginService] ${t}`,e)}}const Rt=["ar","fr"],jt="__nuraly_localization__";!function(){if(globalThis[jt])return globalThis[jt];const t=R({sourceLocale:"en",targetLocales:Rt,loadLocale:t=>import(`../../locales/generated/${t}.js`)});globalThis[jt]=t}();
|
|
2432
|
+
/**
|
|
2433
|
+
* @license
|
|
2434
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2435
|
+
* SPDX-License-Identifier: MIT
|
|
2436
|
+
*/
|
|
2437
|
+
var At=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class Dt{constructor(t={}){this.plugins=new Map,this.config=t,this.ui=t.ui||{},this.eventBus=new gt,this.pluginService=new Ot,this.plugins=this.pluginService.getPluginsMap(),t.plugins&&t.plugins.forEach(t=>this.pluginService.registerPlugin(t,this));const e=this.initializeState(t);if(this.stateHandler=new bt(e,this.eventBus,this.ui,this.plugins,this.config),this.messageHandler=new yt(this.stateHandler,this.eventBus,this.plugins),this.threadHandler=new wt(this.stateHandler,this.eventBus,this.ui,this.config,t.provider),this.fileHandler=new $t(this.stateHandler,this.eventBus),this.moduleHandler=new kt(this.stateHandler,this.eventBus),this.suggestionHandler=new St(this.stateHandler),this.providerService=new Pt(t.provider,this.stateHandler,this.messageHandler,this.fileHandler,this.eventBus,this.ui,this.plugins),this.validationService=new Mt(this.config),this.storageService=new Ct(t.storage,this.stateHandler,this.config),t.provider){const e=t.provider;queueMicrotask(()=>{this.initializeProvider(e)})}this.setupLifecycleHooks()}initializeProvider(t){return At(this,void 0,void 0,function*(){try{t.isConnected()||(yield t.connect({})),yield this.autoLoadConversations(t)}catch(t){this.logError("Failed to connect provider:",t)}})}initializeState(t){const e=t.initialMessages?t.initialMessages.map(t=>this.processMessageThroughPlugins(t)):[];return{messages:e,threads:t.initialThreads||[],modules:t.enableModules?[]:void 0,selectedModules:[],uploadedFiles:[],suggestions:t.initialSuggestions||[],isTyping:!1,isProcessing:!1,currentThreadId:void 0,metadata:t.metadata||{}}}processMessageThroughPlugins(t){if(!t.text||"string"!=typeof t.text)return t;const e=Array.from(this.plugins.values()).filter(t=>Array.isArray(t.htmlTags)&&t.htmlTags.length>0);if(0===e.length)return t;let n=t.text,i=!1;for(const t of e){const e=t.htmlTags;for(const o of e){const e=o.open,r=o.close;let s=0;for(;;){const a=n.indexOf(e,s);if(-1===a)break;const l=a+e.length,c=n.indexOf(r,l);if(-1===c){s=l;continue}const d=n.substring(l,c);let h="";if("function"==typeof t.renderHtmlBlock)try{h=t.renderHtmlBlock(o.name,d)}catch(e){console.error(`[ChatbotCore] Error rendering HTML block for plugin ${t.id}:`,e)}h?(n=n.substring(0,a)+h+n.substring(c+r.length),i=!0,s=a+h.length):s=c+r.length}}}return i?Object.assign(Object.assign({},t),{text:n,metadata:Object.assign(Object.assign({},t.metadata),{renderAsHtml:!0})}):t}processRestoredMessagesForPlugins(){const t=this.stateHandler.getState();if(t.messages&&0!==t.messages.length)for(const e of t.messages)"bot"===e.sender&&this.plugins.forEach(t=>{if(t.onMessageReceived)try{t.onMessageReceived(e)}catch(t){}})}setupLifecycleHooks(){this.onBeforeInit(),this.onReady().catch(t=>{this.logError("Error during initialization:",t)})}onBeforeInit(){this.log("Initializing chatbot controller...")}onReady(){return At(this,void 0,void 0,function*(){this.log("Chatbot controller ready");try{const t=this.stateHandler.getState(),e=t.messages&&t.messages.length>0?t.messages[0]:void 0;e&&"bot"===e.sender&&e.introduction&&Array.isArray(e.suggestions)&&e.suggestions.length>0&&this.suggestionHandler.setSuggestions(e.suggestions)}catch(t){this.logError("Error initializing suggestions from initial messages:",t)}this.processRestoredMessagesForPlugins(),this.ui.onStateChange&&this.ui.onStateChange(this.getState()),this.emit("ready",this.stateHandler.getState())})}onDestroy(){this.log("Destroying chatbot controller..."),this.storageService.stopAutoSave(),this.pluginService.clearPlugins(),this.eventBus.removeAllListeners()}updateState(t){this.stateHandler.updateState(t)}sendMessage(t){return At(this,arguments,void 0,function*(t,e={}){this.log("Sending message:",t);try{const n=this.stateHandler.getState();this.config.enableThreads&&!n.currentThreadId&&(yield this.threadHandler.createThread("New Chat"));const i=yield this.beforeMessageSent(t,e);if(!e.skipValidation){const t=yield this.validationService.validateMessage(i);if(!t.isValid){const e=new mt(t.errors);throw this.handleValidationError(e),e}}const o=this.messageHandler.createUserMessage(i,e.metadata);e.files&&(o.files=e.files),this.messageHandler.addMessage(o);const r=this.stateHandler.getState();return(e.threadId||r.currentThreadId)&&this.threadHandler.updateThreadMessages(e.threadId||r.currentThreadId),yield this.afterMessageSent(o),this.providerService.processMessage(o).catch(t=>{this.logError("Error processing with provider:",t)}),o}catch(t){throw this.handleError(t),t}})}stop(){this.providerService.stopCurrentProcessing()}addMessage(t){const e=this.messageHandler.createMessage(t),n="bot"===e.sender?this.processMessageThroughPlugins(e):e;return this.messageHandler.addMessage(n),n}updateMessage(t,e){this.messageHandler.updateMessage(t,e)}deleteMessage(t){this.messageHandler.deleteMessage(t)}clearMessages(){this.updateState({messages:[]})}getMessages(){return this.stateHandler.getState().messages}uploadFiles(t){return At(this,void 0,void 0,function*(){if(!this.config.enableFileUpload)throw new Error("File upload is not enabled");let e=t;if(!e&&this.ui.openFileDialog&&(e=yield this.ui.openFileDialog()),!e||0===e.length)return[];const n=[];for(const t of e)try{const e=yield this.validationService.validateFile(t,{maxFileSize:this.config.maxFileSize,allowedTypes:this.config.allowedFileTypes});if(!e.isValid){this.ui.showNotification&&this.ui.showNotification(e.errors[0]||"File validation failed","error");continue}const i=yield this.fileHandler.createChatbotFile(t),o=yield this.providerService.uploadFileToProvider(t);o&&Object.assign(i,o),n.push(i),this.fileHandler.addFile(i),this.ui.showFilePreview&&this.ui.showFilePreview(i)}catch(e){this.logError("Error uploading file:",e),this.ui.showNotification&&this.ui.showNotification(`Failed to upload ${t.name}`,"error")}return n})}removeFile(t){this.fileHandler.removeFile(t)}clearFiles(){this.fileHandler.clearFiles()}getUploadedFiles(){return this.stateHandler.getState().uploadedFiles}createThread(t){return At(this,void 0,void 0,function*(){return yield this.threadHandler.createThread(t)})}switchThread(t){this.threadHandler.switchThread(t),this.processRestoredMessagesForPlugins()}deleteThread(t){this.threadHandler.deleteThread(t)}renameThread(t,e){this.threadHandler.renameThread(t,e)}bookmarkThread(t){this.threadHandler.bookmarkThread(t)}getCurrentThread(){const t=this.stateHandler.getState();return t.threads.find(e=>e.id===t.currentThreadId)}getThreads(){return this.stateHandler.getState().threads}setModules(t){this.moduleHandler.setModules(t)}selectModules(t){this.moduleHandler.selectModules(t)}toggleModule(t){this.moduleHandler.toggleModule(t)}getSelectedModules(){return this.moduleHandler.getSelectedModules()}setSuggestions(t){this.suggestionHandler.setSuggestions(t)}clearSuggestions(){this.suggestionHandler.clearSuggestions()}beforeMessageSent(t,e){return At(this,void 0,void 0,function*(){let e=t;for(const t of this.plugins.values())t.beforeSend&&(e=yield t.beforeSend(e));return e})}afterMessageSent(t){return At(this,void 0,void 0,function*(){this.log("Message sent:",t)})}beforeProviderCall(t){return At(this,void 0,void 0,function*(){this.log("Calling provider for message:",t.id)})}afterProviderCall(){return At(this,void 0,void 0,function*(){this.log("Provider call completed")})}handleProviderError(t){return At(this,void 0,void 0,function*(){this.logError("Provider error:",t);const e=this.messageHandler.createMessage({sender:D.Bot,text:"Sorry, there was an error processing your request.",state:B.Error,timestamp:(new Date).toISOString()});this.messageHandler.addMessage(e),this.ui.showNotification&&this.ui.showNotification("Failed to process message","error"),this.emit("provider:error",t),yield this.pluginService.executeHook("onError",t)})}handleValidationError(t){this.logError("Validation error:",t),this.ui.showNotification&&this.ui.showNotification(t.errors[0],"error"),this.emit("validation:error",t)}handleError(t){this.logError("Error:",t),this.emit("error",t),this.plugins.forEach(e=>{e.onError&&e.onError(t)})}registerPlugin(t){this.pluginService.registerPlugin(t,this)}unregisterPlugin(t){this.pluginService.unregisterPlugin(t)}getPlugin(t){return this.pluginService.getPlugin(t)}setProvider(t){this.providerService.setProvider(t),t.isConnected()?(this.autoLoadConversations(t).catch(t=>{this.logError("Failed to auto-load conversations:",t)}),this.emit("provider:connected",t.id)):t.connect({}).then(()=>At(this,void 0,void 0,function*(){yield this.autoLoadConversations(t),this.emit("provider:connected",t.id)})).catch(t=>{this.logError("Failed to connect provider:",t)})}setStorage(t){this.storageService.setStorage(t)}saveToStorage(){return At(this,arguments,void 0,function*(t="chatbot-state"){yield this.storageService.saveState(t)})}loadFromStorage(){return At(this,arguments,void 0,function*(t="chatbot-state"){yield this.storageService.loadState(t);const e=this.stateHandler.getState();if(e.messages&&e.messages.length>0){const t=e.messages.map(t=>this.processMessageThroughPlugins(t));this.stateHandler.updateState({messages:t}),this.processRestoredMessagesForPlugins()}})}on(t,e){return this.eventBus.on(t,e)}emit(t,e){this.eventBus.emit(t,e)}getState(){return this.stateHandler.getState()}setState(t){t.messages&&Array.isArray(t.messages)&&(t.messages=t.messages.map(t=>this.processMessageThroughPlugins(t))),t.threads&&Array.isArray(t.threads)&&(t.threads=t.threads.map(t=>Object.assign(Object.assign({},t),{messages:t.messages.map(t=>this.processMessageThroughPlugins(t))}))),this.updateState(t),t.messages&&this.processRestoredMessagesForPlugins()}loadConversations(t){const e=t.map(t=>Object.assign(Object.assign({},t),{messages:t.messages.map(t=>this.processMessageThroughPlugins(t))}));this.updateState({threads:e,currentThreadId:e.length>0?e[0].id:void 0,messages:e.length>0?e[0].messages:[]}),this.processRestoredMessagesForPlugins()}autoLoadConversations(t){return At(this,void 0,void 0,function*(){if(t&&"function"==typeof t.loadConversations)try{this.log("Auto-loading conversations from provider...");const e=yield t.loadConversations();if(Array.isArray(e)&&e.length>0){this.log(`Loaded ${e.length} conversation summaries`);const n=[];if("function"==typeof t.loadConversation)for(const i of e)try{const e=yield t.loadConversation(i.id);if(e){const t={id:e.id,title:e.title,messages:e.messages||[],createdAt:e.createdAt,updatedAt:e.updatedAt};n.push(t)}}catch(t){this.logError(`Failed to load conversation ${i.id}:`,t)}else for(const t of e){const e={id:t.id,title:t.title,messages:[],createdAt:t.createdAt,updatedAt:t.updatedAt};n.push(e)}n.length>0&&(this.log(`Successfully loaded ${n.length} conversations`),this.loadConversations(n))}else this.log("No conversations to load from provider")}catch(t){this.logError("Failed to auto-load conversations from provider:",t)}})}setUICallbacks(t){this.ui=Object.assign(Object.assign({},this.ui),t)}getConfig(){return Object.freeze(Object.assign({},this.config))}updateConfig(t){this.config=Object.assign(Object.assign({},this.config),t)}setTyping(t){this.updateState({isTyping:t}),this.emit(t?"typing:start":"typing:end")}setStatusText(t){this.updateState({statusText:t})}clearStatusText(){this.updateState({statusText:void 0})}getContext(){const t=this.stateHandler.getState();return{messages:t.messages,currentThread:this.getCurrentThread(),selectedModules:t.selectedModules,metadata:t.metadata,uploadedFiles:t.uploadedFiles}}destroy(){this.onDestroy()}generateId(t){return`${t}_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}formatFileSize(t){return t<1024?`${t} B`:t<1048576?`${(t/1024).toFixed(2)} KB`:`${(t/1048576).toFixed(2)} MB`}log(...t){this.config.debug&&console.log("[ChatbotCore]",...t)}logError(...t){console.error("[ChatbotCore]",...t)}}
|
|
2438
|
+
/**
|
|
2439
|
+
* @license
|
|
2440
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2441
|
+
* SPDX-License-Identifier: MIT
|
|
2442
|
+
*/var Ft=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})},Nt=function(t){return this instanceof Nt?(this.v=t,this):new Nt(t)},Lt=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),r=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function s(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){r.push([t,e,n,i])>1||a(t,e)})},e&&(i[t]=e(i[t])))}function a(t,e){try{(n=o[t](e)).value instanceof Nt?Promise.resolve(n.value.v).then(l,c):d(r[0][2],n)}catch(t){d(r[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),r.shift(),r.length&&a(r[0][0],r[0][1])}};class Bt{constructor(){this.id="openai",this.name="OpenAI",this.capabilities={streaming:!0,fileUpload:!0,modules:!0,functions:!0,imageGeneration:!0},this.apiKey="",this.apiUrl="https://api.openai.com/v1",this.model="gpt-4",this.temperature=.7,this.connected=!1}connect(t){return Ft(this,void 0,void 0,function*(){var e;if(!t.apiKey)throw new Error("OpenAI API key is required");this.apiKey=t.apiKey,this.apiUrl=t.apiUrl||this.apiUrl,this.model=t.model||this.model,this.temperature=null!==(e=t.temperature)&&void 0!==e?e:this.temperature,this.maxTokens=t.maxTokens;try{const t=yield fetch(`${this.apiUrl}/models`,{headers:{Authorization:`Bearer ${this.apiKey}`}});if(!t.ok)throw new Error(`OpenAI connection failed: ${t.statusText}`);this.connected=!0,console.log("[OpenAIProvider] Connected successfully")}catch(t){throw this.connected=!1,t}})}disconnect(){return Ft(this,void 0,void 0,function*(){this.connected=!1,console.log("[OpenAIProvider] Disconnected")})}isConnected(){return this.connected}sendMessage(t,e){return Lt(this,arguments,function*(){var n,i,o;if(!this.connected)throw new Error("Provider not connected");const r=this.buildMessages(t,e),s=yield Nt(fetch(`${this.apiUrl}/chat/completions`,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify({model:this.model,messages:r,temperature:this.temperature,max_tokens:this.maxTokens,stream:!0})}));if(!s.ok)throw new Error(`OpenAI API error: ${s.statusText}`);if(!s.body)throw new Error("Response body is null");const a=s.body.getReader(),l=new TextDecoder;let c="";try{for(;;){const{done:t,value:e}=yield Nt(a.read());if(t)break;c+=l.decode(e,{stream:!0});const r=c.split("\n");c=r.pop()||"";for(const t of r)if(""!==t.trim()&&"data: [DONE]"!==t.trim()&&t.startsWith("data: ")){const e=t.slice(6);try{const t=null===(o=null===(i=null===(n=JSON.parse(e).choices)||void 0===n?void 0:n[0])||void 0===i?void 0:i.delta)||void 0===o?void 0:o.content;t&&(yield yield Nt(t))}catch(t){console.error("Error parsing SSE data:",t)}}}}finally{a.releaseLock()}})}getAvailableModules(){return Ft(this,void 0,void 0,function*(){return[{id:"web-search",name:"Web Search",description:"Search the web for information",icon:"search",enabled:!0},{id:"code-interpreter",name:"Code Interpreter",description:"Execute Python code",icon:"code",enabled:!0},{id:"dalle",name:"DALL-E",description:"Generate images",icon:"image",enabled:!0}]})}callModule(t,e){return Ft(this,void 0,void 0,function*(){return console.log(`[OpenAIProvider] Calling module: ${t}`,e),{success:!0,result:"Module executed"}})}uploadFile(t){return Ft(this,void 0,void 0,function*(){const e=new FormData;e.append("file",t),e.append("purpose","assistants");const n=yield fetch(`${this.apiUrl}/files`,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`},body:e});if(!n.ok)throw new Error(`File upload failed: ${n.statusText}`);const i=yield n.json();return{id:i.id,name:t.name,size:t.size,type:this.determineFileType(t.type),mimeType:t.type,url:i.url}})}onError(t){console.error("[OpenAIProvider] Error:",t)}buildMessages(t,e){const n=[],i=e.messages.slice(-10);for(const t of i)n.push({role:"user"===t.sender?"user":"assistant",content:t.text});return n.find(e=>"user"===e.role&&e.content===t)||n.push({role:"user",content:t}),n}determineFileType(t){return t.startsWith("image/")?"image":t.startsWith("video/")?"video":t.startsWith("audio/")?"audio":"document"}}
|
|
2443
|
+
/**
|
|
2444
|
+
* @license
|
|
2445
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2446
|
+
* SPDX-License-Identifier: MIT
|
|
2447
|
+
*/var Ut=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})},Wt=function(t){return this instanceof Wt?(this.v=t,this):new Wt(t)},Ht=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),r=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function s(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){r.push([t,e,n,i])>1||a(t,e)})},e&&(i[t]=e(i[t])))}function a(t,e){try{(n=o[t](e)).value instanceof Wt?Promise.resolve(n.value.v).then(l,c):d(r[0][2],n)}catch(t){d(r[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),r.shift(),r.length&&a(r[0][0],r[0][1])}};class Jt{constructor(){this.id="custom-api",this.name="Custom API",this.capabilities={streaming:!0,fileUpload:!1,modules:!1,functions:!1},this.apiUrl="",this.headers={},this.connected=!1}connect(t){return Ut(this,void 0,void 0,function*(){if(!t.apiUrl)throw new Error("API URL is required");this.apiUrl=t.apiUrl,this.headers=Object.assign({},t.headers),this.headers["Content-Type"]||(this.headers["Content-Type"]="application/json"),t.apiKey&&(this.headers.Authorization=`Bearer ${t.apiKey}`),this.connected=!0,console.log("[CustomAPIProvider] Connected")})}disconnect(){return Ut(this,void 0,void 0,function*(){this.connected=!1,console.log("[CustomAPIProvider] Disconnected")})}isConnected(){return this.connected}sendMessage(t,e){return Ht(this,arguments,function*(){var n;if(!this.connected)return yield yield Wt(this.formatError("Provider not connected","Please check your connection settings.")),yield Wt(void 0);try{const i=this.buildPayload(t,e);let o,r;if(!(null===(n=this.headers["Content-Type"])||void 0===n?void 0:n.includes("multipart/form-data"))||"object"!=typeof i||i instanceof FormData)i instanceof FormData?(o=i,r=Object.assign({},this.headers),delete r["Content-Type"]):(o=JSON.stringify(i),r=this.headers);else{const t=new FormData;for(const[e,n]of Object.entries(i))null!=n&&t.append(e,"object"==typeof n?JSON.stringify(n):String(n));o=t,r=Object.assign({},this.headers),delete r["Content-Type"]}const s=yield Wt(fetch(this.apiUrl,{method:"POST",headers:r,body:o}));if(!s.ok){const t=yield Wt(s.text().catch(()=>s.statusText));return yield yield Wt(this.formatError(`${s.status} ${s.statusText}`,t||"The server returned an error. Please try again.")),yield Wt(void 0)}if(!s.body)return yield yield Wt(this.formatError("Response Error","The server response body is empty.")),yield Wt(void 0);const a=s.headers.get("content-type");if((null==a?void 0:a.includes("text/event-stream"))||(null==a?void 0:a.includes("stream"))||(null==a?void 0:a.includes("text/plain"))){const t=this.handleStreamResponse(s);let e=yield Wt(t.next());for(;!e.done;)yield yield Wt(e.value),e=yield Wt(t.next())}else try{const t=yield Wt(s.json());yield yield Wt(this.extractMessage(t))}catch(t){yield yield Wt(this.formatError("Parse Error","Failed to parse the server response."))}}catch(t){const e=t instanceof Error?t.message:String(t);yield yield Wt(this.formatError("Network Error",e)),this.onError(t instanceof Error?t:new Error(String(t)))}})}handleStreamResponse(t){return Ht(this,arguments,function*(){const e=t.body.getReader(),n=new TextDecoder;let i="";try{for(;;){const{done:t,value:o}=yield Wt(e.read());if(t)break;i+=n.decode(o,{stream:!0}),yield yield Wt(i)}i.length>0&&(yield yield Wt(i))}catch(t){const e=t instanceof Error?t.message:String(t);yield yield Wt("\n\n"+this.formatError("Streaming Error",e)),this.onError(t instanceof Error?t:new Error(String(t)))}finally{e.releaseLock()}})}buildPayload(t,e){return{userMessage:t,variables:e.metadata||{},stream:!0}}extractMessage(t){return t.message||t.text||t.response||JSON.stringify(t)}formatError(t,e){return`[ERROR_START][ERROR_TITLE_START]${t}[ERROR_TITLE_END]${e}[ERROR_END]`}onError(t){console.error("[CustomAPIProvider] Error:",t)}}
|
|
2448
|
+
/**
|
|
2449
|
+
* @license
|
|
2450
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2451
|
+
* SPDX-License-Identifier: MIT
|
|
2452
|
+
*/var qt=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})},Vt=function(t){return this instanceof Vt?(this.v=t,this):new Vt(t)},Gt=function(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e,n=t[Symbol.asyncIterator];return n?n.call(t):(t="function"==typeof __values?__values(t):t[Symbol.iterator](),e={},i("next"),i("throw"),i("return"),e[Symbol.asyncIterator]=function(){return this},e);function i(n){e[n]=t[n]&&function(e){return new Promise(function(i,o){(function(t,e,n,i){Promise.resolve(i).then(function(e){t({value:e,done:n})},e)})(i,o,(e=t[n](e)).done,e.value)})}}},Kt=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),r=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function s(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){r.push([t,e,n,i])>1||a(t,e)})},e&&(i[t]=e(i[t])))}function a(t,e){try{(n=o[t](e)).value instanceof Vt?Promise.resolve(n.value.v).then(l,c):d(r[0][2],n)}catch(t){d(r[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),r.shift(),r.length&&a(r[0][0],r[0][1])}};const Yt=["That's an interesting question! Let me think about that...","I understand what you're asking. Here's what I think:","Great point! Based on what you've told me, I would suggest:","I'd be happy to help with that. Let me explain:","That's a common question. The answer is:","I see where you're coming from. Let me clarify:","Excellent question! Here's my perspective:","I can definitely help you with that. Consider this:"],Xt={hello:["Hello! π How can I help you today?","Hi there! What can I do for you?","Hey! Great to see you. What's on your mind?"],help:["I'm here to help! You can ask me anything. Try asking about features, getting started, or technical questions.","I can assist with various topics. What do you need help with?","Sure! I'm ready to help. What would you like to know?"],bye:["Goodbye! Feel free to come back anytime! π","See you later! Have a great day!","Bye! It was nice chatting with you!"],thanks:["You're welcome! Happy to help! π","Glad I could help!","Anytime! That's what I'm here for!"],how:["Great question! Here's how it works: First, you need to understand the basics. Then, you can dive deeper into the specifics.","Let me explain the process step by step...","That's actually quite straightforward. Let me break it down for you:"],what:["Good question! Let me explain what that means...","That refers to a concept that's important to understand. Here's the breakdown:","Interesting topic! Here's what you need to know:"],why:["That's because of several factors. Let me explain the reasoning:","Great question! The main reason is that it provides better functionality and user experience.","There are multiple reasons for this. The primary one is:"]};class Qt{constructor(t={}){var e,n,i,o,r,s,a,l,c,d,h,u;this.id="mock-provider",this.name="Mock Provider",this.capabilities={streaming:!0,fileUpload:!0,modules:!1,functions:!0},this.messageCount=0,this.connected=!1,this.config={delay:null!==(e=t.delay)&&void 0!==e?e:800,streaming:null!==(n=t.streaming)&&void 0!==n&&n,streamingSpeed:null!==(i=t.streamingSpeed)&&void 0!==i?i:3,streamingInterval:null!==(o=t.streamingInterval)&&void 0!==o?o:50,contextualResponses:null===(r=t.contextualResponses)||void 0===r||r,echoMode:null!==(s=t.echoMode)&&void 0!==s&&s,customResponses:null!==(a=t.customResponses)&&void 0!==a?a:[],errorRate:null!==(l=t.errorRate)&&void 0!==l?l:0,useHistory:null===(c=t.useHistory)||void 0===c||c,simulateToolCalls:null!==(d=t.simulateToolCalls)&&void 0!==d&&d,toolCallNames:null!==(h=t.toolCallNames)&&void 0!==h?h:["search_web","get_weather","run_code"],toolCallDelay:null!==(u=t.toolCallDelay)&&void 0!==u?u:1500}}connect(t){return qt(this,void 0,void 0,function*(){yield this.delay(100),this.connected=!0,console.log("π€ Mock Provider connected")})}disconnect(){return qt(this,void 0,void 0,function*(){this.connected=!1,console.log("π€ Mock Provider disconnected")})}isConnected(){return this.connected}sendMessage(t,e){return Kt(this,arguments,function*(){var n,i,o,r,s,a;if(this.messageCount++,Math.random()<this.config.errorRate)throw yield Vt(this.delay(this.config.delay/2)),new Error("Simulated API error for testing");if(yield Vt(this.delay(this.config.delay)),this.config.simulateToolCalls){const t=this.config.toolCallNames,e=1+Math.floor(Math.random()*Math.min(t.length,3));for(let n=0;n<e;n++){const e=t[n%t.length];null===(s=this.onToolCall)||void 0===s||s.call(this,e),yield Vt(this.delay(this.config.toolCallDelay)),null===(a=this.onToolCallEnd)||void 0===a||a.call(this)}}const l=this.generateResponse(t,e);if(this.config.streaming)try{for(var c,d=!0,h=Gt(this.streamResponse(l));!(n=(c=yield Vt(h.next())).done);d=!0){r=c.value,d=!1;const t=r;yield yield Vt(t)}}catch(t){i={error:t}}finally{try{d||n||!(o=h.return)||(yield Vt(o.call(h)))}finally{if(i)throw i.error}}else yield yield Vt(l)})}uploadFile(t){return qt(this,void 0,void 0,function*(){if(yield this.delay(this.config.delay),Math.random()<this.config.errorRate)throw new Error("Simulated file upload error for testing");const e=t.type||"application/octet-stream",n=this.determineFileType(e),i=`mock-file-${Date.now()}-${Math.random().toString(36).substr(2,9)}`;console.log(`π Mock Provider: File uploaded - ${t.name} (${t.size} bytes) - ID: ${i}`);return{id:i,name:t.name,size:t.size,type:n,mimeType:e,url:URL.createObjectURL(t),previewUrl:"image"===n?URL.createObjectURL(t):void 0,uploadProgress:100,metadata:{provider:"mock",uploadedAt:(new Date).toISOString()}}})}determineFileType(t){return t.startsWith("image/")?U.Image:t.startsWith("video/")?U.Video:t.startsWith("audio/")?U.Audio:t.startsWith("application/pdf")||t.includes("document")||t.includes("text")?U.Document:t.includes("zip")||t.includes("rar")||t.includes("tar")?U.Archive:t.includes("javascript")||t.includes("json")||t.includes("xml")?U.Code:U.Unknown}generateResponse(t,e){var n,i;const o=(null==e?void 0:e.messages)||[],r=null===(n=[...o].map((t,e)=>({m:t,i:e})).reverse().find(({m:t})=>"user"===t.sender&&!!t.text))||void 0===n?void 0:n.i,s="number"==typeof r&&(null===(i=o[r])||void 0===i?void 0:i.text)?o[r].text:t;if(this.config.echoMode)return`You said: "${s}"`;if(this.config.customResponses.length>0){const t=(this.messageCount-1)%this.config.customResponses.length;return this.config.customResponses[t]}if(this.config.contextualResponses){const t=this.getContextualResponse(s);if(t)return t}if(this.config.useHistory&&o.length>0&&"number"==typeof r){const t=[...o].slice(0,r).reverse().find(t=>"user"===t.sender&&!!t.text);return t&&t.text?`Great point about "${String(s).substring(0,60)}". Considering your earlier message about "${String(t.text).substring(0,30)}...", ${this.getRandomResponse()}`:`Regarding "${String(s).substring(0,60)}", ${this.getRandomResponse()}`}return`Regarding "${String(s).substring(0,60)}", ${this.getRandomResponse()}`}getContextualResponse(t){const e=t.toLowerCase();for(const[t,n]of Object.entries(Xt))if(e.includes(t)){return n[Math.floor(Math.random()*n.length)]}return null}getRandomResponse(){const t=Math.floor(Math.random()*Yt.length);return Yt[t]}streamResponse(t){return Kt(this,arguments,function*(){let e="";const n=t.split(" ");for(let t=0;t<n.length;t++){e+=(t>0?" ":"")+n[t],yield yield Vt(e),t<n.length-1&&(yield Vt(this.delay(this.config.streamingInterval)))}})}delay(t){return new Promise(e=>setTimeout(e,t))}reset(){this.messageCount=0}updateConfig(t){Object.assign(this.config,t)}getConfig(){return Object.assign({},this.config)}}const Zt={fast:()=>new Qt({delay:300,streaming:!1,contextualResponses:!0}),realistic:()=>new Qt({delay:1200,streaming:!0,streamingInterval:50,contextualResponses:!0,useHistory:!0}),slow:()=>new Qt({delay:3e3,streaming:!1}),echo:()=>new Qt({delay:500,echoMode:!0}),streaming:()=>new Qt({delay:800,streaming:!0,streamingSpeed:2,streamingInterval:30}),unreliable:()=>new Qt({delay:1e3,errorRate:.3}),custom:t=>new Qt({delay:800,customResponses:t})};
|
|
2453
|
+
/**
|
|
2454
|
+
* @license
|
|
2455
|
+
* Copyright 2024 Nuraly, Laabidi Aymen
|
|
2456
|
+
* SPDX-License-Identifier: MIT
|
|
2457
|
+
*/var te=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})},ee=function(t){return this instanceof ee?(this.v=t,this):new ee(t)},ne=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),r=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function s(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){r.push([t,e,n,i])>1||a(t,e)})},e&&(i[t]=e(i[t])))}function a(t,e){try{(n=o[t](e)).value instanceof ee?Promise.resolve(n.value.v).then(l,c):d(r[0][2],n)}catch(t){d(r[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),r.shift(),r.length&&a(r[0][0],r[0][1])}};const ie={send:"message:send",response:"message:response",stream:"message:stream",error:"message:error",typingStart:"typing:start",typingEnd:"typing:end",toolCall:"tool:call",toolCallEnd:"tool:end"};class oe{constructor(){this.id="socket",this.name="Socket.io Provider",this.capabilities={streaming:!0,fileUpload:!1,modules:!1,functions:!1},this.socket=null,this.config=null,this.connected=!1,this.responseResolvers=new Map}connect(t){return te(this,void 0,void 0,function*(){var e,n,i;if(!t.url)throw new Error("Socket URL is required");this.config=Object.assign(Object.assign({},t),{events:Object.assign(Object.assign({},ie),t.events),autoReconnect:null===(e=t.autoReconnect)||void 0===e||e,reconnectionAttempts:null!==(n=t.reconnectionAttempts)&&void 0!==n?n:5,responseTimeout:null!==(i=t.responseTimeout)&&void 0!==i?i:3e4});const o=t.namespace?`${t.url}${t.namespace}`:t.url;return this.socket=h(o,{path:t.path||"/socket.io",transports:["websocket","polling"],autoConnect:!0,reconnection:this.config.autoReconnect,reconnectionAttempts:this.config.reconnectionAttempts,extraHeaders:t.headers}),new Promise((t,e)=>{const n=setTimeout(()=>{e(new Error("Socket connection timeout"))},1e4);this.socket.on("connect",()=>{clearTimeout(n),this.connected=!0,console.log("[SocketProvider] Connected:",this.socket.id),t()}),this.socket.on("connect_error",t=>{clearTimeout(n),console.error("[SocketProvider] Connection error:",t),e(t)}),this.socket.on("disconnect",t=>{this.connected=!1,console.log("[SocketProvider] Disconnected:",t)}),this.setupEventListeners()})})}setupEventListeners(){if(!this.socket||!this.config)return;const t=this.config.events;this.socket.on(t.response,t=>{console.log("[SocketProvider] Response received:",t);const e=this.extractMessageId(t),n=this.responseResolvers.get(e)||this.getLatestResolver();if(n){const i=this.extractMessage(t);n.resolve(i),this.responseResolvers.delete(e)}}),t.stream&&this.socket.on(t.stream,t=>{console.log("[SocketProvider] Stream chunk:",t);const e=this.extractMessageId(t),n=this.responseResolvers.get(e)||this.getLatestResolver();if(n){n.isStreaming=!0;const e=this.extractMessage(t);n.chunks.push(e)}}),t.error&&this.socket.on(t.error,t=>{console.error("[SocketProvider] Error event:",t);const e=this.extractMessageId(t),n=this.responseResolvers.get(e)||this.getLatestResolver();if(n){const i=t.error||t.message||"Unknown error";n.reject(new Error(i)),this.responseResolvers.delete(e)}}),t.toolCall&&this.socket.on(t.toolCall,t=>{var e;const n=t.name||t.toolName||t.function||"unknown";null===(e=this.onToolCall)||void 0===e||e.call(this,n)}),t.toolCallEnd&&this.socket.on(t.toolCallEnd,()=>{var t;null===(t=this.onToolCallEnd)||void 0===t||t.call(this)})}getLatestResolver(){const t=Array.from(this.responseResolvers.keys());return t.length>0?this.responseResolvers.get(t[t.length-1]):null}extractMessageId(t){return t.messageId||t.id||t.executionId||"default"}extractMessage(t){var e,n,i;return(null===(e=this.config)||void 0===e?void 0:e.extractMessage)?this.config.extractMessage(t):"string"==typeof t?t:t.message?t.message:t.text?t.text:t.response?t.response:t.content?t.content:(null===(n=t.data)||void 0===n?void 0:n.message)?t.data.message:(null===(i=t.data)||void 0===i?void 0:i.output)?JSON.stringify(t.data.output):JSON.stringify(t)}disconnect(){return te(this,void 0,void 0,function*(){this.socket&&(this.socket.disconnect(),this.socket=null),this.connected=!1,this.responseResolvers.clear(),console.log("[SocketProvider] Disconnected")})}isConnected(){var t;return this.connected&&!0===(null===(t=this.socket)||void 0===t?void 0:t.connected)}sendMessage(t,e){return ne(this,arguments,function*(){if(!this.connected||!this.socket||!this.config)return yield yield ee(this.formatError("Not Connected","Socket is not connected. Please check your connection.")),yield ee(void 0);const n=`msg_${Date.now()}_${crypto.randomUUID().slice(0,9)}`,i=this.buildPayload(t,e,n);try{const t=new Promise((t,e)=>{this.responseResolvers.set(n,{resolve:t,reject:e,chunks:[],isStreaming:!1}),setTimeout(()=>{const i=this.responseResolvers.get(n);i&&(i.chunks.length>0?t(i.chunks.join("")):e(new Error("Response timeout")),this.responseResolvers.delete(n))},this.config.responseTimeout)});if(console.log("[SocketProvider] Sending message:",this.config.events.send,i),this.socket.emit(this.config.events.send,i),this.config.events.stream){const e=this.responseResolvers.get(n);let i=0;const o=setInterval(()=>{e&&e.chunks.length>i&&(i=e.chunks.length)},50);try{const e=yield ee(t);clearInterval(o),yield yield ee(e)}catch(t){throw clearInterval(o),t}}else{const e=yield ee(t);yield yield ee(e)}}catch(t){const e=t instanceof Error?t.message:String(t);yield yield ee(this.formatError("Socket Error",e)),this.onError(t instanceof Error?t:new Error(String(t)))}})}buildPayload(t,e,n){var i,o,r;if(null===(i=this.config)||void 0===i?void 0:i.buildPayload){const i=this.config.buildPayload(t,e);return Object.assign(Object.assign({},i),{messageId:n})}return{messageId:n,message:t,text:t,threadId:null===(o=e.currentThread)||void 0===o?void 0:o.id,modules:e.selectedModules,metadata:e.metadata,files:null===(r=e.uploadedFiles)||void 0===r?void 0:r.map(t=>({id:t.id,name:t.name,type:t.type,url:t.url}))}}emit(t,e){this.socket&&this.connected&&this.socket.emit(t,e)}on(t,e){this.socket&&this.socket.on(t,e)}off(t,e){this.socket&&this.socket.off(t,e)}getSocket(){return this.socket}formatError(t,e){return`[ERROR_START][ERROR_TITLE_START]${t}[ERROR_TITLE_END]${e}[ERROR_END]`}onError(t){console.error("[SocketProvider] Error:",t)}}
|
|
2458
|
+
/**
|
|
2459
|
+
* @license
|
|
2460
|
+
* Copyright 2024 Nuraly, Laabidi Aymen
|
|
2461
|
+
* SPDX-License-Identifier: MIT
|
|
2462
|
+
*/var re=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})},se=function(t){return this instanceof se?(this.v=t,this):new se(t)},ae=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),r=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function s(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){r.push([t,e,n,i])>1||a(t,e)})},e&&(i[t]=e(i[t])))}function a(t,e){try{(n=o[t](e)).value instanceof se?Promise.resolve(n.value.v).then(l,c):d(r[0][2],n)}catch(t){d(r[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),r.shift(),r.length&&a(r[0][0],r[0][1])}};class le{constructor(){this.id="workflow-socket",this.name="Workflow Socket Provider",this.capabilities={streaming:!0,fileUpload:!0,modules:!0,functions:!1},this.socket=null,this.config=null,this.connected=!1,this.sessionId=`session_${Date.now()}_${Math.random().toString(36).substring(2,11)}`,this.activeExecutions=new Map}connect(t){return re(this,void 0,void 0,function*(){if(!t.workflowId)throw new Error("Workflow ID is required");return this.config=Object.assign({socketUrl:t.socketUrl||("undefined"!=typeof window?window.location.origin:"http://localhost:8000"),socketPath:t.socketPath||"/socket.io/workflow",triggerEndpoint:t.triggerEndpoint||"/api/v1/workflows/{workflowId}/trigger/chat",responseTimeout:t.responseTimeout||6e4},t),this.socket=h(this.config.socketUrl,{path:this.config.socketPath,transports:["websocket","polling"],autoConnect:!0,reconnection:!0,reconnectionAttempts:5}),new Promise((t,e)=>{const n=setTimeout(()=>{e(new Error("Socket connection timeout"))},1e4);this.socket.on("connect",()=>{clearTimeout(n),this.connected=!0,console.log("[WorkflowSocketProvider] Connected:",this.socket.id),t()}),this.socket.on("connect_error",t=>{clearTimeout(n),console.error("[WorkflowSocketProvider] Connection error:",t),e(t)}),this.socket.on("disconnect",t=>{this.connected=!1,console.log("[WorkflowSocketProvider] Disconnected:",t)}),this.setupEventListeners()})})}subscribeToWorkflow(t){this.socket&&(this.socket.emit("subscribe:workflow",{workflowId:t}),console.log("[WorkflowSocketProvider] Subscribed to workflow:",t))}subscribeToExecution(t){this.socket&&(this.socket.emit("subscribe:execution",{executionId:t}),console.log("[WorkflowSocketProvider] Subscribed to execution:",t))}setupEventListeners(){this.socket&&(this.socket.on("chat:message",t=>{var e,n,i,o;console.log("[WorkflowSocketProvider] Chat message received:",t);const r=t.executionId||(null===(e=t.data)||void 0===e?void 0:e.executionId),s=(null===(n=t.data)||void 0===n?void 0:n.message)||t.message;if(r&&s){let t=this.activeExecutions.get(r);if(!t)return void(null===(o=null===(i=this.config)||void 0===i?void 0:i.onMessage)||void 0===o||o.call(i,s));t.completed||t.messages.push(s)}}),this.socket.on("execution:started",t=>{console.log("[WorkflowSocketProvider] Execution started:",t)}),this.socket.on("execution:completed",t=>{var e,n,i;console.log("[WorkflowSocketProvider] Execution completed:",t);const o=t.executionId||(null===(e=t.data)||void 0===e?void 0:e.executionId);if(o){const e=this.activeExecutions.get(o);if(e&&!e.completed){e.completed=!0;let r="";if(null===(n=this.config)||void 0===n?void 0:n.extractResponse)r=this.config.extractResponse(t);else if(e.messages.length>0)r=e.messages.join("\n\n");else if(null===(i=t.data)||void 0===i?void 0:i.outputData)try{const e="string"==typeof t.data.outputData?JSON.parse(t.data.outputData):t.data.outputData;r=e.response||e.message||e.result||JSON.stringify(e)}catch(e){r=t.data.outputData}e.resolve(r||"Workflow completed"),this.activeExecutions.delete(o)}}}),this.socket.on("execution:failed",t=>{var e,n,i;console.error("[WorkflowSocketProvider] Execution failed:",t);const o=t.executionId||(null===(e=t.data)||void 0===e?void 0:e.executionId),r=(null===(n=t.data)||void 0===n?void 0:n.errorMessage)||(null===(i=t.data)||void 0===i?void 0:i.error)||"Workflow execution failed";if(o){const t=this.activeExecutions.get(o);t&&!t.completed&&(t.completed=!0,t.reject(new Error(r)),this.activeExecutions.delete(o))}}),this.socket.on("execution:node-started",t=>{var e,n;const i=null===(e=t.data)||void 0===e?void 0:e.nodeName;console.log("[WorkflowSocketProvider] Node started:",i),i&&(null===(n=this.onNodeStarted)||void 0===n||n.call(this,i))}),this.socket.on("execution:node-completed",t=>{var e,n;const i=null===(e=t.data)||void 0===e?void 0:e.nodeName;console.log("[WorkflowSocketProvider] Node completed:",i),i&&(null===(n=this.onNodeCompleted)||void 0===n||n.call(this,i))}))}disconnect(){return re(this,void 0,void 0,function*(){var t;this.socket&&((null===(t=this.config)||void 0===t?void 0:t.workflowId)&&this.socket.emit("unsubscribe:workflow",{workflowId:this.config.workflowId}),this.socket.disconnect(),this.socket=null),this.connected=!1,this.activeExecutions.clear(),console.log("[WorkflowSocketProvider] Disconnected")})}isConnected(){var t;return this.connected&&!0===(null===(t=this.socket)||void 0===t?void 0:t.connected)}sendMessage(t,e){return ae(this,arguments,function*(){var n,i;if(!this.connected||!this.socket||!this.config)return yield yield se(this.formatError("Not Connected","Socket is not connected. Please check your connection.")),yield se(void 0);try{const o=this.buildInput(t,e),r=this.config.triggerEndpoint.replace("{workflowId}",this.config.workflowId),s=`${this.config.socketUrl}${r}`;console.log("[WorkflowSocketProvider] Triggering workflow:",s,o);const a=yield se(fetch(s,{method:"POST",headers:Object.assign({"Content-Type":"application/json"},this.config.headers),body:JSON.stringify(o)}));if(!a.ok){const t=yield se(a.text().catch(()=>a.statusText));return yield yield se(this.formatError(`${a.status} ${a.statusText}`,t)),yield se(void 0)}const l=a.headers.get("X-Execution-Id")||(null===(n=yield se(a.json().catch(()=>({}))))||void 0===n?void 0:n.executionId);if(!l)return yield yield se(this.formatError("Execution Error","No execution ID received from server")),yield se(void 0);console.log("[WorkflowSocketProvider] Execution started:",l),(null===(i=this.config)||void 0===i?void 0:i.onExecutionStart)&&this.config.onExecutionStart(l,this.config.workflowId),this.subscribeToExecution(l);const c=new Promise((t,e)=>{this.activeExecutions.set(l,{messages:[],resolve:t,reject:e,completed:!1}),setTimeout(()=>{const n=this.activeExecutions.get(l);n&&!n.completed&&(n.completed=!0,n.messages.length>0?t(n.messages.join("\n\n")):e(new Error("Execution timeout")),this.activeExecutions.delete(l))},this.config.responseTimeout)}),d=this.activeExecutions.get(l);let h=0;const u=setInterval(()=>{d.messages.length>h&&(h=d.messages.length)},100);try{for(;!d.completed;){if(d.messages.length>0){const t=d.messages.join("\n\n");yield yield se(t)}yield se(new Promise(t=>setTimeout(t,200)))}clearInterval(u);const t=yield se(c);yield yield se(t)}catch(t){throw clearInterval(u),t}}catch(t){const e=t instanceof Error?t.message:String(t);yield yield se(this.formatError("Workflow Error",e)),this.onError(t instanceof Error?t:new Error(String(t)))}})}buildInput(t,e){var n,i,o;if(null===(n=this.config)||void 0===n?void 0:n.buildInput)return this.config.buildInput(t,e);console.log("[WorkflowSocketProvider] buildInput context.uploadedFiles:",e.uploadedFiles);const r=(null===(i=e.currentThread)||void 0===i?void 0:i.id)||this.sessionId,s={message:t,threadId:r,modules:e.selectedModules,metadata:e.metadata,files:(null===(o=e.uploadedFiles)||void 0===o?void 0:o.map(t=>{var e;return{id:t.id,name:t.name,type:t.type,mimeType:t.mimeType,url:t.url,base64:null===(e=t.metadata)||void 0===e?void 0:e.base64}}))||[]};return console.log("[WorkflowSocketProvider] buildInput threadId:",r,"files count:",s.files.length),s}setWorkflowId(t){this.config&&(this.socket&&this.config.workflowId&&this.socket.emit("unsubscribe:workflow",{workflowId:this.config.workflowId}),this.config.workflowId=t,this.socket&&this.connected&&this.subscribeToWorkflow(t))}getSocket(){return this.socket}uploadFile(t){return re(this,void 0,void 0,function*(){const e=`file-${Date.now()}-${Math.random().toString(36).substring(2,9)}`,n=URL.createObjectURL(t),i=yield this.fileToBase64(t),o=t.type||"application/octet-stream",r=this.determineFileType(o);return console.log(`[WorkflowSocketProvider] File prepared: ${t.name} (${t.size} bytes)`),{id:e,name:t.name,size:t.size,type:r,mimeType:o,url:n,previewUrl:r===U.Image?n:void 0,uploadProgress:100,metadata:{provider:"workflow-socket",uploadedAt:(new Date).toISOString(),base64:i}}})}fileToBase64(t){return new Promise((e,n)=>{const i=new FileReader;i.onload=()=>{const t=i.result,n=t.split(",")[1]||t;e(n)},i.onerror=n,i.readAsDataURL(t)})}determineFileType(t){return t.startsWith("image/")?U.Image:t.startsWith("video/")?U.Video:t.startsWith("audio/")?U.Audio:t.startsWith("application/pdf")||t.includes("document")||t.startsWith("text/")?U.Document:t.includes("zip")||t.includes("rar")||t.includes("tar")?U.Archive:t.includes("javascript")||t.includes("json")||t.includes("xml")?U.Code:U.Unknown}formatError(t,e){return`[ERROR_START][ERROR_TITLE_START]${t}[ERROR_TITLE_END]${e}[ERROR_END]`}onError(t){console.error("[WorkflowSocketProvider] Error:",t)}}
|
|
2463
|
+
/**
|
|
2464
|
+
* @license
|
|
2465
|
+
* Copyright 2024 Nuraly, Laabidi Aymen
|
|
2466
|
+
* SPDX-License-Identifier: MIT
|
|
2467
|
+
*/var ce=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})},de=function(t){return this instanceof de?(this.v=t,this):new de(t)},he=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(t,e||[]),r=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",function(t){return function(e){return Promise.resolve(e).then(t,c)}}),i[Symbol.asyncIterator]=function(){return this},i;function s(t,e){o[t]&&(i[t]=function(e){return new Promise(function(n,i){r.push([t,e,n,i])>1||a(t,e)})},e&&(i[t]=e(i[t])))}function a(t,e){try{(n=o[t](e)).value instanceof de?Promise.resolve(n.value.v).then(l,c):d(r[0][2],n)}catch(t){d(r[0][3],t)}var n}function l(t){a("next",t)}function c(t){a("throw",t)}function d(t,e){t(e),r.shift(),r.length&&a(r[0][0],r[0][1])}};const ue={send:"message:send",response:"message:response",stream:"message:stream",error:"message:error",typingStart:"typing:start",typingEnd:"typing:end",ping:"ping",pong:"pong",toolCall:"tool:call",toolCallEnd:"tool:end"};class pe{constructor(){this.id="native-websocket",this.name="Native WebSocket Provider",this.capabilities={streaming:!0,fileUpload:!1,modules:!1,functions:!1},this.ws=null,this.config=null,this.connected=!1,this.responseResolvers=new Map,this.reconnectAttempt=0,this.reconnectTimer=null,this.heartbeatTimer=null,this.pongTimer=null,this.intentionalClose=!1,this.messageListeners=new Map}connect(t){return ce(this,void 0,void 0,function*(){var e,n,i,o,r,s,a,l,c,d;if(!t.url)throw new Error("WebSocket URL is required");return this.config=Object.assign(Object.assign({},t),{messageTypes:Object.assign(Object.assign({},ue),t.messageTypes),typeField:null!==(e=t.typeField)&&void 0!==e?e:"type",autoReconnect:null===(n=t.autoReconnect)||void 0===n||n,maxReconnectAttempts:null!==(i=t.maxReconnectAttempts)&&void 0!==i?i:5,reconnectBaseDelay:null!==(o=t.reconnectBaseDelay)&&void 0!==o?o:1e3,reconnectMaxDelay:null!==(r=t.reconnectMaxDelay)&&void 0!==r?r:3e4,connectionTimeout:null!==(s=t.connectionTimeout)&&void 0!==s?s:1e4,responseTimeout:null!==(a=t.responseTimeout)&&void 0!==a?a:3e4,enableHeartbeat:null===(l=t.enableHeartbeat)||void 0===l||l,heartbeatInterval:null!==(c=t.heartbeatInterval)&&void 0!==c?c:3e4,heartbeatTimeout:null!==(d=t.heartbeatTimeout)&&void 0!==d?d:1e4}),this.intentionalClose=!1,this.reconnectAttempt=0,this.createConnection()})}createConnection(){return new Promise((t,e)=>{const n=this.config;if(!n)return void e(new Error("Provider not configured"));const i=this.buildUrl();try{this.ws=n.protocols?new WebSocket(i,n.protocols):new WebSocket(i)}catch(t){return void e(new Error(`Failed to create WebSocket: ${t instanceof Error?t.message:String(t)}`))}const o=setTimeout(()=>{this.ws&&this.ws.readyState!==WebSocket.OPEN&&(this.ws.close(),e(new Error("WebSocket connection timeout")))},n.connectionTimeout);this.ws.onopen=()=>{var e,n;clearTimeout(o),this.connected=!0,this.reconnectAttempt=0,console.log("[NativeWebSocketProvider] Connected"),null===(n=null===(e=this.config)||void 0===e?void 0:e.onConnectionChange)||void 0===n||n.call(e,!0),this.startHeartbeat(),t()},this.ws.onclose=t=>{var n,i;clearTimeout(o);const r=this.connected;this.connected=!1,this.stopHeartbeat(),console.log("[NativeWebSocketProvider] Disconnected:",t.code,t.reason),r&&(null===(i=null===(n=this.config)||void 0===n?void 0:n.onConnectionChange)||void 0===i||i.call(n,!1));for(const[t,e]of this.responseResolvers)e.chunks.length>0?e.resolve(e.chunks.join("")):e.reject(new Error("WebSocket connection closed")),this.responseResolvers.delete(t);!this.intentionalClose&&r?this.attemptReconnect():r||e(new Error(`WebSocket connection failed (code: ${t.code})`))},this.ws.onerror=t=>{console.error("[NativeWebSocketProvider] Error:",t)},this.ws.onmessage=t=>{this.handleMessage(t)}})}buildUrl(){const t=this.config;if(!t)return"";let e=t.url;const n=t.queryParams;if(n&&Object.keys(n).length>0){const t=e.includes("?")?"&":"?";e=`${e}${t}${Object.entries(n).map(([t,e])=>`${encodeURIComponent(t)}=${encodeURIComponent(e)}`).join("&")}`}return e}handleMessage(t){var e,n,i;if(!this.config)return;const o=this.parseMessageData(t.data);if(!o)return;const r=o[null!==(e=this.config.typeField)&&void 0!==e?e:"type"],s=this.config.messageTypes;if(r!==s.pong)if(r!==s.ping){if(r===s.toolCall){const t=o.name||o.toolName||o.function||"unknown";return null===(n=this.onToolCall)||void 0===n||n.call(this,t),void this.dispatchToListeners(r,o)}if(r===s.toolCallEnd)return null===(i=this.onToolCallEnd)||void 0===i||i.call(this),void this.dispatchToListeners(r,o);this.dispatchToListeners(r,o),r!==s.response?r!==s.stream?r===s.error&&this.handleErrorMessage(o):this.handleStreamMessage(o):this.handleResponseMessage(o)}else this.send(s.pong,{timestamp:Date.now()});else this.handlePong()}parseMessageData(t){try{return"string"==typeof t?JSON.parse(t):t}catch(e){return console.warn("[NativeWebSocketProvider] Non-JSON message received:",t),null}}dispatchToListeners(t,e){if(!t)return;const n=this.messageListeners.get(t);if(n)for(const t of n)try{t(e)}catch(t){console.error("[NativeWebSocketProvider] Listener error:",t)}}handleResponseMessage(t){const e=this.extractMessageId(t),n=this.responseResolvers.get(e)||this.getLatestResolver();if(n){const i=this.extractMessageContent(t);n.resolve(i),this.responseResolvers.delete(e)}}handleStreamMessage(t){const e=this.extractMessageId(t),n=this.responseResolvers.get(e)||this.getLatestResolver();if(n){n.isStreaming=!0;const e=this.extractMessageContent(t);n.chunks.push(e)}}handleErrorMessage(t){const e=this.extractMessageId(t),n=this.responseResolvers.get(e)||this.getLatestResolver();if(n){const i=t.error||t.message||"Unknown error";n.reject(new Error(i)),this.responseResolvers.delete(e)}}getLatestResolver(){const t=Array.from(this.responseResolvers.keys()).at(-1);return void 0!==t?this.responseResolvers.get(t):null}extractMessageId(t){return t.messageId||t.id||t.executionId||"default"}extractMessageContent(t){var e,n,i;return(null===(e=this.config)||void 0===e?void 0:e.extractMessage)?this.config.extractMessage(t):"string"==typeof t?t:t.message?t.message:t.text?t.text:t.response?t.response:t.content?t.content:(null===(n=t.data)||void 0===n?void 0:n.message)?t.data.message:(null===(i=t.data)||void 0===i?void 0:i.output)?JSON.stringify(t.data.output):JSON.stringify(t)}startHeartbeat(){var t;if(!(null===(t=this.config)||void 0===t?void 0:t.enableHeartbeat))return;this.stopHeartbeat();const e=this.config.messageTypes;this.heartbeatTimer=setInterval(()=>{var t,n,i;this.connected&&(null===(t=this.ws)||void 0===t?void 0:t.readyState)===WebSocket.OPEN&&(this.send(e.ping,{timestamp:Date.now()}),this.pongTimer=setTimeout(()=>{var t;console.warn("[NativeWebSocketProvider] Heartbeat timeout β closing connection"),null===(t=this.ws)||void 0===t||t.close(4e3,"Heartbeat timeout")},null!==(i=null===(n=this.config)||void 0===n?void 0:n.heartbeatTimeout)&&void 0!==i?i:1e4))},this.config.heartbeatInterval)}handlePong(){this.pongTimer&&(clearTimeout(this.pongTimer),this.pongTimer=null)}stopHeartbeat(){this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null),this.pongTimer&&(clearTimeout(this.pongTimer),this.pongTimer=null)}attemptReconnect(){var t,e,n,i,o,r;if(!(null===(t=this.config)||void 0===t?void 0:t.autoReconnect))return;const s=null!==(e=this.config.maxReconnectAttempts)&&void 0!==e?e:5;if(this.reconnectAttempt>=s)return void console.error("[NativeWebSocketProvider] Max reconnection attempts reached");this.reconnectAttempt++;const a=null!==(n=this.config.reconnectBaseDelay)&&void 0!==n?n:1e3,l=null!==(i=this.config.reconnectMaxDelay)&&void 0!==i?i:3e4,c=Math.min(a*Math.pow(2,this.reconnectAttempt-1)+Math.random()*a,l);console.log(`[NativeWebSocketProvider] Reconnecting in ${Math.round(c)}ms (attempt ${this.reconnectAttempt}/${s})`),null===(r=(o=this.config).onReconnectAttempt)||void 0===r||r.call(o,this.reconnectAttempt,s),this.reconnectTimer=setTimeout(()=>ce(this,void 0,void 0,function*(){try{yield this.createConnection(),console.log("[NativeWebSocketProvider] Reconnected successfully")}catch(t){}}),c)}disconnect(){return ce(this,void 0,void 0,function*(){this.intentionalClose=!0,this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.stopHeartbeat(),this.ws&&(this.ws.close(1e3,"Client disconnect"),this.ws=null),this.connected=!1,this.responseResolvers.clear(),this.messageListeners.clear(),console.log("[NativeWebSocketProvider] Disconnected")})}isConnected(){var t;return this.connected&&(null===(t=this.ws)||void 0===t?void 0:t.readyState)===WebSocket.OPEN}sendMessage(t,e){return he(this,arguments,function*(){if(!this.connected||!this.ws||!this.config)return yield yield de(this.formatError("Not Connected","WebSocket is not connected. Please check your connection.")),yield de(void 0);const n=`msg_${Date.now()}_${crypto.randomUUID().slice(0,9)}`,i=this.buildPayload(t,e,n);try{const t=new Promise((t,e)=>{var i,o;this.responseResolvers.set(n,{resolve:t,reject:e,chunks:[],isStreaming:!1}),setTimeout(()=>{const i=this.responseResolvers.get(n);i&&(i.chunks.length>0?t(i.chunks.join("")):e(new Error("Response timeout")),this.responseResolvers.delete(n))},null!==(o=null===(i=this.config)||void 0===i?void 0:i.responseTimeout)&&void 0!==o?o:3e4)}),e=this.config.messageTypes;if(this.send(e.send,Object.assign(Object.assign({},i),{messageId:n})),this.config.messageTypes.stream){const e=this.responseResolvers.get(n);let i=0;const o=setInterval(()=>{e&&e.chunks.length>i&&(i=e.chunks.length)},50);try{const e=yield de(t);clearInterval(o),yield yield de(e)}catch(t){throw clearInterval(o),t}}else{const e=yield de(t);yield yield de(e)}}catch(t){const e=t instanceof Error?t.message:String(t);yield yield de(this.formatError("WebSocket Error",e)),this.onError(t instanceof Error?t:new Error(String(t)))}})}send(t,e){var n;if(this.ws&&this.ws.readyState===WebSocket.OPEN&&this.config){const i=null!==(n=this.config.typeField)&&void 0!==n?n:"type",o=Object.assign({[i]:t},e);this.ws.send(JSON.stringify(o))}}onMessage(t,e){var n;return this.messageListeners.has(t)||this.messageListeners.set(t,new Set),null===(n=this.messageListeners.get(t))||void 0===n||n.add(e),()=>{const n=this.messageListeners.get(t);n&&(n.delete(e),0===n.size&&this.messageListeners.delete(t))}}getWebSocket(){return this.ws}buildPayload(t,e,n){var i,o,r;if(null===(i=this.config)||void 0===i?void 0:i.buildPayload){const i=this.config.buildPayload(t,e);return Object.assign(Object.assign({},i),{messageId:n})}return{messageId:n,message:t,text:t,threadId:null===(o=e.currentThread)||void 0===o?void 0:o.id,modules:e.selectedModules,metadata:e.metadata,files:null===(r=e.uploadedFiles)||void 0===r?void 0:r.map(t=>({id:t.id,name:t.name,type:t.type,url:t.url}))}}formatError(t,e){return`[ERROR_START][ERROR_TITLE_START]${t}[ERROR_TITLE_END]${e}[ERROR_END]`}onError(t){console.error("[NativeWebSocketProvider] Error:",t)}}
|
|
2468
|
+
/**
|
|
2469
|
+
* @license
|
|
2470
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2471
|
+
* SPDX-License-Identifier: MIT
|
|
2472
|
+
*/var fe=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class ve{constructor(t,e={}){this.id="persistence",this.name="Persistence Plugin",this.version="1.0.0",this.storage=t,this.storageKey=e.storageKey||"chatbot-state",e.autoSaveInterval&&(this.autoSaveInterval=setInterval(()=>{this.saveState()},e.autoSaveInterval))}onInit(t){this.controller=t,this.loadState(),console.log("[PersistencePlugin] Initialized")}onDestroy(){this.autoSaveInterval&&clearInterval(this.autoSaveInterval),this.saveState(),console.log("[PersistencePlugin] Destroyed")}onStateChange(){this.saveState()}saveState(){return fe(this,void 0,void 0,function*(){if(this.controller)try{const t=this.controller.getState();yield this.storage.save(this.storageKey,t),console.log("[PersistencePlugin] State saved")}catch(t){console.error("[PersistencePlugin] Error saving state:",t)}})}loadState(){return fe(this,void 0,void 0,function*(){if(this.controller)try{const t=yield this.storage.load(this.storageKey);t&&(this.controller.setState(t),console.log("[PersistencePlugin] State loaded"))}catch(t){console.error("[PersistencePlugin] Error loading state:",t)}})}clearStorage(){return fe(this,void 0,void 0,function*(){try{yield this.storage.remove(this.storageKey),console.log("[PersistencePlugin] Storage cleared")}catch(t){console.error("[PersistencePlugin] Error clearing storage:",t)}})}}
|
|
2473
|
+
/**
|
|
2474
|
+
* @license
|
|
2475
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2476
|
+
* SPDX-License-Identifier: MIT
|
|
2477
|
+
*/class ge{constructor(t){this.id="analytics",this.name="Analytics Plugin",this.version="1.0.0",this.trackEvent=t}onInit(){this.trackEvent("chatbot:initialized",{timestamp:(new Date).toISOString()}),console.log("[AnalyticsPlugin] Initialized")}onDestroy(){this.trackEvent("chatbot:destroyed",{timestamp:(new Date).toISOString()}),console.log("[AnalyticsPlugin] Destroyed")}onMessageSent(t){this.trackEvent("chatbot:message:sent",{messageId:t.id,messageLength:t.text.length,hasFiles:!!t.files&&t.files.length>0,timestamp:t.timestamp})}onMessageReceived(t){this.trackEvent("chatbot:message:received",{messageId:t.id,messageLength:t.text.length,sender:t.sender,timestamp:t.timestamp})}onError(t){this.trackEvent("chatbot:error",{error:t.message,stack:t.stack,timestamp:(new Date).toISOString()})}}
|
|
2478
|
+
/**
|
|
2479
|
+
* @license
|
|
2480
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2481
|
+
* SPDX-License-Identifier: MIT
|
|
2482
|
+
*/class me{constructor(){this._stylesInjected=!1}getOncePerConversationStyleTag(t,e="nr-chatbot"){var n;const i=`data-plugin-styles-${this.id}`;let o=!1;try{const t=document.querySelector(e);o=!!(null===(n=null==t?void 0:t.shadowRoot)||void 0===n?void 0:n.querySelector(`style[${i}]`))}catch(t){}return this._stylesInjected||o?"":(this._stylesInjected=!0,`<style ${i}="true">${t}</style>`)}onStateChange(t){try{const e=null==t?void 0:t.currentThreadId;e!==this._lastThreadId&&(this._lastThreadId=e,this._stylesInjected=!1)}catch(t){}}}
|
|
2483
|
+
/**
|
|
2484
|
+
* @license
|
|
2485
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2486
|
+
* SPDX-License-Identifier: MIT
|
|
2487
|
+
*/var be=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class ye extends me{constructor(){super(...arguments),this.id="markdown",this.name="Markdown Plugin",this.version="2.0.0",this.htmlTags=[{name:"md",open:"[MD]",close:"[/MD]"}]}onInit(){console.log("[MarkdownPlugin] Initialized")}renderHtmlBlock(t,e){if("md"!==t)return"";const n=this.getStyles();return`${this.getOncePerConversationStyleTag(n)}${nt(e)}`}afterReceive(t){return be(this,void 0,void 0,function*(){return t.includes("[MD]")&&t.includes("[/MD]")?t:nt(t)})}getStyles(){return"\n .md-code { background: #f6f8fa; padding: 12px; border-radius: 6px; overflow: auto; }\n .md-inline-code { background: rgba(27,31,35,.05); padding: 0 4px; border-radius: 4px; }\n h1, h2, h3 { margin: 0.6em 0 0.4em; font-weight: 600; }\n p { margin: 0.5em 0; }\n ul { margin: 0.5em 0 0.5em 1.2em; }\n a { color: var(--nuraly-color-primary, #0b5fff); text-decoration: underline; }\n @media (prefers-color-scheme: dark) {\n .md-code { background: #0f1115; color: #eaeef2; }\n .md-inline-code { background: rgba(255,255,255,.08); }\n }\n "}}
|
|
2488
|
+
/**
|
|
2489
|
+
* @license
|
|
2490
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2491
|
+
* SPDX-License-Identifier: MIT
|
|
2492
|
+
*/var xe=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class we extends me{constructor(){super(...arguments),this.id="flight-card",this.name="Flight Card Plugin",this.version="1.0.0",this.htmlTags=[{name:"flight",open:"[FLIGHT]",close:"[/FLIGHT]"}],this.cssPrefix="nr-flight-card"}renderHtmlBlockPlaceholder(t){if("flight"!==t.toLowerCase())return"";return`<div data-placeholder-id="${`flight-skeleton-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}"><nr-skeleton \n active \n style="min-width: 400px; max-width: 600px; margin: 16px 0;"\n ></nr-skeleton></div>`}onInit(){console.log("[FlightCardPlugin] Initialized")}afterReceive(t){return xe(this,void 0,void 0,function*(){try{const e=JSON.parse(t);if("flight"===e.type||this.isFlightData(e))return this.renderFlightCard(e)}catch(t){}const e=/\[FLIGHT\]([\s\S]*?)\[\/FLIGHT\]/g;let n,i=t;for(;null!==(n=e.exec(t));)try{const t=JSON.parse(n[1]),e=this.renderFlightCard(t);i=i.replace(n[0],e)}catch(t){console.warn("[FlightCardPlugin] Failed to parse flight data:",t)}return i})}renderHtmlBlock(t,e){if("flight"!==t.toLowerCase())return"";try{const t=JSON.parse(e);return this.renderFlightCard(t)}catch(t){return console.warn("[FlightCardPlugin] renderHtmlBlock parse error:",t),""}}isFlightData(t){return t&&"object"==typeof t&&t.origin&&t.destination&&t.departureTime}renderFlightCard(t){const{origin:e,destination:n,departureTime:i,arrivalTime:o,departureDate:r,arrivalDate:s,terminal:a,gate:l,arrivalTerminal:c,arrivalGate:d,duration:h,flightNumber:u,airline:p,status:f,updated:v,source:g}=t;return`\n ${this.getOncePerConversationStyleTag(this.getStyles())}\n <div class="${this.cssPrefix}" data-nr-flight-card="true">\n <div class="${this.cssPrefix}__header">\n <div class="${this.cssPrefix}__route">\n <span class="${this.cssPrefix}__airport-code">${this.escapeHtml(e)}</span>\n <div class="${this.cssPrefix}__flight-line">\n <svg class="${this.cssPrefix}__plane-icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path d="M21 16v-2l-8-5V3.5c0-.83-.67-1.5-1.5-1.5S10 2.67 10 3.5V9l-8 5v2l8-2.5V19l-2 1.5V22l3.5-1 3.5 1v-1.5L13 19v-5.5l8 2.5z" fill="currentColor"/>\n </svg>\n ${h?`<span class="${this.cssPrefix}__duration">${this.escapeHtml(h)}</span>`:""}\n </div>\n <span class="${this.cssPrefix}__airport-code">${this.escapeHtml(n)}</span>\n </div>\n ${u||p?`\n <div class="${this.cssPrefix}__flight-info">\n ${p?`<span class="${this.cssPrefix}__airline">${this.escapeHtml(p)}</span>`:""}\n ${u?`<span class="${this.cssPrefix}__flight-number">${this.escapeHtml(u)}</span>`:""}\n </div>\n `:""}\n </div>\n\n <div class="${this.cssPrefix}__details">\n <div class="${this.cssPrefix}__section ${this.cssPrefix}__section--departure">\n <div class="${this.cssPrefix}__label">Infos sur l'aΓ©roport</div>\n <div class="${this.cssPrefix}__location">\n <span class="${this.cssPrefix}__city">${this.getCityName(e)}</span>\n <span class="${this.cssPrefix}__date">${r?this.escapeHtml(r):""}</span>\n </div>\n <div class="${this.cssPrefix}__time-group">\n <div class="${this.cssPrefix}__time-label">Heure de dΓ©part prΓ©vue</div>\n <div class="${this.cssPrefix}__time-value">${this.escapeHtml(i)}</div>\n </div>\n <div class="${this.cssPrefix}__terminal-gate">\n ${a?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Terminal</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(a)}</span>\n </div>\n `:""}\n ${l?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(l)}</span>\n </div>\n `:void 0===l?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">-</span>\n </div>\n `:""}\n </div>\n </div>\n\n <div class="${this.cssPrefix}__divider"></div>\n\n <div class="${this.cssPrefix}__section ${this.cssPrefix}__section--arrival">\n <div class="${this.cssPrefix}__label">Infos sur l'aΓ©roport</div>\n <div class="${this.cssPrefix}__location">\n <span class="${this.cssPrefix}__city">${this.getCityName(n)}</span>\n <span class="${this.cssPrefix}__date">${s?this.escapeHtml(s):""}</span>\n </div>\n <div class="${this.cssPrefix}__time-group">\n <div class="${this.cssPrefix}__time-label">Heure d'arrivΓ©e prΓ©vue</div>\n <div class="${this.cssPrefix}__time-value">${this.escapeHtml(o)}</div>\n </div>\n <div class="${this.cssPrefix}__terminal-gate">\n ${c?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Terminal</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(c)}</span>\n </div>\n `:""}\n ${d?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">${this.escapeHtml(d)}</span>\n </div>\n `:void 0===d?`\n <div class="${this.cssPrefix}__info-item">\n <span class="${this.cssPrefix}__info-label">Porte</span>\n <span class="${this.cssPrefix}__info-value">-</span>\n </div>\n `:""}\n </div>\n </div>\n </div>\n\n ${v||g||f?`\n <div class="${this.cssPrefix}__footer">\n ${v?`<span class="${this.cssPrefix}__updated">${this.escapeHtml(v)}</span>`:""}\n ${g?`<span class="${this.cssPrefix}__source">Source : ${this.escapeHtml(g)}</span>`:""}\n ${f?`<span class="${this.cssPrefix}__status">${this.escapeHtml(f)}</span>`:""}\n </div>\n `:""}\n </div>\n `}getCityName(t){return{JED:"Djeddah",TUN:"Tunis",CDG:"Paris",LHR:"London",JFK:"New York",DXB:"Dubai",LAX:"Los Angeles",ORD:"Chicago",ATL:"Atlanta",DFW:"Dallas",DEN:"Denver",SFO:"San Francisco",SEA:"Seattle",LAS:"Las Vegas",MCO:"Orlando",MIA:"Miami",IAH:"Houston",PHX:"Phoenix",BOS:"Boston",MSP:"Minneapolis",DTW:"Detroit",FLL:"Fort Lauderdale",PHL:"Philadelphia",LGA:"New York",BWI:"Baltimore",SLC:"Salt Lake City",SAN:"San Diego",DCA:"Washington",TPA:"Tampa",PDX:"Portland",STL:"St. Louis"}[t.toUpperCase()]||t}escapeHtml(t){const e=document.createElement("div");return e.textContent=t,e.innerHTML}getStyles(){return`\n .${this.cssPrefix} {\n background: #ffffff;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n padding: 24px;\n margin: 16px 0;\n font-family: system-ui, -apple-system, sans-serif;\n max-width: 600px;\n }\n\n .${this.cssPrefix}__header {\n margin-bottom: 24px;\n }\n\n .${this.cssPrefix}__route {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 8px;\n }\n\n .${this.cssPrefix}__airport-code {\n font-size: 32px;\n font-weight: 700;\n color: #1a1a1a;\n letter-spacing: 0.5px;\n }\n\n .${this.cssPrefix}__flight-line {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n padding: 0 16px;\n }\n\n .${this.cssPrefix}__flight-line::before {\n content: '';\n position: absolute;\n top: 50%;\n left: 0;\n right: 0;\n height: 2px;\n background: linear-gradient(to right, #e0e0e0 0%, #e0e0e0 100%);\n z-index: 0;\n }\n\n .${this.cssPrefix}__plane-icon {\n width: 24px;\n height: 24px;\n color: #666;\n background: white;\n padding: 4px;\n position: relative;\n z-index: 1;\n transform: rotate(90deg);\n }\n\n .${this.cssPrefix}__duration {\n position: absolute;\n top: -24px;\n background: white;\n padding: 2px 8px;\n font-size: 13px;\n color: #666;\n white-space: nowrap;\n }\n\n .${this.cssPrefix}__flight-info {\n display: flex;\n gap: 8px;\n align-items: center;\n font-size: 14px;\n color: #666;\n }\n\n .${this.cssPrefix}__airline {\n font-weight: 500;\n }\n\n .${this.cssPrefix}__flight-number {\n color: #999;\n }\n\n .${this.cssPrefix}__details {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n gap: 24px;\n }\n\n .${this.cssPrefix}__divider {\n width: 1px;\n background: #e0e0e0;\n }\n\n .${this.cssPrefix}__section {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .${this.cssPrefix}__label {\n font-size: 12px;\n color: #999;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n font-weight: 500;\n text-decoration: underline;\n }\n\n .${this.cssPrefix}__location {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .${this.cssPrefix}__city {\n font-size: 16px;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .${this.cssPrefix}__date {\n font-size: 13px;\n color: #666;\n }\n\n .${this.cssPrefix}__time-group {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .${this.cssPrefix}__time-label {\n font-size: 12px;\n color: #666;\n }\n\n .${this.cssPrefix}__time-value {\n font-size: 24px;\n font-weight: 700;\n color: #2d6a3e;\n }\n\n .${this.cssPrefix}__terminal-gate {\n display: flex;\n gap: 16px;\n }\n\n .${this.cssPrefix}__info-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .${this.cssPrefix}__info-label {\n font-size: 11px;\n color: #999;\n }\n\n .${this.cssPrefix}__info-value {\n font-size: 18px;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .${this.cssPrefix}__footer {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid #e0e0e0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 12px;\n color: #666;\n gap: 12px;\n }\n\n .${this.cssPrefix}__updated {\n color: #999;\n }\n\n .${this.cssPrefix}__source {\n color: #666;\n }\n\n .${this.cssPrefix}__source::before {\n content: '';\n display: inline-block;\n width: 4px;\n height: 4px;\n background: #666;\n border-radius: 50%;\n margin-right: 8px;\n vertical-align: middle;\n }\n\n .${this.cssPrefix}__status {\n padding: 4px 8px;\n background: #e8f5e9;\n color: #2d6a3e;\n border-radius: 4px;\n font-weight: 500;\n }\n\n /* Share button styling */\n .${this.cssPrefix}__footer button {\n background: none;\n border: none;\n color: #666;\n cursor: pointer;\n padding: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .${this.cssPrefix}__footer button:hover {\n color: #1a1a1a;\n }\n\n /* Dark mode support */\n @media (prefers-color-scheme: dark) {\n .${this.cssPrefix} {\n background: #2a2a2a;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n }\n\n .${this.cssPrefix}__airport-code,\n .${this.cssPrefix}__city,\n .${this.cssPrefix}__info-value {\n color: #ffffff;\n }\n\n .${this.cssPrefix}__flight-line::before {\n background: linear-gradient(to right, #444 0%, #444 100%);\n }\n\n .${this.cssPrefix}__plane-icon {\n background: #2a2a2a;\n color: #999;\n }\n\n .${this.cssPrefix}__duration {\n background: #2a2a2a;\n }\n\n .${this.cssPrefix}__divider {\n background: #444;\n }\n\n .${this.cssPrefix}__footer {\n border-top-color: #444;\n }\n }\n\n /* Responsive design */\n @media (max-width: 640px) {\n .${this.cssPrefix} {\n padding: 16px;\n }\n\n .${this.cssPrefix}__details {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .${this.cssPrefix}__divider {\n height: 1px;\n width: 100%;\n }\n\n .${this.cssPrefix}__airport-code {\n font-size: 24px;\n }\n\n .${this.cssPrefix}__time-value {\n font-size: 20px;\n }\n\n .${this.cssPrefix}__footer {\n flex-direction: column;\n align-items: flex-start;\n }\n }\n `}}
|
|
2493
|
+
/**
|
|
2494
|
+
* @license
|
|
2495
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2496
|
+
* SPDX-License-Identifier: MIT
|
|
2497
|
+
*/class _e extends me{constructor(){super(...arguments),this.id="print-job-card",this.name="Print Job Card Plugin",this.version="1.0.0",this.htmlTags=[{name:"printjob",open:"[PRINTJOB]",close:"[/PRINTJOB]"}],this.cssPrefix="nr-print-job-card"}renderHtmlBlockPlaceholder(t){if("printjob"!==t.toLowerCase())return"";return`<div data-placeholder-id="${`printjob-skeleton-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}"><nr-skeleton \n active \n avatar\n paragraph='{"rows":3}'\n style="min-width: 350px; max-width: 500px; margin: 8px 0;"\n ></nr-skeleton></div>`}onInit(){console.log("[PrintJobCardPlugin] Initialized")}renderHtmlBlock(t,e){if("printjob"!==t.toLowerCase())return"";try{const t=JSON.parse(e);return this.renderPrintJobCard(t)}catch(t){return console.warn("[PrintJobCardPlugin] renderHtmlBlock parse error:",t),""}}renderPrintJobCard(t){const e=this.getStatusIcon(t.status),n=t.pagesPrinted&&t.totalPages?Math.round(t.pagesPrinted/t.totalPages*100):0;return`\n ${this.getOncePerConversationStyleTag(this.getStyles())}\n <div class="${this.cssPrefix}" data-nr-print-job-card="true">\n <div class="${this.cssPrefix}__header">\n <div class="${this.cssPrefix}__printer-icon">\n π¨οΈ\n </div>\n <div class="${this.cssPrefix}__header-content">\n <div class="${this.cssPrefix}__title">${this.escapeHtml(t.documentName)}</div>\n <div class="${this.cssPrefix}__subtitle">${this.escapeHtml(t.printerName)}</div>\n </div>\n <div class="${this.cssPrefix}__job-id">#${this.escapeHtml(t.jobId)}</div>\n </div>\n\n <div class="${this.cssPrefix}__status-row">\n <span class="${this.cssPrefix}__status-badge ${this.cssPrefix}__status-badge--${t.status}">\n ${e} ${this.formatStatus(t.status)}\n </span>\n ${t.priority&&"normal"!==t.priority?`\n <span class="${this.cssPrefix}__priority-badge ${this.cssPrefix}__priority-badge--${t.priority}">\n ${"high"===t.priority?"β‘":"π½"} ${this.capitalize(t.priority)} Priority\n </span>\n `:""}\n </div>\n\n ${"printing"===t.status&&t.pagesPrinted&&t.totalPages?`\n <div class="${this.cssPrefix}__progress">\n <div class="${this.cssPrefix}__progress-bar">\n <div class="${this.cssPrefix}__progress-fill" style="width: ${n}%"></div>\n </div>\n <div class="${this.cssPrefix}__progress-text">\n ${t.pagesPrinted} / ${t.totalPages} pages (${n}%)\n </div>\n </div>\n `:""}\n\n ${"error"===t.status&&t.errorMessage?`\n <div class="${this.cssPrefix}__error-message">\n β οΈ ${this.escapeHtml(t.errorMessage)}\n </div>\n `:""}\n\n <div class="${this.cssPrefix}__details">\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Pages:</span>\n <span class="${this.cssPrefix}__detail-value">${t.totalPages}</span>\n </div>\n ${t.copies&&t.copies>1?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Copies:</span>\n <span class="${this.cssPrefix}__detail-value">${t.copies}</span>\n </div>\n `:""}\n ${t.colorMode?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Color Mode:</span>\n <span class="${this.cssPrefix}__detail-value">${this.capitalize(t.colorMode)}</span>\n </div>\n `:""}\n ${t.paperSize?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Paper Size:</span>\n <span class="${this.cssPrefix}__detail-value">${t.paperSize}</span>\n </div>\n `:""}\n ${t.userName?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">User:</span>\n <span class="${this.cssPrefix}__detail-value">${this.escapeHtml(t.userName)}</span>\n </div>\n `:""}\n ${t.estimatedTime&&"printing"===t.status?`\n <div class="${this.cssPrefix}__detail-row">\n <span class="${this.cssPrefix}__detail-label">Est. Time:</span>\n <span class="${this.cssPrefix}__detail-value">${t.estimatedTime}</span>\n </div>\n `:""}\n </div>\n\n <div class="${this.cssPrefix}__footer">\n <span class="${this.cssPrefix}__timestamp">\n π
Submitted: ${this.formatTimestamp(t.submittedAt)}\n </span>\n ${t.completedAt?`\n <span class="${this.cssPrefix}__timestamp">\n β
Completed: ${this.formatTimestamp(t.completedAt)}\n </span>\n `:""}\n </div>\n </div>\n `}getStatusColor(t){return{queued:"#ffa726",printing:"#42a5f5",completed:"#66bb6a",paused:"#ffb74d",error:"#ef5350",cancelled:"#78909c"}[t]||"#999"}getStatusIcon(t){return{queued:"β³",printing:"π",completed:"β
",paused:"βΈοΈ",error:"β",cancelled:"π«"}[t]||"π"}formatStatus(t){return t.charAt(0).toUpperCase()+t.slice(1)}capitalize(t){return t.charAt(0).toUpperCase()+t.slice(1)}formatTimestamp(t){try{return new Date(t).toLocaleString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch(e){return t}}escapeHtml(t){const e=document.createElement("div");return e.textContent=t,e.innerHTML}getStyles(){return`\n .${this.cssPrefix} {\n background: #ffffff;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n padding: 20px;\n margin: 12px 0;\n font-family: system-ui, -apple-system, sans-serif;\n max-width: 500px;\n border-left: 4px solid #42a5f5;\n }\n\n .${this.cssPrefix}__header {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n margin-bottom: 16px;\n }\n\n .${this.cssPrefix}__printer-icon {\n font-size: 32px;\n line-height: 1;\n flex-shrink: 0;\n }\n\n .${this.cssPrefix}__header-content {\n flex: 1;\n min-width: 0;\n }\n\n .${this.cssPrefix}__title {\n font-size: 16px;\n font-weight: 600;\n color: #1a1a1a;\n margin-bottom: 4px;\n word-break: break-word;\n }\n\n .${this.cssPrefix}__subtitle {\n font-size: 13px;\n color: #666;\n }\n\n .${this.cssPrefix}__job-id {\n font-size: 12px;\n color: #999;\n font-family: 'Monaco', 'Courier New', monospace;\n background: #f5f5f5;\n padding: 4px 8px;\n border-radius: 4px;\n flex-shrink: 0;\n }\n\n .${this.cssPrefix}__status-row {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n margin-bottom: 16px;\n }\n\n .${this.cssPrefix}__status-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n }\n\n .${this.cssPrefix}__status-badge--queued {\n background: #fff3e0;\n color: #e65100;\n }\n\n .${this.cssPrefix}__status-badge--printing {\n background: #e3f2fd;\n color: #0d47a1;\n }\n\n .${this.cssPrefix}__status-badge--completed {\n background: #e8f5e9;\n color: #1b5e20;\n }\n\n .${this.cssPrefix}__status-badge--paused {\n background: #fff3e0;\n color: #e65100;\n }\n\n .${this.cssPrefix}__status-badge--error {\n background: #ffebee;\n color: #b71c1c;\n }\n\n .${this.cssPrefix}__status-badge--cancelled {\n background: #f5f5f5;\n color: #616161;\n }\n\n .${this.cssPrefix}__priority-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n }\n\n .${this.cssPrefix}__priority-badge--high {\n background: #fff3e0;\n color: #e65100;\n }\n\n .${this.cssPrefix}__priority-badge--low {\n background: #f5f5f5;\n color: #666;\n }\n\n .${this.cssPrefix}__progress {\n margin-bottom: 16px;\n }\n\n .${this.cssPrefix}__progress-bar {\n width: 100%;\n height: 8px;\n background: #e0e0e0;\n border-radius: 4px;\n overflow: hidden;\n margin-bottom: 8px;\n }\n\n .${this.cssPrefix}__progress-fill {\n height: 100%;\n background: linear-gradient(90deg, #42a5f5 0%, #1976d2 100%);\n transition: width 0.3s ease;\n border-radius: 4px;\n }\n\n .${this.cssPrefix}__progress-text {\n font-size: 13px;\n color: #666;\n text-align: center;\n }\n\n .${this.cssPrefix}__error-message {\n background: #ffebee;\n border-left: 3px solid #ef5350;\n padding: 12px;\n margin-bottom: 16px;\n border-radius: 4px;\n font-size: 13px;\n color: #b71c1c;\n }\n\n .${this.cssPrefix}__details {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n margin-bottom: 16px;\n padding: 16px;\n background: #f9f9f9;\n border-radius: 8px;\n }\n\n .${this.cssPrefix}__detail-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n }\n\n .${this.cssPrefix}__detail-label {\n font-size: 12px;\n color: #666;\n }\n\n .${this.cssPrefix}__detail-value {\n font-size: 13px;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .${this.cssPrefix}__footer {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding-top: 12px;\n border-top: 1px solid #e0e0e0;\n }\n\n .${this.cssPrefix}__timestamp {\n font-size: 11px;\n color: #999;\n }\n\n /* Dark mode support */\n @media (prefers-color-scheme: dark) {\n .${this.cssPrefix} {\n background: #2a2a2a;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n border-left-color: #42a5f5;\n }\n\n .${this.cssPrefix}__title,\n .${this.cssPrefix}__detail-value {\n color: #ffffff;\n }\n\n .${this.cssPrefix}__subtitle,\n .${this.cssPrefix}__detail-label {\n color: #b0b0b0;\n }\n\n .${this.cssPrefix}__job-id {\n background: #3a3a3a;\n color: #b0b0b0;\n }\n\n .${this.cssPrefix}__details {\n background: #333;\n }\n\n .${this.cssPrefix}__progress-bar {\n background: #444;\n }\n\n .${this.cssPrefix}__footer {\n border-top-color: #444;\n }\n }\n\n /* Responsive design */\n @media (max-width: 480px) {\n .${this.cssPrefix} {\n padding: 16px;\n }\n\n .${this.cssPrefix}__details {\n grid-template-columns: 1fr;\n }\n\n .${this.cssPrefix}__header {\n flex-wrap: wrap;\n }\n\n .${this.cssPrefix}__job-id {\n order: -1;\n width: 100%;\n }\n }\n `}}
|
|
2498
|
+
/**
|
|
2499
|
+
* @license
|
|
2500
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2501
|
+
* SPDX-License-Identifier: MIT
|
|
2502
|
+
*/var $e=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class ke extends me{constructor(){super(...arguments),this.id="artifact",this.name="Artifact Plugin",this.version="1.0.0",this.artifacts=new Map}onInit(t){this.controller=t,t&&"function"==typeof t.on&&t.on("processing:end",()=>{var e,n;try{const i=[...(null===(e=t.getMessages)||void 0===e?void 0:e.call(t))||[]].reverse().find(t=>t.sender===D.Bot);i&&!(null===(n=i.metadata)||void 0===n?void 0:n.hasArtifacts)&&this.processMessage(i)}catch(t){}})}onMessageReceived(t){return $e(this,void 0,void 0,function*(){t.sender===D.Bot&&this.processMessage(t)})}processMessage(t){var e;if(null===(e=t.metadata)||void 0===e?void 0:e.hasArtifacts)return void this.rebuildArtifactsFromMetadata(t);const n=t.text;if(!n)return;const i=/```(\w*)\n([\s\S]*?)```/g;let o;const r=[];let s=0;for(;null!==(o=i.exec(n));){const e=(o[1]||"text").toLowerCase(),n=o[2],i=`artifact-${t.id}-${s}`,a={id:i,language:e,content:n,title:this.extractTitle(n,e,s),messageId:t.id,index:s};r.push(a),this.artifacts.set(i,a),s++}if(0===r.length)return;let a=n,l=0;a=a.replaceAll(i,()=>`\0ARTIFACT_CARD_${r[l++].id}\0`),a=nt(a);for(const t of r)a=a.replace(`\0ARTIFACT_CARD_${t.id}\0`,this.renderPlaceholderCard(t));const c=this.getOncePerConversationStyleTag(this.getStyles());this.controller&&"function"==typeof this.controller.updateMessage&&this.controller.updateMessage(t.id,{text:c+a,metadata:Object.assign(Object.assign({},t.metadata),{renderAsHtml:!0,hasArtifacts:!0,artifactIds:r.map(t=>t.id),artifactOriginalText:n})})}rebuildArtifactsFromMetadata(t){var e,n;const i=null===(e=t.metadata)||void 0===e?void 0:e.artifactIds;if(!(null==i?void 0:i.length))return;if(i.every(t=>this.artifacts.has(t)))return;const o=null===(n=t.metadata)||void 0===n?void 0:n.artifactOriginalText;if(!o)return;const r=/```(\w*)\n([\s\S]*?)```/g;let s,a=0;for(;null!==(s=r.exec(o));){const e=(s[1]||"text").toLowerCase(),n=s[2],i=`artifact-${t.id}-${a}`,o=this.extractTitle(n,e,a);this.artifacts.set(i,{id:i,language:e,content:n,title:o,messageId:t.id,index:a}),a++}}getArtifact(t){return this.artifacts.get(t)}getAllArtifacts(){return Array.from(this.artifacts.values())}getArtifactsForMessage(t){return Array.from(this.artifacts.values()).filter(e=>e.messageId===t)}extractTitle(t,e,n){const i=t.trimStart().split("\n")[0]||"",o=[/^\/\/\s*(.+)/,/^#\s*(.+)/,/^--\s*(.+)/,/^\/\*\s*(.*?)\*\//,/^<!--\s*(.*?)-->/];for(const t of o){const e=t.exec(i);if(null==e?void 0:e[1]){const t=e[1].trim();if(t.length>0&&t.length<=60)return t}}return`${et(e)} Snippet ${n+1}`}renderPlaceholderCard(t){const e=et(t.language),n=Z(t.title);return`<div class="nr-artifact-card" data-artifact-id="${t.id}" role="button" tabindex="0" aria-label="View ${n}">\n <nr-icon name="code" size="small" class="nr-artifact-card__icon"></nr-icon>\n <span class="nr-artifact-card__info">\n <span class="nr-artifact-card__title">${n}</span>\n <nr-tag size="small" class="nr-artifact-card__lang">${e}</nr-tag>\n </span>\n <nr-icon name="chevron-right" size="small" class="nr-artifact-card__chevron"></nr-icon>\n</div>`}getStyles(){return"\n .nr-artifact-card {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n margin: 8px 0;\n background: var(--nuraly-color-chatbot-artifact-card-bg, #f6f8fa);\n border: 1px solid var(--nuraly-color-chatbot-artifact-card-border, #d0d7de);\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s ease, border-color 0.15s ease;\n user-select: none;\n max-width: 100%;\n }\n .nr-artifact-card:hover {\n background: var(--nuraly-color-chatbot-artifact-card-bg-hover, #eaeef2);\n border-color: var(--nuraly-color-chatbot-artifact-card-border-hover, #8b949e);\n }\n .nr-artifact-card:focus-visible {\n outline: 2px solid var(--nuraly-color-primary, #0b5fff);\n outline-offset: 2px;\n }\n .nr-artifact-card__icon {\n flex-shrink: 0;\n color: var(--nuraly-color-chatbot-artifact-icon-text, #57606a);\n }\n .nr-artifact-card__info {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1;\n }\n .nr-artifact-card__title {\n font-size: 13px;\n font-weight: 500;\n color: var(--nuraly-color-chatbot-text-primary, #1f2937);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 1.3;\n }\n .nr-artifact-card__lang {\n align-self: flex-start;\n }\n .nr-artifact-card__chevron {\n flex-shrink: 0;\n color: var(--nuraly-color-chatbot-text-secondary, #6c757d);\n }\n @media (prefers-color-scheme: dark) {\n .nr-artifact-card {\n background: var(--nuraly-color-chatbot-artifact-card-bg, #161b22);\n border-color: var(--nuraly-color-chatbot-artifact-card-border, #30363d);\n }\n .nr-artifact-card:hover {\n background: var(--nuraly-color-chatbot-artifact-card-bg-hover, #1c2128);\n border-color: var(--nuraly-color-chatbot-artifact-card-border-hover, #484f58);\n }\n .nr-artifact-card__icon {\n color: var(--nuraly-color-chatbot-artifact-icon-text, #c9d1d9);\n }\n .nr-artifact-card__title {\n color: var(--nuraly-color-chatbot-text-primary, #c9d1d9);\n }\n .nr-artifact-card__chevron {\n color: var(--nuraly-color-chatbot-text-secondary, #8b949e);\n }\n }\n "}}
|
|
2503
|
+
/**
|
|
2504
|
+
* @license
|
|
2505
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2506
|
+
* SPDX-License-Identifier: MIT
|
|
2507
|
+
*/class Se extends me{constructor(){super(...arguments),this.id="json-graph-renderer",this.name="JSON Graph Renderer",this.version="1.0.0"}renderArtifactContent(t){if("json"!==t.language)return"";let e;try{e=JSON.parse(t.content)}catch(t){return""}if(null===e||"object"!=typeof e)return"";const n=Array.isArray(e)?e.map((t,e)=>this.renderNode(String(e),t)):Object.entries(e).map(([t,e])=>this.renderNode(t,e));return`\n <div style="padding:20px;font-family:system-ui,-apple-system,sans-serif;overflow:auto;">\n <div style="\n display:flex;align-items:center;gap:8px;\n margin-bottom:16px;padding-bottom:12px;\n border-bottom:1px solid #e2e8f0;\n ">\n <span style="\n display:inline-flex;align-items:center;justify-content:center;\n width:28px;height:28px;border-radius:6px;\n background:linear-gradient(135deg,#0ea5e9,#8b5cf6);\n color:#fff;font-size:14px;font-weight:700;\n ">{}</span>\n <span style="font-size:15px;font-weight:600;color:#1e293b;">\n JSON Graph View\n </span>\n <span style="\n margin-left:auto;font-size:12px;padding:2px 8px;border-radius:10px;\n background:#f1f5f9;color:#64748b;\n ">${Array.isArray(e)?e.length:Object.keys(e).length} root keys</span>\n </div>\n ${n.join("")}\n </div>\n `}renderNode(t,e,n=0){const i=null!==e&&"object"==typeof e&&!Array.isArray(e),o=Array.isArray(e),r=24*n;if(!i&&!o)return`\n <div style="display:flex;align-items:center;gap:8px;margin-left:${r}px;margin-bottom:6px;">\n <span style="\n display:inline-block;width:8px;height:8px;border-radius:50%;\n background:${this.typeColor(e)};flex-shrink:0;\n "></span>\n <span style="font-weight:600;font-size:13px;color:#334155;">\n ${Z(t)}\n </span>\n <span style="\n font-size:13px;padding:2px 8px;border-radius:4px;\n background:${this.typeBg(e)};color:${this.typeColor(e)};\n border:1px solid ${this.typeColor(e)}20;\n ">${Z(this.formatValue(e))}</span>\n </div>\n `;const s=o?e.map((t,e)=>[String(e),t]):Object.entries(e),a=o?`[ ${s.length} ]`:`{ ${s.length} }`,l=o?"#8b5cf6":"#0ea5e9";return`\n <div style="margin-left:${r}px;margin-bottom:4px;">\n <div style="display:flex;align-items:center;gap:8px;margin-bottom:4px;">\n <span style="\n display:inline-flex;align-items:center;justify-content:center;\n width:20px;height:20px;border-radius:4px;\n background:${l}15;color:${l};font-size:11px;font-weight:700;\n border:1px solid ${l}30;\n ">${o?"[]":"{}"}</span>\n <span style="font-weight:600;font-size:13px;color:#334155;">\n ${Z(t)}\n </span>\n <span style="\n font-size:11px;padding:1px 6px;border-radius:10px;\n background:${l}10;color:${l};font-weight:500;\n ">${a}</span>\n </div>\n <div style="margin-left:9px;padding-left:16px;border-left:2px solid #e2e8f0;">\n ${s.map(([t,e])=>this.renderNode(t,e,0)).join("")}\n </div>\n </div>\n `}typeColor(t){if(null===t)return"#94a3b8";switch(typeof t){case"string":return"#22c55e";case"number":return"#3b82f6";case"boolean":return"#f59e0b";default:return"#94a3b8"}}typeBg(t){if(null===t)return"#f1f5f9";switch(typeof t){case"string":return"#f0fdf4";case"number":return"#eff6ff";case"boolean":return"#fffbeb";default:return"#f1f5f9"}}formatValue(t){return null==t?"null":"string"==typeof t?`"${t}"`:"number"==typeof t||"boolean"==typeof t?String(t):JSON.stringify(t)}}
|
|
2508
|
+
/**
|
|
2509
|
+
* @license
|
|
2510
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2511
|
+
* SPDX-License-Identifier: MIT
|
|
2512
|
+
*/const ze="nuraly:flow-diagram:split-width",Pe="nuraly:flow-diagram:panel-width",Te="nr-flow-diagram-editor";class Me extends HTMLElement{connectedCallback(){var t;const e=this.loadPanelWidth(),n=this.closestPanel();n&&(n.style.setProperty("width",`${e}px`),this._panelObserver=new ResizeObserver(()=>{const t=Math.round(n.getBoundingClientRect().width);t>=200&&localStorage.setItem(Pe,String(t))}),this._panelObserver.observe(n));const i=this.attachShadow({mode:"open"}),o=null!==(t=this.getAttribute("content"))&&void 0!==t?t:"",r=this.unescapeHtml(o),s=this.prettyPrint(r);let a=null;try{a=JSON.parse(r)}catch(t){}i.innerHTML=`\n <style>${Me.styles()}</style>\n ${this.renderHeader(a)}\n <div class="split">\n <div class="editor-pane">\n <textarea class="editor-textarea" spellcheck="false"></textarea>\n </div>\n <div class="resize-handle"><div class="resize-handle-bar"></div></div>\n <div class="diagram-pane">\n ${a?this.renderDiagram(a):'<div class="empty">Invalid JSON</div>'}\n </div>\n </div>\n <div class="error-bar" style="display:none;"></div>\n `;const l=i.querySelector(".editor-textarea");l&&(l.value=s);const c=localStorage.getItem(ze);c&&requestAnimationFrame(()=>{const t=i.querySelector(".editor-pane");t&&(t.style.flex="none",t.style.width=`${c}px`)});const d=i.querySelector(".diagram-pane"),h=i.querySelector(".error-bar");l&&d&&h&&(l.addEventListener("input",()=>{try{const t=JSON.parse(l.value);if(t.Steps&&t.Transitions){d.innerHTML=this.renderDiagram(t);const e=i.querySelector(".header");if(e){const n=document.createElement("template");n.innerHTML=this.renderHeader(t).trim();const i=n.content.firstElementChild;i&&e.replaceWith(i)}}h.style.display="none"}catch(t){h.textContent=`Parse error: ${t.message}`,h.style.display="flex"}}),this.initResize(i))}disconnectedCallback(){var t,e;null===(t=this._panelObserver)||void 0===t||t.disconnect(),null===(e=this.closestPanel())||void 0===e||e.style.removeProperty("width")}loadPanelWidth(){const t=localStorage.getItem(Pe);return t?Math.max(300,Number.parseInt(t,10)):500}closestPanel(){var t,e,n,i;let o=null!==(e=null!==(t=this.parentElement)&&void 0!==t?t:this.getRootNode().host)&&void 0!==e?e:null;for(;o;){if(o instanceof HTMLElement&&o.classList.contains("artifact-panel"))return o;o=null!==(i=null!==(n=o.parentElement)&&void 0!==n?n:o.getRootNode().host)&&void 0!==i?i:null}return null}initResize(t){const e=t.querySelector(".split"),n=t.querySelector(".editor-pane"),i=t.querySelector(".resize-handle");if(!e||!n||!i)return;let o=!1,r=0,s=0;const a=t=>{if(!o)return;const i=t.clientX-r,a=e.getBoundingClientRect().width,l=Math.max(200,Math.min(s+i,a-200));n.style.flex="none",n.style.width=`${l}px`},l=()=>{if(!o)return;o=!1,i.classList.remove("active"),document.body.style.cursor="",document.body.style.userSelect="";const t=Math.round(n.getBoundingClientRect().width);t>=200&&localStorage.setItem(ze,String(t)),document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",l)};i.addEventListener("mousedown",t=>{const e=t;e.preventDefault(),o=!0,r=e.clientX,s=n.getBoundingClientRect().width,i.classList.add("active"),document.body.style.cursor="col-resize",document.body.style.userSelect="none",document.addEventListener("mousemove",a),document.addEventListener("mouseup",l)})}prettyPrint(t){try{return JSON.stringify(JSON.parse(t),null,2)}catch(e){return t}}unescapeHtml(t){const e=document.createElement("textarea");return e.innerHTML=t,e.value}renderHeader(t){var e,n;const i=null!==(e=null==t?void 0:t.Name)&&void 0!==e?e:"Workflow",o=(null!==(n=null==t?void 0:t.DocflowTags)&&void 0!==n?n:[]).map(t=>`<span class="tag">${Z(t)}</span>`).join("");return`\n <div class="header">\n <span class="header-icon">⬡</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?"●":"■"}</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">▼</div>\n </div>\n '}static styles(){return"\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n min-width: 480px;\n height: 100%;\n font-family: system-ui, -apple-system, sans-serif;\n color: #1e293b;\n overflow: hidden;\n }\n\n .header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-bottom: 1px solid #e2e8f0;\n background: #f8fafc;\n flex-shrink: 0;\n }\n .header-icon { font-size: 18px; color: #6366f1; }\n .header-name { font-weight: 600; font-size: 15px; }\n .tag {\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 10px;\n background: #ede9fe;\n color: #6366f1;\n font-weight: 500;\n }\n\n .split {\n display: flex;\n flex: 1;\n min-height: 0;\n }\n\n .editor-pane {\n flex: 1;\n min-width: 200px;\n display: flex;\n overflow: hidden;\n }\n .editor-textarea {\n flex: 1;\n width: 100%;\n height: 100%;\n border: none;\n outline: none;\n resize: none;\n padding: 12px;\n font-family: 'Fira Code', 'Cascadia Code', Consolas, monospace;\n font-size: 12px;\n line-height: 1.6;\n color: #1e293b;\n background: #ffffff;\n box-sizing: border-box;\n tab-size: 2;\n }\n\n /* ββ Resize handle ββββββββββββββββββββββββββββββββ */\n\n .resize-handle {\n flex-shrink: 0;\n width: 8px;\n cursor: col-resize;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #f1f5f9;\n border-left: 1px solid #e2e8f0;\n border-right: 1px solid #e2e8f0;\n transition: background 0.15s;\n }\n .resize-handle:hover,\n .resize-handle.active { background: #e2e8f0; }\n .resize-handle-bar {\n width: 2px;\n height: 24px;\n border-radius: 1px;\n background: #cbd5e1;\n transition: background 0.15s;\n }\n .resize-handle:hover .resize-handle-bar,\n .resize-handle.active .resize-handle-bar { background: #94a3b8; }\n\n .diagram-pane {\n flex: 1;\n min-width: 200px;\n overflow-y: auto;\n padding: 24px;\n background: #f8fafc;\n }\n\n .diagram {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n .empty {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: #94a3b8;\n font-size: 14px;\n }\n\n /* ββ Event nodes ββββββββββββββββββββββββββββββββββββ */\n\n .event-node {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 20px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n }\n .event-start { background: #ecfdf5; border: 1.5px solid #86efac; color: #166534; }\n .event-start .event-icon { color: #22c55e; font-size: 10px; }\n .event-end { background: #fef2f2; border: 1.5px solid #fca5a5; color: #991b1b; }\n .event-end .event-icon { color: #ef4444; font-size: 10px; }\n\n /* ββ Step nodes βββββββββββββββββββββββββββββββββββββ */\n\n .step-node {\n width: 220px;\n padding: 12px 16px;\n border-radius: 8px;\n background: #ffffff;\n border: 1.5px solid #e2e8f0;\n box-shadow: 0 1px 3px rgba(0,0,0,0.06);\n }\n .step-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n }\n .step-name { font-weight: 600; font-size: 13px; color: #1e293b; }\n .step-badge {\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.02em;\n flex-shrink: 0;\n }\n .badge-worker { background: #dbeafe; color: #1d4ed8; }\n .badge-system { background: #fef3c7; color: #92400e; }\n .step-desc { margin-top: 6px; font-size: 11px; color: #64748b; line-height: 1.4; }\n\n /* ββ Connectors βββββββββββββββββββββββββββββββββββββ */\n\n .connector {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 32px;\n }\n .connector-line { width: 2px; flex: 1; background: #cbd5e1; }\n .connector-arrow { font-size: 8px; color: #cbd5e1; line-height: 1; margin-top: -2px; }\n\n /* ββ Error bar ββββββββββββββββββββββββββββββββββββββ */\n\n .error-bar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: #fef2f2;\n border-top: 1px solid #fecaca;\n color: #dc2626;\n font-size: 12px;\n flex-shrink: 0;\n }\n .error-bar::before { content: 'β '; }\n "}}class Ee extends me{constructor(){super(...arguments),this.id="flow-diagram",this.name="Flow Diagram",this.version="1.0.0"}onInit(){customElements.get(Te)||customElements.define(Te,Me)}renderArtifactContent(t){if("json"!==t.language)return"";let e;try{e=JSON.parse(t.content)}catch(t){return""}return null!==e&&"object"==typeof e&&e.Steps&&"object"==typeof e.Steps&&e.Transitions&&"object"==typeof e.Transitions?`<nr-flow-diagram-editor content="${Z(t.content)}"></nr-flow-diagram-editor>`:""}}
|
|
2513
|
+
/**
|
|
2514
|
+
* @license
|
|
2515
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2516
|
+
* SPDX-License-Identifier: MIT
|
|
2517
|
+
*/var Ce=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class Ie extends me{constructor(){super(...arguments),this.id="selection-card",this.name="Selection Card Plugin",this.version="1.0.0",this.htmlTags=[{name:"selection",open:"[SELECTION]",close:"[/SELECTION]"}],this.cssPrefix="nr-selection-card"}renderHtmlBlockPlaceholder(t){if("selection"!==t.toLowerCase())return"";return`<div data-placeholder-id="${`selection-skeleton-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}"><nr-skeleton\n active\n style="min-width: 300px; max-width: 500px; height: 80px; margin: 16px 0;"\n ></nr-skeleton></div>`}onInit(){console.log("[SelectionCardPlugin] Initialized")}afterReceive(t){return Ce(this,void 0,void 0,function*(){try{const e=JSON.parse(t);if("selection"===e.type||this.isSelectionData(e))return this.renderSelectionCard(e)}catch(t){}const e=/\[SELECTION\]([\s\S]*?)\[\/SELECTION\]/g;let n,i=t;for(;null!==(n=e.exec(t));)try{const t=JSON.parse(n[1]),e=this.renderSelectionCard(t);i=i.replace(n[0],e)}catch(t){console.warn("[SelectionCardPlugin] Failed to parse selection data:",t)}return i})}renderHtmlBlock(t,e){if("selection"!==t.toLowerCase())return"";try{const t=JSON.parse(e);return this.renderSelectionCard(t)}catch(t){return console.warn("[SelectionCardPlugin] renderHtmlBlock parse error:",t),""}}isSelectionData(t){return t&&"object"==typeof t&&Array.isArray(t.options)&&t.options.length>0&&t.options[0].label&&t.options[0].value}renderSelectionCard(t){const{title:e,options:n,columns:i=1}=t,o=this.getOncePerConversationStyleTag(this.getStyles()),r=n.map(t=>{const e=t.disabled?'aria-disabled="true"':"",n=t.disabled?`${this.cssPrefix}__option--disabled`:"",i=t.disabled?"-1":"0",o=t.disabled?"":`data-selection-value="${this.escapeHtml(t.value)}"`;return`\n <div class="${this.cssPrefix}__option ${n}"\n ${o}\n role="button"\n tabindex="${i}"\n ${e}>\n ${t.icon?`<nr-icon class="${this.cssPrefix}__option-icon" name="${this.escapeHtml(t.icon)}" size="small"></nr-icon>`:""}\n <div class="${this.cssPrefix}__option-content">\n <span class="${this.cssPrefix}__option-label">${this.escapeHtml(t.label)}</span>\n ${t.description?`<span class="${this.cssPrefix}__option-description">${this.escapeHtml(t.description)}</span>`:""}\n </div>\n </div>\n `}).join("");return`\n ${o}\n <div class="${this.cssPrefix}" data-nr-selection-card="true">\n ${e?`<div class="${this.cssPrefix}__title">${this.escapeHtml(e)}</div>`:""}\n <div class="${this.cssPrefix}__grid ${this.cssPrefix}__grid--cols-${i}">\n ${r}\n </div>\n </div>\n `}escapeHtml(t){const e=document.createElement("div");return e.textContent=t,e.innerHTML}getStyles(){return`\n .${this.cssPrefix} {\n margin: 12px 0;\n max-width: 500px;\n font-family: system-ui, -apple-system, sans-serif;\n }\n\n .${this.cssPrefix}__title {\n font-size: 14px;\n font-weight: 600;\n color: #1a1a1a;\n margin-bottom: 10px;\n }\n\n .${this.cssPrefix}__grid {\n display: grid;\n gap: 8px;\n }\n\n .${this.cssPrefix}__grid--cols-1 {\n grid-template-columns: 1fr;\n }\n\n .${this.cssPrefix}__grid--cols-2 {\n grid-template-columns: 1fr 1fr;\n }\n\n .${this.cssPrefix}__grid--cols-3 {\n grid-template-columns: 1fr 1fr 1fr;\n }\n\n .${this.cssPrefix}__option {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 12px 16px;\n background: #ffffff;\n border: 1px solid #e0e0e0;\n border-radius: 10px;\n cursor: pointer;\n transition: all 0.15s ease;\n user-select: none;\n -webkit-user-select: none;\n }\n\n .${this.cssPrefix}__option:hover {\n border-color: #4f8cff;\n background: #f0f6ff;\n box-shadow: 0 1px 4px rgba(79, 140, 255, 0.12);\n }\n\n .${this.cssPrefix}__option:focus-visible {\n outline: 2px solid #4f8cff;\n outline-offset: 2px;\n }\n\n .${this.cssPrefix}__option:active:not([aria-disabled="true"]) {\n transform: scale(0.98);\n background: #dfeaff;\n }\n\n .${this.cssPrefix}__option--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n }\n\n .${this.cssPrefix}__option-icon {\n flex-shrink: 0;\n color: #555;\n }\n\n .${this.cssPrefix}__option-content {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n }\n\n .${this.cssPrefix}__option-label {\n font-size: 14px;\n font-weight: 500;\n color: #1a1a1a;\n line-height: 1.3;\n }\n\n .${this.cssPrefix}__option-description {\n font-size: 12px;\n color: #666;\n line-height: 1.3;\n }\n\n /* Dark mode support */\n @media (prefers-color-scheme: dark) {\n .${this.cssPrefix}__title {\n color: #ffffff;\n }\n\n .${this.cssPrefix}__option {\n background: #2a2a2a;\n border-color: #444;\n }\n\n .${this.cssPrefix}__option:hover {\n border-color: #5a9aff;\n background: #1e2d44;\n box-shadow: 0 1px 4px rgba(90, 154, 255, 0.15);\n }\n\n .${this.cssPrefix}__option:active:not([aria-disabled="true"]) {\n background: #1a2638;\n }\n\n .${this.cssPrefix}__option-icon {\n color: #aaa;\n }\n\n .${this.cssPrefix}__option-label {\n color: #ffffff;\n }\n\n .${this.cssPrefix}__option-description {\n color: #999;\n }\n }\n\n /* Responsive: force single column on mobile */\n @media (max-width: 480px) {\n .${this.cssPrefix}__grid--cols-2,\n .${this.cssPrefix}__grid--cols-3 {\n grid-template-columns: 1fr;\n }\n }\n `}}
|
|
2518
|
+
/**
|
|
2519
|
+
* @license
|
|
2520
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2521
|
+
* SPDX-License-Identifier: MIT
|
|
2522
|
+
*/var Oe=function(t,e,n,i){return new(n||(n=Promise))(function(o,r){function s(t){try{l(i.next(t))}catch(t){r(t)}}function a(t){try{l(i.throw(t))}catch(t){r(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((i=i.apply(t,e||[])).next())})};class Re{constructor(){this.store=new Map}save(t,e){return Oe(this,void 0,void 0,function*(){this.store.set(t,JSON.parse(JSON.stringify(e)))})}load(t){return Oe(this,void 0,void 0,function*(){const e=this.store.get(t);return e?JSON.parse(JSON.stringify(e)):null})}remove(t){return Oe(this,void 0,void 0,function*(){this.store.delete(t)})}clear(){return Oe(this,void 0,void 0,function*(){this.store.clear()})}has(t){return Oe(this,void 0,void 0,function*(){return this.store.has(t)})}}class je{save(t,e){return Oe(this,void 0,void 0,function*(){try{localStorage.setItem(t,JSON.stringify(e))}catch(t){throw console.error("[LocalStorage] Save error:",t),new Error(`Failed to save to localStorage: ${t}`)}})}load(t){return Oe(this,void 0,void 0,function*(){try{const e=localStorage.getItem(t);return e?JSON.parse(e):null}catch(t){return console.error("[LocalStorage] Load error:",t),null}})}remove(t){return Oe(this,void 0,void 0,function*(){localStorage.removeItem(t)})}clear(){return Oe(this,void 0,void 0,function*(){Object.keys(localStorage).filter(t=>t.startsWith("chatbot-")).forEach(t=>{localStorage.removeItem(t)})})}has(t){return Oe(this,void 0,void 0,function*(){return null!==localStorage.getItem(t)})}}class Ae{constructor(t="chatbot-db",e="chatbot-store"){this.dbName=t,this.storeName=e}getDB(){return Oe(this,void 0,void 0,function*(){return this.db?this.db:new Promise((t,e)=>{const n=indexedDB.open(this.dbName,1);n.onerror=()=>e(n.error),n.onsuccess=()=>{this.db=n.result,t(this.db)},n.onupgradeneeded=t=>{const e=t.target.result;e.objectStoreNames.contains(this.storeName)||e.createObjectStore(this.storeName)}})})}save(t,e){return Oe(this,void 0,void 0,function*(){const n=yield this.getDB();return new Promise((i,o)=>{const r=n.transaction([this.storeName],"readwrite").objectStore(this.storeName).put(e,t);r.onerror=()=>o(r.error),r.onsuccess=()=>i()})})}load(t){return Oe(this,void 0,void 0,function*(){const e=yield this.getDB();return new Promise((n,i)=>{const o=e.transaction([this.storeName],"readonly").objectStore(this.storeName).get(t);o.onerror=()=>i(o.error),o.onsuccess=()=>n(o.result||null)})})}remove(t){return Oe(this,void 0,void 0,function*(){const e=yield this.getDB();return new Promise((n,i)=>{const o=e.transaction([this.storeName],"readwrite").objectStore(this.storeName).delete(t);o.onerror=()=>i(o.error),o.onsuccess=()=>n()})})}clear(){return Oe(this,void 0,void 0,function*(){const t=yield this.getDB();return new Promise((e,n)=>{const i=t.transaction([this.storeName],"readwrite").objectStore(this.storeName).clear();i.onerror=()=>n(i.error),i.onsuccess=()=>e()})})}has(t){return Oe(this,void 0,void 0,function*(){return null!==(yield this.load(t))})}}
|
|
2523
|
+
/**
|
|
2524
|
+
* @license
|
|
2525
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
2526
|
+
* SPDX-License-Identifier: MIT
|
|
2527
|
+
*/class De{constructor(t){this.host=t,t.addController(this)}hostConnected(){}hostDisconnected(){}handleMessagesUpdate(){var t;if(!this.host.autoScroll)return;(null===(t=this.host.shadowRoot)||void 0===t?void 0:t.querySelector(".messages"))&&this.scrollToBottom()}scrollToBottom(){var t;const e=null===(t=this.host.shadowRoot)||void 0===t?void 0:t.querySelector(".messages");e&&requestAnimationFrame(()=>{e.scrollTop=e.scrollHeight})}}export{ge as AnalyticsPlugin,ke as ArtifactPlugin,me as ChatPluginBase,W as ChatbotActionType,Dt as ChatbotCoreController,U as ChatbotFileType,F as ChatbotLoadingType,B as ChatbotMessageState,De as ChatbotScrollController,D as ChatbotSender,N as ChatbotSize,L as ChatbotVariant,Jt as CustomAPIProvider,Y as DEFAULT_ALLOWED_FILE_TYPES,K as DEFAULT_MAX_FILES,G as DEFAULT_MAX_FILE_SIZE,V as DEFAULT_MAX_MESSAGES,q as DEFAULT_TYPING_DELAY,J as EMPTY_STRING,gt as EventBus,X as FILE_TYPE_MAPPINGS,$t as FileHandler,we as FlightCardPlugin,Ee as FlowDiagramPlugin,Ae as IndexedDBStorage,Se as JsonGraphRendererPlugin,je as LocalStorageAdapter,ye as MarkdownPlugin,Re as MemoryStorage,yt as MessageHandler,Qt as MockProvider,Zt as MockProviders,kt as ModuleHandler,pe as NativeWebSocketProvider,vt as NrChatbotElement,Bt as OpenAIProvider,ve as PersistencePlugin,Ot as PluginService,_e as PrintJobCardPlugin,Pt as ProviderService,Ie as SelectionCardPlugin,oe as SocketProvider,bt as StateHandler,Ct as StorageService,St as SuggestionHandler,wt as ThreadHandler,mt as ValidationError,Mt as ValidationService,le as WorkflowSocketProvider};
|