forked from NuQloud/nc-talk-ai
Talk AI is a multi-bot AI assistant manager for Nextcloud Talk: per-bot prompts and models, agentic tool calling (MCP + built-in tools), RAG over Nextcloud files, room-document search, vision and speech-to-text attachments, persistent bot wikis, approval workflows, rate limiting, and multi-provider LLM support (any OpenAI-compatible endpoint). Developed within EDUC - the European Digital UniverCity (https://educalliance.eu), where it runs as the 'EDUC AI' assistant on the alliance-wide Nextcloud portal. This public repository is the upstream point of truth; deployment-specific tools plug in via the tool-provider extension point (docs/TOOL_PROVIDERS.md). License: AGPL-3.0-or-later.
56 lines
72 KiB
JavaScript
56 lines
72 KiB
JavaScript
(function(){"use strict";try{if(typeof document<"u"){var a=document.createElement("style");a.appendChild(document.createTextNode('.material-design-icon{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}#skip-actions.vue-skip-actions:focus-within{top:0!important;left:0!important;width:100vw;height:100vh;padding:var(--body-container-margin)!important;-webkit-backdrop-filter:brightness(50%);backdrop-filter:brightness(50%)}@media only screen and (min-width:1024px){.content:not(.content--legacy) .app-navigation:not(.app-navigation--close)~.app-content{border-inline-start:1px solid var(--color-border);border-start-start-radius:var(--body-container-radius);border-end-start-radius:var(--body-container-radius)}}.material-design-icon[data-v-ffbd7561]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.vue-skip-actions__container[data-v-ffbd7561]{background-color:var(--color-main-background);border-radius:var(--border-radius-large);padding:22px}.vue-skip-actions__headline[data-v-ffbd7561]{font-weight:700;font-size:20px;line-height:30px;margin-bottom:12px}.vue-skip-actions__buttons[data-v-ffbd7561]{display:flex;flex-wrap:wrap;gap:12px}.vue-skip-actions__buttons>*[data-v-ffbd7561]{flex:1 0 fit-content}.vue-skip-actions__image[data-v-ffbd7561]{margin-top:12px}.vue-skip-actions__image[data-v-ffbd7561]:dir(rtl){transform:rotateY(180deg)}.content[data-v-ffbd7561]{box-sizing:border-box;margin:var(--body-container-margin);margin-top:var(--header-height);display:flex;width:calc(100% - var(--body-container-margin) * 2);border-radius:var(--body-container-radius);height:var(--body-height);overflow:hidden;padding:0}.content[data-v-ffbd7561]:not(.content--legacy){background-color:var(--color-main-background-blur, var(--color-main-background));backdrop-filter:var(--filter-background-blur, none);-webkit-backdrop-filter:var(--filter-background-blur, none)}.content[data-v-ffbd7561]:not(.with-sidebar--full){position:fixed}.content[data-v-ffbd7561] *{box-sizing:border-box}.material-design-icon[data-v-d0b1a8bc]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-details-toggle[data-v-d0b1a8bc]{position:sticky;width:var(--default-clickable-area);height:var(--default-clickable-area);padding:calc((var(--default-clickable-area) - 16px) / 2);cursor:pointer;opacity:.6;transform:rotate(180deg);background-color:var(--color-main-background);z-index:2000;top:var(--app-navigation-padding);inset-inline-start:calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2)}.app-details-toggle--mobile[data-v-d0b1a8bc]{inset-inline-start:var(--app-navigation-padding)}.app-details-toggle[data-v-d0b1a8bc]:active,.app-details-toggle[data-v-d0b1a8bc]:hover,.app-details-toggle[data-v-d0b1a8bc]:focus{opacity:1}.material-design-icon[data-v-342489c9]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-content[data-v-342489c9]{position:initial;z-index:1000;flex-basis:100vw;height:100%;margin:0!important;background-color:var(--color-main-background);min-width:0}.app-content[data-v-342489c9]:not(.app-content--has-list){overflow:auto}.app-content-wrapper[data-v-342489c9]{position:relative;width:100%;height:100%}.app-content-wrapper--no-split.app-content-wrapper--show-list[data-v-342489c9] .app-content-list{display:flex}.app-content-wrapper--no-split.app-content-wrapper--show-list[data-v-342489c9] .app-content-details,.app-content-wrapper--no-split.app-content-wrapper--show-details[data-v-342489c9] .app-content-list{display:none}.app-content-wrapper--no-split.app-content-wrapper--show-details[data-v-342489c9] .app-content-details{display:block}[data-v-342489c9] .splitpanes.default-theme .app-content-list{max-width:none;scrollbar-width:auto}[data-v-342489c9] .splitpanes.default-theme .splitpanes__pane{background-color:transparent;transition:none}[data-v-342489c9] .splitpanes.default-theme .splitpanes__pane-list{min-width:300px;position:sticky}@media only screen and not (min-width:1024px){[data-v-342489c9] .splitpanes.default-theme .splitpanes__pane-list{display:none}}[data-v-342489c9] .splitpanes.default-theme .splitpanes__pane-details{overflow-y:auto}@media only screen and not (min-width:1024px){[data-v-342489c9] .splitpanes.default-theme .splitpanes__pane-details{min-width:100%}}[data-v-342489c9] .splitpanes.default-theme .splitpanes__splitter{background-color:var(--color-main-background)}[data-v-342489c9] .splitpanes.default-theme .splitpanes__splitter:before,[data-v-342489c9] .splitpanes.default-theme .splitpanes__splitter:after{background-color:var(--color-border)}[data-v-342489c9] .splitpanes.default-theme.splitpanes--vertical .splitpanes__splitter{border-left:1px solid var(--color-border)}[data-v-342489c9] .splitpanes.default-theme.splitpanes--horizontal .splitpanes__splitter{border-top:1px solid var(--color-border)}.app-content-wrapper--show-list[data-v-342489c9] .app-content-list{max-width:none}.app-content-wrapper__list[data-v-342489c9]{height:100%}.splitpanes{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;height:100%}.splitpanes--vertical{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.splitpanes--horizontal{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.splitpanes--dragging *{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.splitpanes__pane{width:100%;height:100%;overflow:hidden}.splitpanes--vertical .splitpanes__pane{-webkit-transition:width .2s ease-out;-o-transition:width .2s ease-out;transition:width .2s ease-out}.splitpanes--horizontal .splitpanes__pane{-webkit-transition:height .2s ease-out;-o-transition:height .2s ease-out;transition:height .2s ease-out}.splitpanes--dragging .splitpanes__pane{-webkit-transition:none;-o-transition:none;transition:none}.splitpanes__splitter{-ms-touch-action:none;touch-action:none}.splitpanes--vertical>.splitpanes__splitter{min-width:1px;cursor:col-resize}.splitpanes--horizontal>.splitpanes__splitter{min-height:1px;cursor:row-resize}.splitpanes.default-theme .splitpanes__pane{background-color:#f2f2f2}.splitpanes.default-theme .splitpanes__splitter{background-color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;-ms-flex-negative:0;flex-shrink:0}.splitpanes.default-theme .splitpanes__splitter:before,.splitpanes.default-theme .splitpanes__splitter:after{content:"";position:absolute;top:50%;left:50%;background-color:#00000026;-webkit-transition:background-color .3s;-o-transition:background-color .3s;transition:background-color .3s}.splitpanes.default-theme .splitpanes__splitter:hover:before,.splitpanes.default-theme .splitpanes__splitter:hover:after{background-color:#00000040}.splitpanes.default-theme .splitpanes__splitter:first-child{cursor:auto}.default-theme.splitpanes .splitpanes .splitpanes__splitter{z-index:1}.default-theme.splitpanes--vertical>.splitpanes__splitter,.default-theme .splitpanes--vertical>.splitpanes__splitter{width:7px;border-left:1px solid #eee;margin-left:-1px}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);width:1px;height:30px}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:before{margin-left:-2px}.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{margin-left:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter,.default-theme .splitpanes--horizontal>.splitpanes__splitter{height:7px;border-top:1px solid #eee;margin-top:-1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translate(-50%);width:30px;height:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before{margin-top:-2px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{margin-top:1px}.public-bot-card[data-v-27cc5089]{background:var(--color-main-background);border:1px solid var(--color-border);border-radius:12px;padding:20px;position:relative;transition:box-shadow .2s,transform .2s;display:flex;flex-direction:column;gap:16px}.public-bot-card[data-v-27cc5089]:hover{box-shadow:0 4px 16px #0000001f;transform:translateY(-2px)}.public-bot-card.inactive[data-v-27cc5089]{opacity:.6}.card-header[data-v-27cc5089]{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.bot-identity[data-v-27cc5089]{display:flex;flex-direction:column;gap:8px}.bot-name[data-v-27cc5089]{margin:0;font-size:18px;font-weight:600;color:var(--color-main-text)}.mention-row[data-v-27cc5089]{display:flex;align-items:center;gap:6px;width:fit-content}.mention-badge[data-v-27cc5089]{display:inline-block;background:var(--color-primary-element);color:#fff;padding:4px 12px;border-radius:16px;font-size:13px;font-weight:600;width:fit-content}.copy-handle-button[data-v-27cc5089]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid transparent;border-radius:50%;background:transparent;color:var(--color-text-lighter);cursor:pointer;transition:background .2s,color .2s,border-color .2s}.copy-handle-button[data-v-27cc5089]:hover,.copy-handle-button[data-v-27cc5089]:focus-visible{background:var(--color-background-hover);border-color:var(--color-border);color:var(--color-main-text)}.visibility-badge[data-v-27cc5089]{padding:4px 12px;border-radius:16px;font-size:12px;font-weight:600;text-transform:uppercase;white-space:nowrap}.visibility-badge.global[data-v-27cc5089]{background:var(--color-success);color:#000}.visibility-badge.personal[data-v-27cc5089]{background:var(--color-primary-element-light);color:var(--color-primary-element-dark)}.visibility-badge.teams[data-v-27cc5089]{background:var(--color-primary-element);color:#fff}.visibility-badge.groups[data-v-27cc5089]{background:var(--color-warning);color:#000}.bot-description[data-v-27cc5089]{flex:1;min-height:48px}.bot-description p[data-v-27cc5089]{margin:0;font-size:14px;line-height:1.5;color:var(--color-text-lighter)}.bot-description .no-description[data-v-27cc5089]{font-style:italic;opacity:.7}.access-reason[data-v-27cc5089]{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--color-background-dark);border-radius:8px;font-size:13px}.access-icon[data-v-27cc5089]{font-size:14px}.access-text[data-v-27cc5089]{color:var(--color-text-lighter)}.bot-meta[data-v-27cc5089]{display:flex;flex-direction:column;gap:6px;padding-top:12px;border-top:1px solid var(--color-border)}.meta-row[data-v-27cc5089]{display:flex;gap:8px;font-size:13px}.meta-label[data-v-27cc5089]{color:var(--color-text-lighter)}.meta-value[data-v-27cc5089]{color:var(--color-main-text);font-weight:500}.card-actions[data-v-27cc5089]{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.button[data-v-27cc5089]{display:inline-flex;align-items:center;justify-content:center;padding:8px 16px;border-radius:20px;cursor:pointer;font-size:14px;font-weight:500;transition:background .2s,border-color .2s}.primary-button[data-v-27cc5089]{background:var(--color-primary-element);color:#fff;border:1px solid var(--color-primary-element)}.primary-button[data-v-27cc5089]:hover{background:var(--color-primary-element-light)}.secondary-button[data-v-27cc5089]{background:var(--color-main-background);color:var(--color-main-text);border:1px solid var(--color-border)}.secondary-button[data-v-27cc5089]:hover{background:var(--color-background-hover)}.inactive-badge[data-v-27cc5089]{position:absolute;top:12px;right:12px;background:var(--color-error);color:#fff;padding:4px 10px;border-radius:12px;font-size:11px;display:flex;align-items:center;gap:4px}.modal-overlay[data-v-2318f839]{position:fixed;z-index:9999;top:0;left:0;width:100%;height:100%;background:#0009;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.modal-container[data-v-2318f839]{background:var(--color-main-background);border-radius:12px;box-shadow:0 8px 32px #0000003d;max-width:700px;width:90%;max-height:85vh;display:flex;flex-direction:column}.modal-header[data-v-2318f839]{padding:20px 24px;border-bottom:1px solid var(--color-border);display:flex;justify-content:space-between;align-items:center}.header-content[data-v-2318f839]{display:flex;align-items:center;gap:16px}.header-content h2[data-v-2318f839]{margin:0;font-size:22px;font-weight:600}.mention-badge[data-v-2318f839]{background:var(--color-primary-element);color:#fff;padding:4px 12px;border-radius:16px;font-size:14px;font-weight:600}.close-button[data-v-2318f839]{background:none;border:none;cursor:pointer;padding:8px;font-size:20px;opacity:.7;border-radius:50%;transition:opacity .2s,background .2s}.close-button[data-v-2318f839]:hover{opacity:1;background:var(--color-background-hover)}.modal-loading[data-v-2318f839]{padding:60px 20px;text-align:center}.modal-loading .icon-loading[data-v-2318f839]{font-size:32px;display:block;margin-bottom:16px}.modal-body[data-v-2318f839]{padding:24px;overflow-y:auto;flex:1}.detail-section[data-v-2318f839]{margin-bottom:28px}.detail-section[data-v-2318f839]:last-child{margin-bottom:0}.detail-section h3[data-v-2318f839]{margin:0 0 12px;font-size:14px;font-weight:600;color:var(--color-text-lighter);text-transform:uppercase;letter-spacing:.5px}.description-text[data-v-2318f839]{margin:0;font-size:15px;line-height:1.6;color:var(--color-main-text)}.no-content[data-v-2318f839]{margin:0;font-style:italic;color:var(--color-text-lighter)}.visibility-info[data-v-2318f839]{display:flex;flex-wrap:wrap;align-items:center;gap:12px}.visibility-badge[data-v-2318f839]{padding:6px 14px;border-radius:20px;font-size:13px;font-weight:600}.visibility-badge.global[data-v-2318f839]{background:var(--color-success);color:#000}.visibility-badge.personal[data-v-2318f839]{background:var(--color-primary-element-light);color:var(--color-primary-element-dark)}.visibility-badge.teams[data-v-2318f839]{background:var(--color-primary-element);color:#fff}.visibility-badge.groups[data-v-2318f839]{background:var(--color-warning);color:#000}.access-reason[data-v-2318f839]{font-size:13px;color:var(--color-text-lighter);padding:6px 12px;background:var(--color-background-dark);border-radius:8px}.creator-info[data-v-2318f839]{display:flex;flex-direction:column;gap:4px}.creator-name[data-v-2318f839]{font-size:15px;font-weight:500;color:var(--color-main-text)}.creation-date[data-v-2318f839]{font-size:13px;color:var(--color-text-lighter)}.system-prompt-container[data-v-2318f839]{background:var(--color-background-dark);border-radius:8px;padding:16px;max-height:250px;overflow-y:auto}.system-prompt[data-v-2318f839]{margin:0;font-family:Menlo,Monaco,Consolas,monospace;font-size:13px;line-height:1.6;white-space:pre-wrap;word-wrap:break-word;color:var(--color-main-text)}.tools-list[data-v-2318f839]{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:12px}.tool-item[data-v-2318f839]{padding:12px 16px;background:var(--color-background-dark);border-radius:8px}.tool-header[data-v-2318f839]{display:flex;align-items:center;gap:10px;margin-bottom:4px}.tool-name[data-v-2318f839]{font-weight:600;font-size:14px}.tool-badge[data-v-2318f839]{padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600;text-transform:uppercase}.tool-badge.builtin[data-v-2318f839]{background:var(--color-primary-element-light);color:var(--color-primary-element-dark)}.tool-description[data-v-2318f839]{margin:0;font-size:13px;color:var(--color-text-lighter);line-height:1.4}.rag-status[data-v-2318f839]{display:flex;align-items:center;gap:10px;padding:12px 16px;background:var(--color-background-dark);border-radius:8px;font-size:14px}.rag-icon[data-v-2318f839]{font-size:20px}.modal-footer[data-v-2318f839]{padding:16px 24px;border-top:1px solid var(--color-border);display:flex;justify-content:flex-end}.button[data-v-2318f839]{padding:10px 20px;border:1px solid var(--color-border);background:var(--color-main-background);border-radius:20px;cursor:pointer;font-size:14px;transition:background .2s}.button[data-v-2318f839]:hover{background:var(--color-background-hover)}.talk-start-overlay[data-v-1bd149f6]{position:fixed;z-index:10000;top:0;left:0;width:100%;height:100%;background:#0009;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.talk-start-modal[data-v-1bd149f6]{background:var(--color-main-background);border-radius:12px;box-shadow:0 8px 32px #0000003d;max-width:720px;width:92%;max-height:88vh;display:flex;flex-direction:column;overflow:hidden}.modal-header[data-v-1bd149f6]{padding:20px 24px;border-bottom:1px solid var(--color-border);display:flex;justify-content:space-between;align-items:center;gap:16px}.header-content[data-v-1bd149f6]{min-width:0}.header-content h2[data-v-1bd149f6]{margin:0 0 8px;font-size:22px;font-weight:600;line-height:1.25}.mention-badge[data-v-1bd149f6]{display:inline-block;background:var(--color-primary-element);color:#fff;padding:4px 12px;border-radius:16px;font-size:14px;font-weight:600}.close-button[data-v-1bd149f6]{background:none;border:none;cursor:pointer;padding:8px;font-size:20px;opacity:.7;border-radius:50%;transition:opacity .2s,background .2s}.close-button[data-v-1bd149f6]:hover{opacity:1;background:var(--color-background-hover)}.modal-body[data-v-1bd149f6]{padding:24px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:20px}.modal-tabs[data-v-1bd149f6]{padding:24px 24px 0;flex:0 0 auto}.mode-tabs[data-v-1bd149f6]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));border:1px solid var(--color-border);border-radius:8px;overflow:hidden}.mode-tab[data-v-1bd149f6]{border:0;background:var(--color-main-background);color:var(--color-main-text);padding:11px 14px;font-weight:600;cursor:pointer}.mode-tab+.mode-tab[data-v-1bd149f6]{border-left:1px solid var(--color-border)}.mode-tab.active[data-v-1bd149f6]{background:var(--color-primary-element);color:#fff}.form-section[data-v-1bd149f6]{display:flex;flex-direction:column;gap:8px}.section-header[data-v-1bd149f6]{display:flex;justify-content:space-between;align-items:center;gap:12px}label[data-v-1bd149f6],.section-header label[data-v-1bd149f6]{font-size:13px;font-weight:600;color:var(--color-text-lighter);text-transform:uppercase}input[type=text][data-v-1bd149f6],textarea[data-v-1bd149f6]{width:100%;box-sizing:border-box;border:1px solid var(--color-border);border-radius:8px;background:var(--color-main-background);color:var(--color-main-text);font-size:14px;padding:10px 12px}textarea[data-v-1bd149f6]{resize:vertical;min-height:96px;line-height:1.5}.refresh-button[data-v-1bd149f6]{border:1px solid var(--color-border);background:var(--color-main-background);border-radius:16px;padding:5px 12px;cursor:pointer;color:var(--color-main-text)}.refresh-button[data-v-1bd149f6]:disabled{cursor:default;opacity:.6}.room-state[data-v-1bd149f6],.error-state[data-v-1bd149f6],.warning-state[data-v-1bd149f6]{padding:12px 14px;border-radius:8px;font-size:14px;line-height:1.4}.room-state[data-v-1bd149f6]{background:var(--color-background-dark);color:var(--color-text-lighter);display:flex;align-items:center;gap:8px}.error-state[data-v-1bd149f6]{background:var(--color-error-hover);color:var(--color-error-text);border:1px solid var(--color-error)}.warning-state[data-v-1bd149f6]{background:var(--color-warning);color:#000}.room-list[data-v-1bd149f6]{display:flex;flex-direction:column;gap:8px;max-height:240px;overflow-y:auto}.room-option[data-v-1bd149f6]{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-main-background);cursor:pointer;text-transform:none;color:var(--color-main-text)}.room-option.selected[data-v-1bd149f6]{border-color:var(--color-primary-element);box-shadow:0 0 0 1px var(--color-primary-element)}.room-option input[data-v-1bd149f6]{margin-top:3px;flex:0 0 auto}.room-copy[data-v-1bd149f6]{min-width:0;display:flex;flex-direction:column;gap:4px}.room-title[data-v-1bd149f6]{font-size:14px;font-weight:600;color:var(--color-main-text);overflow-wrap:anywhere}.room-meta[data-v-1bd149f6]{font-size:12px;font-weight:400;color:var(--color-text-lighter)}.send-option[data-v-1bd149f6]{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;background:var(--color-background-dark);border-radius:8px;text-transform:none;color:var(--color-main-text)}.send-option input[data-v-1bd149f6]{margin-top:2px}.send-option span[data-v-1bd149f6]{display:flex;flex-direction:column;gap:4px}.send-option small[data-v-1bd149f6]{color:var(--color-text-lighter);font-weight:400;line-height:1.35}.modal-footer[data-v-1bd149f6]{padding:16px 24px;border-top:1px solid var(--color-border);display:flex;justify-content:flex-end;gap:10px}.button[data-v-1bd149f6]{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 18px;border:1px solid var(--color-border);background:var(--color-main-background);border-radius:20px;cursor:pointer;font-size:14px;font-weight:600;color:var(--color-main-text);transition:background .2s,opacity .2s}.button[data-v-1bd149f6]:hover:not(:disabled){background:var(--color-background-hover)}.button.primary[data-v-1bd149f6]{background:var(--color-primary-element);border-color:var(--color-primary-element);color:#fff}.button.primary[data-v-1bd149f6]:hover:not(:disabled){background:var(--color-primary-element-light)}.button[data-v-1bd149f6]:disabled{cursor:default;opacity:.6}@media(max-width:600px){.talk-start-modal[data-v-1bd149f6]{width:100%;height:100%;max-height:none;border-radius:0}.modal-footer[data-v-1bd149f6]{flex-direction:column-reverse}.button[data-v-1bd149f6]{width:100%}}.public-bot-list[data-v-295e9ac6]{padding:24px;max-width:1400px;margin:0 auto}.header[data-v-295e9ac6]{margin-bottom:32px;display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.header-content[data-v-295e9ac6]{flex:1}.header h2[data-v-295e9ac6]{margin:0 0 8px;font-size:28px;font-weight:700;color:var(--color-main-text)}.subtitle[data-v-295e9ac6]{margin:0;font-size:15px;color:var(--color-text-lighter)}.create-bots-button[data-v-295e9ac6]{display:inline-flex;align-items:center;gap:8px;padding:10px 18px;background:var(--color-main-background);border:2px solid var(--color-main-text);border-radius:8px;color:var(--color-main-text);font-size:14px;font-weight:600;text-decoration:none;cursor:pointer;transition:all .15s ease;white-space:nowrap}.create-bots-button[data-v-295e9ac6]:hover{background:var(--color-main-text);color:var(--color-main-background)}.create-bots-button .icon[data-v-295e9ac6]{font-size:16px}.bot-grid[data-v-295e9ac6]{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:24px}.empty-state[data-v-295e9ac6]{text-align:center;padding:80px 20px;background:var(--color-background-dark);border-radius:12px}.empty-icon[data-v-295e9ac6]{font-size:64px;margin-bottom:16px}.empty-state h3[data-v-295e9ac6]{margin:0 0 8px;font-size:20px;font-weight:600}.empty-state p[data-v-295e9ac6]{margin:0;color:var(--color-text-lighter);font-size:15px}.loading-state[data-v-295e9ac6]{text-align:center;padding:60px 20px}.loading-state .icon-loading[data-v-295e9ac6]{display:inline-block;font-size:32px;margin-bottom:16px}.loading-state p[data-v-295e9ac6]{margin:0;color:var(--color-text-lighter)}')),document.head.appendChild(a)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
|
||
import{s as W}from"./appIconRuntime-ltIyK5iP.chunk.mjs";import{V as h,v as A,g as f,a2 as G,t as $,j as Y,k as R,a3 as C,a4 as K,l as g,a5 as X,a6 as J,a7 as Q,a8 as tt,a9 as et,n as u,s as z,b as S,c as y,a as v,A as k}from"./branding-cqWE0Otc.chunk.mjs";import{u as P,l as it,g as st}from"./index-DSodDqU0.chunk.mjs";const q="educai",Z="2.39.1";let at="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",nt=(e=21)=>{let i="",s=e|0;for(;s--;)i+=at[Math.random()*64|0];return i};function b(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?b=function(i){return typeof i}:b=function(i){return i&&typeof Symbol=="function"&&i.constructor===Symbol&&i!==Symbol.prototype?"symbol":typeof i},b(e)}var B={selector:"vue-portal-target-".concat(nt())},ot=function(e){return B.selector=e},w=typeof window<"u"&&(typeof document>"u"?"undefined":b(document))!==void 0,lt=h.extend({abstract:!0,name:"PortalOutlet",props:["nodes","tag"],data:function(e){return{updatedNodes:e.nodes}},render:function(e){var i=this.updatedNodes&&this.updatedNodes();return i?i.length===1&&!i[0].text?i:e(this.tag||"DIV",i):e()},destroyed:function(){var e=this.$el;e&&e.parentNode.removeChild(e)}}),L=h.extend({name:"VueSimplePortal",props:{disabled:{type:Boolean},prepend:{type:Boolean},selector:{type:String,default:function(){return"#".concat(B.selector)}},tag:{type:String,default:"DIV"}},render:function(e){if(this.disabled){var i=this.$scopedSlots&&this.$scopedSlots.default();return i?i.length<2&&!i[0].text?i:e(this.tag,i):e()}return e()},created:function(){this.getTargetEl()||this.insertTargetEl()},updated:function(){var e=this;this.$nextTick(function(){!e.disabled&&e.slotFn!==e.$scopedSlots.default&&(e.container.updatedNodes=e.$scopedSlots.default),e.slotFn=e.$scopedSlots.default})},beforeDestroy:function(){this.unmount()},watch:{disabled:{immediate:!0,handler:function(e){e?this.unmount():this.$nextTick(this.mount)}}},methods:{getTargetEl:function(){if(w)return document.querySelector(this.selector)},insertTargetEl:function(){if(w){var e=document.querySelector("body"),i=document.createElement(this.tag);i.id=this.selector.substring(1),e.appendChild(i)}},mount:function(){if(w){var e=this.getTargetEl(),i=document.createElement("DIV");this.prepend&&e.firstChild?e.insertBefore(i,e.firstChild):e.appendChild(i),this.container=new lt({el:i,parent:this,propsData:{tag:this.tag,nodes:this.$scopedSlots.default}})}},unmount:function(){this.container&&(this.container.$destroy(),delete this.container)}}});function rt(e){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};e.component(i.name||"portal",L),i.defaultSelector&&ot(i.defaultSelector)}typeof window<"u"&&window.Vue&&window.Vue===h&&h.use(rt),A(G);const ct=`<!--
|
||
- SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||
-->
|
||
<svg width="395" height="314" viewBox="0 0 395 314" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<rect width="395" height="314" rx="11" fill="#439DCD"/>
|
||
<rect x="13" y="51" width="366" height="248" rx="8" fill="white"/>
|
||
<rect x="22" y="111" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="127" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="63" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="191" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="143" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="79" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="159" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="95" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="175" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<path d="M288 145C277.56 147.8 265.32 149 254 149C242.68 149 230.44 147.8 220 145L218 153C225.44 155 234 156.32 242 157V209H250V185H258V209H266V157C274 156.32 282.56 155 290 153L288 145ZM254 145C258.4 145 262 141.4 262 137C262 132.6 258.4 129 254 129C249.6 129 246 132.6 246 137C246 141.4 249.6 145 254 145Z" fill="#DEDEDE"/>
|
||
<path d="M43.5358 13C38.6641 13 34.535 16.2415 33.2552 20.6333C32.143 18.3038 29.7327 16.6718 26.9564 16.6718C23.1385 16.6718 20 19.7521 20 23.4993C20 27.2465 23.1385 30.3282 26.9564 30.3282C29.7327 30.3282 32.1429 28.6952 33.2552 26.3653C34.535 30.7575 38.6641 34 43.5358 34C48.3715 34 52.4796 30.8064 53.7921 26.4637C54.9249 28.7407 57.3053 30.3282 60.0421 30.3282C63.8601 30.3282 67 27.2465 67 23.4993C67 19.7521 63.8601 16.6718 60.0421 16.6718C57.3053 16.6718 54.9249 18.2583 53.7921 20.5349C52.4796 16.1926 48.3715 13 43.5358 13ZM43.5358 17.0079C47.2134 17.0079 50.1512 19.8899 50.1512 23.4993C50.1512 27.1087 47.2134 29.9921 43.5358 29.9921C39.8583 29.9921 36.9218 27.1087 36.9218 23.4993C36.9218 19.8899 39.8583 17.0079 43.5358 17.0079ZM26.9564 20.6797C28.5677 20.6797 29.8307 21.9179 29.8307 23.4993C29.8307 25.0807 28.5677 26.3203 26.9564 26.3203C25.3452 26.3203 24.0836 25.0807 24.0836 23.4993C24.0836 21.9179 25.3452 20.6797 26.9564 20.6797ZM60.0421 20.6797C61.6534 20.6797 62.9164 21.9179 62.9164 23.4993C62.9164 25.0807 61.6534 26.3203 60.0421 26.3203C58.4309 26.3203 57.1693 25.0807 57.1693 23.4993C57.1693 21.9179 58.4309 20.6797 60.0421 20.6797Z" fill="white"/>
|
||
<rect x="79" y="20" width="8" height="8" rx="4" fill="white"/>
|
||
<rect x="99" y="20" width="8" height="8" rx="4" fill="white"/>
|
||
<rect x="119" y="20" width="8" height="8" rx="4" fill="white"/>
|
||
<rect x="139" y="20" width="8" height="8" rx="4" fill="white"/>
|
||
<rect x="159" y="20" width="8" height="8" rx="4" fill="white"/>
|
||
<rect x="179" y="20" width="8" height="8" rx="4" fill="white"/>
|
||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 0C5.37258 0 0 5.37259 0 12V302C0 308.627 5.37259 314 12 314H383C389.627 314 395 308.627 395 302V12C395 5.37258 389.627 0 383 0H12ZM140 44C132.268 44 126 50.268 126 58V292C126 299.732 132.268 306 140 306H372C379.732 306 386 299.732 386 292V58C386 50.268 379.732 44 372 44H140Z" fill="black" fill-opacity="0.35"/>
|
||
</svg>
|
||
`,dt=`<!--
|
||
- SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||
- SPDX-License-Identifier: AGPL-3.0-or-later
|
||
-->
|
||
<svg width="395" height="314" viewBox="0 0 395 314" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<rect width="395" height="314" rx="11" fill="#439DCD"/>
|
||
<rect x="13" y="51" width="366" height="248" rx="8" fill="white"/>
|
||
<rect x="22" y="111" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="127" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="63" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="191" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="143" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="79" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="159" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="95" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<rect x="22" y="175" width="92" height="12" rx="6" fill="#DEDEDE"/>
|
||
<path d="M288 145C277.56 147.8 265.32 149 254 149C242.68 149 230.44 147.8 220 145L218 153C225.44 155 234 156.32 242 157V209H250V185H258V209H266V157C274 156.32 282.56 155 290 153L288 145ZM254 145C258.4 145 262 141.4 262 137C262 132.6 258.4 129 254 129C249.6 129 246 132.6 246 137C246 141.4 249.6 145 254 145Z" fill="#DEDEDE"/>
|
||
<path d="M43.5358 13C38.6641 13 34.535 16.2415 33.2552 20.6333C32.143 18.3038 29.7327 16.6718 26.9564 16.6718C23.1385 16.6718 20 19.7521 20 23.4993C20 27.2465 23.1385 30.3282 26.9564 30.3282C29.7327 30.3282 32.1429 28.6952 33.2552 26.3653C34.535 30.7575 38.6641 34 43.5358 34C48.3715 34 52.4796 30.8064 53.7921 26.4637C54.9249 28.7407 57.3053 30.3282 60.0421 30.3282C63.8601 30.3282 67 27.2465 67 23.4993C67 19.7521 63.8601 16.6718 60.0421 16.6718C57.3053 16.6718 54.9249 18.2583 53.7921 20.5349C52.4796 16.1926 48.3715 13 43.5358 13ZM43.5358 17.0079C47.2134 17.0079 50.1512 19.8899 50.1512 23.4993C50.1512 27.1087 47.2134 29.9921 43.5358 29.9921C39.8583 29.9921 36.9218 27.1087 36.9218 23.4993C36.9218 19.8899 39.8583 17.0079 43.5358 17.0079ZM26.9564 20.6797C28.5677 20.6797 29.8307 21.9179 29.8307 23.4993C29.8307 25.0807 28.5677 26.3203 26.9564 26.3203C25.3452 26.3203 24.0836 25.0807 24.0836 23.4993C24.0836 21.9179 25.3452 20.6797 26.9564 20.6797ZM60.0421 20.6797C61.6534 20.6797 62.9164 21.9179 62.9164 23.4993C62.9164 25.0807 61.6534 26.3203 60.0421 26.3203C58.4309 26.3203 57.1693 25.0807 57.1693 23.4993C57.1693 21.9179 58.4309 20.6797 60.0421 20.6797Z" fill="white"/>
|
||
<rect x="79" y="20" width="8" height="8" rx="4" fill="white"/>
|
||
<rect x="99" y="20" width="8" height="8" rx="4" fill="white"/>
|
||
<rect x="119" y="20" width="8" height="8" rx="4" fill="white"/>
|
||
<rect x="139" y="20" width="8" height="8" rx="4" fill="white"/>
|
||
<rect x="159" y="20" width="8" height="8" rx="4" fill="white"/>
|
||
<rect x="179" y="20" width="8" height="8" rx="4" fill="white"/>
|
||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 0C5.37258 0 0 5.37259 0 12V302C0 308.627 5.37259 314 12 314H383C389.627 314 395 308.627 395 302V12C395 5.37258 389.627 0 383 0H12ZM112 44C119.732 44 126 50.268 126 58V292C126 299.732 119.732 306 112 306H20C12.268 306 6 299.732 6 292V58C6 50.268 12.268 44 20 44H112Z" fill="black" fill-opacity="0.35"/>
|
||
</svg>
|
||
`,pt={name:"NcContent",components:{NcButton:R,NcIconSvgWrapper:Y,Teleport:L},provide(){return{appName:this.appName,"NcContent:setHasAppNavigation":this.setAppNavigation,"NcContent:selector":"#content-vue"}},props:{appName:{type:String,required:!0}},setup(){return{isMobile:P(),isLegacy34:K}},data(){return{hasAppNavigation:!1,currentFocus:""}},computed:{currentImage(){return this.currentFocus==="navigation"?dt:ct}},beforeMount(){const e=document.getElementById("skip-actions");e&&(e.innerHTML="",e.classList.add("vue-skip-actions"))},methods:{t:$,openAppNavigation(){C("toggle-navigation",{open:!0}),this.$nextTick(()=>{window.location.hash="app-navigation-vue",document.getElementById("app-navigation-vue").focus()})},setAppNavigation(e){this.hasAppNavigation=e,this.currentFocus===""&&(this.currentFocus="navigation")}}};var ht=function(){var e=this,i=e._self._c;return i("div",{staticClass:"content",class:[`app-${e.appName.toLowerCase()}`,{"content--legacy":e.isLegacy34}],attrs:{id:"content-vue"}},[i("Teleport",{attrs:{selector:"#skip-actions"}},[i("div",{staticClass:"vue-skip-actions__container"},[i("div",{staticClass:"vue-skip-actions__headline"},[e._v(" "+e._s(e.t("Keyboard navigation help"))+" ")]),i("div",{staticClass:"vue-skip-actions__buttons"},[i("NcButton",{directives:[{name:"show",rawName:"v-show",value:e.hasAppNavigation,expression:"hasAppNavigation"}],attrs:{href:"#app-navigation-vue",variant:"tertiary"},on:{click:function(s){return s.preventDefault(),e.openAppNavigation.apply(null,arguments)},focusin:function(s){e.currentFocus="navigation"},mouseover:function(s){e.currentFocus="navigation"}}},[e._v(" "+e._s(e.t("Skip to app navigation"))+" ")]),i("NcButton",{attrs:{href:"#app-content-vue",variant:"tertiary"},on:{focusin:function(s){e.currentFocus="content"},mouseover:function(s){e.currentFocus="content"}}},[e._v(" "+e._s(e.t("Skip to main content"))+" ")])],1),i("NcIconSvgWrapper",{directives:[{name:"show",rawName:"v-show",value:!e.isMobile,expression:"!isMobile"}],staticClass:"vue-skip-actions__image",attrs:{svg:e.currentImage,size:"auto"}})],1),e._v(" ")]),e._t("default")],2)},ut=[],mt=f(pt,ht,ut,!1,null,"ffbd7561");const gt=mt.exports;var vt=Object.defineProperty,ft=Object.defineProperties,bt=Object.getOwnPropertyDescriptors,_=Object.getOwnPropertySymbols,F=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable,M=(e,i,s)=>i in e?vt(e,i,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[i]=s,Ct=(e,i)=>{for(var s in i||(i={}))F.call(i,s)&&M(e,s,i[s]);if(_)for(var s of _(i))H.call(i,s)&&M(e,s,i[s]);return e},yt=(e,i)=>ft(e,bt(i)),_t=(e,i)=>{var s={};for(var a in e)F.call(e,a)&&i.indexOf(a)<0&&(s[a]=e[a]);if(e!=null&&_)for(var a of _(e))i.indexOf(a)<0&&H.call(e,a)&&(s[a]=e[a]);return s};function I(e,i,s,a,o,l,r,d){var c=typeof e=="function"?e.options:e;i&&(c.render=i,c.staticRenderFns=s,c._compiled=!0);var p;if(o&&(p=o),p)if(c.functional){c._injectStyles=p;var x=c.render;c.render=function(j,D){return p.call(D),x(j,D)}}else{var m=c.beforeCreate;c.beforeCreate=m?[].concat(m,p):[p]}return{exports:e,options:c}}const xt={name:"splitpanes",props:{horizontal:{type:Boolean},pushOtherPanes:{type:Boolean,default:!0},dblClickSplitter:{type:Boolean,default:!0},rtl:{type:Boolean,default:!1},firstSplitter:{type:Boolean}},provide(){return{requestUpdate:this.requestUpdate,onPaneAdd:this.onPaneAdd,onPaneRemove:this.onPaneRemove,onPaneClick:this.onPaneClick}},data:()=>({container:null,ready:!1,panes:[],touch:{mouseDown:!1,dragging:!1,activeSplitter:null},splitterTaps:{splitter:null,timeoutId:null}}),computed:{panesCount(){return this.panes.length},indexedPanes(){return this.panes.reduce((e,i)=>(e[i.id]=i)&&e,{})}},methods:{updatePaneComponents(){this.panes.forEach(e=>{e.update&&e.update({[this.horizontal?"height":"width"]:`${this.indexedPanes[e.id].size}%`})})},bindEvents(){document.addEventListener("mousemove",this.onMouseMove,{passive:!1}),document.addEventListener("mouseup",this.onMouseUp),"ontouchstart"in window&&(document.addEventListener("touchmove",this.onMouseMove,{passive:!1}),document.addEventListener("touchend",this.onMouseUp))},unbindEvents(){document.removeEventListener("mousemove",this.onMouseMove,{passive:!1}),document.removeEventListener("mouseup",this.onMouseUp),"ontouchstart"in window&&(document.removeEventListener("touchmove",this.onMouseMove,{passive:!1}),document.removeEventListener("touchend",this.onMouseUp))},onMouseDown(e,i){this.bindEvents(),this.touch.mouseDown=!0,this.touch.activeSplitter=i},onMouseMove(e){this.touch.mouseDown&&(e.preventDefault(),this.touch.dragging=!0,this.calculatePanesSize(this.getCurrentMouseDrag(e)),this.$emit("resize",this.panes.map(i=>({min:i.min,max:i.max,size:i.size}))))},onMouseUp(){this.touch.dragging&&this.$emit("resized",this.panes.map(e=>({min:e.min,max:e.max,size:e.size}))),this.touch.mouseDown=!1,setTimeout(()=>{this.touch.dragging=!1,this.unbindEvents()},100)},onSplitterClick(e,i){"ontouchstart"in window&&(e.preventDefault(),this.dblClickSplitter&&(this.splitterTaps.splitter===i?(clearTimeout(this.splitterTaps.timeoutId),this.splitterTaps.timeoutId=null,this.onSplitterDblClick(e,i),this.splitterTaps.splitter=null):(this.splitterTaps.splitter=i,this.splitterTaps.timeoutId=setTimeout(()=>{this.splitterTaps.splitter=null},500)))),this.touch.dragging||this.$emit("splitter-click",this.panes[i])},onSplitterDblClick(e,i){let s=0;this.panes=this.panes.map((a,o)=>(a.size=o===i?a.max:a.min,o!==i&&(s+=a.min),a)),this.panes[i].size-=s,this.$emit("pane-maximize",this.panes[i])},onPaneClick(e,i){this.$emit("pane-click",this.indexedPanes[i])},getCurrentMouseDrag(e){const i=this.container.getBoundingClientRect(),{clientX:s,clientY:a}="ontouchstart"in window&&e.touches?e.touches[0]:e;return{x:s-i.left,y:a-i.top}},getCurrentDragPercentage(e){e=e[this.horizontal?"y":"x"];const i=this.container[this.horizontal?"clientHeight":"clientWidth"];return this.rtl&&!this.horizontal&&(e=i-e),e*100/i},calculatePanesSize(e){const i=this.touch.activeSplitter;let s={prevPanesSize:this.sumPrevPanesSize(i),nextPanesSize:this.sumNextPanesSize(i),prevReachedMinPanes:0,nextReachedMinPanes:0};const a=0+(this.pushOtherPanes?0:s.prevPanesSize),o=100-(this.pushOtherPanes?0:s.nextPanesSize),l=Math.max(Math.min(this.getCurrentDragPercentage(e),o),a);let r=[i,i+1],d=this.panes[r[0]]||null,c=this.panes[r[1]]||null;const p=d.max<100&&l>=d.max+s.prevPanesSize,x=c.max<100&&l<=100-(c.max+this.sumNextPanesSize(i+1));if(p||x){p?(d.size=d.max,c.size=Math.max(100-d.max-s.prevPanesSize-s.nextPanesSize,0)):(d.size=Math.max(100-c.max-s.prevPanesSize-this.sumNextPanesSize(i+1),0),c.size=c.max);return}if(this.pushOtherPanes){const m=this.doPushOtherPanes(s,l);if(!m)return;({sums:s,panesToResize:r}=m),d=this.panes[r[0]]||null,c=this.panes[r[1]]||null}d!==null&&(d.size=Math.min(Math.max(l-s.prevPanesSize-s.prevReachedMinPanes,d.min),d.max)),c!==null&&(c.size=Math.min(Math.max(100-l-s.nextPanesSize-s.nextReachedMinPanes,c.min),c.max))},doPushOtherPanes(e,i){const s=this.touch.activeSplitter,a=[s,s+1];return i<e.prevPanesSize+this.panes[a[0]].min&&(a[0]=this.findPrevExpandedPane(s).index,e.prevReachedMinPanes=0,a[0]<s&&this.panes.forEach((o,l)=>{l>a[0]&&l<=s&&(o.size=o.min,e.prevReachedMinPanes+=o.min)}),e.prevPanesSize=this.sumPrevPanesSize(a[0]),a[0]===void 0)?(e.prevReachedMinPanes=0,this.panes[0].size=this.panes[0].min,this.panes.forEach((o,l)=>{l>0&&l<=s&&(o.size=o.min,e.prevReachedMinPanes+=o.min)}),this.panes[a[1]].size=100-e.prevReachedMinPanes-this.panes[0].min-e.prevPanesSize-e.nextPanesSize,null):i>100-e.nextPanesSize-this.panes[a[1]].min&&(a[1]=this.findNextExpandedPane(s).index,e.nextReachedMinPanes=0,a[1]>s+1&&this.panes.forEach((o,l)=>{l>s&&l<a[1]&&(o.size=o.min,e.nextReachedMinPanes+=o.min)}),e.nextPanesSize=this.sumNextPanesSize(a[1]-1),a[1]===void 0)?(e.nextReachedMinPanes=0,this.panes[this.panesCount-1].size=this.panes[this.panesCount-1].min,this.panes.forEach((o,l)=>{l<this.panesCount-1&&l>=s+1&&(o.size=o.min,e.nextReachedMinPanes+=o.min)}),this.panes[a[0]].size=100-e.prevPanesSize-e.nextReachedMinPanes-this.panes[this.panesCount-1].min-e.nextPanesSize,null):{sums:e,panesToResize:a}},sumPrevPanesSize(e){return this.panes.reduce((i,s,a)=>i+(a<e?s.size:0),0)},sumNextPanesSize(e){return this.panes.reduce((i,s,a)=>i+(a>e+1?s.size:0),0)},findPrevExpandedPane(e){return[...this.panes].reverse().find(i=>i.index<e&&i.size>i.min)||{}},findNextExpandedPane(e){return this.panes.find(i=>i.index>e+1&&i.size>i.min)||{}},checkSplitpanesNodes(){Array.from(this.container.children).forEach(e=>{const i=e.classList.contains("splitpanes__pane"),s=e.classList.contains("splitpanes__splitter");if(!i&&!s){e.parentNode.removeChild(e),console.warn("Splitpanes: Only <pane> elements are allowed at the root of <splitpanes>. One of your DOM nodes was removed.");return}})},addSplitter(e,i,s=!1){const a=e-1,o=document.createElement("div");o.classList.add("splitpanes__splitter"),s||(o.onmousedown=l=>this.onMouseDown(l,a),typeof window<"u"&&"ontouchstart"in window&&(o.ontouchstart=l=>this.onMouseDown(l,a)),o.onclick=l=>this.onSplitterClick(l,a+1)),this.dblClickSplitter&&(o.ondblclick=l=>this.onSplitterDblClick(l,a+1)),i.parentNode.insertBefore(o,i)},removeSplitter(e){e.onmousedown=void 0,e.onclick=void 0,e.ondblclick=void 0,e.parentNode.removeChild(e)},redoSplitters(){const e=Array.from(this.container.children);e.forEach(s=>{s.className.includes("splitpanes__splitter")&&this.removeSplitter(s)});let i=0;e.forEach(s=>{s.className.includes("splitpanes__pane")&&(!i&&this.firstSplitter?this.addSplitter(i,s,!0):i&&this.addSplitter(i,s),i++)})},requestUpdate(e){var i=e,{target:s}=i,a=_t(i,["target"]);const o=this.indexedPanes[s._uid];Object.entries(a).forEach(([l,r])=>o[l]=r)},onPaneAdd(e){let i=-1;Array.from(e.$el.parentNode.children).some(o=>(o.className.includes("splitpanes__pane")&&i++,o===e.$el));const s=parseFloat(e.minSize),a=parseFloat(e.maxSize);this.panes.splice(i,0,{id:e._uid,index:i,min:isNaN(s)?0:s,max:isNaN(a)?100:a,size:e.size===null?null:parseFloat(e.size),givenSize:e.size,update:e.update}),this.panes.forEach((o,l)=>o.index=l),this.ready&&this.$nextTick(()=>{this.redoSplitters(),this.resetPaneSizes({addedPane:this.panes[i]}),this.$emit("pane-add",{index:i,panes:this.panes.map(o=>({min:o.min,max:o.max,size:o.size}))})})},onPaneRemove(e){const i=this.panes.findIndex(a=>a.id===e._uid),s=this.panes.splice(i,1)[0];this.panes.forEach((a,o)=>a.index=o),this.$nextTick(()=>{this.redoSplitters(),this.resetPaneSizes({removedPane:yt(Ct({},s),{index:i})}),this.$emit("pane-remove",{removed:s,panes:this.panes.map(a=>({min:a.min,max:a.max,size:a.size}))})})},resetPaneSizes(e={}){!e.addedPane&&!e.removedPane?this.initialPanesSizing():this.panes.some(i=>i.givenSize!==null||i.min||i.max<100)?this.equalizeAfterAddOrRemove(e):this.equalize(),this.ready&&this.$emit("resized",this.panes.map(i=>({min:i.min,max:i.max,size:i.size})))},equalize(){const e=100/this.panesCount;let i=0,s=[],a=[];this.panes.forEach(o=>{o.size=Math.max(Math.min(e,o.max),o.min),i-=o.size,o.size>=o.max&&s.push(o.id),o.size<=o.min&&a.push(o.id)}),i>.1&&this.readjustSizes(i,s,a)},initialPanesSizing(){100/this.panesCount;let e=100,i=[],s=[],a=0;this.panes.forEach(l=>{e-=l.size,l.size!==null&&a++,l.size>=l.max&&i.push(l.id),l.size<=l.min&&s.push(l.id)});let o=100;e>.1&&(this.panes.forEach(l=>{l.size===null&&(l.size=Math.max(Math.min(e/(this.panesCount-a),l.max),l.min)),o-=l.size}),o>.1&&this.readjustSizes(e,i,s))},equalizeAfterAddOrRemove({addedPane:e,removedPane:i}={}){let s=100/this.panesCount,a=0,o=[],l=[];e&&e.givenSize!==null&&(s=(100-e.givenSize)/(this.panesCount-1)),this.panes.forEach(r=>{a-=r.size,r.size>=r.max&&o.push(r.id),r.size<=r.min&&l.push(r.id)}),!(Math.abs(a)<.1)&&(this.panes.forEach(r=>{e&&e.givenSize!==null&&e.id===r.id||(r.size=Math.max(Math.min(s,r.max),r.min)),a-=r.size,r.size>=r.max&&o.push(r.id),r.size<=r.min&&l.push(r.id)}),a>.1&&this.readjustSizes(a,o,l))},readjustSizes(e,i,s){let a;e>0?a=e/(this.panesCount-i.length):a=e/(this.panesCount-s.length),this.panes.forEach((o,l)=>{if(e>0&&!i.includes(o.id)){const r=Math.max(Math.min(o.size+a,o.max),o.min),d=r-o.size;e-=d,o.size=r}else if(!s.includes(o.id)){const r=Math.max(Math.min(o.size+a,o.max),o.min),d=r-o.size;e-=d,o.size=r}o.update({[this.horizontal?"height":"width"]:`${this.indexedPanes[o.id].size}%`})}),Math.abs(e)>.1&&this.$nextTick(()=>{this.ready&&console.warn("Splitpanes: Could not resize panes correctly due to their constraints.")})}},watch:{panes:{deep:!0,immediate:!1,handler(){this.updatePaneComponents()}},horizontal(){this.updatePaneComponents()},firstSplitter(){this.redoSplitters()},dblClickSplitter(e){[...this.container.querySelectorAll(".splitpanes__splitter")].forEach((i,s)=>{i.ondblclick=e?a=>this.onSplitterDblClick(a,s):void 0})}},beforeDestroy(){this.ready=!1},mounted(){this.container=this.$refs.container,this.checkSplitpanesNodes(),this.redoSplitters(),this.resetPaneSizes(),this.$emit("ready"),this.ready=!0},render(e){return e("div",{ref:"container",class:["splitpanes",`splitpanes--${this.horizontal?"horizontal":"vertical"}`,{"splitpanes--dragging":this.touch.dragging}]},this.$slots.default)}};let wt,zt;const E={};var St=I(xt,wt,zt,!1,Pt);function Pt(e){for(let i in E)this[i]=E[i]}var Dt=(function(){return St.exports})(),kt=function(){var e=this,i=e.$createElement,s=e._self._c||i;return s("div",{staticClass:"splitpanes__pane",style:e.style,on:{click:function(a){return e.onPaneClick(a,e._uid)}}},[e._t("default")],2)},Mt=[];const Et={name:"pane",inject:["requestUpdate","onPaneAdd","onPaneRemove","onPaneClick"],props:{size:{type:[Number,String],default:null},minSize:{type:[Number,String],default:0},maxSize:{type:[Number,String],default:100}},data:()=>({style:{}}),mounted(){this.onPaneAdd(this)},beforeDestroy(){this.onPaneRemove(this)},methods:{update(e){this.style=e}},computed:{sizeNumber(){return this.size||this.size===0?parseFloat(this.size):null},minSizeNumber(){return parseFloat(this.minSize)},maxSizeNumber(){return parseFloat(this.maxSize)}},watch:{sizeNumber(e){this.requestUpdate({target:this,size:e})},minSizeNumber(e){this.requestUpdate({target:this,min:e})},maxSizeNumber(e){this.requestUpdate({target:this,max:e})}}},N={};var Nt=I(Et,kt,Mt,!1,Tt);function Tt(e){for(let i in N)this[i]=N[i]}var At=(function(){return Nt.exports})();const $t={name:"ArrowLeftIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var Rt=function(){var e=this,i=e._self._c;return i("span",e._b({staticClass:"material-design-icon arrow-left-icon",attrs:{"aria-hidden":e.title?null:"true","aria-label":e.title,role:"img"},on:{click:function(s){return e.$emit("click",s)}}},"span",e.$attrs,!1),[i("svg",{staticClass:"material-design-icon__svg",attrs:{fill:e.fillColor,width:e.size,height:e.size,viewBox:"0 0 24 24"}},[i("path",{attrs:{d:"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z"}},[e.title?i("title",[e._v(e._s(e.title))]):e._e()])])])},Bt=[],Lt=f($t,Rt,Bt,!1,null,null);const Ft=Lt.exports,Ht={name:"ArrowRightIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var It=function(){var e=this,i=e._self._c;return i("span",e._b({staticClass:"material-design-icon arrow-right-icon",attrs:{"aria-hidden":e.title?null:"true","aria-label":e.title,role:"img"},on:{click:function(s){return e.$emit("click",s)}}},"span",e.$attrs,!1),[i("svg",{staticClass:"material-design-icon__svg",attrs:{fill:e.fillColor,width:e.size,height:e.size,viewBox:"0 0 24 24"}},[i("path",{attrs:{d:"M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z"}},[e.title?i("title",[e._v(e._s(e.title))]):e._e()])])])},Vt=[],Ot=f(Ht,It,Vt,!1,null,null);const Ut=Ot.exports;function jt(e){let i=!1,s;return(...a)=>(i||(i=!0,s=e(...a)),s)}let V="missing-app-name";try{V=q}catch{g.error("The `@nextcloud/vue` library was used without setting / replacing the `appName`.")}const qt=V;let Zt="";try{Zt=Z}catch{g.error("The `@nextcloud/vue` library was used without setting / replacing the `appVersion`.")}function O(){return X("appName",qt)}const Wt=jt(()=>{const e=it("core","apps",[]),i=O();return e.find(({id:s})=>s===i)?.name??i});A(J);const U=et(),Gt={name:"NcAppContentDetailsToggle",components:{ArrowRight:Ut,ArrowLeft:Ft,NcButton:R},setup(){return{isRtl:U,isMobile:P()}},computed:{title(){return $("Go back to the list")}},watch:{isMobile:function(){this.toggleAppNavigationButton(this.isMobile)}},mounted(){this.toggleAppNavigationButton(this.isMobile)},beforeDestroy(){this.isMobile&&this.toggleAppNavigationButton(!1)},methods:{toggleAppNavigationButton(e=!0){const i=document.querySelector(".app-navigation .app-navigation-toggle");i&&(i.style.display=e?"none":null,e===!0&&C("toggle-navigation",{open:!1}))}}};var Yt=function(){var e=this,i=e._self._c;return i("NcButton",{staticClass:"app-details-toggle",class:{"app-details-toggle--mobile":e.isMobile},attrs:{"aria-label":e.title,title:e.title,variant:"tertiary"},scopedSlots:e._u([{key:"icon",fn:function(){return[e.isRtl?i("ArrowLeft",{attrs:{size:20}}):i("ArrowRight",{attrs:{size:20}})]},proxy:!0}])})},Kt=[],Xt=f(Gt,Yt,Kt,!1,null,"d0b1a8bc");const Jt=Xt.exports,T=Q("nextcloud").persist().build(),Qt=st().theming?.name??"Nextcloud",te={name:"NcAppContent",components:{NcAppContentDetailsToggle:Jt,Pane:At,Splitpanes:Dt},props:{allowSwipeNavigation:{type:Boolean,default:!0},disableSwipe:{type:Boolean,default:!1},listSize:{type:Number,default:20},listMinWidth:{type:Number,default:15},listMaxWidth:{type:Number,default:40},paneConfigKey:{type:String,default:""},showDetails:{type:Boolean,default:!0},layout:{type:String,default:"vertical-split",validator(e){return["no-split","vertical-split","horizontal-split"].includes(e)}},pageHeading:{type:String,default:null},pageTitle:{type:String,default:null}},emits:["update:showDetails","resize-list","resize:list"],setup(){return{appName:O(),localizedAppName:Wt(),isMobile:P(),isRtl:U}},data(){return{contentHeight:0,swiping:{},listPaneSize:this.restorePaneConfig()}},computed:{paneConfigID(){if(this.paneConfigKey!=="")return`pane-list-size-${this.paneConfigKey}`;try{return`pane-list-size-${this.appName}`}catch{return g.info("[NcAppContent]: falling back to global nextcloud pane config"),"pane-list-size-nextcloud"}},detailsPaneSize(){return this.listPaneSize?100-this.listPaneSize:this.paneDefaults.details.size},paneDefaults(){return{list:{size:this.listSize,min:this.listMinWidth,max:this.listMaxWidth},details:{size:100-this.listSize,min:100-this.listMaxWidth,max:100-this.listMinWidth}}},realPageTitle(){const e=new Set;if(this.pageTitle)for(const i of this.pageTitle.split(" - "))e.add(i);else if(this.pageHeading){for(const i of this.pageHeading.split(" - "))e.add(i);e.size>0&&e.add(this.localizedAppName)}else return null;return e.add(Qt),[...e.values()].join(" - ")}},watch:{realPageTitle:{immediate:!0,handler(){this.realPageTitle!==null&&(document.title=this.realPageTitle)}},paneConfigKey:{immediate:!0,handler(){this.restorePaneConfig()}}},mounted(){this.allowSwipeNavigation&&!this.disableSwipe&&(this.swiping=tt(this.$el,{onSwipeEnd:this.handleSwipe})),this.restorePaneConfig()},methods:{handleSwipe(e,i){Math.abs(this.swiping.lengthX)>70&&(this.swiping.coordsStart.x<300/2&&i==="right"?C("toggle-navigation",{open:!0}):this.swiping.coordsStart.x<300*1.5&&i==="left"&&C("toggle-navigation",{open:!1}))},handlePaneResize(e){const i=parseInt(e[0].size,10);T.setItem(this.paneConfigID,JSON.stringify(i)),this.listPaneSize=i,this.$emit("resize:list",{size:i}),this.$emit("resize-list",{size:i}),g.debug("AppContent pane config",{size:i})},restorePaneConfig(){const e=parseInt(T.getItem(this.paneConfigID),10);if(!isNaN(e)&&e!==this.listPaneSize)return g.debug("AppContent pane config",e),this.listPaneSize=e,e},hideDetails(){this.$emit("update:showDetails",!1)}}};var ee=function(){var e=this,i=e._self._c;return i("main",{staticClass:"app-content no-snapper",class:{"app-content--has-list":!!e.$scopedSlots.list},attrs:{id:"app-content-vue"}},[e.pageHeading?i("h1",{staticClass:"hidden-visually"},[e._v(" "+e._s(e.pageHeading)+" ")]):e._e(),e.$scopedSlots.list?[e.isMobile||e.layout==="no-split"?i("div",{staticClass:"app-content-wrapper app-content-wrapper--no-split",class:{"app-content-wrapper--show-details":e.showDetails,"app-content-wrapper--show-list":!e.showDetails,"app-content-wrapper--mobile":e.isMobile}},[e.showDetails?i("NcAppContentDetailsToggle",{nativeOn:{click:function(s){return s.stopPropagation(),s.preventDefault(),e.hideDetails.apply(null,arguments)}}}):e._e(),i("div",{directives:[{name:"show",rawName:"v-show",value:!e.showDetails,expression:"!showDetails"}],staticClass:"app-content-wrapper__list"},[e._t("list")],2),e.showDetails?e._t("default"):e._e()],2):e.layout==="vertical-split"||e.layout==="horizontal-split"?i("div",{staticClass:"app-content-wrapper"},[i("Splitpanes",{staticClass:"default-theme",class:{"splitpanes--horizontal":e.layout==="horizontal-split","splitpanes--vertical":e.layout==="vertical-split"},attrs:{horizontal:e.layout==="horizontal-split",rtl:e.isRtl},on:{resized:e.handlePaneResize}},[i("Pane",{staticClass:"splitpanes__pane-list",attrs:{size:e.listPaneSize||e.paneDefaults.list.size,"min-size":e.paneDefaults.list.min,"max-size":e.paneDefaults.list.max}},[e._t("list")],2),i("Pane",{staticClass:"splitpanes__pane-details",attrs:{size:e.detailsPaneSize,"min-size":e.paneDefaults.details.min,"max-size":e.paneDefaults.details.max}},[e._t("default")],2)],1)],1):e._e()]:e._e(),e.$scopedSlots.list?e._e():e._t("default")],2)},ie=[],se=f(te,ee,ie,!1,null,"342489c9");const ae=se.exports,ne={name:"ContentCopyIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var oe=function(){var e=this,i=e._self._c;return i("span",e._b({staticClass:"material-design-icon content-copy-icon",attrs:{"aria-hidden":e.title?null:"true","aria-label":e.title,role:"img"},on:{click:function(s){return e.$emit("click",s)}}},"span",e.$attrs,!1),[i("svg",{staticClass:"material-design-icon__svg",attrs:{fill:e.fillColor,width:e.size,height:e.size,viewBox:"0 0 24 24"}},[i("path",{attrs:{d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"}},[e.title?i("title",[e._v(e._s(e.title))]):e._e()])])])},le=[],re=u(ne,oe,le,!1,null,null);const ce=re.exports,de={name:"PublicBotCard",components:{IconContentCopy:ce},props:{bot:{type:Object,required:!0}},computed:{truncatedDescription(){const e=this.bot.description||"";return e.length>200?e.substring(0,200)+"...":e},visibilityLabel(){const e=this.bot.visibility||(this.bot.is_public?"global":"groups");return e==="personal"?"Personal":e==="global"?"Global":e==="teams"?"Team access":"Group access"},visibilityClass(){const e=this.bot.visibility||(this.bot.is_public?"global":"groups");return e==="personal"?"personal":e==="global"?"global":e==="teams"?"teams":"groups"},accessReasonText(){const e=this.bot.access_reason;return!e||e.type==="global"?null:e.type==="owner"?"You are the owner of this bot":e.type==="group"&&e.names?.length>0?`Access via group: ${e.names.join(", ")}`:e.type==="team"&&e.names?.length>0?`Access via team: ${e.names.join(", ")}`:null}},methods:{formatMention(e){return`@${e.startsWith("@")?e.substring(1):e}`},async copyHandle(){const e=this.formatMention(this.bot.mention_name);try{if(navigator.clipboard?.writeText)await navigator.clipboard.writeText(e);else{const i=document.createElement("textarea");i.value=e,i.setAttribute("readonly",""),i.style.position="fixed",i.style.opacity="0",document.body.appendChild(i),i.select(),document.execCommand("copy"),document.body.removeChild(i)}z(`Copied ${e}`)}catch(i){console.error("Failed to copy bot handle:",i),S("Failed to copy bot handle")}},formatDate(e){return e?new Date(e*1e3).toLocaleDateString(void 0,{day:"numeric",month:"long",year:"numeric"}):"Unknown"}}};var pe=function(){var e=this,i=e._self._c;return i("div",{staticClass:"public-bot-card",class:{inactive:!e.bot.is_active}},[i("div",{staticClass:"card-header"},[i("div",{staticClass:"bot-identity"},[i("h3",{staticClass:"bot-name"},[e._v(e._s(e.bot.bot_name))]),i("div",{staticClass:"mention-row"},[i("span",{staticClass:"mention-badge"},[e._v(e._s(e.bot.mention_name))]),i("button",{staticClass:"copy-handle-button",attrs:{type:"button","aria-label":`Copy ${e.formatMention(e.bot.mention_name)} handle`,title:`Copy ${e.formatMention(e.bot.mention_name)} handle`},on:{click:e.copyHandle}},[i("IconContentCopy",{attrs:{size:16}})],1)])]),i("span",{staticClass:"visibility-badge",class:e.visibilityClass},[e._v(e._s(e.visibilityLabel))])]),i("div",{staticClass:"bot-description"},[e.bot.description?i("p",[e._v(e._s(e.truncatedDescription))]):i("p",{staticClass:"no-description"},[e._v("No description provided")])]),e.accessReasonText?i("div",{staticClass:"access-reason"},[i("span",{staticClass:"access-icon"},[e._v("🔑")]),i("span",{staticClass:"access-text"},[e._v(e._s(e.accessReasonText))])]):e._e(),i("div",{staticClass:"bot-meta"},[i("div",{staticClass:"meta-row"},[i("span",{staticClass:"meta-label"},[e._v("Created by:")]),i("span",{staticClass:"meta-value"},[e._v(e._s(e.bot.owner_display_name||"Unknown"))])]),i("div",{staticClass:"meta-row"},[i("span",{staticClass:"meta-label"},[e._v("Created:")]),i("span",{staticClass:"meta-value"},[e._v(e._s(e.formatDate(e.bot.created_at)))])])]),i("div",{staticClass:"card-actions"},[i("button",{staticClass:"button primary-button",on:{click:function(s){return e.$emit("speak-in-talk",e.bot)}}},[e._v(" Use Bot ")]),i("button",{staticClass:"button secondary-button",on:{click:function(s){return e.$emit("show-details",e.bot)}}},[e._v(" Details ")])]),e.bot.is_active?e._e():i("div",{staticClass:"inactive-badge"},[i("span",{staticClass:"icon-close"}),e._v(" Inactive ")])])},he=[],ue=u(de,pe,he,!1,null,"27cc5089");const me=ue.exports,ge={name:"BotDetailModal",props:{bot:{type:Object,required:!0}},data(){return{loading:!0,details:{}}},computed:{visibilityLabel(){const e=this.details.visibility||(this.details.is_public?"global":"groups");return e==="personal"?"Personal":e==="global"?"Global (available to all users)":e==="teams"?"Team access":"Group access"},visibilityClass(){const e=this.details.visibility||(this.details.is_public?"global":"groups");return e==="personal"?"personal":e==="global"?"global":e==="teams"?"teams":"groups"},accessReasonText(){const e=this.details.access_reason;return!e||e.type==="global"?null:e.type==="owner"?"You are the owner of this bot":e.type==="group"&&e.names?.length>0?`Access via group: ${e.names.join(", ")}`:e.type==="team"&&e.names?.length>0?`Access via team: ${e.names.join(", ")}`:null}},mounted(){this.loadDetails()},methods:{async loadDetails(){this.loading=!0;try{const e=await y.get(v.generateUrl(`/apps/educai/api/v1/public-bots/${this.bot.id}`));this.details=e.data}catch(e){console.error("Failed to load bot details:",e),S("Failed to load bot details"),this.details=this.bot}finally{this.loading=!1}},formatDate(e){return e?new Date(e*1e3).toLocaleDateString(void 0,{day:"numeric",month:"long",year:"numeric",hour:"2-digit",minute:"2-digit"}):"Unknown"}}};var ve=function(){var e=this,i=e._self._c;return i("div",{staticClass:"modal-overlay",on:{click:function(s){return s.target!==s.currentTarget?null:e.$emit("close")}}},[i("div",{staticClass:"modal-container"},[i("div",{staticClass:"modal-header"},[i("div",{staticClass:"header-content"},[i("h2",[e._v(e._s(e.bot.bot_name))]),i("span",{staticClass:"mention-badge"},[e._v(e._s(e.bot.mention_name))])]),i("button",{staticClass:"close-button",on:{click:function(s){return e.$emit("close")}}},[i("span",{staticClass:"icon-close"})])]),e.loading?i("div",{staticClass:"modal-loading"},[i("span",{staticClass:"icon-loading"}),i("p",[e._v("Loading bot details...")])]):i("div",{staticClass:"modal-body"},[i("section",{staticClass:"detail-section"},[i("h3",[e._v("Description")]),e.details.description?i("p",{staticClass:"description-text"},[e._v(e._s(e.details.description))]):i("p",{staticClass:"no-content"},[e._v("No description provided")])]),i("section",{staticClass:"detail-section"},[i("h3",[e._v("Visibility")]),i("div",{staticClass:"visibility-info"},[i("span",{staticClass:"visibility-badge",class:e.visibilityClass},[e._v(e._s(e.visibilityLabel))]),e.accessReasonText?i("span",{staticClass:"access-reason"},[e._v(e._s(e.accessReasonText))]):e._e()])]),i("section",{staticClass:"detail-section"},[i("h3",[e._v("Created By")]),i("div",{staticClass:"creator-info"},[i("span",{staticClass:"creator-name"},[e._v(e._s(e.details.owner_display_name||"Unknown"))]),i("span",{staticClass:"creation-date"},[e._v(e._s(e.formatDate(e.details.created_at)))])])]),i("section",{staticClass:"detail-section"},[i("h3",[e._v("System Prompt")]),i("div",{staticClass:"system-prompt-container"},[i("pre",{staticClass:"system-prompt"},[e._v(e._s(e.details.system_prompt))])])]),e.details.tools&&e.details.tools.length>0?i("section",{staticClass:"detail-section"},[i("h3",[e._v("Enabled Tools")]),i("ul",{staticClass:"tools-list"},e._l(e.details.tools,function(s,a){return i("li",{key:a,staticClass:"tool-item"},[i("div",{staticClass:"tool-header"},[i("span",{staticClass:"tool-name"},[e._v(e._s(s.name))]),s.is_builtin?i("span",{staticClass:"tool-badge builtin"},[e._v("Built-in")]):e._e()]),s.description?i("p",{staticClass:"tool-description"},[e._v(e._s(s.description))]):e._e()])}),0)]):e._e(),e.details.rag_enabled?i("section",{staticClass:"detail-section"},[i("h3",[e._v("Knowledge Base")]),i("div",{staticClass:"rag-status"},[i("span",{staticClass:"rag-icon"},[e._v("📚")]),e.details.rag_source_count>0?i("span",[e._v(" This bot has access to "+e._s(e.details.rag_source_count)+" knowledge source"+e._s(e.details.rag_source_count!==1?"s":"")+" ")]):i("span",[e._v(" Knowledge base enabled but no sources attached yet ")])])]):e._e()]),i("div",{staticClass:"modal-footer"},[i("button",{staticClass:"button",on:{click:function(s){return e.$emit("close")}}},[e._v("Close")])])])])},fe=[],be=u(ge,ve,fe,!1,null,"2318f839");const Ce=be.exports,ye={name:"BotTalkStartModal",props:{bot:{type:Object,required:!0}},data(){return{APP_DISPLAY_NAME:k,mode:"new",rooms:[],selectedRoomToken:null,roomName:`Chat with ${this.bot.bot_name}`,message:`${this.formatMention(this.bot.mention_name)} What can you help me with?`,sendMessage:!0,loadingRooms:!1,roomsLoaded:!1,roomsError:null,submitting:!1,error:null}},computed:{mention(){return this.formatMention(this.bot.mention_name)},selectedRoom(){return this.rooms.find(e=>e.token===this.selectedRoomToken)||null},submitDisabled(){return this.submitting?!0:this.mode==="existing"?this.loadingRooms||!this.selectedRoomToken:!this.roomName.trim()},submitLabel(){return this.submitting?"Opening Talk...":this.mode==="new"?this.sendMessage?"Create chat, send message and open Talk":"Create chat and open Talk":this.sendMessage?"Activate, send message and open Talk":"Activate and open Talk"}},methods:{formatMention(e){return`@${(e||"").startsWith("@")?e.substring(1):e}`},setMode(e){this.mode=e,this.error=null,e==="existing"&&!this.roomsLoaded&&this.loadRooms()},async loadRooms(){this.loadingRooms=!0,this.roomsError=null;try{const e=await y.get(v.generateUrl("/apps/educai/api/v1/talk/rooms"));if(this.rooms=e.data?.rooms||[],this.roomsLoaded=!0,!this.selectedRoomToken&&this.rooms.length>0){const i=this.rooms.find(s=>s.isModerator);this.selectedRoomToken=(i||this.rooms[0]).token}}catch(e){console.error("Failed to load Talk conversations:",e),this.roomsError=this.errorFromResponse(e,"Failed to load Talk conversations"),this.roomsLoaded=!0}finally{this.loadingRooms=!1}},async submit(){if(this.error=null,this.mode==="existing"&&!this.selectedRoomToken){this.error="Please select a Talk conversation.";return}this.submitting=!0;try{const e=await y.post(v.generateUrl("/apps/educai/api/v1/talk/start-bot-chat"),{botId:this.bot.id,mode:this.mode,roomToken:this.mode==="existing"?this.selectedRoomToken:null,roomName:this.mode==="new"?this.roomName.trim():null,message:this.message.trim(),sendMessage:this.sendMessage}),i=e.data?.talkUrl;if(!i)throw new Error("Talk did not return a room URL");e.data?.messageSent?z("Message sent. Opening Talk..."):z(`${k} is ready in Talk. Mention ${this.mention} to start.`),window.location.href=i}catch(e){console.error("Failed to start Talk chat:",e),this.error=this.errorFromResponse(e,"Failed to start Talk chat"),S(this.error)}finally{this.submitting=!1}},errorFromResponse(e,i){return e?.response?.data?.error||e?.message||i}}};var _e=function(){var e=this,i=e._self._c;return i("div",{staticClass:"talk-start-overlay",on:{click:function(s){return s.target!==s.currentTarget?null:e.$emit("close")}}},[i("div",{staticClass:"talk-start-modal"},[i("div",{staticClass:"modal-header"},[i("div",{staticClass:"header-content"},[i("h2",[e._v("Start using "+e._s(e.bot.bot_name)+" in Talk")]),i("span",{staticClass:"mention-badge"},[e._v(e._s(e.mention))])]),i("button",{staticClass:"close-button",on:{click:function(s){return e.$emit("close")}}},[i("span",{staticClass:"icon-close"})])]),i("div",{staticClass:"modal-tabs"},[i("div",{staticClass:"mode-tabs",attrs:{role:"tablist","aria-label":"Talk start mode"}},[i("button",{staticClass:"mode-tab",class:{active:e.mode==="new"},attrs:{type:"button","aria-selected":String(e.mode==="new")},on:{click:function(s){return e.setMode("new")}}},[e._v(" New chat ")]),i("button",{staticClass:"mode-tab",class:{active:e.mode==="existing"},attrs:{type:"button","aria-selected":String(e.mode==="existing")},on:{click:function(s){return e.setMode("existing")}}},[e._v(" Existing chat ")])])]),i("div",{staticClass:"modal-body"},[e.mode==="new"?i("div",{staticClass:"form-section"},[i("label",{attrs:{for:"talk-room-name"}},[e._v("Chat name")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.roomName,expression:"roomName"}],attrs:{id:"talk-room-name",type:"text",placeholder:"Chat with bot"},domProps:{value:e.roomName},on:{input:function(s){s.target.composing||(e.roomName=s.target.value)}}})]):e._e(),e.mode==="existing"?i("div",{staticClass:"form-section"},[i("div",{staticClass:"section-header"},[i("label",[e._v("Talk conversation")]),i("button",{staticClass:"refresh-button",attrs:{type:"button",disabled:e.loadingRooms},on:{click:e.loadRooms}},[e._v(" Refresh ")])]),e.loadingRooms?i("div",{staticClass:"room-state"},[i("span",{staticClass:"icon-loading"}),i("span",[e._v("Loading Talk conversations...")])]):e.roomsError?i("div",{staticClass:"error-state"},[e._v(" "+e._s(e.roomsError)+" ")]):e.rooms.length===0?i("div",{staticClass:"room-state"},[e._v(" No Talk conversations available. ")]):i("div",{staticClass:"room-list"},e._l(e.rooms,function(s){return i("label",{key:s.token,staticClass:"room-option",class:{selected:e.selectedRoomToken===s.token}},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.selectedRoomToken,expression:"selectedRoomToken"}],attrs:{type:"radio",name:"talk-room"},domProps:{value:s.token,checked:e._q(e.selectedRoomToken,s.token)},on:{change:function(a){e.selectedRoomToken=s.token}}}),i("span",{staticClass:"room-copy"},[i("span",{staticClass:"room-title"},[e._v(e._s(s.displayName))]),i("span",{staticClass:"room-meta"},[e._v(" "+e._s(s.isModerator?`You can activate ${e.APP_DISPLAY_NAME} here`:`Only moderators can activate ${e.APP_DISPLAY_NAME} here`)+" ")])])])}),0),e.selectedRoom&&!e.selectedRoom.isModerator?i("div",{staticClass:"warning-state"},[e._v(" If "+e._s(e.APP_DISPLAY_NAME)+" is not active in this room yet, a moderator needs to activate it before you can use this bot there. ")]):e._e()]):e._e(),i("div",{staticClass:"form-section"},[i("label",{attrs:{for:"talk-first-message"}},[e._v("First message")]),i("textarea",{directives:[{name:"model",rawName:"v-model",value:e.message,expression:"message"}],attrs:{id:"talk-first-message",rows:"4",placeholder:"@bot What can you help me with?"},domProps:{value:e.message},on:{input:function(s){s.target.composing||(e.message=s.target.value)}}})]),i("label",{staticClass:"send-option"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.sendMessage,expression:"sendMessage"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.sendMessage)?e._i(e.sendMessage,null)>-1:e.sendMessage},on:{change:function(s){var a=e.sendMessage,o=s.target,l=!!o.checked;if(Array.isArray(a)){var r=null,d=e._i(a,r);o.checked?d<0&&(e.sendMessage=a.concat([r])):d>-1&&(e.sendMessage=a.slice(0,d).concat(a.slice(d+1)))}else e.sendMessage=l}}}),i("span",[e._v(" Send this message immediately as me "),e.mode==="existing"?i("small",[e._v("Recommended only when the selected room expects this message.")]):e._e()])]),e.error?i("div",{staticClass:"error-state"},[e._v(" "+e._s(e.error)+" ")]):e._e()]),i("div",{staticClass:"modal-footer"},[i("button",{staticClass:"button",attrs:{disabled:e.submitting},on:{click:function(s){return e.$emit("close")}}},[e._v(" Cancel ")]),i("button",{staticClass:"button primary",attrs:{disabled:e.submitDisabled},on:{click:e.submit}},[e.submitting?i("span",{staticClass:"icon-loading"}):e._e(),e._v(" "+e._s(e.submitLabel)+" ")])])])])},xe=[],we=u(ye,_e,xe,!1,null,"1bd149f6");const ze=we.exports,Se={name:"PublicBotList",components:{PublicBotCard:me,BotDetailModal:Ce,BotTalkStartModal:ze},data(){return{bots:[],loading:!1,selectedBot:null,talkStartBot:null}},computed:{createBotsUrl(){return v.generateUrl("/settings/user/educai")},sortedBots(){return this.bots.slice().sort((e,i)=>{const s=e.visibility||(e.is_public?"global":"groups"),a=i.visibility||(i.is_public?"global":"groups"),o=l=>l==="personal"?0:l==="global"?1:l==="teams"?2:l==="groups"?3:4;return o(s)-o(a)})}},mounted(){this.loadBots()},methods:{async loadBots(){this.loading=!0;try{const e=await y.get(v.generateUrl("/apps/educai/api/v1/public-bots"));this.bots=e.data}catch(e){console.error("Failed to load bots:",e)}finally{this.loading=!1}},openDetailModal(e){this.selectedBot=e},closeDetailModal(){this.selectedBot=null},openTalkStartModal(e){this.talkStartBot=e},closeTalkStartModal(){this.talkStartBot=null}}};var Pe=function(){var e=this,i=e._self._c;return i("div",{staticClass:"public-bot-list"},[i("div",{staticClass:"header"},[e._m(0),i("a",{staticClass:"create-bots-button",attrs:{href:e.createBotsUrl}},[i("span",{staticClass:"icon"},[e._v("✏️")]),e._v(" Create & Edit Bots ")])]),e.bots.length>0?i("div",{staticClass:"bot-grid"},e._l(e.sortedBots,function(s){return i("PublicBotCard",{key:s.id,attrs:{bot:s},on:{"show-details":e.openDetailModal,"speak-in-talk":e.openTalkStartModal}})}),1):e._e(),e.bots.length===0&&!e.loading?i("div",{staticClass:"empty-state"},[i("div",{staticClass:"empty-icon"},[e._v("🤖")]),i("h3",[e._v("No bots available")]),i("p",[e._v("When bots are published and you have access, they will appear here.")])]):e._e(),e.loading?i("div",{staticClass:"loading-state"},[i("span",{staticClass:"icon-loading"}),i("p",[e._v("Loading available bots...")])]):e._e(),e.selectedBot?i("BotDetailModal",{attrs:{bot:e.selectedBot},on:{close:e.closeDetailModal}}):e._e(),e.talkStartBot?i("BotTalkStartModal",{attrs:{bot:e.talkStartBot},on:{close:e.closeTalkStartModal}}):e._e()],1)},De=[function(){var e=this,i=e._self._c;return i("div",{staticClass:"header-content"},[i("h2",[e._v("All Available Bots")]),i("p",{staticClass:"subtitle"},[e._v("Browse bots you have access to and learn more about their capabilities")])])}],ke=u(Se,Pe,De,!1,null,"295e9ac6");const Me=ke.exports,Ee={name:"App",components:{NcContent:gt,NcAppContent:ae,PublicBotList:Me}};var Ne=function(){var e=this,i=e._self._c;return i("NcContent",{attrs:{"app-name":"educai"}},[i("NcAppContent",[i("PublicBotList")],1)],1)},Te=[],Ae=u(Ee,Ne,Te,!1,null,"7bdf2b3a");const $e=Ae.exports;h.mixin({methods:{t,n}});const Re=h.extend($e);new Re().$mount("#content"),W();
|
||
//# sourceMappingURL=educai-main.mjs.map
|