@nuraly/lumenui 0.2.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn.js +1 -0
- package/dist/nuralyui.bundle.js +3434 -2085
- package/dist/nuralyui.bundle.js.gz +0 -0
- package/dist/src/components/button/controllers/base.controller.d.ts +15 -0
- package/dist/src/components/button/controllers/base.controller.js +13 -0
- package/dist/src/components/button/controllers/index.d.ts +10 -0
- package/dist/src/components/button/controllers/index.js +10 -0
- package/dist/src/components/button/controllers/keyboard.controller.d.ts +32 -0
- package/dist/src/components/button/controllers/keyboard.controller.js +78 -0
- package/dist/src/components/button/controllers/link.controller.d.ts +30 -0
- package/dist/src/components/button/controllers/link.controller.js +75 -0
- package/dist/src/components/button/controllers/ripple.controller.d.ts +23 -0
- package/dist/src/components/button/controllers/ripple.controller.js +69 -0
- package/dist/src/components/button/interfaces/base-controller.interface.d.ts +61 -0
- package/dist/src/components/button/interfaces/base-controller.interface.js +7 -0
- package/dist/src/components/button/interfaces/index.d.ts +2 -0
- package/dist/src/components/button/interfaces/index.js +2 -0
- package/dist/src/components/button/test/nr-button_test.d.ts +2 -0
- package/dist/src/components/button/test/nr-button_test.js +91 -0
- package/dist/src/components/canvas/base-canvas.component.d.ts +2 -1
- package/dist/src/components/canvas/base-canvas.component.js +6 -0
- package/dist/src/components/canvas/bundle.js +1083 -491
- package/dist/src/components/canvas/bundle.js.gz +0 -0
- package/dist/src/components/canvas/canvas.constants.d.ts +1 -1
- package/dist/src/components/canvas/canvas.constants.js +1 -1
- package/dist/src/components/canvas/chatbot-panel.style.js +50 -59
- package/dist/src/components/canvas/chatbot-trigger/chatbot-trigger-fields.component.d.ts +115 -0
- package/dist/src/components/canvas/chatbot-trigger/chatbot-trigger-fields.component.js +480 -0
- package/dist/src/components/canvas/chatbot-trigger/chatbot-trigger-fields.style.d.ts +7 -0
- package/dist/src/components/canvas/chatbot-trigger/chatbot-trigger-fields.style.js +323 -0
- package/dist/src/components/canvas/chatbot-trigger/chatbot-trigger.types.d.ts +162 -0
- package/dist/src/components/canvas/chatbot-trigger/chatbot-trigger.types.js +88 -0
- package/dist/src/components/canvas/chatbot-trigger/index.d.ts +9 -0
- package/dist/src/components/canvas/chatbot-trigger/index.js +12 -0
- package/dist/src/components/canvas/controllers/base.controller.d.ts +53 -0
- package/dist/src/components/canvas/controllers/base.controller.js +80 -0
- package/dist/src/components/canvas/controllers/clipboard.controller.d.ts +80 -0
- package/dist/src/components/canvas/controllers/clipboard.controller.js +300 -0
- package/dist/src/components/canvas/controllers/collaboration.controller.d.ts +54 -0
- package/dist/src/components/canvas/controllers/collaboration.controller.js +425 -0
- package/dist/src/components/canvas/controllers/config.controller.d.ts +61 -0
- package/dist/src/components/canvas/controllers/config.controller.js +118 -0
- package/dist/src/components/canvas/controllers/connection.controller.d.ts +69 -0
- package/dist/src/components/canvas/controllers/connection.controller.js +183 -0
- package/dist/src/components/canvas/controllers/drag.controller.d.ts +56 -0
- package/dist/src/components/canvas/controllers/drag.controller.js +195 -0
- package/dist/src/components/canvas/controllers/frame.controller.d.ts +94 -0
- package/dist/src/components/canvas/controllers/frame.controller.js +456 -0
- package/dist/src/components/canvas/controllers/index.d.ts +19 -0
- package/dist/src/components/canvas/controllers/index.js +32 -0
- package/dist/src/components/canvas/controllers/keyboard.controller.d.ts +44 -0
- package/dist/src/components/canvas/controllers/keyboard.controller.js +275 -0
- package/dist/src/components/canvas/controllers/marquee.controller.d.ts +71 -0
- package/dist/src/components/canvas/controllers/marquee.controller.js +128 -0
- package/dist/src/components/canvas/controllers/selection.controller.d.ts +85 -0
- package/dist/src/components/canvas/controllers/selection.controller.js +202 -0
- package/dist/src/components/canvas/controllers/touch.controller.d.ts +55 -0
- package/dist/src/components/canvas/controllers/touch.controller.js +299 -0
- package/dist/src/components/canvas/controllers/undo.controller.d.ts +100 -0
- package/dist/src/components/canvas/controllers/undo.controller.js +218 -0
- package/dist/src/components/canvas/controllers/viewport.controller.d.ts +91 -0
- package/dist/src/components/canvas/controllers/viewport.controller.js +287 -0
- package/dist/src/components/canvas/data-node/data-node-config.component.d.ts +67 -0
- package/dist/src/components/canvas/data-node/data-node-config.component.js +496 -0
- package/dist/src/components/canvas/data-node/data-node-fields.component.d.ts +198 -0
- package/dist/src/components/canvas/data-node/data-node-fields.component.js +931 -0
- package/dist/src/components/canvas/data-node/data-node-fields.style.d.ts +7 -0
- package/dist/src/components/canvas/data-node/data-node-fields.style.js +448 -0
- package/dist/src/components/canvas/data-node/data-node.types.d.ts +245 -0
- package/dist/src/components/canvas/data-node/data-node.types.js +158 -0
- package/dist/src/components/canvas/data-node/index.d.ts +9 -0
- package/dist/src/components/canvas/data-node/index.js +12 -0
- package/dist/src/components/canvas/data-node/schema-select.component.d.ts +36 -0
- package/dist/src/components/canvas/data-node/schema-select.component.js +196 -0
- package/dist/src/components/canvas/data-node/table-select.component.d.ts +38 -0
- package/dist/src/components/canvas/data-node/table-select.component.js +199 -0
- package/dist/src/components/canvas/interfaces/canvas-host.interface.d.ts +91 -0
- package/dist/src/components/canvas/interfaces/canvas-host.interface.js +7 -0
- package/dist/src/components/canvas/interfaces/collaboration.interface.d.ts +58 -0
- package/dist/src/components/canvas/interfaces/collaboration.interface.js +10 -0
- package/dist/src/components/canvas/interfaces/index.d.ts +8 -0
- package/dist/src/components/canvas/interfaces/index.js +7 -0
- package/dist/src/components/canvas/templates/chatbot-panel.template.d.ts +28 -0
- package/dist/src/components/canvas/templates/chatbot-panel.template.js +49 -0
- package/dist/src/components/canvas/templates/config-panel.template.d.ts +22 -0
- package/dist/src/components/canvas/templates/config-panel.template.js +22 -0
- package/dist/src/components/canvas/templates/context-menu.template.d.ts +30 -0
- package/dist/src/components/canvas/templates/context-menu.template.js +80 -0
- package/dist/src/components/canvas/templates/edges.template.d.ts +41 -0
- package/dist/src/components/canvas/templates/edges.template.js +243 -0
- package/dist/src/components/canvas/templates/empty-state.template.d.ts +17 -0
- package/dist/src/components/canvas/templates/empty-state.template.js +25 -0
- package/dist/src/components/canvas/templates/frame.template.d.ts +24 -0
- package/dist/src/components/canvas/templates/frame.template.js +74 -0
- package/dist/src/components/canvas/templates/index.d.ts +18 -0
- package/dist/src/components/canvas/templates/index.js +30 -0
- package/dist/src/components/canvas/templates/palette.template.d.ts +27 -0
- package/dist/src/components/canvas/templates/palette.template.js +110 -0
- package/dist/src/components/canvas/templates/presence-bar.template.d.ts +18 -0
- package/dist/src/components/canvas/templates/presence-bar.template.js +60 -0
- package/dist/src/components/canvas/templates/remote-cursors.template.d.ts +19 -0
- package/dist/src/components/canvas/templates/remote-cursors.template.js +43 -0
- package/dist/src/components/canvas/templates/toolbar.template.d.ts +52 -0
- package/dist/src/components/canvas/templates/toolbar.template.js +118 -0
- package/dist/src/components/canvas/templates/wb-floating-toolbar.template.d.ts +30 -0
- package/dist/src/components/canvas/templates/wb-floating-toolbar.template.js +219 -0
- package/dist/src/components/canvas/templates/wb-sidebar.template.d.ts +23 -0
- package/dist/src/components/canvas/templates/wb-sidebar.template.js +152 -0
- package/dist/src/components/canvas/utils/variable-resolver.d.ts +71 -0
- package/dist/src/components/canvas/utils/variable-resolver.js +280 -0
- package/dist/src/components/canvas/workflow-canvas.component.d.ts +7 -0
- package/dist/src/components/canvas/workflow-canvas.component.js +52 -2
- package/dist/src/components/canvas/workflow-canvas.style.js +46 -55
- package/dist/src/components/canvas/workflow-canvas.types.d.ts +8 -1
- package/dist/src/components/canvas/workflow-canvas.types.js +157 -0
- package/dist/src/components/carousel/demo/carousel-demo.d.ts +6 -0
- package/dist/src/components/carousel/demo/carousel-demo.js +68 -0
- package/dist/src/components/chat-panel/bundle.js +216 -0
- package/dist/src/components/chat-panel/bundle.js.gz +0 -0
- package/dist/src/components/chat-panel/chat-panel.component.d.ts +85 -0
- package/dist/src/components/chat-panel/chat-panel.component.js +510 -0
- package/dist/src/components/chat-panel/chat-panel.style.d.ts +2 -0
- package/dist/src/components/chat-panel/chat-panel.style.js +127 -0
- package/dist/src/components/chat-panel/chat-panel.types.d.ts +54 -0
- package/dist/src/components/chat-panel/chat-panel.types.js +2 -0
- package/dist/src/components/chat-panel/index.d.ts +3 -0
- package/dist/src/components/chat-panel/index.js +2 -0
- package/dist/src/components/chatbot/audio-compress.d.ts +26 -0
- package/dist/src/components/chatbot/audio-compress.js +84 -0
- package/dist/src/components/chatbot/bundle.js +388 -144
- package/dist/src/components/chatbot/bundle.js.gz +0 -0
- package/dist/src/components/chatbot/chatbot-audio.controller.d.ts +35 -0
- package/dist/src/components/chatbot/chatbot-audio.controller.js +160 -0
- package/dist/src/components/chatbot/chatbot.component.d.ts +12 -0
- package/dist/src/components/chatbot/chatbot.component.js +41 -2
- package/dist/src/components/chatbot/chatbot.style.js +141 -0
- package/dist/src/components/chatbot/chatbot.types.d.ts +8 -0
- package/dist/src/components/chatbot/controllers/index.d.ts +8 -0
- package/dist/src/components/chatbot/controllers/index.js +8 -0
- package/dist/src/components/chatbot/controllers/scroll.controller.d.ts +34 -0
- package/dist/src/components/chatbot/controllers/scroll.controller.js +43 -0
- package/dist/src/components/chatbot/core/chatbot-core.controller.d.ts +283 -0
- package/dist/src/components/chatbot/core/chatbot-core.controller.js +824 -0
- package/dist/src/components/chatbot/core/event-bus.d.ts +54 -0
- package/dist/src/components/chatbot/core/event-bus.js +102 -0
- package/dist/src/components/chatbot/core/index.d.ts +12 -0
- package/dist/src/components/chatbot/core/index.js +15 -0
- package/dist/src/components/chatbot/core/types.d.ts +403 -0
- package/dist/src/components/chatbot/core/types.js +16 -0
- package/dist/src/components/chatbot/locales/locale-codes.d.ts +14 -0
- package/dist/src/components/chatbot/locales/locale-codes.js +23 -0
- package/dist/src/components/chatbot/plugins/analytics-plugin.d.ts +23 -0
- package/dist/src/components/chatbot/plugins/analytics-plugin.js +52 -0
- package/dist/src/components/chatbot/plugins/artifact-plugin.d.ts +71 -0
- package/dist/src/components/chatbot/plugins/artifact-plugin.js +313 -0
- package/dist/src/components/chatbot/plugins/chat-plugin.d.ts +44 -0
- package/dist/src/components/chatbot/plugins/chat-plugin.js +58 -0
- package/dist/src/components/chatbot/plugins/flight-card-plugin.d.ts +116 -0
- package/dist/src/components/chatbot/plugins/flight-card-plugin.js +594 -0
- package/dist/src/components/chatbot/plugins/flow-diagram-plugin.d.ts +23 -0
- package/dist/src/components/chatbot/plugins/flow-diagram-plugin.js +495 -0
- package/dist/src/components/chatbot/plugins/index.d.ts +16 -0
- package/dist/src/components/chatbot/plugins/index.js +17 -0
- package/dist/src/components/chatbot/plugins/json-graph-renderer-plugin.d.ts +43 -0
- package/dist/src/components/chatbot/plugins/json-graph-renderer-plugin.js +166 -0
- package/dist/src/components/chatbot/plugins/markdown-plugin.d.ts +26 -0
- package/dist/src/components/chatbot/plugins/markdown-plugin.js +68 -0
- package/dist/src/components/chatbot/plugins/persistence-plugin.d.ts +30 -0
- package/dist/src/components/chatbot/plugins/persistence-plugin.js +91 -0
- package/dist/src/components/chatbot/plugins/print-job-card-plugin.d.ts +110 -0
- package/dist/src/components/chatbot/plugins/print-job-card-plugin.js +505 -0
- package/dist/src/components/chatbot/plugins/selection-card-plugin.d.ts +111 -0
- package/dist/src/components/chatbot/plugins/selection-card-plugin.js +318 -0
- package/dist/src/components/chatbot/providers/custom-api-provider.d.ts +63 -0
- package/dist/src/components/chatbot/providers/custom-api-provider.js +240 -0
- package/dist/src/components/chatbot/providers/index.d.ts +16 -0
- package/dist/src/components/chatbot/providers/index.js +13 -0
- package/dist/src/components/chatbot/providers/mock-provider.d.ts +154 -0
- package/dist/src/components/chatbot/providers/mock-provider.js +411 -0
- package/dist/src/components/chatbot/providers/native-ws-provider.d.ts +184 -0
- package/dist/src/components/chatbot/providers/native-ws-provider.js +544 -0
- package/dist/src/components/chatbot/providers/openai-provider.d.ts +32 -0
- package/dist/src/components/chatbot/providers/openai-provider.js +246 -0
- package/dist/src/components/chatbot/providers/socket-provider.d.ts +159 -0
- package/dist/src/components/chatbot/providers/socket-provider.js +390 -0
- package/dist/src/components/chatbot/providers/workflow-socket-provider.d.ts +116 -0
- package/dist/src/components/chatbot/providers/workflow-socket-provider.js +484 -0
- package/dist/src/components/chatbot/storage/index.d.ts +7 -0
- package/dist/src/components/chatbot/storage/index.js +8 -0
- package/dist/src/components/chatbot/storage/storage-implementations.d.ts +43 -0
- package/dist/src/components/chatbot/storage/storage-implementations.js +179 -0
- package/dist/src/components/chatbot/templates/artifact-panel.template.d.ts +22 -0
- package/dist/src/components/chatbot/templates/artifact-panel.template.js +81 -0
- package/dist/src/components/chatbot/templates/chatbot-main.template.d.ts +49 -0
- package/dist/src/components/chatbot/templates/chatbot-main.template.js +115 -0
- package/dist/src/components/chatbot/templates/file-preview-modal.template.d.ts +19 -0
- package/dist/src/components/chatbot/templates/file-preview-modal.template.js +74 -0
- package/dist/src/components/chatbot/templates/file-upload-area.template.d.ts +19 -0
- package/dist/src/components/chatbot/templates/file-upload-area.template.js +29 -0
- package/dist/src/components/chatbot/templates/index.d.ts +15 -0
- package/dist/src/components/chatbot/templates/index.js +15 -0
- package/dist/src/components/chatbot/templates/input-box.template.d.ts +49 -0
- package/dist/src/components/chatbot/templates/input-box.template.js +317 -0
- package/dist/src/components/chatbot/templates/message.template.d.ts +31 -0
- package/dist/src/components/chatbot/templates/message.template.js +214 -0
- package/dist/src/components/chatbot/templates/suggestion.template.d.ts +20 -0
- package/dist/src/components/chatbot/templates/suggestion.template.js +40 -0
- package/dist/src/components/chatbot/templates/thread-sidebar.template.d.ts +24 -0
- package/dist/src/components/chatbot/templates/thread-sidebar.template.js +160 -0
- package/dist/src/components/chatbot/templates/url-modal.template.d.ts +25 -0
- package/dist/src/components/chatbot/templates/url-modal.template.js +100 -0
- package/dist/src/components/chatbot/utils/format.d.ts +23 -0
- package/dist/src/components/chatbot/utils/format.js +84 -0
- package/dist/src/components/chatbot/utils/index.d.ts +7 -0
- package/dist/src/components/chatbot/utils/index.js +7 -0
- package/dist/src/components/checkbox/mixins/checkbox-event-mixin.d.ts +87 -0
- package/dist/src/components/checkbox/mixins/checkbox-event-mixin.js +94 -0
- package/dist/src/components/checkbox/mixins/checkbox-focus-mixin.d.ts +55 -0
- package/dist/src/components/checkbox/mixins/checkbox-focus-mixin.js +57 -0
- package/dist/src/components/checkbox/mixins/index.d.ts +10 -0
- package/dist/src/components/checkbox/mixins/index.js +8 -0
- package/dist/src/components/checkbox/test/checkbox_test.d.ts +2 -0
- package/dist/src/components/checkbox/test/checkbox_test.js +88 -0
- package/dist/src/components/collapse/controllers/accordion.controller.d.ts +60 -0
- package/dist/src/components/collapse/controllers/accordion.controller.js +132 -0
- package/dist/src/components/collapse/controllers/animation.controller.d.ts +40 -0
- package/dist/src/components/collapse/controllers/animation.controller.js +125 -0
- package/dist/src/components/collapse/controllers/base.controller.d.ts +48 -0
- package/dist/src/components/collapse/controllers/base.controller.js +69 -0
- package/dist/src/components/collapse/controllers/index.d.ts +12 -0
- package/dist/src/components/collapse/controllers/index.js +11 -0
- package/dist/src/components/collapse/controllers/keyboard.controller.d.ts +73 -0
- package/dist/src/components/collapse/controllers/keyboard.controller.js +186 -0
- package/dist/src/components/colorpicker/controllers/base.controller.d.ts +14 -0
- package/dist/src/components/colorpicker/controllers/base.controller.js +15 -0
- package/dist/src/components/colorpicker/controllers/dropdown.controller.d.ts +60 -0
- package/dist/src/components/colorpicker/controllers/dropdown.controller.js +243 -0
- package/dist/src/components/colorpicker/controllers/event.controller.d.ts +46 -0
- package/dist/src/components/colorpicker/controllers/event.controller.js +130 -0
- package/dist/src/components/colorpicker/controllers/index.d.ts +4 -0
- package/dist/src/components/colorpicker/controllers/index.js +4 -0
- package/dist/src/components/colorpicker/interfaces/index.d.ts +60 -0
- package/dist/src/components/colorpicker/interfaces/index.js +2 -0
- package/dist/src/components/datepicker/controllers/calendar.controller.d.ts +78 -0
- package/dist/src/components/datepicker/controllers/calendar.controller.js +225 -0
- package/dist/src/components/datepicker/controllers/index.d.ts +11 -0
- package/dist/src/components/datepicker/controllers/index.js +11 -0
- package/dist/src/components/datepicker/controllers/keyboard.controller.d.ts +96 -0
- package/dist/src/components/datepicker/controllers/keyboard.controller.js +246 -0
- package/dist/src/components/datepicker/controllers/month-year-dropdown.controller.d.ts +48 -0
- package/dist/src/components/datepicker/controllers/month-year-dropdown.controller.js +92 -0
- package/dist/src/components/datepicker/controllers/positioning.controller.d.ts +82 -0
- package/dist/src/components/datepicker/controllers/positioning.controller.js +247 -0
- package/dist/src/components/datepicker/controllers/selection.controller.d.ts +92 -0
- package/dist/src/components/datepicker/controllers/selection.controller.js +267 -0
- package/dist/src/components/datepicker/interfaces/base-controller.interface.d.ts +40 -0
- package/dist/src/components/datepicker/interfaces/base-controller.interface.js +7 -0
- package/dist/src/components/datepicker/interfaces/datepicker-controllers.interface.d.ts +112 -0
- package/dist/src/components/datepicker/interfaces/datepicker-controllers.interface.js +7 -0
- package/dist/src/components/datepicker/interfaces/index.d.ts +8 -0
- package/dist/src/components/datepicker/interfaces/index.js +7 -0
- package/dist/src/components/datepicker/templates/days.template.d.ts +4 -0
- package/dist/src/components/datepicker/templates/days.template.js +40 -0
- package/dist/src/components/datepicker/templates/dropdown.template.d.ts +10 -0
- package/dist/src/components/datepicker/templates/dropdown.template.js +50 -0
- package/dist/src/components/datepicker/templates/headers.template.d.ts +2 -0
- package/dist/src/components/datepicker/templates/headers.template.js +5 -0
- package/dist/src/components/datepicker/templates/months.template.d.ts +6 -0
- package/dist/src/components/datepicker/templates/months.template.js +10 -0
- package/dist/src/components/datepicker/templates/years.template.d.ts +6 -0
- package/dist/src/components/datepicker/templates/years.template.js +11 -0
- package/dist/src/components/datepicker/test/datepicker_test.d.ts +2 -0
- package/dist/src/components/datepicker/test/datepicker_test.js +134 -0
- package/dist/src/components/datepicker/utils/day.helper.d.ts +5 -0
- package/dist/src/components/datepicker/utils/day.helper.js +53 -0
- package/dist/src/components/datepicker/utils/formatter.d.ts +2 -0
- package/dist/src/components/datepicker/utils/formatter.js +9 -0
- package/dist/src/components/datepicker/utils/index.d.ts +11 -0
- package/dist/src/components/datepicker/utils/index.js +11 -0
- package/dist/src/components/datepicker/utils/locale.helper.d.ts +144 -0
- package/dist/src/components/datepicker/utils/locale.helper.js +151 -0
- package/dist/src/components/datepicker/utils/month.helper.d.ts +3 -0
- package/dist/src/components/datepicker/utils/month.helper.js +24 -0
- package/dist/src/components/datepicker/utils/string.helper.d.ts +2 -0
- package/dist/src/components/datepicker/utils/string.helper.js +4 -0
- package/dist/src/components/document/demo/document-demo.d.ts +12 -0
- package/dist/src/components/document/demo/document-demo.js +40 -0
- package/dist/src/components/dropdown/controllers/base.controller.d.ts +18 -0
- package/dist/src/components/dropdown/controllers/base.controller.js +22 -0
- package/dist/src/components/dropdown/controllers/dropdown.controller.d.ts +50 -0
- package/dist/src/components/dropdown/controllers/dropdown.controller.js +408 -0
- package/dist/src/components/dropdown/controllers/index.d.ts +3 -0
- package/dist/src/components/dropdown/controllers/index.js +3 -0
- package/dist/src/components/dropdown/interfaces/controller-interfaces.d.ts +79 -0
- package/dist/src/components/dropdown/interfaces/controller-interfaces.js +2 -0
- package/dist/src/components/dropdown/interfaces/index.d.ts +2 -0
- package/dist/src/components/dropdown/interfaces/index.js +2 -0
- package/dist/src/components/dropdown/templates/nr-dropdown-item.d.ts +12 -0
- package/dist/src/components/dropdown/templates/nr-dropdown-item.js +55 -0
- package/dist/src/components/dropdown/templates/nr-dropdown-item.style.d.ts +2 -0
- package/dist/src/components/dropdown/templates/nr-dropdown-item.style.js +34 -0
- package/dist/src/components/dropdown/templates/nr-dropdown-menu.d.ts +18 -0
- package/dist/src/components/dropdown/templates/nr-dropdown-menu.js +70 -0
- package/dist/src/components/dropdown/templates/nr-dropdown-menu.style.d.ts +2 -0
- package/dist/src/components/dropdown/templates/nr-dropdown-menu.style.js +49 -0
- package/dist/src/components/file-upload/demo/file-upload-demo.d.ts +18 -0
- package/dist/src/components/file-upload/demo/file-upload-demo.js +156 -0
- package/dist/src/components/form/controllers/submission.controller.d.ts +60 -0
- package/dist/src/components/form/controllers/submission.controller.js +220 -0
- package/dist/src/components/form/controllers/validation.controller.d.ts +87 -0
- package/dist/src/components/form/controllers/validation.controller.js +236 -0
- package/dist/src/components/form/interfaces/validation.interface.d.ts +118 -0
- package/dist/src/components/form/interfaces/validation.interface.js +7 -0
- package/dist/src/components/icon/mixins/clickable-mixin.d.ts +57 -0
- package/dist/src/components/icon/mixins/clickable-mixin.js +111 -0
- package/dist/src/components/icon/mixins/index.d.ts +7 -0
- package/dist/src/components/icon/mixins/index.js +7 -0
- package/dist/src/components/iconpicker/controllers/event.controller.d.ts +38 -0
- package/dist/src/components/iconpicker/controllers/event.controller.js +68 -0
- package/dist/src/components/iconpicker/controllers/index.d.ts +9 -0
- package/dist/src/components/iconpicker/controllers/index.js +9 -0
- package/dist/src/components/iconpicker/controllers/search.controller.d.ts +34 -0
- package/dist/src/components/iconpicker/controllers/search.controller.js +55 -0
- package/dist/src/components/iconpicker/controllers/selection.controller.d.ts +27 -0
- package/dist/src/components/iconpicker/controllers/selection.controller.js +39 -0
- package/dist/src/components/iconpicker/interfaces/icon-picker.interface.d.ts +13 -0
- package/dist/src/components/iconpicker/interfaces/icon-picker.interface.js +7 -0
- package/dist/src/components/iconpicker/interfaces/index.d.ts +7 -0
- package/dist/src/components/iconpicker/interfaces/index.js +7 -0
- package/dist/src/components/iconpicker/utils/icon-filter.utils.d.ts +29 -0
- package/dist/src/components/iconpicker/utils/icon-filter.utils.js +96 -0
- package/dist/src/components/iconpicker/utils/icon-loader.utils.d.ts +39 -0
- package/dist/src/components/iconpicker/utils/icon-loader.utils.js +115 -0
- package/dist/src/components/iconpicker/utils/index.d.ts +8 -0
- package/dist/src/components/iconpicker/utils/index.js +8 -0
- package/dist/src/components/iconpicker/utils/lucide-icons.d.ts +10 -0
- package/dist/src/components/iconpicker/utils/lucide-icons.js +1624 -0
- package/dist/src/components/input/controllers/base.controller.d.ts +35 -0
- package/dist/src/components/input/controllers/base.controller.js +13 -0
- package/dist/src/components/input/controllers/event.controller.d.ts +111 -0
- package/dist/src/components/input/controllers/event.controller.js +355 -0
- package/dist/src/components/input/controllers/index.d.ts +14 -0
- package/dist/src/components/input/controllers/index.js +10 -0
- package/dist/src/components/input/controllers/state.controller.d.ts +153 -0
- package/dist/src/components/input/controllers/state.controller.js +245 -0
- package/dist/src/components/input/controllers/validation.controller.d.ts +205 -0
- package/dist/src/components/input/controllers/validation.controller.js +698 -0
- package/dist/src/components/input/mixins/focus-mixin.d.ts +60 -0
- package/dist/src/components/input/mixins/focus-mixin.js +65 -0
- package/dist/src/components/input/mixins/index.d.ts +12 -0
- package/dist/src/components/input/mixins/index.js +9 -0
- package/dist/src/components/input/mixins/number-mixin.d.ts +51 -0
- package/dist/src/components/input/mixins/number-mixin.js +128 -0
- package/dist/src/components/input/mixins/selection-mixin.d.ts +57 -0
- package/dist/src/components/input/mixins/selection-mixin.js +80 -0
- package/dist/src/components/input/test/nr-input_test.d.ts +2 -0
- package/dist/src/components/input/test/nr-input_test.js +159 -0
- package/dist/src/components/input/utils/index.d.ts +8 -0
- package/dist/src/components/input/utils/index.js +8 -0
- package/dist/src/components/input/utils/input-renderers.d.ts +54 -0
- package/dist/src/components/input/utils/input-renderers.js +178 -0
- package/dist/src/components/input/utils/input-validation.utils.d.ts +26 -0
- package/dist/src/components/input/utils/input-validation.utils.js +103 -0
- package/dist/src/components/menu/controllers/accessibility.controller.d.ts +86 -0
- package/dist/src/components/menu/controllers/accessibility.controller.js +235 -0
- package/dist/src/components/menu/controllers/base.controller.d.ts +41 -0
- package/dist/src/components/menu/controllers/base.controller.js +61 -0
- package/dist/src/components/menu/controllers/index.d.ts +10 -0
- package/dist/src/components/menu/controllers/index.js +10 -0
- package/dist/src/components/menu/controllers/keyboard.controller.d.ts +84 -0
- package/dist/src/components/menu/controllers/keyboard.controller.js +328 -0
- package/dist/src/components/menu/controllers/state.controller.d.ts +106 -0
- package/dist/src/components/menu/controllers/state.controller.js +249 -0
- package/dist/src/components/menu/interfaces/controller.interface.d.ts +51 -0
- package/dist/src/components/menu/interfaces/controller.interface.js +7 -0
- package/dist/src/components/menu/interfaces/index.d.ts +7 -0
- package/dist/src/components/menu/interfaces/index.js +7 -0
- package/dist/src/components/modal/controllers/index.d.ts +8 -0
- package/dist/src/components/modal/controllers/index.js +8 -0
- package/dist/src/components/modal/controllers/modal-drag-controller.d.ts +39 -0
- package/dist/src/components/modal/controllers/modal-drag-controller.js +108 -0
- package/dist/src/components/modal/controllers/modal-keyboard-controller.d.ts +36 -0
- package/dist/src/components/modal/controllers/modal-keyboard-controller.js +128 -0
- package/dist/src/components/panel/controllers/index.d.ts +8 -0
- package/dist/src/components/panel/controllers/index.js +8 -0
- package/dist/src/components/panel/controllers/panel-drag-controller.d.ts +40 -0
- package/dist/src/components/panel/controllers/panel-drag-controller.js +118 -0
- package/dist/src/components/panel/controllers/panel-resize-controller.d.ts +37 -0
- package/dist/src/components/panel/controllers/panel-resize-controller.js +124 -0
- package/dist/src/components/presence/bundle.js +555 -0
- package/dist/src/components/presence/bundle.js.gz +0 -0
- package/dist/src/components/presence/index.d.ts +10 -0
- package/dist/src/components/presence/index.js +10 -0
- package/dist/src/components/presence/presence-avatars.component.d.ts +40 -0
- package/dist/src/components/presence/presence-avatars.component.js +83 -0
- package/dist/src/components/presence/presence-avatars.style.d.ts +7 -0
- package/dist/src/components/presence/presence-avatars.style.js +105 -0
- package/dist/src/components/presence/presence-chat.component.d.ts +55 -0
- package/dist/src/components/presence/presence-chat.component.js +238 -0
- package/dist/src/components/presence/presence-chat.style.d.ts +7 -0
- package/dist/src/components/presence/presence-chat.style.js +248 -0
- package/dist/src/components/presence/presence.component.d.ts +95 -0
- package/dist/src/components/presence/presence.component.js +510 -0
- package/dist/src/components/presence/presence.style.d.ts +7 -0
- package/dist/src/components/presence/presence.style.js +12 -0
- package/dist/src/components/presence/presence.types.d.ts +33 -0
- package/dist/src/components/presence/presence.types.js +7 -0
- package/dist/src/components/presence/react.d.ts +24 -0
- package/dist/src/components/presence/react.js +41 -0
- package/dist/src/components/radio-group/controllers/focus.controller.d.ts +98 -0
- package/dist/src/components/radio-group/controllers/focus.controller.js +216 -0
- package/dist/src/components/radio-group/controllers/group.controller.d.ts +140 -0
- package/dist/src/components/radio-group/controllers/group.controller.js +179 -0
- package/dist/src/components/radio-group/controllers/index.d.ts +11 -0
- package/dist/src/components/radio-group/controllers/index.js +11 -0
- package/dist/src/components/radio-group/controllers/keyboard.controller.d.ts +24 -0
- package/dist/src/components/radio-group/controllers/keyboard.controller.js +93 -0
- package/dist/src/components/radio-group/controllers/ripple.controller.d.ts +59 -0
- package/dist/src/components/radio-group/controllers/ripple.controller.js +208 -0
- package/dist/src/components/radio-group/controllers/validation.controller.d.ts +73 -0
- package/dist/src/components/radio-group/controllers/validation.controller.js +108 -0
- package/dist/src/components/radio-group/interfaces/base-controller.interface.d.ts +75 -0
- package/dist/src/components/radio-group/interfaces/base-controller.interface.js +7 -0
- package/dist/src/components/radio-group/interfaces/focus-controller.interface.d.ts +40 -0
- package/dist/src/components/radio-group/interfaces/focus-controller.interface.js +7 -0
- package/dist/src/components/radio-group/interfaces/index.d.ts +11 -0
- package/dist/src/components/radio-group/interfaces/index.js +7 -0
- package/dist/src/components/radio-group/interfaces/ripple-controller.interface.d.ts +31 -0
- package/dist/src/components/radio-group/interfaces/ripple-controller.interface.js +7 -0
- package/dist/src/components/radio-group/interfaces/selection-controller.interface.d.ts +45 -0
- package/dist/src/components/radio-group/interfaces/selection-controller.interface.js +7 -0
- package/dist/src/components/radio-group/interfaces/validation-controller.interface.d.ts +48 -0
- package/dist/src/components/radio-group/interfaces/validation-controller.interface.js +7 -0
- package/dist/src/components/radio-group/test/radio_test.d.ts +2 -0
- package/dist/src/components/radio-group/test/radio_test.js +79 -0
- package/dist/src/components/select/controllers/base.controller.d.ts +10 -0
- package/dist/src/components/select/controllers/base.controller.js +8 -0
- package/dist/src/components/select/controllers/dropdown.controller.d.ts +76 -0
- package/dist/src/components/select/controllers/dropdown.controller.js +281 -0
- package/dist/src/components/select/controllers/event.controller.d.ts +54 -0
- package/dist/src/components/select/controllers/event.controller.js +113 -0
- package/dist/src/components/select/controllers/focus.controller.d.ts +79 -0
- package/dist/src/components/select/controllers/focus.controller.js +230 -0
- package/dist/src/components/select/controllers/index.d.ts +9 -0
- package/dist/src/components/select/controllers/index.js +9 -0
- package/dist/src/components/select/controllers/keyboard.controller.d.ts +75 -0
- package/dist/src/components/select/controllers/keyboard.controller.js +369 -0
- package/dist/src/components/select/controllers/search.controller.d.ts +71 -0
- package/dist/src/components/select/controllers/search.controller.js +167 -0
- package/dist/src/components/select/controllers/selection.controller.d.ts +67 -0
- package/dist/src/components/select/controllers/selection.controller.js +217 -0
- package/dist/src/components/select/controllers/validation.controller.d.ts +66 -0
- package/dist/src/components/select/controllers/validation.controller.js +189 -0
- package/dist/src/components/select/interfaces/base-controller.interface.d.ts +147 -0
- package/dist/src/components/select/interfaces/base-controller.interface.js +2 -0
- package/dist/src/components/select/interfaces/controller-interfaces.d.ts +94 -0
- package/dist/src/components/select/interfaces/controller-interfaces.js +11 -0
- package/dist/src/components/select/interfaces/index.d.ts +3 -0
- package/dist/src/components/select/interfaces/index.js +3 -0
- package/dist/src/components/slider-input/utils/debounce.d.ts +2 -0
- package/dist/src/components/slider-input/utils/debounce.js +8 -0
- package/dist/src/components/slider-input/utils/index.d.ts +2 -0
- package/dist/src/components/slider-input/utils/index.js +2 -0
- package/dist/src/components/table/controllers/base.controller.d.ts +15 -0
- package/dist/src/components/table/controllers/base.controller.js +13 -0
- package/dist/src/components/table/controllers/filter.controller.d.ts +48 -0
- package/dist/src/components/table/controllers/filter.controller.js +152 -0
- package/dist/src/components/table/controllers/index.d.ts +11 -0
- package/dist/src/components/table/controllers/index.js +11 -0
- package/dist/src/components/table/controllers/pagination.controller.d.ts +36 -0
- package/dist/src/components/table/controllers/pagination.controller.js +110 -0
- package/dist/src/components/table/controllers/selection.controller.d.ts +40 -0
- package/dist/src/components/table/controllers/selection.controller.js +120 -0
- package/dist/src/components/table/controllers/sort.controller.d.ts +32 -0
- package/dist/src/components/table/controllers/sort.controller.js +102 -0
- package/dist/src/components/table/interfaces/index.d.ts +7 -0
- package/dist/src/components/table/interfaces/index.js +7 -0
- package/dist/src/components/table/interfaces/table-host.interface.d.ts +48 -0
- package/dist/src/components/table/interfaces/table-host.interface.js +7 -0
- package/dist/src/components/table/templates/actions.template.d.ts +14 -0
- package/dist/src/components/table/templates/actions.template.js +15 -0
- package/dist/src/components/table/templates/column-filter.template.d.ts +24 -0
- package/dist/src/components/table/templates/column-filter.template.js +76 -0
- package/dist/src/components/table/templates/content.template.d.ts +37 -0
- package/dist/src/components/table/templates/content.template.js +208 -0
- package/dist/src/components/table/templates/empty.template.d.ts +8 -0
- package/dist/src/components/table/templates/empty.template.js +47 -0
- package/dist/src/components/table/templates/filter.template.d.ts +14 -0
- package/dist/src/components/table/templates/filter.template.js +28 -0
- package/dist/src/components/table/templates/index.d.ts +8 -0
- package/dist/src/components/table/templates/index.js +8 -0
- package/dist/src/components/table/templates/loading.template.d.ts +21 -0
- package/dist/src/components/table/templates/loading.template.js +51 -0
- package/dist/src/components/table/templates/pagination.template.d.ts +24 -0
- package/dist/src/components/table/templates/pagination.template.js +52 -0
- package/dist/src/components/tabs/controllers/base.controller.d.ts +49 -0
- package/dist/src/components/tabs/controllers/base.controller.js +26 -0
- package/dist/src/components/tabs/controllers/dragdrop.controller.d.ts +84 -0
- package/dist/src/components/tabs/controllers/dragdrop.controller.js +202 -0
- package/dist/src/components/tabs/controllers/editable.controller.d.ts +100 -0
- package/dist/src/components/tabs/controllers/editable.controller.js +242 -0
- package/dist/src/components/tabs/controllers/event.controller.d.ts +104 -0
- package/dist/src/components/tabs/controllers/event.controller.js +239 -0
- package/dist/src/components/tabs/controllers/index.d.ts +12 -0
- package/dist/src/components/tabs/controllers/index.js +18 -0
- package/dist/src/components/tabs/controllers/keyboard.controller.d.ts +85 -0
- package/dist/src/components/tabs/controllers/keyboard.controller.js +233 -0
- package/dist/src/components/tabs/controllers/popout.controller.d.ts +96 -0
- package/dist/src/components/tabs/controllers/popout.controller.js +441 -0
- package/dist/src/components/textarea/controllers/base.controller.d.ts +43 -0
- package/dist/src/components/textarea/controllers/base.controller.js +19 -0
- package/dist/src/components/textarea/controllers/event.controller.d.ts +169 -0
- package/dist/src/components/textarea/controllers/event.controller.js +408 -0
- package/dist/src/components/textarea/controllers/index.d.ts +9 -0
- package/dist/src/components/textarea/controllers/index.js +9 -0
- package/dist/src/components/textarea/controllers/validation.controller.d.ts +133 -0
- package/dist/src/components/textarea/controllers/validation.controller.js +315 -0
- package/dist/src/components/timepicker/controllers/formatting.controller.d.ts +93 -0
- package/dist/src/components/timepicker/controllers/formatting.controller.js +195 -0
- package/dist/src/components/timepicker/controllers/index.d.ts +9 -0
- package/dist/src/components/timepicker/controllers/index.js +9 -0
- package/dist/src/components/timepicker/controllers/selection.controller.d.ts +72 -0
- package/dist/src/components/timepicker/controllers/selection.controller.js +175 -0
- package/dist/src/components/timepicker/controllers/validation.controller.d.ts +88 -0
- package/dist/src/components/timepicker/controllers/validation.controller.js +200 -0
- package/dist/src/components/timepicker/interfaces/timepicker.interface.d.ts +103 -0
- package/dist/src/components/timepicker/interfaces/timepicker.interface.js +7 -0
- package/dist/src/components/timepicker/test/timepicker_test.d.ts +7 -0
- package/dist/src/components/timepicker/test/timepicker_test.js +218 -0
- package/dist/src/components/timepicker/utils/time.utils.d.ts +87 -0
- package/dist/src/components/timepicker/utils/time.utils.js +235 -0
- package/dist/src/components/toast/bundle.js +11 -9
- package/dist/src/components/toast/bundle.js.gz +0 -0
- package/dist/src/components/toast/controllers/base.controller.d.ts +20 -0
- package/dist/src/components/toast/controllers/base.controller.js +12 -0
- package/dist/src/components/toast/controllers/index.d.ts +8 -0
- package/dist/src/components/toast/controllers/index.js +7 -0
- package/dist/src/components/toast/toast.component.d.ts +8 -0
- package/dist/src/components/toast/toast.component.js +17 -7
- package/dist/src/components/tooltips/demo/tooltips-demo.d.ts +18 -0
- package/dist/src/components/tooltips/demo/tooltips-demo.js +132 -0
- package/dist/src/components/tooltips/test/tooltips_test.d.ts +2 -0
- package/dist/src/components/tooltips/test/tooltips_test.js +145 -0
- package/dist/src/components/video/bundle.js +13 -12
- package/dist/src/components/video/bundle.js.gz +0 -0
- package/dist/src/components/video/video.component.d.ts +15 -1
- package/dist/src/components/video/video.component.js +131 -3
- package/package.json +31 -10
- package/packages/common/dist/VERSIONS.md +1 -1
|
@@ -0,0 +1,824 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2023 Nuraly, Laabidi Aymen
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
7
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
8
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
9
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
10
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
11
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
12
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
import { EventBus } from './event-bus.js';
|
|
16
|
+
import { ValidationError } from './types.js';
|
|
17
|
+
import { ChatbotSender, ChatbotMessageState } from '../chatbot.types.js';
|
|
18
|
+
// Handlers (domain operations)
|
|
19
|
+
import { StateHandler, MessageHandler, ThreadHandler, FileHandler, ModuleHandler, SuggestionHandler } from './handlers/index.js';
|
|
20
|
+
// Services (infrastructure)
|
|
21
|
+
import { ProviderService, ValidationService, StorageService, PluginService } from './services/index.js';
|
|
22
|
+
/**
|
|
23
|
+
* Pure chatbot core controller - completely UI-agnostic
|
|
24
|
+
* All UI interactions happen through injected callbacks
|
|
25
|
+
* Can be extended and overridden for custom behavior
|
|
26
|
+
*/
|
|
27
|
+
export class ChatbotCoreController {
|
|
28
|
+
constructor(config = {}) {
|
|
29
|
+
this.plugins = new Map();
|
|
30
|
+
this.config = config;
|
|
31
|
+
this.ui = config.ui || {};
|
|
32
|
+
this.eventBus = new EventBus();
|
|
33
|
+
this.pluginService = new PluginService();
|
|
34
|
+
this.plugins = this.pluginService.getPluginsMap();
|
|
35
|
+
// Register plugins BEFORE initializing state so initial messages can be processed
|
|
36
|
+
if (config.plugins) {
|
|
37
|
+
config.plugins.forEach(plugin => this.pluginService.registerPlugin(plugin, this));
|
|
38
|
+
}
|
|
39
|
+
const initialState = this.initializeState(config);
|
|
40
|
+
this.stateHandler = new StateHandler(initialState, this.eventBus, this.ui, this.plugins, this.config);
|
|
41
|
+
this.messageHandler = new MessageHandler(this.stateHandler, this.eventBus, this.plugins);
|
|
42
|
+
this.threadHandler = new ThreadHandler(this.stateHandler, this.eventBus, this.ui, this.config, config.provider);
|
|
43
|
+
this.fileHandler = new FileHandler(this.stateHandler, this.eventBus);
|
|
44
|
+
this.moduleHandler = new ModuleHandler(this.stateHandler, this.eventBus);
|
|
45
|
+
this.suggestionHandler = new SuggestionHandler(this.stateHandler);
|
|
46
|
+
this.providerService = new ProviderService(config.provider, this.stateHandler, this.messageHandler, this.fileHandler, this.eventBus, this.ui, this.plugins);
|
|
47
|
+
this.validationService = new ValidationService(this.config);
|
|
48
|
+
this.storageService = new StorageService(config.storage, this.stateHandler, this.config);
|
|
49
|
+
if (config.provider) {
|
|
50
|
+
const provider = config.provider;
|
|
51
|
+
queueMicrotask(() => { void this.initializeProvider(provider); });
|
|
52
|
+
}
|
|
53
|
+
this.setupLifecycleHooks();
|
|
54
|
+
}
|
|
55
|
+
initializeProvider(provider) {
|
|
56
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
try {
|
|
58
|
+
if (!provider.isConnected()) {
|
|
59
|
+
yield provider.connect({});
|
|
60
|
+
}
|
|
61
|
+
yield this.autoLoadConversations(provider);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
this.logError('Failed to connect provider:', error);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// ===== LIFECYCLE HOOKS (Override Points) =====
|
|
69
|
+
/**
|
|
70
|
+
* Initialize state - override to customize initial state
|
|
71
|
+
*/
|
|
72
|
+
initializeState(config) {
|
|
73
|
+
// Process initial messages through plugins to render tags
|
|
74
|
+
const processedMessages = config.initialMessages
|
|
75
|
+
? config.initialMessages.map(msg => this.processMessageThroughPlugins(msg))
|
|
76
|
+
: [];
|
|
77
|
+
return {
|
|
78
|
+
messages: processedMessages,
|
|
79
|
+
threads: config.initialThreads || [],
|
|
80
|
+
modules: config.enableModules ? [] : undefined,
|
|
81
|
+
selectedModules: [],
|
|
82
|
+
uploadedFiles: [],
|
|
83
|
+
suggestions: config.initialSuggestions || [],
|
|
84
|
+
isTyping: false,
|
|
85
|
+
isProcessing: false,
|
|
86
|
+
currentThreadId: undefined,
|
|
87
|
+
metadata: config.metadata || {}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Process a message text through all registered plugins to render HTML tags
|
|
92
|
+
*/
|
|
93
|
+
processMessageThroughPlugins(message) {
|
|
94
|
+
if (!message.text || typeof message.text !== 'string') {
|
|
95
|
+
return message;
|
|
96
|
+
}
|
|
97
|
+
// Get all tag-aware plugins
|
|
98
|
+
const tagAwarePlugins = Array.from(this.plugins.values()).filter(plugin => Array.isArray(plugin.htmlTags) && plugin.htmlTags.length > 0);
|
|
99
|
+
if (tagAwarePlugins.length === 0) {
|
|
100
|
+
return message;
|
|
101
|
+
}
|
|
102
|
+
let processedText = message.text;
|
|
103
|
+
let hasHtmlContent = false;
|
|
104
|
+
// Process each plugin's tags
|
|
105
|
+
for (const plugin of tagAwarePlugins) {
|
|
106
|
+
const tags = plugin.htmlTags;
|
|
107
|
+
for (const tag of tags) {
|
|
108
|
+
const openTag = tag.open;
|
|
109
|
+
const closeTag = tag.close;
|
|
110
|
+
// Find all instances of this tag in the text
|
|
111
|
+
let searchPos = 0;
|
|
112
|
+
while (true) {
|
|
113
|
+
const openIdx = processedText.indexOf(openTag, searchPos);
|
|
114
|
+
if (openIdx === -1)
|
|
115
|
+
break;
|
|
116
|
+
const contentStart = openIdx + openTag.length;
|
|
117
|
+
const closeIdx = processedText.indexOf(closeTag, contentStart);
|
|
118
|
+
if (closeIdx === -1) {
|
|
119
|
+
// Tag not closed, skip
|
|
120
|
+
searchPos = contentStart;
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
// Extract content between tags
|
|
124
|
+
const content = processedText.substring(contentStart, closeIdx);
|
|
125
|
+
// Render the HTML block
|
|
126
|
+
let html = '';
|
|
127
|
+
if (typeof plugin.renderHtmlBlock === 'function') {
|
|
128
|
+
try {
|
|
129
|
+
html = plugin.renderHtmlBlock(tag.name, content);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
console.error(`[ChatbotCore] Error rendering HTML block for plugin ${plugin.id}:`, error);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (html) {
|
|
136
|
+
// Replace the tag and content with rendered HTML
|
|
137
|
+
processedText =
|
|
138
|
+
processedText.substring(0, openIdx) +
|
|
139
|
+
html +
|
|
140
|
+
processedText.substring(closeIdx + closeTag.length);
|
|
141
|
+
hasHtmlContent = true;
|
|
142
|
+
// Continue searching from after the replacement
|
|
143
|
+
searchPos = openIdx + html.length;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// No HTML rendered, continue searching after this tag
|
|
147
|
+
searchPos = closeIdx + closeTag.length;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Return updated message with processed text and metadata flag
|
|
153
|
+
if (hasHtmlContent) {
|
|
154
|
+
return Object.assign(Object.assign({}, message), { text: processedText, metadata: Object.assign(Object.assign({}, message.metadata), { renderAsHtml: true }) });
|
|
155
|
+
}
|
|
156
|
+
return message;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Run onMessageReceived hooks on all bot messages currently in state.
|
|
160
|
+
* This ensures plugins like ArtifactPlugin can post-process restored
|
|
161
|
+
* or externally-loaded messages (not just streamed/added ones).
|
|
162
|
+
*/
|
|
163
|
+
processRestoredMessagesForPlugins() {
|
|
164
|
+
const state = this.stateHandler.getState();
|
|
165
|
+
if (!state.messages || state.messages.length === 0)
|
|
166
|
+
return;
|
|
167
|
+
for (const msg of state.messages) {
|
|
168
|
+
if (msg.sender === 'bot') {
|
|
169
|
+
this.plugins.forEach(plugin => {
|
|
170
|
+
if (plugin.onMessageReceived) {
|
|
171
|
+
try {
|
|
172
|
+
plugin.onMessageReceived(msg);
|
|
173
|
+
}
|
|
174
|
+
catch (_a) {
|
|
175
|
+
// best-effort
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Setup lifecycle hooks - override to add custom setup logic
|
|
184
|
+
*/
|
|
185
|
+
setupLifecycleHooks() {
|
|
186
|
+
this.onBeforeInit();
|
|
187
|
+
this.onReady().catch(error => {
|
|
188
|
+
this.logError('Error during initialization:', error);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Called before initialization - override for custom pre-init logic
|
|
193
|
+
*/
|
|
194
|
+
onBeforeInit() {
|
|
195
|
+
this.log('Initializing chatbot controller...');
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Called when controller is ready - override for custom initialization
|
|
199
|
+
*/
|
|
200
|
+
onReady() {
|
|
201
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
202
|
+
this.log('Chatbot controller ready');
|
|
203
|
+
try {
|
|
204
|
+
const state = this.stateHandler.getState();
|
|
205
|
+
const firstMsg = state.messages && state.messages.length > 0 ? state.messages[0] : undefined;
|
|
206
|
+
if (firstMsg && firstMsg.sender === 'bot' && firstMsg.introduction && Array.isArray(firstMsg.suggestions) && firstMsg.suggestions.length > 0) {
|
|
207
|
+
this.suggestionHandler.setSuggestions(firstMsg.suggestions);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
catch (e) {
|
|
211
|
+
this.logError('Error initializing suggestions from initial messages:', e);
|
|
212
|
+
}
|
|
213
|
+
// Run onMessageReceived on initial/restored bot messages so plugins
|
|
214
|
+
// like ArtifactPlugin can post-process them (extract code fences, etc.)
|
|
215
|
+
this.processRestoredMessagesForPlugins();
|
|
216
|
+
if (this.ui.onStateChange) {
|
|
217
|
+
this.ui.onStateChange(this.getState());
|
|
218
|
+
}
|
|
219
|
+
this.emit('ready', this.stateHandler.getState());
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Called when controller is destroyed - override for cleanup
|
|
224
|
+
*/
|
|
225
|
+
onDestroy() {
|
|
226
|
+
this.log('Destroying chatbot controller...');
|
|
227
|
+
this.storageService.stopAutoSave();
|
|
228
|
+
this.pluginService.clearPlugins();
|
|
229
|
+
this.eventBus.removeAllListeners();
|
|
230
|
+
}
|
|
231
|
+
// ===== STATE MANAGEMENT =====
|
|
232
|
+
updateState(updates) {
|
|
233
|
+
this.stateHandler.updateState(updates);
|
|
234
|
+
}
|
|
235
|
+
// ===== MESSAGE OPERATIONS =====
|
|
236
|
+
/**
|
|
237
|
+
* Send a message (main public API)
|
|
238
|
+
*/
|
|
239
|
+
sendMessage(text_1) {
|
|
240
|
+
return __awaiter(this, arguments, void 0, function* (text, options = {}) {
|
|
241
|
+
this.log('Sending message:', text);
|
|
242
|
+
try {
|
|
243
|
+
const state = this.stateHandler.getState();
|
|
244
|
+
if (this.config.enableThreads && !state.currentThreadId) {
|
|
245
|
+
yield this.threadHandler.createThread('New Chat');
|
|
246
|
+
}
|
|
247
|
+
const processedText = yield this.beforeMessageSent(text, options);
|
|
248
|
+
if (!options.skipValidation) {
|
|
249
|
+
const validation = yield this.validationService.validateMessage(processedText);
|
|
250
|
+
if (!validation.isValid) {
|
|
251
|
+
const error = new ValidationError(validation.errors);
|
|
252
|
+
this.handleValidationError(error);
|
|
253
|
+
throw error;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
const message = this.messageHandler.createUserMessage(processedText, options.metadata);
|
|
257
|
+
if (options.files) {
|
|
258
|
+
message.files = options.files;
|
|
259
|
+
}
|
|
260
|
+
this.messageHandler.addMessage(message);
|
|
261
|
+
const currentState = this.stateHandler.getState();
|
|
262
|
+
if (options.threadId || currentState.currentThreadId) {
|
|
263
|
+
this.threadHandler.updateThreadMessages(options.threadId || currentState.currentThreadId);
|
|
264
|
+
}
|
|
265
|
+
yield this.afterMessageSent(message);
|
|
266
|
+
this.providerService.processMessage(message).catch(error => {
|
|
267
|
+
this.logError('Error processing with provider:', error);
|
|
268
|
+
});
|
|
269
|
+
return message;
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
this.handleError(error);
|
|
273
|
+
throw error;
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Stop the current provider processing/stream
|
|
279
|
+
*/
|
|
280
|
+
stop() {
|
|
281
|
+
this.providerService.stopCurrentProcessing();
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Add a message programmatically
|
|
285
|
+
*/
|
|
286
|
+
addMessage(data) {
|
|
287
|
+
const message = this.messageHandler.createMessage(data);
|
|
288
|
+
// Process message through plugins if it's from the bot and has text content
|
|
289
|
+
const processedMessage = message.sender === 'bot'
|
|
290
|
+
? this.processMessageThroughPlugins(message)
|
|
291
|
+
: message;
|
|
292
|
+
this.messageHandler.addMessage(processedMessage);
|
|
293
|
+
return processedMessage;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Update an existing message by ID
|
|
297
|
+
*/
|
|
298
|
+
updateMessage(id, updates) {
|
|
299
|
+
this.messageHandler.updateMessage(id, updates);
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Delete a message by ID
|
|
303
|
+
*/
|
|
304
|
+
deleteMessage(id) {
|
|
305
|
+
this.messageHandler.deleteMessage(id);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Clear all messages from the current conversation
|
|
309
|
+
*/
|
|
310
|
+
clearMessages() {
|
|
311
|
+
this.updateState({ messages: [] });
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Get all messages in the current conversation
|
|
315
|
+
*/
|
|
316
|
+
getMessages() {
|
|
317
|
+
return this.stateHandler.getState().messages;
|
|
318
|
+
}
|
|
319
|
+
// ===== FILE OPERATIONS =====
|
|
320
|
+
/**
|
|
321
|
+
* Upload files to the chatbot
|
|
322
|
+
* @param files - Optional array of files to upload. If not provided, will trigger file dialog
|
|
323
|
+
* @returns Array of uploaded ChatbotFile objects
|
|
324
|
+
*/
|
|
325
|
+
uploadFiles(files) {
|
|
326
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
327
|
+
if (!this.config.enableFileUpload) {
|
|
328
|
+
throw new Error('File upload is not enabled');
|
|
329
|
+
}
|
|
330
|
+
let filesToUpload = files;
|
|
331
|
+
if (!filesToUpload && this.ui.openFileDialog) {
|
|
332
|
+
filesToUpload = yield this.ui.openFileDialog();
|
|
333
|
+
}
|
|
334
|
+
if (!filesToUpload || filesToUpload.length === 0) {
|
|
335
|
+
return [];
|
|
336
|
+
}
|
|
337
|
+
const uploadedFiles = [];
|
|
338
|
+
for (const file of filesToUpload) {
|
|
339
|
+
try {
|
|
340
|
+
const validation = yield this.validationService.validateFile(file, {
|
|
341
|
+
maxFileSize: this.config.maxFileSize,
|
|
342
|
+
allowedTypes: this.config.allowedFileTypes
|
|
343
|
+
});
|
|
344
|
+
if (!validation.isValid) {
|
|
345
|
+
if (this.ui.showNotification) {
|
|
346
|
+
this.ui.showNotification(validation.errors[0] || 'File validation failed', 'error');
|
|
347
|
+
}
|
|
348
|
+
continue;
|
|
349
|
+
}
|
|
350
|
+
const chatbotFile = yield this.fileHandler.createChatbotFile(file);
|
|
351
|
+
const uploaded = yield this.providerService.uploadFileToProvider(file);
|
|
352
|
+
if (uploaded) {
|
|
353
|
+
Object.assign(chatbotFile, uploaded);
|
|
354
|
+
}
|
|
355
|
+
uploadedFiles.push(chatbotFile);
|
|
356
|
+
this.fileHandler.addFile(chatbotFile);
|
|
357
|
+
if (this.ui.showFilePreview) {
|
|
358
|
+
this.ui.showFilePreview(chatbotFile);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
catch (error) {
|
|
362
|
+
this.logError('Error uploading file:', error);
|
|
363
|
+
if (this.ui.showNotification) {
|
|
364
|
+
this.ui.showNotification(`Failed to upload ${file.name}`, 'error');
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
return uploadedFiles;
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Remove an uploaded file by ID
|
|
373
|
+
*/
|
|
374
|
+
removeFile(fileId) {
|
|
375
|
+
this.fileHandler.removeFile(fileId);
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Clear all uploaded files
|
|
379
|
+
*/
|
|
380
|
+
clearFiles() {
|
|
381
|
+
this.fileHandler.clearFiles();
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Get all uploaded files
|
|
385
|
+
*/
|
|
386
|
+
getUploadedFiles() {
|
|
387
|
+
return this.stateHandler.getState().uploadedFiles;
|
|
388
|
+
}
|
|
389
|
+
// ===== THREAD OPERATIONS =====
|
|
390
|
+
/**
|
|
391
|
+
* Create a new conversation thread
|
|
392
|
+
*/
|
|
393
|
+
createThread(title) {
|
|
394
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
395
|
+
return yield this.threadHandler.createThread(title);
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Switch to a different thread
|
|
400
|
+
*/
|
|
401
|
+
switchThread(threadId) {
|
|
402
|
+
this.threadHandler.switchThread(threadId);
|
|
403
|
+
this.processRestoredMessagesForPlugins();
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Delete a thread by ID
|
|
407
|
+
*/
|
|
408
|
+
deleteThread(threadId) {
|
|
409
|
+
this.threadHandler.deleteThread(threadId);
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Rename a thread
|
|
413
|
+
*/
|
|
414
|
+
renameThread(threadId, newTitle) {
|
|
415
|
+
this.threadHandler.renameThread(threadId, newTitle);
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Toggle bookmark on a thread
|
|
419
|
+
*/
|
|
420
|
+
bookmarkThread(threadId) {
|
|
421
|
+
this.threadHandler.bookmarkThread(threadId);
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Get the currently active thread
|
|
425
|
+
*/
|
|
426
|
+
getCurrentThread() {
|
|
427
|
+
const state = this.stateHandler.getState();
|
|
428
|
+
return state.threads.find(t => t.id === state.currentThreadId);
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Get all available threads
|
|
432
|
+
*/
|
|
433
|
+
getThreads() {
|
|
434
|
+
return this.stateHandler.getState().threads;
|
|
435
|
+
}
|
|
436
|
+
// ===== MODULE OPERATIONS =====
|
|
437
|
+
/**
|
|
438
|
+
* Set available modules for the chatbot
|
|
439
|
+
*/
|
|
440
|
+
setModules(modules) {
|
|
441
|
+
this.moduleHandler.setModules(modules);
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Select specific modules by their IDs
|
|
445
|
+
*/
|
|
446
|
+
selectModules(moduleIds) {
|
|
447
|
+
this.moduleHandler.selectModules(moduleIds);
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Toggle a module's selection state
|
|
451
|
+
*/
|
|
452
|
+
toggleModule(moduleId) {
|
|
453
|
+
this.moduleHandler.toggleModule(moduleId);
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Get currently selected modules
|
|
457
|
+
*/
|
|
458
|
+
getSelectedModules() {
|
|
459
|
+
return this.moduleHandler.getSelectedModules();
|
|
460
|
+
}
|
|
461
|
+
// ===== SUGGESTION OPERATIONS =====
|
|
462
|
+
/**
|
|
463
|
+
* Set suggestion chips for user interaction
|
|
464
|
+
*/
|
|
465
|
+
setSuggestions(suggestions) {
|
|
466
|
+
this.suggestionHandler.setSuggestions(suggestions);
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Clear all suggestions
|
|
470
|
+
*/
|
|
471
|
+
clearSuggestions() {
|
|
472
|
+
this.suggestionHandler.clearSuggestions();
|
|
473
|
+
}
|
|
474
|
+
// ===== HOOKS (Override Points) =====
|
|
475
|
+
/**
|
|
476
|
+
* Called before sending message - override to transform or validate
|
|
477
|
+
*/
|
|
478
|
+
beforeMessageSent(text, _options) {
|
|
479
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
480
|
+
let processedText = text;
|
|
481
|
+
for (const plugin of this.plugins.values()) {
|
|
482
|
+
if (plugin.beforeSend) {
|
|
483
|
+
processedText = yield plugin.beforeSend(processedText);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
return processedText;
|
|
487
|
+
});
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Called after message is sent - override for custom logic
|
|
491
|
+
*/
|
|
492
|
+
afterMessageSent(message) {
|
|
493
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
494
|
+
this.log('Message sent:', message);
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Called before provider call - override for custom logic
|
|
499
|
+
*/
|
|
500
|
+
beforeProviderCall(message) {
|
|
501
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
502
|
+
this.log('Calling provider for message:', message.id);
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Called after provider call - override for custom logic
|
|
507
|
+
*/
|
|
508
|
+
afterProviderCall() {
|
|
509
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
510
|
+
this.log('Provider call completed');
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Handle provider error - override to customize error handling
|
|
515
|
+
*/
|
|
516
|
+
handleProviderError(error) {
|
|
517
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
518
|
+
this.logError('Provider error:', error);
|
|
519
|
+
const errorMessage = this.messageHandler.createMessage({
|
|
520
|
+
sender: ChatbotSender.Bot,
|
|
521
|
+
text: 'Sorry, there was an error processing your request.',
|
|
522
|
+
state: ChatbotMessageState.Error,
|
|
523
|
+
timestamp: new Date().toISOString()
|
|
524
|
+
});
|
|
525
|
+
this.messageHandler.addMessage(errorMessage);
|
|
526
|
+
if (this.ui.showNotification) {
|
|
527
|
+
this.ui.showNotification('Failed to process message', 'error');
|
|
528
|
+
}
|
|
529
|
+
this.emit('provider:error', error);
|
|
530
|
+
yield this.pluginService.executeHook('onError', error);
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
/**
|
|
534
|
+
* Handle validation error - override to customize
|
|
535
|
+
*/
|
|
536
|
+
handleValidationError(error) {
|
|
537
|
+
this.logError('Validation error:', error);
|
|
538
|
+
if (this.ui.showNotification) {
|
|
539
|
+
this.ui.showNotification(error.errors[0], 'error');
|
|
540
|
+
}
|
|
541
|
+
this.emit('validation:error', error);
|
|
542
|
+
}
|
|
543
|
+
/**
|
|
544
|
+
* Handle general error - override to customize
|
|
545
|
+
*/
|
|
546
|
+
handleError(error) {
|
|
547
|
+
this.logError('Error:', error);
|
|
548
|
+
this.emit('error', error);
|
|
549
|
+
this.plugins.forEach(plugin => {
|
|
550
|
+
if (plugin.onError) {
|
|
551
|
+
plugin.onError(error);
|
|
552
|
+
}
|
|
553
|
+
});
|
|
554
|
+
}
|
|
555
|
+
// ===== PLUGIN SYSTEM =====
|
|
556
|
+
/**
|
|
557
|
+
* Register a new plugin with the chatbot
|
|
558
|
+
*/
|
|
559
|
+
registerPlugin(plugin) {
|
|
560
|
+
this.pluginService.registerPlugin(plugin, this);
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* Unregister a plugin by ID
|
|
564
|
+
*/
|
|
565
|
+
unregisterPlugin(pluginId) {
|
|
566
|
+
this.pluginService.unregisterPlugin(pluginId);
|
|
567
|
+
}
|
|
568
|
+
/**
|
|
569
|
+
* Get a registered plugin by ID
|
|
570
|
+
*/
|
|
571
|
+
getPlugin(pluginId) {
|
|
572
|
+
return this.pluginService.getPlugin(pluginId);
|
|
573
|
+
}
|
|
574
|
+
// ===== PROVIDER MANAGEMENT =====
|
|
575
|
+
/**
|
|
576
|
+
* Set the AI provider for the chatbot
|
|
577
|
+
*/
|
|
578
|
+
setProvider(provider) {
|
|
579
|
+
this.providerService.setProvider(provider);
|
|
580
|
+
// Only connect if not already connected
|
|
581
|
+
if (!provider.isConnected()) {
|
|
582
|
+
provider.connect({}).then(() => __awaiter(this, void 0, void 0, function* () {
|
|
583
|
+
// Auto-load conversations if provider supports it
|
|
584
|
+
yield this.autoLoadConversations(provider);
|
|
585
|
+
this.emit('provider:connected', provider.id);
|
|
586
|
+
})).catch(error => {
|
|
587
|
+
this.logError('Failed to connect provider:', error);
|
|
588
|
+
});
|
|
589
|
+
}
|
|
590
|
+
else {
|
|
591
|
+
// Provider already connected, just auto-load conversations and emit event
|
|
592
|
+
this.autoLoadConversations(provider).catch(error => {
|
|
593
|
+
this.logError('Failed to auto-load conversations:', error);
|
|
594
|
+
});
|
|
595
|
+
this.emit('provider:connected', provider.id);
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
// ===== STORAGE MANAGEMENT =====
|
|
599
|
+
/**
|
|
600
|
+
* Set the storage adapter for persisting chatbot state
|
|
601
|
+
*/
|
|
602
|
+
setStorage(storage) {
|
|
603
|
+
this.storageService.setStorage(storage);
|
|
604
|
+
}
|
|
605
|
+
/**
|
|
606
|
+
* Save current state to storage
|
|
607
|
+
*/
|
|
608
|
+
saveToStorage() {
|
|
609
|
+
return __awaiter(this, arguments, void 0, function* (key = 'chatbot-state') {
|
|
610
|
+
yield this.storageService.saveState(key);
|
|
611
|
+
});
|
|
612
|
+
}
|
|
613
|
+
/**
|
|
614
|
+
* Load state from storage
|
|
615
|
+
*/
|
|
616
|
+
loadFromStorage() {
|
|
617
|
+
return __awaiter(this, arguments, void 0, function* (key = 'chatbot-state') {
|
|
618
|
+
yield this.storageService.loadState(key);
|
|
619
|
+
// Process loaded messages through plugins to render any HTML tags
|
|
620
|
+
const state = this.stateHandler.getState();
|
|
621
|
+
if (state.messages && state.messages.length > 0) {
|
|
622
|
+
const processedMessages = state.messages.map(msg => this.processMessageThroughPlugins(msg));
|
|
623
|
+
this.stateHandler.updateState({ messages: processedMessages });
|
|
624
|
+
// Run onMessageReceived so plugins like ArtifactPlugin can post-process
|
|
625
|
+
this.processRestoredMessagesForPlugins();
|
|
626
|
+
}
|
|
627
|
+
});
|
|
628
|
+
}
|
|
629
|
+
// ===== EVENT BUS =====
|
|
630
|
+
/**
|
|
631
|
+
* Subscribe to an event
|
|
632
|
+
* @returns Unsubscribe function
|
|
633
|
+
*/
|
|
634
|
+
on(event, handler) {
|
|
635
|
+
return this.eventBus.on(event, handler);
|
|
636
|
+
}
|
|
637
|
+
/**
|
|
638
|
+
* Emit an event
|
|
639
|
+
*/
|
|
640
|
+
emit(event, data) {
|
|
641
|
+
this.eventBus.emit(event, data);
|
|
642
|
+
}
|
|
643
|
+
// ===== PUBLIC API =====
|
|
644
|
+
/**
|
|
645
|
+
* Get current chatbot state (readonly)
|
|
646
|
+
*/
|
|
647
|
+
getState() {
|
|
648
|
+
return this.stateHandler.getState();
|
|
649
|
+
}
|
|
650
|
+
/**
|
|
651
|
+
* Update chatbot state (use with caution)
|
|
652
|
+
*/
|
|
653
|
+
setState(updates) {
|
|
654
|
+
// If messages are being set, process them through plugins first
|
|
655
|
+
if (updates.messages && Array.isArray(updates.messages)) {
|
|
656
|
+
updates.messages = updates.messages.map(msg => this.processMessageThroughPlugins(msg));
|
|
657
|
+
}
|
|
658
|
+
// If threads are being set, process their messages through plugins
|
|
659
|
+
if (updates.threads && Array.isArray(updates.threads)) {
|
|
660
|
+
updates.threads = updates.threads.map(thread => (Object.assign(Object.assign({}, thread), { messages: thread.messages.map(msg => this.processMessageThroughPlugins(msg)) })));
|
|
661
|
+
}
|
|
662
|
+
this.updateState(updates);
|
|
663
|
+
// Run onMessageReceived so plugins like ArtifactPlugin can post-process
|
|
664
|
+
if (updates.messages) {
|
|
665
|
+
this.processRestoredMessagesForPlugins();
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
/**
|
|
669
|
+
* Load conversations from external source (API, database, etc.)
|
|
670
|
+
* This is a helper method that processes messages through plugins
|
|
671
|
+
*/
|
|
672
|
+
loadConversations(threads) {
|
|
673
|
+
const processedThreads = threads.map(thread => (Object.assign(Object.assign({}, thread), { messages: thread.messages.map(msg => this.processMessageThroughPlugins(msg)) })));
|
|
674
|
+
this.updateState({
|
|
675
|
+
threads: processedThreads,
|
|
676
|
+
currentThreadId: processedThreads.length > 0 ? processedThreads[0].id : undefined,
|
|
677
|
+
messages: processedThreads.length > 0 ? processedThreads[0].messages : []
|
|
678
|
+
});
|
|
679
|
+
// Run onMessageReceived so plugins like ArtifactPlugin can post-process
|
|
680
|
+
this.processRestoredMessagesForPlugins();
|
|
681
|
+
}
|
|
682
|
+
/**
|
|
683
|
+
* Auto-load conversations from provider if it has loadConversations method
|
|
684
|
+
* This is called automatically when provider connects
|
|
685
|
+
*/
|
|
686
|
+
autoLoadConversations(provider) {
|
|
687
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
688
|
+
if (!provider)
|
|
689
|
+
return;
|
|
690
|
+
// Check if provider has loadConversations method
|
|
691
|
+
if (typeof provider.loadConversations === 'function') {
|
|
692
|
+
try {
|
|
693
|
+
this.log('Auto-loading conversations from provider...');
|
|
694
|
+
const conversations = yield provider.loadConversations();
|
|
695
|
+
if (Array.isArray(conversations) && conversations.length > 0) {
|
|
696
|
+
this.log(`Loaded ${conversations.length} conversation summaries`);
|
|
697
|
+
// Load full conversation details if loadConversation method exists
|
|
698
|
+
const loadedThreads = [];
|
|
699
|
+
if (typeof provider.loadConversation === 'function') {
|
|
700
|
+
for (const conv of conversations) {
|
|
701
|
+
try {
|
|
702
|
+
const fullConversation = yield provider.loadConversation(conv.id);
|
|
703
|
+
if (fullConversation) {
|
|
704
|
+
const thread = {
|
|
705
|
+
id: fullConversation.id,
|
|
706
|
+
title: fullConversation.title,
|
|
707
|
+
messages: fullConversation.messages || [],
|
|
708
|
+
createdAt: fullConversation.createdAt,
|
|
709
|
+
updatedAt: fullConversation.updatedAt
|
|
710
|
+
};
|
|
711
|
+
loadedThreads.push(thread);
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
catch (error) {
|
|
715
|
+
this.logError(`Failed to load conversation ${conv.id}:`, error);
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
else {
|
|
720
|
+
// If no loadConversation method, convert summary to threads
|
|
721
|
+
for (const conv of conversations) {
|
|
722
|
+
const thread = {
|
|
723
|
+
id: conv.id,
|
|
724
|
+
title: conv.title,
|
|
725
|
+
messages: [],
|
|
726
|
+
createdAt: conv.createdAt,
|
|
727
|
+
updatedAt: conv.updatedAt
|
|
728
|
+
};
|
|
729
|
+
loadedThreads.push(thread);
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
if (loadedThreads.length > 0) {
|
|
733
|
+
this.log(`Successfully loaded ${loadedThreads.length} conversations`);
|
|
734
|
+
this.loadConversations(loadedThreads);
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
else {
|
|
738
|
+
this.log('No conversations to load from provider');
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
catch (error) {
|
|
742
|
+
this.logError('Failed to auto-load conversations from provider:', error);
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
});
|
|
746
|
+
}
|
|
747
|
+
/**
|
|
748
|
+
* Set or update UI callback functions
|
|
749
|
+
*/
|
|
750
|
+
setUICallbacks(callbacks) {
|
|
751
|
+
this.ui = Object.assign(Object.assign({}, this.ui), callbacks);
|
|
752
|
+
}
|
|
753
|
+
/**
|
|
754
|
+
* Get chatbot configuration (readonly)
|
|
755
|
+
*/
|
|
756
|
+
getConfig() {
|
|
757
|
+
return Object.freeze(Object.assign({}, this.config));
|
|
758
|
+
}
|
|
759
|
+
/**
|
|
760
|
+
* Update chatbot configuration
|
|
761
|
+
* Merges the provided partial config with existing config
|
|
762
|
+
*/
|
|
763
|
+
updateConfig(partialConfig) {
|
|
764
|
+
this.config = Object.assign(Object.assign({}, this.config), partialConfig);
|
|
765
|
+
}
|
|
766
|
+
/**
|
|
767
|
+
* Set typing indicator state
|
|
768
|
+
*/
|
|
769
|
+
setTyping(isTyping) {
|
|
770
|
+
this.updateState({ isTyping });
|
|
771
|
+
this.emit(isTyping ? 'typing:start' : 'typing:end');
|
|
772
|
+
}
|
|
773
|
+
/**
|
|
774
|
+
* Set dynamic status text shown beside the loading indicator
|
|
775
|
+
*/
|
|
776
|
+
setStatusText(text) {
|
|
777
|
+
this.updateState({ statusText: text });
|
|
778
|
+
}
|
|
779
|
+
/**
|
|
780
|
+
* Clear the dynamic status text
|
|
781
|
+
*/
|
|
782
|
+
clearStatusText() {
|
|
783
|
+
this.updateState({ statusText: undefined });
|
|
784
|
+
}
|
|
785
|
+
/**
|
|
786
|
+
* Get context for provider calls
|
|
787
|
+
*/
|
|
788
|
+
getContext() {
|
|
789
|
+
const state = this.stateHandler.getState();
|
|
790
|
+
return {
|
|
791
|
+
messages: state.messages,
|
|
792
|
+
currentThread: this.getCurrentThread(),
|
|
793
|
+
selectedModules: state.selectedModules,
|
|
794
|
+
metadata: state.metadata,
|
|
795
|
+
uploadedFiles: state.uploadedFiles
|
|
796
|
+
};
|
|
797
|
+
}
|
|
798
|
+
/**
|
|
799
|
+
* Destroy the chatbot controller and clean up resources
|
|
800
|
+
*/
|
|
801
|
+
destroy() {
|
|
802
|
+
this.onDestroy();
|
|
803
|
+
}
|
|
804
|
+
// ===== UTILITIES =====
|
|
805
|
+
generateId(prefix) {
|
|
806
|
+
return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
807
|
+
}
|
|
808
|
+
formatFileSize(bytes) {
|
|
809
|
+
if (bytes < 1024)
|
|
810
|
+
return `${bytes} B`;
|
|
811
|
+
if (bytes < 1024 * 1024)
|
|
812
|
+
return `${(bytes / 1024).toFixed(2)} KB`;
|
|
813
|
+
return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
|
|
814
|
+
}
|
|
815
|
+
log(...args) {
|
|
816
|
+
if (this.config.debug) {
|
|
817
|
+
console.log('[ChatbotCore]', ...args);
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
logError(...args) {
|
|
821
|
+
console.error('[ChatbotCore]', ...args);
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
//# sourceMappingURL=chatbot-core.controller.js.map
|