CVE-2026-1117
Description
A vulnerability in the lollms_generation_events.py component of parisneo/lollms version 5.9.0 allows unauthenticated access to sensitive Socket.IO events. The add_events function registers event handlers such as generate_text, cancel_generation, generate_msg, and generate_msg_from without implementing authentication or authorization checks. This allows unauthenticated clients to execute resource-intensive or state-altering operations, leading to potential denial of service, state corruption, and race conditions. Additionally, the use of global flags (lollmsElfServer.busy, lollmsElfServer.cancel_gen) for state management in a multi-client environment introduces further vulnerabilities, enabling one client's actions to affect the server's state and other clients' operations. The lack of proper access control and reliance on insecure global state management significantly impacts the availability and integrity of the service.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
lollmsPyPI | < 2.1.0 | 2.1.0 |
Affected products
1Patches
136a5b513dfefchore(build): prune obsolete UI asset bundles and update related source files
272 files changed · +1249 −621
backend/db/migration.py+3 −6 modified@@ -1,7 +1,5 @@ -# [PARTIAL UPDATE] backend/db/migration.py - Only showing relevant part -# ... (imports) - -# ... (inside run_schema_migrations_and_bootstrap function) +# backend/db/migration.py +# Standard Library Imports import json import re import shutil @@ -477,7 +475,7 @@ def run_schema_migrations_and_bootstrap(connection, inspector): if inspector.has_table("personalities"): personality_columns_db = [col['name'] for col in inspector.get_columns('personalities')] - new_personality_cols_defs = { "active_mcps": "JSON", "data_source_type": "VARCHAR DEFAULT 'none' NOT NULL", "data_source": "TEXT", "version": "VARCHAR", "repository": "VARCHAR", "folder_name": "VARCHAR" } + new_personality_cols_defs = { "active_mcps": "JSON", "data_source_type": "VARCHAR DEFAULT 'none' NOT NULL", "data_source": "TEXT", "version": "VARCHAR", "repository": "VARCHAR", "folder_name": "VARCHAR", "required_context_options": "JSON" } for col_name, col_sql_def in new_personality_cols_defs.items(): if col_name not in personality_columns_db: connection.execute(text(f"ALTER TABLE personalities ADD COLUMN {col_name} {col_sql_def}")) @@ -1122,4 +1120,3 @@ def _migrate_user_data_folders(connection): try: shutil.move(str(old_path), str(new_path)) except Exception: pass except Exception: pass -
backend/db/models/personality.py+1 −0 modified@@ -25,6 +25,7 @@ class Personality(Base): is_public = Column(Boolean, default=False, index=True) owner_user_id = Column(Integer, ForeignKey("users.id", name="fk_personality_owner", ondelete="SET NULL"), nullable=True, index=True) active_mcps = Column(JSON, nullable=True) + required_context_options = Column(JSON, nullable=True) # NEW: List of required flags (e.g. ['image_generation', 'memory']) data_source_type = Column(String, default="none", nullable=False) data_source = Column(Text, nullable=True)
backend/models/personality.py+3 −0 modified@@ -12,6 +12,7 @@ class PersonalityBase(BaseModel): script_code: Optional[str] = None icon_base64: Optional[str] = None active_mcps: Optional[List[str]] = Field(default_factory=list) + required_context_options: Optional[List[str]] = Field(default_factory=list) # NEW data_source_type: Optional[str] = "none" data_source: Optional[str] = None @@ -24,6 +25,8 @@ class PersonalityUpdate(PersonalityBase): name: Optional[constr(min_length=1, max_length=100)] = None prompt_text: Optional[str] = None is_public: Optional[bool] = None + # Explicitly redeclare icon_base64 to ensure it is picked up by Pydantic's exclude_unset mechanism correctly + icon_base64: Optional[str] = None class PersonalityPublic(PersonalityBase): id: str
backend/routers/auth.py+3 −3 modified@@ -380,13 +380,13 @@ async def register_new_user(user_data: UserCreatePublic, db: Session = Depends(g email=user_data.email, hashed_password=get_password_hash(user_data.password), is_active=is_active_on_creation, - status=user_status, # NEW + status=user_status, is_admin=False, lollms_model_name=settings.get("default_lollms_model_name"), safe_store_vectorizer=settings.get("default_safe_store_vectorizer"), llm_ctx_size=settings.get("default_llm_ctx_size"), llm_temperature=settings.get("default_llm_temperature"), - first_login_done=True, + first_login_done=False, # CHANGED to False so the Terms modal appears user_ui_level=settings.get("default_user_ui_level", 0), auto_title=settings.get("default_auto_title", False) ) @@ -625,7 +625,7 @@ async def create_first_admin(user_data: UserCreateAdmin, db: Session = Depends(g llm_temperature=settings.get("default_llm_temperature"), user_ui_level=4, auto_title=True, - first_login_done=False + first_login_done=False # Changed to False to force Terms of Use ) try:
backend/routers/personalities.py+340 −39 modified@@ -1,16 +1,18 @@ -# [UPDATE] backend/routers/personalities.py # backend/routers/personalities.py import traceback import json from typing import List, Dict, Optional import io import base64 +import zipfile +import yaml from PIL import Image # Third-Party Imports from fastapi import ( - APIRouter, Depends, HTTPException + APIRouter, Depends, HTTPException, UploadFile, File, Response ) +from fastapi.responses import StreamingResponse from sqlalchemy.orm import Session, joinedload from sqlalchemy.exc import IntegrityError from sqlalchemy import or_, and_ @@ -35,7 +37,7 @@ ) from backend.task_manager import task_manager, Task from backend.settings import settings -from ascii_colors import trace_exception +from ascii_colors import trace_exception, ASCIIColors personalities_router = APIRouter(prefix="/api/personalities", tags=["Personalities"]) @@ -73,14 +75,27 @@ def _generate_personality_task(task: Task, username: str, prompt: str): "prompt_text": {"type": "string", "description": "The core system prompt that defines the AI's role, rules, and initial instructions for character."}, "disclaimer": {"type": "string", "description": "Any necessary warnings or disclaimers users should be aware of."}, "script_code": {"type": "string", "description": "Optional Python code for advanced behaviors. Can be empty."}, - "active_mcps": {"type": "array", "items": {"type": "string"}, "description": "A list of default MCP tools to activate with this personality."} + "active_mcps": {"type": "array", "items": {"type": "string"}, "description": "A list of default MCP tools to activate with this personality."}, + "required_context_options": { + "type": "array", + "items": { + "type": "string", + "enum": ["image_generation", "image_editing", "slide_maker", "note_generation", "memory"] + }, + "description": "List of mandatory context features required for this personality. Select 'image_generation' if the personality is visual/artist, 'memory' if it needs long-term memory, etc." + } }, "required": ["name", "prompt_text"], "description": "JSON object defining a LoLLMs personality." } system_prompt = f"""You are an expert personality designer for AI chatbots. -Your task is to create a new personality based on the user's prompt.""" +Your task is to create a new personality based on the user's prompt. +Analyze the requested personality and intelligently select 'required_context_options'. +For example: +- If the personality is an Artist or Designer, select 'image_generation'. +- If it's a Writer or Editor, 'image_generation' is likely unnecessary. +- If it needs to remember long-term details, select 'memory'.""" task.log("Sending prompt to LLM for JSON generation...") task.set_progress(30) @@ -91,10 +106,71 @@ def _generate_personality_task(task: Task, username: str, prompt: str): #n_predict=settings.get("default_llm_ctx_size") ) + if not generated_data_dict: + raise Exception("Failed to generate personality structure from LLM.") + + # --- Auto-Icon Generation if TTI is active --- + if current_user.tti_binding_model_name: + task.log("TTI engine detected. Generating personality icon...") + task.set_progress(60) + try: + # 1. Use LLM to generate a specific image prompt from the description + image_prompt_request = f"""Create a detailed image generation prompt for a profile icon based on this personality: +Name: {generated_data_dict.get('name')} +Description: {generated_data_dict.get('description')} +Category: {generated_data_dict.get('category')} + +The prompt should specify the subject, art style, lighting, and composition. Ensure it is suitable for a square icon. Return ONLY the prompt.""" + + icon_gen_prompt = lc.generate_text(image_prompt_request, max_new_tokens=150).strip() + task.log(f"LLM generated icon prompt: {icon_gen_prompt}") + + # 2. Initialize TTI client + tti_client = build_lollms_client_from_params(username=username, load_llm=False, load_tti=True) + + if tti_client.tti: + img_bytes = None + try: + img_bytes = tti_client.tti.generate_image( + prompt=icon_gen_prompt, + negative_prompt="bad quality, ugly, deformed, text, watermark, nsfw", + width=512, + height=512 + ) + except Exception as e: + # Safety filter fallback + task.log(f"Initial icon generation failed ({e}). Trying safe fallback.", "WARNING") + img_bytes = tti_client.tti.generate_image( + prompt="Abstract digital avatar icon, geometric shapes, blue and white, minimalist, high quality", + negative_prompt="nsfw, blurry, text", + width=512, + height=512 + ) + + if img_bytes: + if isinstance(img_bytes, list): + img_bytes = img_bytes[0] + + # Handle pre-encoded data vs raw bytes + if isinstance(img_bytes, str) and img_bytes.startswith('data:'): + generated_data_dict['icon_base64'] = img_bytes + elif isinstance(img_bytes, (bytes, bytearray)): + image = Image.open(io.BytesIO(img_bytes)) + image.thumbnail((128, 128)) + buffered = io.BytesIO() + image.save(buffered, format="PNG") + img_b64 = base64.b64encode(buffered.getvalue()).decode("utf-8") + generated_data_dict['icon_base64'] = f"data:image/png;base64,{img_b64}" + + task.log("Icon generated successfully.") + except Exception as e: + task.log(f"Failed to generate icon: {e}", "WARNING") + trace_exception(e) + task.log("Creating new personality in the database...") task.set_progress(90) - # FIX: Ensure newly generated personalities do not have pre-selected MCPs + # FIX: Clear active_mcps to prevent hallucinated tools, but keep required_context_options generated_data_dict['active_mcps'] = [] existing_personality = db_session.query(DBPersonality).filter( @@ -161,45 +237,90 @@ def _generate_icon_task(task: Task, username: str, prompt: str): task.set_progress(10) try: - lc = build_lollms_client_from_params(username=username, load_llm=False, load_tti=True) + # Load BOTH LLM (for prompt refinement) and TTI (for generation) + lc = build_lollms_client_from_params(username=username, load_llm=True, load_tti=True) + if not lc.tti: raise Exception("Text-to-Image service is not configured for this user.") - task.log("Generating image using TTI engine...") - # Generate image as raw bytes (not base64) - img_data = lc.tti.generate_image(prompt, width=512, height=512) + # 1. Refine Prompt using LLM + task.log("Refining image prompt with LLM...") + refinement_sys_prompt = "You are an expert prompt engineer for AI art. Convert the user's description into a high-quality, detailed stable diffusion prompt for a profile icon. Focus on style, lighting, and subject. Output ONLY the prompt." - # If API returns a list, pick the first - if isinstance(img_data, (list, tuple)): - if not img_data: - raise Exception("Image generation returned empty list.") - img_data = img_data[0] - - # If the provider sometimes returns a data URI or base64 str, normalize: - if isinstance(img_data, str): - # Remove any data URI prefix if present - if img_data.startswith("data:"): - img_data = img_data.split(",", 1)[1] - # Base64 string -> raw bytes - img_data = base64.b64decode(img_data) - - if not isinstance(img_data, (bytes, bytearray)): - raise Exception(f"Unsupported image payload type from generator: {type(img_data)}") - - task.set_progress(80) - task.log("Processing image...") - - with Image.open(io.BytesIO(img_data)) as img: - if img.mode not in ("RGB", "RGBA"): - img = img.convert("RGBA") - img.thumbnail((128, 128)) - buf = io.BytesIO() - img.save(buf, format="PNG") - icon_b64 = base64.b64encode(buf.getvalue()).decode("utf-8") + refined_prompt = lc.generate_text(prompt, system_prompt=refinement_sys_prompt, max_new_tokens=200).strip() + task.log(f"Refined Prompt: {refined_prompt}") + + task.log(f"Generating image using TTI engine: {lc.tti.config.get('model_name', 'default')}") + + img_data = None + + # Helper to process result + def process_img_bytes(img_bytes): + if not img_bytes: return None + if isinstance(img_bytes, list): img_bytes = img_bytes[0] + + if isinstance(img_bytes, str): + if img_bytes.startswith("data:"): + return img_bytes + # Try base64 decode if it's a raw b64 string + try: + base64.b64decode(img_bytes) + return f"data:image/png;base64,{img_bytes}" + except: + pass + + if isinstance(img_bytes, (bytes, bytearray)): + image = Image.open(io.BytesIO(img_bytes)) + image.thumbnail((128, 128)) + buf = io.BytesIO() + image.save(buf, format="PNG") + b64 = base64.b64encode(buf.getvalue()).decode("utf-8") + return f"data:image/png;base64,{b64}" + return None + + # 2. Try Primary Prompt (Refined) + try: + # Add safety modifiers to the user prompt to try and guide it + safe_prompt = f"{refined_prompt}, safe content, pg-13, no nudity, no violence" + img_data = lc.tti.generate_image( + prompt=safe_prompt, + negative_prompt="bad quality, ugly, deformed, text, watermark, nsfw, nudity, violence, explicit", + width=512, + height=512 + ) + except Exception as e: + error_msg = str(e).lower() + task.log(f"Primary generation failed: {str(e)}", "WARNING") + + # Check for common content filter errors + safety_keywords = ["prohibited", "content", "filter", "safety", "blocked", "policy", "nsfw"] + is_safety_error = any(k in error_msg for k in safety_keywords) + + if is_safety_error: + task.log("Safety filter detected. Switching to abstract fallback.", "INFO") + # 3. Try Safe Fallback + try: + fallback_prompt = "Abstract digital avatar icon, colorful geometric shapes, high quality, minimalist, safe content" + img_data = lc.tti.generate_image( + prompt=fallback_prompt, + negative_prompt="nsfw, blurry, text, realistic, face, body", + width=512, + height=512 + ) + except Exception as fallback_error: + task.log(f"Fallback generation also failed: {fallback_error}", "ERROR") + raise e # Raise original error if fallback fails + else: + raise e # Raise non-safety errors (network, auth, etc) + + icon_b64 = process_img_bytes(img_data) + + if not icon_b64: + raise Exception("Image generation failed: TTI engine returned no data.") - task.log("Icon generated successfully.") task.set_progress(100) - return {"icon_base64": f"data:image/png;base64,{icon_b64}"} + task.log("Icon generated successfully.") + return {"icon_base64": icon_b64} except Exception as e: task.log(f"Icon generation failed: {e}", "ERROR") @@ -277,6 +398,7 @@ def get_personality_public_from_db(db_personality: DBPersonality, owner_username updated_at=db_personality.updated_at, is_public=db_personality.is_public, active_mcps=db_personality.active_mcps or [], + required_context_options=db_personality.required_context_options or [], owner_username=owner_username, data_source_type=db_personality.data_source_type, data_source=db_personality.data_source @@ -478,6 +600,7 @@ async def send_personality_to_user(personality_id: str, send_request: Personalit icon_base64=original_personality.icon_base64, owner_user_id=target_user.id, active_mcps=original_personality.active_mcps, + required_context_options=original_personality.required_context_options, is_public=False ) db.add(copied_personality) @@ -492,3 +615,181 @@ async def send_personality_to_user(personality_id: str, send_request: Personalit db.rollback() traceback.print_exc() raise HTTPException(status_code=500, detail=f"Database error sending personality: {str(e)}") + +@personalities_router.get("/{personality_id}/export") +async def export_personality(personality_id: str, current_user: UserAuthDetails = Depends(get_current_active_user), db: Session = Depends(get_db)): + """ + Exports a personality as a zip file containing description.yaml, optional icon.png, and optional data.txt. + """ + db_personality = db.query(DBPersonality).filter(DBPersonality.id == personality_id).first() + if not db_personality: + raise HTTPException(status_code=404, detail="Personality not found.") + + is_owner = (db_personality.owner_user_id == current_user.id) + is_system = db_personality.owner_user_id is None + is_public = db_personality.is_public + + if not is_public and not is_system and not is_owner: + raise HTTPException(status_code=403, detail="You do not have permission to export this personality.") + + try: + # Prepare description.yaml content + desc_data = { + 'name': db_personality.name, + 'category': db_personality.category, + 'author': db_personality.author, + 'description': db_personality.description, + 'prompt_text': db_personality.prompt_text, + 'disclaimer': db_personality.disclaimer, + 'version': db_personality.version or '1.0.0', + 'active_mcps': db_personality.active_mcps or [], + 'required_context_options': db_personality.required_context_options or [] + } + + # Prepare zip buffer + zip_buffer = io.BytesIO() + + with zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED) as zf: + # Add description.yaml + zf.writestr('description.yaml', yaml.dump(desc_data, default_flow_style=False)) + + # Add icon.png if available + if db_personality.icon_base64: + try: + # Remove header if present + b64_data = db_personality.icon_base64 + if "base64," in b64_data: + b64_data = b64_data.split("base64,")[1] + + img_bytes = base64.b64decode(b64_data) + zf.writestr('icon.png', img_bytes) + except Exception as e: + print(f"Warning: Failed to export icon for personality {personality_id}: {e}") + + # Add data.txt if static text + if db_personality.data_source_type == 'static_text' and db_personality.data_source: + zf.writestr('data.txt', db_personality.data_source) + + zip_buffer.seek(0) + + filename = f"{db_personality.name.replace(' ', '_')}_export.zip" + headers = { + 'Content-Disposition': f'attachment; filename="{filename}"' + } + + return StreamingResponse(zip_buffer, media_type="application/zip", headers=headers) + + except Exception as e: + trace_exception(e) + raise HTTPException(status_code=500, detail=f"Failed to export personality: {e}") + +@personalities_router.post("/import", response_model=PersonalityPublic) +async def import_personality( + file: UploadFile = File(...), + current_user: UserAuthDetails = Depends(get_current_active_user), + db: Session = Depends(get_db) +): + """ + Imports a personality from a zip file. + Expects description.yaml. Optional: icon.png/jpg, data.txt. + """ + if not file.filename.endswith('.zip'): + raise HTTPException(status_code=400, detail="Invalid file format. Please upload a .zip file.") + + try: + content = await file.read() + + with zipfile.ZipFile(io.BytesIO(content), 'r') as zf: + # 1. Parse description.yaml + if 'description.yaml' not in zf.namelist(): + # Try config.yaml for legacy support + if 'config.yaml' in zf.namelist(): + desc_content = zf.read('config.yaml') + else: + raise HTTPException(status_code=400, detail="Missing description.yaml in zip.") + else: + desc_content = zf.read('description.yaml') + + try: + desc_data = yaml.safe_load(desc_content) + except yaml.YAMLError: + raise HTTPException(status_code=400, detail="Invalid YAML format in description.yaml.") + + # Validate mandatory fields + if not desc_data.get('name') or not desc_data.get('prompt_text', desc_data.get('personality_conditioning')): + raise HTTPException(status_code=400, detail="Personality must have a name and prompt text (personality_conditioning).") + + # 2. Handle Icon + icon_base64 = None + icon_files = [f for f in zf.namelist() if f.lower() in ['icon.png', 'icon.jpg', 'icon.jpeg', 'logo.png']] + if icon_files: + try: + icon_bytes = zf.read(icon_files[0]) + # Detect mime + mime = "image/png" + if icon_files[0].lower().endswith('.jpg') or icon_files[0].lower().endswith('.jpeg'): + mime = "image/jpeg" + + b64_str = base64.b64encode(icon_bytes).decode('utf-8') + icon_base64 = f"data:{mime};base64,{b64_str}" + except Exception as e: + print(f"Warning: Failed to process icon from import: {e}") + + # 3. Handle Data Source + data_source_type = 'none' + data_source = None + if 'data.txt' in zf.namelist(): + try: + data_source = zf.read('data.txt').decode('utf-8') + data_source_type = 'static_text' + except Exception: + print("Warning: Failed to read data.txt.") + + # Construct Personality Object + # Check for name collision + base_name = desc_data.get('name') + + # Map legacy fields if needed + prompt_text = desc_data.get('prompt_text') or desc_data.get('personality_conditioning') + description = desc_data.get('description') or desc_data.get('personality_description') + active_mcps = desc_data.get('active_mcps') or desc_data.get('dependencies', []) + required_context = desc_data.get('required_context_options') or [] + + # Handle Owner + db_user = db.query(DBUser).filter(DBUser.username == current_user.username).first() + owner_id = db_user.id + is_public = False + + # Name collision check + if db.query(DBPersonality).filter(DBPersonality.owner_user_id == owner_id, DBPersonality.name == base_name).first(): + base_name = f"{base_name} (Imported)" + + new_personality = DBPersonality( + name=base_name, + category=desc_data.get('category', 'Imported'), + author=desc_data.get('author', current_user.username), + description=description, + prompt_text=prompt_text, + disclaimer=desc_data.get('disclaimer'), + version=str(desc_data.get('version', '1.0')), + icon_base64=icon_base64, + active_mcps=active_mcps, + required_context_options=required_context, + data_source_type=data_source_type, + data_source=data_source, + owner_user_id=owner_id, + is_public=is_public + ) + + db.add(new_personality) + db.commit() + db.refresh(new_personality) + + return get_personality_public_from_db(new_personality, current_user.username) + + except zipfile.BadZipFile: + raise HTTPException(status_code=400, detail="Invalid zip file.") + except Exception as e: + trace_exception(e) + db.rollback() + raise HTTPException(status_code=500, detail=f"Import failed: {str(e)}")
frontend/dist/index.html+2 −2 modified@@ -18,8 +18,8 @@ <script defer src="https://cdn.jsdelivr.net/pyodide/v0.25.1/full/pyodide.js"></script> <!-- The main application script, a module handled by Vite --> - <script type="module" crossorigin src="/ui_assets/index-CEXks4lv.js"></script> - <link rel="stylesheet" crossorigin href="/ui_assets/index-MA3P6vxv.css"> + <script type="module" crossorigin src="/ui_assets/index-BBRgbnZQ.js"></script> + <link rel="stylesheet" crossorigin href="/ui_assets/index-BtkqZe_k.css"> </head> <body> <!-- The Vue application will mount here -->
frontend/dist/ui_assets/AccountSettings-CNI68O_H.js+0 −1 removed@@ -1 +0,0 @@ -import{u as j,K as q,a8 as L,c as S,s as n,o as O,w as U,d as V,h as A,l as m,e,H as I,f as z,U as H,t as k,z as u,L as w,V as D,J as N,n as h,c8 as F,c9 as M,E as K}from"./index-CEXks4lv.js";const R={key:0,class:"space-y-10"},W={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},Q={class:"border-t border-gray-200 dark:border-gray-700 p-4 sm:p-6"},X={class:"flex-shrink-0 flex flex-col items-center space-y-2 w-full md:w-40"},Y=["disabled"],Z={class:"flex-grow space-y-6"},ee={class:"grid grid-cols-1 sm:grid-cols-2 gap-6"},te={class:"space-y-4 pt-4 border-t dark:border-gray-600"},ae={class:"relative flex items-start"},se={class:"flex h-6 items-center"},le={class:"relative flex items-start"},re={class:"flex h-6 items-center"},ie={class:"flex justify-end"},oe=["disabled"],ne={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},de={class:"border-t border-gray-200 dark:border-gray-700"},ue={class:"mt-1 relative"},ce=["type"],me={class:"mt-1 relative"},fe=["type"],pe={class:"mt-1 relative"},ve=["type"],ye={class:"flex justify-end"},ge=["disabled"],we={__name:"AccountSettings",setup(xe){const c=j(),o=q();L();const i=S(()=>c.user),s=n({first_name:"",family_name:"",email:"",birth_date:"",receive_notification_emails:!0,is_searchable:!0}),p=n(!1),P=n(!1);let _="{}";const d=n({current_password:"",new_password:""}),v=n(""),y=n(!1),g=n(!1),f=n(!1),x=n(!1),b=n(null),E=S(()=>{var l;return!!((l=i.value)!=null&&l.tti_binding_model_name)});function C(){i.value&&(s.value.first_name=i.value.first_name||"",s.value.family_name=i.value.family_name||"",s.value.email=i.value.email||"",s.value.birth_date=i.value.birth_date||"",s.value.receive_notification_emails=i.value.receive_notification_emails,s.value.is_searchable=i.value.is_searchable,_=JSON.stringify(s.value))}O(C),U(i,C,{deep:!0}),U(s,l=>{P.value=JSON.stringify(l)!==_},{deep:!0});async function B(){p.value=!0;try{const l=JSON.parse(_),t={};let a=!1;for(const r in s.value)s.value[r]!==l[r]&&(t[r]=s.value[r],a=!0);if(a){const r={...t};r.email===""&&(r.email=null),r.birth_date===""&&(r.birth_date=null),await c.updateUserProfile(r)}else o.addNotification("No changes to save.","info")}catch{}finally{p.value=!1}}async function G(){if(d.value.new_password!==v.value){o.addNotification("New passwords do not match.","error");return}if(d.value.new_password.length<8){o.addNotification("New password must be at least 8 characters long.","error");return}y.value=!0;try{await c.changePassword(d.value),d.value.current_password="",d.value.new_password="",v.value=""}catch{}finally{y.value=!1}}const T=()=>{var l;(l=b.value)==null||l.click()},J=async l=>{const t=l.target.files[0];if(!t)return;x.value=!0,o.addNotification("Uploading icon...","info");const a=new FormData;a.append("file",t);try{const r=await K.put("/api/auth/me/icon",a,{headers:{"Content-Type":"multipart/form-data"}});c.user&&(c.user.icon=r.data.icon_url),o.addNotification("Icon updated successfully!","success")}catch{o.addNotification("Icon upload failed.","error")}finally{x.value=!1,b.value&&(b.value.value="")}};async function $(){const{confirmed:l,value:t}=await o.showConfirmation({title:"Generate New Avatar",message:"Enter an optional prompt to guide the AI. If left blank, a prompt will be generated from your profile information.",confirmText:"Generate",inputType:"textarea",inputPlaceholder:"e.g., a professional photo, pixel art style..."});if(l)try{const a=await c.generateAvatar(t||null);a?o.openModal("tasksManager",{initialTaskId:a.id}):o.addNotification("Failed to start avatar generation task. Check server logs for details.","error")}catch(a){console.error("Error during handleGenerateAvatar:",a),o.addNotification("An unexpected error occurred while trying to generate the avatar.","error")}}return(l,t)=>i.value?(m(),V("div",R,[e("div",W,[t[18]||(t[18]=e("div",{class:"p-4 sm:p-6"},[e("h2",{class:"text-xl font-bold leading-6 text-gray-900 dark:text-white"},"Profile"),e("p",{class:"mt-1 max-w-2xl text-sm text-gray-500 dark:text-gray-400"},"Manage your public profile and personal information.")],-1)),e("div",Q,[e("form",{onSubmit:I(B,["prevent"]),class:"flex flex-col md:flex-row gap-8"},[e("div",X,[z(H,{icon:i.value.icon,username:i.value.username,"size-class":"h-28 w-28"},null,8,["icon","username"]),e("input",{type:"file",ref_key:"fileInput",ref:b,onChange:J,accept:"image/png, image/jpeg, image/webp",class:"hidden"},null,544),e("button",{type:"button",onClick:T,disabled:x.value,class:"btn btn-secondary w-full"},k(x.value?"Uploading...":"Change Icon"),9,Y),E.value?(m(),V("button",{key:0,type:"button",onClick:$,class:"btn btn-secondary-outline w-full"}," Generate Avatar ")):A("",!0),t[11]||(t[11]=e("p",{class:"text-xs text-center text-gray-500 dark:text-gray-400"},"Max 5MB (JPG, PNG, WEBP)",-1))]),e("div",Z,[e("div",ee,[e("div",null,[t[12]||(t[12]=e("label",{for:"firstName",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"First Name",-1)),u(e("input",{type:"text",id:"firstName","onUpdate:modelValue":t[0]||(t[0]=a=>s.value.first_name=a),class:"input-field mt-1",placeholder:"Jane"},null,512),[[w,s.value.first_name]])]),e("div",null,[t[13]||(t[13]=e("label",{for:"familyName",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Family Name",-1)),u(e("input",{type:"text",id:"familyName","onUpdate:modelValue":t[1]||(t[1]=a=>s.value.family_name=a),class:"input-field mt-1",placeholder:"Doe"},null,512),[[w,s.value.family_name]])])]),e("div",null,[t[14]||(t[14]=e("label",{for:"email",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Email Address",-1)),u(e("input",{type:"email",id:"email","onUpdate:modelValue":t[2]||(t[2]=a=>s.value.email=a),class:"input-field mt-1",placeholder:"you@example.com"},null,512),[[w,s.value.email]])]),e("div",null,[t[15]||(t[15]=e("label",{for:"birthDate",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Birth Date",-1)),u(e("input",{type:"date",id:"birthDate","onUpdate:modelValue":t[3]||(t[3]=a=>s.value.birth_date=a),class:"input-field mt-1"},null,512),[[w,s.value.birth_date]])]),e("div",te,[e("div",ae,[e("div",se,[u(e("input",{id:"is_searchable","onUpdate:modelValue":t[4]||(t[4]=a=>s.value.is_searchable=a),type:"checkbox",class:"h-4 w-4 rounded border-gray-300 dark:border-gray-600 text-blue-600 focus:ring-blue-600"},null,512),[[D,s.value.is_searchable]])]),t[16]||(t[16]=e("div",{class:"ml-3 text-sm leading-6"},[e("label",{for:"is_searchable",class:"font-medium text-gray-900 dark:text-gray-100"},"Profile Searchability"),e("p",{class:"text-gray-500 dark:text-gray-400"},"Allow other users to find your profile in searches.")],-1))]),e("div",le,[e("div",re,[u(e("input",{id:"receive_notification_emails","onUpdate:modelValue":t[5]||(t[5]=a=>s.value.receive_notification_emails=a),type:"checkbox",class:"h-4 w-4 rounded border-gray-300 dark:border-gray-600 text-blue-600 focus:ring-blue-600"},null,512),[[D,s.value.receive_notification_emails]])]),t[17]||(t[17]=e("div",{class:"ml-3 text-sm leading-6"},[e("label",{for:"receive_notification_emails",class:"font-medium text-gray-900 dark:text-gray-100"},"Notification Emails"),e("p",{class:"text-gray-500 dark:text-gray-400"},"Receive emails for important events like password resets.")],-1))])]),e("div",ie,[e("button",{type:"submit",class:"btn btn-primary",disabled:p.value||!P.value},k(p.value?"Saving...":"Save Profile"),9,oe)])])],32)])]),e("div",ne,[t[22]||(t[22]=e("div",{class:"px-4 py-5 sm:p-6"},[e("h2",{class:"text-xl font-bold leading-6 text-gray-900 dark:text-white"},"Change Password"),e("p",{class:"mt-1 max-w-2xl text-sm text-gray-500 dark:text-gray-400"},"Ensure your account is using a long, random password to stay secure.")],-1)),e("div",de,[e("form",{onSubmit:I(G,["prevent"]),class:"p-4 sm:p-6 space-y-6"},[e("div",null,[t[19]||(t[19]=e("label",{for:"currentPassword",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Current Password",-1)),e("div",ue,[u(e("input",{type:g.value?"text":"password",id:"currentPassword","onUpdate:modelValue":t[6]||(t[6]=a=>d.value.current_password=a),required:"",class:"input-field pr-10",autocomplete:"current-password"},null,8,ce),[[N,d.value.current_password]]),e("button",{type:"button",onClick:t[7]||(t[7]=a=>g.value=!g.value),class:"absolute inset-y-0 right-0 pr-3 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-200"},[g.value?(m(),h(F,{key:0,class:"w-5 h-5"})):(m(),h(M,{key:1,class:"w-5 h-5"}))])])]),e("div",null,[t[20]||(t[20]=e("label",{for:"newPassword",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"New Password",-1)),e("div",me,[u(e("input",{type:f.value?"text":"password",id:"newPassword","onUpdate:modelValue":t[8]||(t[8]=a=>d.value.new_password=a),required:"",minlength:"8",class:"input-field pr-10",autocomplete:"new-password"},null,8,fe),[[N,d.value.new_password]]),e("button",{type:"button",onClick:t[9]||(t[9]=a=>f.value=!f.value),class:"absolute inset-y-0 right-0 pr-3 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-200"},[f.value?(m(),h(F,{key:0,class:"w-5 h-5"})):(m(),h(M,{key:1,class:"w-5 h-5"}))])])]),e("div",null,[t[21]||(t[21]=e("label",{for:"confirmPassword",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Confirm New Password",-1)),e("div",pe,[u(e("input",{type:f.value?"text":"password",id:"confirmPassword","onUpdate:modelValue":t[10]||(t[10]=a=>v.value=a),required:"",class:"input-field pr-10",autocomplete:"new-password"},null,8,ve),[[N,v.value]])])]),e("div",ye,[e("button",{type:"submit",class:"btn btn-primary",disabled:y.value},k(y.value?"Changing...":"Change Password"),9,ge)])],32)])])])):A("",!0)}};export{we as default};
frontend/dist/ui_assets/AccountSettings-CTpk8f97.js+1 −0 added@@ -0,0 +1 @@ +import{u as j,K as q,Q as L,c as S,s as n,o as O,w as U,d as A,h as V,l as m,e,H as I,f as z,U as H,t as k,z as u,L as w,Z as D,J as N,n as h,c8 as F,c9 as M,E as K}from"./index-BBRgbnZQ.js";const Q={key:0,class:"space-y-10"},R={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},W={class:"border-t border-gray-200 dark:border-gray-700 p-4 sm:p-6"},Z={class:"flex-shrink-0 flex flex-col items-center space-y-2 w-full md:w-40"},X=["disabled"],Y={class:"flex-grow space-y-6"},ee={class:"grid grid-cols-1 sm:grid-cols-2 gap-6"},te={class:"space-y-4 pt-4 border-t dark:border-gray-600"},ae={class:"relative flex items-start"},se={class:"flex h-6 items-center"},le={class:"relative flex items-start"},re={class:"flex h-6 items-center"},ie={class:"flex justify-end"},oe=["disabled"],ne={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},de={class:"border-t border-gray-200 dark:border-gray-700"},ue={class:"mt-1 relative"},ce=["type"],me={class:"mt-1 relative"},fe=["type"],pe={class:"mt-1 relative"},ve=["type"],ye={class:"flex justify-end"},ge=["disabled"],we={__name:"AccountSettings",setup(xe){const c=j(),o=q();L();const i=S(()=>c.user),s=n({first_name:"",family_name:"",email:"",birth_date:"",receive_notification_emails:!0,is_searchable:!0}),p=n(!1),P=n(!1);let _="{}";const d=n({current_password:"",new_password:""}),v=n(""),y=n(!1),g=n(!1),f=n(!1),x=n(!1),b=n(null),E=S(()=>{var l;return!!((l=i.value)!=null&&l.tti_binding_model_name)});function C(){i.value&&(s.value.first_name=i.value.first_name||"",s.value.family_name=i.value.family_name||"",s.value.email=i.value.email||"",s.value.birth_date=i.value.birth_date||"",s.value.receive_notification_emails=i.value.receive_notification_emails,s.value.is_searchable=i.value.is_searchable,_=JSON.stringify(s.value))}O(C),U(i,C,{deep:!0}),U(s,l=>{P.value=JSON.stringify(l)!==_},{deep:!0});async function B(){p.value=!0;try{const l=JSON.parse(_),t={};let a=!1;for(const r in s.value)s.value[r]!==l[r]&&(t[r]=s.value[r],a=!0);if(a){const r={...t};r.email===""&&(r.email=null),r.birth_date===""&&(r.birth_date=null),await c.updateUserProfile(r)}else o.addNotification("No changes to save.","info")}catch{}finally{p.value=!1}}async function G(){if(d.value.new_password!==v.value){o.addNotification("New passwords do not match.","error");return}if(d.value.new_password.length<8){o.addNotification("New password must be at least 8 characters long.","error");return}y.value=!0;try{await c.changePassword(d.value),d.value.current_password="",d.value.new_password="",v.value=""}catch{}finally{y.value=!1}}const T=()=>{var l;(l=b.value)==null||l.click()},J=async l=>{const t=l.target.files[0];if(!t)return;x.value=!0,o.addNotification("Uploading icon...","info");const a=new FormData;a.append("file",t);try{const r=await K.put("/api/auth/me/icon",a,{headers:{"Content-Type":"multipart/form-data"}});c.user&&(c.user.icon=r.data.icon_url),o.addNotification("Icon updated successfully!","success")}catch{o.addNotification("Icon upload failed.","error")}finally{x.value=!1,b.value&&(b.value.value="")}};async function $(){const{confirmed:l,value:t}=await o.showConfirmation({title:"Generate New Avatar",message:"Enter an optional prompt to guide the AI. If left blank, a prompt will be generated from your profile information.",confirmText:"Generate",inputType:"textarea",inputPlaceholder:"e.g., a professional photo, pixel art style..."});if(l)try{const a=await c.generateAvatar(t||null);a?o.openModal("tasksManager",{initialTaskId:a.id}):o.addNotification("Failed to start avatar generation task. Check server logs for details.","error")}catch(a){console.error("Error during handleGenerateAvatar:",a),o.addNotification("An unexpected error occurred while trying to generate the avatar.","error")}}return(l,t)=>i.value?(m(),A("div",Q,[e("div",R,[t[18]||(t[18]=e("div",{class:"p-4 sm:p-6"},[e("h2",{class:"text-xl font-bold leading-6 text-gray-900 dark:text-white"},"Profile"),e("p",{class:"mt-1 max-w-2xl text-sm text-gray-500 dark:text-gray-400"},"Manage your public profile and personal information.")],-1)),e("div",W,[e("form",{onSubmit:I(B,["prevent"]),class:"flex flex-col md:flex-row gap-8"},[e("div",Z,[z(H,{icon:i.value.icon,username:i.value.username,"size-class":"h-28 w-28"},null,8,["icon","username"]),e("input",{type:"file",ref_key:"fileInput",ref:b,onChange:J,accept:"image/png, image/jpeg, image/webp",class:"hidden"},null,544),e("button",{type:"button",onClick:T,disabled:x.value,class:"btn btn-secondary w-full"},k(x.value?"Uploading...":"Change Icon"),9,X),E.value?(m(),A("button",{key:0,type:"button",onClick:$,class:"btn btn-secondary-outline w-full"}," Generate Avatar ")):V("",!0),t[11]||(t[11]=e("p",{class:"text-xs text-center text-gray-500 dark:text-gray-400"},"Max 5MB (JPG, PNG, WEBP)",-1))]),e("div",Y,[e("div",ee,[e("div",null,[t[12]||(t[12]=e("label",{for:"firstName",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"First Name",-1)),u(e("input",{type:"text",id:"firstName","onUpdate:modelValue":t[0]||(t[0]=a=>s.value.first_name=a),class:"input-field mt-1",placeholder:"Jane"},null,512),[[w,s.value.first_name]])]),e("div",null,[t[13]||(t[13]=e("label",{for:"familyName",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Family Name",-1)),u(e("input",{type:"text",id:"familyName","onUpdate:modelValue":t[1]||(t[1]=a=>s.value.family_name=a),class:"input-field mt-1",placeholder:"Doe"},null,512),[[w,s.value.family_name]])])]),e("div",null,[t[14]||(t[14]=e("label",{for:"email",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Email Address",-1)),u(e("input",{type:"email",id:"email","onUpdate:modelValue":t[2]||(t[2]=a=>s.value.email=a),class:"input-field mt-1",placeholder:"you@example.com"},null,512),[[w,s.value.email]])]),e("div",null,[t[15]||(t[15]=e("label",{for:"birthDate",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Birth Date",-1)),u(e("input",{type:"date",id:"birthDate","onUpdate:modelValue":t[3]||(t[3]=a=>s.value.birth_date=a),class:"input-field mt-1"},null,512),[[w,s.value.birth_date]])]),e("div",te,[e("div",ae,[e("div",se,[u(e("input",{id:"is_searchable","onUpdate:modelValue":t[4]||(t[4]=a=>s.value.is_searchable=a),type:"checkbox",class:"h-4 w-4 rounded border-gray-300 dark:border-gray-600 text-blue-600 focus:ring-blue-600"},null,512),[[D,s.value.is_searchable]])]),t[16]||(t[16]=e("div",{class:"ml-3 text-sm leading-6"},[e("label",{for:"is_searchable",class:"font-medium text-gray-900 dark:text-gray-100"},"Profile Searchability"),e("p",{class:"text-gray-500 dark:text-gray-400"},"Allow other users to find your profile in searches.")],-1))]),e("div",le,[e("div",re,[u(e("input",{id:"receive_notification_emails","onUpdate:modelValue":t[5]||(t[5]=a=>s.value.receive_notification_emails=a),type:"checkbox",class:"h-4 w-4 rounded border-gray-300 dark:border-gray-600 text-blue-600 focus:ring-blue-600"},null,512),[[D,s.value.receive_notification_emails]])]),t[17]||(t[17]=e("div",{class:"ml-3 text-sm leading-6"},[e("label",{for:"receive_notification_emails",class:"font-medium text-gray-900 dark:text-gray-100"},"Notification Emails"),e("p",{class:"text-gray-500 dark:text-gray-400"},"Receive emails for important events like password resets.")],-1))])]),e("div",ie,[e("button",{type:"submit",class:"btn btn-primary",disabled:p.value||!P.value},k(p.value?"Saving...":"Save Profile"),9,oe)])])],32)])]),e("div",ne,[t[22]||(t[22]=e("div",{class:"px-4 py-5 sm:p-6"},[e("h2",{class:"text-xl font-bold leading-6 text-gray-900 dark:text-white"},"Change Password"),e("p",{class:"mt-1 max-w-2xl text-sm text-gray-500 dark:text-gray-400"},"Ensure your account is using a long, random password to stay secure.")],-1)),e("div",de,[e("form",{onSubmit:I(G,["prevent"]),class:"p-4 sm:p-6 space-y-6"},[e("div",null,[t[19]||(t[19]=e("label",{for:"currentPassword",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Current Password",-1)),e("div",ue,[u(e("input",{type:g.value?"text":"password",id:"currentPassword","onUpdate:modelValue":t[6]||(t[6]=a=>d.value.current_password=a),required:"",class:"input-field pr-10",autocomplete:"current-password"},null,8,ce),[[N,d.value.current_password]]),e("button",{type:"button",onClick:t[7]||(t[7]=a=>g.value=!g.value),class:"absolute inset-y-0 right-0 pr-3 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-200"},[g.value?(m(),h(F,{key:0,class:"w-5 h-5"})):(m(),h(M,{key:1,class:"w-5 h-5"}))])])]),e("div",null,[t[20]||(t[20]=e("label",{for:"newPassword",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"New Password",-1)),e("div",me,[u(e("input",{type:f.value?"text":"password",id:"newPassword","onUpdate:modelValue":t[8]||(t[8]=a=>d.value.new_password=a),required:"",minlength:"8",class:"input-field pr-10",autocomplete:"new-password"},null,8,fe),[[N,d.value.new_password]]),e("button",{type:"button",onClick:t[9]||(t[9]=a=>f.value=!f.value),class:"absolute inset-y-0 right-0 pr-3 flex items-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-200"},[f.value?(m(),h(F,{key:0,class:"w-5 h-5"})):(m(),h(M,{key:1,class:"w-5 h-5"}))])])]),e("div",null,[t[21]||(t[21]=e("label",{for:"confirmPassword",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Confirm New Password",-1)),e("div",pe,[u(e("input",{type:f.value?"text":"password",id:"confirmPassword","onUpdate:modelValue":t[10]||(t[10]=a=>v.value=a),required:"",class:"input-field pr-10",autocomplete:"new-password"},null,8,ve),[[N,v.value]])])]),e("div",ye,[e("button",{type:"submit",class:"btn btn-primary",disabled:y.value},k(y.value?"Changing...":"Change Password"),9,ge)])],32)])])])):V("",!0)}};export{we as default};
frontend/dist/ui_assets/AddFriend-MjpwGod-.js+2 −2 renamed@@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["ui_assets/index-CEXks4lv.js","ui_assets/index-MA3P6vxv.css"])))=>i.map(i=>d[i]); -import{a as h,s as u,c as y,d as r,l as o,e as t,z as x,L as g,h as w,t as v,F as b,i as k,f as m,U as S,y as A,D as F}from"./index-CEXks4lv.js";const T={class:"max-w-2xl mx-auto"},V={class:"relative"},z={class:"mt-4"},B={key:0,class:"text-center py-6 text-gray-500"},C={key:1,class:"space-y-3"},D={class:"flex items-center space-x-3"},L={class:"font-medium text-gray-800 dark:text-gray-100"},N=["onClick"],M={__name:"AddFriend",setup(U){const f=h(),n=u(""),s=u([]),i=u(!1);let c=null;const d=y(()=>i.value?"Searching...":n.value&&s.value.length===0?"No users found.":"");function p(){if(clearTimeout(c),!n.value||n.value.length<2){s.value=[];return}i.value=!0,c=setTimeout(async()=>{try{const l=await(await F(async()=>{const{default:e}=await import("./index-CEXks4lv.js").then(a=>a.ey);return{default:e}},__vite__mapDeps([0,1]))).default.get("/api/users/search",{params:{q:n.value}});s.value=l.data}catch(l){console.error("User search failed:",l),s.value=[]}finally{i.value=!1}},500)}async function _(l){try{await f.sendFriendRequest(l),s.value=s.value.filter(e=>e.username!==l)}catch{}}return(l,e)=>(o(),r("div",T,[t("div",V,[x(t("input",{type:"text","onUpdate:modelValue":e[0]||(e[0]=a=>n.value=a),onInput:p,placeholder:"Search by username...",class:"input-field w-full !pl-10"},null,544),[[g,n.value]]),e[1]||(e[1]=t("div",{class:"absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none"},[t("svg",{class:"w-5 h-5 text-gray-400",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},[t("path",{"fill-rule":"evenodd",d:"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z","clip-rule":"evenodd"})])],-1))]),t("div",z,[d.value?(o(),r("div",B,v(d.value),1)):s.value.length>0?(o(),r("ul",C,[(o(!0),r(b,null,k(s.value,a=>(o(),r("li",{key:a.id,class:"bg-white dark:bg-gray-800 p-3 rounded-lg shadow-sm flex items-center justify-between"},[t("div",D,[m(S,{icon:a.icon,username:a.username,"size-class":"h-10 w-10"},null,8,["icon","username"]),t("span",L,v(a.username),1)]),t("button",{onClick:E=>_(a.username),class:"btn btn-secondary btn-sm flex items-center space-x-1"},[m(A,{class:"w-4 h-4"}),e[2]||(e[2]=t("span",null,"Add",-1))],8,N)]))),128))])):w("",!0)])]))}};export{M as default}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["ui_assets/index-BBRgbnZQ.js","ui_assets/index-BtkqZe_k.css"])))=>i.map(i=>d[i]); +import{a as h,s as u,c as y,d as r,l as o,e as t,z as x,L as g,h as w,t as v,F as b,i as k,f as m,U as S,y as A,D as F}from"./index-BBRgbnZQ.js";const T={class:"max-w-2xl mx-auto"},V={class:"relative"},z={class:"mt-4"},B={key:0,class:"text-center py-6 text-gray-500"},C={key:1,class:"space-y-3"},D={class:"flex items-center space-x-3"},L={class:"font-medium text-gray-800 dark:text-gray-100"},N=["onClick"],M={__name:"AddFriend",setup(U){const f=h(),n=u(""),s=u([]),i=u(!1);let c=null;const d=y(()=>i.value?"Searching...":n.value&&s.value.length===0?"No users found.":"");function p(){if(clearTimeout(c),!n.value||n.value.length<2){s.value=[];return}i.value=!0,c=setTimeout(async()=>{try{const l=await(await F(async()=>{const{default:e}=await import("./index-BBRgbnZQ.js").then(a=>a.ey);return{default:e}},__vite__mapDeps([0,1]))).default.get("/api/users/search",{params:{q:n.value}});s.value=l.data}catch(l){console.error("User search failed:",l),s.value=[]}finally{i.value=!1}},500)}async function _(l){try{await f.sendFriendRequest(l),s.value=s.value.filter(e=>e.username!==l)}catch{}}return(l,e)=>(o(),r("div",T,[t("div",V,[x(t("input",{type:"text","onUpdate:modelValue":e[0]||(e[0]=a=>n.value=a),onInput:p,placeholder:"Search by username...",class:"input-field w-full !pl-10"},null,544),[[g,n.value]]),e[1]||(e[1]=t("div",{class:"absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none"},[t("svg",{class:"w-5 h-5 text-gray-400",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},[t("path",{"fill-rule":"evenodd",d:"M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z","clip-rule":"evenodd"})])],-1))]),t("div",z,[d.value?(o(),r("div",B,v(d.value),1)):s.value.length>0?(o(),r("ul",C,[(o(!0),r(b,null,k(s.value,a=>(o(),r("li",{key:a.id,class:"bg-white dark:bg-gray-800 p-3 rounded-lg shadow-sm flex items-center justify-between"},[t("div",D,[m(S,{icon:a.icon,username:a.username,"size-class":"h-10 w-10"},null,8,["icon","username"]),t("span",L,v(a.username),1)]),t("button",{onClick:E=>_(a.username),class:"btn btn-secondary btn-sm flex items-center space-x-1"},[m(A,{class:"w-4 h-4"}),e[2]||(e[2]=t("span",null,"Add",-1))],8,N)]))),128))])):w("",!0)])]))}};export{M as default};
frontend/dist/ui_assets/admin-CwLQr1mG.js+2 −0 addedfrontend/dist/ui_assets/admin-Dmx5gjU7.js+0 −2 removedfrontend/dist/ui_assets/AdminPanel-08ZLRQxK.js+0 −2 removed@@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["ui_assets/Dashboard-BwT3w-7P.js","ui_assets/admin-Dmx5gjU7.js","ui_assets/index-CEXks4lv.js","ui_assets/index-MA3P6vxv.css","ui_assets/chartjs-adapter-date-fns.esm-ySzGeTBl.js","ui_assets/GenericModal-Br5hR2Sz.js","ui_assets/Dashboard-Ds1CU8n-.css","ui_assets/SystemLoad-CTDoErfD.js","ui_assets/AdminView-BDw3vQ10.js","ui_assets/PageViewLayout-BRrEfO0i.js","ui_assets/PageViewLayout-CA7y7IQI.css","ui_assets/IconGlobeAlt-BuKg8C2g.js","ui_assets/IconKey-x480EFkO.js","ui_assets/GPULoad-omj4pq4T.js","ui_assets/LogsAndAnalysis-CMhzcBQa.js","ui_assets/IconPlayCircle-ClB9mJda.js","ui_assets/Operations-F5-H9xxo.js","ui_assets/UserTable-CibQg33k.js","ui_assets/ServerSettings-CADPooAq.js","ui_assets/IconArrowUp-SNnuoHWO.js","ui_assets/JsonRenderer-DRztsAEE.js","ui_assets/JsonNode-BevqqNF0.css","ui_assets/ServerSettings-Bl9euVvK.css","ui_assets/LLMBindingsSettings-B_MxwDSe.js","ui_assets/TTIBindingsSettings-CtQ6pluw.js","ui_assets/TTSBindingsSettings-Z5GWAfm4.js","ui_assets/STTBindingsSettings-m54I_d_X.js","ui_assets/RAGBindingsSettings-C4XtO9Bt.js","ui_assets/AiBotSettings-mrEFVHn8.js","ui_assets/MultiSelectMenu-C0DBz24e.js","ui_assets/MultiSelectMenu-noQpMCEu.css","ui_assets/EmailSettings-B5iO9Khu.js","ui_assets/SSOClientSettings-DbNIPYvt.js","ui_assets/SCIMSettings-D3u534Jp.js","ui_assets/ImportTools-GvEbgRCo.js","ui_assets/AppsManagement-Khc6WVtP.js","ui_assets/AppCard-DrFLk3K7.js","ui_assets/AppCardSkeleton-BZpMiaGA.js","ui_assets/IconNoSymbol-DV6K_m0o.js","ui_assets/IconArrowPath-D8-8Af5d.js","ui_assets/AppCard-Cq6QGRMC.css","ui_assets/AppsManagement-CO_qpaUQ.css","ui_assets/McpsManagement-BWLPRd17.js","ui_assets/McpsManagement-TBlhHUh0.css","ui_assets/PromptsManagement-re3_zMdm.js","ui_assets/PromptsManagement-DDssXy44.css","ui_assets/PersonalitiesManagement-DY5CxIOD.js","ui_assets/PersonalitiesManagement-B0WlA3Wk.css","ui_assets/TaskManager-DsE0oKJs.js","ui_assets/BuildersSettings-Dl594z-r.js","ui_assets/WelcomeSettings-TcRzfaVX.js","ui_assets/WelcomeSettings-CMz_AzBL.css","ui_assets/RssManagement-CaYHdbI_.js","ui_assets/NewsFeedSettings-BHycrdc_.js","ui_assets/NewsFeedSettings-By9WBApa.css","ui_assets/NewsManagement-DkImNfGe.js","ui_assets/ModerationQueue-CNPmr7UD.js","ui_assets/ServicesManagement-BUuK-wGk.js","ui_assets/ServicesManagement-B2344W-T.css"])))=>i.map(i=>d[i]); -import{c as q,A as t,d as F,l as _,n as i,g as s,e as r,C as Q,S as W,D as o}from"./index-CEXks4lv.js";const z={__name:"AdminPanel",props:{activeTab:{type:String,required:!0,default:"dashboard"}},setup(d){const m=d,p=t(()=>o(()=>import("./Dashboard-BwT3w-7P.js"),__vite__mapDeps([0,1,2,3,4,5,6]))),c=t(()=>o(()=>import("./SystemLoad-CTDoErfD.js"),__vite__mapDeps([7,1,2,3,8,9,10,11,12]))),a=t(()=>o(()=>import("./GPULoad-omj4pq4T.js"),__vite__mapDeps([13,1,2,3,8,9,10,11,12]))),E=t(()=>o(()=>import("./LogsAndAnalysis-CMhzcBQa.js"),__vite__mapDeps([14,1,2,3,15]))),u=t(()=>o(()=>import("./Operations-F5-H9xxo.js"),__vite__mapDeps([16,2,3,1,8,9,10,11,12]))),g=t(()=>o(()=>import("./UserTable-CibQg33k.js"),__vite__mapDeps([17,2,3,1,4,5]))),l=t(()=>o(()=>import("./ServerSettings-CADPooAq.js"),__vite__mapDeps([18,2,3,1,19,20,21,22]))),v=t(()=>o(()=>import("./LLMBindingsSettings-B_MxwDSe.js"),__vite__mapDeps([23,2,3,1,5]))),T=t(()=>o(()=>import("./TTIBindingsSettings-CtQ6pluw.js"),__vite__mapDeps([24,2,3,1]))),A=t(()=>o(()=>import("./TTSBindingsSettings-Z5GWAfm4.js"),__vite__mapDeps([25,2,3,1]))),L=t(()=>o(()=>import("./STTBindingsSettings-m54I_d_X.js"),__vite__mapDeps([26,2,3,1]))),P=t(()=>o(()=>import("./RAGBindingsSettings-C4XtO9Bt.js"),__vite__mapDeps([27,2,3,1]))),D=t(()=>o(()=>import("./AiBotSettings-mrEFVHn8.js"),__vite__mapDeps([28,2,3,1,29,30]))),I=t(()=>o(()=>import("./EmailSettings-B5iO9Khu.js"),__vite__mapDeps([31,2,3,1]))),O=t(()=>o(()=>import("./SSOClientSettings-DbNIPYvt.js"),__vite__mapDeps([32,2,3,1]))),R=t(()=>o(()=>import("./SCIMSettings-D3u534Jp.js"),__vite__mapDeps([33,2,3,1]))),V=t(()=>o(()=>import("./ImportTools-GvEbgRCo.js"),__vite__mapDeps([34,2,3,1]))),S=t(()=>o(()=>import("./AppsManagement-Khc6WVtP.js"),__vite__mapDeps([35,2,3,1,19,36,37,11,15,8,9,10,12,38,39,40,41]))),b=t(()=>o(()=>import("./McpsManagement-BWLPRd17.js"),__vite__mapDeps([42,2,3,1,19,36,37,11,15,8,9,10,12,38,39,40,43]))),M=t(()=>o(()=>import("./PromptsManagement-re3_zMdm.js"),__vite__mapDeps([44,2,3,1,37,19,45]))),B=t(()=>o(()=>import("./PersonalitiesManagement-DY5CxIOD.js"),__vite__mapDeps([46,2,3,1,36,37,11,15,8,9,10,12,38,39,40,47]))),f=t(()=>o(()=>import("./TaskManager-DsE0oKJs.js"),__vite__mapDeps([48,2,3]))),y=t(()=>o(()=>import("./BuildersSettings-Dl594z-r.js"),__vite__mapDeps([49,2,3,1]))),k=t(()=>o(()=>import("./WelcomeSettings-TcRzfaVX.js"),__vite__mapDeps([50,2,3,1,51]))),C=t(()=>o(()=>import("./RssManagement-CaYHdbI_.js"),__vite__mapDeps([52,2,3,1]))),w=t(()=>o(()=>import("./NewsFeedSettings-BHycrdc_.js"),__vite__mapDeps([53,2,3,1,54]))),x=t(()=>o(()=>import("./NewsManagement-DkImNfGe.js"),__vite__mapDeps([55,2,3,1]))),h=t(()=>o(()=>import("./ModerationQueue-CNPmr7UD.js"),__vite__mapDeps([56,2,3,1]))),N=t(()=>o(()=>import("./ServicesManagement-BUuK-wGk.js"),__vite__mapDeps([57,2,3,1,58]))),G=[{id:"dashboard",component:p},{id:"system_load",component:c},{id:"gpu_load",component:a},{id:"logs_analysis",component:E},{id:"operations",component:u},{id:"server_settings",component:l},{id:"users",component:g},{id:"tasks",component:f},{id:"llm_bindings",component:v},{id:"tti_bindings",component:T},{id:"tts_bindings",component:A},{id:"stt_bindings",component:L},{id:"rag_bindings",component:P},{id:"builders",component:y},{id:"ai_bot",component:D},{id:"apps",component:S},{id:"mcps",component:b},{id:"personalities",component:B},{id:"prompts",component:M},{id:"email",component:I},{id:"sso_client_settings",component:O},{id:"scim_settings",component:R},{id:"import",component:V},{id:"welcome_settings",component:k},{id:"rss_feeds",component:C},{id:"news_feed_settings",component:w},{id:"news_management",component:x},{id:"moderation",component:h},{id:"services_mgmt",component:N}],U=q(()=>{var e;return((e=G.find(n=>n.id===m.activeTab))==null?void 0:e.component)||null});return(e,n)=>(_(),F("div",null,[(_(),i(W,null,{default:s(()=>[(_(),i(Q(U.value)))]),fallback:s(()=>n[0]||(n[0]=[r("div",{class:"text-center py-10"},[r("p",{class:"text-gray-500 dark:text-gray-400"},"Loading component...")],-1)])),_:1}))]))}};export{z as default};
frontend/dist/ui_assets/AdminPanel-Bydw5u8H.js+2 −0 added@@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["ui_assets/Dashboard-CLpS1rXi.js","ui_assets/admin-CwLQr1mG.js","ui_assets/index-BBRgbnZQ.js","ui_assets/index-BtkqZe_k.css","ui_assets/chartjs-adapter-date-fns.esm-ChtTz7YT.js","ui_assets/GenericModal-eXiOHk6I.js","ui_assets/Dashboard-Ds1CU8n-.css","ui_assets/SystemLoad-Bab_oTt9.js","ui_assets/AdminView-Bo442GSB.js","ui_assets/PageViewLayout-CieE8QU1.js","ui_assets/PageViewLayout-CA7y7IQI.css","ui_assets/IconGlobeAlt-DJc8Wsna.js","ui_assets/IconKey-C28jqjj0.js","ui_assets/GPULoad-VvV8L4Wt.js","ui_assets/LogsAndAnalysis-BIfZWm-o.js","ui_assets/IconPlayCircle-D2gooLkD.js","ui_assets/Operations-DuewB_Gn.js","ui_assets/UserTable-BO4B_pv9.js","ui_assets/ServerSettings-D-7p8IjP.js","ui_assets/IconArrowUp-Q6qK09pz.js","ui_assets/JsonRenderer-VjVGwdYN.js","ui_assets/JsonNode-BevqqNF0.css","ui_assets/ServerSettings-Bl9euVvK.css","ui_assets/LLMBindingsSettings-BhvWwcKs.js","ui_assets/TTIBindingsSettings-DTVj6wK_.js","ui_assets/TTSBindingsSettings-Bw5bjwPk.js","ui_assets/STTBindingsSettings-D3phWugB.js","ui_assets/RAGBindingsSettings-D2gAIzMz.js","ui_assets/AiBotSettings-DFspyPi8.js","ui_assets/MultiSelectMenu-CtnadQ-5.js","ui_assets/MultiSelectMenu-noQpMCEu.css","ui_assets/EmailSettings-BnEWhzQU.js","ui_assets/SSOClientSettings-Cklwpe8n.js","ui_assets/SCIMSettings-D9M8_97U.js","ui_assets/ImportTools-Bnghe8pb.js","ui_assets/AppsManagement-CznGf3_1.js","ui_assets/AppCard-_yFD3KrL.js","ui_assets/AppCardSkeleton-C03QefFR.js","ui_assets/IconNoSymbol-D0HTNvx3.js","ui_assets/IconArrowPath-DUE5IYPL.js","ui_assets/AppCard-Cq6QGRMC.css","ui_assets/AppsManagement-CO_qpaUQ.css","ui_assets/McpsManagement-C1hyRCxl.js","ui_assets/McpsManagement-TBlhHUh0.css","ui_assets/PromptsManagement-CY9ZXVgb.js","ui_assets/PromptsManagement-DDssXy44.css","ui_assets/PersonalitiesManagement-ClW_-8nv.js","ui_assets/PersonalitiesManagement-B0WlA3Wk.css","ui_assets/TaskManager-Bmb27H1b.js","ui_assets/BuildersSettings-CoP_qMxm.js","ui_assets/WelcomeSettings-Qrmfotzl.js","ui_assets/WelcomeSettings-CMz_AzBL.css","ui_assets/RssManagement-CsufZ0IX.js","ui_assets/NewsFeedSettings-BZXfdZRH.js","ui_assets/NewsFeedSettings-By9WBApa.css","ui_assets/NewsManagement-BKIHCoG8.js","ui_assets/ModerationQueue-DtUjRrI5.js","ui_assets/ServicesManagement-CqcZnhZ7.js","ui_assets/ServicesManagement-B2344W-T.css"])))=>i.map(i=>d[i]); +import{c as q,A as t,d as F,l as _,n as i,g as s,e as r,C as Q,S as W,D as o}from"./index-BBRgbnZQ.js";const z={__name:"AdminPanel",props:{activeTab:{type:String,required:!0,default:"dashboard"}},setup(d){const m=d,p=t(()=>o(()=>import("./Dashboard-CLpS1rXi.js"),__vite__mapDeps([0,1,2,3,4,5,6]))),c=t(()=>o(()=>import("./SystemLoad-Bab_oTt9.js"),__vite__mapDeps([7,1,2,3,8,9,10,11,12]))),a=t(()=>o(()=>import("./GPULoad-VvV8L4Wt.js"),__vite__mapDeps([13,1,2,3,8,9,10,11,12]))),E=t(()=>o(()=>import("./LogsAndAnalysis-BIfZWm-o.js"),__vite__mapDeps([14,1,2,3,15]))),u=t(()=>o(()=>import("./Operations-DuewB_Gn.js"),__vite__mapDeps([16,2,3,1,8,9,10,11,12]))),g=t(()=>o(()=>import("./UserTable-BO4B_pv9.js"),__vite__mapDeps([17,2,3,1,4,5]))),l=t(()=>o(()=>import("./ServerSettings-D-7p8IjP.js"),__vite__mapDeps([18,2,3,1,19,20,21,22]))),v=t(()=>o(()=>import("./LLMBindingsSettings-BhvWwcKs.js"),__vite__mapDeps([23,2,3,1,5]))),T=t(()=>o(()=>import("./TTIBindingsSettings-DTVj6wK_.js"),__vite__mapDeps([24,2,3,1]))),A=t(()=>o(()=>import("./TTSBindingsSettings-Bw5bjwPk.js"),__vite__mapDeps([25,2,3,1]))),L=t(()=>o(()=>import("./STTBindingsSettings-D3phWugB.js"),__vite__mapDeps([26,2,3,1]))),P=t(()=>o(()=>import("./RAGBindingsSettings-D2gAIzMz.js"),__vite__mapDeps([27,2,3,1]))),D=t(()=>o(()=>import("./AiBotSettings-DFspyPi8.js"),__vite__mapDeps([28,2,3,1,29,30]))),I=t(()=>o(()=>import("./EmailSettings-BnEWhzQU.js"),__vite__mapDeps([31,2,3,1]))),O=t(()=>o(()=>import("./SSOClientSettings-Cklwpe8n.js"),__vite__mapDeps([32,2,3,1]))),R=t(()=>o(()=>import("./SCIMSettings-D9M8_97U.js"),__vite__mapDeps([33,2,3,1]))),V=t(()=>o(()=>import("./ImportTools-Bnghe8pb.js"),__vite__mapDeps([34,2,3,1]))),S=t(()=>o(()=>import("./AppsManagement-CznGf3_1.js"),__vite__mapDeps([35,2,3,1,19,36,37,11,15,8,9,10,12,38,39,40,41]))),b=t(()=>o(()=>import("./McpsManagement-C1hyRCxl.js"),__vite__mapDeps([42,2,3,1,19,36,37,11,15,8,9,10,12,38,39,40,43]))),M=t(()=>o(()=>import("./PromptsManagement-CY9ZXVgb.js"),__vite__mapDeps([44,2,3,1,37,19,45]))),B=t(()=>o(()=>import("./PersonalitiesManagement-ClW_-8nv.js"),__vite__mapDeps([46,2,3,1,36,37,11,15,8,9,10,12,38,39,40,47]))),f=t(()=>o(()=>import("./TaskManager-Bmb27H1b.js"),__vite__mapDeps([48,2,3]))),y=t(()=>o(()=>import("./BuildersSettings-CoP_qMxm.js"),__vite__mapDeps([49,2,3,1]))),k=t(()=>o(()=>import("./WelcomeSettings-Qrmfotzl.js"),__vite__mapDeps([50,2,3,1,51]))),C=t(()=>o(()=>import("./RssManagement-CsufZ0IX.js"),__vite__mapDeps([52,2,3,1]))),w=t(()=>o(()=>import("./NewsFeedSettings-BZXfdZRH.js"),__vite__mapDeps([53,2,3,1,54]))),x=t(()=>o(()=>import("./NewsManagement-BKIHCoG8.js"),__vite__mapDeps([55,2,3,1]))),h=t(()=>o(()=>import("./ModerationQueue-DtUjRrI5.js"),__vite__mapDeps([56,2,3,1]))),N=t(()=>o(()=>import("./ServicesManagement-CqcZnhZ7.js"),__vite__mapDeps([57,2,3,1,58]))),G=[{id:"dashboard",component:p},{id:"system_load",component:c},{id:"gpu_load",component:a},{id:"logs_analysis",component:E},{id:"operations",component:u},{id:"server_settings",component:l},{id:"users",component:g},{id:"tasks",component:f},{id:"llm_bindings",component:v},{id:"tti_bindings",component:T},{id:"tts_bindings",component:A},{id:"stt_bindings",component:L},{id:"rag_bindings",component:P},{id:"builders",component:y},{id:"ai_bot",component:D},{id:"apps",component:S},{id:"mcps",component:b},{id:"personalities",component:B},{id:"prompts",component:M},{id:"email",component:I},{id:"sso_client_settings",component:O},{id:"scim_settings",component:R},{id:"import",component:V},{id:"welcome_settings",component:k},{id:"rss_feeds",component:C},{id:"news_feed_settings",component:w},{id:"news_management",component:x},{id:"moderation",component:h},{id:"services_mgmt",component:N}],U=q(()=>{var e;return((e=G.find(n=>n.id===m.activeTab))==null?void 0:e.component)||null});return(e,n)=>(_(),F("div",null,[(_(),i(W,null,{default:s(()=>[(_(),i(Q(U.value)))]),fallback:s(()=>n[0]||(n[0]=[r("div",{class:"text-center py-10"},[r("p",{class:"text-gray-500 dark:text-gray-400"},"Loading component...")],-1)])),_:1}))]))}};export{z as default};
frontend/dist/ui_assets/AdminUserEditModal-E2ZEU5Q_.js+1 −1 renamed@@ -1 +1 @@ -import{K as U,P as E,Q as A,c as g,s as b,w as z,o as R,n as $,l as n,g as M,e,j as u,t as x,d as i,H as D,p as d,z as p,h as P,F as N,i as V,R as j,L as h,E as L}from"./index-CEXks4lv.js";import{_ as B}from"./GenericModal-Br5hR2Sz.js";const G={class:"grid grid-cols-1 sm:grid-cols-2 gap-6"},F={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},T={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},H=["disabled"],K={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},O={class:"space-y-4 pt-4 border-t dark:border-gray-600"},Q=["disabled"],q={key:0,disabled:"",value:""},I={key:1,disabled:"",value:""},J=["value"],W={class:"space-y-4 pt-4 border-t dark:border-gray-600"},X={class:"flex flex-col sm:flex-row gap-4"},Y=["disabled"],Z={key:1,class:"p-6 text-center text-gray-500"},ee={class:"flex justify-end space-x-3"},te=["disabled"],oe={__name:"AdminUserEditModal",setup(se){const r=U(),_=E(),{availableLollmsModels:c,isLoadingLollmsModels:y}=A(_),k=g(()=>r.modalData("adminUserEdit")),o=g(()=>{var a;return(a=k.value)==null?void 0:a.user}),v=g(()=>{var a;return(a=k.value)==null?void 0:a.onUserUpdated}),s=b({is_admin:!1,is_moderator:!1,is_active:!1,lollms_model_name:"",llm_ctx_size:null,safe_store_vectorizer:""}),m=b(!1),f=b(!1);z(o,a=>{a&&(s.value={is_admin:a.is_admin,is_moderator:a.is_moderator,is_active:a.is_active,lollms_model_name:a.lollms_model_name||"",llm_ctx_size:a.llm_ctx_size,safe_store_vectorizer:a.safe_store_vectorizer||""})},{immediate:!0}),z(()=>s.value.is_admin,a=>{a&&(s.value.is_moderator=!0)});async function w(){if(!(!o.value||!o.value.id)){m.value=!0;try{const a={is_admin:s.value.is_admin,is_moderator:s.value.is_moderator,is_active:s.value.is_active,lollms_model_name:s.value.lollms_model_name||null,llm_ctx_size:s.value.llm_ctx_size?Number(s.value.llm_ctx_size):null,safe_store_vectorizer:s.value.safe_store_vectorizer||null};await L.put(`/api/admin/users/${o.value.id}`,a),v.value&&typeof v.value=="function"&&v.value(),r.addNotification("User updated successfully.","success"),r.closeModal("adminUserEdit")}catch{}finally{m.value=!1}}}function C(){r.openModal("resetPassword",{user:o.value,onPasswordReset:()=>{r.closeModal("adminUserEdit")}})}async function S(){var a;if((a=o.value)!=null&&a.id){f.value=!0;try{const t=await L.post(`/api/admin/users/${o.value.id}/generate-reset-link`);r.openModal("passwordResetLink",{username:o.value.username,link:t.data.reset_link})}catch{r.addNotification("Failed to generate reset link.","error")}finally{f.value=!1}}}return R(()=>{c.value.length===0&&_.fetchAdminAvailableLollmsModels()}),(a,t)=>(n(),$(B,{"modal-name":"adminUserEdit",title:o.value?`Edit User: ${o.value.username}`:"Edit User"},{body:M(()=>[o.value?(n(),i("form",{key:0,onSubmit:D(w,["prevent"]),class:"p-6 space-y-6"},[e("div",G,[e("div",F,[t[7]||(t[7]=e("span",{class:"flex-grow flex flex-col"},[e("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Administrator"),e("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Grants full system access.")],-1)),e("button",{onClick:t[0]||(t[0]=l=>s.value.is_admin=!s.value.is_admin),type:"button",class:d([s.value.is_admin?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[e("span",{class:d([s.value.is_admin?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),e("div",T,[t[8]||(t[8]=e("span",{class:"flex-grow flex flex-col"},[e("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Moderator"),e("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Can delete user content.")],-1)),e("button",{onClick:t[1]||(t[1]=l=>s.value.is_moderator=!s.value.is_moderator),type:"button",disabled:s.value.is_admin,class:d([s.value.is_moderator?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800",{"opacity-50 cursor-not-allowed":s.value.is_admin}])},[e("span",{class:d([s.value.is_moderator?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],10,H)]),e("div",K,[t[9]||(t[9]=e("span",{class:"flex-grow flex flex-col"},[e("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Account Active"),e("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Allows the user to log in.")],-1)),e("button",{onClick:t[2]||(t[2]=l=>s.value.is_active=!s.value.is_active),type:"button",class:d([s.value.is_active?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[e("span",{class:d([s.value.is_active?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)])]),e("div",O,[t[16]||(t[16]=e("h3",{class:"text-base font-semibold leading-6 text-gray-900 dark:text-white"},"Core Assignments",-1)),e("div",null,[t[11]||(t[11]=e("label",{for:"lollmsModelSelect",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Default LLM Model",-1)),p(e("select",{id:"lollmsModelSelect","onUpdate:modelValue":t[3]||(t[3]=l=>s.value.lollms_model_name=l),class:"input-field mt-1",disabled:u(y)},[u(y)?(n(),i("option",q,"Loading models...")):u(c).length===0?(n(),i("option",I,"No models available")):P("",!0),t[10]||(t[10]=e("option",{value:""},"(Use System Default)",-1)),(n(!0),i(N,null,V(u(c),l=>(n(),i("option",{key:l.id,value:l.id},x(l.name),9,J))),128))],8,Q),[[j,s.value.lollms_model_name]])]),e("div",null,[t[12]||(t[12]=e("label",{for:"contextSize",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Context Size Override",-1)),p(e("input",{type:"number",id:"contextSize","onUpdate:modelValue":t[4]||(t[4]=l=>s.value.llm_ctx_size=l),class:"input-field mt-1",placeholder:"e.g., 4096"},null,512),[[h,s.value.llm_ctx_size,void 0,{number:!0}]]),t[13]||(t[13]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"Leave blank to use the system or user's default setting.",-1))]),e("div",null,[t[14]||(t[14]=e("label",{for:"vectorizer",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Default Vectorizer",-1)),p(e("input",{type:"text",id:"vectorizer","onUpdate:modelValue":t[5]||(t[5]=l=>s.value.safe_store_vectorizer=l),class:"input-field mt-1",placeholder:"e.g., st:all-MiniLM-L6-v2"},null,512),[[h,s.value.safe_store_vectorizer]]),t[15]||(t[15]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"The default vectorizer for new data stores created by this user.",-1))])]),e("div",W,[t[17]||(t[17]=e("h3",{class:"text-base font-semibold leading-6 text-gray-900 dark:text-white"},"Password Management",-1)),e("div",X,[e("button",{type:"button",onClick:C,class:"btn btn-warning flex-1"}," Reset Password... "),e("button",{type:"button",onClick:S,class:"btn btn-secondary flex-1",disabled:f.value},x(f.value?"Generating...":"Generate Reset Link..."),9,Y)])])],32)):(n(),i("div",Z," Loading user data... "))]),footer:M(()=>[e("div",ee,[e("button",{type:"button",class:"btn btn-secondary",onClick:t[6]||(t[6]=l=>u(r).closeModal("adminUserEdit"))},"Cancel"),e("button",{type:"button",class:"btn btn-primary",disabled:m.value||!o.value,onClick:w},x(m.value?"Saving...":"Save Changes"),9,te)])]),_:1},8,["title"]))}};export{oe as default}; +import{K as U,P as E,R as A,c as g,s as b,w as z,o as R,n as $,l as n,g as M,e,j as u,t as x,d as i,H as D,p as d,z as p,h as P,F as N,i as V,X as j,L as h,E as L}from"./index-BBRgbnZQ.js";import{_ as B}from"./GenericModal-eXiOHk6I.js";const G={class:"grid grid-cols-1 sm:grid-cols-2 gap-6"},F={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},T={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},H=["disabled"],K={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},O={class:"space-y-4 pt-4 border-t dark:border-gray-600"},X=["disabled"],q={key:0,disabled:"",value:""},I={key:1,disabled:"",value:""},J=["value"],Q={class:"space-y-4 pt-4 border-t dark:border-gray-600"},W={class:"flex flex-col sm:flex-row gap-4"},Y=["disabled"],Z={key:1,class:"p-6 text-center text-gray-500"},ee={class:"flex justify-end space-x-3"},te=["disabled"],oe={__name:"AdminUserEditModal",setup(se){const r=U(),_=E(),{availableLollmsModels:c,isLoadingLollmsModels:y}=A(_),k=g(()=>r.modalData("adminUserEdit")),o=g(()=>{var a;return(a=k.value)==null?void 0:a.user}),v=g(()=>{var a;return(a=k.value)==null?void 0:a.onUserUpdated}),s=b({is_admin:!1,is_moderator:!1,is_active:!1,lollms_model_name:"",llm_ctx_size:null,safe_store_vectorizer:""}),m=b(!1),f=b(!1);z(o,a=>{a&&(s.value={is_admin:a.is_admin,is_moderator:a.is_moderator,is_active:a.is_active,lollms_model_name:a.lollms_model_name||"",llm_ctx_size:a.llm_ctx_size,safe_store_vectorizer:a.safe_store_vectorizer||""})},{immediate:!0}),z(()=>s.value.is_admin,a=>{a&&(s.value.is_moderator=!0)});async function w(){if(!(!o.value||!o.value.id)){m.value=!0;try{const a={is_admin:s.value.is_admin,is_moderator:s.value.is_moderator,is_active:s.value.is_active,lollms_model_name:s.value.lollms_model_name||null,llm_ctx_size:s.value.llm_ctx_size?Number(s.value.llm_ctx_size):null,safe_store_vectorizer:s.value.safe_store_vectorizer||null};await L.put(`/api/admin/users/${o.value.id}`,a),v.value&&typeof v.value=="function"&&v.value(),r.addNotification("User updated successfully.","success"),r.closeModal("adminUserEdit")}catch{}finally{m.value=!1}}}function C(){r.openModal("resetPassword",{user:o.value,onPasswordReset:()=>{r.closeModal("adminUserEdit")}})}async function S(){var a;if((a=o.value)!=null&&a.id){f.value=!0;try{const t=await L.post(`/api/admin/users/${o.value.id}/generate-reset-link`);r.openModal("passwordResetLink",{username:o.value.username,link:t.data.reset_link})}catch{r.addNotification("Failed to generate reset link.","error")}finally{f.value=!1}}}return R(()=>{c.value.length===0&&_.fetchAdminAvailableLollmsModels()}),(a,t)=>(n(),$(B,{"modal-name":"adminUserEdit",title:o.value?`Edit User: ${o.value.username}`:"Edit User"},{body:M(()=>[o.value?(n(),i("form",{key:0,onSubmit:D(w,["prevent"]),class:"p-6 space-y-6"},[e("div",G,[e("div",F,[t[7]||(t[7]=e("span",{class:"flex-grow flex flex-col"},[e("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Administrator"),e("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Grants full system access.")],-1)),e("button",{onClick:t[0]||(t[0]=l=>s.value.is_admin=!s.value.is_admin),type:"button",class:d([s.value.is_admin?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[e("span",{class:d([s.value.is_admin?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),e("div",T,[t[8]||(t[8]=e("span",{class:"flex-grow flex flex-col"},[e("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Moderator"),e("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Can delete user content.")],-1)),e("button",{onClick:t[1]||(t[1]=l=>s.value.is_moderator=!s.value.is_moderator),type:"button",disabled:s.value.is_admin,class:d([s.value.is_moderator?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800",{"opacity-50 cursor-not-allowed":s.value.is_admin}])},[e("span",{class:d([s.value.is_moderator?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],10,H)]),e("div",K,[t[9]||(t[9]=e("span",{class:"flex-grow flex flex-col"},[e("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Account Active"),e("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Allows the user to log in.")],-1)),e("button",{onClick:t[2]||(t[2]=l=>s.value.is_active=!s.value.is_active),type:"button",class:d([s.value.is_active?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[e("span",{class:d([s.value.is_active?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)])]),e("div",O,[t[16]||(t[16]=e("h3",{class:"text-base font-semibold leading-6 text-gray-900 dark:text-white"},"Core Assignments",-1)),e("div",null,[t[11]||(t[11]=e("label",{for:"lollmsModelSelect",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Default LLM Model",-1)),p(e("select",{id:"lollmsModelSelect","onUpdate:modelValue":t[3]||(t[3]=l=>s.value.lollms_model_name=l),class:"input-field mt-1",disabled:u(y)},[u(y)?(n(),i("option",q,"Loading models...")):u(c).length===0?(n(),i("option",I,"No models available")):P("",!0),t[10]||(t[10]=e("option",{value:""},"(Use System Default)",-1)),(n(!0),i(N,null,V(u(c),l=>(n(),i("option",{key:l.id,value:l.id},x(l.name),9,J))),128))],8,X),[[j,s.value.lollms_model_name]])]),e("div",null,[t[12]||(t[12]=e("label",{for:"contextSize",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Context Size Override",-1)),p(e("input",{type:"number",id:"contextSize","onUpdate:modelValue":t[4]||(t[4]=l=>s.value.llm_ctx_size=l),class:"input-field mt-1",placeholder:"e.g., 4096"},null,512),[[h,s.value.llm_ctx_size,void 0,{number:!0}]]),t[13]||(t[13]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"Leave blank to use the system or user's default setting.",-1))]),e("div",null,[t[14]||(t[14]=e("label",{for:"vectorizer",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Default Vectorizer",-1)),p(e("input",{type:"text",id:"vectorizer","onUpdate:modelValue":t[5]||(t[5]=l=>s.value.safe_store_vectorizer=l),class:"input-field mt-1",placeholder:"e.g., st:all-MiniLM-L6-v2"},null,512),[[h,s.value.safe_store_vectorizer]]),t[15]||(t[15]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"The default vectorizer for new data stores created by this user.",-1))])]),e("div",Q,[t[17]||(t[17]=e("h3",{class:"text-base font-semibold leading-6 text-gray-900 dark:text-white"},"Password Management",-1)),e("div",W,[e("button",{type:"button",onClick:C,class:"btn btn-warning flex-1"}," Reset Password... "),e("button",{type:"button",onClick:S,class:"btn btn-secondary flex-1",disabled:f.value},x(f.value?"Generating...":"Generate Reset Link..."),9,Y)])])],32)):(n(),i("div",Z," Loading user data... "))]),footer:M(()=>[e("div",ee,[e("button",{type:"button",class:"btn btn-secondary",onClick:t[6]||(t[6]=l=>u(r).closeModal("adminUserEdit"))},"Cancel"),e("button",{type:"button",class:"btn btn-primary",disabled:m.value||!o.value,onClick:w},x(m.value?"Saving...":"Save Changes"),9,te)])]),_:1},8,["title"]))}};export{oe as default};
frontend/dist/ui_assets/AdminView-Bo442GSB.js+3 −3 renamed@@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["ui_assets/AdminPanel-08ZLRQxK.js","ui_assets/index-CEXks4lv.js","ui_assets/index-MA3P6vxv.css"])))=>i.map(i=>d[i]); -import{q as r,d as s,l as n,cL as x,e as i,p as C,u as Z,c as _,cd as e,I as u,v as g,c9 as S,cU as d,dj as $,cf as v,ce as z,aq as I,cg as B,ch as A,au as P,ai as T,cc as M,ci as D,dk as j,$ as q,b as N,k as R,n as f,g as y,f as w,j as F,A as O,t as p,F as k,i as E,h as G,H as U,C as W,D as Q}from"./index-CEXks4lv.js";import{P as J}from"./PageViewLayout-BRrEfO0i.js";import{I as K}from"./IconGlobeAlt-BuKg8C2g.js";import{_ as X}from"./IconKey-x480EFkO.js";const Y={},e1={width:"50px",height:"50px",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function t1(o,t){return n(),s("svg",e1,t[0]||(t[0]=[x('<path d="M9 15C8.44771 15 8 15.4477 8 16C8 16.5523 8.44771 17 9 17C9.55229 17 10 16.5523 10 16C10 15.4477 9.55229 15 9 15Z" fill="currentColor"></path><path d="M14 16C14 15.4477 14.4477 15 15 15C15.5523 15 16 15.4477 16 16C16 16.5523 15.5523 17 15 17C14.4477 17 14 16.5523 14 16Z" fill="currentColor"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M12 1C10.8954 1 10 1.89543 10 3C10 3.74028 10.4022 4.38663 11 4.73244V7H6C4.34315 7 3 8.34315 3 10V20C3 21.6569 4.34315 23 6 23H18C19.6569 23 21 21.6569 21 20V10C21 8.34315 19.6569 7 18 7H13V4.73244C13.5978 4.38663 14 3.74028 14 3C14 1.89543 13.1046 1 12 1ZM5 10C5 9.44772 5.44772 9 6 9H7.38197L8.82918 11.8944C9.16796 12.572 9.86049 13 10.618 13H13.382C14.1395 13 14.832 12.572 15.1708 11.8944L16.618 9H18C18.5523 9 19 9.44772 19 10V20C19 20.5523 18.5523 21 18 21H6C5.44772 21 5 20.5523 5 20V10ZM13.382 11L14.382 9H9.61803L10.618 11H13.382Z" fill="currentColor"></path><path d="M1 14C0.447715 14 0 14.4477 0 15V17C0 17.5523 0.447715 18 1 18C1.55228 18 2 17.5523 2 17V15C2 14.4477 1.55228 14 1 14Z" fill="currentColor"></path><path d="M22 15C22 14.4477 22.4477 14 23 14C23.5523 14 24 14.4477 24 15V17C24 17.5523 23.5523 18 23 18C22.4477 18 22 17.5523 22 17V15Z" fill="currentColor"></path>',5)]))}const n1=r(Y,[["render",t1]]),i1={},s1={width:"50px",height:"50px",viewBox:"0 -0.5 25 25",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function o1(o,t){return n(),s("svg",s1,t[0]||(t[0]=[i("path",{d:"M12.5 11.75C12.9142 11.75 13.25 11.4142 13.25 11C13.25 10.5858 12.9142 10.25 12.5 10.25V11.75ZM5.5 10.25C5.08579 10.25 4.75 10.5858 4.75 11C4.75 11.4142 5.08579 11.75 5.5 11.75V10.25ZM12.5 10.25C12.0858 10.25 11.75 10.5858 11.75 11C11.75 11.4142 12.0858 11.75 12.5 11.75V10.25ZM19.5 11.75C19.9142 11.75 20.25 11.4142 20.25 11C20.25 10.5858 19.9142 10.25 19.5 10.25V11.75ZM11.75 11C11.75 11.4142 12.0858 11.75 12.5 11.75C12.9142 11.75 13.25 11.4142 13.25 11H11.75ZM13.25 5C13.25 4.58579 12.9142 4.25 12.5 4.25C12.0858 4.25 11.75 4.58579 11.75 5H13.25ZM6.25 11C6.25 10.5858 5.91421 10.25 5.5 10.25C5.08579 10.25 4.75 10.5858 4.75 11H6.25ZM20.25 11C20.25 10.5858 19.9142 10.25 19.5 10.25C19.0858 10.25 18.75 10.5858 18.75 11H20.25ZM4.75 11C4.75 11.4142 5.08579 11.75 5.5 11.75C5.91421 11.75 6.25 11.4142 6.25 11H4.75ZM12.5 5.75C12.9142 5.75 13.25 5.41421 13.25 5C13.25 4.58579 12.9142 4.25 12.5 4.25V5.75ZM18.75 11C18.75 11.4142 19.0858 11.75 19.5 11.75C19.9142 11.75 20.25 11.4142 20.25 11H18.75ZM12.5 4.25C12.0858 4.25 11.75 4.58579 11.75 5C11.75 5.41421 12.0858 5.75 12.5 5.75V4.25ZM12.5 10.25H5.5V11.75H12.5V10.25ZM12.5 11.75H19.5V10.25H12.5V11.75ZM13.25 11V5H11.75V11H13.25ZM4.75 11V15H6.25V11H4.75ZM4.75 15C4.75 17.6234 6.87665 19.75 9.5 19.75V18.25C7.70507 18.25 6.25 16.7949 6.25 15H4.75ZM9.5 19.75H15.5V18.25H9.5V19.75ZM15.5 19.75C18.1234 19.75 20.25 17.6234 20.25 15H18.75C18.75 16.7949 17.2949 18.25 15.5 18.25V19.75ZM20.25 15V11H18.75V15H20.25ZM6.25 11V9H4.75V11H6.25ZM6.25 9C6.25 7.20507 7.70507 5.75 9.5 5.75V4.25C6.87665 4.25 4.75 6.37665 4.75 9H6.25ZM9.5 5.75H12.5V4.25H9.5V5.75ZM20.25 11V9H18.75V11H20.25ZM20.25 9C20.25 6.37665 18.1234 4.25 15.5 4.25V5.75C17.2949 5.75 18.75 7.20507 18.75 9H20.25ZM15.5 4.25H12.5V5.75H15.5V4.25Z",fill:"currentColor"},null,-1)]))}const a1=r(i1,[["render",o1]]),r1={},c1={width:"50px",height:"50px",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function l1(o,t){return n(),s("svg",c1,t[0]||(t[0]=[i("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M3.75 5.25L3 6V18L3.75 18.75H20.25L21 18V6L20.25 5.25H3.75ZM4.5 7.6955V17.25H19.5V7.69525L11.9999 14.5136L4.5 7.6955ZM18.3099 6.75H5.68986L11.9999 12.4864L18.3099 6.75Z",fill:"currentColor"},null,-1)]))}const d1=r(r1,[["render",l1]]),p1={},C1={width:"50px",height:"50px",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function h1(o,t){return n(),s("svg",C1,t[0]||(t[0]=[i("path",{d:"M16 8L13 11L10 10L6 6L5 3L8 0L11 1L15 5L16 8Z",fill:"currentColor"},null,-1),i("path",{d:"M0 13L5.08579 7.91418L8.08579 10.9142L3 16L0 13Z",fill:"currentColor"},null,-1)]))}const m1=r(p1,[["render",h1]]),_1={},u1={fill:"currentColor",height:"800px",width:"800px",version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 512 512","xml:space":"preserve"};function g1(o,t){return n(),s("svg",u1,t[0]||(t[0]=[x(`<g><path d="M480.003,128H48c0-22.056-17.944-40-40-40c-4.418,0-8,3.582-8,8s3.582,8,8,8c13.234,0,24,10.766,24,24v288\r +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["ui_assets/AdminPanel-Bydw5u8H.js","ui_assets/index-BBRgbnZQ.js","ui_assets/index-BtkqZe_k.css"])))=>i.map(i=>d[i]); +import{q as r,d as s,l as n,cc as x,e as i,p as C,u as Z,c as _,cg as e,I as u,v as g,c9 as S,cV as d,dj as $,ci as v,ch as z,aq as I,cj as B,ck as A,au as P,ai as T,cf as M,cl as D,dk as j,W as q,b as N,k as R,n as f,g as y,f as w,j as F,A as O,t as p,F as k,i as E,h as G,H as W,C as U,D as Q}from"./index-BBRgbnZQ.js";import{P as J}from"./PageViewLayout-CieE8QU1.js";import{I as K}from"./IconGlobeAlt-DJc8Wsna.js";import{_ as X}from"./IconKey-C28jqjj0.js";const Y={},e1={width:"50px",height:"50px",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function t1(o,t){return n(),s("svg",e1,t[0]||(t[0]=[x('<path d="M9 15C8.44771 15 8 15.4477 8 16C8 16.5523 8.44771 17 9 17C9.55229 17 10 16.5523 10 16C10 15.4477 9.55229 15 9 15Z" fill="currentColor"></path><path d="M14 16C14 15.4477 14.4477 15 15 15C15.5523 15 16 15.4477 16 16C16 16.5523 15.5523 17 15 17C14.4477 17 14 16.5523 14 16Z" fill="currentColor"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M12 1C10.8954 1 10 1.89543 10 3C10 3.74028 10.4022 4.38663 11 4.73244V7H6C4.34315 7 3 8.34315 3 10V20C3 21.6569 4.34315 23 6 23H18C19.6569 23 21 21.6569 21 20V10C21 8.34315 19.6569 7 18 7H13V4.73244C13.5978 4.38663 14 3.74028 14 3C14 1.89543 13.1046 1 12 1ZM5 10C5 9.44772 5.44772 9 6 9H7.38197L8.82918 11.8944C9.16796 12.572 9.86049 13 10.618 13H13.382C14.1395 13 14.832 12.572 15.1708 11.8944L16.618 9H18C18.5523 9 19 9.44772 19 10V20C19 20.5523 18.5523 21 18 21H6C5.44772 21 5 20.5523 5 20V10ZM13.382 11L14.382 9H9.61803L10.618 11H13.382Z" fill="currentColor"></path><path d="M1 14C0.447715 14 0 14.4477 0 15V17C0 17.5523 0.447715 18 1 18C1.55228 18 2 17.5523 2 17V15C2 14.4477 1.55228 14 1 14Z" fill="currentColor"></path><path d="M22 15C22 14.4477 22.4477 14 23 14C23.5523 14 24 14.4477 24 15V17C24 17.5523 23.5523 18 23 18C22.4477 18 22 17.5523 22 17V15Z" fill="currentColor"></path>',5)]))}const n1=r(Y,[["render",t1]]),i1={},s1={width:"50px",height:"50px",viewBox:"0 -0.5 25 25",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function o1(o,t){return n(),s("svg",s1,t[0]||(t[0]=[i("path",{d:"M12.5 11.75C12.9142 11.75 13.25 11.4142 13.25 11C13.25 10.5858 12.9142 10.25 12.5 10.25V11.75ZM5.5 10.25C5.08579 10.25 4.75 10.5858 4.75 11C4.75 11.4142 5.08579 11.75 5.5 11.75V10.25ZM12.5 10.25C12.0858 10.25 11.75 10.5858 11.75 11C11.75 11.4142 12.0858 11.75 12.5 11.75V10.25ZM19.5 11.75C19.9142 11.75 20.25 11.4142 20.25 11C20.25 10.5858 19.9142 10.25 19.5 10.25V11.75ZM11.75 11C11.75 11.4142 12.0858 11.75 12.5 11.75C12.9142 11.75 13.25 11.4142 13.25 11H11.75ZM13.25 5C13.25 4.58579 12.9142 4.25 12.5 4.25C12.0858 4.25 11.75 4.58579 11.75 5H13.25ZM6.25 11C6.25 10.5858 5.91421 10.25 5.5 10.25C5.08579 10.25 4.75 10.5858 4.75 11H6.25ZM20.25 11C20.25 10.5858 19.9142 10.25 19.5 10.25C19.0858 10.25 18.75 10.5858 18.75 11H20.25ZM4.75 11C4.75 11.4142 5.08579 11.75 5.5 11.75C5.91421 11.75 6.25 11.4142 6.25 11H4.75ZM12.5 5.75C12.9142 5.75 13.25 5.41421 13.25 5C13.25 4.58579 12.9142 4.25 12.5 4.25V5.75ZM18.75 11C18.75 11.4142 19.0858 11.75 19.5 11.75C19.9142 11.75 20.25 11.4142 20.25 11H18.75ZM12.5 4.25C12.0858 4.25 11.75 4.58579 11.75 5C11.75 5.41421 12.0858 5.75 12.5 5.75V4.25ZM12.5 10.25H5.5V11.75H12.5V10.25ZM12.5 11.75H19.5V10.25H12.5V11.75ZM13.25 11V5H11.75V11H13.25ZM4.75 11V15H6.25V11H4.75ZM4.75 15C4.75 17.6234 6.87665 19.75 9.5 19.75V18.25C7.70507 18.25 6.25 16.7949 6.25 15H4.75ZM9.5 19.75H15.5V18.25H9.5V19.75ZM15.5 19.75C18.1234 19.75 20.25 17.6234 20.25 15H18.75C18.75 16.7949 17.2949 18.25 15.5 18.25V19.75ZM20.25 15V11H18.75V15H20.25ZM6.25 11V9H4.75V11H6.25ZM6.25 9C6.25 7.20507 7.70507 5.75 9.5 5.75V4.25C6.87665 4.25 4.75 6.37665 4.75 9H6.25ZM9.5 5.75H12.5V4.25H9.5V5.75ZM20.25 11V9H18.75V11H20.25ZM20.25 9C20.25 6.37665 18.1234 4.25 15.5 4.25V5.75C17.2949 5.75 18.75 7.20507 18.75 9H20.25ZM15.5 4.25H12.5V5.75H15.5V4.25Z",fill:"currentColor"},null,-1)]))}const a1=r(i1,[["render",o1]]),r1={},c1={width:"50px",height:"50px",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function l1(o,t){return n(),s("svg",c1,t[0]||(t[0]=[i("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M3.75 5.25L3 6V18L3.75 18.75H20.25L21 18V6L20.25 5.25H3.75ZM4.5 7.6955V17.25H19.5V7.69525L11.9999 14.5136L4.5 7.6955ZM18.3099 6.75H5.68986L11.9999 12.4864L18.3099 6.75Z",fill:"currentColor"},null,-1)]))}const d1=r(r1,[["render",l1]]),p1={},C1={width:"50px",height:"50px",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function h1(o,t){return n(),s("svg",C1,t[0]||(t[0]=[i("path",{d:"M16 8L13 11L10 10L6 6L5 3L8 0L11 1L15 5L16 8Z",fill:"currentColor"},null,-1),i("path",{d:"M0 13L5.08579 7.91418L8.08579 10.9142L3 16L0 13Z",fill:"currentColor"},null,-1)]))}const m1=r(p1,[["render",h1]]),_1={},u1={fill:"currentColor",height:"800px",width:"800px",version:"1.1",id:"Capa_1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 512 512","xml:space":"preserve"};function g1(o,t){return n(),s("svg",u1,t[0]||(t[0]=[x(`<g><path d="M480.003,128H48c0-22.056-17.944-40-40-40c-4.418,0-8,3.582-8,8s3.582,8,8,8c13.234,0,24,10.766,24,24v288\r c0,4.418,3.582,8,8,8s8-3.582,8-8v-8h16.01C77.238,408,88,397.238,88,384.01V384h392.003C497.646,384,512,369.646,512,352.003\r V159.997C512,142.354,497.646,128,480.003,128z M496,352.003c0,8.821-7.176,15.997-15.997,15.997H80c-4.418,0-8,3.582-8,8v8.01\r c0,4.406-3.584,7.99-7.99,7.99H48V144h432.003c8.821,0,15.997,7.176,15.997,15.997V352.003z"></path><path d="M240,192c-22.922,0-43.057,12.12-54.363,30.28c-0.784,0.849-1.379,1.856-1.737,2.954c-5.03,9.136-7.9,19.621-7.9,30.766\r @@ -22,4 +22,4 @@ import{q as r,d as s,l as n,cL as x,e as i,p as C,u as Z,c as _,cd as e,I as u,v h200c17.645,0,32-14.355,32-32V200C472,182.355,457.645,168,440,168z"></path><path d="M112,232H88c-8.822,0-16,7.178-16,16v16c0,8.822,7.178,16,16,16h24c8.822,0,16-7.178,16-16v-16\r C128,239.178,120.822,232,112,232z M88,264v-16h24l0.001,16H88z"></path><path d="M112,176H88c-8.822,0-16,7.178-16,16v16c0,8.822,7.178,16,16,16h24c8.822,0,16-7.178,16-16v-16\r C128,183.178,120.822,176,112,176z M88,208v-16h24l0.001,16H88z"></path><path d="M112,288H88c-8.822,0-16,7.178-16,16v16c0,8.822,7.178,16,16,16h24c8.822,0,16-7.178,16-16v-16\r - C128,295.178,120.822,288,112,288z M88,320v-16h24l0.001,16H88z"></path><path d="M432,200h-24c-4.418,0-8,3.582-8,8s3.582,8,8,8h24c4.418,0,8-3.582,8-8S436.418,200,432,200z"></path><path d="M432,296h-24c-4.418,0-8,3.582-8,8s3.582,8,8,8h24c4.418,0,8-3.582,8-8S436.418,296,432,296z"></path><path d="M432,224h-24c-4.418,0-8,3.582-8,8s3.582,8,8,8h24c4.418,0,8-3.582,8-8S436.418,224,432,224z"></path><path d="M432,248h-24c-4.418,0-8,3.582-8,8s3.582,8,8,8h24c4.418,0,8-3.582,8-8S436.418,248,432,248z"></path><path d="M432,272h-24c-4.418,0-8,3.582-8,8s3.582,8,8,8h24c4.418,0,8-3.582,8-8S436.418,272,432,272z"></path></g>`,1)]))}const v1=r(_1,[["render",g1]]),M1={},f1={width:"20px",height:"20px",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function y1(o,t){return n(),s("svg",f1,t[0]||(t[0]=[i("path",{d:"M20.5 11L18.7396 7.60473C18.253 6.65855 18.0097 6.18545 17.6514 5.84012C17.3346 5.5347 16.9544 5.30272 16.5379 5.16065C16.067 5 15.535 5 14.471 5H9.52901C8.46503 5 7.93304 5 7.46209 5.16065C7.04558 5.30272 6.66542 5.5347 6.34859 5.84012C5.99034 6.18545 5.74703 6.65855 5.26042 7.60473L3.5 11M20.5 11C20.6981 11.3853 20.7658 11.5446 20.8357 11.747C20.8977 11.9267 20.9426 12.1119 20.9696 12.3002C21 12.5121 21 12.7287 21 13.162V14.2C21 15.8802 21 16.7202 20.673 17.362C20.3854 17.9265 19.9265 18.3854 19.362 18.673C18.7202 19 17.8802 19 16.2 19H7.8C6.11984 19 5.27976 19 4.63803 18.673C4.07354 18.3854 3.6146 17.9265 3.32698 17.362C3 16.7202 3 15.8802 3 14.2V13.162C3 12.7287 3 12.5121 3.03041 12.3002C3.05741 12.1119 3.10225 11.9267 3.16432 11.747C3.23421 11.5446 3.30186 11.3853 3.5 11M20.5 11H3.5M15 15H17",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)]))}const w1=r(M1,[["render",y1]]),k1={__name:"IconWrenchScrewdriver",props:{class:{type:String,default:"w-6 h-6"}},setup(o){return(t,c)=>(n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",class:C(o.class),fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"},c[0]||(c[0]=[i("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09zM18.259 8.715L18 9.75l-.259-1.035a3.375 3.375 0 00-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 002.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 002.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 00-2.456 2.456zM16.898 20.572L16.5 21.75l-.398-1.178a3.375 3.375 0 00-2.3-2.3L12.75 18l1.178-.398a3.375 3.375 0 002.3-2.3L16.5 14.25l.398 1.178a3.375 3.375 0 002.3 2.3l1.178.398-1.178.398a3.375 3.375 0 00-2.3 2.3z"},null,-1)]),2))}},x1={class:"p-3 mb-2 border-b dark:border-gray-700"},H1={class:"font-semibold"},V1={key:0,class:"px-3 pt-4 pb-2 text-xs font-semibold uppercase text-gray-500 dark:text-gray-400"},L1=["onClick"],b1={class:"p-4 sm:p-6 h-full"},Z1={__name:"AdminView",setup(o){const t=N(),c=R(),H=Z(),h=_(()=>H.wsConnected),V=O(()=>Q(()=>import("./AdminPanel-08ZLRQxK.js"),__vite__mapDeps([0,1,2]))),L=[{type:"link",id:"dashboard",name:"Dashboard",icon:e(a1)},{type:"divider",label:"System Monitoring"},{type:"link",id:"system_load",name:"System Load",icon:e(w1)},{type:"link",id:"gpu_load",name:"GPU Load",icon:e(v1)},{type:"link",id:"logs_analysis",name:"Logs & Analysis",icon:e(u)},{type:"link",id:"operations",name:"Operations",icon:e(k1)},{type:"divider",label:"Management"},{type:"link",id:"users",name:"Users",icon:e(g)},{type:"link",id:"moderation",name:"Moderation Queue",icon:e(S)},{type:"link",id:"services_mgmt",name:"Services & Usage",icon:e(d)},{type:"link",id:"tasks",name:"Tasks",icon:e($)},{type:"link",id:"server_settings",name:"Server Settings",icon:e(d)},{type:"divider",label:"Content"},{type:"link",id:"news_management",name:"News Articles",icon:e(u)},{type:"link",id:"rss_feeds",name:"RSS Feeds",icon:e(K)},{type:"link",id:"news_feed_settings",name:"News Feed Settings",icon:e(v)},{type:"divider",label:"Zoos"},{type:"link",id:"personalities",name:"Personalities",icon:e(z)},{type:"link",id:"prompts",name:"Prompts",icon:e(I)},{type:"link",id:"mcps",name:"MCPs",icon:e(B)},{type:"link",id:"apps",name:"Apps",icon:e(A)},{type:"divider",label:"Bindings & Services"},{type:"link",id:"llm_bindings",name:"LLM Bindings",icon:e(P)},{type:"link",id:"tti_bindings",name:"TTI Bindings",icon:e(T)},{type:"link",id:"tts_bindings",name:"TTS Bindings",icon:e(M)},{type:"link",id:"stt_bindings",name:"STT Bindings",icon:e(M)},{type:"link",id:"rag_bindings",name:"RAG Bindings",icon:e(D)},{type:"link",id:"builders",name:"Code Builders",icon:e(m1)},{type:"link",id:"ai_bot",name:"AI Bot",icon:e(n1)},{type:"divider",label:"System & Tools"},{type:"link",id:"welcome_settings",name:"Welcome Page",icon:e(j)},{type:"link",id:"email",name:"Email Settings",icon:e(d1)},{type:"link",id:"sso_client_settings",name:"SSO Client",icon:e(X)},{type:"link",id:"scim_settings",name:"SCIM Provisioning",icon:e(g)},{type:"link",id:"import",name:"Import Tools",icon:e(q)}],l=_({get:()=>t.query.section||"dashboard",set:m=>{c.push({query:{...t.query,section:m}})}});return(m,S1)=>(n(),f(J,{title:"Admin Panel","title-icon":v},{sidebar:y(()=>[i("div",x1,[i("div",{class:C(["flex items-center gap-2 text-xs",h.value?"text-green-500":"text-red-500"])},[w(d,{class:"w-4 h-4"}),i("span",H1,"WebSocket: "+p(h.value?"Connected":"Disconnected"),1)],2)]),(n(),s(k,null,E(L,(a,b)=>(n(),s(k,{key:b},[a.type==="divider"?(n(),s("div",V1,p(a.label),1)):a.type==="link"?(n(),s("a",{key:1,href:"#",onClick:U($1=>l.value=a.id,["prevent"]),class:C(["flex items-center gap-3 px-3 py-2.5 text-sm font-medium rounded-lg transition-colors",l.value===a.id?"bg-gray-200 dark:bg-gray-700 text-gray-900 dark:text-white":"text-gray-600 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700/50"])},[(n(),f(W(a.icon),{class:"w-5 h-5"})),i("span",null,p(a.name),1)],10,L1)):G("",!0)],64))),64))]),main:y(()=>[i("div",b1,[w(F(V),{"active-tab":l.value},null,8,["active-tab"])])]),_:1}))}},P1=Object.freeze(Object.defineProperty({__proto__:null,default:Z1},Symbol.toStringTag,{value:"Module"}));export{P1 as A,w1 as I,k1 as _,v1 as a}; + C128,295.178,120.822,288,112,288z M88,320v-16h24l0.001,16H88z"></path><path d="M432,200h-24c-4.418,0-8,3.582-8,8s3.582,8,8,8h24c4.418,0,8-3.582,8-8S436.418,200,432,200z"></path><path d="M432,296h-24c-4.418,0-8,3.582-8,8s3.582,8,8,8h24c4.418,0,8-3.582,8-8S436.418,296,432,296z"></path><path d="M432,224h-24c-4.418,0-8,3.582-8,8s3.582,8,8,8h24c4.418,0,8-3.582,8-8S436.418,224,432,224z"></path><path d="M432,248h-24c-4.418,0-8,3.582-8,8s3.582,8,8,8h24c4.418,0,8-3.582,8-8S436.418,248,432,248z"></path><path d="M432,272h-24c-4.418,0-8,3.582-8,8s3.582,8,8,8h24c4.418,0,8-3.582,8-8S436.418,272,432,272z"></path></g>`,1)]))}const v1=r(_1,[["render",g1]]),M1={},f1={width:"20px",height:"20px",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function y1(o,t){return n(),s("svg",f1,t[0]||(t[0]=[i("path",{d:"M20.5 11L18.7396 7.60473C18.253 6.65855 18.0097 6.18545 17.6514 5.84012C17.3346 5.5347 16.9544 5.30272 16.5379 5.16065C16.067 5 15.535 5 14.471 5H9.52901C8.46503 5 7.93304 5 7.46209 5.16065C7.04558 5.30272 6.66542 5.5347 6.34859 5.84012C5.99034 6.18545 5.74703 6.65855 5.26042 7.60473L3.5 11M20.5 11C20.6981 11.3853 20.7658 11.5446 20.8357 11.747C20.8977 11.9267 20.9426 12.1119 20.9696 12.3002C21 12.5121 21 12.7287 21 13.162V14.2C21 15.8802 21 16.7202 20.673 17.362C20.3854 17.9265 19.9265 18.3854 19.362 18.673C18.7202 19 17.8802 19 16.2 19H7.8C6.11984 19 5.27976 19 4.63803 18.673C4.07354 18.3854 3.6146 17.9265 3.32698 17.362C3 16.7202 3 15.8802 3 14.2V13.162C3 12.7287 3 12.5121 3.03041 12.3002C3.05741 12.1119 3.10225 11.9267 3.16432 11.747C3.23421 11.5446 3.30186 11.3853 3.5 11M20.5 11H3.5M15 15H17",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)]))}const w1=r(M1,[["render",y1]]),k1={__name:"IconWrenchScrewdriver",props:{class:{type:String,default:"w-6 h-6"}},setup(o){return(t,c)=>(n(),s("svg",{xmlns:"http://www.w3.org/2000/svg",class:C(o.class),fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"},c[0]||(c[0]=[i("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09zM18.259 8.715L18 9.75l-.259-1.035a3.375 3.375 0 00-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 002.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 002.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 00-2.456 2.456zM16.898 20.572L16.5 21.75l-.398-1.178a3.375 3.375 0 00-2.3-2.3L12.75 18l1.178-.398a3.375 3.375 0 002.3-2.3L16.5 14.25l.398 1.178a3.375 3.375 0 002.3 2.3l1.178.398-1.178.398a3.375 3.375 0 00-2.3 2.3z"},null,-1)]),2))}},x1={class:"p-3 mb-2 border-b dark:border-gray-700"},H1={class:"font-semibold"},V1={key:0,class:"px-3 pt-4 pb-2 text-xs font-semibold uppercase text-gray-500 dark:text-gray-400"},L1=["onClick"],b1={class:"p-4 sm:p-6 h-full"},Z1={__name:"AdminView",setup(o){const t=N(),c=R(),H=Z(),h=_(()=>H.wsConnected),V=O(()=>Q(()=>import("./AdminPanel-Bydw5u8H.js"),__vite__mapDeps([0,1,2]))),L=[{type:"link",id:"dashboard",name:"Dashboard",icon:e(a1)},{type:"divider",label:"System Monitoring"},{type:"link",id:"system_load",name:"System Load",icon:e(w1)},{type:"link",id:"gpu_load",name:"GPU Load",icon:e(v1)},{type:"link",id:"logs_analysis",name:"Logs & Analysis",icon:e(u)},{type:"link",id:"operations",name:"Operations",icon:e(k1)},{type:"divider",label:"Management"},{type:"link",id:"users",name:"Users",icon:e(g)},{type:"link",id:"moderation",name:"Moderation Queue",icon:e(S)},{type:"link",id:"services_mgmt",name:"Services & Usage",icon:e(d)},{type:"link",id:"tasks",name:"Tasks",icon:e($)},{type:"link",id:"server_settings",name:"Server Settings",icon:e(d)},{type:"divider",label:"Content"},{type:"link",id:"news_management",name:"News Articles",icon:e(u)},{type:"link",id:"rss_feeds",name:"RSS Feeds",icon:e(K)},{type:"link",id:"news_feed_settings",name:"News Feed Settings",icon:e(v)},{type:"divider",label:"Zoos"},{type:"link",id:"personalities",name:"Personalities",icon:e(z)},{type:"link",id:"prompts",name:"Prompts",icon:e(I)},{type:"link",id:"mcps",name:"MCPs",icon:e(B)},{type:"link",id:"apps",name:"Apps",icon:e(A)},{type:"divider",label:"Bindings & Services"},{type:"link",id:"llm_bindings",name:"LLM Bindings",icon:e(P)},{type:"link",id:"tti_bindings",name:"TTI Bindings",icon:e(T)},{type:"link",id:"tts_bindings",name:"TTS Bindings",icon:e(M)},{type:"link",id:"stt_bindings",name:"STT Bindings",icon:e(M)},{type:"link",id:"rag_bindings",name:"RAG Bindings",icon:e(D)},{type:"link",id:"builders",name:"Code Builders",icon:e(m1)},{type:"link",id:"ai_bot",name:"AI Bot",icon:e(n1)},{type:"divider",label:"System & Tools"},{type:"link",id:"welcome_settings",name:"Welcome Page",icon:e(j)},{type:"link",id:"email",name:"Email Settings",icon:e(d1)},{type:"link",id:"sso_client_settings",name:"SSO Client",icon:e(X)},{type:"link",id:"scim_settings",name:"SCIM Provisioning",icon:e(g)},{type:"link",id:"import",name:"Import Tools",icon:e(q)}],l=_({get:()=>t.query.section||"dashboard",set:m=>{c.push({query:{...t.query,section:m}})}});return(m,S1)=>(n(),f(J,{title:"Admin Panel","title-icon":v},{sidebar:y(()=>[i("div",x1,[i("div",{class:C(["flex items-center gap-2 text-xs",h.value?"text-green-500":"text-red-500"])},[w(d,{class:"w-4 h-4"}),i("span",H1,"WebSocket: "+p(h.value?"Connected":"Disconnected"),1)],2)]),(n(),s(k,null,E(L,(a,b)=>(n(),s(k,{key:b},[a.type==="divider"?(n(),s("div",V1,p(a.label),1)):a.type==="link"?(n(),s("a",{key:1,href:"#",onClick:W($1=>l.value=a.id,["prevent"]),class:C(["flex items-center gap-3 px-3 py-2.5 text-sm font-medium rounded-lg transition-colors",l.value===a.id?"bg-gray-200 dark:bg-gray-700 text-gray-900 dark:text-white":"text-gray-600 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700/50"])},[(n(),f(U(a.icon),{class:"w-5 h-5"})),i("span",null,p(a.name),1)],10,L1)):G("",!0)],64))),64))]),main:y(()=>[i("div",b1,[w(F(V),{"active-tab":l.value},null,8,["active-tab"])])]),_:1}))}},P1=Object.freeze(Object.defineProperty({__proto__:null,default:Z1},Symbol.toStringTag,{value:"Module"}));export{P1 as A,w1 as I,k1 as _,v1 as a};
frontend/dist/ui_assets/AiBotSettings-DFspyPi8.js+1 −1 renamed@@ -1 +1 @@ -import{P as z,K as H,Q as j,s as f,c as A,o as J,w as U,d as n,l as s,e as t,p as i,h as r,z as d,n as W,j as N,an as q,R as M,F as B,i as P,t as c,L as b,m as V,f as Q,H as X,E as Y}from"./index-CEXks4lv.js";import{u as Z}from"./admin-Dmx5gjU7.js";import{M as ee}from"./MultiSelectMenu-C0DBz24e.js";const te={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},oe={class:"space-y-8"},ae={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},le={class:"space-y-6 pt-6 border-t dark:border-gray-600"},se={class:"flex items-center gap-2 mb-1"},ne=["disabled"],ie=["label"],re=["value"],de=["value"],ue={key:0},_e={class:"space-y-6 pt-6 border-t dark:border-gray-600"},be={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},ge={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},pe={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},me={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},ve={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},fe={class:"p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg border dark:border-gray-600"},ce={class:"flex items-center justify-between mb-4"},ye={key:0,class:"space-y-3"},xe={class:"space-y-6 pt-6 border-t dark:border-gray-600"},ke={class:"flex items-center justify-between"},we={class:"flex gap-2"},he=["disabled"],Se={key:0,class:"animate-spin"},Ce=["disabled"],Ae={key:0,class:"animate-spin"},Ne={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},Me={key:0},Be={class:"space-y-6 pt-6 border-t dark:border-gray-600"},Pe={class:"flex items-center justify-between"},Ve=["disabled"],Fe={key:0,class:"animate-spin"},Te={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},je={key:0,class:"space-y-4"},Ue={key:0},De={key:1},Ie={key:2},Le={class:"mt-8 pt-5 border-t border-gray-200 dark:border-gray-700"},Re={class:"flex justify-end"},$e=["disabled"],Je={__name:"AiBotSettings",setup(Ee){const p=Z(),h=z(),u=H(),{globalSettings:Ge,aiBotSettings:x,isLoadingAiBotSettings:Ke,adminAvailableLollmsModels:k,isLoadingLollmsModels:F}=j(p),{publicPersonalities:S,userDataStores:D}=j(h),o=f({ai_bot_enabled:!1,ai_bot_system_prompt:"",lollms_model_name:"",active_personality_id:"",ai_bot_auto_post:!1,ai_bot_post_interval:24,ai_bot_content_mode:"static_text",ai_bot_static_content:"",ai_bot_file_path:"",ai_bot_generation_prompt:"Generate an interesting and engaging social media post based on the provided context. Keep it under 500 characters.",ai_bot_rag_datastore_ids:[],ai_bot_moderation_enabled:!1,ai_bot_moderation_criteria:"",ai_bot_tool_ddg_enabled:!1,ai_bot_tool_google_enabled:!1,ai_bot_tool_google_api_key:"",ai_bot_tool_google_cse_id:"",ai_bot_tool_arxiv_enabled:!1,ai_bot_tool_scraper_enabled:!1,ai_bot_tool_rss_enabled:!1}),w=f(!1),y=f(!1),m=f(!1),v=f(!1),C=f(!1);let T="{}";const I=A(()=>(S.value||[]).map(l=>({id:l.id,name:`${l.name} (by ${l.author})`}))),L=A(()=>(D.value||[]).map(l=>({id:l.id,name:l.name}))),R=A(()=>{const l={};return k.value?(k.value.forEach(e=>{let a="Aliases",g=e.name;if(e.binding)a=e.binding;else if(e.name&&e.name.includes("/")){const _=e.name.split("/");a=_[0],g=_.slice(1).join("/")}a=a.charAt(0).toUpperCase()+a.slice(1),l[a]||(l[a]=[]),l[a].push({...e,displayName:g})}),Object.keys(l).sort().reduce((e,a)=>(e[a]=l[a].sort((g,_)=>g.displayName.localeCompare(_.displayName)),e),{})):{}});J(()=>{x.value||p.fetchAiBotSettings(),k.value.length===0&&p.fetchAdminAvailableLollmsModels(),(!S.value||S.value.length===0)&&h.fetchPersonalities(),h.fetchDataStores()}),U(x,$,{deep:!0}),U(o,l=>{C.value=JSON.stringify(l)!==T},{deep:!0});function $(){if(!x.value)return;const l=x.value,e={lollms_model_name:l.lollms_model_name||"",active_personality_id:l.active_personality_id||"",ai_bot_enabled:l.ai_bot_enabled??!1,ai_bot_system_prompt:l.ai_bot_system_prompt||"",ai_bot_auto_post:l.ai_bot_auto_post??!1,ai_bot_post_interval:l.ai_bot_post_interval||24,ai_bot_content_mode:l.ai_bot_content_mode||"static_text",ai_bot_static_content:l.ai_bot_static_content||"",ai_bot_file_path:l.ai_bot_file_path||"",ai_bot_generation_prompt:l.ai_bot_generation_prompt||"",ai_bot_rag_datastore_ids:l.ai_bot_rag_datastore_ids||[],ai_bot_moderation_enabled:l.ai_bot_moderation_enabled??!1,ai_bot_moderation_criteria:l.ai_bot_moderation_criteria||"Be polite and respectful.",ai_bot_tool_ddg_enabled:l.ai_bot_tool_ddg_enabled??!1,ai_bot_tool_google_enabled:l.ai_bot_tool_google_enabled??!1,ai_bot_tool_google_api_key:l.ai_bot_tool_google_api_key||"",ai_bot_tool_google_cse_id:l.ai_bot_tool_google_cse_id||"",ai_bot_tool_arxiv_enabled:l.ai_bot_tool_arxiv_enabled??!1,ai_bot_tool_scraper_enabled:l.ai_bot_tool_scraper_enabled??!1,ai_bot_tool_rss_enabled:l.ai_bot_tool_rss_enabled??!1};o.value=e,T=JSON.stringify(o.value),C.value=!1}async function E(){w.value=!0;try{const l={...o.value};await p.updateAiBotSettings(l),u.addNotification("Settings saved successfully","success")}catch(l){console.error(l),u.addNotification("Failed to save settings","error")}finally{w.value=!1}}async function G(){if(confirm("This will force the bot to generate and publish a post immediately using the current settings. Continue?")){y.value=!0;try{await Y.post("/api/admin/trigger-post"),u.addNotification("Post generation task started!","success")}catch(l){console.error(l),u.addNotification("Failed to trigger post.","error")}finally{y.value=!1}}}async function K(){if(confirm("This will scan all old posts and comments that haven't been validated yet. Content violating the criteria will be flagged. Continue?")){m.value=!0;try{await p.triggerBatchModeration(),u.addNotification("Batch moderation task started! Check Tasks for progress.","success")}catch(l){console.error(l),u.addNotification("Failed to trigger moderation.","error")}finally{m.value=!1}}}async function O(){if(confirm("WARNING: This will re-evaluate ALL posts and comments in the system against the current criteria, potentially flagging previously safe content or vice versa. This may take a significant amount of time and LLM resources. Continue?")){v.value=!0;try{await p.triggerFullRemoderation(),u.addNotification("Full Remoderation task started! Check Tasks for progress.","success")}catch(l){console.error(l),u.addNotification("Failed to trigger full remoderation.","error")}finally{v.value=!1}}}return(l,e)=>(s(),n("div",te,[e[52]||(e[52]=t("div",{class:"p-6 border-b border-gray-200 dark:border-gray-700"},[t("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," AI Bot Settings "),t("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Configure the automated AI assistant for @lollms replies, auto-posting, and moderation. ")],-1)),t("form",{onSubmit:X(E,["prevent"]),class:"p-6"},[t("div",oe,[t("div",ae,[e[20]||(e[20]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Enable AI Bot Responses"),t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Allow the bot to reply to @lollms mentions.")],-1)),t("button",{onClick:e[0]||(e[0]=a=>o.value.ai_bot_enabled=!o.value.ai_bot_enabled),type:"button",class:i([o.value.ai_bot_enabled?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_enabled?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),t("div",le,[t("div",null,[t("div",se,[e[21]||(e[21]=t("label",{for:"bot-model",class:"block text-sm font-medium"},"Bot Model",-1)),N(F)?(s(),W(q,{key:0,class:"w-4 h-4 text-blue-500 animate-spin"})):r("",!0)]),d(t("select",{id:"bot-model","onUpdate:modelValue":e[1]||(e[1]=a=>o.value.lollms_model_name=a),class:"input-field mt-1",disabled:N(F)&&N(k).length===0},[e[22]||(e[22]=t("option",{value:""},"-- Select a Model --",-1)),(s(!0),n(B,null,P(R.value,(a,g)=>(s(),n("optgroup",{key:g,label:g},[(s(!0),n(B,null,P(a,_=>(s(),n("option",{key:_.id,value:_.id},c(_.displayName),9,re))),128))],8,ie))),128))],8,ne),[[M,o.value.lollms_model_name]]),e[23]||(e[23]=t("p",{class:"mt-1 text-xs text-gray-500"},"The model the bot will use for all system-level generations.",-1))]),t("div",null,[e[25]||(e[25]=t("label",{for:"bot-personality",class:"block text-sm font-medium"},"Bot Personality",-1)),d(t("select",{id:"bot-personality","onUpdate:modelValue":e[2]||(e[2]=a=>o.value.active_personality_id=a),class:"input-field mt-1"},[e[24]||(e[24]=t("option",{value:""},"-- Use Default System Prompt --",-1)),(s(!0),n(B,null,P(I.value,a=>(s(),n("option",{key:a.id,value:a.id},c(a.name),9,de))),128))],512),[[M,o.value.active_personality_id]]),e[26]||(e[26]=t("p",{class:"mt-1 text-xs text-gray-500"},"Select a personality to define the bot's behavior.",-1))]),o.value.active_personality_id?r("",!0):(s(),n("div",ue,[e[27]||(e[27]=t("label",{for:"bot-prompt",class:"block text-sm font-medium"},"Default System Prompt",-1)),d(t("textarea",{id:"bot-prompt","onUpdate:modelValue":e[3]||(e[3]=a=>o.value.ai_bot_system_prompt=a),rows:"3",class:"input-field mt-1"},null,512),[[b,o.value.ai_bot_system_prompt]])]))]),t("div",_e,[e[35]||(e[35]=t("h4",{class:"text-lg font-medium text-gray-900 dark:text-white"},"Activable Tools",-1)),e[36]||(e[36]=t("p",{class:"text-sm text-gray-500 dark:text-gray-400"},"Enable tools the bot can use to research or generate content.",-1)),t("div",be,[t("div",ge,[e[28]||(e[28]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium"},"DuckDuckGo Search")],-1)),t("button",{onClick:e[4]||(e[4]=a=>o.value.ai_bot_tool_ddg_enabled=!o.value.ai_bot_tool_ddg_enabled),type:"button",class:i([o.value.ai_bot_tool_ddg_enabled?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_tool_ddg_enabled?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),t("div",pe,[e[29]||(e[29]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium"},"ArXiv Research")],-1)),t("button",{onClick:e[5]||(e[5]=a=>o.value.ai_bot_tool_arxiv_enabled=!o.value.ai_bot_tool_arxiv_enabled),type:"button",class:i([o.value.ai_bot_tool_arxiv_enabled?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_tool_arxiv_enabled?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),t("div",me,[e[30]||(e[30]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium"},"Web Scraper")],-1)),t("button",{onClick:e[6]||(e[6]=a=>o.value.ai_bot_tool_scraper_enabled=!o.value.ai_bot_tool_scraper_enabled),type:"button",class:i([o.value.ai_bot_tool_scraper_enabled?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_tool_scraper_enabled?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),t("div",ve,[e[31]||(e[31]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium"},"RSS Feeds Knowledge")],-1)),t("button",{onClick:e[7]||(e[7]=a=>o.value.ai_bot_tool_rss_enabled=!o.value.ai_bot_tool_rss_enabled),type:"button",class:i([o.value.ai_bot_tool_rss_enabled?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_tool_rss_enabled?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)])]),t("div",fe,[t("div",ce,[e[32]||(e[32]=t("span",{class:"text-sm font-medium"},"Google Custom Search",-1)),t("button",{onClick:e[8]||(e[8]=a=>o.value.ai_bot_tool_google_enabled=!o.value.ai_bot_tool_google_enabled),type:"button",class:i([o.value.ai_bot_tool_google_enabled?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_tool_google_enabled?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),o.value.ai_bot_tool_google_enabled?(s(),n("div",ye,[t("div",null,[e[33]||(e[33]=t("label",{class:"block text-xs font-medium"},"API Key",-1)),d(t("input",{type:"password","onUpdate:modelValue":e[9]||(e[9]=a=>o.value.ai_bot_tool_google_api_key=a),class:"input-field-sm w-full mt-1"},null,512),[[b,o.value.ai_bot_tool_google_api_key]])]),t("div",null,[e[34]||(e[34]=t("label",{class:"block text-xs font-medium"},"Search Engine ID (CSE ID)",-1)),d(t("input",{type:"text","onUpdate:modelValue":e[10]||(e[10]=a=>o.value.ai_bot_tool_google_cse_id=a),class:"input-field-sm w-full mt-1"},null,512),[[b,o.value.ai_bot_tool_google_cse_id]])])])):r("",!0)])]),t("div",xe,[t("div",ke,[e[37]||(e[37]=t("h4",{class:"text-lg font-medium text-gray-900 dark:text-white"},"Moderation",-1)),t("div",we,[o.value.ai_bot_moderation_enabled?(s(),n("button",{key:0,type:"button",onClick:K,disabled:m.value||v.value,class:"btn btn-secondary btn-sm flex items-center gap-2"},[m.value?(s(),n("span",Se,"⌛")):r("",!0),V(" "+c(m.value?"Starting...":"Moderate Pending"),1)],8,he)):r("",!0),o.value.ai_bot_moderation_enabled?(s(),n("button",{key:1,type:"button",onClick:O,disabled:m.value||v.value,class:"btn btn-warning btn-sm flex items-center gap-2"},[v.value?(s(),n("span",Ae,"⌛")):r("",!0),V(" "+c(v.value?"Starting...":"Remoderate All"),1)],8,Ce)):r("",!0)])]),t("div",Ne,[e[38]||(e[38]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Enable Moderation"),t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Bot will scan new posts/comments and remove violations.")],-1)),t("button",{onClick:e[11]||(e[11]=a=>o.value.ai_bot_moderation_enabled=!o.value.ai_bot_moderation_enabled),type:"button",class:i([o.value.ai_bot_moderation_enabled?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_moderation_enabled?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),o.value.ai_bot_moderation_enabled?(s(),n("div",Me,[e[39]||(e[39]=t("label",{class:"block text-sm font-medium"},"Moderation Criteria",-1)),d(t("textarea",{"onUpdate:modelValue":e[12]||(e[12]=a=>o.value.ai_bot_moderation_criteria=a),rows:"3",class:"input-field mt-1",placeholder:"e.g. No hate speech, be polite..."},null,512),[[b,o.value.ai_bot_moderation_criteria]]),e[40]||(e[40]=t("p",{class:"mt-1 text-xs text-gray-500"},"The rules the AI will use to judge content.",-1))])):r("",!0)]),t("div",Be,[t("div",Pe,[e[41]||(e[41]=t("h4",{class:"text-lg font-medium text-gray-900 dark:text-white"},"Auto-Posting Feed",-1)),o.value.ai_bot_auto_post?(s(),n("button",{key:0,type:"button",onClick:G,disabled:y.value,class:"btn btn-secondary btn-sm flex items-center gap-2"},[y.value?(s(),n("span",Fe,"⌛")):r("",!0),V(" "+c(y.value?"Generating...":"Trigger Post Now"),1)],8,Ve)):r("",!0)]),t("div",Te,[e[42]||(e[42]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Enable Auto-Posting"),t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"The bot will post to the main feed periodically based on provided material.")],-1)),t("button",{onClick:e[13]||(e[13]=a=>o.value.ai_bot_auto_post=!o.value.ai_bot_auto_post),type:"button",class:i([o.value.ai_bot_auto_post?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_auto_post?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),o.value.ai_bot_auto_post?(s(),n("div",je,[t("div",null,[e[43]||(e[43]=t("label",{class:"block text-sm font-medium"},"Posting Interval (Hours)",-1)),d(t("input",{type:"number","onUpdate:modelValue":e[14]||(e[14]=a=>o.value.ai_bot_post_interval=a),min:"1",step:"0.5",class:"input-field mt-1"},null,512),[[b,o.value.ai_bot_post_interval]])]),t("div",null,[e[45]||(e[45]=t("label",{class:"block text-sm font-medium"},"Content Source",-1)),d(t("select",{"onUpdate:modelValue":e[15]||(e[15]=a=>o.value.ai_bot_content_mode=a),class:"input-field mt-1"},e[44]||(e[44]=[t("option",{value:"static_text"},"Manual Text (Knowledge Base)",-1),t("option",{value:"rag"},"RAG Datastores",-1),t("option",{value:"file"},"File Path (Server Side)",-1)]),512),[[M,o.value.ai_bot_content_mode]])]),o.value.ai_bot_content_mode==="static_text"?(s(),n("div",Ue,[e[46]||(e[46]=t("label",{class:"block text-sm font-medium"},"Knowledge Base Material",-1)),d(t("textarea",{"onUpdate:modelValue":e[16]||(e[16]=a=>o.value.ai_bot_static_content=a),rows:"6",class:"input-field mt-1",placeholder:"Paste interesting facts, news, or context here..."},null,512),[[b,o.value.ai_bot_static_content]])])):r("",!0),o.value.ai_bot_content_mode==="rag"?(s(),n("div",De,[e[47]||(e[47]=t("label",{class:"block text-sm font-medium mb-1"},"Select Datastores",-1)),Q(ee,{options:(L.value||[]).map(a=>({label:a.name,value:a.id})),modelValue:o.value.ai_bot_rag_datastore_ids,"onUpdate:modelValue":e[17]||(e[17]=a=>o.value.ai_bot_rag_datastore_ids=a),placeholder:"Choose datastores..."},null,8,["options","modelValue"]),e[48]||(e[48]=t("p",{class:"mt-1 text-xs text-gray-500"},"The bot will query these stores for content relevant to the generation prompt.",-1))])):r("",!0),o.value.ai_bot_content_mode==="file"?(s(),n("div",Ie,[e[49]||(e[49]=t("label",{class:"block text-sm font-medium"},"Absolute File Path",-1)),d(t("input",{type:"text","onUpdate:modelValue":e[18]||(e[18]=a=>o.value.ai_bot_file_path=a),class:"input-field mt-1",placeholder:"/path/to/interesting_content.txt"},null,512),[[b,o.value.ai_bot_file_path]])])):r("",!0),t("div",null,[e[50]||(e[50]=t("label",{class:"block text-sm font-medium"},"Generation Prompt",-1)),d(t("textarea",{"onUpdate:modelValue":e[19]||(e[19]=a=>o.value.ai_bot_generation_prompt=a),rows:"3",class:"input-field mt-1"},null,512),[[b,o.value.ai_bot_generation_prompt]]),e[51]||(e[51]=t("p",{class:"mt-1 text-xs text-gray-500"},"Instructions for the AI on how to use the material to create a post.",-1))])])):r("",!0)])]),t("div",Le,[t("div",Re,[t("button",{type:"submit",class:"btn btn-primary",disabled:w.value||!C.value},c(w.value?"Saving...":"Save Settings"),9,$e)])])],32)]))}};export{Je as default}; +import{P as z,K as H,R as j,s as f,c as A,o as J,w as U,d as n,l as s,e as t,p as i,h as r,z as d,n as W,j as N,an as X,X as M,F as B,i as P,t as c,L as b,m as V,f as q,H as Q,E as Y}from"./index-BBRgbnZQ.js";import{u as Z}from"./admin-CwLQr1mG.js";import{M as ee}from"./MultiSelectMenu-CtnadQ-5.js";const te={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},oe={class:"space-y-8"},ae={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},le={class:"space-y-6 pt-6 border-t dark:border-gray-600"},se={class:"flex items-center gap-2 mb-1"},ne=["disabled"],ie=["label"],re=["value"],de=["value"],ue={key:0},_e={class:"space-y-6 pt-6 border-t dark:border-gray-600"},be={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},ge={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},pe={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},me={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},ve={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},fe={class:"p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg border dark:border-gray-600"},ce={class:"flex items-center justify-between mb-4"},ye={key:0,class:"space-y-3"},xe={class:"space-y-6 pt-6 border-t dark:border-gray-600"},ke={class:"flex items-center justify-between"},we={class:"flex gap-2"},he=["disabled"],Se={key:0,class:"animate-spin"},Ce=["disabled"],Ae={key:0,class:"animate-spin"},Ne={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},Me={key:0},Be={class:"space-y-6 pt-6 border-t dark:border-gray-600"},Pe={class:"flex items-center justify-between"},Ve=["disabled"],Fe={key:0,class:"animate-spin"},Te={class:"relative flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},je={key:0,class:"space-y-4"},Ue={key:0},De={key:1},Ie={key:2},Le={class:"mt-8 pt-5 border-t border-gray-200 dark:border-gray-700"},Re={class:"flex justify-end"},$e=["disabled"],Je={__name:"AiBotSettings",setup(Ee){const p=Z(),h=z(),u=H(),{globalSettings:Ge,aiBotSettings:x,isLoadingAiBotSettings:Ke,adminAvailableLollmsModels:k,isLoadingLollmsModels:F}=j(p),{publicPersonalities:S,userDataStores:D}=j(h),o=f({ai_bot_enabled:!1,ai_bot_system_prompt:"",lollms_model_name:"",active_personality_id:"",ai_bot_auto_post:!1,ai_bot_post_interval:24,ai_bot_content_mode:"static_text",ai_bot_static_content:"",ai_bot_file_path:"",ai_bot_generation_prompt:"Generate an interesting and engaging social media post based on the provided context. Keep it under 500 characters.",ai_bot_rag_datastore_ids:[],ai_bot_moderation_enabled:!1,ai_bot_moderation_criteria:"",ai_bot_tool_ddg_enabled:!1,ai_bot_tool_google_enabled:!1,ai_bot_tool_google_api_key:"",ai_bot_tool_google_cse_id:"",ai_bot_tool_arxiv_enabled:!1,ai_bot_tool_scraper_enabled:!1,ai_bot_tool_rss_enabled:!1}),w=f(!1),y=f(!1),m=f(!1),v=f(!1),C=f(!1);let T="{}";const I=A(()=>(S.value||[]).map(l=>({id:l.id,name:`${l.name} (by ${l.author})`}))),L=A(()=>(D.value||[]).map(l=>({id:l.id,name:l.name}))),R=A(()=>{const l={};return k.value?(k.value.forEach(e=>{let a="Aliases",g=e.name;if(e.binding)a=e.binding;else if(e.name&&e.name.includes("/")){const _=e.name.split("/");a=_[0],g=_.slice(1).join("/")}a=a.charAt(0).toUpperCase()+a.slice(1),l[a]||(l[a]=[]),l[a].push({...e,displayName:g})}),Object.keys(l).sort().reduce((e,a)=>(e[a]=l[a].sort((g,_)=>g.displayName.localeCompare(_.displayName)),e),{})):{}});J(()=>{x.value||p.fetchAiBotSettings(),k.value.length===0&&p.fetchAdminAvailableLollmsModels(),(!S.value||S.value.length===0)&&h.fetchPersonalities(),h.fetchDataStores()}),U(x,$,{deep:!0}),U(o,l=>{C.value=JSON.stringify(l)!==T},{deep:!0});function $(){if(!x.value)return;const l=x.value,e={lollms_model_name:l.lollms_model_name||"",active_personality_id:l.active_personality_id||"",ai_bot_enabled:l.ai_bot_enabled??!1,ai_bot_system_prompt:l.ai_bot_system_prompt||"",ai_bot_auto_post:l.ai_bot_auto_post??!1,ai_bot_post_interval:l.ai_bot_post_interval||24,ai_bot_content_mode:l.ai_bot_content_mode||"static_text",ai_bot_static_content:l.ai_bot_static_content||"",ai_bot_file_path:l.ai_bot_file_path||"",ai_bot_generation_prompt:l.ai_bot_generation_prompt||"",ai_bot_rag_datastore_ids:l.ai_bot_rag_datastore_ids||[],ai_bot_moderation_enabled:l.ai_bot_moderation_enabled??!1,ai_bot_moderation_criteria:l.ai_bot_moderation_criteria||"Be polite and respectful.",ai_bot_tool_ddg_enabled:l.ai_bot_tool_ddg_enabled??!1,ai_bot_tool_google_enabled:l.ai_bot_tool_google_enabled??!1,ai_bot_tool_google_api_key:l.ai_bot_tool_google_api_key||"",ai_bot_tool_google_cse_id:l.ai_bot_tool_google_cse_id||"",ai_bot_tool_arxiv_enabled:l.ai_bot_tool_arxiv_enabled??!1,ai_bot_tool_scraper_enabled:l.ai_bot_tool_scraper_enabled??!1,ai_bot_tool_rss_enabled:l.ai_bot_tool_rss_enabled??!1};o.value=e,T=JSON.stringify(o.value),C.value=!1}async function E(){w.value=!0;try{const l={...o.value};await p.updateAiBotSettings(l),u.addNotification("Settings saved successfully","success")}catch(l){console.error(l),u.addNotification("Failed to save settings","error")}finally{w.value=!1}}async function G(){if(confirm("This will force the bot to generate and publish a post immediately using the current settings. Continue?")){y.value=!0;try{await Y.post("/api/admin/trigger-post"),u.addNotification("Post generation task started!","success")}catch(l){console.error(l),u.addNotification("Failed to trigger post.","error")}finally{y.value=!1}}}async function K(){if(confirm("This will scan all old posts and comments that haven't been validated yet. Content violating the criteria will be flagged. Continue?")){m.value=!0;try{await p.triggerBatchModeration(),u.addNotification("Batch moderation task started! Check Tasks for progress.","success")}catch(l){console.error(l),u.addNotification("Failed to trigger moderation.","error")}finally{m.value=!1}}}async function O(){if(confirm("WARNING: This will re-evaluate ALL posts and comments in the system against the current criteria, potentially flagging previously safe content or vice versa. This may take a significant amount of time and LLM resources. Continue?")){v.value=!0;try{await p.triggerFullRemoderation(),u.addNotification("Full Remoderation task started! Check Tasks for progress.","success")}catch(l){console.error(l),u.addNotification("Failed to trigger full remoderation.","error")}finally{v.value=!1}}}return(l,e)=>(s(),n("div",te,[e[52]||(e[52]=t("div",{class:"p-6 border-b border-gray-200 dark:border-gray-700"},[t("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," AI Bot Settings "),t("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Configure the automated AI assistant for @lollms replies, auto-posting, and moderation. ")],-1)),t("form",{onSubmit:Q(E,["prevent"]),class:"p-6"},[t("div",oe,[t("div",ae,[e[20]||(e[20]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Enable AI Bot Responses"),t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Allow the bot to reply to @lollms mentions.")],-1)),t("button",{onClick:e[0]||(e[0]=a=>o.value.ai_bot_enabled=!o.value.ai_bot_enabled),type:"button",class:i([o.value.ai_bot_enabled?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_enabled?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),t("div",le,[t("div",null,[t("div",se,[e[21]||(e[21]=t("label",{for:"bot-model",class:"block text-sm font-medium"},"Bot Model",-1)),N(F)?(s(),W(X,{key:0,class:"w-4 h-4 text-blue-500 animate-spin"})):r("",!0)]),d(t("select",{id:"bot-model","onUpdate:modelValue":e[1]||(e[1]=a=>o.value.lollms_model_name=a),class:"input-field mt-1",disabled:N(F)&&N(k).length===0},[e[22]||(e[22]=t("option",{value:""},"-- Select a Model --",-1)),(s(!0),n(B,null,P(R.value,(a,g)=>(s(),n("optgroup",{key:g,label:g},[(s(!0),n(B,null,P(a,_=>(s(),n("option",{key:_.id,value:_.id},c(_.displayName),9,re))),128))],8,ie))),128))],8,ne),[[M,o.value.lollms_model_name]]),e[23]||(e[23]=t("p",{class:"mt-1 text-xs text-gray-500"},"The model the bot will use for all system-level generations.",-1))]),t("div",null,[e[25]||(e[25]=t("label",{for:"bot-personality",class:"block text-sm font-medium"},"Bot Personality",-1)),d(t("select",{id:"bot-personality","onUpdate:modelValue":e[2]||(e[2]=a=>o.value.active_personality_id=a),class:"input-field mt-1"},[e[24]||(e[24]=t("option",{value:""},"-- Use Default System Prompt --",-1)),(s(!0),n(B,null,P(I.value,a=>(s(),n("option",{key:a.id,value:a.id},c(a.name),9,de))),128))],512),[[M,o.value.active_personality_id]]),e[26]||(e[26]=t("p",{class:"mt-1 text-xs text-gray-500"},"Select a personality to define the bot's behavior.",-1))]),o.value.active_personality_id?r("",!0):(s(),n("div",ue,[e[27]||(e[27]=t("label",{for:"bot-prompt",class:"block text-sm font-medium"},"Default System Prompt",-1)),d(t("textarea",{id:"bot-prompt","onUpdate:modelValue":e[3]||(e[3]=a=>o.value.ai_bot_system_prompt=a),rows:"3",class:"input-field mt-1"},null,512),[[b,o.value.ai_bot_system_prompt]])]))]),t("div",_e,[e[35]||(e[35]=t("h4",{class:"text-lg font-medium text-gray-900 dark:text-white"},"Activable Tools",-1)),e[36]||(e[36]=t("p",{class:"text-sm text-gray-500 dark:text-gray-400"},"Enable tools the bot can use to research or generate content.",-1)),t("div",be,[t("div",ge,[e[28]||(e[28]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium"},"DuckDuckGo Search")],-1)),t("button",{onClick:e[4]||(e[4]=a=>o.value.ai_bot_tool_ddg_enabled=!o.value.ai_bot_tool_ddg_enabled),type:"button",class:i([o.value.ai_bot_tool_ddg_enabled?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_tool_ddg_enabled?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),t("div",pe,[e[29]||(e[29]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium"},"ArXiv Research")],-1)),t("button",{onClick:e[5]||(e[5]=a=>o.value.ai_bot_tool_arxiv_enabled=!o.value.ai_bot_tool_arxiv_enabled),type:"button",class:i([o.value.ai_bot_tool_arxiv_enabled?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_tool_arxiv_enabled?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),t("div",me,[e[30]||(e[30]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium"},"Web Scraper")],-1)),t("button",{onClick:e[6]||(e[6]=a=>o.value.ai_bot_tool_scraper_enabled=!o.value.ai_bot_tool_scraper_enabled),type:"button",class:i([o.value.ai_bot_tool_scraper_enabled?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_tool_scraper_enabled?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),t("div",ve,[e[31]||(e[31]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium"},"RSS Feeds Knowledge")],-1)),t("button",{onClick:e[7]||(e[7]=a=>o.value.ai_bot_tool_rss_enabled=!o.value.ai_bot_tool_rss_enabled),type:"button",class:i([o.value.ai_bot_tool_rss_enabled?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_tool_rss_enabled?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)])]),t("div",fe,[t("div",ce,[e[32]||(e[32]=t("span",{class:"text-sm font-medium"},"Google Custom Search",-1)),t("button",{onClick:e[8]||(e[8]=a=>o.value.ai_bot_tool_google_enabled=!o.value.ai_bot_tool_google_enabled),type:"button",class:i([o.value.ai_bot_tool_google_enabled?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_tool_google_enabled?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),o.value.ai_bot_tool_google_enabled?(s(),n("div",ye,[t("div",null,[e[33]||(e[33]=t("label",{class:"block text-xs font-medium"},"API Key",-1)),d(t("input",{type:"password","onUpdate:modelValue":e[9]||(e[9]=a=>o.value.ai_bot_tool_google_api_key=a),class:"input-field-sm w-full mt-1"},null,512),[[b,o.value.ai_bot_tool_google_api_key]])]),t("div",null,[e[34]||(e[34]=t("label",{class:"block text-xs font-medium"},"Search Engine ID (CSE ID)",-1)),d(t("input",{type:"text","onUpdate:modelValue":e[10]||(e[10]=a=>o.value.ai_bot_tool_google_cse_id=a),class:"input-field-sm w-full mt-1"},null,512),[[b,o.value.ai_bot_tool_google_cse_id]])])])):r("",!0)])]),t("div",xe,[t("div",ke,[e[37]||(e[37]=t("h4",{class:"text-lg font-medium text-gray-900 dark:text-white"},"Moderation",-1)),t("div",we,[o.value.ai_bot_moderation_enabled?(s(),n("button",{key:0,type:"button",onClick:K,disabled:m.value||v.value,class:"btn btn-secondary btn-sm flex items-center gap-2"},[m.value?(s(),n("span",Se,"⌛")):r("",!0),V(" "+c(m.value?"Starting...":"Moderate Pending"),1)],8,he)):r("",!0),o.value.ai_bot_moderation_enabled?(s(),n("button",{key:1,type:"button",onClick:O,disabled:m.value||v.value,class:"btn btn-warning btn-sm flex items-center gap-2"},[v.value?(s(),n("span",Ae,"⌛")):r("",!0),V(" "+c(v.value?"Starting...":"Remoderate All"),1)],8,Ce)):r("",!0)])]),t("div",Ne,[e[38]||(e[38]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Enable Moderation"),t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Bot will scan new posts/comments and remove violations.")],-1)),t("button",{onClick:e[11]||(e[11]=a=>o.value.ai_bot_moderation_enabled=!o.value.ai_bot_moderation_enabled),type:"button",class:i([o.value.ai_bot_moderation_enabled?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_moderation_enabled?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),o.value.ai_bot_moderation_enabled?(s(),n("div",Me,[e[39]||(e[39]=t("label",{class:"block text-sm font-medium"},"Moderation Criteria",-1)),d(t("textarea",{"onUpdate:modelValue":e[12]||(e[12]=a=>o.value.ai_bot_moderation_criteria=a),rows:"3",class:"input-field mt-1",placeholder:"e.g. No hate speech, be polite..."},null,512),[[b,o.value.ai_bot_moderation_criteria]]),e[40]||(e[40]=t("p",{class:"mt-1 text-xs text-gray-500"},"The rules the AI will use to judge content.",-1))])):r("",!0)]),t("div",Be,[t("div",Pe,[e[41]||(e[41]=t("h4",{class:"text-lg font-medium text-gray-900 dark:text-white"},"Auto-Posting Feed",-1)),o.value.ai_bot_auto_post?(s(),n("button",{key:0,type:"button",onClick:G,disabled:y.value,class:"btn btn-secondary btn-sm flex items-center gap-2"},[y.value?(s(),n("span",Fe,"⌛")):r("",!0),V(" "+c(y.value?"Generating...":"Trigger Post Now"),1)],8,Ve)):r("",!0)]),t("div",Te,[e[42]||(e[42]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Enable Auto-Posting"),t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"The bot will post to the main feed periodically based on provided material.")],-1)),t("button",{onClick:e[13]||(e[13]=a=>o.value.ai_bot_auto_post=!o.value.ai_bot_auto_post),type:"button",class:i([o.value.ai_bot_auto_post?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:i([o.value.ai_bot_auto_post?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),o.value.ai_bot_auto_post?(s(),n("div",je,[t("div",null,[e[43]||(e[43]=t("label",{class:"block text-sm font-medium"},"Posting Interval (Hours)",-1)),d(t("input",{type:"number","onUpdate:modelValue":e[14]||(e[14]=a=>o.value.ai_bot_post_interval=a),min:"1",step:"0.5",class:"input-field mt-1"},null,512),[[b,o.value.ai_bot_post_interval]])]),t("div",null,[e[45]||(e[45]=t("label",{class:"block text-sm font-medium"},"Content Source",-1)),d(t("select",{"onUpdate:modelValue":e[15]||(e[15]=a=>o.value.ai_bot_content_mode=a),class:"input-field mt-1"},e[44]||(e[44]=[t("option",{value:"static_text"},"Manual Text (Knowledge Base)",-1),t("option",{value:"rag"},"RAG Datastores",-1),t("option",{value:"file"},"File Path (Server Side)",-1)]),512),[[M,o.value.ai_bot_content_mode]])]),o.value.ai_bot_content_mode==="static_text"?(s(),n("div",Ue,[e[46]||(e[46]=t("label",{class:"block text-sm font-medium"},"Knowledge Base Material",-1)),d(t("textarea",{"onUpdate:modelValue":e[16]||(e[16]=a=>o.value.ai_bot_static_content=a),rows:"6",class:"input-field mt-1",placeholder:"Paste interesting facts, news, or context here..."},null,512),[[b,o.value.ai_bot_static_content]])])):r("",!0),o.value.ai_bot_content_mode==="rag"?(s(),n("div",De,[e[47]||(e[47]=t("label",{class:"block text-sm font-medium mb-1"},"Select Datastores",-1)),q(ee,{options:(L.value||[]).map(a=>({label:a.name,value:a.id})),modelValue:o.value.ai_bot_rag_datastore_ids,"onUpdate:modelValue":e[17]||(e[17]=a=>o.value.ai_bot_rag_datastore_ids=a),placeholder:"Choose datastores..."},null,8,["options","modelValue"]),e[48]||(e[48]=t("p",{class:"mt-1 text-xs text-gray-500"},"The bot will query these stores for content relevant to the generation prompt.",-1))])):r("",!0),o.value.ai_bot_content_mode==="file"?(s(),n("div",Ie,[e[49]||(e[49]=t("label",{class:"block text-sm font-medium"},"Absolute File Path",-1)),d(t("input",{type:"text","onUpdate:modelValue":e[18]||(e[18]=a=>o.value.ai_bot_file_path=a),class:"input-field mt-1",placeholder:"/path/to/interesting_content.txt"},null,512),[[b,o.value.ai_bot_file_path]])])):r("",!0),t("div",null,[e[50]||(e[50]=t("label",{class:"block text-sm font-medium"},"Generation Prompt",-1)),d(t("textarea",{"onUpdate:modelValue":e[19]||(e[19]=a=>o.value.ai_bot_generation_prompt=a),rows:"3",class:"input-field mt-1"},null,512),[[b,o.value.ai_bot_generation_prompt]]),e[51]||(e[51]=t("p",{class:"mt-1 text-xs text-gray-500"},"Instructions for the AI on how to use the material to create a post.",-1))])])):r("",!0)])]),t("div",Le,[t("div",Re,[t("button",{type:"submit",class:"btn btn-primary",disabled:w.value||!C.value},c(w.value?"Saving...":"Save Settings"),9,$e)])])],32)]))}};export{Je as default};
frontend/dist/ui_assets/AllSourcesSearchModal-C4mK1rVq.js+1 −1 renamed@@ -1 +1 @@ -import{K as L,c as p,s as x,w as T,O as B,n as V,l as m,g as $,e as l,j as A,z as N,d as f,h as D,L as q,t as b,f as I,a4 as C,F,i as H}from"./index-CEXks4lv.js";import{_ as U}from"./GenericModal-Br5hR2Sz.js";/* empty css */const j={class:"p-4 space-y-4"},z={class:"relative"},K={key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3 text-sm"},O=["disabled"],W=["disabled"],G={class:"max-h-[60vh] overflow-y-auto space-y-4 pr-2 all-sources-search-container"},J={class:"font-semibold text-lg mb-2"},P=["id","innerHTML"],ee={__name:"AllSourcesSearchModal",setup(Q){const k=L(),M=p(()=>k.modalData("allSourcesSearch")),n=p(()=>{var t;return((t=M.value)==null?void 0:t.sources)||[]}),r=x(""),g=x([]),o=x(-1),s=p(()=>g.value.length);T(r,t=>{if(!t){g.value=[],o.value=-1;return}const e=new RegExp(t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi"),a=[];let c=0;n.value.forEach((u,i)=>{if(u.content){let v;for(;(v=e.exec(u.content))!==null;)a.push({sourceIndex:i,sourceTitle:u.title,matchIndex:c++,matchIndexInContent:v.index})}}),g.value=a,a.length>0?(o.value=0,B(()=>y(0))):o.value=-1});function E(t){if(!t)return"";if(!r.value)return t;const e=new RegExp(`(${r.value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")})`,"gi");return t.replace(e,'<mark class="bg-yellow-300 dark:bg-yellow-600 rounded">$1</mark>')}function y(t){const e=g.value[t];if(!e)return;const a=document.getElementById(`all-sources-content-${e.sourceIndex}`);if(a){const c=a.querySelectorAll("mark");let u=0;for(let d=0;d<e.sourceIndex;d++)if(n.value[d].content){const h=new RegExp(r.value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi");u+=(n.value[d].content.match(h)||[]).length}(n.value[e.sourceIndex].content.match(new RegExp(r.value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi"))||[]).length;let i=-1;const v=new RegExp(r.value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi");let _=0,S;for(;(S=v.exec(n.value[e.sourceIndex].content))!==null;){if(S.index===e.matchIndexInContent){i=_;break}_++}if(i>-1){document.querySelectorAll(".all-sources-search-container mark").forEach(R=>R.classList.remove("current-search-highlight"));const h=c[i];h&&(h.classList.add("current-search-highlight"),h.scrollIntoView({behavior:"smooth",block:"center"}))}}}function w(t){if(s.value===0)return;let e=o.value+t;e<0&&(e=s.value-1),e>=s.value&&(e=0),o.value=e,y(e)}return(t,e)=>(m(),V(U,{modalName:"allSourcesSearch",title:"Search All Sources",maxWidthClass:"max-w-5xl"},{body:$(()=>[l("div",j,[l("div",z,[N(l("input",{type:"text","onUpdate:modelValue":e[0]||(e[0]=a=>r.value=a),placeholder:"Search in all source contents...",class:"input-field w-full pr-32",autofocus:""},null,512),[[q,r.value]]),r.value?(m(),f("div",K,[l("span",null,b(s.value>0?o.value+1:0)+" / "+b(s.value),1),l("button",{onClick:e[1]||(e[1]=a=>w(-1)),class:"ml-2 p-1 rounded hover:bg-gray-200 dark:hover:bg-gray-600",disabled:s.value===0},[I(C,{class:"w-4 h-4 transform rotate-180"})],8,O),l("button",{onClick:e[2]||(e[2]=a=>w(1)),class:"p-1 rounded hover:bg-gray-200 dark:hover:bg-gray-600",disabled:s.value===0},[I(C,{class:"w-4 h-4"})],8,W)])):D("",!0)]),l("div",G,[(m(!0),f(F,null,H(n.value,(a,c)=>(m(),f("div",{key:c,class:"p-4 border rounded-lg dark:border-gray-700"},[l("h3",J,b(a.title),1),l("div",{id:`all-sources-content-${c}`,class:"whitespace-pre-wrap break-words text-sm bg-gray-50 dark:bg-gray-800/50 p-2 rounded-md",innerHTML:E(a.content)},null,8,P)]))),128))])])]),footer:$(()=>[l("button",{onClick:e[3]||(e[3]=a=>A(k).closeModal("allSourcesSearch")),type:"button",class:"btn btn-secondary"},"Close")]),_:1}))}};export{ee as default}; +import{K as L,c as p,s as x,w as T,O as B,n as V,l as m,g as $,e as l,j as A,z as N,d as f,h as D,L as q,t as b,f as I,a6 as C,F,i as H}from"./index-BBRgbnZQ.js";import{_ as U}from"./GenericModal-eXiOHk6I.js";/* empty css */const j={class:"p-4 space-y-4"},z={class:"relative"},K={key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3 text-sm"},O=["disabled"],W=["disabled"],G={class:"max-h-[60vh] overflow-y-auto space-y-4 pr-2 all-sources-search-container"},J={class:"font-semibold text-lg mb-2"},P=["id","innerHTML"],ee={__name:"AllSourcesSearchModal",setup(Q){const k=L(),M=p(()=>k.modalData("allSourcesSearch")),n=p(()=>{var t;return((t=M.value)==null?void 0:t.sources)||[]}),r=x(""),g=x([]),o=x(-1),s=p(()=>g.value.length);T(r,t=>{if(!t){g.value=[],o.value=-1;return}const e=new RegExp(t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi"),a=[];let c=0;n.value.forEach((u,i)=>{if(u.content){let v;for(;(v=e.exec(u.content))!==null;)a.push({sourceIndex:i,sourceTitle:u.title,matchIndex:c++,matchIndexInContent:v.index})}}),g.value=a,a.length>0?(o.value=0,B(()=>y(0))):o.value=-1});function E(t){if(!t)return"";if(!r.value)return t;const e=new RegExp(`(${r.value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")})`,"gi");return t.replace(e,'<mark class="bg-yellow-300 dark:bg-yellow-600 rounded">$1</mark>')}function y(t){const e=g.value[t];if(!e)return;const a=document.getElementById(`all-sources-content-${e.sourceIndex}`);if(a){const c=a.querySelectorAll("mark");let u=0;for(let d=0;d<e.sourceIndex;d++)if(n.value[d].content){const h=new RegExp(r.value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi");u+=(n.value[d].content.match(h)||[]).length}(n.value[e.sourceIndex].content.match(new RegExp(r.value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi"))||[]).length;let i=-1;const v=new RegExp(r.value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi");let _=0,S;for(;(S=v.exec(n.value[e.sourceIndex].content))!==null;){if(S.index===e.matchIndexInContent){i=_;break}_++}if(i>-1){document.querySelectorAll(".all-sources-search-container mark").forEach(R=>R.classList.remove("current-search-highlight"));const h=c[i];h&&(h.classList.add("current-search-highlight"),h.scrollIntoView({behavior:"smooth",block:"center"}))}}}function w(t){if(s.value===0)return;let e=o.value+t;e<0&&(e=s.value-1),e>=s.value&&(e=0),o.value=e,y(e)}return(t,e)=>(m(),V(U,{modalName:"allSourcesSearch",title:"Search All Sources",maxWidthClass:"max-w-5xl"},{body:$(()=>[l("div",j,[l("div",z,[N(l("input",{type:"text","onUpdate:modelValue":e[0]||(e[0]=a=>r.value=a),placeholder:"Search in all source contents...",class:"input-field w-full pr-32",autofocus:""},null,512),[[q,r.value]]),r.value?(m(),f("div",K,[l("span",null,b(s.value>0?o.value+1:0)+" / "+b(s.value),1),l("button",{onClick:e[1]||(e[1]=a=>w(-1)),class:"ml-2 p-1 rounded hover:bg-gray-200 dark:hover:bg-gray-600",disabled:s.value===0},[I(C,{class:"w-4 h-4 transform rotate-180"})],8,O),l("button",{onClick:e[2]||(e[2]=a=>w(1)),class:"p-1 rounded hover:bg-gray-200 dark:hover:bg-gray-600",disabled:s.value===0},[I(C,{class:"w-4 h-4"})],8,W)])):D("",!0)]),l("div",G,[(m(!0),f(F,null,H(n.value,(a,c)=>(m(),f("div",{key:c,class:"p-4 border rounded-lg dark:border-gray-700"},[l("h3",J,b(a.title),1),l("div",{id:`all-sources-content-${c}`,class:"whitespace-pre-wrap break-words text-sm bg-gray-50 dark:bg-gray-800/50 p-2 rounded-md",innerHTML:E(a.content)},null,8,P)]))),128))])])]),footer:$(()=>[l("button",{onClick:e[3]||(e[3]=a=>A(k).closeModal("allSourcesSearch")),type:"button",class:"btn btn-secondary"},"Close")]),_:1}))}};export{ee as default};
frontend/dist/ui_assets/ApiKeysSettings-D-7p3H-b.js+1 −1 renamed@@ -1 +1 @@ -import{P as M,K as L,u as V,Q as A,s as x,c as f,o as q,w as K,d as i,l as n,e,h as _,j as c,p as v,t as l,H as S,z as D,L as z,F as E,i as R,V as B,m as O,f as U,ah as Y}from"./index-CEXks4lv.js";const $={class:"space-y-10"},j={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},F={class:"p-4 sm:p-6"},H={class:"space-y-4 mb-6"},Q={class:"p-4 border rounded-lg dark:border-gray-700"},G={key:0,class:"grid grid-cols-1 md:grid-cols-2 gap-4 text-sm"},J={class:"p-3 bg-gray-50 dark:bg-gray-700/50 rounded-md"},W={class:"text-gray-500 dark:text-gray-400"},X={class:"p-3 bg-gray-50 dark:bg-gray-700/50 rounded-md"},Z={class:"text-gray-500 dark:text-gray-400"},ee={key:0,class:"text-center"},te={key:1},se={class:"flex-grow w-full"},ae=["disabled"],le={key:0},re={class:"border-t border-gray-200 dark:border-gray-700"},oe={key:0,class:"p-6 text-center text-gray-500 dark:text-gray-400"},ie={key:1},ne={key:0,class:"px-4 sm:px-6 py-2 bg-blue-50 dark:bg-blue-900/20 flex items-center justify-between transition-all"},de={class:"flex items-center gap-4"},ce={class:"text-sm font-semibold text-blue-800 dark:text-blue-200"},ue={role:"list",class:"divide-y divide-gray-200 dark:divide-gray-700"},ye=["value"],ge={class:"flex-grow ml-2"},pe={class:"text-sm font-semibold text-gray-900 dark:text-white"},me={class:"text-sm text-gray-500 dark:text-gray-400 font-mono"},ve={class:"text-xs text-gray-500 dark:text-gray-400 text-right"},be=["onClick"],_e={__name:"ApiKeysSettings",setup(xe){const d=M(),u=L(),C=V(),{apiKeys:y}=A(d),{user:r}=A(C),g=x(""),p=x(!1),a=x(new Set),m=f(()=>r.value?r.value.openai_api_service_enabled||r.value.ollama_service_enabled:!1),h=f(()=>y.value.length>0),b=f({get:()=>h.value&&a.value.size===y.value.length,set:s=>{s?a.value=new Set(y.value.map(t=>t.id)):a.value.clear()}});q(()=>{m.value&&d.apiKeys.length===0&&d.fetchApiKeys()}),K(m,s=>{s&&d.apiKeys.length===0&&d.fetchApiKeys()}),K(y,()=>{a.value.clear()});function k(s){return s?new Date(s).toLocaleString():"Never"}async function T(){if(!g.value.trim()){u.addNotification("Please provide an alias for the new key.","warning");return}p.value=!0;try{const s=await d.addApiKey(g.value.trim());u.openModal("newApiKey",{keyData:s}),g.value=""}catch{}finally{p.value=!1}}async function I(s){await u.showConfirmation({title:`Delete key '${s.alias}'?`,message:"This will permanently revoke the key. This action cannot be undone.",confirmText:"Delete Key"})&&await d.deleteSingleApiKey(s.id)}async function N(){const s=Array.from(a.value);if(s.length===0){u.addNotification("No keys selected for deletion.","warning");return}await u.showConfirmation({title:`Delete ${s.length} API Key(s)?`,message:"This will permanently revoke the selected keys. This action cannot be undone.",confirmText:"Delete Selected"})&&await d.deleteMultipleApiKeys(s)}function P(){b.value=!b.value}return(s,t)=>(n(),i("div",$,[e("div",j,[t[10]||(t[10]=e("div",{class:"p-4 sm:p-6 border-b border-gray-200 dark:border-gray-700"},[e("h2",{class:"text-xl font-bold leading-6 text-gray-900 dark:text-white"},"API Keys"),e("p",{class:"mt-1 max-w-2xl text-sm text-gray-500 dark:text-gray-400"}," Manage your API keys for accessing the LoLLMs backend with OpenAI-compatible tools. ")],-1)),e("div",F,[e("div",H,[e("div",Q,[t[5]||(t[5]=e("h3",{class:"font-semibold text-lg mb-2"},"API Service Status",-1)),c(r)?(n(),i("div",G,[e("div",J,[t[3]||(t[3]=e("p",{class:"font-medium text-gray-800 dark:text-gray-200"},"OpenAI-Compatible API",-1)),e("p",{class:v(c(r).openai_api_service_enabled?"text-green-600 dark:text-green-400":"text-red-600 dark:text-red-400")}," Status: "+l(c(r).openai_api_service_enabled?"Enabled":"Disabled"),3),e("p",W," Key Required: "+l(c(r).openai_api_require_key?"Yes":"No"),1)]),e("div",X,[t[4]||(t[4]=e("p",{class:"font-medium text-gray-800 dark:text-gray-200"},"Ollama-Compatible API",-1)),e("p",{class:v(c(r).ollama_service_enabled?"text-green-600 dark:text-green-400":"text-red-600 dark:text-red-400")}," Status: "+l(c(r).ollama_service_enabled?"Enabled":"Disabled"),3),e("p",Z," Key Required: "+l(c(r).ollama_require_key?"Yes":"No"),1)])])):_("",!0),t[6]||(t[6]=e("p",{class:"text-xs text-gray-500 mt-2"},"API keys below can be used for any enabled service that requires a key.",-1))])]),m.value?(n(),i("div",te,[e("form",{onSubmit:S(T,["prevent"]),class:"flex flex-col sm:flex-row items-start sm:items-end gap-4"},[e("div",se,[t[8]||(t[8]=e("label",{for:"keyAlias",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"New Key Alias",-1)),D(e("input",{type:"text",id:"keyAlias","onUpdate:modelValue":t[0]||(t[0]=o=>g.value=o),class:"input-field mt-1",placeholder:"e.g., My Research Tool",required:""},null,512),[[z,g.value]])]),e("button",{type:"submit",class:"btn btn-primary w-full sm:w-auto",disabled:p.value},l(p.value?"Creating...":"Create New Key"),9,ae)],32)])):(n(),i("div",ee,t[7]||(t[7]=[e("div",{class:"p-4 bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800/50 rounded-lg"},[e("p",{class:"text-sm text-yellow-800 dark:text-yellow-200"}," All API services are currently disabled by the administrator. ")],-1)])))]),m.value?(n(),i("div",le,[e("div",re,[h.value?(n(),i("div",ie,[a.value.size>0?(n(),i("div",ne,[e("div",de,[e("span",ce,l(a.value.size)+" selected",1),e("button",{onClick:P,class:"text-sm font-medium text-blue-600 hover:underline"},l(b.value?"Deselect All":"Select All"),1)]),e("button",{onClick:N,class:"btn btn-danger btn-sm"}," Delete Selected ")])):_("",!0),e("ul",ue,[(n(!0),i(E,null,R(c(y),o=>(n(),i("li",{key:o.id,class:v(["px-4 py-4 sm:px-6 flex items-center gap-4 group transition-colors duration-150",{"bg-blue-50 dark:bg-blue-900/40":a.value.has(o.id)}])},[D(e("input",{type:"checkbox",value:o.id,"onUpdate:modelValue":t[1]||(t[1]=w=>a.value=w),onClick:t[2]||(t[2]=S(()=>{},["stop"])),class:"h-4 w-4 rounded border-gray-300 dark:border-gray-600 text-blue-600 focus:ring-blue-500"},null,8,ye),[[B,a.value]]),e("div",ge,[e("p",pe,l(o.alias),1),e("p",me,[O(l(o.key_prefix),1),t[9]||(t[9]=e("span",null,"...",-1))])]),e("div",ve,[e("p",null,"Last used: "+l(k(o.last_used_at)),1),e("p",null,"Created: "+l(k(o.created_at)),1)]),e("button",{onClick:w=>I(o),class:v(["p-2 rounded-full text-gray-400 hover:bg-red-100 hover:text-red-600 dark:hover:bg-red-900/50 dark:hover:text-red-400 opacity-0 group-hover:opacity-100 transition-opacity",{"opacity-100":a.value.size>0}]),title:"Delete this key"},[U(Y,{class:"h-5 w-5"})],10,be)],2))),128))])])):(n(),i("div",oe," You have not created any API keys yet. "))])])):_("",!0)])]))}};export{_e as default}; +import{P as M,K as L,u as q,R as A,s as x,c as f,o as z,w as K,d as i,l as n,e,h as _,j as c,p as v,t as l,H as S,z as D,L as V,F as R,i as E,Z as B,m as O,f as U,ah as Y}from"./index-BBRgbnZQ.js";const $={class:"space-y-10"},j={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},F={class:"p-4 sm:p-6"},H={class:"space-y-4 mb-6"},Z={class:"p-4 border rounded-lg dark:border-gray-700"},G={key:0,class:"grid grid-cols-1 md:grid-cols-2 gap-4 text-sm"},J={class:"p-3 bg-gray-50 dark:bg-gray-700/50 rounded-md"},Q={class:"text-gray-500 dark:text-gray-400"},W={class:"p-3 bg-gray-50 dark:bg-gray-700/50 rounded-md"},X={class:"text-gray-500 dark:text-gray-400"},ee={key:0,class:"text-center"},te={key:1},se={class:"flex-grow w-full"},ae=["disabled"],le={key:0},re={class:"border-t border-gray-200 dark:border-gray-700"},oe={key:0,class:"p-6 text-center text-gray-500 dark:text-gray-400"},ie={key:1},ne={key:0,class:"px-4 sm:px-6 py-2 bg-blue-50 dark:bg-blue-900/20 flex items-center justify-between transition-all"},de={class:"flex items-center gap-4"},ce={class:"text-sm font-semibold text-blue-800 dark:text-blue-200"},ue={role:"list",class:"divide-y divide-gray-200 dark:divide-gray-700"},ye=["value"],ge={class:"flex-grow ml-2"},pe={class:"text-sm font-semibold text-gray-900 dark:text-white"},me={class:"text-sm text-gray-500 dark:text-gray-400 font-mono"},ve={class:"text-xs text-gray-500 dark:text-gray-400 text-right"},be=["onClick"],_e={__name:"ApiKeysSettings",setup(xe){const d=M(),u=L(),C=q(),{apiKeys:y}=A(d),{user:r}=A(C),g=x(""),p=x(!1),a=x(new Set),m=f(()=>r.value?r.value.openai_api_service_enabled||r.value.ollama_service_enabled:!1),h=f(()=>y.value.length>0),b=f({get:()=>h.value&&a.value.size===y.value.length,set:s=>{s?a.value=new Set(y.value.map(t=>t.id)):a.value.clear()}});z(()=>{m.value&&d.apiKeys.length===0&&d.fetchApiKeys()}),K(m,s=>{s&&d.apiKeys.length===0&&d.fetchApiKeys()}),K(y,()=>{a.value.clear()});function k(s){return s?new Date(s).toLocaleString():"Never"}async function T(){if(!g.value.trim()){u.addNotification("Please provide an alias for the new key.","warning");return}p.value=!0;try{const s=await d.addApiKey(g.value.trim());u.openModal("newApiKey",{keyData:s}),g.value=""}catch{}finally{p.value=!1}}async function I(s){await u.showConfirmation({title:`Delete key '${s.alias}'?`,message:"This will permanently revoke the key. This action cannot be undone.",confirmText:"Delete Key"})&&await d.deleteSingleApiKey(s.id)}async function N(){const s=Array.from(a.value);if(s.length===0){u.addNotification("No keys selected for deletion.","warning");return}await u.showConfirmation({title:`Delete ${s.length} API Key(s)?`,message:"This will permanently revoke the selected keys. This action cannot be undone.",confirmText:"Delete Selected"})&&await d.deleteMultipleApiKeys(s)}function P(){b.value=!b.value}return(s,t)=>(n(),i("div",$,[e("div",j,[t[10]||(t[10]=e("div",{class:"p-4 sm:p-6 border-b border-gray-200 dark:border-gray-700"},[e("h2",{class:"text-xl font-bold leading-6 text-gray-900 dark:text-white"},"API Keys"),e("p",{class:"mt-1 max-w-2xl text-sm text-gray-500 dark:text-gray-400"}," Manage your API keys for accessing the LoLLMs backend with OpenAI-compatible tools. ")],-1)),e("div",F,[e("div",H,[e("div",Z,[t[5]||(t[5]=e("h3",{class:"font-semibold text-lg mb-2"},"API Service Status",-1)),c(r)?(n(),i("div",G,[e("div",J,[t[3]||(t[3]=e("p",{class:"font-medium text-gray-800 dark:text-gray-200"},"OpenAI-Compatible API",-1)),e("p",{class:v(c(r).openai_api_service_enabled?"text-green-600 dark:text-green-400":"text-red-600 dark:text-red-400")}," Status: "+l(c(r).openai_api_service_enabled?"Enabled":"Disabled"),3),e("p",Q," Key Required: "+l(c(r).openai_api_require_key?"Yes":"No"),1)]),e("div",W,[t[4]||(t[4]=e("p",{class:"font-medium text-gray-800 dark:text-gray-200"},"Ollama-Compatible API",-1)),e("p",{class:v(c(r).ollama_service_enabled?"text-green-600 dark:text-green-400":"text-red-600 dark:text-red-400")}," Status: "+l(c(r).ollama_service_enabled?"Enabled":"Disabled"),3),e("p",X," Key Required: "+l(c(r).ollama_require_key?"Yes":"No"),1)])])):_("",!0),t[6]||(t[6]=e("p",{class:"text-xs text-gray-500 mt-2"},"API keys below can be used for any enabled service that requires a key.",-1))])]),m.value?(n(),i("div",te,[e("form",{onSubmit:S(T,["prevent"]),class:"flex flex-col sm:flex-row items-start sm:items-end gap-4"},[e("div",se,[t[8]||(t[8]=e("label",{for:"keyAlias",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"New Key Alias",-1)),D(e("input",{type:"text",id:"keyAlias","onUpdate:modelValue":t[0]||(t[0]=o=>g.value=o),class:"input-field mt-1",placeholder:"e.g., My Research Tool",required:""},null,512),[[V,g.value]])]),e("button",{type:"submit",class:"btn btn-primary w-full sm:w-auto",disabled:p.value},l(p.value?"Creating...":"Create New Key"),9,ae)],32)])):(n(),i("div",ee,t[7]||(t[7]=[e("div",{class:"p-4 bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800/50 rounded-lg"},[e("p",{class:"text-sm text-yellow-800 dark:text-yellow-200"}," All API services are currently disabled by the administrator. ")],-1)])))]),m.value?(n(),i("div",le,[e("div",re,[h.value?(n(),i("div",ie,[a.value.size>0?(n(),i("div",ne,[e("div",de,[e("span",ce,l(a.value.size)+" selected",1),e("button",{onClick:P,class:"text-sm font-medium text-blue-600 hover:underline"},l(b.value?"Deselect All":"Select All"),1)]),e("button",{onClick:N,class:"btn btn-danger btn-sm"}," Delete Selected ")])):_("",!0),e("ul",ue,[(n(!0),i(R,null,E(c(y),o=>(n(),i("li",{key:o.id,class:v(["px-4 py-4 sm:px-6 flex items-center gap-4 group transition-colors duration-150",{"bg-blue-50 dark:bg-blue-900/40":a.value.has(o.id)}])},[D(e("input",{type:"checkbox",value:o.id,"onUpdate:modelValue":t[1]||(t[1]=w=>a.value=w),onClick:t[2]||(t[2]=S(()=>{},["stop"])),class:"h-4 w-4 rounded border-gray-300 dark:border-gray-600 text-blue-600 focus:ring-blue-500"},null,8,ye),[[B,a.value]]),e("div",ge,[e("p",pe,l(o.alias),1),e("p",me,[O(l(o.key_prefix),1),t[9]||(t[9]=e("span",null,"...",-1))])]),e("div",ve,[e("p",null,"Last used: "+l(k(o.last_used_at)),1),e("p",null,"Created: "+l(k(o.created_at)),1)]),e("button",{onClick:w=>I(o),class:v(["p-2 rounded-full text-gray-400 hover:bg-red-100 hover:text-red-600 dark:hover:bg-red-900/50 dark:hover:text-red-400 opacity-0 group-hover:opacity-100 transition-opacity",{"opacity-100":a.value.size>0}]),title:"Delete this key"},[U(Y,{class:"h-5 w-5"})],10,be)],2))),128))])])):(n(),i("div",oe," You have not created any API keys yet. "))])])):_("",!0)])]))}};export{_e as default};
frontend/dist/ui_assets/AppCardSkeleton-C03QefFR.js+1 −1 renamed@@ -1 +1 @@ -import{c as k,d as n,h as l,l as i,f as d,e as a,an as b,t as c,H as g,x as f,cQ as p,q as u,cL as w}from"./index-CEXks4lv.js";const h={key:0,class:"flex items-center gap-2 text-sm text-blue-600 dark:text-blue-400 w-full"},y={class:"flex-grow"},x={key:0,class:"font-semibold truncate"},_={class:"text-xs truncate"},$={class:"flex-shrink-0 flex items-center gap-1"},T={__name:"TaskProgressIndicator",props:{task:{type:Object,required:!0},showName:{type:Boolean,default:!1}},emits:["cancel","view"],setup(s,{emit:e}){const t=s,m=k(()=>t.task?t.task.name.startsWith("Installing app:")?`Installing... (${t.task.progress}%)`:t.task.name.startsWith("Start app:")?"Starting...":`${t.task.status.charAt(0).toUpperCase()+t.task.status.slice(1)} (${t.task.progress}%)`:"...");return(o,r)=>s.task?(i(),n("div",h,[d(b,{class:"w-4 h-4 flex-shrink-0"}),a("div",y,[s.showName?(i(),n("p",x,c(s.task.name),1)):l("",!0),a("p",_,c(m.value),1)]),a("div",$,[a("button",{onClick:r[0]||(r[0]=g(v=>o.$emit("view",s.task.id),["stop"])),class:"btn btn-secondary btn-sm !p-1",title:"View Task Details"},[d(f,{class:"w-4 h-4"})]),a("button",{onClick:r[1]||(r[1]=g(v=>o.$emit("cancel",s.task.id),["stop"])),class:"btn btn-warning btn-sm !p-1",title:"Cancel Task"},[d(p,{class:"w-4 h-4"})])])])):l("",!0)}},C={},I={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function S(s,e){return i(),n("svg",I,e[0]||(e[0]=[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m9 9 6-6m0 0-6 6m6-6v12a6 6 0 0 1-12 0v-3"},null,-1)]))}const j=u(C,[["render",S]]),N={},A={class:"bg-white dark:bg-gray-800 rounded-lg shadow-md p-4 animate-pulse"};function B(s,e){return i(),n("div",A,e[0]||(e[0]=[w('<div class="flex items-start gap-4 mb-3"><div class="h-16 w-16 rounded-md flex-shrink-0 bg-gray-300 dark:bg-gray-700"></div><div class="flex-grow min-w-0 mt-1"><div class="h-5 w-3/4 rounded bg-gray-300 dark:bg-gray-600"></div><div class="h-4 w-1/2 rounded bg-gray-200 dark:bg-gray-700 mt-2"></div></div></div><div class="space-y-2"><div class="h-4 rounded bg-gray-200 dark:bg-gray-700"></div><div class="h-4 rounded bg-gray-200 dark:bg-gray-700"></div><div class="h-4 w-5/6 rounded bg-gray-200 dark:bg-gray-700"></div></div><div class="mt-5"><div class="flex items-center justify-between text-xs mb-3"><div class="h-4 w-12 rounded-full bg-gray-200 dark:bg-gray-700"></div><div class="h-4 w-20 rounded-full bg-gray-200 dark:bg-gray-700"></div></div><div class="h-10 w-full rounded-md bg-gray-300 dark:bg-gray-600"></div></div>',3)]))}const q=u(N,[["render",B]]);export{q as A,j as I,T as _}; +import{c as k,d as n,h as l,l as i,f as d,e as a,an as b,t as c,H as g,x as f,cS as w,q as u,cc as p}from"./index-BBRgbnZQ.js";const h={key:0,class:"flex items-center gap-2 text-sm text-blue-600 dark:text-blue-400 w-full"},y={class:"flex-grow"},x={key:0,class:"font-semibold truncate"},_={class:"text-xs truncate"},$={class:"flex-shrink-0 flex items-center gap-1"},T={__name:"TaskProgressIndicator",props:{task:{type:Object,required:!0},showName:{type:Boolean,default:!1}},emits:["cancel","view"],setup(s,{emit:e}){const t=s,m=k(()=>t.task?t.task.name.startsWith("Installing app:")?`Installing... (${t.task.progress}%)`:t.task.name.startsWith("Start app:")?"Starting...":`${t.task.status.charAt(0).toUpperCase()+t.task.status.slice(1)} (${t.task.progress}%)`:"...");return(o,r)=>s.task?(i(),n("div",h,[d(b,{class:"w-4 h-4 flex-shrink-0"}),a("div",y,[s.showName?(i(),n("p",x,c(s.task.name),1)):l("",!0),a("p",_,c(m.value),1)]),a("div",$,[a("button",{onClick:r[0]||(r[0]=g(v=>o.$emit("view",s.task.id),["stop"])),class:"btn btn-secondary btn-sm !p-1",title:"View Task Details"},[d(f,{class:"w-4 h-4"})]),a("button",{onClick:r[1]||(r[1]=g(v=>o.$emit("cancel",s.task.id),["stop"])),class:"btn btn-warning btn-sm !p-1",title:"Cancel Task"},[d(w,{class:"w-4 h-4"})])])])):l("",!0)}},C={},I={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function S(s,e){return i(),n("svg",I,e[0]||(e[0]=[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m9 9 6-6m0 0-6 6m6-6v12a6 6 0 0 1-12 0v-3"},null,-1)]))}const j=u(C,[["render",S]]),N={},A={class:"bg-white dark:bg-gray-800 rounded-lg shadow-md p-4 animate-pulse"};function B(s,e){return i(),n("div",A,e[0]||(e[0]=[p('<div class="flex items-start gap-4 mb-3"><div class="h-16 w-16 rounded-md flex-shrink-0 bg-gray-300 dark:bg-gray-700"></div><div class="flex-grow min-w-0 mt-1"><div class="h-5 w-3/4 rounded bg-gray-300 dark:bg-gray-600"></div><div class="h-4 w-1/2 rounded bg-gray-200 dark:bg-gray-700 mt-2"></div></div></div><div class="space-y-2"><div class="h-4 rounded bg-gray-200 dark:bg-gray-700"></div><div class="h-4 rounded bg-gray-200 dark:bg-gray-700"></div><div class="h-4 w-5/6 rounded bg-gray-200 dark:bg-gray-700"></div></div><div class="mt-5"><div class="flex items-center justify-between text-xs mb-3"><div class="h-4 w-12 rounded-full bg-gray-200 dark:bg-gray-700"></div><div class="h-4 w-20 rounded-full bg-gray-200 dark:bg-gray-700"></div></div><div class="h-10 w-full rounded-md bg-gray-300 dark:bg-gray-600"></div></div>',3)]))}const q=u(N,[["render",B]]);export{q as A,j as I,T as _};
frontend/dist/ui_assets/AppCard-_yFD3KrL.js+1 −1 renamed@@ -1 +1 @@ -import{q as y,d as s,l as a,h as o,e as i,f as u,t as g,p as r,H as L,n as M,cN as N,cO as p,cP as j,m as d,ah as c,$ as m,cQ as w,F as A,cf as C,I as b,al as I,cm as k}from"./index-CEXks4lv.js";import{_ as D,I as S}from"./AppCardSkeleton-BZpMiaGA.js";import{I as E}from"./IconGlobeAlt-BuKg8C2g.js";import{I as T}from"./IconPlayCircle-ClB9mJda.js";import{_ as x}from"./AdminView-BDw3vQ10.js";import{_ as f}from"./IconNoSymbol-DV6K_m0o.js";import{I as U}from"./IconArrowPath-D8-8Af5d.js";const v={key:0,class:"absolute inset-0 bg-gray-500/30 dark:bg-gray-900/50 flex items-center justify-center rounded-lg z-10",title:"This is a legacy scripted personality and is not compatible with this version of the application."},z={class:"card-header"},$=["src","alt"],h={class:"flex-grow min-w-0"},O={class:"flex justify-between items-start"},Q=["title"],Y={class:"card-tags"},B={key:0,class:"tag installed-tag-broken"},Z={key:2,class:"tag registered-tag"},R={key:3,class:"tag"},F={key:4,class:"tag"},P={key:5,class:"tag"},V={class:"card-body"},G=["title"],W={key:1,class:"px-4 pb-2 text-xs text-gray-400 dark:text-gray-500 flex items-center gap-1"},H=["title"],J={class:"card-footer"},X={class:"flex-1 min-w-0"},q={key:1,class:"flex gap-2 w-full"},K={key:0,class:"flex gap-2 w-full"},_=["disabled"],tt={key:4,class:"flex items-center gap-2"},et=["href"],at={class:"flex-shrink-0 flex gap-1"},st="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIiBjbGFzcz0idy02IGgtNiI+CiAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMy4zNzUgMS41YTguMjc1IDguMjc1IDAgMCAwLTguMjc1IDguMjc1YzAgNC4xMjIgMi41NjEgNy42MyA2LjA3NyA4LjgzNWEuNzUuNzUgMCAwIDAgLjc2NC0uMTExYy4xMjUtLjA3OC4yNTgtLjE5LjM5OS0uMzE0bC4wMDQtLjAwNSNhLjQ5OC40OTggMCAwIDEgLjYxMy0uMDIzbDIuNDQyIDEuMTM4YTEuNSAxLjUgMCAwIDAgMS42OTktLjkxM2w0LjQxMy05LjU3N2E4LjI1IDE4LjI1IDAgMCAwLTkuOTU0LTkuOTU0bC05LjU3NyA0LjQxM2ExLjUgMS41IDAgMCAwLS45MTMgMS42OTlsMS4xMzggMi40NDJhLjQ5OC40OTggMCAwIDEgLS4wMjMuNjEzbC0uMDA1LjAwNC0uMzE0LjM5OWEuNzUuNzUgMCAwIDAtLjExMS43NjRBMTEuMjIgMTEuMjIgMCAwIDEtMy4zNzUgMTguNWMtNS4wNzIgMC05LjE4OC00LjExNi05LjE4OC05LjE4OGE5LjE4OCA5LjE4OCAwIDAgMSAxLjYxNy01LjE2MmMuMjQ2LS40Mi4wMzgtLjkxOC0uMzY4LTEuMTU3bC0xLjQyNS0uODM4YTEuNSAxLjUgMCAwIDAtMi4wODYuNDlMMy4zNzUgMS41em00LjQ4OCAxMy4wMjNhLjUuNSAwIDAgMS0uMzU0LS4xNDdsLTEuNTQyLTEuNTQxYS41LjUgMCAxIDEgLjcwOC0uNzA4bDEuNTQxIDEuNTQyYS41LjUgMCAwIDEgLS4zNTQuODU0em0yLjk0LTIuOTRhLjUuNSAwIDAgMS0uMzU0LS4xNDZsLTEuNTQxLTEuNTQyYS41LjUgMCAwIDEgLjcwNy0uNzA4bDEuNTQyIDEuNTQxYS41LjUgMCAwIDEgLS4zNTQuODU0em0tMi45NC0yLjk0YS41LjUgMCAwIDEtLjM1My0uMTQ2bC0xLjU0Mi0xLjU0MmEuNS41IDAgMCAxIC43MDctLjcwN2wxLjU0MiAxLjU0MWEuNS41IDAgMCAxLS4zNTQuODUzem0yLjk0LTIuOTRhLjUuNSAwIDAgMS0uMzU0LS4xNDZsLTEuNTQxLTEuNTQyYS41LjUgMCAwIDEgLjcwNy0uNzA4bDEuNTQyIDEuNTQxYS41LjUgMCAwIDEgLS4zNTQuODU0em00LjQ4OC0uNzU3YS41LjUgMCAwIDEtLjM1NC0uMTQ3bC0xLjU0Mi0xLjU0MWEuNS41IDAgMCAxIC43MDgtLjcwOGwxLjU0MSAxLjU0MWEuNS41IDAgMCAxLS4zNTQuODU0em0yLjk0LTIuOTRhLjUuNSAwIDAgMS0uMzU0LS4xNDZsLTEuNTQxLTEuNTQyYS41LjUgMCAwIDEgLjcwNy0uNzA4bDEuNTQyIDEuNTQxYS41LjUgMCAwIDEgLS4zNTQuODU0em0tMS40NzEtNC40N2EuNS41IDAgMCAxLS4zNTQtLjE0N2wtMS41NDItMS41NDFhLjUuNSAwIDAgMSAuNzA4LS43MDhsMS41NDEgMS41NDFhLjUuNSAwIDAgMS0uMzU0Ljg1NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgLz4KPC9zdmc+Cg==",it={__name:"AppCard",props:{app:{type:Object,required:!0},task:{type:Object,default:null},isStarred:{type:Boolean,default:!1},itemTypeName:{type:String,default:"App"}},emits:["star","install","update","uninstall","details","help","view-task","cancel-install","start","stop","fix","configure","purge","logs","delete","edit-env","restart"],setup(t,{emit:nt}){return(n,e)=>(a(),s("div",{class:r(["card",{"opacity-60 pointer-events-none":t.app.is_legacy_scripted}])},[t.app.is_legacy_scripted?(a(),s("div",v,[u(f,{class:"w-16 h-16 text-red-500"})])):o("",!0),i("div",z,[i("img",{src:t.app.icon||st,alt:t.app.name,class:"card-icon"},null,8,$),i("div",h,[i("div",O,[i("h3",{class:"card-title",title:t.app.name},g(t.app.name),9,Q),i("button",{onClick:e[0]||(e[0]=L(l=>n.$emit("star",t.app.name),["stop"])),class:r(["p-1.5 rounded-full transition-colors flex-shrink-0",t.isStarred?"bg-yellow-400/20 text-yellow-500":"text-gray-400 hover:text-yellow-500"])},[t.isStarred?(a(),M(N,{key:0,class:"w-5 h-5"})):(a(),M(p,{key:1,class:"w-5 h-5"}))],2)]),i("div",Y,[t.app.is_broken?(a(),s("span",B,"Broken")):t.app.is_installed?(a(),s("span",{key:1,class:r(["tag",{"installed-tag-running":t.app.status==="running","installed-tag-stopped":t.app.status!=="running"}])},g(t.app.status||"Installed"),3)):t.app.repository==="Registered"?(a(),s("span",Z,"Registered")):o("",!0),t.app.author?(a(),s("span",R,"by "+g(t.app.author),1)):o("",!0),t.app.category?(a(),s("span",F,g(t.app.category),1)):o("",!0),t.app.version?(a(),s("span",P,"v"+g(t.app.version),1)):o("",!0)])])]),i("div",V,[i("p",{class:"card-description",title:t.app.description},g(t.app.description),9,G)]),t.app.repository?(a(),s("div",W,[u(j,{class:"w-3 h-3"}),i("span",{class:"truncate",title:`From: ${t.app.repository}`},g(t.app.repository),9,H)])):o("",!0),i("div",J,[i("div",X,[t.task?(a(),M(D,{key:0,task:t.task,onView:e[1]||(e[1]=l=>n.$emit("view-task",t.task.id)),onCancel:e[2]||(e[2]=l=>n.$emit("cancel-install"))},null,8,["task"])):(a(),s("div",q,[t.app.is_broken?(a(),s("div",K,[i("button",{onClick:e[3]||(e[3]=l=>n.$emit("fix",t.app)),class:"btn btn-warning w-full",title:"Fix Installation"},[u(x,{class:"w-4 h-4 mr-2"}),e[17]||(e[17]=d("Fix"))]),i("button",{onClick:e[4]||(e[4]=l=>n.$emit("purge",t.app)),class:"btn btn-danger w-full",title:"Purge Installation"},[u(c,{class:"w-4 h-4 mr-2"}),e[18]||(e[18]=d("Purge"))])])):!t.app.is_installed&&t.app.repository!=="Registered"?(a(),s("button",{key:1,onClick:e[5]||(e[5]=l=>n.$emit("install",t.app)),class:"btn btn-primary w-full",disabled:t.app.is_legacy_scripted},[u(m,{class:"w-4 h-4 mr-2"}),e[19]||(e[19]=d("Install "))],8,_)):t.app.is_installed&&t.app.update_available?(a(),s("button",{key:2,onClick:e[6]||(e[6]=l=>n.$emit("update",t.app)),class:"btn btn-warning w-full"},[u(S,{class:"w-4 h-4 mr-2"}),d("Update to "+g(t.app.repo_version),1)])):t.app.is_installed&&t.app.status!=="running"?(a(),s("button",{key:3,onClick:e[7]||(e[7]=l=>n.$emit("start",t.app)),class:"btn btn-success p-2",title:"Start App"},[u(T,{class:"w-5 h-5"})])):t.app.is_installed&&t.app.status==="running"?(a(),s("div",tt,[t.app.url?(a(),s("a",{key:0,href:t.app.url,target:"_blank",class:"btn btn-primary p-2",title:"Open App"},[u(E,{class:"w-5 h-5"})],8,et)):o("",!0),i("button",{onClick:e[8]||(e[8]=l=>n.$emit("restart",t.app)),class:"btn btn-secondary p-2",title:"Restart App"},[u(U,{class:"w-5 h-5"})]),i("button",{onClick:e[9]||(e[9]=l=>n.$emit("stop",t.app)),class:"btn btn-warning p-2",title:"Stop App"},[u(w,{class:"w-5 h-5"})])])):o("",!0)]))]),i("div",at,[!t.task&&!t.app.is_broken?(a(),s(A,{key:0},[t.app.is_installed&&t.app.has_config_schema?(a(),s("button",{key:0,onClick:e[10]||(e[10]=l=>n.$emit("configure",t.app)),class:"btn btn-secondary p-2",title:"Configure"},[u(C,{class:"w-4 h-4"})])):o("",!0),t.app.is_installed&&t.app.has_dot_env_config?(a(),s("button",{key:1,onClick:e[11]||(e[11]=l=>n.$emit("edit-env",t.app)),class:"btn btn-secondary p-2",title:"Edit .env Configuration"},e[20]||(e[20]=[i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",class:"w-4 h-4"},[i("path",{d:"m2.695 14.762-1.262 3.155a.5.5 0 0 0 .65.65l3.155-1.262a.5.5 0 0 0 .134-.05l8.606-8.606-3.155-3.155-8.606 8.606a.5.5 0 0 0-.05.134Z"}),i("path",{d:"M13.44 3.19a.5.5 0 0 0 0 .707l2.845 2.845a.5.5 0 0 0 .707 0l1.262-1.262a.5.5 0 0 0 0-.707l-2.845-2.845a.5.5 0 0 0-.707 0l-1.262 1.262Z"})],-1)]))):o("",!0),t.app.is_installed?(a(),s("button",{key:2,onClick:e[12]||(e[12]=l=>n.$emit("logs",t.app)),class:"btn btn-secondary p-2",title:"View Logs"},[u(b,{class:"w-4 h-4"})])):o("",!0)],64)):o("",!0),i("button",{onClick:e[13]||(e[13]=l=>n.$emit("details",t.app)),class:"btn btn-secondary p-2",title:"Details"},[u(I,{class:"w-4 h-4"})]),t.app.has_readme?(a(),s("button",{key:1,onClick:e[14]||(e[14]=l=>n.$emit("help",t.app)),class:"btn btn-secondary p-2",title:"Help"},[u(k,{class:"w-4 h-4"})])):o("",!0),t.app.is_installed?(a(),s("button",{key:2,onClick:e[15]||(e[15]=l=>n.$emit("uninstall",t.app)),class:"btn btn-danger-outline p-2",title:"Uninstall"},[u(c,{class:"w-4 h-4"})])):o("",!0),t.app.repository==="Registered"?(a(),s("button",{key:3,onClick:e[16]||(e[16]=l=>n.$emit("delete",t.app)),class:"btn btn-danger-outline p-2",title:"Delete Registration"},[u(c,{class:"w-4 h-4"})])):o("",!0)])])],2))}},ct=y(it,[["__scopeId","data-v-f94cdef5"]]);export{ct as A}; +import{q as y,d as s,l as a,h as o,e as i,f as u,t as g,p as r,H as L,n as M,cP as N,cQ as p,cR as j,m as d,ah as c,W as w,cS as m,F as A,ci as b,I as C,al as I,cp as k}from"./index-BBRgbnZQ.js";import{_ as D,I as S}from"./AppCardSkeleton-C03QefFR.js";import{I as E}from"./IconGlobeAlt-DJc8Wsna.js";import{I as T}from"./IconPlayCircle-D2gooLkD.js";import{_ as x}from"./AdminView-Bo442GSB.js";import{_ as f}from"./IconNoSymbol-D0HTNvx3.js";import{I as U}from"./IconArrowPath-DUE5IYPL.js";const v={key:0,class:"absolute inset-0 bg-gray-500/30 dark:bg-gray-900/50 flex items-center justify-center rounded-lg z-10",title:"This is a legacy scripted personality and is not compatible with this version of the application."},z={class:"card-header"},$=["src","alt"],h={class:"flex-grow min-w-0"},O={class:"flex justify-between items-start"},Q=["title"],Y={class:"card-tags"},B={key:0,class:"tag installed-tag-broken"},Z={key:2,class:"tag registered-tag"},R={key:3,class:"tag"},P={key:4,class:"tag"},F={key:5,class:"tag"},V={class:"card-body"},G=["title"],W={key:1,class:"px-4 pb-2 text-xs text-gray-400 dark:text-gray-500 flex items-center gap-1"},H=["title"],J={class:"card-footer"},X={class:"flex-1 min-w-0"},q={key:1,class:"flex gap-2 w-full"},K={key:0,class:"flex gap-2 w-full"},_=["disabled"],tt={key:4,class:"flex items-center gap-2"},et=["href"],at={class:"flex-shrink-0 flex gap-1"},st="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIiBjbGFzcz0idy02IGgtNiI+CiAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMy4zNzUgMS41YTguMjc1IDguMjc1IDAgMCAwLTguMjc1IDguMjc1YzAgNC4xMjIgMi41NjEgNy42MyA2LjA3NyA4LjgzNWEuNzUuNzUgMCAwIDAgLjc2NC0uMTExYy4xMjUtLjA3OC4yNTgtLjE5LjM5OS0uMzE0bC4wMDQtLjAwNSNhLjQ5OC40OTggMCAwIDEgLjYxMy0uMDIzbDIuNDQyIDEuMTM4YTEuNSAxLjUgMCAwIDAgMS42OTktLjkxM2w0LjQxMy05LjU3N2E4LjI1IDE4LjI1IDAgMCAwLTkuOTU0LTkuOTU0bC05LjU3NyA0LjQxM2ExLjUgMS41IDAgMCAwLS45MTMgMS42OTlsMS4xMzggMi40NDJhLjQ5OC40OTggMCAwIDEgLS4wMjMuNjEzbC0uMDA1LjAwNC0uMzE0LjM5OWEuNzUuNzUgMCAwIDAtLjExMS43NjRBMTEuMjIgMTEuMjIgMCAwIDEtMy4zNzUgMTguNWMtNS4wNzIgMC05LjE4OC00LjExNi05LjE4OC05LjE4OGE5LjE4OCA5LjE4OCAwIDAgMSAxLjYxNy01LjE2MmMuMjQ2LS40Mi4wMzgtLjkxOC0uMzY4LTEuMTU3bC0xLjQyNS0uODM4YTEuNSAxLjUgMCAwIDAtMi4wODYuNDlMMy4zNzUgMS41em00LjQ4OCAxMy4wMjNhLjUuNSAwIDAgMS0uMzU0LS4xNDdsLTEuNTQyLTEuNTQxYS41LjUgMCAxIDEgLjcwOC0uNzA4bDEuNTQxIDEuNTQyYS41LjUgMCAwIDEgLS4zNTQuODU0em0yLjk0LTIuOTRhLjUuNSAwIDAgMS0uMzU0LS4xNDZsLTEuNTQxLTEuNTQyYS41LjUgMCAwIDEgLjcwNy0uNzA4bDEuNTQyIDEuNTQxYS41LjUgMCAwIDEgLS4zNTQuODU0em0tMi45NC0yLjk0YS41LjUgMCAwIDEtLjM1My0uMTQ2bC0xLjU0Mi0xLjU0MmEuNS41IDAgMCAxIC43MDctLjcwN2wxLjU0MiAxLjU0MWEuNS41IDAgMCAxLS4zNTQuODUzem0yLjk0LTIuOTRhLjUuNSAwIDAgMS0uMzU0LS4xNDZsLTEuNTQxLTEuNTQyYS41LjUgMCAwIDEgLjcwNy0uNzA4bDEuNTQyIDEuNTQxYS41LjUgMCAwIDEgLS4zNTQuODU0em00LjQ4OC0uNzU3YS41LjUgMCAwIDEtLjM1NC0uMTQ3bC0xLjU0Mi0xLjU0MWEuNS41IDAgMCAxIC43MDgtLjcwOGwxLjU0MSAxLjU0MWEuNS41IDAgMCAxLS4zNTQuODU0em0yLjk0LTIuOTRhLjUuNSAwIDAgMS0uMzU0LS4xNDZsLTEuNTQxLTEuNTQyYS41LjUgMCAwIDEgLjcwNy0uNzA4bDEuNTQyIDEuNTQxYS41LjUgMCAwIDEgLS4zNTQuODU0em0tMS40NzEtNC40N2EuNS41IDAgMCAxLS4zNTQtLjE0N2wtMS41NDItMS41NDFhLjUuNSAwIDAgMSAuNzA4LS43MDhsMS41NDEgMS41NDFhLjUuNSAwIDAgMS0uMzU0Ljg1NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgLz4KPC9zdmc+Cg==",it={__name:"AppCard",props:{app:{type:Object,required:!0},task:{type:Object,default:null},isStarred:{type:Boolean,default:!1},itemTypeName:{type:String,default:"App"}},emits:["star","install","update","uninstall","details","help","view-task","cancel-install","start","stop","fix","configure","purge","logs","delete","edit-env","restart"],setup(t,{emit:nt}){return(n,e)=>(a(),s("div",{class:r(["card",{"opacity-60 pointer-events-none":t.app.is_legacy_scripted}])},[t.app.is_legacy_scripted?(a(),s("div",v,[u(f,{class:"w-16 h-16 text-red-500"})])):o("",!0),i("div",z,[i("img",{src:t.app.icon||st,alt:t.app.name,class:"card-icon"},null,8,$),i("div",h,[i("div",O,[i("h3",{class:"card-title",title:t.app.name},g(t.app.name),9,Q),i("button",{onClick:e[0]||(e[0]=L(l=>n.$emit("star",t.app.name),["stop"])),class:r(["p-1.5 rounded-full transition-colors flex-shrink-0",t.isStarred?"bg-yellow-400/20 text-yellow-500":"text-gray-400 hover:text-yellow-500"])},[t.isStarred?(a(),M(N,{key:0,class:"w-5 h-5"})):(a(),M(p,{key:1,class:"w-5 h-5"}))],2)]),i("div",Y,[t.app.is_broken?(a(),s("span",B,"Broken")):t.app.is_installed?(a(),s("span",{key:1,class:r(["tag",{"installed-tag-running":t.app.status==="running","installed-tag-stopped":t.app.status!=="running"}])},g(t.app.status||"Installed"),3)):t.app.repository==="Registered"?(a(),s("span",Z,"Registered")):o("",!0),t.app.author?(a(),s("span",R,"by "+g(t.app.author),1)):o("",!0),t.app.category?(a(),s("span",P,g(t.app.category),1)):o("",!0),t.app.version?(a(),s("span",F,"v"+g(t.app.version),1)):o("",!0)])])]),i("div",V,[i("p",{class:"card-description",title:t.app.description},g(t.app.description),9,G)]),t.app.repository?(a(),s("div",W,[u(j,{class:"w-3 h-3"}),i("span",{class:"truncate",title:`From: ${t.app.repository}`},g(t.app.repository),9,H)])):o("",!0),i("div",J,[i("div",X,[t.task?(a(),M(D,{key:0,task:t.task,onView:e[1]||(e[1]=l=>n.$emit("view-task",t.task.id)),onCancel:e[2]||(e[2]=l=>n.$emit("cancel-install"))},null,8,["task"])):(a(),s("div",q,[t.app.is_broken?(a(),s("div",K,[i("button",{onClick:e[3]||(e[3]=l=>n.$emit("fix",t.app)),class:"btn btn-warning w-full",title:"Fix Installation"},[u(x,{class:"w-4 h-4 mr-2"}),e[17]||(e[17]=d("Fix"))]),i("button",{onClick:e[4]||(e[4]=l=>n.$emit("purge",t.app)),class:"btn btn-danger w-full",title:"Purge Installation"},[u(c,{class:"w-4 h-4 mr-2"}),e[18]||(e[18]=d("Purge"))])])):!t.app.is_installed&&t.app.repository!=="Registered"?(a(),s("button",{key:1,onClick:e[5]||(e[5]=l=>n.$emit("install",t.app)),class:"btn btn-primary w-full",disabled:t.app.is_legacy_scripted},[u(w,{class:"w-4 h-4 mr-2"}),e[19]||(e[19]=d("Install "))],8,_)):t.app.is_installed&&t.app.update_available?(a(),s("button",{key:2,onClick:e[6]||(e[6]=l=>n.$emit("update",t.app)),class:"btn btn-warning w-full"},[u(S,{class:"w-4 h-4 mr-2"}),d("Update to "+g(t.app.repo_version),1)])):t.app.is_installed&&t.app.status!=="running"?(a(),s("button",{key:3,onClick:e[7]||(e[7]=l=>n.$emit("start",t.app)),class:"btn btn-success p-2",title:"Start App"},[u(T,{class:"w-5 h-5"})])):t.app.is_installed&&t.app.status==="running"?(a(),s("div",tt,[t.app.url?(a(),s("a",{key:0,href:t.app.url,target:"_blank",class:"btn btn-primary p-2",title:"Open App"},[u(E,{class:"w-5 h-5"})],8,et)):o("",!0),i("button",{onClick:e[8]||(e[8]=l=>n.$emit("restart",t.app)),class:"btn btn-secondary p-2",title:"Restart App"},[u(U,{class:"w-5 h-5"})]),i("button",{onClick:e[9]||(e[9]=l=>n.$emit("stop",t.app)),class:"btn btn-warning p-2",title:"Stop App"},[u(m,{class:"w-5 h-5"})])])):o("",!0)]))]),i("div",at,[!t.task&&!t.app.is_broken?(a(),s(A,{key:0},[t.app.is_installed&&t.app.has_config_schema?(a(),s("button",{key:0,onClick:e[10]||(e[10]=l=>n.$emit("configure",t.app)),class:"btn btn-secondary p-2",title:"Configure"},[u(b,{class:"w-4 h-4"})])):o("",!0),t.app.is_installed&&t.app.has_dot_env_config?(a(),s("button",{key:1,onClick:e[11]||(e[11]=l=>n.$emit("edit-env",t.app)),class:"btn btn-secondary p-2",title:"Edit .env Configuration"},e[20]||(e[20]=[i("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",class:"w-4 h-4"},[i("path",{d:"m2.695 14.762-1.262 3.155a.5.5 0 0 0 .65.65l3.155-1.262a.5.5 0 0 0 .134-.05l8.606-8.606-3.155-3.155-8.606 8.606a.5.5 0 0 0-.05.134Z"}),i("path",{d:"M13.44 3.19a.5.5 0 0 0 0 .707l2.845 2.845a.5.5 0 0 0 .707 0l1.262-1.262a.5.5 0 0 0 0-.707l-2.845-2.845a.5.5 0 0 0-.707 0l-1.262 1.262Z"})],-1)]))):o("",!0),t.app.is_installed?(a(),s("button",{key:2,onClick:e[12]||(e[12]=l=>n.$emit("logs",t.app)),class:"btn btn-secondary p-2",title:"View Logs"},[u(C,{class:"w-4 h-4"})])):o("",!0)],64)):o("",!0),i("button",{onClick:e[13]||(e[13]=l=>n.$emit("details",t.app)),class:"btn btn-secondary p-2",title:"Details"},[u(I,{class:"w-4 h-4"})]),t.app.has_readme?(a(),s("button",{key:1,onClick:e[14]||(e[14]=l=>n.$emit("help",t.app)),class:"btn btn-secondary p-2",title:"Help"},[u(k,{class:"w-4 h-4"})])):o("",!0),t.app.is_installed?(a(),s("button",{key:2,onClick:e[15]||(e[15]=l=>n.$emit("uninstall",t.app)),class:"btn btn-danger-outline p-2",title:"Uninstall"},[u(c,{class:"w-4 h-4"})])):o("",!0),t.app.repository==="Registered"?(a(),s("button",{key:3,onClick:e[16]||(e[16]=l=>n.$emit("delete",t.app)),class:"btn btn-danger-outline p-2",title:"Delete Registration"},[u(c,{class:"w-4 h-4"})])):o("",!0)])])],2))}},ct=y(it,[["__scopeId","data-v-f94cdef5"]]);export{ct as A};
frontend/dist/ui_assets/AppConfigModal-D709ImJ6.js+1 −1 renamed@@ -1 +1 @@ -import{q,K as z,c as w,s as f,w as E,n as S,l as s,g as L,e as t,j as K,h as v,m as H,an as j,t as k,d as n,f as J,H as Y,z as r,p as b,L as y,R as D,B as I,F as T,i as O,V as G,J as Q,c8 as W,c9 as X}from"./index-CEXks4lv.js";import{u as Z}from"./admin-Dmx5gjU7.js";import{_ as ee}from"./GenericModal-Br5hR2Sz.js";const te={key:0,class:"flex justify-center items-center p-8"},ae={key:0,class:"p-4 bg-yellow-100 dark:bg-yellow-900/30 text-yellow-800 dark:text-yellow-300 rounded-lg text-sm"},le=["disabled"],se={key:0,class:"border-b border-gray-200 dark:border-gray-700"},oe={class:"-mb-px flex space-x-6"},ne={class:"space-y-4"},ie={class:"toggle-container"},ue={class:"toggle-container"},re={class:"pt-4 mt-4 border-t dark:border-gray-600"},de={key:0,class:"mt-4"},pe={key:1,class:"mt-4 space-y-4"},ve={class:"space-y-5"},ce=["for"],me={class:"mt-1 relative"},be=["onUpdate:modelValue","disabled"],ge=["onUpdate:modelValue","disabled"],fe=["value"],ye={key:2,class:"flex items-center"},_e=["id","onUpdate:modelValue","disabled"],xe=["for"],he={key:3,class:"relative"},we=["type","onUpdate:modelValue","disabled"],ke=["onClick"],Ce={key:0,class:"mt-1 text-xs text-yellow-500"},Se={class:"flex justify-end gap-3"},Ve=["disabled"],Ue={__name:"AppConfigModal",setup(Ae){const _=z(),C=Z(),F=w(()=>_.modalData("appConfig")),d=w(()=>{var o;return(o=F.value)==null?void 0:o.app}),p=f(!1),g=f(null),a=f({}),c=f({}),x=f({}),m=f("system"),V=w(()=>{var o;return((o=d.value)==null?void 0:o.status)==="running"}),h=w(()=>g.value&&g.value.properties&&Object.keys(g.value.properties).length>0),P=w(()=>h.value?Object.entries(g.value.properties).sort(([,o],[,e])=>(o.order||999)-(e.order||999)):[]);E(d,async o=>{if(o){p.value=!0,m.value="system",g.value=null,a.value={},c.value={},x.value={};try{const e=await C.fetchAppConfigSchema(o.id);if(e&&Object.keys(e.properties||{}).length>0){g.value=e;const{config:l,metadata:i}=await C.fetchAppConfig(o.id);a.value={...o,...l},a.value.authentication_type||(a.value.authentication_type="none"),c.value=i}else a.value={...o},a.value.authentication_type||(a.value.authentication_type="none")}catch(e){console.error("Failed to load app configuration:",e),_.addNotification("Could not load app configuration.","error"),_.closeModal("appConfig")}finally{p.value=!1}}},{immediate:!0,deep:!0});function R(o){x.value[o]=!x.value[o]}async function U(){if(d.value){p.value=!0;try{h.value&&await C.updateAppConfig(d.value.id,a.value);const o={name:a.value.name,description:a.value.description,port:a.value.port,autostart:a.value.autostart,allow_openai_api_access:a.value.allow_openai_api_access,authentication_type:a.value.authentication_type,authentication_key:a.value.authentication_key,sso_redirect_uri:a.value.sso_redirect_uri};await C.updateInstalledApp(d.value.id,o),_.closeModal("appConfig")}finally{p.value=!1}}}return(o,e)=>(s(),S(ee,{"modal-name":"appConfig",title:d.value?`Configure: ${d.value.name}`:"Configure App","max-width-class":h.value?"max-w-2xl":"max-w-lg"},{body:L(()=>[p.value?(s(),n("div",te,[J(j,{class:"w-8 h-8 text-gray-500 animate-spin"}),e[11]||(e[11]=t("span",{class:"ml-3 text-gray-500"},"Loading configuration...",-1))])):d.value?(s(),n("form",{key:1,onSubmit:Y(U,["prevent"]),class:"space-y-6"},[V.value?(s(),n("div",ae," This app is currently running. You must stop it before changing its configuration. ")):v("",!0),t("fieldset",{disabled:V.value,class:"space-y-6"},[h.value?(s(),n("div",se,[t("nav",oe,[t("button",{type:"button",onClick:e[0]||(e[0]=l=>m.value="system"),class:b([m.value==="system"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300","whitespace-nowrap py-3 px-1 border-b-2 font-medium text-sm"])},"System Settings",2),t("button",{type:"button",onClick:e[1]||(e[1]=l=>m.value="app"),class:b([m.value==="app"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300","whitespace-nowrap py-3 px-1 border-b-2 font-medium text-sm"])},"App Settings",2)])])):v("",!0),r(t("div",ne,[e[22]||(e[22]=t("h4",{class:"font-semibold text-lg"},"System Settings",-1)),t("div",null,[e[12]||(e[12]=t("label",{for:"app-name",class:"label"},"Name",-1)),r(t("input",{id:"app-name","onUpdate:modelValue":e[2]||(e[2]=l=>a.value.name=l),type:"text",class:"input-field mt-1"},null,512),[[y,a.value.name]])]),t("div",null,[e[13]||(e[13]=t("label",{for:"app-desc",class:"label"},"Description",-1)),r(t("textarea",{id:"app-desc","onUpdate:modelValue":e[3]||(e[3]=l=>a.value.description=l),rows:"3",class:"input-field mt-1"},null,512),[[y,a.value.description]])]),t("div",null,[e[14]||(e[14]=t("label",{for:"app-port",class:"label"},"Port Number",-1)),r(t("input",{id:"app-port","onUpdate:modelValue":e[4]||(e[4]=l=>a.value.port=l),type:"number",min:"1025",max:"65535",required:"",class:"input-field mt-1"},null,512),[[y,a.value.port,void 0,{number:!0}]])]),t("div",ie,[e[15]||(e[15]=t("span",{class:"toggle-label"},"Start on System Startup",-1)),t("button",{onClick:e[5]||(e[5]=l=>a.value.autostart=!a.value.autostart),type:"button",class:b([a.value.autostart?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","toggle-switch"])},[t("span",{class:b([a.value.autostart?"translate-x-5":"translate-x-0","toggle-knob"])},null,2)],2)]),t("div",ue,[e[16]||(e[16]=t("span",{class:"toggle-label"},"Allow OpenAI API Access",-1)),t("button",{onClick:e[6]||(e[6]=l=>a.value.allow_openai_api_access=!a.value.allow_openai_api_access),type:"button",class:b([a.value.allow_openai_api_access?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","toggle-switch"])},[t("span",{class:b([a.value.allow_openai_api_access?"translate-x-5":"translate-x-0","toggle-knob"])},null,2)],2)]),t("div",re,[e[21]||(e[21]=t("h4",{class:"font-semibold text-lg"},"Authentication",-1)),t("div",null,[e[18]||(e[18]=t("label",{for:"service-auth-type",class:"label"},"Authentication Type",-1)),r(t("select",{id:"service-auth-type","onUpdate:modelValue":e[7]||(e[7]=l=>a.value.authentication_type=l),class:"input-field"},e[17]||(e[17]=[t("option",{value:"none"},"None",-1),t("option",{value:"bearer"},"Bearer Token",-1),t("option",{value:"lollms_sso"},"LoLLMs SSO",-1)]),512),[[D,a.value.authentication_type]])]),a.value.authentication_type==="bearer"?(s(),n("div",de,[e[19]||(e[19]=t("label",{for:"service-auth-key",class:"label"},"Authentication Key",-1)),r(t("input",{id:"service-auth-key","onUpdate:modelValue":e[8]||(e[8]=l=>a.value.authentication_key=l),type:"password",class:"input-field",placeholder:"Enter Bearer token"},null,512),[[y,a.value.authentication_key]])])):v("",!0),a.value.authentication_type==="lollms_sso"?(s(),n("div",pe,[t("div",null,[e[20]||(e[20]=t("label",{for:"sso-redirect-uri",class:"label"},"Redirect URI",-1)),r(t("input",{id:"sso-redirect-uri","onUpdate:modelValue":e[9]||(e[9]=l=>a.value.sso_redirect_uri=l),type:"url",class:"input-field",placeholder:"e.g., https://myapp.com/callback"},null,512),[[y,a.value.sso_redirect_uri]])])])):v("",!0)])],512),[[I,m.value==="system"]]),r(t("div",ve,[e[23]||(e[23]=t("h4",{class:"font-semibold text-lg"},"App Settings",-1)),(s(!0),n(T,null,O(P.value,([l,i])=>{var A,M,$,N,B;return s(),n("div",{key:l},[t("label",{for:`config-${l}`,class:"block text-sm font-medium"},k(i.title||l),9,ce),t("div",me,[i.format==="multiline"?r((s(),n("textarea",{key:0,"onUpdate:modelValue":u=>a.value[l]=u,class:"input-field h-24",disabled:(A=c.value.env_overrides)==null?void 0:A.includes(l)},null,8,be)),[[y,a.value[l]]]):i.enum?r((s(),n("select",{key:1,"onUpdate:modelValue":u=>a.value[l]=u,class:"input-field",disabled:(M=c.value.env_overrides)==null?void 0:M.includes(l)},[(s(!0),n(T,null,O(i.enum,u=>(s(),n("option",{key:u,value:u},k(u),9,fe))),128))],8,ge)),[[D,a.value[l]]]):i.type==="boolean"?(s(),n("div",ye,[r(t("input",{id:`config-${l}`,type:"checkbox","onUpdate:modelValue":u=>a.value[l]=u,class:"h-4 w-4 rounded",disabled:($=c.value.env_overrides)==null?void 0:$.includes(l)},null,8,_e),[[G,a.value[l]]]),t("label",{for:`config-${l}`,class:"ml-2 text-sm"},k(i.description),9,xe)])):(s(),n("div",he,[r(t("input",{type:i.sensitive&&!x.value[l]?"password":i.type==="integer"?"number":"text","onUpdate:modelValue":u=>a.value[l]=u,class:b(["input-field",{"pr-10":i.sensitive}]),disabled:(N=c.value.env_overrides)==null?void 0:N.includes(l)},null,10,we),[[Q,a.value[l]]]),i.sensitive?(s(),n("button",{key:0,type:"button",onClick:u=>R(l),class:"absolute inset-y-0 right-0 pr-3 flex items-center"},[x.value[l]?(s(),S(W,{key:0,class:"h-5 w-5"})):(s(),S(X,{key:1,class:"h-5 w-5"}))],8,ke)):v("",!0)]))]),(B=c.value.env_overrides)!=null&&B.includes(l)?(s(),n("p",Ce,"Managed by '"+k(i.envVar)+"' environment variable.",1)):v("",!0)])}),128))],512),[[I,m.value==="app"&&h.value]])],8,le)],32)):v("",!0)]),footer:L(()=>[t("div",Se,[t("button",{onClick:e[10]||(e[10]=l=>K(_).closeModal("appConfig")),type:"button",class:"btn btn-secondary"},"Cancel"),t("button",{onClick:U,type:"button",class:"btn btn-primary",disabled:p.value||V.value},[p.value?(s(),S(j,{key:0,class:"w-5 h-5 mr-2 animate-spin"})):v("",!0),H(" "+k(p.value?"Saving...":"Save Changes"),1)],8,Ve)])]),_:1},8,["title","max-width-class"]))}},Be=q(Ue,[["__scopeId","data-v-456e7da6"]]);export{Be as default}; +import{q,K as z,c as w,s as f,w as E,n as S,l as s,g as L,e as t,j as K,h as v,m as H,an as j,t as k,d as n,f as J,H as X,z as r,p as b,L as y,X as D,B as I,F as T,i as O,Z as Y,J as Z,c8 as G,c9 as Q}from"./index-BBRgbnZQ.js";import{u as W}from"./admin-CwLQr1mG.js";import{_ as ee}from"./GenericModal-eXiOHk6I.js";const te={key:0,class:"flex justify-center items-center p-8"},ae={key:0,class:"p-4 bg-yellow-100 dark:bg-yellow-900/30 text-yellow-800 dark:text-yellow-300 rounded-lg text-sm"},le=["disabled"],se={key:0,class:"border-b border-gray-200 dark:border-gray-700"},oe={class:"-mb-px flex space-x-6"},ne={class:"space-y-4"},ie={class:"toggle-container"},ue={class:"toggle-container"},re={class:"pt-4 mt-4 border-t dark:border-gray-600"},de={key:0,class:"mt-4"},pe={key:1,class:"mt-4 space-y-4"},ve={class:"space-y-5"},ce=["for"],me={class:"mt-1 relative"},be=["onUpdate:modelValue","disabled"],ge=["onUpdate:modelValue","disabled"],fe=["value"],ye={key:2,class:"flex items-center"},_e=["id","onUpdate:modelValue","disabled"],xe=["for"],he={key:3,class:"relative"},we=["type","onUpdate:modelValue","disabled"],ke=["onClick"],Ce={key:0,class:"mt-1 text-xs text-yellow-500"},Se={class:"flex justify-end gap-3"},Ve=["disabled"],Ue={__name:"AppConfigModal",setup(Ae){const _=z(),C=W(),F=w(()=>_.modalData("appConfig")),d=w(()=>{var o;return(o=F.value)==null?void 0:o.app}),p=f(!1),g=f(null),a=f({}),c=f({}),x=f({}),m=f("system"),V=w(()=>{var o;return((o=d.value)==null?void 0:o.status)==="running"}),h=w(()=>g.value&&g.value.properties&&Object.keys(g.value.properties).length>0),P=w(()=>h.value?Object.entries(g.value.properties).sort(([,o],[,e])=>(o.order||999)-(e.order||999)):[]);E(d,async o=>{if(o){p.value=!0,m.value="system",g.value=null,a.value={},c.value={},x.value={};try{const e=await C.fetchAppConfigSchema(o.id);if(e&&Object.keys(e.properties||{}).length>0){g.value=e;const{config:l,metadata:i}=await C.fetchAppConfig(o.id);a.value={...o,...l},a.value.authentication_type||(a.value.authentication_type="none"),c.value=i}else a.value={...o},a.value.authentication_type||(a.value.authentication_type="none")}catch(e){console.error("Failed to load app configuration:",e),_.addNotification("Could not load app configuration.","error"),_.closeModal("appConfig")}finally{p.value=!1}}},{immediate:!0,deep:!0});function R(o){x.value[o]=!x.value[o]}async function U(){if(d.value){p.value=!0;try{h.value&&await C.updateAppConfig(d.value.id,a.value);const o={name:a.value.name,description:a.value.description,port:a.value.port,autostart:a.value.autostart,allow_openai_api_access:a.value.allow_openai_api_access,authentication_type:a.value.authentication_type,authentication_key:a.value.authentication_key,sso_redirect_uri:a.value.sso_redirect_uri};await C.updateInstalledApp(d.value.id,o),_.closeModal("appConfig")}finally{p.value=!1}}}return(o,e)=>(s(),S(ee,{"modal-name":"appConfig",title:d.value?`Configure: ${d.value.name}`:"Configure App","max-width-class":h.value?"max-w-2xl":"max-w-lg"},{body:L(()=>[p.value?(s(),n("div",te,[J(j,{class:"w-8 h-8 text-gray-500 animate-spin"}),e[11]||(e[11]=t("span",{class:"ml-3 text-gray-500"},"Loading configuration...",-1))])):d.value?(s(),n("form",{key:1,onSubmit:X(U,["prevent"]),class:"space-y-6"},[V.value?(s(),n("div",ae," This app is currently running. You must stop it before changing its configuration. ")):v("",!0),t("fieldset",{disabled:V.value,class:"space-y-6"},[h.value?(s(),n("div",se,[t("nav",oe,[t("button",{type:"button",onClick:e[0]||(e[0]=l=>m.value="system"),class:b([m.value==="system"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300","whitespace-nowrap py-3 px-1 border-b-2 font-medium text-sm"])},"System Settings",2),t("button",{type:"button",onClick:e[1]||(e[1]=l=>m.value="app"),class:b([m.value==="app"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300","whitespace-nowrap py-3 px-1 border-b-2 font-medium text-sm"])},"App Settings",2)])])):v("",!0),r(t("div",ne,[e[22]||(e[22]=t("h4",{class:"font-semibold text-lg"},"System Settings",-1)),t("div",null,[e[12]||(e[12]=t("label",{for:"app-name",class:"label"},"Name",-1)),r(t("input",{id:"app-name","onUpdate:modelValue":e[2]||(e[2]=l=>a.value.name=l),type:"text",class:"input-field mt-1"},null,512),[[y,a.value.name]])]),t("div",null,[e[13]||(e[13]=t("label",{for:"app-desc",class:"label"},"Description",-1)),r(t("textarea",{id:"app-desc","onUpdate:modelValue":e[3]||(e[3]=l=>a.value.description=l),rows:"3",class:"input-field mt-1"},null,512),[[y,a.value.description]])]),t("div",null,[e[14]||(e[14]=t("label",{for:"app-port",class:"label"},"Port Number",-1)),r(t("input",{id:"app-port","onUpdate:modelValue":e[4]||(e[4]=l=>a.value.port=l),type:"number",min:"1025",max:"65535",required:"",class:"input-field mt-1"},null,512),[[y,a.value.port,void 0,{number:!0}]])]),t("div",ie,[e[15]||(e[15]=t("span",{class:"toggle-label"},"Start on System Startup",-1)),t("button",{onClick:e[5]||(e[5]=l=>a.value.autostart=!a.value.autostart),type:"button",class:b([a.value.autostart?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","toggle-switch"])},[t("span",{class:b([a.value.autostart?"translate-x-5":"translate-x-0","toggle-knob"])},null,2)],2)]),t("div",ue,[e[16]||(e[16]=t("span",{class:"toggle-label"},"Allow OpenAI API Access",-1)),t("button",{onClick:e[6]||(e[6]=l=>a.value.allow_openai_api_access=!a.value.allow_openai_api_access),type:"button",class:b([a.value.allow_openai_api_access?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","toggle-switch"])},[t("span",{class:b([a.value.allow_openai_api_access?"translate-x-5":"translate-x-0","toggle-knob"])},null,2)],2)]),t("div",re,[e[21]||(e[21]=t("h4",{class:"font-semibold text-lg"},"Authentication",-1)),t("div",null,[e[18]||(e[18]=t("label",{for:"service-auth-type",class:"label"},"Authentication Type",-1)),r(t("select",{id:"service-auth-type","onUpdate:modelValue":e[7]||(e[7]=l=>a.value.authentication_type=l),class:"input-field"},e[17]||(e[17]=[t("option",{value:"none"},"None",-1),t("option",{value:"bearer"},"Bearer Token",-1),t("option",{value:"lollms_sso"},"LoLLMs SSO",-1)]),512),[[D,a.value.authentication_type]])]),a.value.authentication_type==="bearer"?(s(),n("div",de,[e[19]||(e[19]=t("label",{for:"service-auth-key",class:"label"},"Authentication Key",-1)),r(t("input",{id:"service-auth-key","onUpdate:modelValue":e[8]||(e[8]=l=>a.value.authentication_key=l),type:"password",class:"input-field",placeholder:"Enter Bearer token"},null,512),[[y,a.value.authentication_key]])])):v("",!0),a.value.authentication_type==="lollms_sso"?(s(),n("div",pe,[t("div",null,[e[20]||(e[20]=t("label",{for:"sso-redirect-uri",class:"label"},"Redirect URI",-1)),r(t("input",{id:"sso-redirect-uri","onUpdate:modelValue":e[9]||(e[9]=l=>a.value.sso_redirect_uri=l),type:"url",class:"input-field",placeholder:"e.g., https://myapp.com/callback"},null,512),[[y,a.value.sso_redirect_uri]])])])):v("",!0)])],512),[[I,m.value==="system"]]),r(t("div",ve,[e[23]||(e[23]=t("h4",{class:"font-semibold text-lg"},"App Settings",-1)),(s(!0),n(T,null,O(P.value,([l,i])=>{var A,M,$,N,B;return s(),n("div",{key:l},[t("label",{for:`config-${l}`,class:"block text-sm font-medium"},k(i.title||l),9,ce),t("div",me,[i.format==="multiline"?r((s(),n("textarea",{key:0,"onUpdate:modelValue":u=>a.value[l]=u,class:"input-field h-24",disabled:(A=c.value.env_overrides)==null?void 0:A.includes(l)},null,8,be)),[[y,a.value[l]]]):i.enum?r((s(),n("select",{key:1,"onUpdate:modelValue":u=>a.value[l]=u,class:"input-field",disabled:(M=c.value.env_overrides)==null?void 0:M.includes(l)},[(s(!0),n(T,null,O(i.enum,u=>(s(),n("option",{key:u,value:u},k(u),9,fe))),128))],8,ge)),[[D,a.value[l]]]):i.type==="boolean"?(s(),n("div",ye,[r(t("input",{id:`config-${l}`,type:"checkbox","onUpdate:modelValue":u=>a.value[l]=u,class:"h-4 w-4 rounded",disabled:($=c.value.env_overrides)==null?void 0:$.includes(l)},null,8,_e),[[Y,a.value[l]]]),t("label",{for:`config-${l}`,class:"ml-2 text-sm"},k(i.description),9,xe)])):(s(),n("div",he,[r(t("input",{type:i.sensitive&&!x.value[l]?"password":i.type==="integer"?"number":"text","onUpdate:modelValue":u=>a.value[l]=u,class:b(["input-field",{"pr-10":i.sensitive}]),disabled:(N=c.value.env_overrides)==null?void 0:N.includes(l)},null,10,we),[[Z,a.value[l]]]),i.sensitive?(s(),n("button",{key:0,type:"button",onClick:u=>R(l),class:"absolute inset-y-0 right-0 pr-3 flex items-center"},[x.value[l]?(s(),S(G,{key:0,class:"h-5 w-5"})):(s(),S(Q,{key:1,class:"h-5 w-5"}))],8,ke)):v("",!0)]))]),(B=c.value.env_overrides)!=null&&B.includes(l)?(s(),n("p",Ce,"Managed by '"+k(i.envVar)+"' environment variable.",1)):v("",!0)])}),128))],512),[[I,m.value==="app"&&h.value]])],8,le)],32)):v("",!0)]),footer:L(()=>[t("div",Se,[t("button",{onClick:e[10]||(e[10]=l=>K(_).closeModal("appConfig")),type:"button",class:"btn btn-secondary"},"Cancel"),t("button",{onClick:U,type:"button",class:"btn btn-primary",disabled:p.value||V.value},[p.value?(s(),S(j,{key:0,class:"w-5 h-5 mr-2 animate-spin"})):v("",!0),H(" "+k(p.value?"Saving...":"Save Changes"),1)],8,Ve)])]),_:1},8,["title","max-width-class"]))}},Be=q(Ue,[["__scopeId","data-v-456e7da6"]]);export{Be as default};
frontend/dist/ui_assets/AppDetailsModal-CFNfol-J.js+1 −1 renamed@@ -1 +1 @@ -import{q as b,d as l,l as t,e as a,K as k,c,n as h,g as x,j as w,h as n,t as u,F as d,i as v,f as D,m as g}from"./index-CEXks4lv.js";import{_ as C}from"./GenericModal-Br5hR2Sz.js";const A={},V={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function B(m,i){return t(),l("svg",V,i[0]||(i[0]=[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9.568 3H5.25A2.25 2.25 0 0 0 3 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 0 0 5.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 0 0 9.568 3Z"},null,-1),a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 6h.008v.008H6V6Z"},null,-1)]))}const L=b(A,[["render",B]]),M={key:0,class:"space-y-6"},j={class:"flex items-start gap-4"},N=["src"],$={class:"flex-grow"},F={class:"text-lg text-gray-600 dark:text-gray-300"},S={key:0,class:"flex flex-wrap gap-2"},H={key:1,class:"grid grid-cols-1 sm:grid-cols-2 gap-x-4 gap-y-2 text-sm"},I={class:"font-semibold w-28 flex-shrink-0 text-gray-800 dark:text-gray-200"},T=["title"],U={key:2,class:"space-y-2"},Z={class:"list-disc list-inside text-sm space-y-1"},q=["href"],E={key:3,class:"space-y-2"},K={class:"list-disc list-inside text-sm space-y-1 text-gray-600 dark:text-gray-400"},R={key:4,class:"p-3 bg-yellow-50 dark:bg-yellow-900/20 border-l-4 border-yellow-400 text-yellow-800 dark:text-yellow-300 text-sm"},J={__name:"AppDetailsModal",setup(m){const i=k(),y=c(()=>i.modalData("appDetails")),e=c(()=>{var o;return(o=y.value)==null?void 0:o.app}),p=c(()=>e.value?[{label:"Author",value:e.value.author},{label:"Version",value:e.value.version},{label:"Category",value:e.value.category},{label:"Creation Date",value:e.value.creation_date},{label:"Last Updated",value:e.value.last_update_date},{label:"License",value:e.value.license},{label:"Model",value:e.value.model}].filter(o=>o.value):[]),_=c(()=>e.value?[{label:"Repository",value:e.value.repo_url},{label:"Documentation",value:e.value.documentation}].filter(o=>o.value):[]);return(o,r)=>(t(),h(C,{"modal-name":"appDetails",title:e.value?e.value.name:"App Details","max-width-class":"max-w-2xl"},{body:x(()=>[e.value?(t(),l("div",M,[a("div",j,[e.value.icon?(t(),l("img",{key:0,src:e.value.icon,class:"h-20 w-20 rounded-lg object-cover flex-shrink-0",alt:"App Icon"},null,8,N)):n("",!0),a("div",$,[a("p",F,u(e.value.description),1)])]),e.value.tags&&e.value.tags.length?(t(),l("div",S,[(t(!0),l(d,null,v(e.value.tags,s=>(t(),l("span",{key:s,class:"inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-blue-100 text-blue-800 dark:bg-blue-900/50 dark:text-blue-300"},[D(L,{class:"w-3 h-3 mr-1.5"}),g(" "+u(s),1)]))),128))])):n("",!0),p.value.length?(t(),l("div",H,[(t(!0),l(d,null,v(p.value,s=>(t(),l("div",{key:s.label,class:"flex"},[a("span",I,u(s.label)+":",1),a("span",{class:"text-gray-600 dark:text-gray-400 truncate",title:s.value},u(s.value),9,T)]))),128))])):n("",!0),_.value.length?(t(),l("div",U,[r[1]||(r[1]=a("h4",{class:"font-semibold text-gray-800 dark:text-gray-200"},"Links",-1)),a("ul",Z,[(t(!0),l(d,null,v(_.value,s=>(t(),l("li",{key:s.label},[a("a",{href:s.value,target:"_blank",rel:"noopener noreferrer",class:"text-blue-600 hover:underline dark:text-blue-400"},u(s.label),9,q)]))),128))])])):n("",!0),e.value.features&&e.value.features.length?(t(),l("div",E,[r[2]||(r[2]=a("h4",{class:"font-semibold text-gray-800 dark:text-gray-200"},"Features",-1)),a("ul",K,[(t(!0),l(d,null,v(e.value.features,(s,f)=>(t(),l("li",{key:f},u(s),1))),128))])])):n("",!0),e.value.disclaimer?(t(),l("div",R,[a("p",null,[r[3]||(r[3]=a("strong",{class:"font-semibold"},"Disclaimer:",-1)),g(" "+u(e.value.disclaimer),1)])])):n("",!0)])):n("",!0)]),footer:x(()=>[a("button",{onClick:r[0]||(r[0]=s=>w(i).closeModal("appDetails")),class:"btn btn-primary"},"Close")]),_:1},8,["title"]))}};export{J as default}; +import{q as b,d as l,l as t,e as a,K as k,c,n as h,g as x,j as w,h as n,t as u,F as d,i as v,f as D,m as g}from"./index-BBRgbnZQ.js";import{_ as C}from"./GenericModal-eXiOHk6I.js";const A={},V={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function B(m,i){return t(),l("svg",V,i[0]||(i[0]=[a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9.568 3H5.25A2.25 2.25 0 0 0 3 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 0 0 5.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 0 0 9.568 3Z"},null,-1),a("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 6h.008v.008H6V6Z"},null,-1)]))}const L=b(A,[["render",B]]),M={key:0,class:"space-y-6"},j={class:"flex items-start gap-4"},N=["src"],$={class:"flex-grow"},F={class:"text-lg text-gray-600 dark:text-gray-300"},S={key:0,class:"flex flex-wrap gap-2"},H={key:1,class:"grid grid-cols-1 sm:grid-cols-2 gap-x-4 gap-y-2 text-sm"},I={class:"font-semibold w-28 flex-shrink-0 text-gray-800 dark:text-gray-200"},T=["title"],U={key:2,class:"space-y-2"},Z={class:"list-disc list-inside text-sm space-y-1"},q=["href"],E={key:3,class:"space-y-2"},K={class:"list-disc list-inside text-sm space-y-1 text-gray-600 dark:text-gray-400"},R={key:4,class:"p-3 bg-yellow-50 dark:bg-yellow-900/20 border-l-4 border-yellow-400 text-yellow-800 dark:text-yellow-300 text-sm"},J={__name:"AppDetailsModal",setup(m){const i=k(),y=c(()=>i.modalData("appDetails")),e=c(()=>{var o;return(o=y.value)==null?void 0:o.app}),p=c(()=>e.value?[{label:"Author",value:e.value.author},{label:"Version",value:e.value.version},{label:"Category",value:e.value.category},{label:"Creation Date",value:e.value.creation_date},{label:"Last Updated",value:e.value.last_update_date},{label:"License",value:e.value.license},{label:"Model",value:e.value.model}].filter(o=>o.value):[]),_=c(()=>e.value?[{label:"Repository",value:e.value.repo_url},{label:"Documentation",value:e.value.documentation}].filter(o=>o.value):[]);return(o,r)=>(t(),h(C,{"modal-name":"appDetails",title:e.value?e.value.name:"App Details","max-width-class":"max-w-2xl"},{body:x(()=>[e.value?(t(),l("div",M,[a("div",j,[e.value.icon?(t(),l("img",{key:0,src:e.value.icon,class:"h-20 w-20 rounded-lg object-cover flex-shrink-0",alt:"App Icon"},null,8,N)):n("",!0),a("div",$,[a("p",F,u(e.value.description),1)])]),e.value.tags&&e.value.tags.length?(t(),l("div",S,[(t(!0),l(d,null,v(e.value.tags,s=>(t(),l("span",{key:s,class:"inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-blue-100 text-blue-800 dark:bg-blue-900/50 dark:text-blue-300"},[D(L,{class:"w-3 h-3 mr-1.5"}),g(" "+u(s),1)]))),128))])):n("",!0),p.value.length?(t(),l("div",H,[(t(!0),l(d,null,v(p.value,s=>(t(),l("div",{key:s.label,class:"flex"},[a("span",I,u(s.label)+":",1),a("span",{class:"text-gray-600 dark:text-gray-400 truncate",title:s.value},u(s.value),9,T)]))),128))])):n("",!0),_.value.length?(t(),l("div",U,[r[1]||(r[1]=a("h4",{class:"font-semibold text-gray-800 dark:text-gray-200"},"Links",-1)),a("ul",Z,[(t(!0),l(d,null,v(_.value,s=>(t(),l("li",{key:s.label},[a("a",{href:s.value,target:"_blank",rel:"noopener noreferrer",class:"text-blue-600 hover:underline dark:text-blue-400"},u(s.label),9,q)]))),128))])])):n("",!0),e.value.features&&e.value.features.length?(t(),l("div",E,[r[2]||(r[2]=a("h4",{class:"font-semibold text-gray-800 dark:text-gray-200"},"Features",-1)),a("ul",K,[(t(!0),l(d,null,v(e.value.features,(s,f)=>(t(),l("li",{key:f},u(s),1))),128))])])):n("",!0),e.value.disclaimer?(t(),l("div",R,[a("p",null,[r[3]||(r[3]=a("strong",{class:"font-semibold"},"Disclaimer:",-1)),g(" "+u(e.value.disclaimer),1)])])):n("",!0)])):n("",!0)]),footer:x(()=>[a("button",{onClick:r[0]||(r[0]=s=>w(i).closeModal("appDetails")),class:"btn btn-primary"},"Close")]),_:1},8,["title"]))}};export{J as default};
frontend/dist/ui_assets/AppEnvConfigModal-CXxiqowD.js+1 −1 renamed@@ -1,2 +1,2 @@ -import{K as C,c as v,s as r,w as _,n as f,l as u,g as m,e as s,j as w,h as g,m as E,an as h,t as S,d as k,z as A,f as M,L as N}from"./index-CEXks4lv.js";import{u as V}from"./admin-Dmx5gjU7.js";import{_ as B}from"./GenericModal-Br5hR2Sz.js";const $={class:"relative bg-gray-900 text-white font-mono text-sm p-4 rounded-md h-96"},j={key:0,class:"absolute inset-0 bg-gray-900/80 flex items-center justify-center"},D={class:"flex justify-end gap-3"},L=["disabled"],I={__name:"AppEnvConfigModal",setup(z){const i=C(),c=V(),y=v(()=>i.modalData("appEnvConfig")),a=v(()=>{var e;return(e=y.value)==null?void 0:e.app}),t=r(""),o=r(!1),l=r(!1);async function b(){if(!(!a.value||o.value)){o.value=!0;try{t.value=await c.fetchAppEnv(a.value.id)}catch(e){t.value=`# Failed to load .env file: +import{K as C,c as v,s as r,w as _,n as f,l as u,g as m,e as s,j as w,h as g,m as E,an as h,t as S,d as k,z as A,f as M,L as N}from"./index-BBRgbnZQ.js";import{u as V}from"./admin-CwLQr1mG.js";import{_ as B}from"./GenericModal-eXiOHk6I.js";const $={class:"relative bg-gray-900 text-white font-mono text-sm p-4 rounded-md h-96"},j={key:0,class:"absolute inset-0 bg-gray-900/80 flex items-center justify-center"},D={class:"flex justify-end gap-3"},L=["disabled"],I={__name:"AppEnvConfigModal",setup(z){const i=C(),c=V(),y=v(()=>i.modalData("appEnvConfig")),a=v(()=>{var e;return(e=y.value)==null?void 0:e.app}),t=r(""),o=r(!1),l=r(!1);async function b(){if(!(!a.value||o.value)){o.value=!0;try{t.value=await c.fetchAppEnv(a.value.id)}catch(e){t.value=`# Failed to load .env file: # ${e.message}`}finally{o.value=!1}}}_(()=>i.isModalOpen("appEnvConfig"),e=>{e&&a.value?b():t.value=""},{immediate:!0});async function x(){if(a.value){l.value=!0;try{await c.updateAppEnv(a.value.id,t.value),i.closeModal("appEnvConfig")}catch{}finally{l.value=!1}}}return(e,n)=>{var p;return u(),f(B,{modalName:"appEnvConfig",title:`.env Configuration: ${((p=a.value)==null?void 0:p.name)||""}`,maxWidthClass:"max-w-4xl"},{body:m(()=>[n[2]||(n[2]=s("p",{class:"text-sm text-gray-600 dark:text-gray-400 mb-4"}," Edit the environment variables for this application. Changes will be applied on the next start of the application. ",-1)),s("div",$,[o.value?(u(),k("div",j,[M(h,{class:"w-8 h-8"})])):g("",!0),A(s("textarea",{"onUpdate:modelValue":n[0]||(n[0]=d=>t.value=d),class:"w-full h-full bg-transparent border-none focus:ring-0 resize-none p-0 text-sm",placeholder:"Loading .env content...",spellcheck:"false"},null,512),[[N,t.value]])])]),footer:m(()=>[s("div",D,[s("button",{onClick:n[1]||(n[1]=d=>w(i).closeModal("appEnvConfig")),type:"button",class:"btn btn-secondary"},"Cancel"),s("button",{onClick:x,type:"button",class:"btn btn-primary",disabled:o.value||l.value},[l.value?(u(),f(h,{key:0,class:"w-5 h-5 mr-2"})):g("",!0),E(" "+S(l.value?"Saving...":"Save Changes"),1)],8,L)])]),_:1},8,["title"])}}};export{I as default};
frontend/dist/ui_assets/AppInstallModal-Cw_WRv3_.js+1 −0 added@@ -0,0 +1 @@ +import{K as T,c as k,s as u,w as P,n as f,l as n,g as N,e as t,j as L,h as y,m as h,an as A,t as g,d as x,H as U,z as w,L as M,p as _,ao as $,ap as B,X as j}from"./index-BBRgbnZQ.js";import{u as q}from"./admin-CwLQr1mG.js";import{_ as D}from"./GenericModal-eXiOHk6I.js";const O={class:"text-sm text-gray-600 dark:text-gray-300"},R={class:"font-semibold text-gray-900 dark:text-white"},z={class:"mt-1 flex gap-2"},Z=["disabled"],E={key:1},H={class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},K={class:"pt-4 mt-4 border-t dark:border-gray-600"},X={key:0,class:"mt-4"},F={class:"flex justify-end gap-3"},G=["disabled"],ee={__name:"AppInstallModal",setup(J){const d=T(),m=q(),S=k(()=>d.modalData("appInstall")),o=k(()=>{var a;return(a=S.value)==null?void 0:a.app}),C=k(()=>{var a;return(a=S.value)==null?void 0:a.type}),s=u(null),p=u(!1),r=u("none"),b=u(""),v=u(!1),c=u(!1),l=u("unchecked");P(o,async a=>{if(a){s.value=null,l.value="unchecked",p.value=a.autostart??!1,r.value=a.authentication_type||"none",b.value=a.sso_redirect_uri||"",v.value=!1,c.value=!0;try{const e=await m.fetchNextAvailablePort();s.value=e,l.value="available"}catch{s.value=9601}finally{c.value=!1}}}),P(s,()=>{l.value="unchecked"});async function V(){if(!s.value){d.addNotification("Please enter a port number.","warning");return}c.value=!0;try{await m.fetchNextAvailablePort(s.value)===s.value?l.value="available":l.value="unavailable"}catch{l.value="unavailable"}finally{c.value=!1}}async function I(){if(!o.value)return;if(l.value!=="available"){d.addNotification("Please verify an available port before installing.","warning");return}v.value=!0;const a={repository:o.value.repository,folder_name:o.value.folder_name,port:s.value,autostart:p.value,authentication_type:r.value,sso_redirect_uri:r.value==="lollms_sso"?b.value:null};try{C.value==="mcps"?await m.installZooMcp(a):await m.installZooApp(a),r.value==="lollms_sso"&&d.addNotification("SSO enabled for new app. A server reboot is required for it to work correctly.","warning",15e3),d.closeModal("appInstall")}catch{}finally{v.value=!1}}return(a,e)=>(n(),f(D,{"modal-name":"appInstall",title:o.value?`Install ${C.value==="mcps"?"MCP":"App"}: ${o.value.name}`:"Install","max-width-class":"max-w-lg"},{body:N(()=>[o.value?(n(),x("form",{key:0,onSubmit:U(I,["prevent"]),class:"space-y-6"},[t("p",O,[e[5]||(e[5]=h(" Configure the installation settings for ")),t("span",R,g(o.value.name),1),e[6]||(e[6]=h(". "))]),t("div",null,[e[7]||(e[7]=t("label",{for:"app-port",class:"block text-sm font-medium"},"Port Number",-1)),t("div",z,[w(t("input",{id:"app-port","onUpdate:modelValue":e[0]||(e[0]=i=>s.value=i),type:"number",min:"1025",max:"65535",required:"",class:"input-field flex-grow",placeholder:"e.g., 9601"},null,512),[[M,s.value,void 0,{number:!0}]]),t("button",{onClick:V,type:"button",class:"btn btn-secondary w-28",disabled:c.value},[c.value?(n(),f(A,{key:0,class:"w-5 h-5 animate-spin"})):(n(),x("span",E,"Verify"))],8,Z)]),l.value!=="unchecked"?(n(),x("div",{key:0,class:_(["mt-2 text-sm flex items-center gap-1.5",l.value==="available"?"text-green-600 dark:text-green-400":"text-red-600 dark:text-red-400"])},[l.value==="available"?(n(),f($,{key:0,class:"w-4 h-4"})):(n(),f(B,{key:1,class:"w-4 h-4"})),t("span",null,"Port "+g(s.value)+" is "+g(l.value)+".",1)],2)):y("",!0)]),t("div",H,[e[8]||(e[8]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Start on System Startup"),t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Automatically launch this item when the main server starts.")],-1)),t("button",{onClick:e[1]||(e[1]=i=>p.value=!p.value),type:"button",class:_([p.value?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[t("span",{class:_([p.value?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),t("div",K,[e[13]||(e[13]=t("h4",{class:"font-semibold text-lg"},"Authentication",-1)),e[14]||(e[14]=t("p",{class:"text-sm text-gray-500 dark:text-gray-400 mb-4"}," Configure how users will access this app. These settings can be changed later. ",-1)),t("div",null,[e[10]||(e[10]=t("label",{for:"install-auth-type",class:"block text-sm font-medium"},"Authentication Type",-1)),w(t("select",{id:"install-auth-type","onUpdate:modelValue":e[2]||(e[2]=i=>r.value=i),class:"input-field mt-1"},e[9]||(e[9]=[t("option",{value:"none"},"None",-1),t("option",{value:"bearer"},"Bearer Token (managed later in config)",-1),t("option",{value:"lollms_sso"},"LoLLMs SSO",-1)]),512),[[j,r.value]])]),r.value==="lollms_sso"?(n(),x("div",X,[e[11]||(e[11]=t("label",{for:"install-sso-redirect-uri",class:"block text-sm font-medium"},"Redirect URI",-1)),w(t("input",{id:"install-sso-redirect-uri","onUpdate:modelValue":e[3]||(e[3]=i=>b.value=i),type:"url",class:"input-field mt-1",placeholder:"e.g., https://myapp.com/callback"},null,512),[[M,b.value]]),e[12]||(e[12]=t("p",{class:"text-xs text-gray-500 mt-1"},"The callback URL registered with the app. A server reboot is required after enabling SSO.",-1))])):y("",!0)])],32)):y("",!0)]),footer:N(()=>[t("div",F,[t("button",{onClick:e[4]||(e[4]=i=>L(d).closeModal("appInstall")),type:"button",class:"btn btn-secondary"},"Cancel"),t("button",{onClick:I,type:"button",class:"btn btn-primary",disabled:v.value||l.value!=="available"},[v.value?(n(),f(A,{key:0,class:"w-5 h-5 mr-2 animate-spin"})):y("",!0),h(" "+g(v.value?"Installing...":"Confirm & Install"),1)],8,G)])]),_:1},8,["title"]))}};export{ee as default};
frontend/dist/ui_assets/AppInstallModal-DyU0gdHB.js+0 −1 removed@@ -1 +0,0 @@ -import{K as T,c as k,s as u,w as P,n as f,l as n,g as N,e as t,j as L,h as y,m as h,an as A,t as g,d as x,H as U,z as w,L as M,p as _,ao as $,ap as B,R}from"./index-CEXks4lv.js";import{u as j}from"./admin-Dmx5gjU7.js";import{_ as q}from"./GenericModal-Br5hR2Sz.js";const D={class:"text-sm text-gray-600 dark:text-gray-300"},O={class:"font-semibold text-gray-900 dark:text-white"},z={class:"mt-1 flex gap-2"},Z=["disabled"],E={key:1},H={class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},K={class:"pt-4 mt-4 border-t dark:border-gray-600"},F={key:0,class:"mt-4"},G={class:"flex justify-end gap-3"},J=["disabled"],ee={__name:"AppInstallModal",setup(Q){const d=T(),m=j(),S=k(()=>d.modalData("appInstall")),o=k(()=>{var a;return(a=S.value)==null?void 0:a.app}),C=k(()=>{var a;return(a=S.value)==null?void 0:a.type}),s=u(null),p=u(!1),r=u("none"),b=u(""),v=u(!1),c=u(!1),l=u("unchecked");P(o,async a=>{if(a){s.value=null,l.value="unchecked",p.value=a.autostart??!1,r.value=a.authentication_type||"none",b.value=a.sso_redirect_uri||"",v.value=!1,c.value=!0;try{const e=await m.fetchNextAvailablePort();s.value=e,l.value="available"}catch{s.value=9601}finally{c.value=!1}}}),P(s,()=>{l.value="unchecked"});async function V(){if(!s.value){d.addNotification("Please enter a port number.","warning");return}c.value=!0;try{await m.fetchNextAvailablePort(s.value)===s.value?l.value="available":l.value="unavailable"}catch{l.value="unavailable"}finally{c.value=!1}}async function I(){if(!o.value)return;if(l.value!=="available"){d.addNotification("Please verify an available port before installing.","warning");return}v.value=!0;const a={repository:o.value.repository,folder_name:o.value.folder_name,port:s.value,autostart:p.value,authentication_type:r.value,sso_redirect_uri:r.value==="lollms_sso"?b.value:null};try{C.value==="mcps"?await m.installZooMcp(a):await m.installZooApp(a),r.value==="lollms_sso"&&d.addNotification("SSO enabled for new app. A server reboot is required for it to work correctly.","warning",15e3),d.closeModal("appInstall")}catch{}finally{v.value=!1}}return(a,e)=>(n(),f(q,{"modal-name":"appInstall",title:o.value?`Install ${C.value==="mcps"?"MCP":"App"}: ${o.value.name}`:"Install","max-width-class":"max-w-lg"},{body:N(()=>[o.value?(n(),x("form",{key:0,onSubmit:U(I,["prevent"]),class:"space-y-6"},[t("p",D,[e[5]||(e[5]=h(" Configure the installation settings for ")),t("span",O,g(o.value.name),1),e[6]||(e[6]=h(". "))]),t("div",null,[e[7]||(e[7]=t("label",{for:"app-port",class:"block text-sm font-medium"},"Port Number",-1)),t("div",z,[w(t("input",{id:"app-port","onUpdate:modelValue":e[0]||(e[0]=i=>s.value=i),type:"number",min:"1025",max:"65535",required:"",class:"input-field flex-grow",placeholder:"e.g., 9601"},null,512),[[M,s.value,void 0,{number:!0}]]),t("button",{onClick:V,type:"button",class:"btn btn-secondary w-28",disabled:c.value},[c.value?(n(),f(A,{key:0,class:"w-5 h-5 animate-spin"})):(n(),x("span",E,"Verify"))],8,Z)]),l.value!=="unchecked"?(n(),x("div",{key:0,class:_(["mt-2 text-sm flex items-center gap-1.5",l.value==="available"?"text-green-600 dark:text-green-400":"text-red-600 dark:text-red-400"])},[l.value==="available"?(n(),f($,{key:0,class:"w-4 h-4"})):(n(),f(B,{key:1,class:"w-4 h-4"})),t("span",null,"Port "+g(s.value)+" is "+g(l.value)+".",1)],2)):y("",!0)]),t("div",H,[e[8]||(e[8]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Start on System Startup"),t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Automatically launch this item when the main server starts.")],-1)),t("button",{onClick:e[1]||(e[1]=i=>p.value=!p.value),type:"button",class:_([p.value?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[t("span",{class:_([p.value?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),t("div",K,[e[13]||(e[13]=t("h4",{class:"font-semibold text-lg"},"Authentication",-1)),e[14]||(e[14]=t("p",{class:"text-sm text-gray-500 dark:text-gray-400 mb-4"}," Configure how users will access this app. These settings can be changed later. ",-1)),t("div",null,[e[10]||(e[10]=t("label",{for:"install-auth-type",class:"block text-sm font-medium"},"Authentication Type",-1)),w(t("select",{id:"install-auth-type","onUpdate:modelValue":e[2]||(e[2]=i=>r.value=i),class:"input-field mt-1"},e[9]||(e[9]=[t("option",{value:"none"},"None",-1),t("option",{value:"bearer"},"Bearer Token (managed later in config)",-1),t("option",{value:"lollms_sso"},"LoLLMs SSO",-1)]),512),[[R,r.value]])]),r.value==="lollms_sso"?(n(),x("div",F,[e[11]||(e[11]=t("label",{for:"install-sso-redirect-uri",class:"block text-sm font-medium"},"Redirect URI",-1)),w(t("input",{id:"install-sso-redirect-uri","onUpdate:modelValue":e[3]||(e[3]=i=>b.value=i),type:"url",class:"input-field mt-1",placeholder:"e.g., https://myapp.com/callback"},null,512),[[M,b.value]]),e[12]||(e[12]=t("p",{class:"text-xs text-gray-500 mt-1"},"The callback URL registered with the app. A server reboot is required after enabling SSO.",-1))])):y("",!0)])],32)):y("",!0)]),footer:N(()=>[t("div",G,[t("button",{onClick:e[4]||(e[4]=i=>L(d).closeModal("appInstall")),type:"button",class:"btn btn-secondary"},"Cancel"),t("button",{onClick:I,type:"button",class:"btn btn-primary",disabled:v.value||l.value!=="available"},[v.value?(n(),f(A,{key:0,class:"w-5 h-5 mr-2 animate-spin"})):y("",!0),h(" "+g(v.value?"Installing...":"Confirm & Install"),1)],8,J)])]),_:1},8,["title"]))}};export{ee as default};
frontend/dist/ui_assets/AppLogModal-BS8crGLD.js+1 −0 added@@ -0,0 +1 @@ +import{K as k,c as d,s as v,w as x,n as g,l as m,g as b,e as p,j as $,an as S,a0 as M}from"./index-BBRgbnZQ.js";import{u as A}from"./admin-CwLQr1mG.js";import{_ as B}from"./GenericModal-eXiOHk6I.js";const H={class:"relative bg-gray-900 text-white font-mono text-xs p-4 rounded-md h-96 overflow-y-auto"},N=["innerHTML"],D={__name:"AppLogModal",setup(T){const u=k(),y=A(),_=d(()=>u.modalData("appLog")),l=d(()=>{var e;return(e=_.value)==null?void 0:e.app}),n=v(""),r=v(!1);async function h(){if(!(!l.value||r.value)){r.value=!0;try{n.value=await y.fetchAppLog(l.value.id)}catch(e){n.value=`Failed to load logs: ${e.message}`}finally{r.value=!1}}}function w(e){if(!e)return"No log output.";const f={30:"#000000",31:"#ff5555",32:"#50fa7b",33:"#f1fa8c",34:"#6272a4",35:"#ff79c6",36:"#8be9fd",37:"#f8f8f2",90:"#6272a4",91:"#ff6e6e",92:"#69ff94",93:"#ffffa5",94:"#d6acff",95:"#ff92df",96:"#a4ffff",97:"#ffffff"},s={40:"#000000",41:"#ff5555",42:"#50fa7b",43:"#f1fa8c",44:"#6272a4",45:"#ff79c6",46:"#8be9fd",47:"#f8f8f2",100:"#6272a4",101:"#ff6e6e",102:"#69ff94",103:"#ffffa5",104:"#d6acff",105:"#ff92df",106:"#a4ffff",107:"#ffffff"};let i="",a=[];e=e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");const c=e.split(/\x1b\[([0-9;]+)m/);for(let t=0;t<c.length;t++)if(t%2===0)a.length>0?i+=`<span style="${a.join(";")}">${c[t]}</span>`:i+=c[t];else{const C=c[t].split(";");a=[];for(const o of C)o==="0"||o===""?a=[]:o==="1"?a.push("font-weight:bold"):o==="2"?a.push("opacity:0.6"):o==="3"?a.push("font-style:italic"):o==="4"?a.push("text-decoration:underline"):f[o]?a.push(`color:${f[o]}`):s[o]&&a.push(`background-color:${s[o]}`)}return i}const L=d(()=>w(n.value));return x(()=>u.isModalOpen("appLog"),e=>{e&&l.value?h():n.value=""},{immediate:!0}),(e,f)=>{var s;return m(),g(B,{modalName:"appLog",title:`Logs: ${((s=l.value)==null?void 0:s.name)||""}`,maxWidthClass:"max-w-4xl"},{body:b(()=>[p("div",H,[p("button",{onClick:h,class:"absolute top-2 right-2 p-1.5 bg-gray-700 rounded-md hover:bg-gray-600",title:"Refresh Logs"},[r.value?(m(),g(S,{key:0,class:"w-4 h-4"})):(m(),g(M,{key:1,class:"w-4 h-4"}))]),p("pre",{class:"whitespace-pre-wrap break-words",innerHTML:L.value},null,8,N)])]),footer:b(()=>[p("button",{onClick:f[0]||(f[0]=i=>$(u).closeModal("appLog")),type:"button",class:"btn btn-secondary"},"Close")]),_:1},8,["title"])}}};export{D as default};
frontend/dist/ui_assets/AppLogModal-X4zrasSt.js+0 −1 removed@@ -1 +0,0 @@ -import{K as k,c as d,s as v,w as x,n as g,l as m,g as b,e as p,j as $,an as S,Y as M}from"./index-CEXks4lv.js";import{u as A}from"./admin-Dmx5gjU7.js";import{_ as B}from"./GenericModal-Br5hR2Sz.js";const H={class:"relative bg-gray-900 text-white font-mono text-xs p-4 rounded-md h-96 overflow-y-auto"},N=["innerHTML"],D={__name:"AppLogModal",setup(T){const u=k(),y=A(),_=d(()=>u.modalData("appLog")),l=d(()=>{var e;return(e=_.value)==null?void 0:e.app}),n=v(""),r=v(!1);async function h(){if(!(!l.value||r.value)){r.value=!0;try{n.value=await y.fetchAppLog(l.value.id)}catch(e){n.value=`Failed to load logs: ${e.message}`}finally{r.value=!1}}}function w(e){if(!e)return"No log output.";const f={30:"#000000",31:"#ff5555",32:"#50fa7b",33:"#f1fa8c",34:"#6272a4",35:"#ff79c6",36:"#8be9fd",37:"#f8f8f2",90:"#6272a4",91:"#ff6e6e",92:"#69ff94",93:"#ffffa5",94:"#d6acff",95:"#ff92df",96:"#a4ffff",97:"#ffffff"},s={40:"#000000",41:"#ff5555",42:"#50fa7b",43:"#f1fa8c",44:"#6272a4",45:"#ff79c6",46:"#8be9fd",47:"#f8f8f2",100:"#6272a4",101:"#ff6e6e",102:"#69ff94",103:"#ffffa5",104:"#d6acff",105:"#ff92df",106:"#a4ffff",107:"#ffffff"};let i="",a=[];e=e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");const c=e.split(/\x1b\[([0-9;]+)m/);for(let t=0;t<c.length;t++)if(t%2===0)a.length>0?i+=`<span style="${a.join(";")}">${c[t]}</span>`:i+=c[t];else{const C=c[t].split(";");a=[];for(const o of C)o==="0"||o===""?a=[]:o==="1"?a.push("font-weight:bold"):o==="2"?a.push("opacity:0.6"):o==="3"?a.push("font-style:italic"):o==="4"?a.push("text-decoration:underline"):f[o]?a.push(`color:${f[o]}`):s[o]&&a.push(`background-color:${s[o]}`)}return i}const L=d(()=>w(n.value));return x(()=>u.isModalOpen("appLog"),e=>{e&&l.value?h():n.value=""},{immediate:!0}),(e,f)=>{var s;return m(),g(B,{modalName:"appLog",title:`Logs: ${((s=l.value)==null?void 0:s.name)||""}`,maxWidthClass:"max-w-4xl"},{body:b(()=>[p("div",H,[p("button",{onClick:h,class:"absolute top-2 right-2 p-1.5 bg-gray-700 rounded-md hover:bg-gray-600",title:"Refresh Logs"},[r.value?(m(),g(S,{key:0,class:"w-4 h-4"})):(m(),g(M,{key:1,class:"w-4 h-4"}))]),p("pre",{class:"whitespace-pre-wrap break-words",innerHTML:L.value},null,8,N)])]),footer:b(()=>[p("button",{onClick:f[0]||(f[0]=i=>$(u).closeModal("appLog")),type:"button",class:"btn btn-secondary"},"Close")]),_:1},8,["title"])}}};export{D as default};
frontend/dist/ui_assets/AppsManagement-CznGf3_1.js+1 −1 renamed@@ -1 +1 @@ -import{q as we,a8 as xe,K as ke,Q as E,s as A,c as y,w as R,o as Ae,d as r,l,e as s,h as m,p as B,f as _,Y as O,z as v,L as T,j as p,R as I,cL as Re,F as h,i as w,t as g,n as P,cM as $e,m as D,ar as j,H as Ce,ah as Se}from"./index-CEXks4lv.js";import{u as _e}from"./admin-Dmx5gjU7.js";import{I as Te}from"./IconArrowUp-SNnuoHWO.js";import{A as Ie}from"./AppCard-DrFLk3K7.js";import{A as Ue}from"./AppCardSkeleton-BZpMiaGA.js";import"./IconGlobeAlt-BuKg8C2g.js";import"./IconPlayCircle-ClB9mJda.js";import"./AdminView-BDw3vQ10.js";import"./PageViewLayout-BRrEfO0i.js";import"./IconKey-x480EFkO.js";import"./IconNoSymbol-DV6K_m0o.js";import"./IconArrowPath-D8-8Af5d.js";const Me={class:"space-y-6"},Pe={class:"border-b border-gray-200 dark:border-gray-700"},De={class:"-mb-px flex space-x-6","aria-label":"Sub Tabs"},Ve={key:0},Ze={class:"flex justify-between items-center mb-4 flex-wrap gap-2"},Fe={class:"flex items-center gap-2"},Le={class:"space-y-4"},ze={class:"grid grid-cols-1 lg:grid-cols-4 gap-4"},Ne={class:"relative lg:col-span-1"},Ee={class:"grid grid-cols-1 sm:grid-cols-3 lg:col-span-3 gap-4"},Be=["value"],Oe=["value"],je={class:"flex items-center gap-2"},qe=["value"],He={key:0,class:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4 gap-6"},Ke={key:1,class:"empty-state-card"},Qe={key:2},Je={class:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4 gap-6"},We={key:0,class:"flex justify-between items-center mt-6"},Ge=["disabled"],Ye={class:"text-sm text-gray-600 dark:text-gray-400"},Xe=["disabled"],et={key:1},tt={class:"flex justify-between items-center mb-4 flex-wrap gap-2"},at={key:0,class:"bg-white dark:bg-gray-800 p-4 rounded-lg shadow-sm mb-6"},st={class:"flex items-center gap-x-4"},nt={key:0},ot=["required"],lt={key:1},it=["required"],rt={key:1,class:"text-center p-4"},dt={key:2,class:"empty-state-card"},ut={key:3,class:"space-y-4"},pt={class:"font-semibold"},ct={class:"text-sm text-gray-500"},vt={class:"text-xs text-gray-400"},ft={class:"flex items-center gap-2"},gt=["onClick"],yt=["onClick"],mt={__name:"AppsManagement",setup(bt){const i=_e(),V=xe(),u=ke(),{appFilters:o}=i,{zooRepositories:Z,isLoadingZooRepositories:q,zooApps:$,isLoadingZooApps:H}=E(i),{tasks:K}=E(V),f=A("zoo"),d=A({type:"git",name:"",url:"",path:""}),x=A(!1),c=A(null),k=A(JSON.parse(localStorage.getItem("starredApps")||"[]"));let F=null;const C=y({get:()=>o.currentPage,set:e=>{o.currentPage=e}}),Q=[{value:"last_update_date",label:"Last Updated"},{value:"creation_date",label:"Creation Date"},{value:"name",label:"Name"},{value:"author",label:"Author"}],U=y(()=>$.value.total||0),L=y(()=>$.value.pages||1),J=y(()=>{if(U.value===0)return"Showing 0-0 of 0";const e=(o.currentPage-1)*o.pageSize+1,t=Math.min(o.currentPage*o.pageSize,U.value);return`Showing ${e}-${t} of ${U.value}`});function W(){clearTimeout(F),F=setTimeout(()=>{o.currentPage!==1?o.currentPage=1:i.fetchZooApps()},300)}R(()=>[o.sortKey,o.sortOrder,o.selectedCategory,o.installationStatusFilter,o.selectedRepository],()=>{o.currentPage!==1?o.currentPage=1:i.fetchZooApps()}),R(()=>o.searchQuery,W),R(()=>o.currentPage,i.fetchZooApps),R(k,e=>{localStorage.setItem("starredApps",JSON.stringify(e))},{deep:!0}),R(f,e=>{e==="zoo"&&i.fetchZooApps(),e==="source"&&i.fetchZooRepositories()}),Ae(()=>{f.value==="zoo"&&i.fetchZooApps(),f.value==="source"&&i.fetchZooRepositories()});const M=y(()=>{const e=new Map,t="Installing app: ",a=/^(Updating app|Start app|Stop app|Fixing item|Purging item): .* \(([a-fA-F0-9-]+)\)$/;return(K.value||[]).forEach(n=>{if(n!=null&&n.name&&(n.status==="running"||n.status==="pending")){let b;if(n.name.startsWith(t))b=`folder:${n.name.replace(t,"")}`;else{const N=n.name.match(a);N&&(b=`id:${N[2]}`)}b&&(!e.has(b)||new Date(n.created_at)>new Date(e.get(b).created_at))&&e.set(b,n)}}),($.value.items||[]).map(n=>({...n,task:e.get(`folder:${n.folder_name}`)||(n.id?e.get(`id:${n.id}`):null)}))}),S=y(()=>Array.isArray(Z.value)?[...Z.value].sort((e,t)=>(e.name||"").localeCompare(t.name||"")):[]),G=y(()=>["All","Starred",...$.value.categories||[]]);function Y(e){const t=k.value.indexOf(e);t>-1?k.value.splice(t,1):k.value.push(e)}function X(e){return e?new Date(e).toLocaleString():"Never"}async function ee(){if(!d.value.name){u.addNotification("Repository name is required.","warning");return}const e={name:d.value.name};d.value.type==="git"?e.url=d.value.url:e.path=d.value.path,c.value="add";try{await i.addZooRepository(e),d.value={type:"git",name:"",url:"",path:""},x.value=!1}finally{c.value=null}}async function te(e){c.value=e.id;try{await i.pullZooRepository(e.id)}finally{c.value=null}}async function ae(e){if(await u.showConfirmation({title:`Delete Repository '${e.name}'?`})){c.value=e.id;try{await i.deleteZooRepository(e.id)}finally{c.value=null}}}function se(e){u.openModal("appInstall",{app:e,type:"apps"})}async function ne(e){await u.showConfirmation({title:`Update '${e.name}'?`,confirmText:"Update"})&&await i.updateApp(e.id)}async function z(e,t){c.value=`${t}-${e}`;try{t==="start"&&await i.startApp(e),t==="stop"&&await i.stopApp(e)}finally{c.value=null}}async function oe(e){await u.showConfirmation({title:`Restart '${e.name}'?`,message:"The application will be stopped and started again.",confirmText:"Restart"})&&await i.restartApp(e.id)}async function le(e){if(await u.showConfirmation({title:`Uninstall '${e.name}'?`,confirmText:"Uninstall"})){c.value=`uninstall-${e.id}`;try{await i.uninstallApp(e.id)}finally{c.value=null}}}function ie(e){e.is_installed?u.openModal("appConfig",{app:e}):e.repository==="Registered"&&u.openModal("serviceRegistration",{item:e,itemType:"app",ownerType:e.type||"system",onRegistered:i.fetchZooApps})}function re(e){u.openModal("appEnvConfig",{app:e})}async function de(e){await u.showConfirmation({title:`Delete Registration for '${e.name}'?`,message:"This will remove the manually registered entry but will not affect the service itself.",confirmText:"Delete"})&&await i.deleteRegisteredApp(e.id)}function ue(e){u.openModal("appLog",{app:e})}async function pe(e){const t=await i.fetchAppReadme(e.repository,e.folder_name);u.openModal("sourceViewer",{title:`README: ${e.name}`,content:t,language:"markdown"})}async function ce(e){await V.cancelTask(e)}function ve(e){u.openModal("tasksManager",{initialTaskId:e})}async function fe(){await i.syncInstallations()}async function ge(e){await u.showConfirmation({title:`Purge '${e.name}'?`,message:"This will permanently delete the installation folder.",confirmText:"Purge"})&&await i.purgeBrokenInstallation(e)}async function ye(e){await u.showConfirmation({title:`Fix '${e.name}'?`,message:"This will attempt to re-create the database entry for this item.",confirmText:"Fix"})&&await i.fixBrokenInstallation(e)}function me(e){u.openModal("appDetails",{app:e})}function be(){u.openModal("serviceRegistration",{itemType:"app",ownerType:"system",onRegistered:i.fetchZooApps})}async function he(){const e=await i.refreshZooCache();e&&u.openModal("tasksManager",{initialTaskId:e.id})}return(e,t)=>(l(),r("div",Me,[s("div",Pe,[s("nav",De,[s("button",{onClick:t[0]||(t[0]=a=>f.value="zoo"),class:B(["tab-button",f.value==="zoo"?"active":"inactive"])},"Zoo",2),s("button",{onClick:t[1]||(t[1]=a=>f.value="source"),class:B(["tab-button",f.value==="source"?"active":"inactive"])},"Repositories",2)])]),f.value==="zoo"?(l(),r("section",Ve,[s("div",Ze,[t[16]||(t[16]=s("h3",{class:"text-xl font-semibold"},"App Zoo",-1)),s("div",Fe,[s("button",{onClick:he,class:"btn btn-secondary",title:"Refresh Zoo Cache from all sources"},[_(O,{class:"w-4 h-4"})]),s("button",{onClick:be,class:"btn btn-secondary"},"Register External App"),s("button",{onClick:fe,class:"btn btn-secondary-outline",title:"Repair broken installations and remove orphaned DB entries."},"Sync Installations")])]),s("div",Le,[s("div",ze,[s("div",Ne,[v(s("input",{type:"text","onUpdate:modelValue":t[2]||(t[2]=a=>p(o).searchQuery=a),placeholder:"Search apps...",class:"input-field w-full pl-10"},null,512),[[T,p(o).searchQuery]]),t[17]||(t[17]=s("div",{class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},[s("svg",{class:"h-5 w-5 text-gray-400",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"})])],-1))]),s("div",Ee,[v(s("select",{"onUpdate:modelValue":t[3]||(t[3]=a=>p(o).installationStatusFilter=a),class:"input-field"},t[18]||(t[18]=[Re('<option value="All" data-v-2ee57fc8>All Statuses</option><option value="Installed" data-v-2ee57fc8>Installed</option><option value="Uninstalled" data-v-2ee57fc8>Uninstalled</option><option value="Registered" data-v-2ee57fc8>Registered</option><option value="Broken" data-v-2ee57fc8>Broken</option>',5)]),512),[[I,p(o).installationStatusFilter]]),v(s("select",{"onUpdate:modelValue":t[4]||(t[4]=a=>p(o).selectedCategory=a),class:"input-field"},[(l(!0),r(h,null,w(G.value,a=>(l(),r("option",{key:a,value:a},g(a),9,Be))),128))],512),[[I,p(o).selectedCategory]]),v(s("select",{"onUpdate:modelValue":t[5]||(t[5]=a=>p(o).selectedRepository=a),class:"input-field"},[t[19]||(t[19]=s("option",{value:"All"},"All Sources",-1)),t[20]||(t[20]=s("option",{value:"Registered"},"Registered",-1)),(l(!0),r(h,null,w(S.value,a=>(l(),r("option",{key:a.id,value:a.name},g(a.name),9,Oe))),128))],512),[[I,p(o).selectedRepository]])])]),s("div",je,[v(s("select",{"onUpdate:modelValue":t[6]||(t[6]=a=>p(o).sortKey=a),class:"input-field w-48"},[(l(),r(h,null,w(Q,a=>s("option",{key:a.value,value:a.value},"Sort by "+g(a.label),9,qe)),64))],512),[[I,p(o).sortKey]]),s("button",{onClick:t[7]||(t[7]=a=>p(o).sortOrder=p(o).sortOrder==="asc"?"desc":"asc"),class:"btn btn-secondary p-2"},[p(o).sortOrder==="asc"?(l(),P(Te,{key:0,class:"w-5 h-5"})):(l(),P($e,{key:1,class:"w-5 h-5"}))])]),p(H)?(l(),r("div",He,[(l(),r(h,null,w(8,a=>_(Ue,{key:a})),64))])):!M.value||M.value.length===0?(l(),r("div",Ke,t[21]||(t[21]=[s("h4",{class:"font-semibold"},"No Apps Found",-1)]))):(l(),r("div",Qe,[s("div",Je,[(l(!0),r(h,null,w(M.value,a=>(l(),P(Ie,{key:a.id||`${a.repository}/${a.folder_name}`,app:a,task:a.task,"is-starred":k.value.includes(a.name),onStar:n=>Y(a.name),onInstall:n=>se(a),onUpdate:n=>ne(a),onUninstall:n=>le(a),onDelete:n=>de(a),onHelp:n=>pe(a),onViewTask:ve,onCancelInstall:n=>ce(a.task.id),onStart:n=>z(a.id,"start"),onStop:n=>z(a.id,"stop"),onConfigure:n=>ie(a),onFix:n=>ye(a),onPurge:n=>ge(a),onDetails:me,onLogs:n=>ue(a),onEditEnv:n=>re(a),onRestart:n=>oe(a)},null,8,["app","task","is-starred","onStar","onInstall","onUpdate","onUninstall","onDelete","onHelp","onCancelInstall","onStart","onStop","onConfigure","onFix","onPurge","onLogs","onEditEnv","onRestart"]))),128))]),L.value>1?(l(),r("div",We,[s("button",{onClick:t[8]||(t[8]=a=>C.value--),disabled:C.value===1,class:"btn btn-secondary"},"Previous",8,Ge),s("span",Ye,g(J.value),1),s("button",{onClick:t[9]||(t[9]=a=>C.value++),disabled:C.value>=L.value,class:"btn btn-secondary"},"Next",8,Xe)])):m("",!0)]))])])):m("",!0),f.value==="source"?(l(),r("section",et,[s("div",tt,[t[22]||(t[22]=s("h3",{class:"text-xl font-semibold"},"App Zoo Repositories",-1)),s("button",{onClick:t[10]||(t[10]=a=>x.value=!x.value),class:"btn btn-primary"},g(x.value?"Cancel":"Add Repository"),1)]),x.value?(l(),r("div",at,[s("form",{onSubmit:Ce(ee,["prevent"]),class:"space-y-4"},[s("div",st,[s("label",null,[v(s("input",{type:"radio","onUpdate:modelValue":t[11]||(t[11]=a=>d.value.type=a),value:"git",class:"radio-input"},null,512),[[j,d.value.type]]),t[23]||(t[23]=D(" Git"))]),s("label",null,[v(s("input",{type:"radio","onUpdate:modelValue":t[12]||(t[12]=a=>d.value.type=a),value:"local",class:"radio-input"},null,512),[[j,d.value.type]]),t[24]||(t[24]=D(" Local"))])]),s("div",null,[t[25]||(t[25]=s("label",null,"Name",-1)),v(s("input",{"onUpdate:modelValue":t[13]||(t[13]=a=>d.value.name=a),type:"text",class:"input-field",required:""},null,512),[[T,d.value.name]])]),d.value.type==="git"?(l(),r("div",nt,[t[26]||(t[26]=s("label",null,"URL",-1)),v(s("input",{"onUpdate:modelValue":t[14]||(t[14]=a=>d.value.url=a),type:"url",class:"input-field",required:d.value.type==="git"},null,8,ot),[[T,d.value.url]])])):m("",!0),d.value.type==="local"?(l(),r("div",lt,[t[27]||(t[27]=s("label",null,"Path",-1)),v(s("input",{"onUpdate:modelValue":t[15]||(t[15]=a=>d.value.path=a),type:"text",class:"input-field",required:d.value.type==="local"},null,8,it),[[T,d.value.path]])])):m("",!0),t[28]||(t[28]=s("div",{class:"flex justify-end"},[s("button",{type:"submit",class:"btn btn-primary"},"Add")],-1))],32)])):m("",!0),p(q)?(l(),r("div",rt,"Loading...")):!S.value||S.value.length===0?(l(),r("div",dt,t[29]||(t[29]=[s("p",null,"No repositories added.",-1)]))):(l(),r("div",ut,[(l(!0),r(h,null,w(S.value,a=>(l(),r("div",{key:a.id,class:"bg-white dark:bg-gray-800 p-4 rounded-lg shadow-sm flex items-center justify-between"},[s("div",null,[s("p",pt,g(a.name),1),s("p",ct,g(a.url),1),s("p",vt,"Pulled: "+g(X(a.last_pulled_at)),1)]),s("div",ft,[s("button",{onClick:n=>te(a),class:"btn btn-secondary btn-sm"},[_(O,{class:"w-4 h-4 mr-1"}),D(g(a.type==="git"?"Pull":"Rescan"),1)],8,gt),a.is_deletable?(l(),r("button",{key:0,onClick:n=>ae(a),class:"btn btn-danger btn-sm"},[_(Se,{class:"w-4 h-4"})],8,yt)):m("",!0)])]))),128))]))])):m("",!0)]))}},Ut=we(mt,[["__scopeId","data-v-2ee57fc8"]]);export{Ut as default}; +import{q as we,Q as xe,K as ke,R as E,s as A,c as y,w as R,o as Ae,d as r,l,e as s,h as m,p as B,f as _,a0 as O,z as v,L as T,j as p,X as I,cc as Re,F as h,i as w,t as g,n as P,cO as $e,m as D,ar as j,H as Ce,ah as Se}from"./index-BBRgbnZQ.js";import{u as _e}from"./admin-CwLQr1mG.js";import{I as Te}from"./IconArrowUp-Q6qK09pz.js";import{A as Ie}from"./AppCard-_yFD3KrL.js";import{A as Ue}from"./AppCardSkeleton-C03QefFR.js";import"./IconGlobeAlt-DJc8Wsna.js";import"./IconPlayCircle-D2gooLkD.js";import"./AdminView-Bo442GSB.js";import"./PageViewLayout-CieE8QU1.js";import"./IconKey-C28jqjj0.js";import"./IconNoSymbol-D0HTNvx3.js";import"./IconArrowPath-DUE5IYPL.js";const Me={class:"space-y-6"},Pe={class:"border-b border-gray-200 dark:border-gray-700"},De={class:"-mb-px flex space-x-6","aria-label":"Sub Tabs"},Ve={key:0},Ze={class:"flex justify-between items-center mb-4 flex-wrap gap-2"},Fe={class:"flex items-center gap-2"},Le={class:"space-y-4"},ze={class:"grid grid-cols-1 lg:grid-cols-4 gap-4"},Ne={class:"relative lg:col-span-1"},Ee={class:"grid grid-cols-1 sm:grid-cols-3 lg:col-span-3 gap-4"},Be=["value"],Oe=["value"],je={class:"flex items-center gap-2"},qe=["value"],He={key:0,class:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4 gap-6"},Ke={key:1,class:"empty-state-card"},Qe={key:2},Je={class:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4 gap-6"},We={key:0,class:"flex justify-between items-center mt-6"},Ge=["disabled"],Xe={class:"text-sm text-gray-600 dark:text-gray-400"},Ye=["disabled"],et={key:1},tt={class:"flex justify-between items-center mb-4 flex-wrap gap-2"},at={key:0,class:"bg-white dark:bg-gray-800 p-4 rounded-lg shadow-sm mb-6"},st={class:"flex items-center gap-x-4"},nt={key:0},ot=["required"],lt={key:1},it=["required"],rt={key:1,class:"text-center p-4"},dt={key:2,class:"empty-state-card"},ut={key:3,class:"space-y-4"},pt={class:"font-semibold"},ct={class:"text-sm text-gray-500"},vt={class:"text-xs text-gray-400"},ft={class:"flex items-center gap-2"},gt=["onClick"],yt=["onClick"],mt={__name:"AppsManagement",setup(bt){const i=_e(),V=xe(),u=ke(),{appFilters:o}=i,{zooRepositories:Z,isLoadingZooRepositories:q,zooApps:$,isLoadingZooApps:H}=E(i),{tasks:K}=E(V),f=A("zoo"),d=A({type:"git",name:"",url:"",path:""}),x=A(!1),c=A(null),k=A(JSON.parse(localStorage.getItem("starredApps")||"[]"));let F=null;const C=y({get:()=>o.currentPage,set:e=>{o.currentPage=e}}),Q=[{value:"last_update_date",label:"Last Updated"},{value:"creation_date",label:"Creation Date"},{value:"name",label:"Name"},{value:"author",label:"Author"}],U=y(()=>$.value.total||0),L=y(()=>$.value.pages||1),J=y(()=>{if(U.value===0)return"Showing 0-0 of 0";const e=(o.currentPage-1)*o.pageSize+1,t=Math.min(o.currentPage*o.pageSize,U.value);return`Showing ${e}-${t} of ${U.value}`});function W(){clearTimeout(F),F=setTimeout(()=>{o.currentPage!==1?o.currentPage=1:i.fetchZooApps()},300)}R(()=>[o.sortKey,o.sortOrder,o.selectedCategory,o.installationStatusFilter,o.selectedRepository],()=>{o.currentPage!==1?o.currentPage=1:i.fetchZooApps()}),R(()=>o.searchQuery,W),R(()=>o.currentPage,i.fetchZooApps),R(k,e=>{localStorage.setItem("starredApps",JSON.stringify(e))},{deep:!0}),R(f,e=>{e==="zoo"&&i.fetchZooApps(),e==="source"&&i.fetchZooRepositories()}),Ae(()=>{f.value==="zoo"&&i.fetchZooApps(),f.value==="source"&&i.fetchZooRepositories()});const M=y(()=>{const e=new Map,t="Installing app: ",a=/^(Updating app|Start app|Stop app|Fixing item|Purging item): .* \(([a-fA-F0-9-]+)\)$/;return(K.value||[]).forEach(n=>{if(n!=null&&n.name&&(n.status==="running"||n.status==="pending")){let b;if(n.name.startsWith(t))b=`folder:${n.name.replace(t,"")}`;else{const N=n.name.match(a);N&&(b=`id:${N[2]}`)}b&&(!e.has(b)||new Date(n.created_at)>new Date(e.get(b).created_at))&&e.set(b,n)}}),($.value.items||[]).map(n=>({...n,task:e.get(`folder:${n.folder_name}`)||(n.id?e.get(`id:${n.id}`):null)}))}),S=y(()=>Array.isArray(Z.value)?[...Z.value].sort((e,t)=>(e.name||"").localeCompare(t.name||"")):[]),G=y(()=>["All","Starred",...$.value.categories||[]]);function X(e){const t=k.value.indexOf(e);t>-1?k.value.splice(t,1):k.value.push(e)}function Y(e){return e?new Date(e).toLocaleString():"Never"}async function ee(){if(!d.value.name){u.addNotification("Repository name is required.","warning");return}const e={name:d.value.name};d.value.type==="git"?e.url=d.value.url:e.path=d.value.path,c.value="add";try{await i.addZooRepository(e),d.value={type:"git",name:"",url:"",path:""},x.value=!1}finally{c.value=null}}async function te(e){c.value=e.id;try{await i.pullZooRepository(e.id)}finally{c.value=null}}async function ae(e){if(await u.showConfirmation({title:`Delete Repository '${e.name}'?`})){c.value=e.id;try{await i.deleteZooRepository(e.id)}finally{c.value=null}}}function se(e){u.openModal("appInstall",{app:e,type:"apps"})}async function ne(e){await u.showConfirmation({title:`Update '${e.name}'?`,confirmText:"Update"})&&await i.updateApp(e.id)}async function z(e,t){c.value=`${t}-${e}`;try{t==="start"&&await i.startApp(e),t==="stop"&&await i.stopApp(e)}finally{c.value=null}}async function oe(e){await u.showConfirmation({title:`Restart '${e.name}'?`,message:"The application will be stopped and started again.",confirmText:"Restart"})&&await i.restartApp(e.id)}async function le(e){if(await u.showConfirmation({title:`Uninstall '${e.name}'?`,confirmText:"Uninstall"})){c.value=`uninstall-${e.id}`;try{await i.uninstallApp(e.id)}finally{c.value=null}}}function ie(e){e.is_installed?u.openModal("appConfig",{app:e}):e.repository==="Registered"&&u.openModal("serviceRegistration",{item:e,itemType:"app",ownerType:e.type||"system",onRegistered:i.fetchZooApps})}function re(e){u.openModal("appEnvConfig",{app:e})}async function de(e){await u.showConfirmation({title:`Delete Registration for '${e.name}'?`,message:"This will remove the manually registered entry but will not affect the service itself.",confirmText:"Delete"})&&await i.deleteRegisteredApp(e.id)}function ue(e){u.openModal("appLog",{app:e})}async function pe(e){const t=await i.fetchAppReadme(e.repository,e.folder_name);u.openModal("sourceViewer",{title:`README: ${e.name}`,content:t,language:"markdown"})}async function ce(e){await V.cancelTask(e)}function ve(e){u.openModal("tasksManager",{initialTaskId:e})}async function fe(){await i.syncInstallations()}async function ge(e){await u.showConfirmation({title:`Purge '${e.name}'?`,message:"This will permanently delete the installation folder.",confirmText:"Purge"})&&await i.purgeBrokenInstallation(e)}async function ye(e){await u.showConfirmation({title:`Fix '${e.name}'?`,message:"This will attempt to re-create the database entry for this item.",confirmText:"Fix"})&&await i.fixBrokenInstallation(e)}function me(e){u.openModal("appDetails",{app:e})}function be(){u.openModal("serviceRegistration",{itemType:"app",ownerType:"system",onRegistered:i.fetchZooApps})}async function he(){const e=await i.refreshZooCache();e&&u.openModal("tasksManager",{initialTaskId:e.id})}return(e,t)=>(l(),r("div",Me,[s("div",Pe,[s("nav",De,[s("button",{onClick:t[0]||(t[0]=a=>f.value="zoo"),class:B(["tab-button",f.value==="zoo"?"active":"inactive"])},"Zoo",2),s("button",{onClick:t[1]||(t[1]=a=>f.value="source"),class:B(["tab-button",f.value==="source"?"active":"inactive"])},"Repositories",2)])]),f.value==="zoo"?(l(),r("section",Ve,[s("div",Ze,[t[16]||(t[16]=s("h3",{class:"text-xl font-semibold"},"App Zoo",-1)),s("div",Fe,[s("button",{onClick:he,class:"btn btn-secondary",title:"Refresh Zoo Cache from all sources"},[_(O,{class:"w-4 h-4"})]),s("button",{onClick:be,class:"btn btn-secondary"},"Register External App"),s("button",{onClick:fe,class:"btn btn-secondary-outline",title:"Repair broken installations and remove orphaned DB entries."},"Sync Installations")])]),s("div",Le,[s("div",ze,[s("div",Ne,[v(s("input",{type:"text","onUpdate:modelValue":t[2]||(t[2]=a=>p(o).searchQuery=a),placeholder:"Search apps...",class:"input-field w-full pl-10"},null,512),[[T,p(o).searchQuery]]),t[17]||(t[17]=s("div",{class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},[s("svg",{class:"h-5 w-5 text-gray-400",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"})])],-1))]),s("div",Ee,[v(s("select",{"onUpdate:modelValue":t[3]||(t[3]=a=>p(o).installationStatusFilter=a),class:"input-field"},t[18]||(t[18]=[Re('<option value="All" data-v-2ee57fc8>All Statuses</option><option value="Installed" data-v-2ee57fc8>Installed</option><option value="Uninstalled" data-v-2ee57fc8>Uninstalled</option><option value="Registered" data-v-2ee57fc8>Registered</option><option value="Broken" data-v-2ee57fc8>Broken</option>',5)]),512),[[I,p(o).installationStatusFilter]]),v(s("select",{"onUpdate:modelValue":t[4]||(t[4]=a=>p(o).selectedCategory=a),class:"input-field"},[(l(!0),r(h,null,w(G.value,a=>(l(),r("option",{key:a,value:a},g(a),9,Be))),128))],512),[[I,p(o).selectedCategory]]),v(s("select",{"onUpdate:modelValue":t[5]||(t[5]=a=>p(o).selectedRepository=a),class:"input-field"},[t[19]||(t[19]=s("option",{value:"All"},"All Sources",-1)),t[20]||(t[20]=s("option",{value:"Registered"},"Registered",-1)),(l(!0),r(h,null,w(S.value,a=>(l(),r("option",{key:a.id,value:a.name},g(a.name),9,Oe))),128))],512),[[I,p(o).selectedRepository]])])]),s("div",je,[v(s("select",{"onUpdate:modelValue":t[6]||(t[6]=a=>p(o).sortKey=a),class:"input-field w-48"},[(l(),r(h,null,w(Q,a=>s("option",{key:a.value,value:a.value},"Sort by "+g(a.label),9,qe)),64))],512),[[I,p(o).sortKey]]),s("button",{onClick:t[7]||(t[7]=a=>p(o).sortOrder=p(o).sortOrder==="asc"?"desc":"asc"),class:"btn btn-secondary p-2"},[p(o).sortOrder==="asc"?(l(),P(Te,{key:0,class:"w-5 h-5"})):(l(),P($e,{key:1,class:"w-5 h-5"}))])]),p(H)?(l(),r("div",He,[(l(),r(h,null,w(8,a=>_(Ue,{key:a})),64))])):!M.value||M.value.length===0?(l(),r("div",Ke,t[21]||(t[21]=[s("h4",{class:"font-semibold"},"No Apps Found",-1)]))):(l(),r("div",Qe,[s("div",Je,[(l(!0),r(h,null,w(M.value,a=>(l(),P(Ie,{key:a.id||`${a.repository}/${a.folder_name}`,app:a,task:a.task,"is-starred":k.value.includes(a.name),onStar:n=>X(a.name),onInstall:n=>se(a),onUpdate:n=>ne(a),onUninstall:n=>le(a),onDelete:n=>de(a),onHelp:n=>pe(a),onViewTask:ve,onCancelInstall:n=>ce(a.task.id),onStart:n=>z(a.id,"start"),onStop:n=>z(a.id,"stop"),onConfigure:n=>ie(a),onFix:n=>ye(a),onPurge:n=>ge(a),onDetails:me,onLogs:n=>ue(a),onEditEnv:n=>re(a),onRestart:n=>oe(a)},null,8,["app","task","is-starred","onStar","onInstall","onUpdate","onUninstall","onDelete","onHelp","onCancelInstall","onStart","onStop","onConfigure","onFix","onPurge","onLogs","onEditEnv","onRestart"]))),128))]),L.value>1?(l(),r("div",We,[s("button",{onClick:t[8]||(t[8]=a=>C.value--),disabled:C.value===1,class:"btn btn-secondary"},"Previous",8,Ge),s("span",Xe,g(J.value),1),s("button",{onClick:t[9]||(t[9]=a=>C.value++),disabled:C.value>=L.value,class:"btn btn-secondary"},"Next",8,Ye)])):m("",!0)]))])])):m("",!0),f.value==="source"?(l(),r("section",et,[s("div",tt,[t[22]||(t[22]=s("h3",{class:"text-xl font-semibold"},"App Zoo Repositories",-1)),s("button",{onClick:t[10]||(t[10]=a=>x.value=!x.value),class:"btn btn-primary"},g(x.value?"Cancel":"Add Repository"),1)]),x.value?(l(),r("div",at,[s("form",{onSubmit:Ce(ee,["prevent"]),class:"space-y-4"},[s("div",st,[s("label",null,[v(s("input",{type:"radio","onUpdate:modelValue":t[11]||(t[11]=a=>d.value.type=a),value:"git",class:"radio-input"},null,512),[[j,d.value.type]]),t[23]||(t[23]=D(" Git"))]),s("label",null,[v(s("input",{type:"radio","onUpdate:modelValue":t[12]||(t[12]=a=>d.value.type=a),value:"local",class:"radio-input"},null,512),[[j,d.value.type]]),t[24]||(t[24]=D(" Local"))])]),s("div",null,[t[25]||(t[25]=s("label",null,"Name",-1)),v(s("input",{"onUpdate:modelValue":t[13]||(t[13]=a=>d.value.name=a),type:"text",class:"input-field",required:""},null,512),[[T,d.value.name]])]),d.value.type==="git"?(l(),r("div",nt,[t[26]||(t[26]=s("label",null,"URL",-1)),v(s("input",{"onUpdate:modelValue":t[14]||(t[14]=a=>d.value.url=a),type:"url",class:"input-field",required:d.value.type==="git"},null,8,ot),[[T,d.value.url]])])):m("",!0),d.value.type==="local"?(l(),r("div",lt,[t[27]||(t[27]=s("label",null,"Path",-1)),v(s("input",{"onUpdate:modelValue":t[15]||(t[15]=a=>d.value.path=a),type:"text",class:"input-field",required:d.value.type==="local"},null,8,it),[[T,d.value.path]])])):m("",!0),t[28]||(t[28]=s("div",{class:"flex justify-end"},[s("button",{type:"submit",class:"btn btn-primary"},"Add")],-1))],32)])):m("",!0),p(q)?(l(),r("div",rt,"Loading...")):!S.value||S.value.length===0?(l(),r("div",dt,t[29]||(t[29]=[s("p",null,"No repositories added.",-1)]))):(l(),r("div",ut,[(l(!0),r(h,null,w(S.value,a=>(l(),r("div",{key:a.id,class:"bg-white dark:bg-gray-800 p-4 rounded-lg shadow-sm flex items-center justify-between"},[s("div",null,[s("p",pt,g(a.name),1),s("p",ct,g(a.url),1),s("p",vt,"Pulled: "+g(Y(a.last_pulled_at)),1)]),s("div",ft,[s("button",{onClick:n=>te(a),class:"btn btn-secondary btn-sm"},[_(O,{class:"w-4 h-4 mr-1"}),D(g(a.type==="git"?"Pull":"Rescan"),1)],8,gt),a.is_deletable?(l(),r("button",{key:0,onClick:n=>ae(a),class:"btn btn-danger btn-sm"},[_(Se,{class:"w-4 h-4"})],8,yt)):m("",!0)])]))),128))]))])):m("",!0)]))}},Ut=we(mt,[["__scopeId","data-v-2ee57fc8"]]);export{Ut as default};
frontend/dist/ui_assets/AppsSettings-hHPlPQPy.js+1 −1 renamed@@ -1 +1 @@ -import{P as b,K as v,Q as A,o as h,d as r,l as s,e,j as o,F as c,i as g,n as y}from"./index-CEXks4lv.js";import{_ as m}from"./McpCard-D3Pck2RC.js";const k={class:"space-y-10"},_={key:0,class:"text-center p-6 bg-gray-50 dark:bg-gray-800/50 rounded-lg"},w={key:1,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},T={key:0,class:"text-center p-6 bg-gray-50 dark:bg-gray-800/50 rounded-lg"},R={key:1,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},M={__name:"AppsSettings",setup(S){const a=b(),l=v(),{userApps:d,systemApps:p}=A(a);h(()=>{a.fetchApps()});function u(){l.openModal("serviceRegistration",{itemType:"app",ownerType:"user",onRegistered:a.fetchApps})}function f(n){l.openModal("serviceRegistration",{item:n,itemType:"app",ownerType:"user",onRegistered:a.fetchApps})}async function x(n){await l.showConfirmation({title:`Delete App '${n.name}'?`,message:"This will permanently remove your registered app. This action cannot be undone.",confirmText:"Delete"})&&await a.deleteApp(n.id)}return(n,t)=>(s(),r("div",k,[e("div",null,[e("div",{class:"flex justify-between items-center mb-4"},[t[0]||(t[0]=e("div",null,[e("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," My Personal Apps "),e("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Apps you have personally registered. They are only visible and usable by you. ")],-1)),e("button",{onClick:u,class:"btn btn-primary"},"Register New App")]),o(d).length===0?(s(),r("div",_,t[1]||(t[1]=[e("p",{class:"text-gray-500"},"You have no personal apps registered.",-1)]))):(s(),r("div",w,[(s(!0),r(c,null,g(o(d),i=>(s(),y(m,{key:i.id,mcp:i,"is-editable":"",onEdit:f,onDelete:x},null,8,["mcp"]))),128))]))]),e("div",null,[t[3]||(t[3]=e("div",{class:"mb-4"},[e("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," Available System Apps "),e("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Apps provided by the administrator for everyone to use. ")],-1)),o(p).length===0?(s(),r("div",T,t[2]||(t[2]=[e("p",{class:"text-gray-500"},"No system-wide apps are currently available.",-1)]))):(s(),r("div",R,[(s(!0),r(c,null,g(o(p),i=>(s(),y(m,{key:i.id,mcp:i,"is-editable":!1},null,8,["mcp"]))),128))]))])]))}};export{M as default}; +import{P as b,K as v,R as A,o as h,d as r,l as s,e,j as o,F as c,i as g,n as y}from"./index-BBRgbnZQ.js";import{_ as m}from"./McpCard-B9qZHmoB.js";const k={class:"space-y-10"},_={key:0,class:"text-center p-6 bg-gray-50 dark:bg-gray-800/50 rounded-lg"},w={key:1,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},T={key:0,class:"text-center p-6 bg-gray-50 dark:bg-gray-800/50 rounded-lg"},R={key:1,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},M={__name:"AppsSettings",setup(S){const a=b(),l=v(),{userApps:d,systemApps:p}=A(a);h(()=>{a.fetchApps()});function u(){l.openModal("serviceRegistration",{itemType:"app",ownerType:"user",onRegistered:a.fetchApps})}function f(n){l.openModal("serviceRegistration",{item:n,itemType:"app",ownerType:"user",onRegistered:a.fetchApps})}async function x(n){await l.showConfirmation({title:`Delete App '${n.name}'?`,message:"This will permanently remove your registered app. This action cannot be undone.",confirmText:"Delete"})&&await a.deleteApp(n.id)}return(n,t)=>(s(),r("div",k,[e("div",null,[e("div",{class:"flex justify-between items-center mb-4"},[t[0]||(t[0]=e("div",null,[e("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," My Personal Apps "),e("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Apps you have personally registered. They are only visible and usable by you. ")],-1)),e("button",{onClick:u,class:"btn btn-primary"},"Register New App")]),o(d).length===0?(s(),r("div",_,t[1]||(t[1]=[e("p",{class:"text-gray-500"},"You have no personal apps registered.",-1)]))):(s(),r("div",w,[(s(!0),r(c,null,g(o(d),i=>(s(),y(m,{key:i.id,mcp:i,"is-editable":"",onEdit:f,onDelete:x},null,8,["mcp"]))),128))]))]),e("div",null,[t[3]||(t[3]=e("div",{class:"mb-4"},[e("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," Available System Apps "),e("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Apps provided by the administrator for everyone to use. ")],-1)),o(p).length===0?(s(),r("div",T,t[2]||(t[2]=[e("p",{class:"text-gray-500"},"No system-wide apps are currently available.",-1)]))):(s(),r("div",R,[(s(!0),r(c,null,g(o(p),i=>(s(),y(m,{key:i.id,mcp:i,"is-editable":!1},null,8,["mcp"]))),128))]))])]))}};export{M as default};
frontend/dist/ui_assets/arc-BZKKZ1US.js+1 −1 renamedfrontend/dist/ui_assets/architectureDiagram-W76B3OCA-DYFck9T_.js+1 −1 renamedfrontend/dist/ui_assets/ArtefactEditorModal-BPnwWLuU.js+1 −1 renamed@@ -1 +1 @@ -import{K as F,N as R,c as y,s as u,w as L,n as K,l as n,g as N,e as a,j as q,t as B,H as z,d as o,h as E,z as O,L as H,f as x,T as W,m as V,ah as G,ai as J,F as T,i as j,p as M}from"./index-CEXks4lv.js";import{_ as Q}from"./GenericModal-Br5hR2Sz.js";const X=["disabled"],Y={key:0,class:"text-xs text-gray-500 mt-1"},Z={class:"flex justify-between items-center mb-2"},ee={class:"flex items-center gap-2"},te=["disabled"],ae={key:0,class:"text-center text-sm text-gray-500 p-4 border-2 border-dashed rounded-lg"},se={key:1,class:"grid grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-2 p-2 border rounded-lg"},le=["src"],ne=["onClick"],oe=["src"],re=["onClick"],ie={key:0,class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},ue={class:"flex-grow flex flex-col"},de={class:"text-sm text-gray-500 dark:text-gray-400"},pe={__name:"ArtefactEditorModal",setup(ce){const p=F(),k=R(),I=y(()=>p.modalData("artefactEditor")),d=y(()=>{var t;return(t=I.value)==null?void 0:t.artefact}),h=y(()=>{var t;return(t=I.value)==null?void 0:t.discussionId}),c=y(()=>{var t;return!!((t=d.value)!=null&&t.title)}),g=u(""),f=u(""),v=u([]),b=u([]),m=u([]),_=u(null),r=u(!1);L(()=>p.isModalOpen("artefactEditor"),t=>{var e,s,l;t&&(g.value=((e=d.value)==null?void 0:e.title)||"",f.value=((s=d.value)==null?void 0:s.content)||"",v.value=(((l=d.value)==null?void 0:l.images)||[]).map(i=>`data:image/png;base64,${i}`),b.value=[],m.value=[],r.value=!1)},{immediate:!0});function P(){var t;(t=_.value)==null||t.click()}async function S(t){const e=Array.from(t.target.files);for(const s of e){b.value.push(s);const l=new FileReader;l.onload=i=>{m.value.push(i.target.result)},l.readAsDataURL(s)}t.target.value=""}function U(t){v.value.splice(t,1)}function $(t){b.value.splice(t,1),m.value.splice(t,1)}function D(){v.value=[],b.value=[],m.value=[]}const C=y(()=>[...v.value,...m.value]);async function A(){if(!g.value.trim()||!h.value){p.addNotification("Title is required.","warning");return}const t=await Promise.all(b.value.map(s=>new Promise((l,i)=>{const w=new FileReader;w.onload=()=>l(w.result.split(",")[1]),w.onerror=i,w.readAsDataURL(s)}))),e=v.value.map(s=>s.split(",")[1]);c.value?await k.updateArtefact({discussionId:h.value,artefactTitle:d.value.title,newContent:f.value,newImagesB64:t,keptImagesB64:e,version:d.value.version,updateInPlace:r.value}):await k.createManualArtefact({discussionId:h.value,title:g.value,content:f.value,imagesB64:[...e,...t]}),p.closeModal("artefactEditor")}return(t,e)=>(n(),K(Q,{modalName:"artefactEditor",title:c.value?"Edit Artefact":"Create New Artefact",maxWidthClass:"max-w-4xl"},{body:N(()=>[a("form",{onSubmit:z(A,["prevent"]),class:"space-y-4"},[a("div",null,[e[4]||(e[4]=a("label",{for:"artefact-title",class:"label"},"Title",-1)),O(a("input",{id:"artefact-title",type:"text","onUpdate:modelValue":e[0]||(e[0]=s=>g.value=s),class:"input-field",disabled:c.value,required:""},null,8,X),[[H,g.value]]),c.value?(n(),o("p",Y,"Title cannot be changed after creation.")):E("",!0)]),a("div",null,[e[5]||(e[5]=a("label",{for:"artefact-content",class:"label"},"Content",-1)),x(W,{modelValue:f.value,"onUpdate:modelValue":e[1]||(e[1]=s=>f.value=s),class:"h-64"},null,8,["modelValue"])]),a("div",null,[a("div",Z,[e[8]||(e[8]=a("label",{class:"label"},"Images",-1)),a("div",ee,[a("button",{onClick:D,type:"button",class:"btn btn-danger-outline btn-sm",disabled:C.value.length===0},[x(G,{class:"w-4 h-4 mr-1"}),e[6]||(e[6]=V(" Remove All "))],8,te),a("button",{onClick:P,type:"button",class:"btn btn-secondary btn-sm"},[x(J,{class:"w-4 h-4 mr-1"}),e[7]||(e[7]=V(" Add Images "))])])]),a("input",{type:"file",ref_key:"imageInput",ref:_,onChange:S,multiple:"",accept:"image/*",class:"hidden"},null,544),C.value.length===0?(n(),o("div",ae," No images attached. ")):(n(),o("div",se,[(n(!0),o(T,null,j(v.value,(s,l)=>(n(),o("div",{key:s,class:"relative group"},[a("img",{src:s,class:"w-full h-24 object-cover rounded-md",alt:"Kept image"},null,8,le),a("button",{onClick:i=>U(l),type:"button",class:"absolute top-1 right-1 bg-red-500 text-white rounded-full w-5 h-5 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity"},"×",8,ne)]))),128)),(n(!0),o(T,null,j(m.value,(s,l)=>(n(),o("div",{key:s,class:"relative group"},[a("img",{src:s,class:"w-full h-24 object-cover rounded-md",alt:"New image preview"},null,8,oe),a("button",{onClick:i=>$(l),type:"button",class:"absolute top-1 right-1 bg-red-500 text-white rounded-full w-5 h-5 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity"},"×",8,re)]))),128))]))]),c.value?(n(),o("div",ie,[a("span",ue,[e[9]||(e[9]=a("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Update Current Version",-1)),a("span",de,B(r.value?"Overwrite this version directly.":"Create a new version with your changes."),1)]),a("button",{onClick:e[2]||(e[2]=s=>r.value=!r.value),type:"button",class:M([r.value?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[a("span",{class:M([r.value?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2)])):E("",!0)],32)]),footer:N(()=>[a("button",{onClick:e[3]||(e[3]=s=>q(p).closeModal("artefactEditor")),type:"button",class:"btn btn-secondary"},"Cancel"),a("button",{onClick:A,type:"button",class:"btn btn-primary"},B(c.value?"Save Changes":"Create Artefact"),1)]),_:1},8,["title"]))}};export{pe as default}; +import{K as F,N as R,c as y,s as u,w as L,n as K,l as n,g as N,e as a,j as q,t as B,H as z,d as o,h as E,z as O,L as H,f as x,Y as W,m as V,ah as Y,ai as G,F as j,i as M,p as P}from"./index-BBRgbnZQ.js";import{_ as J}from"./GenericModal-eXiOHk6I.js";const Q=["disabled"],X={key:0,class:"text-xs text-gray-500 mt-1"},Z={class:"flex justify-between items-center mb-2"},ee={class:"flex items-center gap-2"},te=["disabled"],ae={key:0,class:"text-center text-sm text-gray-500 p-4 border-2 border-dashed rounded-lg"},se={key:1,class:"grid grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-2 p-2 border rounded-lg"},le=["src"],ne=["onClick"],oe=["src"],re=["onClick"],ie={key:0,class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},ue={class:"flex-grow flex flex-col"},de={class:"text-sm text-gray-500 dark:text-gray-400"},pe={__name:"ArtefactEditorModal",setup(ce){const p=F(),k=R(),I=y(()=>p.modalData("artefactEditor")),d=y(()=>{var t;return(t=I.value)==null?void 0:t.artefact}),h=y(()=>{var t;return(t=I.value)==null?void 0:t.discussionId}),c=y(()=>{var t;return!!((t=d.value)!=null&&t.title)}),g=u(""),f=u(""),v=u([]),b=u([]),m=u([]),_=u(null),r=u(!1);L(()=>p.isModalOpen("artefactEditor"),t=>{var e,s,l;t&&(g.value=((e=d.value)==null?void 0:e.title)||"",f.value=((s=d.value)==null?void 0:s.content)||"",v.value=(((l=d.value)==null?void 0:l.images)||[]).map(i=>`data:image/png;base64,${i}`),b.value=[],m.value=[],r.value=!1)},{immediate:!0});function S(){var t;(t=_.value)==null||t.click()}async function T(t){const e=Array.from(t.target.files);for(const s of e){b.value.push(s);const l=new FileReader;l.onload=i=>{m.value.push(i.target.result)},l.readAsDataURL(s)}t.target.value=""}function U(t){v.value.splice(t,1)}function $(t){b.value.splice(t,1),m.value.splice(t,1)}function D(){v.value=[],b.value=[],m.value=[]}const C=y(()=>[...v.value,...m.value]);async function A(){if(!g.value.trim()||!h.value){p.addNotification("Title is required.","warning");return}const t=await Promise.all(b.value.map(s=>new Promise((l,i)=>{const w=new FileReader;w.onload=()=>l(w.result.split(",")[1]),w.onerror=i,w.readAsDataURL(s)}))),e=v.value.map(s=>s.split(",")[1]);c.value?await k.updateArtefact({discussionId:h.value,artefactTitle:d.value.title,newContent:f.value,newImagesB64:t,keptImagesB64:e,version:d.value.version,updateInPlace:r.value}):await k.createManualArtefact({discussionId:h.value,title:g.value,content:f.value,imagesB64:[...e,...t]}),p.closeModal("artefactEditor")}return(t,e)=>(n(),K(J,{modalName:"artefactEditor",title:c.value?"Edit Artefact":"Create New Artefact",maxWidthClass:"max-w-4xl"},{body:N(()=>[a("form",{onSubmit:z(A,["prevent"]),class:"space-y-4"},[a("div",null,[e[4]||(e[4]=a("label",{for:"artefact-title",class:"label"},"Title",-1)),O(a("input",{id:"artefact-title",type:"text","onUpdate:modelValue":e[0]||(e[0]=s=>g.value=s),class:"input-field",disabled:c.value,required:""},null,8,Q),[[H,g.value]]),c.value?(n(),o("p",X,"Title cannot be changed after creation.")):E("",!0)]),a("div",null,[e[5]||(e[5]=a("label",{for:"artefact-content",class:"label"},"Content",-1)),x(W,{modelValue:f.value,"onUpdate:modelValue":e[1]||(e[1]=s=>f.value=s),class:"h-64"},null,8,["modelValue"])]),a("div",null,[a("div",Z,[e[8]||(e[8]=a("label",{class:"label"},"Images",-1)),a("div",ee,[a("button",{onClick:D,type:"button",class:"btn btn-danger-outline btn-sm",disabled:C.value.length===0},[x(Y,{class:"w-4 h-4 mr-1"}),e[6]||(e[6]=V(" Remove All "))],8,te),a("button",{onClick:S,type:"button",class:"btn btn-secondary btn-sm"},[x(G,{class:"w-4 h-4 mr-1"}),e[7]||(e[7]=V(" Add Images "))])])]),a("input",{type:"file",ref_key:"imageInput",ref:_,onChange:T,multiple:"",accept:"image/*",class:"hidden"},null,544),C.value.length===0?(n(),o("div",ae," No images attached. ")):(n(),o("div",se,[(n(!0),o(j,null,M(v.value,(s,l)=>(n(),o("div",{key:s,class:"relative group"},[a("img",{src:s,class:"w-full h-24 object-cover rounded-md",alt:"Kept image"},null,8,le),a("button",{onClick:i=>U(l),type:"button",class:"absolute top-1 right-1 bg-red-500 text-white rounded-full w-5 h-5 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity"},"×",8,ne)]))),128)),(n(!0),o(j,null,M(m.value,(s,l)=>(n(),o("div",{key:s,class:"relative group"},[a("img",{src:s,class:"w-full h-24 object-cover rounded-md",alt:"New image preview"},null,8,oe),a("button",{onClick:i=>$(l),type:"button",class:"absolute top-1 right-1 bg-red-500 text-white rounded-full w-5 h-5 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity"},"×",8,re)]))),128))]))]),c.value?(n(),o("div",ie,[a("span",ue,[e[9]||(e[9]=a("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Update Current Version",-1)),a("span",de,B(r.value?"Overwrite this version directly.":"Create a new version with your changes."),1)]),a("button",{onClick:e[2]||(e[2]=s=>r.value=!r.value),type:"button",class:P([r.value?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[a("span",{class:P([r.value?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2)])):E("",!0)],32)]),footer:N(()=>[a("button",{onClick:e[3]||(e[3]=s=>q(p).closeModal("artefactEditor")),type:"button",class:"btn btn-secondary"},"Cancel"),a("button",{onClick:A,type:"button",class:"btn btn-primary"},B(c.value?"Save Changes":"Create Artefact"),1)]),_:1},8,["title"]))}};export{pe as default};
frontend/dist/ui_assets/ArtefactViewerModal-Cwu4CKIk.js+1 −1 renamed@@ -1 +1 @@ -import{K as x,c as s,n as k,l as a,g as p,e as o,j as _,d as l,h as i,F as h,i as w,f as b,M as V,m as C,p as S,t as $}from"./index-CEXks4lv.js";import{_ as A}from"./GenericModal-Br5hR2Sz.js";const B={key:0,class:"space-y-4"},M={key:0,class:"text-center text-gray-500 italic p-4"},N={key:1,class:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-4"},D=["src","onClick"],F={key:2},j={class:"p-4 bg-gray-50 dark:bg-gray-900/50 rounded-lg max-h-[60vh] overflow-y-auto"},I={key:3,class:"pt-4 border-t dark:border-gray-700"},T={class:"text-sm font-semibold text-gray-700 dark:text-gray-200"},R={__name:"ArtefactViewerModal",setup(z){const c=x(),m=s(()=>c.modalData("artefactViewer")),e=s(()=>{var t;return((t=m.value)==null?void 0:t.artefact)||m.value||{}}),y=s(()=>e.value?e.value.title||e.value.document||"Artefact Details":"Artefact Viewer"),d=s(()=>{var t,r;return((t=e.value)==null?void 0:t.content)||((r=e.value)==null?void 0:r.chunk_text)||""}),u=s(()=>{var t;return((t=e.value)==null?void 0:t.images)||[]}),v=s(()=>d.value&&d.value.trim()!==""),g=s(()=>u.value&&u.value.length>0);return(t,r)=>(a(),k(A,{"modal-name":"artefactViewer",title:y.value,"max-width-class":"max-w-4xl"},{body:p(()=>[e.value?(a(),l("div",B,[v.value&&!g.value?(a(),l("div",M," This artefact has no displayable content or images. ")):i("",!0),g.value?(a(),l("div",N,[(a(!0),l(h,null,w(u.value,(n,f)=>(a(),l("div",{key:`${f}-${n.slice(0,30)}`,class:"relative group rounded-lg overflow-hidden"},[o("img",{src:"data:image/png;base64,"+n,class:"w-full h-48 object-cover cursor-pointer",onClick:E=>{_(c).openImageViewer("data:image/png;base64,"+n)},alt:"Artefact image"},null,8,D)]))),128))])):i("",!0),v.value?(a(),l("div",F,[o("div",j,[b(V,{content:d.value},null,8,["content"])])])):i("",!0),e.value.similarity_percent?(a(),l("div",I,[o("p",T,[r[1]||(r[1]=C(" Similarity Score: ")),o("span",{class:S(["font-bold",{"text-green-600 dark:text-green-400":e.value.similarity_percent>=85,"text-yellow-600 dark:text-yellow-400":e.value.similarity_percent>=70&&e.value.similarity_percent<85,"text-red-600 dark:text-red-400":e.value.similarity_percent<70}])},$(e.value.similarity_percent.toFixed(2))+"% ",3)])])):i("",!0)])):i("",!0)]),footer:p(()=>[o("button",{onClick:r[0]||(r[0]=n=>_(c).closeModal("artefactViewer")),class:"btn btn-primary"},"Close")]),_:1},8,["title"]))}};export{R as default}; +import{K as x,c as s,n as k,l as a,g as p,e as o,j as _,d as l,h as i,F as h,i as w,f as b,M as V,m as C,p as S,t as $}from"./index-BBRgbnZQ.js";import{_ as A}from"./GenericModal-eXiOHk6I.js";const B={key:0,class:"space-y-4"},M={key:0,class:"text-center text-gray-500 italic p-4"},N={key:1,class:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-4"},D=["src","onClick"],F={key:2},j={class:"p-4 bg-gray-50 dark:bg-gray-900/50 rounded-lg max-h-[60vh] overflow-y-auto"},I={key:3,class:"pt-4 border-t dark:border-gray-700"},T={class:"text-sm font-semibold text-gray-700 dark:text-gray-200"},R={__name:"ArtefactViewerModal",setup(z){const c=x(),m=s(()=>c.modalData("artefactViewer")),e=s(()=>{var t;return((t=m.value)==null?void 0:t.artefact)||m.value||{}}),y=s(()=>e.value?e.value.title||e.value.document||"Artefact Details":"Artefact Viewer"),d=s(()=>{var t,r;return((t=e.value)==null?void 0:t.content)||((r=e.value)==null?void 0:r.chunk_text)||""}),u=s(()=>{var t;return((t=e.value)==null?void 0:t.images)||[]}),v=s(()=>d.value&&d.value.trim()!==""),g=s(()=>u.value&&u.value.length>0);return(t,r)=>(a(),k(A,{"modal-name":"artefactViewer",title:y.value,"max-width-class":"max-w-4xl"},{body:p(()=>[e.value?(a(),l("div",B,[v.value&&!g.value?(a(),l("div",M," This artefact has no displayable content or images. ")):i("",!0),g.value?(a(),l("div",N,[(a(!0),l(h,null,w(u.value,(n,f)=>(a(),l("div",{key:`${f}-${n.slice(0,30)}`,class:"relative group rounded-lg overflow-hidden"},[o("img",{src:"data:image/png;base64,"+n,class:"w-full h-48 object-cover cursor-pointer",onClick:E=>{_(c).openImageViewer("data:image/png;base64,"+n)},alt:"Artefact image"},null,8,D)]))),128))])):i("",!0),v.value?(a(),l("div",F,[o("div",j,[b(V,{content:d.value},null,8,["content"])])])):i("",!0),e.value.similarity_percent?(a(),l("div",I,[o("p",T,[r[1]||(r[1]=C(" Similarity Score: ")),o("span",{class:S(["font-bold",{"text-green-600 dark:text-green-400":e.value.similarity_percent>=85,"text-yellow-600 dark:text-yellow-400":e.value.similarity_percent>=70&&e.value.similarity_percent<85,"text-red-600 dark:text-red-400":e.value.similarity_percent<70}])},$(e.value.similarity_percent.toFixed(2))+"% ",3)])])):i("",!0)])):i("",!0)]),footer:p(()=>[o("button",{onClick:r[0]||(r[0]=n=>_(c).closeModal("artefactViewer")),class:"btn btn-primary"},"Close")]),_:1},8,["title"]))}};export{R as default};
frontend/dist/ui_assets/_basePickBy-T3XXz4Bv.js+1 −1 renamedfrontend/dist/ui_assets/_baseUniq-Dy_C42dY.js+1 −1 renamedfrontend/dist/ui_assets/BindingModelsManager-CjDoxmXU.js+0 −1 removed@@ -1 +0,0 @@ -import{K as pe,P as ye,a8 as _e,Q as K,s as v,c as S,w as W,o as xe,d as r,l as o,e as t,f as C,an as R,z as y,L as w,F as Q,i as X,p as f,h as _,t as T,au as we,H as ke,n as L,ai as he,at as Se,aq as Y,R as Te,J as Me,c9 as Ce}from"./index-CEXks4lv.js";import{u as Be}from"./admin-Dmx5gjU7.js";const Ae={class:"flex flex-col h-[70vh]"},Ne={key:0,class:"flex-grow flex items-center justify-center"},De={class:"text-center"},Ie={key:1,class:"flex flex-grow overflow-hidden"},$e={class:"w-1/3 border-r dark:border-gray-700 pr-4 flex flex-col min-w-[250px]"},je={class:"relative mb-2"},Ue={class:"overflow-y-auto flex-grow"},ze={key:0,class:"space-y-1"},Ge=["onClick"],Ve={class:"flex-grow min-w-0"},Fe={class:"font-medium text-sm truncate"},Re={key:0,class:"text-xs opacity-70 truncate"},Le={class:"flex-shrink-0 flex items-center gap-1"},Pe={key:0,class:"w-2 h-2 rounded-full bg-blue-500",title:"Binding Default"},Ee={key:1,class:"w-2 h-2 rounded-full bg-green-500",title:"Global Default"},qe={key:1,class:"text-center text-sm text-gray-500 py-4"},Je={class:"w-2/3 pl-4 overflow-y-auto"},Oe={key:0,class:"flex items-center justify-center h-full"},He={class:"text-center text-gray-500"},Ke={key:1},We={class:"flex items-center justify-between mb-4 pb-2 border-b dark:border-gray-700"},Qe=["title"],Xe={class:"flex gap-4"},Ye={class:"flex-shrink-0"},Ze={class:"group relative w-20 h-20 rounded-lg border-2 border-dashed border-gray-300 dark:border-gray-600 flex items-center justify-center bg-gray-50 dark:bg-gray-800"},et=["src"],tt={key:2,class:"absolute inset-0 bg-white/80 dark:bg-black/60 flex items-center justify-center rounded-md"},lt={key:3,class:"absolute inset-0 bg-black/60 rounded-md flex items-center justify-center gap-2 opacity-0 group-hover:opacity-100 transition-opacity"},at={class:"flex-grow space-y-3"},it={key:0,class:"p-4 border rounded-lg dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50"},nt={class:"grid grid-cols-2 gap-4"},st={class:"col-span-2 sm:col-span-1"},ot={class:"flex items-center gap-2"},rt=["disabled"],dt={class:"mt-4 pt-3 border-t dark:border-gray-600"},ut={class:"flex items-center justify-between mb-2"},ct={class:"flex items-center gap-2"},gt={key:0,class:"grid grid-cols-2 gap-4"},vt={class:"flex items-center justify-between pt-6"},ft={key:1,class:"p-4 border rounded-lg dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50"},mt={class:"grid grid-cols-2 gap-4"},bt=["for"],pt=["type","id","onUpdate:modelValue","placeholder"],yt={key:1,class:"mt-1"},_t=["onClick"],xt={key:2,class:"grid grid-cols-2 gap-4"},wt={class:"flex items-center justify-between p-3 border rounded-md dark:border-gray-700"},kt={class:"flex items-center gap-2"},ht={class:"flex items-center justify-between p-3 border rounded-md dark:border-gray-700"},St={class:"flex items-center justify-between p-3 border rounded-md dark:border-gray-700"},Tt={class:"flex justify-end gap-3 pt-2"},Mt=["disabled"],Ct=["disabled"],Bt={class:"border-t dark:border-gray-600 pt-4"},At={class:"space-y-3"},Nt={class:"flex items-center justify-between"},Dt=["disabled"],It={key:0,class:"flex items-center justify-between"},$t=["disabled"],zt={__name:"BindingModelsManager",props:{binding:{type:Object,required:!0},bindingType:{type:String,required:!0}},setup(B){const n=B,m=pe(),d=Be();ye();const Z=_e(),{globalSettings:ee,availableBindingTypes:te,availableTtiBindingTypes:le,availableTtsBindingTypes:ae,ttiBindings:P}=K(d),{tasks:ie}=K(Z),N=v(!0),k=v(!1),D=v(!1),I=v(!1),$=v(!1),M=v(null),z=v(!1),E=v(null),b=v([]),s=v(null),j=v(""),A=v([]),ne=S(()=>P.value&&P.value.some(i=>i.is_active)),G=()=>({icon:"",title:"",name:"",description:"",has_vision:!0,ctx_size:null,ctx_size_locked:!1,temperature:null,top_k:null,top_p:null,repeat_penalty:null,repeat_last_n:null,allow_parameters_override:!0,reasoning_activation:!1,reasoning_effort:null,reasoning_summary:!1}),a=v(G()),V=S(()=>M.value?ie.value.find(i=>i.id===M.value):null),se=S(()=>z.value?!0:V.value?["pending","running"].includes(V.value.status):!1);W(V,i=>{if(i)if(i.status==="completed"){let e=i.result;if(e&&typeof e=="string")try{e=JSON.parse(e)}catch{}let l=e&&typeof e=="object"&&e.icon_base64?e.icon_base64:typeof e=="string"?e:null;l?(a.value.icon=l.startsWith("data:image")?l:`data:image/png;base64,${l}`,m.addNotification("Icon generated successfully!","success")):m.addNotification("Icon generation completed, but no image was returned.","warning"),M.value=null}else(i.status==="failed"||i.status==="cancelled")&&(m.addNotification(`Icon generation failed: ${i.error||"Unknown error."}`,"error"),M.value=null)});const q=S(()=>{if(!j.value)return b.value;const i=j.value.toLowerCase();return b.value.filter(e=>{var l,u;return e.original_model_name.toLowerCase().includes(i)||((u=(l=e.alias)==null?void 0:l.title)==null?void 0:u.toLowerCase().includes(i))})}),J=S(()=>{const i=ee.value.find(e=>e.key==="default_lollms_model_name");return i?i.value:null}),O=S(()=>s.value&&n.binding&&s.value.original_model_name===n.binding.default_model_name),H=S(()=>s.value&&n.binding&&`${n.binding.alias}/${s.value.original_model_name}`===J.value),oe=i=>n.binding&&i===n.binding.default_model_name,re=i=>n.binding&&`${n.binding.alias}/${i}`===J.value;async function U(){if(!n.binding){N.value=!1,b.value=[];return}N.value=!0;try{switch(n.bindingType){case"llm":b.value=await d.fetchBindingModels(n.binding.id);break;case"tti":b.value=await d.fetchTtiBindingModels(n.binding.id);break;case"tts":b.value=await d.fetchTtsBindingModels(n.binding.id);break;case"stt":b.value=await d.fetchSttBindingModels(n.binding.id);break;case"rag":b.value=await d.fetchRagBindingModels(n.binding.id);break;default:b.value=[]}}finally{N.value=!1}}function F(i){var c;s.value=i;const e={...G(),...i.alias||{}};n.bindingType==="llm"&&!e.name&&(e.name=e.title||i.original_model_name);let l;n.bindingType==="tti"?l=le.value:n.bindingType==="tts"?l=ae.value:n.bindingType==="rag"?l=d.availableRagBindingTypes:l=te.value;const u=(c=n.binding)==null?void 0:c.name;if(u){const p=l.find(g=>(g.binding_name||g.name)===u),x=(p==null?void 0:p.model_parameters)||(p==null?void 0:p.input_parameters)||[];A.value=x,x.forEach(g=>{g.name in e||(e[g.name]=g.default)})}else A.value=[];a.value=e}async function de(){if(!(!s.value||!n.binding||n.bindingType!=="llm")){$.value=!0;try{const i=await d.getModelCtxSize(n.binding.id,s.value.original_model_name);i!==null&&(a.value.ctx_size=i)}finally{$.value=!1}}}async function ue(){if(!a.value.title&&!s.value.original_model_name){m.addNotification("Please provide an Alias Title to generate an icon.","warning");return}z.value=!0,M.value=null;try{const e=`a high-quality, abstract, minimalist, vector logo for an AI model named "${a.value.title||s.value.original_model_name}". Description: ${a.value.description||"General purpose model."}`,l=await d.generateIconForModel(e);l!=null&&l.id&&(M.value=l.id,m.addNotification("Icon generation started...","info"))}finally{z.value=!1}}async function ce(){if(!(!s.value||!n.binding)){k.value=!0;try{const i={...a.value};let e={};n.bindingType==="llm"?(i.title&&(i.name=i.title),["ctx_size","temperature","top_k","top_p","repeat_penalty","repeat_last_n"].forEach(u=>{const c=i[u];i[u]=c===""||c===null||isNaN(parseFloat(c))?null:Number(c)}),e={original_model_name:s.value.original_model_name,alias:i},await d.saveModelAlias(n.binding.id,e)):(A.value.forEach(u=>{if(["int","float"].includes(u.type)){const c=i[u.name];i[u.name]=c===""||c===null||isNaN(parseFloat(c))?null:Number(c)}}),e={original_model_name:s.value.original_model_name,alias:i},n.bindingType==="tti"?await d.saveTtiModelAlias(n.binding.id,e):n.bindingType==="tts"?await d.saveTtsModelAlias(n.binding.id,e):n.bindingType==="stt"?await d.saveSttModelAlias(n.binding.id,e):n.bindingType==="rag"&&await d.saveRagModelAlias(n.binding.id,e)),await U();const l=b.value.find(u=>u.original_model_name===s.value.original_model_name);l&&F(l),m.addNotification("Alias saved.","success")}finally{k.value=!1}}}async function ge(){var i;if(!(!((i=s.value)!=null&&i.alias)||!n.binding)&&await m.showConfirmation({title:"Delete Alias?",message:`Delete the alias for '${s.value.original_model_name}'?`,confirmText:"Delete"})){k.value=!0;try{switch(n.bindingType){case"llm":await d.deleteModelAlias(n.binding.id,s.value.original_model_name);break;case"tti":await d.deleteTtiModelAlias(n.binding.id,s.value.original_model_name);break;case"tts":await d.deleteTtsModelAlias(n.binding.id,s.value.original_model_name);break;case"stt":await d.deleteSttModelAlias(n.binding.id,s.value.original_model_name);break;case"rag":await d.deleteRagModelAlias(n.binding.id,s.value.original_model_name);break}await U();const e=b.value.find(l=>l.original_model_name===s.value.original_model_name);F(e||b.value[0]||null),m.addNotification("Alias deleted.","success")}finally{k.value=!1}}}async function ve(){if(!(!s.value||!n.binding)){D.value=!0;try{const i={default_model_name:s.value.original_model_name};switch(n.bindingType){case"llm":await d.updateBinding(n.binding.id,i);break;case"tti":await d.updateTtiBinding(n.binding.id,i);break;case"tts":await d.updateTtsBinding(n.binding.id,i);break;case"stt":await d.updateSttBinding(n.binding.id,i);break}m.addNotification("Binding default model updated.","success")}finally{D.value=!1}}}async function fe(){if(!(!s.value||!n.binding||n.bindingType!=="llm")){I.value=!0;try{const i=`${n.binding.alias}/${s.value.original_model_name}`;await d.updateGlobalSettings({default_lollms_model_name:i}),m.addNotification("Global default model for new users has been updated.","success")}finally{I.value=!1}}}function me(){E.value.click()}function be(i){const e=i.target.files[0];if(!e)return;if(e.size>5*1024*1024){m.addNotification("File is too large (max 5MB).","error");return}if(!["image/jpeg","image/png","image/webp"].includes(e.type)){m.addNotification("Invalid file type. Use JPG, PNG, or WEBP.","error");return}const l=new FileReader;l.onload=u=>{const c=new Image;c.onload=()=>{const p=document.createElement("canvas"),x=128;let{width:g,height:h}=c;g>h?g>x&&(h*=x/g,g=x):h>x&&(g*=x/h,h=x),p.width=g,p.height=h,p.getContext("2d").drawImage(c,0,0,g,h),a.value.icon=p.toDataURL("image/png")},c.src=u.target.result},l.readAsDataURL(e),i.target.value=""}return xe(()=>{U()}),W(()=>n.binding,i=>{i&&(s.value=null,a.value=G(),U())}),(i,e)=>(o(),r("div",Ae,[N.value?(o(),r("div",Ne,[t("div",De,[C(R,{class:"w-8 h-8 text-blue-500 mx-auto mb-2"}),e[15]||(e[15]=t("p",null,"Loading models...",-1))])])):(o(),r("div",Ie,[t("div",$e,[t("div",je,[y(t("input",{type:"text","onUpdate:modelValue":e[0]||(e[0]=l=>j.value=l),placeholder:"Search models...",class:"input-field w-full pl-8"},null,512),[[w,j.value]]),e[16]||(e[16]=t("div",{class:"absolute inset-y-0 left-0 pl-2 flex items-center pointer-events-none text-gray-400"},[t("svg",{class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"})])],-1))]),t("div",Ue,[q.value.length>0?(o(),r("ul",ze,[(o(!0),r(Q,null,X(q.value,l=>{var u;return o(),r("li",{key:l.original_model_name},[t("button",{onClick:c=>F(l),class:f(["w-full text-left p-2 rounded-md hover:bg-gray-100 dark:hover:bg-gray-700 flex items-center justify-between transition-colors",{"bg-blue-100 dark:bg-blue-900/50 text-blue-800 dark:text-blue-100":s.value&&s.value.original_model_name===l.original_model_name}])},[t("div",Ve,[t("p",Fe,T(((u=l.alias)==null?void 0:u.title)||l.original_model_name),1),l.alias?(o(),r("p",Re,T(l.original_model_name),1)):_("",!0)]),t("div",Le,[oe(l.original_model_name)?(o(),r("span",Pe)):_("",!0),re(l.original_model_name)?(o(),r("span",Ee)):_("",!0)])],10,Ge)])}),128))])):(o(),r("div",qe,"No models match your search."))])]),t("div",Je,[s.value?(o(),r("div",Ke,[t("div",We,[t("h3",{class:"font-semibold text-lg truncate pr-4",title:s.value.original_model_name},T(s.value.original_model_name),9,Qe)]),t("form",{onSubmit:ke(ce,["prevent"]),class:"space-y-5 pb-6"},[t("div",Xe,[t("div",Ye,[e[18]||(e[18]=t("label",{class:"label mb-1"},"Icon",-1)),t("div",Ze,[a.value.icon?(o(),r("img",{key:0,src:a.value.icon,alt:"Icon",class:"w-full h-full object-cover rounded-md"},null,8,et)):(o(),L(he,{key:1,class:"w-8 h-8 text-gray-400"})),se.value?(o(),r("div",tt,[C(R,{class:"w-6 h-6 text-blue-500"})])):(o(),r("div",lt,[t("input",{type:"file",ref_key:"fileInput",ref:E,onChange:be,class:"hidden",accept:"image/*"},null,544),t("button",{onClick:me,type:"button",title:"Upload",class:"text-white hover:text-blue-300"},[C(Se,{class:"w-5 h-5"})]),ne.value?(o(),r("button",{key:0,onClick:ue,type:"button",title:"Generate",class:"text-white hover:text-blue-300"},[C(Y,{class:"w-5 h-5"})])):_("",!0)]))])]),t("div",at,[t("div",null,[e[19]||(e[19]=t("label",{for:"alias-title",class:"label"},"Alias Title",-1)),y(t("input",{id:"alias-title","onUpdate:modelValue":e[1]||(e[1]=l=>a.value.title=l),type:"text",class:"input-field",placeholder:"Friendly Name"},null,512),[[w,a.value.title]])]),t("div",null,[e[20]||(e[20]=t("label",{for:"alias-description",class:"label"},"Description",-1)),y(t("input",{id:"alias-description","onUpdate:modelValue":e[2]||(e[2]=l=>a.value.description=l),type:"text",class:"input-field",placeholder:"Short description"},null,512),[[w,a.value.description]])])])]),B.bindingType==="llm"?(o(),r("div",it,[e[32]||(e[32]=t("h4",{class:"font-medium mb-3 text-sm"},"Generation Parameters",-1)),t("div",nt,[t("div",st,[e[21]||(e[21]=t("label",{class:"label text-xs"},"Context Size",-1)),t("div",ot,[y(t("input",{"onUpdate:modelValue":e[3]||(e[3]=l=>a.value.ctx_size=l),type:"number",class:"input-field",placeholder:"e.g. 4096"},null,512),[[w,a.value.ctx_size]]),t("button",{type:"button",onClick:de,class:"btn btn-secondary p-2 h-[38px]",title:"Auto-detect",disabled:$.value},[$.value?(o(),L(R,{key:0,class:"w-4 h-4"})):(o(),L(Y,{key:1,class:"w-4 h-4"}))],8,rt)])]),t("div",null,[e[22]||(e[22]=t("label",{class:"label text-xs"},"Temperature",-1)),y(t("input",{"onUpdate:modelValue":e[4]||(e[4]=l=>a.value.temperature=l),type:"number",step:"0.1",class:"input-field"},null,512),[[w,a.value.temperature]])]),t("div",null,[e[23]||(e[23]=t("label",{class:"label text-xs"},"Top K",-1)),y(t("input",{"onUpdate:modelValue":e[5]||(e[5]=l=>a.value.top_k=l),type:"number",class:"input-field"},null,512),[[w,a.value.top_k]])]),t("div",null,[e[24]||(e[24]=t("label",{class:"label text-xs"},"Top P",-1)),y(t("input",{"onUpdate:modelValue":e[6]||(e[6]=l=>a.value.top_p=l),type:"number",step:"0.01",class:"input-field"},null,512),[[w,a.value.top_p]])]),t("div",null,[e[25]||(e[25]=t("label",{class:"label text-xs"},"Repeat Penalty",-1)),y(t("input",{"onUpdate:modelValue":e[7]||(e[7]=l=>a.value.repeat_penalty=l),type:"number",step:"0.1",class:"input-field"},null,512),[[w,a.value.repeat_penalty]])]),t("div",null,[e[26]||(e[26]=t("label",{class:"label text-xs"},"Repeat Last N",-1)),y(t("input",{"onUpdate:modelValue":e[8]||(e[8]=l=>a.value.repeat_last_n=l),type:"number",class:"input-field"},null,512),[[w,a.value.repeat_last_n]])])]),t("div",dt,[t("div",ut,[e[28]||(e[28]=t("span",{class:"text-sm font-medium"},"Reasoning",-1)),t("div",ct,[e[27]||(e[27]=t("label",{class:"text-xs text-gray-500"},"Enable",-1)),t("button",{type:"button",onClick:e[9]||(e[9]=l=>a.value.reasoning_activation=!a.value.reasoning_activation),class:f([a.value.reasoning_activation?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full transition-colors duration-200 ease-in-out"])},[t("span",{class:f([a.value.reasoning_activation?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)])]),a.value.reasoning_activation?(o(),r("div",gt,[t("div",null,[e[30]||(e[30]=t("label",{class:"label text-xs"},"Effort",-1)),y(t("select",{"onUpdate:modelValue":e[10]||(e[10]=l=>a.value.reasoning_effort=l),class:"input-field"},e[29]||(e[29]=[t("option",{value:null},"Default",-1),t("option",{value:"low"},"Low",-1),t("option",{value:"medium"},"Medium",-1),t("option",{value:"high"},"High",-1)]),512),[[Te,a.value.reasoning_effort]])]),t("div",vt,[e[31]||(e[31]=t("span",{class:"text-xs font-medium"},"Summary",-1)),t("button",{type:"button",onClick:e[11]||(e[11]=l=>a.value.reasoning_summary=!a.value.reasoning_summary),class:f([a.value.reasoning_summary?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full transition-colors duration-200 ease-in-out"])},[t("span",{class:f([a.value.reasoning_summary?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)])])):_("",!0)])])):_("",!0),["tti","tts","stt"].includes(B.bindingType)&&A.value.length>0?(o(),r("div",ft,[e[33]||(e[33]=t("h4",{class:"font-medium mb-3 text-sm"},"Parameters",-1)),t("div",mt,[(o(!0),r(Q,null,X(A.value,l=>(o(),r("div",{key:l.name},[t("label",{for:`p-${l.name}`,class:"label text-xs"},T(l.title||l.name),9,bt),["str","int","float"].includes(l.type)?y((o(),r("input",{key:0,type:l.type==="str"?"text":"number",id:`p-${l.name}`,"onUpdate:modelValue":u=>a.value[l.name]=u,class:"input-field",placeholder:l.help||""},null,8,pt)),[[Me,a.value[l.name]]]):l.type==="bool"?(o(),r("div",yt,[t("button",{type:"button",onClick:u=>a.value[l.name]=!a.value[l.name],class:f([a.value[l.name]?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full transition-colors duration-200 ease-in-out"])},[t("span",{class:f([a.value[l.name]?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],10,_t)])):_("",!0)]))),128))])])):_("",!0),B.bindingType==="llm"?(o(),r("div",xt,[t("div",wt,[t("div",kt,[C(Ce,{class:"w-4 h-4 text-gray-500"}),e[34]||(e[34]=t("span",{class:"text-sm font-medium"},"Vision Support",-1))]),t("button",{type:"button",onClick:e[12]||(e[12]=l=>a.value.has_vision=!a.value.has_vision),class:f([a.value.has_vision?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full transition-colors duration-200 ease-in-out"])},[t("span",{class:f([a.value.has_vision?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),t("div",ht,[e[35]||(e[35]=t("div",{class:"flex items-center gap-2"},[t("span",{class:"text-sm font-medium"},"Lock Context")],-1)),t("button",{type:"button",onClick:e[13]||(e[13]=l=>a.value.ctx_size_locked=!a.value.ctx_size_locked),class:f([a.value.ctx_size_locked?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full transition-colors duration-200 ease-in-out"])},[t("span",{class:f([a.value.ctx_size_locked?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)])])):_("",!0),t("div",St,[e[36]||(e[36]=t("div",{class:"flex items-center gap-2"},[t("span",{class:"text-sm font-medium"},"Allow User Overrides")],-1)),t("button",{type:"button",onClick:e[14]||(e[14]=l=>a.value.allow_parameters_override=!a.value.allow_parameters_override),class:f([a.value.allow_parameters_override?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full transition-colors duration-200 ease-in-out"])},[t("span",{class:f([a.value.allow_parameters_override?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),t("div",Tt,[s.value.alias?(o(),r("button",{key:0,type:"button",onClick:ge,class:"btn btn-danger-outline",disabled:k.value},"Delete Alias",8,Mt)):_("",!0),t("button",{type:"submit",class:"btn btn-primary",disabled:k.value},T(k.value?"Saving...":"Save Alias"),9,Ct)])],32),t("div",Bt,[e[39]||(e[39]=t("h4",{class:"font-medium mb-3 text-sm"},"Defaults",-1)),t("div",At,[t("div",Nt,[e[37]||(e[37]=t("span",{class:"text-sm"},"Set as Default for this Binding",-1)),t("button",{onClick:ve,class:"text-blue-600 hover:underline text-sm font-medium",disabled:O.value||D.value},T(O.value?"Current Default":D.value?"Setting...":"Set"),9,Dt)]),B.bindingType==="llm"?(o(),r("div",It,[e[38]||(e[38]=t("span",{class:"text-sm"},"Set as Global System Default",-1)),t("button",{onClick:fe,class:"text-blue-600 hover:underline text-sm font-medium",disabled:H.value||I.value},T(H.value?"Current Global":I.value?"Setting...":"Set"),9,$t)])):_("",!0)])])])):(o(),r("div",Oe,[t("div",He,[C(we,{class:"w-12 h-12 mx-auto mb-2 opacity-50"}),e[17]||(e[17]=t("p",null,"Select a model to configure its alias and settings.",-1))])]))])]))]))}};export{zt as default};
frontend/dist/ui_assets/BindingModelsManager-Tycn4EOO.js+1 −0 added@@ -0,0 +1 @@ +import{K as pe,P as ye,Q as _e,R as K,s as v,c as S,w as W,o as xe,d as r,l as o,e as t,f as C,an as R,z as y,L as w,F as X,i as Q,p as f,h as _,t as T,au as we,H as ke,n as L,ai as he,at as Se,aq as Y,X as Te,J as Me,c9 as Ce}from"./index-BBRgbnZQ.js";import{u as Be}from"./admin-CwLQr1mG.js";const Ae={class:"flex flex-col h-[70vh]"},Ne={key:0,class:"flex-grow flex items-center justify-center"},De={class:"text-center"},Ie={key:1,class:"flex flex-grow overflow-hidden"},$e={class:"w-1/3 border-r dark:border-gray-700 pr-4 flex flex-col min-w-[250px]"},je={class:"relative mb-2"},Ue={class:"overflow-y-auto flex-grow"},ze={key:0,class:"space-y-1"},Ge=["onClick"],Ve={class:"flex-grow min-w-0"},Fe={class:"font-medium text-sm truncate"},Re={key:0,class:"text-xs opacity-70 truncate"},Le={class:"flex-shrink-0 flex items-center gap-1"},Pe={key:0,class:"w-2 h-2 rounded-full bg-blue-500",title:"Binding Default"},Ee={key:1,class:"w-2 h-2 rounded-full bg-green-500",title:"Global Default"},qe={key:1,class:"text-center text-sm text-gray-500 py-4"},Je={class:"w-2/3 pl-4 overflow-y-auto"},Oe={key:0,class:"flex items-center justify-center h-full"},He={class:"text-center text-gray-500"},Ke={key:1},We={class:"flex items-center justify-between mb-4 pb-2 border-b dark:border-gray-700"},Xe=["title"],Qe={class:"flex gap-4"},Ye={class:"flex-shrink-0"},Ze={class:"group relative w-20 h-20 rounded-lg border-2 border-dashed border-gray-300 dark:border-gray-600 flex items-center justify-center bg-gray-50 dark:bg-gray-800"},et=["src"],tt={key:2,class:"absolute inset-0 bg-white/80 dark:bg-black/60 flex items-center justify-center rounded-md"},lt={key:3,class:"absolute inset-0 bg-black/60 rounded-md flex items-center justify-center gap-2 opacity-0 group-hover:opacity-100 transition-opacity"},at={class:"flex-grow space-y-3"},it={key:0,class:"p-4 border rounded-lg dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50"},nt={class:"grid grid-cols-2 gap-4"},st={class:"col-span-2 sm:col-span-1"},ot={class:"flex items-center gap-2"},rt=["disabled"],dt={class:"mt-4 pt-3 border-t dark:border-gray-600"},ut={class:"flex items-center justify-between mb-2"},ct={class:"flex items-center gap-2"},gt={key:0,class:"grid grid-cols-2 gap-4"},vt={class:"flex items-center justify-between pt-6"},ft={key:1,class:"p-4 border rounded-lg dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50"},mt={class:"grid grid-cols-2 gap-4"},bt=["for"],pt=["type","id","onUpdate:modelValue","placeholder"],yt={key:1,class:"mt-1"},_t=["onClick"],xt={key:2,class:"grid grid-cols-2 gap-4"},wt={class:"flex items-center justify-between p-3 border rounded-md dark:border-gray-700"},kt={class:"flex items-center gap-2"},ht={class:"flex items-center justify-between p-3 border rounded-md dark:border-gray-700"},St={class:"flex items-center justify-between p-3 border rounded-md dark:border-gray-700"},Tt={class:"flex justify-end gap-3 pt-2"},Mt=["disabled"],Ct=["disabled"],Bt={class:"border-t dark:border-gray-600 pt-4"},At={class:"space-y-3"},Nt={class:"flex items-center justify-between"},Dt=["disabled"],It={key:0,class:"flex items-center justify-between"},$t=["disabled"],zt={__name:"BindingModelsManager",props:{binding:{type:Object,required:!0},bindingType:{type:String,required:!0}},setup(B){const n=B,m=pe(),d=Be();ye();const Z=_e(),{globalSettings:ee,availableBindingTypes:te,availableTtiBindingTypes:le,availableTtsBindingTypes:ae,ttiBindings:P}=K(d),{tasks:ie}=K(Z),N=v(!0),k=v(!1),D=v(!1),I=v(!1),$=v(!1),M=v(null),z=v(!1),E=v(null),b=v([]),s=v(null),j=v(""),A=v([]),ne=S(()=>P.value&&P.value.some(i=>i.is_active)),G=()=>({icon:"",title:"",name:"",description:"",has_vision:!0,ctx_size:null,ctx_size_locked:!1,temperature:null,top_k:null,top_p:null,repeat_penalty:null,repeat_last_n:null,allow_parameters_override:!0,reasoning_activation:!1,reasoning_effort:null,reasoning_summary:!1}),a=v(G()),V=S(()=>M.value?ie.value.find(i=>i.id===M.value):null),se=S(()=>z.value?!0:V.value?["pending","running"].includes(V.value.status):!1);W(V,i=>{if(i)if(i.status==="completed"){let e=i.result;if(e&&typeof e=="string")try{e=JSON.parse(e)}catch{}let l=e&&typeof e=="object"&&e.icon_base64?e.icon_base64:typeof e=="string"?e:null;l?(a.value.icon=l.startsWith("data:image")?l:`data:image/png;base64,${l}`,m.addNotification("Icon generated successfully!","success")):m.addNotification("Icon generation completed, but no image was returned.","warning"),M.value=null}else(i.status==="failed"||i.status==="cancelled")&&(m.addNotification(`Icon generation failed: ${i.error||"Unknown error."}`,"error"),M.value=null)});const q=S(()=>{if(!j.value)return b.value;const i=j.value.toLowerCase();return b.value.filter(e=>{var l,u;return e.original_model_name.toLowerCase().includes(i)||((u=(l=e.alias)==null?void 0:l.title)==null?void 0:u.toLowerCase().includes(i))})}),J=S(()=>{const i=ee.value.find(e=>e.key==="default_lollms_model_name");return i?i.value:null}),O=S(()=>s.value&&n.binding&&s.value.original_model_name===n.binding.default_model_name),H=S(()=>s.value&&n.binding&&`${n.binding.alias}/${s.value.original_model_name}`===J.value),oe=i=>n.binding&&i===n.binding.default_model_name,re=i=>n.binding&&`${n.binding.alias}/${i}`===J.value;async function U(){if(!n.binding){N.value=!1,b.value=[];return}N.value=!0;try{switch(n.bindingType){case"llm":b.value=await d.fetchBindingModels(n.binding.id);break;case"tti":b.value=await d.fetchTtiBindingModels(n.binding.id);break;case"tts":b.value=await d.fetchTtsBindingModels(n.binding.id);break;case"stt":b.value=await d.fetchSttBindingModels(n.binding.id);break;case"rag":b.value=await d.fetchRagBindingModels(n.binding.id);break;default:b.value=[]}}finally{N.value=!1}}function F(i){var c;s.value=i;const e={...G(),...i.alias||{}};n.bindingType==="llm"&&!e.name&&(e.name=e.title||i.original_model_name);let l;n.bindingType==="tti"?l=le.value:n.bindingType==="tts"?l=ae.value:n.bindingType==="rag"?l=d.availableRagBindingTypes:l=te.value;const u=(c=n.binding)==null?void 0:c.name;if(u){const p=l.find(g=>(g.binding_name||g.name)===u),x=(p==null?void 0:p.model_parameters)||(p==null?void 0:p.input_parameters)||[];A.value=x,x.forEach(g=>{g.name in e||(e[g.name]=g.default)})}else A.value=[];a.value=e}async function de(){if(!(!s.value||!n.binding||n.bindingType!=="llm")){$.value=!0;try{const i=await d.getModelCtxSize(n.binding.id,s.value.original_model_name);i!==null&&(a.value.ctx_size=i)}finally{$.value=!1}}}async function ue(){if(!a.value.title&&!s.value.original_model_name){m.addNotification("Please provide an Alias Title to generate an icon.","warning");return}z.value=!0,M.value=null;try{const e=`a high-quality, abstract, minimalist, vector logo for an AI model named "${a.value.title||s.value.original_model_name}". Description: ${a.value.description||"General purpose model."}`,l=await d.generateIconForModel(e);l!=null&&l.id&&(M.value=l.id,m.addNotification("Icon generation started...","info"))}finally{z.value=!1}}async function ce(){if(!(!s.value||!n.binding)){k.value=!0;try{const i={...a.value};let e={};n.bindingType==="llm"?(i.title&&(i.name=i.title),["ctx_size","temperature","top_k","top_p","repeat_penalty","repeat_last_n"].forEach(u=>{const c=i[u];i[u]=c===""||c===null||isNaN(parseFloat(c))?null:Number(c)}),e={original_model_name:s.value.original_model_name,alias:i},await d.saveModelAlias(n.binding.id,e)):(A.value.forEach(u=>{if(["int","float"].includes(u.type)){const c=i[u.name];i[u.name]=c===""||c===null||isNaN(parseFloat(c))?null:Number(c)}}),e={original_model_name:s.value.original_model_name,alias:i},n.bindingType==="tti"?await d.saveTtiModelAlias(n.binding.id,e):n.bindingType==="tts"?await d.saveTtsModelAlias(n.binding.id,e):n.bindingType==="stt"?await d.saveSttModelAlias(n.binding.id,e):n.bindingType==="rag"&&await d.saveRagModelAlias(n.binding.id,e)),await U();const l=b.value.find(u=>u.original_model_name===s.value.original_model_name);l&&F(l),m.addNotification("Alias saved.","success")}finally{k.value=!1}}}async function ge(){var i;if(!(!((i=s.value)!=null&&i.alias)||!n.binding)&&await m.showConfirmation({title:"Delete Alias?",message:`Delete the alias for '${s.value.original_model_name}'?`,confirmText:"Delete"})){k.value=!0;try{switch(n.bindingType){case"llm":await d.deleteModelAlias(n.binding.id,s.value.original_model_name);break;case"tti":await d.deleteTtiModelAlias(n.binding.id,s.value.original_model_name);break;case"tts":await d.deleteTtsModelAlias(n.binding.id,s.value.original_model_name);break;case"stt":await d.deleteSttModelAlias(n.binding.id,s.value.original_model_name);break;case"rag":await d.deleteRagModelAlias(n.binding.id,s.value.original_model_name);break}await U();const e=b.value.find(l=>l.original_model_name===s.value.original_model_name);F(e||b.value[0]||null),m.addNotification("Alias deleted.","success")}finally{k.value=!1}}}async function ve(){if(!(!s.value||!n.binding)){D.value=!0;try{const i={default_model_name:s.value.original_model_name};switch(n.bindingType){case"llm":await d.updateBinding(n.binding.id,i);break;case"tti":await d.updateTtiBinding(n.binding.id,i);break;case"tts":await d.updateTtsBinding(n.binding.id,i);break;case"stt":await d.updateSttBinding(n.binding.id,i);break}m.addNotification("Binding default model updated.","success")}finally{D.value=!1}}}async function fe(){if(!(!s.value||!n.binding||n.bindingType!=="llm")){I.value=!0;try{const i=`${n.binding.alias}/${s.value.original_model_name}`;await d.updateGlobalSettings({default_lollms_model_name:i}),m.addNotification("Global default model for new users has been updated.","success")}finally{I.value=!1}}}function me(){E.value.click()}function be(i){const e=i.target.files[0];if(!e)return;if(e.size>5*1024*1024){m.addNotification("File is too large (max 5MB).","error");return}if(!["image/jpeg","image/png","image/webp"].includes(e.type)){m.addNotification("Invalid file type. Use JPG, PNG, or WEBP.","error");return}const l=new FileReader;l.onload=u=>{const c=new Image;c.onload=()=>{const p=document.createElement("canvas"),x=128;let{width:g,height:h}=c;g>h?g>x&&(h*=x/g,g=x):h>x&&(g*=x/h,h=x),p.width=g,p.height=h,p.getContext("2d").drawImage(c,0,0,g,h),a.value.icon=p.toDataURL("image/png")},c.src=u.target.result},l.readAsDataURL(e),i.target.value=""}return xe(()=>{U()}),W(()=>n.binding,i=>{i&&(s.value=null,a.value=G(),U())}),(i,e)=>(o(),r("div",Ae,[N.value?(o(),r("div",Ne,[t("div",De,[C(R,{class:"w-8 h-8 text-blue-500 mx-auto mb-2"}),e[15]||(e[15]=t("p",null,"Loading models...",-1))])])):(o(),r("div",Ie,[t("div",$e,[t("div",je,[y(t("input",{type:"text","onUpdate:modelValue":e[0]||(e[0]=l=>j.value=l),placeholder:"Search models...",class:"input-field w-full pl-8"},null,512),[[w,j.value]]),e[16]||(e[16]=t("div",{class:"absolute inset-y-0 left-0 pl-2 flex items-center pointer-events-none text-gray-400"},[t("svg",{class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"})])],-1))]),t("div",Ue,[q.value.length>0?(o(),r("ul",ze,[(o(!0),r(X,null,Q(q.value,l=>{var u;return o(),r("li",{key:l.original_model_name},[t("button",{onClick:c=>F(l),class:f(["w-full text-left p-2 rounded-md hover:bg-gray-100 dark:hover:bg-gray-700 flex items-center justify-between transition-colors",{"bg-blue-100 dark:bg-blue-900/50 text-blue-800 dark:text-blue-100":s.value&&s.value.original_model_name===l.original_model_name}])},[t("div",Ve,[t("p",Fe,T(((u=l.alias)==null?void 0:u.title)||l.original_model_name),1),l.alias?(o(),r("p",Re,T(l.original_model_name),1)):_("",!0)]),t("div",Le,[oe(l.original_model_name)?(o(),r("span",Pe)):_("",!0),re(l.original_model_name)?(o(),r("span",Ee)):_("",!0)])],10,Ge)])}),128))])):(o(),r("div",qe,"No models match your search."))])]),t("div",Je,[s.value?(o(),r("div",Ke,[t("div",We,[t("h3",{class:"font-semibold text-lg truncate pr-4",title:s.value.original_model_name},T(s.value.original_model_name),9,Xe)]),t("form",{onSubmit:ke(ce,["prevent"]),class:"space-y-5 pb-6"},[t("div",Qe,[t("div",Ye,[e[18]||(e[18]=t("label",{class:"label mb-1"},"Icon",-1)),t("div",Ze,[a.value.icon?(o(),r("img",{key:0,src:a.value.icon,alt:"Icon",class:"w-full h-full object-cover rounded-md"},null,8,et)):(o(),L(he,{key:1,class:"w-8 h-8 text-gray-400"})),se.value?(o(),r("div",tt,[C(R,{class:"w-6 h-6 text-blue-500"})])):(o(),r("div",lt,[t("input",{type:"file",ref_key:"fileInput",ref:E,onChange:be,class:"hidden",accept:"image/*"},null,544),t("button",{onClick:me,type:"button",title:"Upload",class:"text-white hover:text-blue-300"},[C(Se,{class:"w-5 h-5"})]),ne.value?(o(),r("button",{key:0,onClick:ue,type:"button",title:"Generate",class:"text-white hover:text-blue-300"},[C(Y,{class:"w-5 h-5"})])):_("",!0)]))])]),t("div",at,[t("div",null,[e[19]||(e[19]=t("label",{for:"alias-title",class:"label"},"Alias Title",-1)),y(t("input",{id:"alias-title","onUpdate:modelValue":e[1]||(e[1]=l=>a.value.title=l),type:"text",class:"input-field",placeholder:"Friendly Name"},null,512),[[w,a.value.title]])]),t("div",null,[e[20]||(e[20]=t("label",{for:"alias-description",class:"label"},"Description",-1)),y(t("input",{id:"alias-description","onUpdate:modelValue":e[2]||(e[2]=l=>a.value.description=l),type:"text",class:"input-field",placeholder:"Short description"},null,512),[[w,a.value.description]])])])]),B.bindingType==="llm"?(o(),r("div",it,[e[32]||(e[32]=t("h4",{class:"font-medium mb-3 text-sm"},"Generation Parameters",-1)),t("div",nt,[t("div",st,[e[21]||(e[21]=t("label",{class:"label text-xs"},"Context Size",-1)),t("div",ot,[y(t("input",{"onUpdate:modelValue":e[3]||(e[3]=l=>a.value.ctx_size=l),type:"number",class:"input-field",placeholder:"e.g. 4096"},null,512),[[w,a.value.ctx_size]]),t("button",{type:"button",onClick:de,class:"btn btn-secondary p-2 h-[38px]",title:"Auto-detect",disabled:$.value},[$.value?(o(),L(R,{key:0,class:"w-4 h-4"})):(o(),L(Y,{key:1,class:"w-4 h-4"}))],8,rt)])]),t("div",null,[e[22]||(e[22]=t("label",{class:"label text-xs"},"Temperature",-1)),y(t("input",{"onUpdate:modelValue":e[4]||(e[4]=l=>a.value.temperature=l),type:"number",step:"0.1",class:"input-field"},null,512),[[w,a.value.temperature]])]),t("div",null,[e[23]||(e[23]=t("label",{class:"label text-xs"},"Top K",-1)),y(t("input",{"onUpdate:modelValue":e[5]||(e[5]=l=>a.value.top_k=l),type:"number",class:"input-field"},null,512),[[w,a.value.top_k]])]),t("div",null,[e[24]||(e[24]=t("label",{class:"label text-xs"},"Top P",-1)),y(t("input",{"onUpdate:modelValue":e[6]||(e[6]=l=>a.value.top_p=l),type:"number",step:"0.01",class:"input-field"},null,512),[[w,a.value.top_p]])]),t("div",null,[e[25]||(e[25]=t("label",{class:"label text-xs"},"Repeat Penalty",-1)),y(t("input",{"onUpdate:modelValue":e[7]||(e[7]=l=>a.value.repeat_penalty=l),type:"number",step:"0.1",class:"input-field"},null,512),[[w,a.value.repeat_penalty]])]),t("div",null,[e[26]||(e[26]=t("label",{class:"label text-xs"},"Repeat Last N",-1)),y(t("input",{"onUpdate:modelValue":e[8]||(e[8]=l=>a.value.repeat_last_n=l),type:"number",class:"input-field"},null,512),[[w,a.value.repeat_last_n]])])]),t("div",dt,[t("div",ut,[e[28]||(e[28]=t("span",{class:"text-sm font-medium"},"Reasoning",-1)),t("div",ct,[e[27]||(e[27]=t("label",{class:"text-xs text-gray-500"},"Enable",-1)),t("button",{type:"button",onClick:e[9]||(e[9]=l=>a.value.reasoning_activation=!a.value.reasoning_activation),class:f([a.value.reasoning_activation?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full transition-colors duration-200 ease-in-out"])},[t("span",{class:f([a.value.reasoning_activation?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)])]),a.value.reasoning_activation?(o(),r("div",gt,[t("div",null,[e[30]||(e[30]=t("label",{class:"label text-xs"},"Effort",-1)),y(t("select",{"onUpdate:modelValue":e[10]||(e[10]=l=>a.value.reasoning_effort=l),class:"input-field"},e[29]||(e[29]=[t("option",{value:null},"Default",-1),t("option",{value:"low"},"Low",-1),t("option",{value:"medium"},"Medium",-1),t("option",{value:"high"},"High",-1)]),512),[[Te,a.value.reasoning_effort]])]),t("div",vt,[e[31]||(e[31]=t("span",{class:"text-xs font-medium"},"Summary",-1)),t("button",{type:"button",onClick:e[11]||(e[11]=l=>a.value.reasoning_summary=!a.value.reasoning_summary),class:f([a.value.reasoning_summary?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full transition-colors duration-200 ease-in-out"])},[t("span",{class:f([a.value.reasoning_summary?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)])])):_("",!0)])])):_("",!0),["tti","tts","stt"].includes(B.bindingType)&&A.value.length>0?(o(),r("div",ft,[e[33]||(e[33]=t("h4",{class:"font-medium mb-3 text-sm"},"Parameters",-1)),t("div",mt,[(o(!0),r(X,null,Q(A.value,l=>(o(),r("div",{key:l.name},[t("label",{for:`p-${l.name}`,class:"label text-xs"},T(l.title||l.name),9,bt),["str","int","float"].includes(l.type)?y((o(),r("input",{key:0,type:l.type==="str"?"text":"number",id:`p-${l.name}`,"onUpdate:modelValue":u=>a.value[l.name]=u,class:"input-field",placeholder:l.help||""},null,8,pt)),[[Me,a.value[l.name]]]):l.type==="bool"?(o(),r("div",yt,[t("button",{type:"button",onClick:u=>a.value[l.name]=!a.value[l.name],class:f([a.value[l.name]?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full transition-colors duration-200 ease-in-out"])},[t("span",{class:f([a.value[l.name]?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],10,_t)])):_("",!0)]))),128))])])):_("",!0),B.bindingType==="llm"?(o(),r("div",xt,[t("div",wt,[t("div",kt,[C(Ce,{class:"w-4 h-4 text-gray-500"}),e[34]||(e[34]=t("span",{class:"text-sm font-medium"},"Vision Support",-1))]),t("button",{type:"button",onClick:e[12]||(e[12]=l=>a.value.has_vision=!a.value.has_vision),class:f([a.value.has_vision?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full transition-colors duration-200 ease-in-out"])},[t("span",{class:f([a.value.has_vision?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),t("div",ht,[e[35]||(e[35]=t("div",{class:"flex items-center gap-2"},[t("span",{class:"text-sm font-medium"},"Lock Context")],-1)),t("button",{type:"button",onClick:e[13]||(e[13]=l=>a.value.ctx_size_locked=!a.value.ctx_size_locked),class:f([a.value.ctx_size_locked?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full transition-colors duration-200 ease-in-out"])},[t("span",{class:f([a.value.ctx_size_locked?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)])])):_("",!0),t("div",St,[e[36]||(e[36]=t("div",{class:"flex items-center gap-2"},[t("span",{class:"text-sm font-medium"},"Allow User Overrides")],-1)),t("button",{type:"button",onClick:e[14]||(e[14]=l=>a.value.allow_parameters_override=!a.value.allow_parameters_override),class:f([a.value.allow_parameters_override?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full transition-colors duration-200 ease-in-out"])},[t("span",{class:f([a.value.allow_parameters_override?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),t("div",Tt,[s.value.alias?(o(),r("button",{key:0,type:"button",onClick:ge,class:"btn btn-danger-outline",disabled:k.value},"Delete Alias",8,Mt)):_("",!0),t("button",{type:"submit",class:"btn btn-primary",disabled:k.value},T(k.value?"Saving...":"Save Alias"),9,Ct)])],32),t("div",Bt,[e[39]||(e[39]=t("h4",{class:"font-medium mb-3 text-sm"},"Defaults",-1)),t("div",At,[t("div",Nt,[e[37]||(e[37]=t("span",{class:"text-sm"},"Set as Default for this Binding",-1)),t("button",{onClick:ve,class:"text-blue-600 hover:underline text-sm font-medium",disabled:O.value||D.value},T(O.value?"Current Default":D.value?"Setting...":"Set"),9,Dt)]),B.bindingType==="llm"?(o(),r("div",It,[e[38]||(e[38]=t("span",{class:"text-sm"},"Set as Global System Default",-1)),t("button",{onClick:fe,class:"text-blue-600 hover:underline text-sm font-medium",disabled:H.value||I.value},T(H.value?"Current Global":I.value?"Setting...":"Set"),9,$t)])):_("",!0)])])])):(o(),r("div",Oe,[t("div",He,[C(we,{class:"w-12 h-12 mx-auto mb-2 opacity-50"}),e[17]||(e[17]=t("p",null,"Select a model to configure its alias and settings.",-1))])]))])]))]))}};export{zt as default};
frontend/dist/ui_assets/BindingZoo-CY8K_Ul1.js+1 −0 added@@ -0,0 +1 @@ +import{K as k,Q as T,R as S,s as g,c as Z,o as z,w as B,d as a,l,e as i,t as d,z as N,L as C,f as x,an as F,F as L,i as M,h,m as j,W as I}from"./index-BBRgbnZQ.js";import{u as V}from"./admin-CwLQr1mG.js";const R={class:"flex flex-col h-[600px]"},$={class:"mb-4 flex items-center justify-between"},q={class:"font-semibold text-lg"},A=["disabled"],D={class:"mb-4 relative"},U={key:0,class:"flex-grow flex items-center justify-center"},E={class:"text-center"},K={key:1,class:"flex-grow flex items-center justify-center text-gray-500"},O={key:2,class:"flex-grow overflow-y-auto space-y-3 pr-2"},Q={class:"flex-grow"},W={class:"font-bold text-gray-900 dark:text-white"},G={class:"text-sm text-gray-600 dark:text-gray-300 mt-1"},H={class:"flex flex-wrap gap-2 mt-2 text-xs text-gray-500 dark:text-gray-400"},J={key:0,class:"bg-gray-100 dark:bg-gray-600 px-2 py-0.5 rounded"},P={key:1,class:"bg-gray-100 dark:bg-gray-600 px-2 py-0.5 rounded"},X={class:"flex-shrink-0 flex items-center"},Y=["onClick","disabled"],oe={__name:"BindingZoo",props:{binding:{type:Object,required:!0},bindingType:{type:String,required:!0}},setup(b){const e=b,p=k(),n=V(),v=T(),{tasks:ee}=S(v),r=g([]),c=g(!1),u=g(null),f=g(""),_=Z(()=>{if(!f.value)return r.value;const o=f.value.toLowerCase();return r.value.filter(s=>s.name.toLowerCase().includes(o))});async function y(){c.value=!0;try{let o=[];e.bindingType==="llm"?o=await n.fetchBindingZoo(e.binding.id):e.bindingType==="tti"?o=await n.fetchTtiBindingZoo(e.binding.id):e.bindingType==="tts"?o=await n.fetchTtsBindingZoo(e.binding.id):e.bindingType==="stt"&&(o=await n.fetchSttBindingZoo(e.binding.id)),r.value=o||[]}catch(o){console.error(o),p.addNotification("Failed to fetch zoo models.","error")}finally{c.value=!1}}async function w(o,s){if(u.value===null){u.value=s;try{let t;e.bindingType==="llm"?t=await n.installLlmFromZoo(e.binding.id,s):e.bindingType==="tti"?t=await n.installTtiFromZoo(e.binding.id,s):e.bindingType==="tts"?t=await n.installTtsFromZoo(e.binding.id,s):e.bindingType==="stt"&&(t=await n.installSttFromZoo(e.binding.id,s)),t&&p.addNotification(`Installing ${o.name}...`,"info")}catch(t){console.error(t),p.addNotification("Installation failed to start.","error")}finally{u.value=null}}}return z(()=>{y()}),B(()=>e.binding,()=>{r.value=[],y()}),(o,s)=>(l(),a("div",R,[i("div",$,[i("h3",q,"Models Zoo: "+d(b.binding.alias),1),i("button",{onClick:y,class:"text-blue-600 hover:underline text-sm",disabled:c.value},"Refresh",8,A)]),i("div",D,[N(i("input",{type:"text","onUpdate:modelValue":s[0]||(s[0]=t=>f.value=t),placeholder:"Search zoo...",class:"input-field w-full pl-8"},null,512),[[C,f.value]]),s[1]||(s[1]=i("div",{class:"absolute inset-y-0 left-0 pl-2 flex items-center pointer-events-none text-gray-400"},[i("svg",{class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[i("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"})])],-1))]),c.value?(l(),a("div",U,[i("div",E,[x(F,{class:"w-8 h-8 text-blue-500 mx-auto mb-2"}),s[2]||(s[2]=i("p",null,"Loading zoo...",-1))])])):r.value.length===0?(l(),a("div",K," No models found in zoo for this binding. ")):(l(),a("div",O,[(l(!0),a(L,null,M(_.value,(t,m)=>(l(),a("div",{key:m,class:"bg-white dark:bg-gray-700/50 p-4 rounded-lg border border-gray-200 dark:border-gray-600 flex flex-col sm:flex-row gap-4"},[i("div",Q,[i("h4",W,d(t.name),1),i("p",G,d(t.description),1),i("div",H,[t.size?(l(),a("span",J,"Size: "+d(t.size),1)):h("",!0),t.type?(l(),a("span",P,"Type: "+d(t.type),1)):h("",!0)])]),i("div",X,[i("button",{onClick:te=>w(t,m),class:"btn btn-primary btn-sm flex items-center gap-2",disabled:u.value!==null},[x(I,{class:"w-4 h-4"}),s[3]||(s[3]=j(" Install "))],8,Y)])]))),128))]))]))}};export{oe as default};
frontend/dist/ui_assets/BindingZoo-D-mJ6Exj.js+0 −1 removed@@ -1 +0,0 @@ -import{K as k,a8 as T,Q as S,s as g,c as Z,o as z,w as B,d as a,l,e as i,t as d,z as N,L as C,f as x,an as F,F as L,i as M,h,m as j,$ as I}from"./index-CEXks4lv.js";import{u as V}from"./admin-Dmx5gjU7.js";const $={class:"flex flex-col h-[600px]"},q={class:"mb-4 flex items-center justify-between"},A={class:"font-semibold text-lg"},D=["disabled"],R={class:"mb-4 relative"},U={key:0,class:"flex-grow flex items-center justify-center"},E={class:"text-center"},K={key:1,class:"flex-grow flex items-center justify-center text-gray-500"},O={key:2,class:"flex-grow overflow-y-auto space-y-3 pr-2"},Q={class:"flex-grow"},G={class:"font-bold text-gray-900 dark:text-white"},H={class:"text-sm text-gray-600 dark:text-gray-300 mt-1"},J={class:"flex flex-wrap gap-2 mt-2 text-xs text-gray-500 dark:text-gray-400"},P={key:0,class:"bg-gray-100 dark:bg-gray-600 px-2 py-0.5 rounded"},W={key:1,class:"bg-gray-100 dark:bg-gray-600 px-2 py-0.5 rounded"},X={class:"flex-shrink-0 flex items-center"},Y=["onClick","disabled"],oe={__name:"BindingZoo",props:{binding:{type:Object,required:!0},bindingType:{type:String,required:!0}},setup(b){const e=b,p=k(),n=V(),v=T(),{tasks:ee}=S(v),r=g([]),c=g(!1),u=g(null),f=g(""),_=Z(()=>{if(!f.value)return r.value;const o=f.value.toLowerCase();return r.value.filter(s=>s.name.toLowerCase().includes(o))});async function y(){c.value=!0;try{let o=[];e.bindingType==="llm"?o=await n.fetchBindingZoo(e.binding.id):e.bindingType==="tti"?o=await n.fetchTtiBindingZoo(e.binding.id):e.bindingType==="tts"?o=await n.fetchTtsBindingZoo(e.binding.id):e.bindingType==="stt"&&(o=await n.fetchSttBindingZoo(e.binding.id)),r.value=o||[]}catch(o){console.error(o),p.addNotification("Failed to fetch zoo models.","error")}finally{c.value=!1}}async function w(o,s){if(u.value===null){u.value=s;try{let t;e.bindingType==="llm"?t=await n.installLlmFromZoo(e.binding.id,s):e.bindingType==="tti"?t=await n.installTtiFromZoo(e.binding.id,s):e.bindingType==="tts"?t=await n.installTtsFromZoo(e.binding.id,s):e.bindingType==="stt"&&(t=await n.installSttFromZoo(e.binding.id,s)),t&&p.addNotification(`Installing ${o.name}...`,"info")}catch(t){console.error(t),p.addNotification("Installation failed to start.","error")}finally{u.value=null}}}return z(()=>{y()}),B(()=>e.binding,()=>{r.value=[],y()}),(o,s)=>(l(),a("div",$,[i("div",q,[i("h3",A,"Models Zoo: "+d(b.binding.alias),1),i("button",{onClick:y,class:"text-blue-600 hover:underline text-sm",disabled:c.value},"Refresh",8,D)]),i("div",R,[N(i("input",{type:"text","onUpdate:modelValue":s[0]||(s[0]=t=>f.value=t),placeholder:"Search zoo...",class:"input-field w-full pl-8"},null,512),[[C,f.value]]),s[1]||(s[1]=i("div",{class:"absolute inset-y-0 left-0 pl-2 flex items-center pointer-events-none text-gray-400"},[i("svg",{class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[i("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"})])],-1))]),c.value?(l(),a("div",U,[i("div",E,[x(F,{class:"w-8 h-8 text-blue-500 mx-auto mb-2"}),s[2]||(s[2]=i("p",null,"Loading zoo...",-1))])])):r.value.length===0?(l(),a("div",K," No models found in zoo for this binding. ")):(l(),a("div",O,[(l(!0),a(L,null,M(_.value,(t,m)=>(l(),a("div",{key:m,class:"bg-white dark:bg-gray-700/50 p-4 rounded-lg border border-gray-200 dark:border-gray-600 flex flex-col sm:flex-row gap-4"},[i("div",Q,[i("h4",G,d(t.name),1),i("p",H,d(t.description),1),i("div",J,[t.size?(l(),a("span",P,"Size: "+d(t.size),1)):h("",!0),t.type?(l(),a("span",W,"Type: "+d(t.type),1)):h("",!0)])]),i("div",X,[i("button",{onClick:te=>w(t,m),class:"btn btn-primary btn-sm flex items-center gap-2",disabled:u.value!==null},[x(I,{class:"w-4 h-4"}),s[3]||(s[3]=j(" Install "))],8,Y)])]))),128))]))]))}};export{oe as default};
frontend/dist/ui_assets/blockDiagram-QIGZ2CNN-BDAjmBYq.js+1 −1 renamedfrontend/dist/ui_assets/BlockedList-B9-i_iMo.js+1 −1 renamed@@ -1 +1 @@ -import{a as u,c as l,d as e,l as s,e as a,F as k,i as g,f as y,U as _,t as m}from"./index-CEXks4lv.js";const b={class:"max-w-2xl mx-auto"},x={key:0,class:"text-center py-6 text-gray-500 dark:text-gray-400"},p={key:1,class:"text-center py-10 bg-gray-50 dark:bg-gray-800/50 rounded-lg"},h={key:2,class:"space-y-3"},v={class:"flex items-center space-x-3"},f={class:"font-medium text-gray-800 dark:text-gray-100"},U=["onClick"],S={__name:"BlockedList",setup(w){const n=u(),o=l(()=>n.blockedUsers),d=l(()=>n.isLoadingBlocked);function i(c){n.unblockUser(c.id)}return(c,r)=>(s(),e("div",b,[d.value?(s(),e("div",x," Loading blocked list... ")):o.value.length===0?(s(),e("div",p,r[0]||(r[0]=[a("p",{class:"text-gray-500 dark:text-gray-400"},"You haven't blocked any users.",-1)]))):(s(),e("ul",h,[(s(!0),e(k,null,g(o.value,t=>(s(),e("li",{key:t.id,class:"bg-white dark:bg-gray-800 p-3 rounded-lg shadow-sm flex items-center justify-between"},[a("div",v,[y(_,{icon:t.icon,username:t.username,"size-class":"h-10 w-10"},null,8,["icon","username"]),a("span",f,m(t.username),1)]),a("button",{onClick:B=>i(t),class:"btn btn-secondary btn-sm"},"Unblock",8,U)]))),128))]))]))}};export{S as default}; +import{a as u,c as l,d as e,l as s,e as a,F as k,i as g,f as y,U as _,t as m}from"./index-BBRgbnZQ.js";const b={class:"max-w-2xl mx-auto"},x={key:0,class:"text-center py-6 text-gray-500 dark:text-gray-400"},p={key:1,class:"text-center py-10 bg-gray-50 dark:bg-gray-800/50 rounded-lg"},h={key:2,class:"space-y-3"},v={class:"flex items-center space-x-3"},f={class:"font-medium text-gray-800 dark:text-gray-100"},U=["onClick"],S={__name:"BlockedList",setup(w){const n=u(),o=l(()=>n.blockedUsers),d=l(()=>n.isLoadingBlocked);function i(c){n.unblockUser(c.id)}return(c,r)=>(s(),e("div",b,[d.value?(s(),e("div",x," Loading blocked list... ")):o.value.length===0?(s(),e("div",p,r[0]||(r[0]=[a("p",{class:"text-gray-500 dark:text-gray-400"},"You haven't blocked any users.",-1)]))):(s(),e("ul",h,[(s(!0),e(k,null,g(o.value,t=>(s(),e("li",{key:t.id,class:"bg-white dark:bg-gray-800 p-3 rounded-lg shadow-sm flex items-center justify-between"},[a("div",v,[y(_,{icon:t.icon,username:t.username,"size-class":"h-10 w-10"},null,8,["icon","username"]),a("span",f,m(t.username),1)]),a("button",{onClick:B=>i(t),class:"btn btn-secondary btn-sm"},"Unblock",8,U)]))),128))]))]))}};export{S as default};
frontend/dist/ui_assets/BuildersSettings-CoP_qMxm.js+1 −1 renamed@@ -1 +1 @@ -import{K as x,s as f,c as h,o as _,w as b,d as o,l as r,e as n,j as S,H as w,F as C,i as B,z as L,t as m,p as v,J as j}from"./index-CEXks4lv.js";import{u as N}from"./admin-Dmx5gjU7.js";const U={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},D={key:0,class:"p-6 text-center"},E={key:0,class:"text-center text-gray-500"},F={key:1,class:"space-y-4"},J={class:"flex-grow flex flex-col pr-4"},M={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},O=["onClick"],V=["type","id","onUpdate:modelValue"],z={class:"mt-8 pt-5 border-t border-gray-200 dark:border-gray-700"},A={class:"flex justify-end"},G=["disabled"],$={__name:"BuildersSettings",setup(H){const l=N();x();const a=f({}),d=f(!1),c=f(!1);let p="{}";const i=h(()=>l.globalSettings.filter(e=>e.category==="Builders").sort((e,s)=>e.key.localeCompare(s.key)));function g(){if(i.value.length>0){const e={};i.value.forEach(s=>{s.type==="boolean"?e[s.key]=y(s.value):e[s.key]=s.value}),a.value=e,p=JSON.stringify(a.value),c.value=!1}}function y(e){return typeof e=="boolean"?e:typeof e=="string"?e.toLowerCase()==="true":!!e}_(()=>{l.globalSettings.length===0?l.fetchGlobalSettings():g()}),b(()=>l.globalSettings,g,{deep:!0}),b(a,e=>{c.value=JSON.stringify(e)!==p},{deep:!0});async function k(){d.value=!0;const e={};for(const s in a.value)i.value.some(t=>t.key===s)&&(e[s]=a.value[s]);try{await l.updateGlobalSettings(e)}finally{d.value=!1}}return(e,s)=>(r(),o("div",U,[s[0]||(s[0]=n("div",{class:"p-6 border-b border-gray-200 dark:border-gray-700"},[n("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," Builders & Export Settings "),n("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Configure executables for code compilation and enable/disable message export formats. ")],-1)),S(l).isLoadingSettings?(r(),o("div",D,"Loading settings...")):(r(),o("form",{key:1,onSubmit:w(k,["prevent"]),class:"p-6"},[i.value.length===0?(r(),o("div",E," No builder settings found. ")):(r(),o("div",F,[(r(!0),o(C,null,B(i.value,t=>(r(),o("div",{key:t.key,class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},[n("span",J,[n("span",M,m(t.description||t.key.replace(/_/g," ").replace(/\b\w/g,u=>u.toUpperCase())),1)]),t.type==="boolean"?(r(),o("button",{key:0,onClick:u=>a.value[t.key]=!a.value[t.key],type:"button",class:v([y(a.value[t.key])?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[n("span",{class:v([y(a.value[t.key])?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],10,O)):L((r(),o("input",{key:1,type:t.type==="string"||t.type==="text"?"text":"number",id:t.key,"onUpdate:modelValue":u=>a.value[t.key]=u,class:"input-field w-full sm:max-w-xs"},null,8,V)),[[j,a.value[t.key]]])]))),128))])),n("div",z,[n("div",A,[n("button",{type:"submit",class:"btn btn-primary",disabled:d.value||!c.value},m(d.value?"Saving...":"Save Changes"),9,G)])])],32))]))}};export{$ as default}; +import{K as x,s as f,c as h,o as _,w as b,d as o,l as r,e as n,j as S,H as w,F as C,i as B,z as L,t as m,p as v,J as j}from"./index-BBRgbnZQ.js";import{u as N}from"./admin-CwLQr1mG.js";const U={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},D={key:0,class:"p-6 text-center"},E={key:0,class:"text-center text-gray-500"},F={key:1,class:"space-y-4"},J={class:"flex-grow flex flex-col pr-4"},M={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},O=["onClick"],V=["type","id","onUpdate:modelValue"],z={class:"mt-8 pt-5 border-t border-gray-200 dark:border-gray-700"},A={class:"flex justify-end"},G=["disabled"],$={__name:"BuildersSettings",setup(H){const l=N();x();const a=f({}),d=f(!1),c=f(!1);let p="{}";const i=h(()=>l.globalSettings.filter(e=>e.category==="Builders").sort((e,s)=>e.key.localeCompare(s.key)));function g(){if(i.value.length>0){const e={};i.value.forEach(s=>{s.type==="boolean"?e[s.key]=y(s.value):e[s.key]=s.value}),a.value=e,p=JSON.stringify(a.value),c.value=!1}}function y(e){return typeof e=="boolean"?e:typeof e=="string"?e.toLowerCase()==="true":!!e}_(()=>{l.globalSettings.length===0?l.fetchGlobalSettings():g()}),b(()=>l.globalSettings,g,{deep:!0}),b(a,e=>{c.value=JSON.stringify(e)!==p},{deep:!0});async function k(){d.value=!0;const e={};for(const s in a.value)i.value.some(t=>t.key===s)&&(e[s]=a.value[s]);try{await l.updateGlobalSettings(e)}finally{d.value=!1}}return(e,s)=>(r(),o("div",U,[s[0]||(s[0]=n("div",{class:"p-6 border-b border-gray-200 dark:border-gray-700"},[n("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," Builders & Export Settings "),n("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Configure executables for code compilation and enable/disable message export formats. ")],-1)),S(l).isLoadingSettings?(r(),o("div",D,"Loading settings...")):(r(),o("form",{key:1,onSubmit:w(k,["prevent"]),class:"p-6"},[i.value.length===0?(r(),o("div",E," No builder settings found. ")):(r(),o("div",F,[(r(!0),o(C,null,B(i.value,t=>(r(),o("div",{key:t.key,class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},[n("span",J,[n("span",M,m(t.description||t.key.replace(/_/g," ").replace(/\b\w/g,u=>u.toUpperCase())),1)]),t.type==="boolean"?(r(),o("button",{key:0,onClick:u=>a.value[t.key]=!a.value[t.key],type:"button",class:v([y(a.value[t.key])?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[n("span",{class:v([y(a.value[t.key])?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],10,O)):L((r(),o("input",{key:1,type:t.type==="string"||t.type==="text"?"text":"number",id:t.key,"onUpdate:modelValue":u=>a.value[t.key]=u,class:"input-field w-full sm:max-w-xs"},null,8,V)),[[j,a.value[t.key]]])]))),128))])),n("div",z,[n("div",A,[n("button",{type:"submit",class:"btn btn-primary",disabled:d.value||!c.value},m(d.value?"Saving...":"Save Changes"),9,G)])])],32))]))}};export{$ as default};
frontend/dist/ui_assets/c4Diagram-FPNF74CW-BBusqfjs.js+1 −1 renamedfrontend/dist/ui_assets/CameraCaptureModal-Os8y2Z5m.js+1 −1 renamed@@ -1 +1 @@ -import{K as M,av as U,s as c,w,X as B,n as k,l as o,g as C,e as d,d as n,h as l,j as I,m as A,an as x,p as R,f as T,t as V}from"./index-CEXks4lv.js";import{_ as z}from"./GenericModal-Br5hR2Sz.js";const F={class:"relative aspect-video bg-black rounded-lg overflow-hidden"},O=["src"],q={key:1,class:"absolute inset-0 flex items-center justify-center text-white bg-black/70 p-4 z-20"},$={key:0,class:"text-center"},L={key:1,class:"text-center"},W={key:2},H=["disabled"],J={__name:"CameraCaptureModal",setup(K){const u=M(),_=U(),r=c(null),s=c(null),a=c("idle"),i=c(null),v=c(null),m=c(!1),P=e=>{r.value=e};function g(){s.value&&s.value.getTracks().forEach(e=>e.stop()),r.value&&(r.value.srcObject=null,r.value.onplaying=null),s.value=null,a.value="idle",v.value=null,i.value=null,m.value=!1}w(()=>u.isModalOpen("cameraCapture"),e=>{e?r.value&&h():g()}),w(r,e=>{e&&u.isModalOpen("cameraCapture")&&h()}),B(g);async function h(){if(!(a.value==="requesting"||a.value==="streaming")){if(g(),a.value="requesting",!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia){i.value="Camera access is not supported by your browser.",a.value="error";return}if(!r.value){i.value="Camera component did not load correctly. Please try again.",a.value="error";return}try{s.value=await navigator.mediaDevices.getUserMedia({video:!0}),r.value&&(r.value.srcObject=s.value,r.value.onplaying=()=>{a.value="streaming"})}catch(e){e.name==="NotAllowedError"||e.name==="PermissionDeniedError"?i.value="Camera access was denied. Please allow camera permissions in your browser settings.":e.name==="NotFoundError"||e.name==="DevicesNotFoundError"?i.value="No camera found. Please ensure a camera is connected and enabled.":i.value="An error occurred while accessing the camera.",a.value="error",console.error("Camera access error:",e)}}}function S(){if(!r.value||a.value!=="streaming")return;const e=document.createElement("canvas");e.width=r.value.videoWidth,e.height=r.value.videoHeight,e.getContext("2d").drawImage(r.value,0,0,e.width,e.height),v.value=e.toDataURL("image/jpeg"),a.value="captured",s.value&&s.value.getTracks().forEach(p=>p.stop())}function N(){h()}function j(e){const t=e.split(","),p=t[0].match(/:(.*?);/);if(!p)return null;const D=p[1],b=atob(t[1]);let f=b.length;const y=new Uint8Array(f);for(;f--;)y[f]=b.charCodeAt(f);return new Blob([y],{type:D})}async function E(){if(!(a.value!=="captured"||!v.value)){m.value=!0;try{const e=j(v.value);if(e){const t=new File([e],`webcam_capture_${Date.now()}.jpg`,{type:"image/jpeg"});await _.uploadImages([t]),u.addNotification("Photo saved to gallery!","success"),u.closeModal("cameraCapture")}else throw new Error("Could not convert captured image to a file.")}catch(e){u.addNotification("Failed to save photo.","error"),console.error("Save photo error:",e)}finally{m.value=!1}}}return(e,t)=>(o(),k(z,{"modal-name":"cameraCapture",title:"Take a Photo","max-width-class":"max-w-2xl"},{body:C(()=>[d("div",F,[d("video",{ref:P,autoplay:"",playsinline:"",class:R(["w-full h-full object-contain transition-opacity",{"opacity-100":a.value==="streaming","opacity-0":a.value!=="streaming"}])},null,2),a.value==="captured"?(o(),n("img",{key:0,src:v.value,class:"absolute inset-0 w-full h-full object-contain z-10",alt:"Captured Photo Preview"},null,8,O)):l("",!0),a.value!=="streaming"?(o(),n("div",q,[a.value==="requesting"?(o(),n("div",$,[T(x,{class:"w-8 h-8 mx-auto mb-2 animate-spin"}),t[1]||(t[1]=d("p",null,"Waiting for camera permission...",-1)),t[2]||(t[2]=d("p",{class:"text-xs text-gray-400 mt-1"},"Please check for a browser pop-up.",-1))])):l("",!0),a.value==="error"?(o(),n("p",L,V(i.value),1)):l("",!0),a.value==="idle"?(o(),n("p",W,"Initializing...")):l("",!0)])):l("",!0)])]),footer:C(()=>[d("button",{onClick:t[0]||(t[0]=p=>I(u).closeModal("cameraCapture")),class:"btn btn-secondary"},"Cancel"),t[4]||(t[4]=d("div",{class:"flex-grow"},null,-1)),a.value==="streaming"?(o(),n("button",{key:0,onClick:S,class:"btn btn-primary"},"Take Photo")):l("",!0),a.value==="captured"?(o(),n("button",{key:1,onClick:N,class:"btn btn-secondary"},"Retake")):l("",!0),a.value==="captured"?(o(),n("button",{key:2,onClick:E,class:"btn btn-primary",disabled:m.value},[m.value?(o(),k(x,{key:0,class:"w-5 h-5 mr-2 animate-spin"})):l("",!0),t[3]||(t[3]=A(" Save Photo "))],8,H)):l("",!0)]),_:1}))}};export{J as default}; +import{K as M,av as U,s as c,w,V as B,n as k,l as o,g as C,e as d,d as n,h as l,j as I,m as V,an as x,p as A,f as R,t as T}from"./index-BBRgbnZQ.js";import{_ as z}from"./GenericModal-eXiOHk6I.js";const F={class:"relative aspect-video bg-black rounded-lg overflow-hidden"},O=["src"],q={key:1,class:"absolute inset-0 flex items-center justify-center text-white bg-black/70 p-4 z-20"},$={key:0,class:"text-center"},L={key:1,class:"text-center"},W={key:2},H=["disabled"],Q={__name:"CameraCaptureModal",setup(K){const u=M(),_=U(),r=c(null),s=c(null),a=c("idle"),i=c(null),v=c(null),m=c(!1),P=e=>{r.value=e};function g(){s.value&&s.value.getTracks().forEach(e=>e.stop()),r.value&&(r.value.srcObject=null,r.value.onplaying=null),s.value=null,a.value="idle",v.value=null,i.value=null,m.value=!1}w(()=>u.isModalOpen("cameraCapture"),e=>{e?r.value&&h():g()}),w(r,e=>{e&&u.isModalOpen("cameraCapture")&&h()}),B(g);async function h(){if(!(a.value==="requesting"||a.value==="streaming")){if(g(),a.value="requesting",!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia){i.value="Camera access is not supported by your browser.",a.value="error";return}if(!r.value){i.value="Camera component did not load correctly. Please try again.",a.value="error";return}try{s.value=await navigator.mediaDevices.getUserMedia({video:!0}),r.value&&(r.value.srcObject=s.value,r.value.onplaying=()=>{a.value="streaming"})}catch(e){e.name==="NotAllowedError"||e.name==="PermissionDeniedError"?i.value="Camera access was denied. Please allow camera permissions in your browser settings.":e.name==="NotFoundError"||e.name==="DevicesNotFoundError"?i.value="No camera found. Please ensure a camera is connected and enabled.":i.value="An error occurred while accessing the camera.",a.value="error",console.error("Camera access error:",e)}}}function S(){if(!r.value||a.value!=="streaming")return;const e=document.createElement("canvas");e.width=r.value.videoWidth,e.height=r.value.videoHeight,e.getContext("2d").drawImage(r.value,0,0,e.width,e.height),v.value=e.toDataURL("image/jpeg"),a.value="captured",s.value&&s.value.getTracks().forEach(p=>p.stop())}function N(){h()}function j(e){const t=e.split(","),p=t[0].match(/:(.*?);/);if(!p)return null;const D=p[1],b=atob(t[1]);let f=b.length;const y=new Uint8Array(f);for(;f--;)y[f]=b.charCodeAt(f);return new Blob([y],{type:D})}async function E(){if(!(a.value!=="captured"||!v.value)){m.value=!0;try{const e=j(v.value);if(e){const t=new File([e],`webcam_capture_${Date.now()}.jpg`,{type:"image/jpeg"});await _.uploadImages([t]),u.addNotification("Photo saved to gallery!","success"),u.closeModal("cameraCapture")}else throw new Error("Could not convert captured image to a file.")}catch(e){u.addNotification("Failed to save photo.","error"),console.error("Save photo error:",e)}finally{m.value=!1}}}return(e,t)=>(o(),k(z,{"modal-name":"cameraCapture",title:"Take a Photo","max-width-class":"max-w-2xl"},{body:C(()=>[d("div",F,[d("video",{ref:P,autoplay:"",playsinline:"",class:A(["w-full h-full object-contain transition-opacity",{"opacity-100":a.value==="streaming","opacity-0":a.value!=="streaming"}])},null,2),a.value==="captured"?(o(),n("img",{key:0,src:v.value,class:"absolute inset-0 w-full h-full object-contain z-10",alt:"Captured Photo Preview"},null,8,O)):l("",!0),a.value!=="streaming"?(o(),n("div",q,[a.value==="requesting"?(o(),n("div",$,[R(x,{class:"w-8 h-8 mx-auto mb-2 animate-spin"}),t[1]||(t[1]=d("p",null,"Waiting for camera permission...",-1)),t[2]||(t[2]=d("p",{class:"text-xs text-gray-400 mt-1"},"Please check for a browser pop-up.",-1))])):l("",!0),a.value==="error"?(o(),n("p",L,T(i.value),1)):l("",!0),a.value==="idle"?(o(),n("p",W,"Initializing...")):l("",!0)])):l("",!0)])]),footer:C(()=>[d("button",{onClick:t[0]||(t[0]=p=>I(u).closeModal("cameraCapture")),class:"btn btn-secondary"},"Cancel"),t[4]||(t[4]=d("div",{class:"flex-grow"},null,-1)),a.value==="streaming"?(o(),n("button",{key:0,onClick:S,class:"btn btn-primary"},"Take Photo")):l("",!0),a.value==="captured"?(o(),n("button",{key:1,onClick:N,class:"btn btn-secondary"},"Retake")):l("",!0),a.value==="captured"?(o(),n("button",{key:2,onClick:E,class:"btn btn-primary",disabled:m.value},[m.value?(o(),k(x,{key:0,class:"w-5 h-5 mr-2 animate-spin"})):l("",!0),t[3]||(t[3]=V(" Save Photo "))],8,H)):l("",!0)]),_:1}))}};export{Q as default};
frontend/dist/ui_assets/channel-B0nggn6A.js+1 −0 addedfrontend/dist/ui_assets/channel-CEAHQ8Sr.js+0 −1 removedfrontend/dist/ui_assets/chartjs-adapter-date-fns.esm-ChtTz7YT.js+2 −2 renamedfrontend/dist/ui_assets/chunk-4BX2VUAB-C9p9umJB.js+1 −1 renamedfrontend/dist/ui_assets/chunk-55IACEB6-KAMwfRtC.js+1 −1 renamedfrontend/dist/ui_assets/chunk-FMBD7UC4-C0c2OWLY.js+1 −1 renamedfrontend/dist/ui_assets/chunk-K7UQS3LO-DutPa0ZO.js+1 −1 renamedfrontend/dist/ui_assets/chunk-QN33PNHL-RC1RVoHA.js+1 −1 renamedfrontend/dist/ui_assets/chunk-QZHKN3VN-MgEn3S2F.js+1 −1 renamedfrontend/dist/ui_assets/chunk-TVAH2DTR-BA8ERhMA.js+1 −1 renamedfrontend/dist/ui_assets/chunk-TZMSLE5B-Bj38OurR.js+1 −1 renamedfrontend/dist/ui_assets/classDiagram-KNZD7YFC-CGa6NKqY.js+1 −0 addedfrontend/dist/ui_assets/classDiagram-KNZD7YFC-iOifqIxx.js+0 −1 removedfrontend/dist/ui_assets/classDiagram-v2-RKCZMP56-CGa6NKqY.js+1 −0 addedfrontend/dist/ui_assets/classDiagram-v2-RKCZMP56-iOifqIxx.js+0 −1 removedfrontend/dist/ui_assets/clone-CKVqV2qh.js+1 −0 addedfrontend/dist/ui_assets/clone-Yj2dZJPh.js+0 −1 removedfrontend/dist/ui_assets/ConfirmationModal-C0dj6nuP.js+1 −1 renamed@@ -1 +1 @@ -import{K as v,c as f,s as y,w as _,n as x,l as n,g as p,e as i,j as m,t as r,d as s,h as k,z as d,F as C,i as h,R as w,W as b,J as T}from"./index-CEXks4lv.js";import{_ as g}from"./GenericModal-Br5hR2Sz.js";const V={class:"text-sm text-gray-700 dark:text-gray-300"},A={key:0,class:"mt-4"},B=["value"],S=["type","placeholder"],N={__name:"ConfirmationModal",setup(D){const u=v(),e=f(()=>u.confirmationOptions),a=y("");_(()=>e.value.inputValue,o=>{a.value=o||""},{immediate:!0});function c(){let o=!0;e.value.inputType&&(o=a.value),u.confirmAction(o)}return(o,l)=>(n(),x(g,{modalName:"confirmation",title:e.value.title||"Are you sure?",allowOverlayClose:!1,maxWidthClass:"max-w-md"},{body:p(()=>[i("div",V,[i("p",null,r(e.value.message),1)]),e.value.inputType?(n(),s("div",A,[e.value.inputType==="select"?d((n(),s("select",{key:0,"onUpdate:modelValue":l[0]||(l[0]=t=>a.value=t),class:"input-field w-full"},[(n(!0),s(C,null,h(e.value.inputOptions,t=>(n(),s("option",{key:t.value,value:t.value},r(t.text),9,B))),128))],512)),[[w,a.value]]):d((n(),s("input",{key:1,"onUpdate:modelValue":l[1]||(l[1]=t=>a.value=t),type:e.value.inputType,placeholder:e.value.inputPlaceholder,class:"input-field w-full",onKeyup:b(c,["enter"])},null,40,S)),[[T,a.value]])])):k("",!0)]),footer:p(()=>[i("button",{onClick:l[2]||(l[2]=(...t)=>m(u).cancelAction&&m(u).cancelAction(...t)),class:"btn btn-secondary"},r(e.value.cancelText||"Cancel"),1),i("button",{onClick:c,class:"btn btn-primary"},r(e.value.confirmText||"Confirm"),1)]),_:1},8,["title"]))}};export{N as default}; +import{K as v,c as f,s as y,w as _,n as x,l as n,g as p,e as i,j as m,t as r,d as s,h as k,z as d,F as C,i as h,X as w,$ as b,J as T}from"./index-BBRgbnZQ.js";import{_ as g}from"./GenericModal-eXiOHk6I.js";const V={class:"text-sm text-gray-700 dark:text-gray-300"},A={key:0,class:"mt-4"},B=["value"],S=["type","placeholder"],N={__name:"ConfirmationModal",setup(D){const u=v(),e=f(()=>u.confirmationOptions),a=y("");_(()=>e.value.inputValue,o=>{a.value=o||""},{immediate:!0});function c(){let o=!0;e.value.inputType&&(o=a.value),u.confirmAction(o)}return(o,l)=>(n(),x(g,{modalName:"confirmation",title:e.value.title||"Are you sure?",allowOverlayClose:!1,maxWidthClass:"max-w-md"},{body:p(()=>[i("div",V,[i("p",null,r(e.value.message),1)]),e.value.inputType?(n(),s("div",A,[e.value.inputType==="select"?d((n(),s("select",{key:0,"onUpdate:modelValue":l[0]||(l[0]=t=>a.value=t),class:"input-field w-full"},[(n(!0),s(C,null,h(e.value.inputOptions,t=>(n(),s("option",{key:t.value,value:t.value},r(t.text),9,B))),128))],512)),[[w,a.value]]):d((n(),s("input",{key:1,"onUpdate:modelValue":l[1]||(l[1]=t=>a.value=t),type:e.value.inputType,placeholder:e.value.inputPlaceholder,class:"input-field w-full",onKeyup:b(c,["enter"])},null,40,S)),[[T,a.value]])])):k("",!0)]),footer:p(()=>[i("button",{onClick:l[2]||(l[2]=(...t)=>m(u).cancelAction&&m(u).cancelAction(...t)),class:"btn btn-secondary"},r(e.value.cancelText||"Cancel"),1),i("button",{onClick:c,class:"btn btn-primary"},r(e.value.confirmText||"Confirm"),1)]),_:1},8,["title"]))}};export{N as default};
frontend/dist/ui_assets/ContextToArtefactModal-BO8-1Ckg.js+1 −1 renamed@@ -1 +1 @@ -import{K as _,N as C,c as d,s as c,w as k,n as M,l as n,g as b,e as t,j as U,t as y,H as N,d as p,h as g,z as v,ar as S,p as h,L as D,F as V,i as B,R as I}from"./index-CEXks4lv.js";import{_ as L}from"./GenericModal-Br5hR2Sz.js";const j={class:"space-y-2"},q={class:"flex items-center gap-4"},z={class:"flex items-center"},E={class:"flex items-center"},F=["disabled"],R={key:0},$={key:1},H=["value"],K={class:"flex justify-end gap-3"},O=["disabled"],G={__name:"ContextToArtefactModal",setup(P){const o=_(),A=C(),f=d(()=>o.modalData("contextToArtefact")),T=d(()=>{var l;return(l=f.value)==null?void 0:l.discussionId}),m=d(()=>{var l;return((l=f.value)==null?void 0:l.artefacts)||[]}),s=c("new"),i=c(""),r=c(null),u=c(!1);k(f,l=>{l&&o.isModalOpen("contextToArtefact")&&(s.value="new",i.value="",r.value=null)},{immediate:!0});const w=d(()=>s.value==="new"?i.value.trim():r.value);async function x(){if(!w.value){o.addNotification("Please provide a name for the new artefact or select one to update.","warning");return}u.value=!0;try{await A.exportContextAsArtefact({discussionId:T.value,title:w.value}),o.closeModal("contextToArtefact")}finally{u.value=!1}}return(l,e)=>(n(),M(L,{"modal-name":"contextToArtefact",title:"Save Context as Artefact","max-width-class":"max-w-lg"},{body:b(()=>[t("form",{onSubmit:N(x,["prevent"]),class:"space-y-6"},[e[9]||(e[9]=t("p",{class:"text-sm text-gray-600 dark:text-gray-300"},' This will save the current content of the "Discussion Data Zone" as a new artefact. You can create a new artefact or update an existing one, which will create a new version. ',-1)),t("div",j,[t("div",q,[t("label",z,[v(t("input",{type:"radio","onUpdate:modelValue":e[0]||(e[0]=a=>s.value=a),value:"new",class:"radio-input"},null,512),[[S,s.value]]),e[5]||(e[5]=t("span",{class:"ml-2"},"Create New Artefact",-1))]),t("label",E,[v(t("input",{type:"radio","onUpdate:modelValue":e[1]||(e[1]=a=>s.value=a),value:"update",class:"radio-input",disabled:m.value.length===0},null,8,F),[[S,s.value]]),t("span",{class:h(["ml-2",{"opacity-50":m.value.length===0}])},"Update Existing",2)])])]),s.value==="new"?(n(),p("div",R,[e[6]||(e[6]=t("label",{for:"new-artefact-title",class:"label"},"New Artefact Name",-1)),v(t("input",{id:"new-artefact-title","onUpdate:modelValue":e[2]||(e[2]=a=>i.value=a),type:"text",class:"input-field mt-1",required:""},null,512),[[D,i.value]])])):g("",!0),s.value==="update"?(n(),p("div",$,[e[8]||(e[8]=t("label",{for:"update-artefact-title",class:"label"},"Select Artefact to Update",-1)),v(t("select",{id:"update-artefact-title","onUpdate:modelValue":e[3]||(e[3]=a=>r.value=a),class:"input-field mt-1",required:""},[e[7]||(e[7]=t("option",{value:null,disabled:""},"Select an artefact...",-1)),(n(!0),p(V,null,B(m.value,a=>(n(),p("option",{key:a.title,value:a.title},y(a.title),9,H))),128))],512),[[I,r.value]])])):g("",!0)],32)]),footer:b(()=>[t("div",K,[t("button",{onClick:e[4]||(e[4]=a=>U(o).closeModal("contextToArtefact")),type:"button",class:"btn btn-secondary"},"Cancel"),t("button",{onClick:x,type:"button",class:"btn btn-primary",disabled:u.value||!w.value},y(u.value?"Saving...":"Save Artefact"),9,O)])]),_:1}))}};export{G as default}; +import{K as _,N as C,c as d,s as c,w as k,n as M,l as n,g as b,e as t,j as U,t as y,H as N,d as p,h as g,z as v,ar as S,p as h,L as D,F as V,i as B,X as I}from"./index-BBRgbnZQ.js";import{_ as L}from"./GenericModal-eXiOHk6I.js";const j={class:"space-y-2"},q={class:"flex items-center gap-4"},z={class:"flex items-center"},E={class:"flex items-center"},F=["disabled"],$={key:0},H={key:1},K=["value"],O={class:"flex justify-end gap-3"},P=["disabled"],Z={__name:"ContextToArtefactModal",setup(R){const o=_(),A=C(),f=d(()=>o.modalData("contextToArtefact")),T=d(()=>{var l;return(l=f.value)==null?void 0:l.discussionId}),m=d(()=>{var l;return((l=f.value)==null?void 0:l.artefacts)||[]}),s=c("new"),i=c(""),r=c(null),u=c(!1);k(f,l=>{l&&o.isModalOpen("contextToArtefact")&&(s.value="new",i.value="",r.value=null)},{immediate:!0});const w=d(()=>s.value==="new"?i.value.trim():r.value);async function x(){if(!w.value){o.addNotification("Please provide a name for the new artefact or select one to update.","warning");return}u.value=!0;try{await A.exportContextAsArtefact({discussionId:T.value,title:w.value}),o.closeModal("contextToArtefact")}finally{u.value=!1}}return(l,e)=>(n(),M(L,{"modal-name":"contextToArtefact",title:"Save Context as Artefact","max-width-class":"max-w-lg"},{body:b(()=>[t("form",{onSubmit:N(x,["prevent"]),class:"space-y-6"},[e[9]||(e[9]=t("p",{class:"text-sm text-gray-600 dark:text-gray-300"},' This will save the current content of the "Discussion Data Zone" as a new artefact. You can create a new artefact or update an existing one, which will create a new version. ',-1)),t("div",j,[t("div",q,[t("label",z,[v(t("input",{type:"radio","onUpdate:modelValue":e[0]||(e[0]=a=>s.value=a),value:"new",class:"radio-input"},null,512),[[S,s.value]]),e[5]||(e[5]=t("span",{class:"ml-2"},"Create New Artefact",-1))]),t("label",E,[v(t("input",{type:"radio","onUpdate:modelValue":e[1]||(e[1]=a=>s.value=a),value:"update",class:"radio-input",disabled:m.value.length===0},null,8,F),[[S,s.value]]),t("span",{class:h(["ml-2",{"opacity-50":m.value.length===0}])},"Update Existing",2)])])]),s.value==="new"?(n(),p("div",$,[e[6]||(e[6]=t("label",{for:"new-artefact-title",class:"label"},"New Artefact Name",-1)),v(t("input",{id:"new-artefact-title","onUpdate:modelValue":e[2]||(e[2]=a=>i.value=a),type:"text",class:"input-field mt-1",required:""},null,512),[[D,i.value]])])):g("",!0),s.value==="update"?(n(),p("div",H,[e[8]||(e[8]=t("label",{for:"update-artefact-title",class:"label"},"Select Artefact to Update",-1)),v(t("select",{id:"update-artefact-title","onUpdate:modelValue":e[3]||(e[3]=a=>r.value=a),class:"input-field mt-1",required:""},[e[7]||(e[7]=t("option",{value:null,disabled:""},"Select an artefact...",-1)),(n(!0),p(V,null,B(m.value,a=>(n(),p("option",{key:a.title,value:a.title},y(a.title),9,K))),128))],512),[[I,r.value]])])):g("",!0)],32)]),footer:b(()=>[t("div",O,[t("button",{onClick:e[4]||(e[4]=a=>U(o).closeModal("contextToArtefact")),type:"button",class:"btn btn-secondary"},"Cancel"),t("button",{onClick:x,type:"button",class:"btn btn-primary",disabled:u.value||!w.value},y(u.value?"Saving...":"Save Artefact"),9,P)])]),_:1}))}};export{Z as default};
frontend/dist/ui_assets/ContextViewModal-D5etI0eI.js+0 −1 removed@@ -1 +0,0 @@ -import{q as $,K as R,N as B,Q as M,s as O,c as g,n as y,l as o,g as C,e,m as F,an as L,Y as P,t as r,j as T,d as n,a2 as U,p as Z,F as _,i as b,f as c,h as S,a4 as k,T as q,I as A,ai as E,al as Q}from"./index-CEXks4lv.js";import{_ as W}from"./GenericModal-Br5hR2Sz.js";const Y={key:0,class:"space-y-6"},G={class:"flex justify-between items-center mb-1 text-sm font-mono text-gray-700 dark:text-gray-300"},H={class:"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-4 relative overflow-hidden"},J={class:"space-y-4"},X={class:"flex items-center justify-between p-3 cursor-pointer select-none"},K={class:"flex items-center gap-3"},D={class:"font-semibold text-gray-800 dark:text-gray-200"},z={key:0,class:"text-xs text-gray-500"},ee={class:"font-mono text-sm text-gray-600 dark:text-gray-400"},se={class:"p-4 border-t dark:border-gray-700 space-y-3"},te={class:"flex items-center justify-between p-2 cursor-pointer select-none"},oe={class:"flex items-center gap-2"},ae={class:"text-sm font-medium"},re={class:"font-mono text-xs text-gray-500 dark:text-gray-400"},ne={class:"p-2 border-t dark:border-gray-600"},ie={class:"grid grid-cols-1 md:grid-cols-2 gap-3 text-sm"},le={class:"p-3 bg-white dark:bg-gray-800 border dark:border-gray-600 rounded-md flex items-center gap-3"},de={class:"font-mono text-gray-600 dark:text-gray-400"},ce={class:"p-3 bg-white dark:bg-gray-800 border dark:border-gray-600 rounded-md flex items-center gap-3"},ue={class:"font-mono text-gray-600 dark:text-gray-400"},me={key:0,class:"bg-white dark:bg-gray-800 border dark:border-gray-600 rounded-md"},ge={class:"flex items-center justify-between p-2 cursor-pointer select-none"},xe={class:"flex items-center gap-2"},_e={class:"p-2 border-t dark:border-gray-600 max-h-60 overflow-y-auto"},fe={class:"text-xs font-mono divide-y dark:divide-gray-700"},ye={class:"font-semibold"},be={key:2,class:"flex items-start gap-3 p-3 bg-white dark:bg-gray-800 border dark:border-gray-600 rounded-md"},ke={key:1,class:"text-center py-10"},he={class:"flex justify-between items-center w-full"},ve=["disabled"],pe={__name:"ContextViewModal",setup(we){const j=R(),x=B(),{activeDiscussionContextStatus:m}=M(x),u=O(!1),h=t=>t.replace(/_/g," ").replace(/\b\w/g,s=>s.toUpperCase()),d=t=>t?t.toLocaleString():"0",v=g(()=>{var t;return((t=m.value)==null?void 0:t.current_tokens)||0}),f=g(()=>{var t;return((t=m.value)==null?void 0:t.max_tokens)||1}),p=g(()=>f.value<=0?0:v.value/f.value*100),I=g(()=>{const t=p.value;return t>=90?"bg-red-500":t>=75?"bg-yellow-500":"bg-blue-500"}),V=g(()=>{var l;if(!((l=m.value)!=null&&l.zones))return[];const t=Object.entries(m.value.zones),s=["system_context","message_history"];return t.sort(([a],[i])=>s.indexOf(a)-s.indexOf(i))});async function N(){if(x.activeDiscussion&&!u.value){u.value=!0;try{await x.fetchContextStatus(x.activeDiscussion.id)}finally{u.value=!1}}}return(t,s)=>(o(),y(W,{"modal-name":"contextViewer",title:"Context Breakdown",maxWidthClass:"max-w-4xl"},{body:C(()=>[T(m)?(o(),n("div",Y,[e("div",null,[e("div",G,[s[1]||(s[1]=e("span",null,"Total Tokens",-1)),e("span",null,r(d(v.value))+" / "+r(d(f.value)),1)]),e("div",H,[e("div",{class:Z(["h-full rounded-full transition-all duration-300",I.value]),style:U({width:`${Math.min(p.value,100)}%`})},null,6)])]),e("div",J,[(o(!0),n(_,null,b(V.value,([l,a])=>(o(),n("details",{key:l,class:"bg-gray-50 dark:bg-gray-800/50 border dark:border-gray-700 rounded-lg",open:""},[e("summary",X,[e("div",K,[c(k,{class:"w-5 h-5 text-gray-500 transition-transform details-arrow"}),e("h3",D,r(h(l)),1),a.message_count?(o(),n("span",z,"("+r(a.message_count)+" messages)",1)):S("",!0)]),e("span",ee,r(d(a.tokens))+" tokens",1)]),e("div",se,[l==="system_context"&&typeof a.breakdown=="object"&&a.breakdown?(o(!0),n(_,{key:0},b(Object.entries(a.breakdown),([i,w])=>(o(),n("details",{key:i,class:"bg-white dark:bg-gray-800 border dark:border-gray-600 rounded-md"},[e("summary",te,[e("div",oe,[c(k,{class:"w-4 h-4 text-gray-400 transition-transform details-arrow"}),e("h4",ae,r(h(i)),1)]),e("span",re,r(d(w.tokens))+" tokens",1)]),e("div",ne,[c(q,{"model-value":w.content,options:{readOnly:!0},class:"text-xs max-h-60"},null,8,["model-value"])])]))),128)):l==="message_history"&&a.breakdown?(o(),n(_,{key:1},[e("div",ie,[e("div",le,[c(A,{class:"w-6 h-6 text-blue-500 flex-shrink-0"}),e("div",null,[s[2]||(s[2]=e("div",{class:"font-semibold"},"Text Tokens",-1)),e("div",de,r(d(a.breakdown.text_tokens)),1)])]),e("div",ce,[c(E,{class:"w-6 h-6 text-green-500 flex-shrink-0"}),e("div",null,[s[3]||(s[3]=e("div",{class:"font-semibold"},"Image Tokens",-1)),e("div",ue,r(d(a.breakdown.image_tokens)),1)])])]),a.breakdown.image_details&&a.breakdown.image_details.length>0?(o(),n("details",me,[e("summary",ge,[e("div",xe,[c(k,{class:"w-4 h-4 text-gray-400 transition-transform details-arrow"}),s[4]||(s[4]=e("h4",{class:"text-sm font-medium"},"Image Details",-1))])]),e("div",_e,[e("ul",fe,[(o(!0),n(_,null,b(a.breakdown.image_details,i=>(o(),n("li",{key:`${i.message_id}-${i.index}`,class:"py-1.5 flex justify-between items-center"},[e("span",null,"Msg: "+r(i.message_id.substring(0,8))+"... (Img #"+r(i.index+1)+")",1),e("span",ye,r(d(i.tokens))+" tokens",1)]))),128))])])])):S("",!0)],64)):(o(),n("div",be,[c(Q,{class:"w-5 h-5 mt-0.5 text-gray-500 flex-shrink-0"}),s[5]||(s[5]=e("p",{class:"text-sm text-gray-700 dark:text-gray-300"},"This zone contains the full text content, which is used for context but has no further breakdown available.",-1))]))])]))),128))])])):(o(),n("div",ke,s[6]||(s[6]=[e("p",{class:"text-gray-500"},"Context information is not available.",-1)])))]),footer:C(()=>[e("div",he,[e("button",{onClick:N,class:"btn btn-secondary",disabled:u.value},[u.value?(o(),y(L,{key:0,class:"w-4 h-4 mr-2"})):(o(),y(P,{key:1,class:"w-4 h-4 mr-2"})),F(" "+r(u.value?"Refreshing...":"Refresh"),1)],8,ve),e("button",{onClick:s[0]||(s[0]=l=>T(j).closeModal("contextViewer")),class:"btn btn-primary"},"Close")])]),_:1}))}},Se=$(pe,[["__scopeId","data-v-61629172"]]);export{Se as default};
frontend/dist/ui_assets/ContextViewModal-XrC4KbSh.js+1 −0 added@@ -0,0 +1 @@ +import{q as R,K as $,N as B,R as M,s as O,c as g,n as y,l as o,g as C,e,m as F,an as L,a0 as P,t as r,j as S,d as n,a4 as U,p as Z,F as _,i as b,f as c,h as T,a6 as k,Y as q,I as A,ai as E,al as W}from"./index-BBRgbnZQ.js";import{_ as Y}from"./GenericModal-eXiOHk6I.js";const G={key:0,class:"space-y-6"},H={class:"flex justify-between items-center mb-1 text-sm font-mono text-gray-700 dark:text-gray-300"},J={class:"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-4 relative overflow-hidden"},Q={class:"space-y-4"},X={class:"flex items-center justify-between p-3 cursor-pointer select-none"},K={class:"flex items-center gap-3"},D={class:"font-semibold text-gray-800 dark:text-gray-200"},z={key:0,class:"text-xs text-gray-500"},ee={class:"font-mono text-sm text-gray-600 dark:text-gray-400"},se={class:"p-4 border-t dark:border-gray-700 space-y-3"},te={class:"flex items-center justify-between p-2 cursor-pointer select-none"},oe={class:"flex items-center gap-2"},ae={class:"text-sm font-medium"},re={class:"font-mono text-xs text-gray-500 dark:text-gray-400"},ne={class:"p-2 border-t dark:border-gray-600"},ie={class:"grid grid-cols-1 md:grid-cols-2 gap-3 text-sm"},le={class:"p-3 bg-white dark:bg-gray-800 border dark:border-gray-600 rounded-md flex items-center gap-3"},de={class:"font-mono text-gray-600 dark:text-gray-400"},ce={class:"p-3 bg-white dark:bg-gray-800 border dark:border-gray-600 rounded-md flex items-center gap-3"},ue={class:"font-mono text-gray-600 dark:text-gray-400"},me={key:0,class:"bg-white dark:bg-gray-800 border dark:border-gray-600 rounded-md"},ge={class:"flex items-center justify-between p-2 cursor-pointer select-none"},xe={class:"flex items-center gap-2"},_e={class:"p-2 border-t dark:border-gray-600 max-h-60 overflow-y-auto"},fe={class:"text-xs font-mono divide-y dark:divide-gray-700"},ye={class:"font-semibold"},be={key:2,class:"flex items-start gap-3 p-3 bg-white dark:bg-gray-800 border dark:border-gray-600 rounded-md"},ke={key:1,class:"text-center py-10"},he={class:"flex justify-between items-center w-full"},ve=["disabled"],pe={__name:"ContextViewModal",setup(we){const j=$(),x=B(),{activeDiscussionContextStatus:m}=M(x),u=O(!1),h=t=>t.replace(/_/g," ").replace(/\b\w/g,s=>s.toUpperCase()),d=t=>t?t.toLocaleString():"0",v=g(()=>{var t;return((t=m.value)==null?void 0:t.current_tokens)||0}),f=g(()=>{var t;return((t=m.value)==null?void 0:t.max_tokens)||1}),p=g(()=>f.value<=0?0:v.value/f.value*100),I=g(()=>{const t=p.value;return t>=90?"bg-red-500":t>=75?"bg-yellow-500":"bg-blue-500"}),V=g(()=>{var l;if(!((l=m.value)!=null&&l.zones))return[];const t=Object.entries(m.value.zones),s=["system_context","message_history"];return t.sort(([a],[i])=>s.indexOf(a)-s.indexOf(i))});async function N(){if(x.activeDiscussion&&!u.value){u.value=!0;try{await x.fetchContextStatus(x.activeDiscussion.id)}finally{u.value=!1}}}return(t,s)=>(o(),y(Y,{"modal-name":"contextViewer",title:"Context Breakdown",maxWidthClass:"max-w-4xl"},{body:C(()=>[S(m)?(o(),n("div",G,[e("div",null,[e("div",H,[s[1]||(s[1]=e("span",null,"Total Tokens",-1)),e("span",null,r(d(v.value))+" / "+r(d(f.value)),1)]),e("div",J,[e("div",{class:Z(["h-full rounded-full transition-all duration-300",I.value]),style:U({width:`${Math.min(p.value,100)}%`})},null,6)])]),e("div",Q,[(o(!0),n(_,null,b(V.value,([l,a])=>(o(),n("details",{key:l,class:"bg-gray-50 dark:bg-gray-800/50 border dark:border-gray-700 rounded-lg",open:""},[e("summary",X,[e("div",K,[c(k,{class:"w-5 h-5 text-gray-500 transition-transform details-arrow"}),e("h3",D,r(h(l)),1),a.message_count?(o(),n("span",z,"("+r(a.message_count)+" messages)",1)):T("",!0)]),e("span",ee,r(d(a.tokens))+" tokens",1)]),e("div",se,[l==="system_context"&&typeof a.breakdown=="object"&&a.breakdown?(o(!0),n(_,{key:0},b(Object.entries(a.breakdown),([i,w])=>(o(),n("details",{key:i,class:"bg-white dark:bg-gray-800 border dark:border-gray-600 rounded-md"},[e("summary",te,[e("div",oe,[c(k,{class:"w-4 h-4 text-gray-400 transition-transform details-arrow"}),e("h4",ae,r(h(i)),1)]),e("span",re,r(d(w.tokens))+" tokens",1)]),e("div",ne,[c(q,{"model-value":w.content,options:{readOnly:!0},class:"text-xs max-h-60"},null,8,["model-value"])])]))),128)):l==="message_history"&&a.breakdown?(o(),n(_,{key:1},[e("div",ie,[e("div",le,[c(A,{class:"w-6 h-6 text-blue-500 flex-shrink-0"}),e("div",null,[s[2]||(s[2]=e("div",{class:"font-semibold"},"Text Tokens",-1)),e("div",de,r(d(a.breakdown.text_tokens)),1)])]),e("div",ce,[c(E,{class:"w-6 h-6 text-green-500 flex-shrink-0"}),e("div",null,[s[3]||(s[3]=e("div",{class:"font-semibold"},"Image Tokens",-1)),e("div",ue,r(d(a.breakdown.image_tokens)),1)])])]),a.breakdown.image_details&&a.breakdown.image_details.length>0?(o(),n("details",me,[e("summary",ge,[e("div",xe,[c(k,{class:"w-4 h-4 text-gray-400 transition-transform details-arrow"}),s[4]||(s[4]=e("h4",{class:"text-sm font-medium"},"Image Details",-1))])]),e("div",_e,[e("ul",fe,[(o(!0),n(_,null,b(a.breakdown.image_details,i=>(o(),n("li",{key:`${i.message_id}-${i.index}`,class:"py-1.5 flex justify-between items-center"},[e("span",null,"Msg: "+r(i.message_id.substring(0,8))+"... (Img #"+r(i.index+1)+")",1),e("span",ye,r(d(i.tokens))+" tokens",1)]))),128))])])])):T("",!0)],64)):(o(),n("div",be,[c(W,{class:"w-5 h-5 mt-0.5 text-gray-500 flex-shrink-0"}),s[5]||(s[5]=e("p",{class:"text-sm text-gray-700 dark:text-gray-300"},"This zone contains the full text content, which is used for context but has no further breakdown available.",-1))]))])]))),128))])])):(o(),n("div",ke,s[6]||(s[6]=[e("p",{class:"text-gray-500"},"Context information is not available.",-1)])))]),footer:C(()=>[e("div",he,[e("button",{onClick:N,class:"btn btn-secondary",disabled:u.value},[u.value?(o(),y(L,{key:0,class:"w-4 h-4 mr-2"})):(o(),y(P,{key:1,class:"w-4 h-4 mr-2"})),F(" "+r(u.value?"Refreshing...":"Refresh"),1)],8,ve),e("button",{onClick:s[0]||(s[0]=l=>S(j).closeModal("contextViewer")),class:"btn btn-primary"},"Close")])]),_:1}))}},Te=R(pe,[["__scopeId","data-v-61629172"]]);export{Te as default};
frontend/dist/ui_assets/cose-bilkent-S5V4N54A-CiW5FIAs.js+1 −1 renamedfrontend/dist/ui_assets/CreateFirstAdminModal-N6YBd6Fe.js+1 −1 renamed@@ -1 +1 @@ -import{u as C,K as A,s as r,c as y,w as P,O as S,n as M,l as i,g,e as s,j as V,G as B,H as U,d as u,h as v,z as p,L as f,t as q}from"./index-CEXks4lv.js";import{_ as L}from"./GenericModal-Br5hR2Sz.js";const j={class:"flex justify-center mb-6"},z=["src"],D=["disabled"],E=["disabled"],N=["disabled"],T={key:0,class:"text-xs text-red-500 mt-1"},F=["disabled"],H={key:0,class:"text-xs text-red-500 mt-1"},I={key:0,class:"text-red-600 text-sm text-center p-2 bg-red-100 dark:bg-red-900/50 rounded-md",role:"alert"},O={class:"pt-2"},W=["disabled"],G={key:0,class:"flex items-center"},K={key:1},Q={__name:"CreateFirstAdminModal",setup(R){const h=C(),k=A(),m=r(""),c=r(""),l=r(""),n=r(""),a=r(!1),o=r(""),w=y(()=>l.value===n.value),b=y(()=>l.value.length>=8),x=r(null);P(()=>k.activeModal,d=>{d==="firstAdminSetup"&&S(()=>{var e;(e=x.value)==null||e.focus()})});const _=async()=>{var d,e;if(o.value="",!m.value||!c.value||!l.value||!n.value){o.value="All fields are required.";return}if(!b.value){o.value="Password must be at least 8 characters long.";return}if(!w.value){o.value="Passwords do not match.";return}a.value=!0;try{await h.register({username:m.value,email:c.value,password:l.value})}catch(t){o.value=((e=(d=t.response)==null?void 0:d.data)==null?void 0:e.detail)||"An unexpected error occurred during registration."}finally{a.value=!1}};return(d,e)=>(i(),M(L,{modalName:"firstAdminSetup",title:"Welcome! First Admin Setup",showCloseButton:!1,allowOverlayClose:!1,maxWidthClass:"max-w-md"},{body:g(()=>[s("div",j,[s("img",{src:V(B),alt:"Application Logo",class:"h-16 w-auto"},null,8,z)]),e[9]||(e[9]=s("div",{class:"text-sm bg-blue-50 dark:bg-blue-900/20 text-blue-800 dark:text-blue-200 p-3 rounded-md mb-4"}," This is your first time running the application. Please create an administrator account. ",-1)),s("form",{onSubmit:U(_,["prevent"]),class:"space-y-4"},[s("div",null,[e[4]||(e[4]=s("label",{for:"admin-username",class:"block text-sm font-medium"},"Username",-1)),p(s("input",{ref_key:"usernameInput",ref:x,"onUpdate:modelValue":e[0]||(e[0]=t=>m.value=t),type:"text",id:"admin-username",required:"",disabled:a.value,class:"input-field mt-1 w-full",placeholder:"Choose a username",autocomplete:"username"},null,8,D),[[f,m.value]])]),s("div",null,[e[5]||(e[5]=s("label",{for:"admin-email",class:"block text-sm font-medium"},"Email Address",-1)),p(s("input",{"onUpdate:modelValue":e[1]||(e[1]=t=>c.value=t),type:"email",id:"admin-email",required:"",disabled:a.value,class:"input-field mt-1 w-full",placeholder:"your@email.com",autocomplete:"email"},null,8,E),[[f,c.value]])]),s("div",null,[e[6]||(e[6]=s("label",{for:"admin-password",class:"block text-sm font-medium"},"Password",-1)),p(s("input",{"onUpdate:modelValue":e[2]||(e[2]=t=>l.value=t),type:"password",id:"admin-password",required:"",disabled:a.value,class:"input-field mt-1 w-full",placeholder:"Create a password (min. 8 characters)",autocomplete:"new-password"},null,8,N),[[f,l.value]]),l.value&&!b.value?(i(),u("p",T," Password must be at least 8 characters. ")):v("",!0)]),s("div",null,[e[7]||(e[7]=s("label",{for:"admin-confirm-password",class:"block text-sm font-medium"},"Confirm Password",-1)),p(s("input",{"onUpdate:modelValue":e[3]||(e[3]=t=>n.value=t),type:"password",id:"admin-confirm-password",required:"",disabled:a.value,class:"input-field mt-1 w-full",placeholder:"Confirm your password",autocomplete:"new-password"},null,8,F),[[f,n.value]]),n.value&&!w.value?(i(),u("p",H," Passwords do not match. ")):v("",!0)]),o.value?(i(),u("div",I,q(o.value),1)):v("",!0),s("div",O,[s("button",{type:"submit",class:"btn btn-primary w-full flex justify-center items-center",disabled:a.value},[a.value?(i(),u("span",G,e[8]||(e[8]=[s("svg",{class:"animate-spin -ml-1 mr-3 h-5 w-5",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24"},[s("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),s("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})],-1),s("span",null,"Creating Admin...",-1)]))):(i(),u("span",K,"Create Admin Account"))],8,W)])],32)]),footer:g(()=>e[10]||(e[10]=[])),_:1}))}};export{Q as default}; +import{u as C,K as A,s as r,c as y,w as P,O as S,n as M,l as i,g,e as s,j as V,G as B,H as U,d as u,h as v,z as p,L as f,t as q}from"./index-BBRgbnZQ.js";import{_ as L}from"./GenericModal-eXiOHk6I.js";const j={class:"flex justify-center mb-6"},z=["src"],D=["disabled"],E=["disabled"],N=["disabled"],T={key:0,class:"text-xs text-red-500 mt-1"},F=["disabled"],H={key:0,class:"text-xs text-red-500 mt-1"},I={key:0,class:"text-red-600 text-sm text-center p-2 bg-red-100 dark:bg-red-900/50 rounded-md",role:"alert"},O={class:"pt-2"},W=["disabled"],G={key:0,class:"flex items-center"},K={key:1},Q={__name:"CreateFirstAdminModal",setup(R){const h=C(),k=A(),m=r(""),c=r(""),l=r(""),n=r(""),a=r(!1),o=r(""),w=y(()=>l.value===n.value),b=y(()=>l.value.length>=8),x=r(null);P(()=>k.activeModal,d=>{d==="firstAdminSetup"&&S(()=>{var e;(e=x.value)==null||e.focus()})});const _=async()=>{var d,e;if(o.value="",!m.value||!c.value||!l.value||!n.value){o.value="All fields are required.";return}if(!b.value){o.value="Password must be at least 8 characters long.";return}if(!w.value){o.value="Passwords do not match.";return}a.value=!0;try{await h.register({username:m.value,email:c.value,password:l.value})}catch(t){o.value=((e=(d=t.response)==null?void 0:d.data)==null?void 0:e.detail)||"An unexpected error occurred during registration."}finally{a.value=!1}};return(d,e)=>(i(),M(L,{modalName:"firstAdminSetup",title:"Welcome! First Admin Setup",showCloseButton:!1,allowOverlayClose:!1,maxWidthClass:"max-w-md"},{body:g(()=>[s("div",j,[s("img",{src:V(B),alt:"Application Logo",class:"h-16 w-auto"},null,8,z)]),e[9]||(e[9]=s("div",{class:"text-sm bg-blue-50 dark:bg-blue-900/20 text-blue-800 dark:text-blue-200 p-3 rounded-md mb-4"}," This is your first time running the application. Please create an administrator account. ",-1)),s("form",{onSubmit:U(_,["prevent"]),class:"space-y-4"},[s("div",null,[e[4]||(e[4]=s("label",{for:"admin-username",class:"block text-sm font-medium"},"Username",-1)),p(s("input",{ref_key:"usernameInput",ref:x,"onUpdate:modelValue":e[0]||(e[0]=t=>m.value=t),type:"text",id:"admin-username",required:"",disabled:a.value,class:"input-field mt-1 w-full",placeholder:"Choose a username",autocomplete:"username"},null,8,D),[[f,m.value]])]),s("div",null,[e[5]||(e[5]=s("label",{for:"admin-email",class:"block text-sm font-medium"},"Email Address",-1)),p(s("input",{"onUpdate:modelValue":e[1]||(e[1]=t=>c.value=t),type:"email",id:"admin-email",required:"",disabled:a.value,class:"input-field mt-1 w-full",placeholder:"your@email.com",autocomplete:"email"},null,8,E),[[f,c.value]])]),s("div",null,[e[6]||(e[6]=s("label",{for:"admin-password",class:"block text-sm font-medium"},"Password",-1)),p(s("input",{"onUpdate:modelValue":e[2]||(e[2]=t=>l.value=t),type:"password",id:"admin-password",required:"",disabled:a.value,class:"input-field mt-1 w-full",placeholder:"Create a password (min. 8 characters)",autocomplete:"new-password"},null,8,N),[[f,l.value]]),l.value&&!b.value?(i(),u("p",T," Password must be at least 8 characters. ")):v("",!0)]),s("div",null,[e[7]||(e[7]=s("label",{for:"admin-confirm-password",class:"block text-sm font-medium"},"Confirm Password",-1)),p(s("input",{"onUpdate:modelValue":e[3]||(e[3]=t=>n.value=t),type:"password",id:"admin-confirm-password",required:"",disabled:a.value,class:"input-field mt-1 w-full",placeholder:"Confirm your password",autocomplete:"new-password"},null,8,F),[[f,n.value]]),n.value&&!w.value?(i(),u("p",H," Passwords do not match. ")):v("",!0)]),o.value?(i(),u("div",I,q(o.value),1)):v("",!0),s("div",O,[s("button",{type:"submit",class:"btn btn-primary w-full flex justify-center items-center",disabled:a.value},[a.value?(i(),u("span",G,e[8]||(e[8]=[s("svg",{class:"animate-spin -ml-1 mr-3 h-5 w-5",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24"},[s("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),s("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})],-1),s("span",null,"Creating Admin...",-1)]))):(i(),u("span",K,"Create Admin Account"))],8,W)])],32)]),footer:g(()=>e[10]||(e[10]=[])),_:1}))}};export{Q as default};
frontend/dist/ui_assets/dagre-5GWH7T2D-N8xBtIrr.js+2 −2 renamedfrontend/dist/ui_assets/Dashboard-CLpS1rXi.js+2 −2 renamed@@ -1,2 +1,2 @@ -import{u as L}from"./admin-Dmx5gjU7.js";import{q as T,c_ as j,c$ as I,d0 as P,d1 as V,dg as E,d2 as K,d3 as F,d4 as O,d5 as Q,d6 as Y,dh as J,K as G,s as A,c as k,d as i,l as n,e,p as $,f as p,m as S,$ as N,n as U,C as X,Q as z,o as W,j as b,g as R,t as _,F as ee,i as te,U as ae,ao as H,h as M,di as se,Y as ne,v as D}from"./index-CEXks4lv.js";import{L as oe,B as q}from"./chartjs-adapter-date-fns.esm-ySzGeTBl.js";import{_ as le}from"./GenericModal-Br5hR2Sz.js";const re={class:"space-y-6"},ie={class:"bg-white dark:bg-gray-800 rounded-lg shadow p-5"},de={class:"flex justify-between items-center mb-4 flex-wrap gap-2"},ce={class:"inline-flex rounded-md shadow-sm",role:"group"},ue={class:"flex items-center gap-2"},ge={class:"h-96"},pe={key:0,class:"flex items-center justify-center h-full"},ve={key:1,class:"flex items-center justify-center h-full"},me={key:2,class:"h-full"},be={__name:"GlobalStatsChart",props:{stats:{type:Object,default:null},isLoading:{type:Boolean,default:!1}},setup(x){j.register(I,P,V,E,K,F,O,Q,Y,J);const s=x,o=G(),a=A("daily"),d=A(null),c=k(()=>a.value==="daily"||a.value==="weekly_stats"?oe:q),y=k(()=>({responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:a.value==="daily"||a.value==="weekly_stats"},title:{display:!0,text:l.value,color:o.currentTheme==="dark"?"#e5e7eb":"#1f2937"}},scales:{x:{type:a.value==="daily"?"time":"category",time:{unit:"day",tooltipFormat:"MMM d, yyyy"},grid:{color:o.currentTheme==="dark"?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.1)"},ticks:{color:o.currentTheme==="dark"?"#cbd5e1":"#4b5563"}},y:{beginAtZero:!0,grid:{color:o.currentTheme==="dark"?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.1)"},ticks:{color:o.currentTheme==="dark"?"#cbd5e1":"#4b5563"}}}})),l=k(()=>{switch(a.value){case"mean":return"Average Daily Generations by Weekday";case"variance":return"Generation Variance by Weekday";case"weekly_stats":return"Weekly Generation Statistics (Mean ± Std Dev)";case"daily":default:return"Total AI Generations (Last 30 Days)"}}),u=k(()=>{if(!s.stats)return{labels:[],datasets:[]};const r=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"];if(a.value==="daily")return{labels:s.stats.generations_per_day.map(t=>t.date),datasets:[{label:"Generations",data:s.stats.generations_per_day.map(t=>t.count),borderColor:"#3b82f6",backgroundColor:"rgba(59, 130, 246, 0.2)",tension:.1,fill:!0}]};if(a.value==="mean")return{labels:r,datasets:[{label:"Mean Generations",data:r.map(t=>s.stats.mean_per_weekday[t]),backgroundColor:"#10b981"}]};if(a.value==="variance")return{labels:r,datasets:[{label:"Variance",data:r.map(t=>s.stats.variance_per_weekday[t]),backgroundColor:"#f59e0b"}]};if(a.value==="weekly_stats"){const t=r.map(g=>s.stats.mean_per_weekday[g]),h=r.map(g=>Math.sqrt(s.stats.variance_per_weekday[g])),w=t.map((g,C)=>g+h[C]),f=t.map((g,C)=>Math.max(0,g-h[C]));return{labels:r,datasets:[{label:"Mean",data:t,borderColor:"#3b82f6",backgroundColor:"rgba(59, 130, 246, 0.5)",tension:.1,pointRadius:4,pointBackgroundColor:"#3b82f6"},{label:"Std. Deviation Range",data:w,borderColor:"transparent",backgroundColor:"rgba(59, 130, 246, 0.15)",pointRadius:0,fill:"+1"},{label:"Lower Bound",data:f,borderColor:"transparent",backgroundColor:"transparent",pointRadius:0,showInLegend:!1}]}}return{labels:[],datasets:[]}});function v(){if(d.value&&d.value.chart){const r=document.createElement("a");r.href=d.value.chart.toBase64Image("image/png",1),r.download=`lollms_global_stats_${a.value}.png`,r.click()}else o.addNotification("Could not export chart image.","error")}function m(){if(!s.stats){o.addNotification("No data to export.","warning");return}let r="data:text/csv;charset=utf-8,",t=[];if(a.value==="daily")t.push(["date","generation_count"]),s.stats.generations_per_day.forEach(f=>{t.push([f.date,f.count])});else if(a.value==="weekly_stats")t.push(["weekday","mean","variance","std_deviation"]),["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"].forEach(g=>{const C=s.stats.mean_per_weekday[g],B=s.stats.variance_per_weekday[g],Z=Math.sqrt(B);t.push([g,C,B,Z])});else{t.push(["weekday",a.value]);const f=a.value==="mean"?s.stats.mean_per_weekday:s.stats.variance_per_weekday;Object.entries(f).forEach(([g,C])=>{t.push([g,C])})}r+=t.map(f=>f.join(",")).join(` -`);const h=encodeURI(r),w=document.createElement("a");w.setAttribute("href",h),w.setAttribute("download",`lollms_global_stats_${a.value}.csv`),document.body.appendChild(w),w.click(),document.body.removeChild(w)}return(r,t)=>(n(),i("div",re,[t[8]||(t[8]=e("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," Global Usage Statistics ",-1)),e("div",ie,[e("div",de,[e("div",ce,[e("button",{onClick:t[0]||(t[0]=h=>a.value="daily"),type:"button",class:$(["btn-group",{active:a.value==="daily"}])},"Daily",2),e("button",{onClick:t[1]||(t[1]=h=>a.value="weekly_stats"),type:"button",class:$(["btn-group",{active:a.value==="weekly_stats"}])},"Weekly Stats",2),e("button",{onClick:t[2]||(t[2]=h=>a.value="mean"),type:"button",class:$(["btn-group",{active:a.value==="mean"}])},"Mean",2),e("button",{onClick:t[3]||(t[3]=h=>a.value="variance"),type:"button",class:$(["btn-group",{active:a.value==="variance"}])},"Variance",2)]),e("div",ue,[e("button",{onClick:v,class:"btn btn-secondary btn-sm",title:"Export as PNG"},[p(N,{class:"w-4 h-4 mr-1"}),t[4]||(t[4]=S(" PNG "))]),e("button",{onClick:m,class:"btn btn-secondary btn-sm",title:"Export as CSV"},[p(N,{class:"w-4 h-4 mr-1"}),t[5]||(t[5]=S(" CSV "))])])]),e("div",ge,[x.isLoading?(n(),i("div",pe,t[6]||(t[6]=[e("p",{class:"text-gray-500"},"Loading chart data...",-1)]))):x.stats?(n(),i("div",me,[(n(),U(X(c.value),{data:u.value,options:y.value,ref_key:"chartRef",ref:d},null,8,["data","options"]))])):(n(),i("div",ve,t[7]||(t[7]=[e("p",{class:"text-gray-500"},"Could not load statistics.",-1)])))])])]))}},ye=T(be,[["__scopeId","data-v-a10fe633"]]),_e={class:"bg-white dark:bg-gray-800 p-6 rounded-xl shadow-sm border border-gray-100 dark:border-gray-700 h-96 flex flex-col"},fe={class:"flex-grow relative"},he={key:0,class:"absolute inset-0 flex items-center justify-center"},ke={key:1,class:"absolute inset-0 flex items-center justify-center"},xe={__name:"ModelUsageChart",setup(x){j.register(I,P,V,E,F,O);const s=L(),{modelUsageStats:o,isLoadingModelUsageStats:a}=z(s);W(()=>{s.fetchModelUsageStats()});const d=k(()=>{const y=Array.isArray(o.value)?o.value:[],l=y.map(v=>v.model_name),u=y.map(v=>v.count);return{labels:l,datasets:[{label:"Users",backgroundColor:"#3B82F6",borderRadius:4,data:u,barPercentage:.6,categoryPercentage:.8}]}}),c={indexAxis:"y",responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!1},tooltip:{mode:"index",intersect:!1}},scales:{x:{beginAtZero:!0,grid:{color:"#374151"},ticks:{stepSize:1,color:"#9CA3AF",precision:0}},y:{grid:{display:!1},ticks:{color:"#9CA3AF",autoSkip:!1,callback:function(y){const l=this.getLabelForValue(y);return l.length>35?l.substr(0,35)+"...":l}}}}};return(y,l)=>(n(),i("div",_e,[l[2]||(l[2]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-white mb-1"}," User Default Model Preferences ",-1)),l[3]||(l[3]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400 mb-4"}," Count of users currently assigned to each model. ",-1)),e("div",fe,[b(a)?(n(),i("div",he,l[0]||(l[0]=[e("p",{class:"text-gray-500"},"Loading stats...",-1)]))):!b(o)||b(o).length===0?(n(),i("div",ke,l[1]||(l[1]=[e("p",{class:"text-gray-500"},"No data available.",-1)]))):(n(),U(b(q),{key:2,data:d.value,options:c},null,8,["data"]))])]))}},we={key:0,class:"text-center p-6 text-gray-500"},Ce={key:1,class:"space-y-4"},$e={class:"flex justify-between items-center bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg"},Se={class:"text-sm font-medium text-blue-800 dark:text-blue-200"},Ae=["disabled"],Me={class:"divide-y divide-gray-200 dark:divide-gray-700 max-h-96 overflow-y-auto"},Ue={class:"flex items-center"},De={class:"ml-3"},Le={class:"text-sm font-medium text-gray-900 dark:text-white"},Te={class:"text-xs text-gray-500"},Ge={class:"text-xs text-gray-400"},Be=["onClick"],Ne={__name:"PendingUsersModal",setup(x){const s=G(),o=L(),a=k(()=>o.allUsers),d=k(()=>a.value.filter(u=>!u.is_active)),c=A(!1);async function y(u){try{await o.activateUser(u.id)}catch{s.addNotification("Failed to activate user","error")}}async function l(){c.value=!0;try{for(const u of d.value)await o.activateUser(u.id);s.closeModal("pendingUsers")}finally{c.value=!1}}return(u,v)=>(n(),U(le,{"modal-name":"pendingUsers",title:"Pending User Approvals"},{body:R(()=>[d.value.length===0?(n(),i("div",we," No pending users found. ")):(n(),i("div",Ce,[e("div",$e,[e("span",Se,_(d.value.length)+" users waiting.",1),e("button",{onClick:l,class:"btn btn-primary btn-sm",disabled:c.value},_(c.value?"Activating...":"Activate All"),9,Ae)]),e("ul",Me,[(n(!0),i(ee,null,te(d.value,m=>(n(),i("li",{key:m.id,class:"py-3 flex items-center justify-between"},[e("div",Ue,[p(ae,{icon:m.icon,username:m.username,"size-class":"h-10 w-10"},null,8,["icon","username"]),e("div",De,[e("p",Le,_(m.username),1),e("p",Te,_(m.email||"No email"),1),e("p",Ge,"Registered: "+_(new Date(m.created_at).toLocaleDateString()),1)])]),e("button",{onClick:r=>y(m),class:"btn-icon text-green-600 hover:bg-green-50 dark:hover:bg-green-900/20",title:"Approve"},[p(H,{class:"w-6 h-6"})],8,Be)]))),128))])]))]),footer:R(()=>[e("button",{onClick:v[0]||(v[0]=m=>b(s).closeModal("pendingUsers")),class:"btn btn-secondary"},"Close")]),_:1}))}},Re={},je={class:"w-5 h-5 fill-current"};function Ie(x,s){return n(),i("div",je,s[0]||(s[0]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},[e("path",{d:"M12 17a2 2 0 1 0 0-4 2 2 0 0 0 0 4zm6-7h-1V7a5 5 0 0 0-10 0v3H6a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7a2 2 0 0 0-2-2zm-7-3a3 3 0 0 1 6 0v3H11V7zm7 12H6v-7h12v7z"})],-1)]))}const Pe=T(Re,[["render",Ie]]),Ve={class:"space-y-8 animate-fade-in p-2"},Ee={class:"flex flex-col md:flex-row md:items-center justify-between gap-4"},Fe={key:0,class:"flex items-center gap-4 mt-1 text-sm text-gray-500 dark:text-gray-400"},Oe={class:"flex items-center gap-1"},ze={key:0,class:"flex items-center gap-1 text-green-600 dark:text-green-400"},We={key:1,class:"flex items-center gap-1 text-yellow-600 dark:text-yellow-400"},He=["disabled"],qe={key:0,class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6"},Ze={class:"metric-card"},Ke={class:"metric-value"},Qe={class:"metric-icon bg-blue-100 dark:bg-blue-900/30 text-blue-600"},Ye={class:"metric-value"},Je={class:"metric-icon bg-orange-100 dark:bg-orange-900/30 text-orange-600"},Xe={key:0,class:"absolute top-0 right-0 -mt-1 -mr-1 flex h-3 w-3"},et={class:"metric-card"},tt={class:"metric-value"},at={class:"metric-icon bg-green-100 dark:bg-green-900/30 text-green-600"},st={class:"metric-card"},nt={class:"metric-value"},ot={class:"metric-icon bg-purple-100 dark:bg-purple-900/30 text-purple-600"},lt={class:"grid grid-cols-1 lg:grid-cols-2 gap-6"},rt={__name:"Dashboard",setup(x){const s=A(null),o=A(!0),a=G(),d=L(),{serverInfo:c,globalGenerationStats:y,isLoadingGlobalGenerationStats:l}=z(d),u=k(()=>{var r;return((r=s.value)==null?void 0:r.pending_approval)||0});async function v(){o.value=!0;try{await Promise.all([d.fetchDashboardStats(),d.fetchServerInfo(),d.fetchGlobalGenerationStats()]),s.value=d.dashboardStats}finally{o.value=!1}}function m(){a.openModal("pendingUsers")}return W(v),(r,t)=>(n(),i("div",Ve,[e("div",Ee,[e("div",null,[t[2]||(t[2]=e("h2",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"System Dashboard",-1)),b(c)?(n(),i("div",Fe,[e("span",Oe,[e("span",{class:$(["w-2 h-2 rounded-full",b(c).https_enabled?"bg-green-500":"bg-yellow-500"])},null,2),S(" "+_(b(c).url),1)]),b(c).https_enabled?(n(),i("span",ze,[p(se,{class:"w-3 h-3"}),t[0]||(t[0]=S(" HTTPS Active"))])):(n(),i("span",We,[p(Pe,{class:"w-3 h-3"}),t[1]||(t[1]=S(" HTTP Only"))]))])):M("",!0)]),e("button",{onClick:v,class:"btn btn-secondary btn-sm",disabled:o.value},[p(ne,{class:$(["w-4 h-4 mr-2",{"animate-spin":o.value}])},null,8,["class"]),t[3]||(t[3]=S(" Refresh "))],8,He)]),s.value?(n(),i("div",qe,[e("div",Ze,[e("div",null,[t[4]||(t[4]=e("p",{class:"metric-label"},"Total Users",-1)),e("p",Ke,_(s.value.total_users),1)]),e("div",Qe,[p(D,{class:"w-6 h-6"})])]),e("div",{class:"metric-card cursor-pointer hover:ring-2 ring-orange-400 transition-all",onClick:m,title:"Click to manage pending users"},[e("div",null,[t[5]||(t[5]=e("p",{class:"metric-label"},"Pending Approval",-1)),e("p",Ye,_(u.value),1)]),e("div",Je,[p(D,{class:"w-6 h-6"}),u.value>0?(n(),i("span",Xe,t[6]||(t[6]=[e("span",{class:"animate-ping absolute inline-flex h-full w-full rounded-full bg-orange-400 opacity-75"},null,-1),e("span",{class:"relative inline-flex rounded-full h-3 w-3 bg-orange-500"},null,-1)]))):M("",!0)])]),e("div",et,[e("div",null,[t[7]||(t[7]=e("p",{class:"metric-label"},"Active (24h)",-1)),e("p",tt,_(s.value.active_users_24h),1)]),e("div",at,[p(H,{class:"w-6 h-6"})])]),e("div",st,[e("div",null,[t[8]||(t[8]=e("p",{class:"metric-label"},"New (7d)",-1)),e("p",nt,_(s.value.new_users_7d),1)]),e("div",ot,[p(D,{class:"w-6 h-6"})])])])):M("",!0),e("div",lt,[p(ye,{stats:b(y),"is-loading":b(l)},null,8,["stats","is-loading"]),p(xe)]),b(a).activeModal==="pendingUsers"?(n(),U(Ne,{key:1})):M("",!0)]))}},gt=T(rt,[["__scopeId","data-v-983e643e"]]);export{gt as default}; +import{u as L}from"./admin-CwLQr1mG.js";import{q as T,c_ as j,c$ as I,d0 as P,d1 as V,dg as E,d2 as K,d3 as F,d4 as O,d5 as J,d6 as Q,dh as X,K as G,s as A,c as k,d as i,l as n,e,p as $,f as p,m as S,W as R,n as U,C as Y,R as z,o as W,j as b,g as N,t as _,F as ee,i as te,U as ae,ao as H,h as M,di as se,a0 as ne,v as D}from"./index-BBRgbnZQ.js";import{L as oe,B as q}from"./chartjs-adapter-date-fns.esm-ChtTz7YT.js";import{_ as le}from"./GenericModal-eXiOHk6I.js";const re={class:"space-y-6"},ie={class:"bg-white dark:bg-gray-800 rounded-lg shadow p-5"},de={class:"flex justify-between items-center mb-4 flex-wrap gap-2"},ce={class:"inline-flex rounded-md shadow-sm",role:"group"},ue={class:"flex items-center gap-2"},ge={class:"h-96"},pe={key:0,class:"flex items-center justify-center h-full"},ve={key:1,class:"flex items-center justify-center h-full"},me={key:2,class:"h-full"},be={__name:"GlobalStatsChart",props:{stats:{type:Object,default:null},isLoading:{type:Boolean,default:!1}},setup(x){j.register(I,P,V,E,K,F,O,J,Q,X);const s=x,o=G(),a=A("daily"),d=A(null),c=k(()=>a.value==="daily"||a.value==="weekly_stats"?oe:q),y=k(()=>({responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:a.value==="daily"||a.value==="weekly_stats"},title:{display:!0,text:l.value,color:o.currentTheme==="dark"?"#e5e7eb":"#1f2937"}},scales:{x:{type:a.value==="daily"?"time":"category",time:{unit:"day",tooltipFormat:"MMM d, yyyy"},grid:{color:o.currentTheme==="dark"?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.1)"},ticks:{color:o.currentTheme==="dark"?"#cbd5e1":"#4b5563"}},y:{beginAtZero:!0,grid:{color:o.currentTheme==="dark"?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.1)"},ticks:{color:o.currentTheme==="dark"?"#cbd5e1":"#4b5563"}}}})),l=k(()=>{switch(a.value){case"mean":return"Average Daily Generations by Weekday";case"variance":return"Generation Variance by Weekday";case"weekly_stats":return"Weekly Generation Statistics (Mean ± Std Dev)";case"daily":default:return"Total AI Generations (Last 30 Days)"}}),u=k(()=>{if(!s.stats)return{labels:[],datasets:[]};const r=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"];if(a.value==="daily")return{labels:s.stats.generations_per_day.map(t=>t.date),datasets:[{label:"Generations",data:s.stats.generations_per_day.map(t=>t.count),borderColor:"#3b82f6",backgroundColor:"rgba(59, 130, 246, 0.2)",tension:.1,fill:!0}]};if(a.value==="mean")return{labels:r,datasets:[{label:"Mean Generations",data:r.map(t=>s.stats.mean_per_weekday[t]),backgroundColor:"#10b981"}]};if(a.value==="variance")return{labels:r,datasets:[{label:"Variance",data:r.map(t=>s.stats.variance_per_weekday[t]),backgroundColor:"#f59e0b"}]};if(a.value==="weekly_stats"){const t=r.map(g=>s.stats.mean_per_weekday[g]),h=r.map(g=>Math.sqrt(s.stats.variance_per_weekday[g])),w=t.map((g,C)=>g+h[C]),f=t.map((g,C)=>Math.max(0,g-h[C]));return{labels:r,datasets:[{label:"Mean",data:t,borderColor:"#3b82f6",backgroundColor:"rgba(59, 130, 246, 0.5)",tension:.1,pointRadius:4,pointBackgroundColor:"#3b82f6"},{label:"Std. Deviation Range",data:w,borderColor:"transparent",backgroundColor:"rgba(59, 130, 246, 0.15)",pointRadius:0,fill:"+1"},{label:"Lower Bound",data:f,borderColor:"transparent",backgroundColor:"transparent",pointRadius:0,showInLegend:!1}]}}return{labels:[],datasets:[]}});function v(){if(d.value&&d.value.chart){const r=document.createElement("a");r.href=d.value.chart.toBase64Image("image/png",1),r.download=`lollms_global_stats_${a.value}.png`,r.click()}else o.addNotification("Could not export chart image.","error")}function m(){if(!s.stats){o.addNotification("No data to export.","warning");return}let r="data:text/csv;charset=utf-8,",t=[];if(a.value==="daily")t.push(["date","generation_count"]),s.stats.generations_per_day.forEach(f=>{t.push([f.date,f.count])});else if(a.value==="weekly_stats")t.push(["weekday","mean","variance","std_deviation"]),["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"].forEach(g=>{const C=s.stats.mean_per_weekday[g],B=s.stats.variance_per_weekday[g],Z=Math.sqrt(B);t.push([g,C,B,Z])});else{t.push(["weekday",a.value]);const f=a.value==="mean"?s.stats.mean_per_weekday:s.stats.variance_per_weekday;Object.entries(f).forEach(([g,C])=>{t.push([g,C])})}r+=t.map(f=>f.join(",")).join(` +`);const h=encodeURI(r),w=document.createElement("a");w.setAttribute("href",h),w.setAttribute("download",`lollms_global_stats_${a.value}.csv`),document.body.appendChild(w),w.click(),document.body.removeChild(w)}return(r,t)=>(n(),i("div",re,[t[8]||(t[8]=e("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," Global Usage Statistics ",-1)),e("div",ie,[e("div",de,[e("div",ce,[e("button",{onClick:t[0]||(t[0]=h=>a.value="daily"),type:"button",class:$(["btn-group",{active:a.value==="daily"}])},"Daily",2),e("button",{onClick:t[1]||(t[1]=h=>a.value="weekly_stats"),type:"button",class:$(["btn-group",{active:a.value==="weekly_stats"}])},"Weekly Stats",2),e("button",{onClick:t[2]||(t[2]=h=>a.value="mean"),type:"button",class:$(["btn-group",{active:a.value==="mean"}])},"Mean",2),e("button",{onClick:t[3]||(t[3]=h=>a.value="variance"),type:"button",class:$(["btn-group",{active:a.value==="variance"}])},"Variance",2)]),e("div",ue,[e("button",{onClick:v,class:"btn btn-secondary btn-sm",title:"Export as PNG"},[p(R,{class:"w-4 h-4 mr-1"}),t[4]||(t[4]=S(" PNG "))]),e("button",{onClick:m,class:"btn btn-secondary btn-sm",title:"Export as CSV"},[p(R,{class:"w-4 h-4 mr-1"}),t[5]||(t[5]=S(" CSV "))])])]),e("div",ge,[x.isLoading?(n(),i("div",pe,t[6]||(t[6]=[e("p",{class:"text-gray-500"},"Loading chart data...",-1)]))):x.stats?(n(),i("div",me,[(n(),U(Y(c.value),{data:u.value,options:y.value,ref_key:"chartRef",ref:d},null,8,["data","options"]))])):(n(),i("div",ve,t[7]||(t[7]=[e("p",{class:"text-gray-500"},"Could not load statistics.",-1)])))])])]))}},ye=T(be,[["__scopeId","data-v-a10fe633"]]),_e={class:"bg-white dark:bg-gray-800 p-6 rounded-xl shadow-sm border border-gray-100 dark:border-gray-700 h-96 flex flex-col"},fe={class:"flex-grow relative"},he={key:0,class:"absolute inset-0 flex items-center justify-center"},ke={key:1,class:"absolute inset-0 flex items-center justify-center"},xe={__name:"ModelUsageChart",setup(x){j.register(I,P,V,E,F,O);const s=L(),{modelUsageStats:o,isLoadingModelUsageStats:a}=z(s);W(()=>{s.fetchModelUsageStats()});const d=k(()=>{const y=Array.isArray(o.value)?o.value:[],l=y.map(v=>v.model_name),u=y.map(v=>v.count);return{labels:l,datasets:[{label:"Users",backgroundColor:"#3B82F6",borderRadius:4,data:u,barPercentage:.6,categoryPercentage:.8}]}}),c={indexAxis:"y",responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!1},tooltip:{mode:"index",intersect:!1}},scales:{x:{beginAtZero:!0,grid:{color:"#374151"},ticks:{stepSize:1,color:"#9CA3AF",precision:0}},y:{grid:{display:!1},ticks:{color:"#9CA3AF",autoSkip:!1,callback:function(y){const l=this.getLabelForValue(y);return l.length>35?l.substr(0,35)+"...":l}}}}};return(y,l)=>(n(),i("div",_e,[l[2]||(l[2]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-white mb-1"}," User Default Model Preferences ",-1)),l[3]||(l[3]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400 mb-4"}," Count of users currently assigned to each model. ",-1)),e("div",fe,[b(a)?(n(),i("div",he,l[0]||(l[0]=[e("p",{class:"text-gray-500"},"Loading stats...",-1)]))):!b(o)||b(o).length===0?(n(),i("div",ke,l[1]||(l[1]=[e("p",{class:"text-gray-500"},"No data available.",-1)]))):(n(),U(b(q),{key:2,data:d.value,options:c},null,8,["data"]))])]))}},we={key:0,class:"text-center p-6 text-gray-500"},Ce={key:1,class:"space-y-4"},$e={class:"flex justify-between items-center bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg"},Se={class:"text-sm font-medium text-blue-800 dark:text-blue-200"},Ae=["disabled"],Me={class:"divide-y divide-gray-200 dark:divide-gray-700 max-h-96 overflow-y-auto"},Ue={class:"flex items-center"},De={class:"ml-3"},Le={class:"text-sm font-medium text-gray-900 dark:text-white"},Te={class:"text-xs text-gray-500"},Ge={class:"text-xs text-gray-400"},Be=["onClick"],Re={__name:"PendingUsersModal",setup(x){const s=G(),o=L(),a=k(()=>o.allUsers),d=k(()=>a.value.filter(u=>!u.is_active)),c=A(!1);async function y(u){try{await o.activateUser(u.id)}catch{s.addNotification("Failed to activate user","error")}}async function l(){c.value=!0;try{for(const u of d.value)await o.activateUser(u.id);s.closeModal("pendingUsers")}finally{c.value=!1}}return(u,v)=>(n(),U(le,{"modal-name":"pendingUsers",title:"Pending User Approvals"},{body:N(()=>[d.value.length===0?(n(),i("div",we," No pending users found. ")):(n(),i("div",Ce,[e("div",$e,[e("span",Se,_(d.value.length)+" users waiting.",1),e("button",{onClick:l,class:"btn btn-primary btn-sm",disabled:c.value},_(c.value?"Activating...":"Activate All"),9,Ae)]),e("ul",Me,[(n(!0),i(ee,null,te(d.value,m=>(n(),i("li",{key:m.id,class:"py-3 flex items-center justify-between"},[e("div",Ue,[p(ae,{icon:m.icon,username:m.username,"size-class":"h-10 w-10"},null,8,["icon","username"]),e("div",De,[e("p",Le,_(m.username),1),e("p",Te,_(m.email||"No email"),1),e("p",Ge,"Registered: "+_(new Date(m.created_at).toLocaleDateString()),1)])]),e("button",{onClick:r=>y(m),class:"btn-icon text-green-600 hover:bg-green-50 dark:hover:bg-green-900/20",title:"Approve"},[p(H,{class:"w-6 h-6"})],8,Be)]))),128))])]))]),footer:N(()=>[e("button",{onClick:v[0]||(v[0]=m=>b(s).closeModal("pendingUsers")),class:"btn btn-secondary"},"Close")]),_:1}))}},Ne={},je={class:"w-5 h-5 fill-current"};function Ie(x,s){return n(),i("div",je,s[0]||(s[0]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},[e("path",{d:"M12 17a2 2 0 1 0 0-4 2 2 0 0 0 0 4zm6-7h-1V7a5 5 0 0 0-10 0v3H6a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7a2 2 0 0 0-2-2zm-7-3a3 3 0 0 1 6 0v3H11V7zm7 12H6v-7h12v7z"})],-1)]))}const Pe=T(Ne,[["render",Ie]]),Ve={class:"space-y-8 animate-fade-in p-2"},Ee={class:"flex flex-col md:flex-row md:items-center justify-between gap-4"},Fe={key:0,class:"flex items-center gap-4 mt-1 text-sm text-gray-500 dark:text-gray-400"},Oe={class:"flex items-center gap-1"},ze={key:0,class:"flex items-center gap-1 text-green-600 dark:text-green-400"},We={key:1,class:"flex items-center gap-1 text-yellow-600 dark:text-yellow-400"},He=["disabled"],qe={key:0,class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6"},Ze={class:"metric-card"},Ke={class:"metric-value"},Je={class:"metric-icon bg-blue-100 dark:bg-blue-900/30 text-blue-600"},Qe={class:"metric-value"},Xe={class:"metric-icon bg-orange-100 dark:bg-orange-900/30 text-orange-600"},Ye={key:0,class:"absolute top-0 right-0 -mt-1 -mr-1 flex h-3 w-3"},et={class:"metric-card"},tt={class:"metric-value"},at={class:"metric-icon bg-green-100 dark:bg-green-900/30 text-green-600"},st={class:"metric-card"},nt={class:"metric-value"},ot={class:"metric-icon bg-purple-100 dark:bg-purple-900/30 text-purple-600"},lt={class:"grid grid-cols-1 lg:grid-cols-2 gap-6"},rt={__name:"Dashboard",setup(x){const s=A(null),o=A(!0),a=G(),d=L(),{serverInfo:c,globalGenerationStats:y,isLoadingGlobalGenerationStats:l}=z(d),u=k(()=>{var r;return((r=s.value)==null?void 0:r.pending_approval)||0});async function v(){o.value=!0;try{await Promise.all([d.fetchDashboardStats(),d.fetchServerInfo(),d.fetchGlobalGenerationStats()]),s.value=d.dashboardStats}finally{o.value=!1}}function m(){a.openModal("pendingUsers")}return W(v),(r,t)=>(n(),i("div",Ve,[e("div",Ee,[e("div",null,[t[2]||(t[2]=e("h2",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"System Dashboard",-1)),b(c)?(n(),i("div",Fe,[e("span",Oe,[e("span",{class:$(["w-2 h-2 rounded-full",b(c).https_enabled?"bg-green-500":"bg-yellow-500"])},null,2),S(" "+_(b(c).url),1)]),b(c).https_enabled?(n(),i("span",ze,[p(se,{class:"w-3 h-3"}),t[0]||(t[0]=S(" HTTPS Active"))])):(n(),i("span",We,[p(Pe,{class:"w-3 h-3"}),t[1]||(t[1]=S(" HTTP Only"))]))])):M("",!0)]),e("button",{onClick:v,class:"btn btn-secondary btn-sm",disabled:o.value},[p(ne,{class:$(["w-4 h-4 mr-2",{"animate-spin":o.value}])},null,8,["class"]),t[3]||(t[3]=S(" Refresh "))],8,He)]),s.value?(n(),i("div",qe,[e("div",Ze,[e("div",null,[t[4]||(t[4]=e("p",{class:"metric-label"},"Total Users",-1)),e("p",Ke,_(s.value.total_users),1)]),e("div",Je,[p(D,{class:"w-6 h-6"})])]),e("div",{class:"metric-card cursor-pointer hover:ring-2 ring-orange-400 transition-all",onClick:m,title:"Click to manage pending users"},[e("div",null,[t[5]||(t[5]=e("p",{class:"metric-label"},"Pending Approval",-1)),e("p",Qe,_(u.value),1)]),e("div",Xe,[p(D,{class:"w-6 h-6"}),u.value>0?(n(),i("span",Ye,t[6]||(t[6]=[e("span",{class:"animate-ping absolute inline-flex h-full w-full rounded-full bg-orange-400 opacity-75"},null,-1),e("span",{class:"relative inline-flex rounded-full h-3 w-3 bg-orange-500"},null,-1)]))):M("",!0)])]),e("div",et,[e("div",null,[t[7]||(t[7]=e("p",{class:"metric-label"},"Active (24h)",-1)),e("p",tt,_(s.value.active_users_24h),1)]),e("div",at,[p(H,{class:"w-6 h-6"})])]),e("div",st,[e("div",null,[t[8]||(t[8]=e("p",{class:"metric-label"},"New (7d)",-1)),e("p",nt,_(s.value.new_users_7d),1)]),e("div",ot,[p(D,{class:"w-6 h-6"})])])])):M("",!0),e("div",lt,[p(ye,{stats:b(y),"is-loading":b(l)},null,8,["stats","is-loading"]),p(xe)]),b(a).activeModal==="pendingUsers"?(n(),U(Re,{key:1})):M("",!0)]))}},gt=T(rt,[["__scopeId","data-v-983e643e"]]);export{gt as default};
frontend/dist/ui_assets/DataStoreGraphManager-BRYOMT4c.js+30 −0 added@@ -0,0 +1,30 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["ui_assets/InteractiveGraphViewer-Cgi2b6Pt.js","ui_assets/index-BBRgbnZQ.js","ui_assets/index-BtkqZe_k.css","ui_assets/IconPlayCircle-D2gooLkD.js","ui_assets/InteractiveGraphViewer-CoD_Cgx1.css"])))=>i.map(i=>d[i]); +import{P as de,K as ie,u as ue,Q as ce,R as W,s as u,w as j,o as ge,d as n,l as s,e as t,h as b,t as d,m as w,a4 as pe,f as y,ca as fe,z as E,X as F,F as M,i as O,j as z,at as me,cb as be,cc as ve,Y as he,ah as ye,H as xe,L as ke,an as we,n as _e,a0 as Ne,A as Se,D as De}from"./index-BBRgbnZQ.js";import{I as Ge}from"./IconPlayCircle-D2gooLkD.js";const Ce={class:"h-full flex flex-col lg:flex-row gap-6"},Ie={class:"w-full lg:w-96 lg:flex-shrink-0 space-y-6 h-full overflow-y-auto custom-scrollbar pr-4"},Pe={class:"grid grid-cols-2 gap-4"},Ee={class:"bg-gray-50 dark:bg-gray-700/50 rounded-lg p-3 text-center border dark:border-gray-600"},Me={key:0,class:"text-xl font-bold animate-pulse"},Oe={key:1,class:"text-xl font-bold"},Le={class:"bg-gray-50 dark:bg-gray-700/50 rounded-lg p-3 text-center border dark:border-gray-600"},je={key:0,class:"text-xl font-bold animate-pulse"},Fe={key:1,class:"text-xl font-bold"},Ae={key:0,class:"p-4 bg-blue-50 dark:bg-blue-900/20 rounded-lg border border-blue-100 dark:border-blue-800"},Re={class:"font-semibold text-blue-800 dark:text-blue-200 text-sm flex justify-between"},Te={class:"text-xs opacity-75"},Ve={class:"text-xs text-blue-700 dark:text-blue-300 mt-1"},We={class:"w-full bg-blue-200 dark:bg-blue-800 rounded-full h-1.5 mt-2"},ze={key:1,class:"p-4 bg-white dark:bg-gray-800 rounded-lg shadow-sm border dark:border-gray-700 space-y-3"},Ue={class:"flex justify-between items-start"},Je={class:"font-semibold text-lg"},qe={class:"px-2 py-0.5 rounded-full bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 text-xs"},Be={class:"text-xs text-gray-500 font-mono"},Ke={class:"bg-gray-50 dark:bg-gray-900 p-2 rounded max-h-40 overflow-auto custom-scrollbar"},Qe={class:"text-xs text-gray-700 dark:text-gray-300 whitespace-pre-wrap"},$e={key:2,class:"p-4 bg-white dark:bg-gray-800 rounded-lg shadow-sm border dark:border-gray-700 space-y-3"},Ye={class:"flex items-center justify-between text-sm"},He={class:"font-medium"},Xe={class:"text-xs text-gray-500 space-y-1"},Ze={class:"space-y-4 p-4 bg-white dark:bg-gray-800 rounded-lg shadow-sm border dark:border-gray-700"},et={key:0,class:"flex gap-2"},tt=["disabled"],at=["disabled"],ot={key:1,class:"dark:border-gray-700"},st={class:"space-y-2"},lt=["label"],nt=["value"],rt={class:"flex justify-between items-center mb-1"},dt={class:"flex items-center gap-2"},it={class:"flex gap-2 mb-2"},ut=["value"],ct={class:"h-48 border rounded-md overflow-hidden border-gray-300 dark:border-gray-600"},gt={class:"grid grid-cols-2 gap-3 pt-2"},pt=["disabled"],ft=["disabled"],mt={class:"pt-2"},bt=["disabled"],vt={key:3,class:"space-y-4 p-4 bg-white dark:bg-gray-800 rounded-lg shadow-sm border dark:border-gray-700"},ht=["disabled"],yt={key:0,class:"flex justify-center p-4"},xt={key:1,class:"space-y-2 max-h-60 overflow-y-auto custom-scrollbar bg-gray-50 dark:bg-gray-900 p-2 rounded-md"},kt={class:"whitespace-pre-wrap font-sans"},wt={key:2,class:"text-center text-gray-500 text-xs italic"},_t={class:"flex-grow h-[500px] lg:h-full lg:min-h-0 bg-white dark:bg-gray-900 rounded-lg shadow-inner border dark:border-gray-700 p-1 relative"},Nt={key:0,class:"absolute inset-0 flex flex-col items-center justify-center bg-gray-50/80 dark:bg-gray-900/80 z-10 p-6 text-center"},St={class:"bg-white dark:bg-gray-800 p-8 rounded-xl shadow-lg border dark:border-gray-700 max-w-md"},Dt={class:"w-16 h-16 bg-blue-100 dark:bg-blue-900/50 rounded-full flex items-center justify-center mx-auto mb-4 text-blue-600 dark:text-blue-400"},Gt=["disabled"],Ct={key:0,class:"text-xs text-red-500 mt-2"},U=`{ + "entities": [ + {"name": "Person", "description": "Key individuals mentioned in the text"}, + {"name": "Organization", "description": "Companies, institutions, or groups"}, + {"name": "Location", "description": "Cities, countries, or physical places"}, + {"name": "Date", "description": "Specific points in time or durations"}, + {"name": "Concept", "description": "Abstract ideas, theories, or methodologies"}, + {"name": "Technology", "description": "Software, hardware, or tools"} + ], + "relationships": [ + {"source": "Person", "target": "Organization", "label": "WORKS_FOR"}, + {"source": "Person", "target": "Location", "label": "LOCATED_IN"}, + {"source": "Organization", "target": "Location", "label": "HEADQUARTERED_IN"}, + {"source": "Person", "target": "Person", "label": "KNOWS"}, + {"source": "Organization", "target": "Product", "label": "PRODUCES"}, + {"source": "Concept", "target": "Concept", "label": "RELATES_TO"} + ] +}`,Et={__name:"DataStoreGraphManager",props:{store:{type:Object,required:!0},task:{type:Object,default:null}},setup(g){const J=Se({loader:()=>De(()=>import("./InteractiveGraphViewer-Cgi2b6Pt.js"),__vite__mapDeps([0,1,2,3,4])),loadingComponent:null,delay:200,errorComponent:null,timeout:3e3}),p=g,c=de(),l=ie(),q=ue();ce();const{user:A}=W(q),{availableLLMModelsGrouped:R}=W(c),L=u(null),f=u({nodes:0,edges:0}),C=u({nodes:[],edges:[]}),x=u(!1),I=u(null),i=u({model_binding:"",model_name:"",chunk_size:2048,overlap_size:256,ontology:U}),_=u(""),N=u(""),P=u([]),D=u(!1),r=u(null),m=u(null),v=u("json"),G=u([]),S=u(null);j(_,o=>{if(o){const[e,...a]=o.split("/");i.value.model_binding=e,i.value.model_name=a.join("/")}else i.value.model_binding="",i.value.model_name=""});async function h(){var o,e;x.value=!0,r.value=null,m.value=null;try{const a=await c.fetchDataStoreGraph(p.store.id);C.value=a||{nodes:[],edges:[]},f.value={nodes:((o=a==null?void 0:a.nodes)==null?void 0:o.length)||0,edges:((e=a==null?void 0:a.edges)==null?void 0:e.length)||0}}catch(a){console.error("Failed to fetch graph:",a),C.value={nodes:[],edges:[]},f.value={nodes:0,edges:0}}finally{x.value=!1}}function T(){if(!i.value.model_binding||!i.value.model_name){l.addNotification("Please select a model for generation.","warning");return}c.generateDataStoreGraph({storeId:p.store.id,graphData:i.value})}function B(){if(!i.value.model_binding||!i.value.model_name){l.addNotification("Please select a model for update.","warning");return}c.updateDataStoreGraph({storeId:p.store.id,graphData:i.value})}async function K(){if((await l.showConfirmation({title:"Wipe Knowledge Graph?",message:"This will permanently delete all nodes and edges from this datastore's graph. This action cannot be undone.",confirmText:"Wipe Graph"})).confirmed)try{await c.wipeDataStoreGraph(p.store.id),h(),l.addNotification("Graph wiped successfully","success")}catch{l.addNotification("Failed to wipe graph","error")}}async function Q(){if(N.value.trim()){D.value=!0;try{P.value=await c.queryDataStoreGraph({storeId:p.store.id,query:N.value,max_k:10})}finally{D.value=!1}}}function $(o){r.value=o,m.value=null}function Y(o){m.value=o,r.value=null}function H(){r.value=null,m.value=null}function X(){l.openModal("NodeEditModal",{onConfirm:async o=>{try{await c.addGraphNode({storeId:p.store.id,nodeData:o}),l.addNotification("Node added successfully","success"),h()}catch(e){l.addNotification("Failed to add node","error"),console.error(e)}}})}function Z(){var o;l.openModal("EdgeEditModal",{sourceId:((o=r.value)==null?void 0:o.id)||"",onConfirm:async e=>{try{await c.addGraphEdge({storeId:p.store.id,edgeData:e}),l.addNotification("Edge added successfully","success"),h()}catch(a){l.addNotification("Failed to add edge","error"),console.error(a)}}})}function ee(){r.value&&l.openModal("NodeEditModal",{node:r.value,onConfirm:async o=>{try{await c.updateGraphNode({storeId:p.store.id,nodeId:r.value.id,nodeData:o}),l.addNotification("Node updated successfully","success"),h()}catch(e){l.addNotification("Failed to update node","error"),console.error(e)}}})}async function te(){if(!r.value)return;const{confirmed:o}=await l.showConfirmation({title:"Delete Node?",message:`Delete node "${r.value.label}" (ID: ${r.value.id})? This will also delete connected edges.`});if(o)try{await c.deleteGraphNode({storeId:p.store.id,nodeId:r.value.id}),l.addNotification("Node deleted","success"),h()}catch{l.addNotification("Failed to delete node","error")}}async function ae(){if(!m.value)return;const{confirmed:o}=await l.showConfirmation({title:"Delete Edge?",message:`Delete edge "${m.value.label}"?`});if(o)try{await c.deleteGraphEdge({storeId:p.store.id,edgeId:m.value.id}),l.addNotification("Edge deleted","success"),h()}catch{l.addNotification("Failed to delete edge","error")}}function oe(){I.value.click()}async function se(o){const e=o.target.files[0];if(e){l.addNotification("Importing ontology file...","info");try{const a=await c.extractTextFromFile(e);i.value.ontology=a,e.name.endsWith(".json")?v.value="json":e.name.endsWith(".yaml")||e.name.endsWith(".yml")?v.value="yaml":e.name.endsWith(".xml")||e.name.endsWith(".owl")||e.name.endsWith(".rdf")?v.value="xml":e.name.endsWith(".ttl")?v.value="python":v.value="markdown",l.addNotification("Ontology file imported successfully.","success")}catch(a){console.error("Ontology import failed:",a)}finally{I.value&&(I.value.value="")}}}function le(){L.value&&L.value.resetView()}function V(){const o=[{name:"Default (JSON)",language:"json",content:U},{name:"Simple (YAML)",language:"yaml",content:`entities: + - Person + - Place +relationships: + - visited`},{name:"OWL/RDF (Turtle)",language:"python",content:`@prefix : <http://example.org/> . +:Person a :Class . +:knows a :ObjectProperty .`},{name:"Free Text (Markdown)",language:"markdown",content:`Define Entities: +- Person +- Location + +Define Relations: +- Person lives in Location`}];try{const e=JSON.parse(localStorage.getItem("lollms_graph_presets")||"[]");G.value=[...o,...e]}catch{G.value=o}}function ne(){S.value&&(i.value.ontology=S.value.content,v.value=S.value.language||"json")}async function re(){const o=prompt("Enter a name for this ontology preset:");if(o){const e={name:o,language:v.value,content:i.value.ontology};try{const a=JSON.parse(localStorage.getItem("lollms_graph_presets")||"[]");a.push(e),localStorage.setItem("lollms_graph_presets",JSON.stringify(a)),V(),S.value=G.value[G.value.length-1],l.addNotification("Preset saved","success")}catch(a){console.error(a),l.addNotification("Failed to save preset","error")}}}return ge(()=>{var o;h(),V(),(o=A.value)!=null&&o.lollms_model_name&&(_.value=A.value.lollms_model_name),R.value.length===0&&c.fetchAvailableLollmsModels()}),j(()=>p.store.id,h),j(()=>p.task,(o,e)=>{e&&(e.status==="running"||e.status==="pending")&&!o&&h()}),(o,e)=>(s(),n("div",Ce,[t("div",Ie,[t("div",Pe,[t("div",Ee,[e[5]||(e[5]=t("h4",{class:"text-xs font-medium text-gray-500 dark:text-gray-400"},"Nodes",-1)),x.value?(s(),n("p",Me,"...")):(s(),n("p",Oe,d(f.value.nodes),1))]),t("div",Le,[e[6]||(e[6]=t("h4",{class:"text-xs font-medium text-gray-500 dark:text-gray-400"},"Edges",-1)),x.value?(s(),n("p",je,"...")):(s(),n("p",Fe,d(f.value.edges),1))])]),g.task?(s(),n("div",Ae,[t("h4",Re,[w(d(g.task.name)+" ",1),t("span",Te,d(g.task.progress)+"%",1)]),t("p",Ve,d(g.task.description),1),t("div",We,[t("div",{class:"bg-blue-600 dark:bg-blue-400 h-1.5 rounded-full transition-all duration-500",style:pe({width:g.task.progress+"%"})},null,4)])])):b("",!0),r.value?(s(),n("div",ze,[t("div",Ue,[t("h3",Je,d(r.value.label),1),t("span",qe,d(r.value.group),1)]),t("div",Be,"ID: "+d(r.value.id),1),t("div",Ke,[t("pre",Qe,d(JSON.stringify(r.value.properties,null,2)),1)]),t("div",{class:"flex gap-2 pt-2"},[t("button",{onClick:ee,class:"btn btn-secondary btn-sm flex-1"},"Edit Properties"),t("button",{onClick:te,class:"btn btn-danger btn-sm flex-1"},"Delete")])])):b("",!0),m.value?(s(),n("div",$e,[e[9]||(e[9]=t("h3",{class:"font-semibold text-lg border-b pb-2 dark:border-gray-700"},"Relationship",-1)),t("div",Ye,[t("span",He,d(m.value.label),1)]),t("div",Xe,[t("div",null,[e[7]||(e[7]=t("span",{class:"font-semibold"},"Source:",-1)),w(" "+d(m.value.source),1)]),t("div",null,[e[8]||(e[8]=t("span",{class:"font-semibold"},"Target:",-1)),w(" "+d(m.value.target),1)])]),t("div",{class:"flex gap-2 pt-2"},[t("button",{onClick:ae,class:"btn btn-danger btn-sm w-full"},"Delete Relationship")])])):b("",!0),t("div",Ze,[e[17]||(e[17]=t("h3",{class:"text-base font-semibold flex items-center gap-2"},[t("span",{class:"w-1 h-4 bg-primary-500 rounded-full"}),w(" Graph Actions ")],-1)),f.value.nodes>0?(s(),n("div",et,[t("button",{onClick:X,disabled:!!g.task,class:"btn btn-secondary btn-sm flex-1"},"Add Node",8,tt),t("button",{onClick:Z,disabled:!!g.task,class:"btn btn-secondary btn-sm flex-1"},"Add Edge",8,at),t("button",{onClick:le,class:"btn btn-ghost btn-sm px-2",title:"Fit Graph"},[y(fe,{class:"w-4 h-4"})])])):b("",!0),f.value.nodes>0?(s(),n("hr",ot)):b("",!0),t("div",st,[t("div",null,[e[11]||(e[11]=t("label",{for:"model-select",class:"block text-xs font-bold uppercase tracking-wider text-gray-500 mb-1"},"LLM Model",-1)),E(t("select",{id:"model-select","onUpdate:modelValue":e[0]||(e[0]=a=>_.value=a),class:"input-field text-sm"},[e[10]||(e[10]=t("option",{disabled:"",value:""},"Select a model",-1)),(s(!0),n(M,null,O(z(R),a=>(s(),n("optgroup",{key:a.label,label:a.label},[(s(!0),n(M,null,O(a.items,k=>(s(),n("option",{key:k.id,value:k.id},d(k.name),9,nt))),128))],8,lt))),128))],512),[[F,_.value]])]),t("div",null,[t("div",rt,[e[12]||(e[12]=t("label",{class:"block text-xs font-bold uppercase tracking-wider text-gray-500"},"Ontology Schema",-1)),t("div",dt,[t("button",{type:"button",onClick:oe,class:"text-xs text-primary-600 hover:text-primary-700 flex items-center gap-1",title:"Import File"},[y(me,{class:"w-3 h-3"})]),t("button",{type:"button",onClick:re,class:"text-xs text-primary-600 hover:text-primary-700 flex items-center gap-1",title:"Save as Preset"},[y(be,{class:"w-3 h-3"})])])]),t("div",it,[E(t("select",{"onUpdate:modelValue":e[1]||(e[1]=a=>S.value=a),onChange:ne,class:"input-field text-xs py-1"},[e[13]||(e[13]=t("option",{value:null,disabled:""},"Load Preset...",-1)),(s(!0),n(M,null,O(G.value,(a,k)=>(s(),n("option",{key:k,value:a},d(a.name),9,ut))),128))],544),[[F,S.value]]),E(t("select",{"onUpdate:modelValue":e[2]||(e[2]=a=>v.value=a),class:"input-field text-xs py-1 w-24"},e[14]||(e[14]=[ve('<option value="json">JSON</option><option value="yaml">YAML</option><option value="xml">XML</option><option value="markdown">MD</option><option value="python">Code</option>',5)]),512),[[F,v.value]])]),t("div",ct,[y(he,{modelValue:i.value.ontology,"onUpdate:modelValue":e[3]||(e[3]=a=>i.value.ontology=a),language:v.value,class:"h-full w-full text-xs"},null,8,["modelValue","language"])]),t("input",{type:"file",ref_key:"ontologyFileInput",ref:I,onChange:se,class:"hidden",accept:".owl,.rdf,.ttl,.jsonld,.pdf,.docx,.txt,.md,.json,.yaml,.yml,.xml"},null,544),e[15]||(e[15]=t("p",{class:"text-[10px] text-gray-400 mt-1"},"Defines the structure for the LLM to extract knowledge.",-1))])]),t("div",gt,[t("button",{onClick:T,disabled:!!g.task,class:"btn btn-primary btn-sm"},d(f.value.nodes>0?"Re-Generate":"Generate Graph"),9,pt),t("button",{onClick:B,disabled:!!g.task||f.value.nodes===0,class:"btn btn-secondary btn-sm"}," Update Graph ",8,ft)]),t("div",mt,[t("button",{onClick:K,disabled:!!g.task||f.value.nodes===0,class:"btn btn-ghost text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20 w-full btn-sm flex items-center justify-center gap-2"},[y(ye,{class:"w-4 h-4"}),e[16]||(e[16]=w(" Wipe All Data "))],8,bt)])]),f.value.nodes>0?(s(),n("div",vt,[e[18]||(e[18]=t("h3",{class:"text-base font-semibold flex items-center gap-2"},[t("span",{class:"w-1 h-4 bg-green-500 rounded-full"}),w(" Query Graph ")],-1)),t("form",{onSubmit:xe(Q,["prevent"]),class:"flex gap-2"},[E(t("input",{"onUpdate:modelValue":e[4]||(e[4]=a=>N.value=a),type:"text",placeholder:"Search for concepts...",class:"input-field flex-grow text-sm"},null,512),[[ke,N.value]]),t("button",{type:"submit",disabled:D.value||!N.value.trim(),class:"btn btn-primary btn-sm px-4"},"Find",8,ht)],32),D.value?(s(),n("div",yt,[y(we,{class:"w-6 h-6 text-primary-500"})])):b("",!0),P.value.length>0?(s(),n("div",xt,[(s(!0),n(M,null,O(P.value,(a,k)=>(s(),n("div",{key:k,class:"p-2 bg-white dark:bg-gray-800 rounded border dark:border-gray-700 text-xs shadow-sm"},[t("pre",kt,d(a),1)]))),128))])):!D.value&&N.value&&P.value.length===0?(s(),n("div",wt," No results found. ")):b("",!0)])):b("",!0)]),t("div",_t,[f.value.nodes===0&&!x.value?(s(),n("div",Nt,[t("div",St,[t("div",Dt,[y(Ne,{class:"w-8 h-8"})]),e[20]||(e[20]=t("h3",{class:"text-xl font-bold text-gray-900 dark:text-white mb-2"},"No Graph Built",-1)),e[21]||(e[21]=t("p",{class:"text-gray-500 dark:text-gray-400 text-sm mb-6"},` This Data Store doesn't have a knowledge graph yet. Select a model and ontology schema on the left, then click "Generate Graph" to build one from your documents. `,-1)),t("button",{onClick:T,disabled:!!g.task||!_.value,class:"btn btn-primary w-full flex items-center justify-center gap-2"},[y(Ge,{class:"w-5 h-5"}),e[19]||(e[19]=w(" Generate Graph "))],8,Gt),_.value?b("",!0):(s(),n("p",Ct,"Please select an LLM Model first."))])])):b("",!0),f.value.nodes>0||x.value?(s(),_e(z(J),{key:1,ref_key:"graphViewer",ref:L,nodes:C.value.nodes,edges:C.value.edges,"is-loading":x.value,onNodeSelect:$,onEdgeSelect:Y,onDeselect:H},null,8,["nodes","edges","is-loading"])):b("",!0)])]))}};export{Et as default};
frontend/dist/ui_assets/DataStoresView-B3zCWjpu.css+1 −0 added@@ -0,0 +1 @@ +.current-search-highlight{background-color:#ff9632!important;color:#000!important;border-radius:3px;box-shadow:0 0 5px #ff9632}.tab-button{border-bottom-width:2px;padding:1rem .25rem;font-size:.875rem;line-height:1.25rem;font-weight:500}.tab-button.active{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity))}.tab-button.active:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity))}.tab-button.inactive{border-color:transparent;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.tab-button.inactive:hover{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.tab-button.inactive:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.tab-button.inactive:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity));--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}
frontend/dist/ui_assets/DataStoresView-C6r61Dty.css+0 −1 removed@@ -1 +0,0 @@ -[data-v-581152e6] .vis-network{outline:none}.current-search-highlight{background-color:#ff9632!important;color:#000!important;border-radius:3px;box-shadow:0 0 5px #ff9632}.tab-button{border-bottom-width:2px;padding:1rem .25rem;font-size:.875rem;line-height:1.25rem;font-weight:500}.tab-button.active{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity))}.tab-button.active:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity))}.tab-button.inactive{border-color:transparent;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.tab-button.inactive:hover{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.tab-button.inactive:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.tab-button.inactive:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity));--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}
frontend/dist/ui_assets/DataStoresView-CcFtOw-Y.js+11 −0 added@@ -0,0 +1,11 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["ui_assets/DataStoreGraphManager-BRYOMT4c.js","ui_assets/index-BBRgbnZQ.js","ui_assets/index-BtkqZe_k.css","ui_assets/IconPlayCircle-D2gooLkD.js"])))=>i.map(i=>d[i]); +import{q as ct,d as n,l as s,e as t,P as mt,K as vt,Q as pt,u as ft,R as $e,s as u,c as O,o as gt,w as ie,V as yt,n as S,g as he,k as bt,f as g,h as c,H as ue,z as y,L as z,j as Z,F as T,i as U,t as i,X as qe,m as k,J as ht,c8 as xt,c9 as kt,an as P,cl as Le,U as wt,a1 as _t,ah as Pe,p as B,Z as St,ar as Ke,ap as Ve,at as Ct,B as Dt,$ as zt,co as $t,A as Vt,am as Mt,y as Tt,a0 as Ft,E as At,D as It}from"./index-BBRgbnZQ.js";import{u as Ut}from"./admin-CwLQr1mG.js";import{P as jt}from"./PageViewLayout-CieE8QU1.js";import{_ as Me}from"./JsonRenderer-VjVGwdYN.js";import{_ as Nt}from"./GenericModal-eXiOHk6I.js";import{I as Et}from"./IconGlobeAlt-DJc8Wsna.js";/* empty css */const Rt={},qt={xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor"};function Lt(Oe,de){return s(),n("svg",qt,de[0]||(de[0]=[t("path",{d:"M15 8a3 3 0 10-2.977-2.63l-4.94 2.47a3 3 0 100 4.319l4.94 2.47a3 3 0 10.895-1.789l-4.94-2.47a3.027 3.027 0 000-.74l4.94-2.47C13.456 7.68 14.19 8 15 8z"},null,-1)]))}const Pt=ct(Rt,[["render",Lt]]),Kt={class:"space-y-1 mt-2"},Ot=["onClick"],Bt={class:"truncate"},Gt={class:"space-y-1 mt-2"},Qt=["onClick"],Ht={class:"truncate"},Jt={class:"relative h-full w-full"},Wt={key:0,class:"p-4 sm:p-6 bg-white dark:bg-gray-800 rounded-lg shadow-sm h-full overflow-y-auto"},Yt={key:0,class:"grid grid-cols-1 md:grid-cols-2 gap-6"},Xt=["label"],Zt=["value"],el={key:0,class:"text-xs text-red-500 mt-1"},tl={key:1,class:"p-4 border dark:border-gray-700 rounded-lg space-y-4"},ll={class:"font-medium text-lg"},al={class:"text-sm text-gray-500"},sl={key:0,class:"space-y-4"},nl={key:0},ol=["for"],rl={key:0,class:"text-red-500"},il={class:"relative mt-1"},ul=["type","onUpdate:modelValue","placeholder"],dl=["onClick","title"],cl={class:"flex justify-end gap-3"},ml=["disabled"],vl={key:1,class:"h-full flex items-center justify-center bg-white dark:bg-gray-800 rounded-lg shadow-sm"},pl={class:"text-center"},fl={key:2,class:"text-center py-20 bg-white dark:bg-gray-800 rounded-lg shadow-sm"},gl={key:3,class:"bg-white dark:bg-gray-800 rounded-lg shadow-md h-full overflow-hidden flex flex-col"},yl={class:"p-6 border-b border-gray-200 dark:border-gray-700 flex justify-between items-start flex-wrap gap-4"},bl={class:"text-2xl font-bold text-gray-900 dark:text-white"},hl={class:"text-sm text-gray-500 dark:text-gray-400 mt-1"},xl={class:"flex items-center text-xs text-gray-500 dark:text-gray-400 mt-2"},kl={class:"mt-2 text-xs font-mono p-2 bg-gray-100 dark:bg-gray-700/50 rounded-md"},wl={key:0,class:"mt-1"},_l={class:"flex items-center space-x-3 flex-shrink-0"},Sl={class:"border-b border-gray-200 dark:border-gray-700 px-6"},Cl={class:"-mb-px flex space-x-6","aria-label":"Tabs"},Dl={class:"p-6 flex-grow overflow-y-auto space-y-8"},zl={key:0,class:"bg-gray-50 dark:bg-gray-700/50 rounded-lg p-6 space-y-4"},$l={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Vl={class:"relative flex items-start pt-7"},Ml={class:"flex h-6 items-center"},Tl={class:"grid grid-cols-1 lg:grid-cols-2 gap-6 mt-4"},Fl={class:"flex justify-center gap-2 flex-wrap"},Al={class:"border rounded-lg p-6 bg-white dark:bg-gray-800 dark:border-gray-600 flex flex-col min-h-[180px]"},Il={class:"text-sm font-semibold mb-3 flex items-center gap-2"},Ul={class:"space-y-3 flex-grow"},jl={class:"flex items-center gap-4"},Nl={class:"flex-grow"},El={class:"self-end"},Rl=["disabled"],ql={key:0},Ll={key:0,class:"mt-4"},Pl={class:"flex items-center gap-4 mt-1"},Kl={class:"flex items-center"},Ol={class:"flex items-center"},Bl={key:1,class:"mt-4"},Gl={class:"text-sm font-medium mb-2"},Ql={class:"list-disc list-inside text-sm space-y-1 max-h-40 overflow-y-auto mb-4 p-2 bg-gray-100 dark:bg-gray-800 rounded-md"},Hl={class:"truncate"},Jl=["onClick"],Wl={key:2,class:"space-y-4 mt-4 max-h-96 overflow-y-auto"},Yl={class:"flex justify-between items-start"},Xl={class:"font-semibold text-sm truncate"},Zl=["onClick"],ea=["onUpdate:modelValue"],ta={key:3,class:"mt-4"},la={class:"text-sm font-medium mb-2"},aa={class:"space-y-1 max-h-40 overflow-y-auto"},sa={class:"truncate"},na=["onClick"],oa={key:1,class:"mt-4 text-center text-sm text-gray-500 italic p-4 border-2 border-dashed rounded-lg dark:border-gray-600"},ra={class:"flex justify-end items-center mt-4"},ia=["disabled"],ua={key:1,class:"p-4 bg-blue-50 dark:bg-blue-900/20 rounded-lg border border-blue-200 dark:border-blue-700 text-sm"},da={key:2,class:"p-4 bg-green-50 dark:bg-green-900/20 rounded-lg border border-green-200 dark:border-green-700 text-sm"},ca={class:"text-xl font-semibold mb-4"},ma={key:0,class:"flex items-center justify-between bg-gray-50 dark:bg-gray-800/50 p-2 rounded-md mb-2"},va={class:"flex items-center"},pa=["checked","indeterminate"],fa=["disabled"],ga={key:1,class:"text-center py-10"},ya={key:2,class:"text-center py-10 bg-gray-50 dark:bg-gray-800/50 rounded-lg"},ba={key:3,class:"divide-y divide-gray-200 dark:divide-gray-700"},ha=["onChange","checked"],xa={class:"flex-grow min-w-0"},ka={class:"flex items-center gap-2"},wa=["onClick"],_a={key:0,class:"mt-2 text-xs"},Sa={class:"mt-1 p-2 bg-gray-100 dark:bg-gray-700/50 rounded"},Ca={key:0,class:"p-6 flex-grow overflow-y-auto flex flex-col"},Da={class:"flex-shrink-0 space-y-4"},za={class:"grid grid-cols-1 md:grid-cols-3 gap-4"},$a={class:"self-end"},Va=["disabled"],Ma={class:"flex-grow min-h-0 mt-6 border-t dark:border-gray-700 pt-6"},Ta={class:"flex justify-between items-center mb-4"},Fa={class:"text-lg font-semibold"},Aa={key:0,class:"flex items-center gap-2"},Ia={class:"text-sm text-gray-500 font-mono"},Ua={key:0,class:"text-center p-6 text-gray-500"},ja={key:1,class:"p-4 bg-red-50 dark:bg-red-900/20 text-red-700 dark:text-red-300 rounded-md"},Na={key:2,class:"text-center p-6 text-gray-500"},Ea={key:3,class:"text-center p-6 text-gray-500"},Ra={key:4,class:"space-y-4 overflow-y-auto custom-scrollbar h-full pb-10"},qa=["id"],La={class:"flex justify-between items-center text-xs text-gray-500 dark:text-gray-400 mb-2"},Pa=["title"],Ka=["title"],Oa=["innerHTML"],Ba={key:1,class:"p-6 flex-grow overflow-y-auto"},Ga={key:4,class:"absolute inset-0 z-50 flex flex-col items-center justify-center bg-white/80 dark:bg-gray-900/80 backdrop-blur-sm rounded-lg"},Qa={key:0,class:"space-y-4"},Ha={class:"bg-gray-50 dark:bg-gray-800 p-4 rounded-lg border border-gray-200 dark:border-gray-700 flex flex-col gap-2"},Ja={class:"flex justify-between items-start"},Wa={class:"text-lg font-bold text-gray-900 dark:text-white break-all"},Ya={key:0,class:"text-sm text-gray-500 dark:text-gray-400 font-mono mt-1"},Xa={class:"text-right text-xs text-gray-500 dark:text-gray-400 space-y-1 flex-shrink-0 ml-4"},Za={title:"Total characters"},es={class:"font-semibold"},ts={title:"Approximate word count"},ls={class:"font-semibold"},as={title:"Estimated tokens (char/4)"},ss={class:"font-semibold"},ns={key:0,class:"mt-2 pt-2 border-t border-gray-200 dark:border-gray-700"},os={class:"text-sm group"},rs={class:"mt-2 p-2 bg-white dark:bg-gray-900 rounded border dark:border-gray-700"},is={class:"relative group"},us={class:"absolute top-2 right-4 flex gap-2 opacity-0 group-hover:opacity-100 transition-opacity z-10"},ds={class:"p-4 border rounded-lg dark:border-gray-700 bg-white dark:bg-gray-900 overflow-auto max-h-[60vh] whitespace-pre-wrap font-mono text-sm leading-relaxed"},bs={__name:"DataStoresView",setup(Oe){const de=Vt({loader:()=>It(()=>import("./DataStoreGraphManager-BRYOMT4c.js"),__vite__mapDeps([0,1,2,3])),loadingComponent:null,delay:200,errorComponent:null,timeout:3e3}),C=mt(),w=vt(),xe=pt();Ut();const Be=ft(),Ge=bt(),{user:ce}=$e(Be),{ownedDataStores:Te,sharedDataStores:Fe,availableVectorizers:Qe}=$e(C),{tasks:He}=$e(xe),$=u(null),D=u(null),F=u("documents"),ee=u(!1),m=u({name:"",description:"",selectedVectorizerKey:null,config:{},chunk_size:1024,chunk_overlap:256}),te=u({}),j=u([]),me=u(!1),h=u([]),ve=u(null),pe=u(null),N=u(null),fe=u(null),E=u(null),le=u(!1),_=u(new Set),W=u(""),ge=u(0),ae=u(!1),se=u(!1),Y=u(""),ke=u(10),we=u(50),A=u([]),X=u(!1),ne=u(""),R=u(""),V=u([]),G=u(-1),b=u(null),Q=u(null),q=u("none"),H=u({}),_e=u(!0),J=u("per-file"),oe=u(`title: +subject: +authors: `),Ae=O(()=>j.value.length>0&&_.value.size===j.value.length),Je=O(()=>_.value.size>0&&!Ae.value),Se=O(()=>Qe.value),L=O(()=>{if(!m.value.selectedVectorizerKey)return null;const a=m.value.selectedVectorizerKey.split("/");if(a.length<2)return null;const e=a[0],r=a.slice(1).join("/"),l=Se.value.find(o=>o.alias===e);return l?{...l,selectedModelName:r}:null}),We=O(()=>[...Te.value,...Fe.value].sort((a,e)=>a.name.localeCompare(e.name))),Ie=O(()=>Te.value.sort((a,e)=>a.name.localeCompare(e.name))),d=O(()=>We.value.find(a=>a.id===$.value)),ye=O(()=>!!N.value||!!fe.value||!!E.value);function Ye(a){if(!a)return"";if(!R.value||V.value.length===0)return a;const e=R.value,r=new RegExp(`(${e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")})`,"gi");return a.replace(r,'<mark class="bg-yellow-200 dark:bg-yellow-700 rounded">$1</mark>')}gt(()=>{C.fetchDataStores(),C.fetchAvailableVectorizers(),xe.fetchTasks(),window.addEventListener("lollms:open-new-datastore",Ce)}),ie(()=>Ge.currentRoute.value.query.storeId,a=>{a&&re(a)},{immediate:!0}),yt(()=>{window.removeEventListener("lollms:open-new-datastore",Ce)}),ie(He,a=>{if(!d.value){N.value=null,fe.value=null,E.value=null;return}const e=d.value.name,r=M=>a.filter(v=>v.name.startsWith(M)&&v.name.includes(e)&&(v.status==="running"||v.status==="pending")).sort((v,f)=>new Date(f.created_at)-new Date(v.created_at))[0]||null,l=r("Add files to DataStore:"),o=r("Generate Graph for:")||r("Update Graph for:"),p=r("Scrape URL to DataStore:");(N.value&&!l&&(N.value.status==="running"||N.value.status==="pending")||E.value&&!p&&(E.value.status==="running"||E.value.status==="pending"))&&ze(d.value.id),N.value=l,fe.value=o,E.value=p},{deep:!0}),ie($,a=>{ee.value=!1,_.value.clear(),a?(F.value="documents",ze(a),Y.value="",A.value=[],ne.value=""):j.value=[]},{immediate:!0}),ie(L,a=>{m.value.config={},a&&(m.value.config={...a.vectorizer_config||{}},a.selectedModelName&&(m.value.config.model_name=a.selectedModelName))},{deep:!0}),ie(A,()=>{R.value="",V.value=[],G.value=-1});function re(a){$.value=a}function Ce(){var a,e;ee.value=!0,$.value=null,m.value={name:"",description:"",selectedVectorizerKey:null,config:{},chunk_size:((a=ce.value)==null?void 0:a.default_chunk_size)||1024,chunk_overlap:((e=ce.value)==null?void 0:e.default_chunk_overlap)||256}}async function Xe(){if(!m.value.name.trim()||!L.value){w.addNotification("Name and vectorizer are required.","warning");return}D.value="add_store";try{const a={name:m.value.name,description:m.value.description,vectorizer_name:L.value.vectorizer_name,vectorizer_config:m.value.config||{},chunk_size:m.value.chunk_size,chunk_overlap:m.value.chunk_overlap},e=await C.addDataStore(a);m.value={name:"",description:"",selectedVectorizerKey:null,config:{},chunk_size:1024,chunk_overlap:256},ee.value=!1,await C.fetchDataStores(),e&&e.id&&re(e.id)}finally{D.value=null}}function Ze(a){w.openModal("editDataStore",{store:a})}async function et(a){const{confirmed:e}=await w.showConfirmation({title:`Delete Data Store '${a.name}'?`,message:"This will permanently delete the data store and all its indexed documents.",confirmText:"Delete"});if(e){D.value=`delete_store_${a.id}`;try{await C.deleteDataStore(a.id),$.value===a.id&&($.value=null)}finally{D.value=null}}}function tt(a){w.openModal("shareDataStore",{store:a})}async function lt(a){a.preventDefault(),le.value=!1;const e=a.dataTransfer.items,r=[];function l(v){return new Promise((f,x)=>{v.readEntries(f,x)})}async function o(v){const f=v.createReader();let x=[],I;do I=await l(f),x=x.concat(I);while(I.length>0);return x}async function p(v){if(v.isFile)await new Promise((f,x)=>v.file(I=>{r.push(I),f()},x));else if(v.isDirectory){const f=await o(directoryEntry);for(const x of f)await p(x)}}const M=[];for(let v=0;v<e.length;v++){const f=e[v].webkitGetAsEntry();f&&M.push(p(f))}await Promise.all(M),r.length>0&&je(r)}function Ue(a){je(Array.from(a.target.files))}function je(a){const e=new Set(h.value.map(o=>o.name+o.size)),r=[],l={};for(const o of a){const p=o.name+o.size;e.has(p)||(r.push(o),l[o.name]=`title: +subject: +authors: `,e.add(p))}r.length>0&&(h.value=[...h.value,...r],H.value={...H.value,...l}),r.length<a.length&&w.addNotification(`${a.length-r.length} duplicate files skipped.`,"info"),ve.value&&(ve.value.value=""),pe.value&&(pe.value.value="")}function De(a){const e=h.value.splice(a,1);e.length>0&&delete H.value[e[0].name]}async function ze(a){me.value=!0;try{j.value=await C.fetchStoreFiles(a)}finally{me.value=!1}}async function at(){if(!d.value||h.value.length===0){w.addNotification("Please select files to upload.","warning");return}if(ye.value){w.addNotification("A task is already running for this Data Store.","warning");return}ae.value=!0;try{const a=new FormData;if(h.value.forEach(e=>a.append("files",e)),a.append("metadata_option",q.value),a.append("vectorize_with_metadata",_e.value),q.value==="manual"){let e={};const r=l=>{const o={};if(!l)return o;const p=l.split(` +`);for(const M of p){const v=M.split(":");if(v.length>=2){const f=v[0].trim(),x=v.slice(1).join(":").trim();f&&(["authors","tags","keywords"].includes(f.toLowerCase())?o[f]=x.split(",").map(I=>I.trim()).filter(Boolean):o[f]=x)}}return o};try{if(J.value==="all"){const l=oe.value.trim()?r(oe.value):{};for(const o of h.value)e[o.name]=l}else for(const l of h.value){const o=H.value[l.name]||"";e[l.name]=o.trim()?r(o):{}}a.append("manual_metadata_json",JSON.stringify(e))}catch(l){w.addNotification("Invalid metadata format. Please use 'key: value' pairs, with one entry per line.","error"),console.error("Metadata parsing error:",l);return}}await C.uploadFilesToStore({storeId:d.value.id,formData:a}),h.value=[],H.value={},oe.value=`title: +subject: +authors: `}finally{ae.value=!1}}async function st(){if(!W.value.trim()){w.addNotification("Please enter a URL.","warning");return}if(ye.value){w.addNotification("A task is already running for this Data Store.","warning");return}se.value=!0;try{const e=(await At.post(`/api/store/${d.value.id}/scrape-url`,{url:W.value,depth:ge.value})).data;w.addNotification(`Scrape task '${e.name}' started.`,"info"),xe.addTask(e),W.value="",ge.value=0}catch(a){console.error("Scrape failed:",a)}finally{se.value=!1}}function be(a){return a&&["owner","read_write","revectorize"].includes(a.permission_level)}function nt(a){_.value.has(a)?_.value.delete(a):_.value.add(a)}function ot(a){a.target.checked?_.value=new Set(j.value.map(e=>e.filename)):_.value.clear()}async function rt(){if(_.value.size===0)return;const{confirmed:a}=await w.showConfirmation({title:`Delete ${_.value.size} file(s)?`,message:"This will permanently remove the selected documents and their data from the data store.",confirmText:"Delete"});if(a){D.value="delete_selected_files";try{const e=Array.from(_.value);await C.deleteFilesFromStore({storeId:d.value.id,filenames:e}),await ze(d.value.id),_.value.clear()}finally{D.value=null}}}async function it(){if(!(!Y.value.trim()||!d.value)){X.value=!0,ne.value="",A.value=[];try{const a=await C.queryDataStore({storeId:d.value.id,query:Y.value,top_k:ke.value,min_similarity_percent:we.value});A.value=a}catch{ne.value="An error occurred during the query."}finally{X.value=!1}}}function Ne(){if(!R.value){V.value=[],G.value=-1,document.querySelectorAll(".current-search-highlight").forEach(r=>r.classList.remove("current-search-highlight"));return}const a=R.value,e=[];A.value.forEach((r,l)=>{const o=r.chunk_text||"",p=new RegExp(a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi");let M;for(;(M=p.exec(o))!==null;)e.push({chunkIndex:l,matchIndexInText:M.index})}),V.value=e,e.length>0?(G.value=0,Re(e[0])):(G.value=-1,w.addNotification("No matches found in results.","info"),document.querySelectorAll(".current-search-highlight").forEach(r=>r.classList.remove("current-search-highlight")))}function Ee(a){if(V.value.length===0)return;let e=G.value+a;e<0&&(e=V.value.length-1),e>=V.value.length&&(e=0),G.value=e,Re(V.value[e])}function Re(a){var r;const e=document.getElementById(`chunk-${a.chunkIndex}`);if(e){document.querySelectorAll(".current-search-highlight").forEach(o=>o.classList.remove("current-search-highlight"));const l=Array.from(e.querySelectorAll("mark"));if(l.length>0){let o=0;const p=((r=A.value[a.chunkIndex])==null?void 0:r.chunk_text)||"",M=R.value,v=new RegExp(M.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi");let f=-1;const x=p.split(v);let I=0;for(let K=1;K<x.length;K+=2){if(I===a.matchIndexInText){f=o;break}I+=(x[K-1]?x[K-1].length:0)+x[K].length,o++}if(f!==-1&&l[f]){const K=l[f];K.classList.add("current-search-highlight"),K.scrollIntoView({behavior:"smooth",block:"center"})}else e.scrollIntoView({behavior:"smooth",block:"center"})}else e.scrollIntoView({behavior:"smooth",block:"center"})}}async function ut(a){if(!Q.value){Q.value=a.filename;try{const e=await C.fetchFileContent(d.value.id,a.filename);b.value={filename:a.filename,metadata:a.metadata,content:e},w.openModal("fileContent")}catch{}finally{Q.value=null}}}function dt(){b.value&&b.value.content&&(navigator.clipboard.writeText(b.value.content),w.addNotification("Content copied to clipboard","success"))}return(a,e)=>(s(),S(jt,{title:"Data Studio","title-icon":Le},{sidebar:he(()=>[t("button",{onClick:Ce,class:"w-full flex items-center space-x-3 text-left px-3 py-2.5 rounded-lg text-sm font-medium text-blue-700 dark:text-blue-300 hover:bg-blue-50 dark:hover:bg-blue-900/50 transition-colors"},[g(Tt,{class:"w-5 h-5 flex-shrink-0"}),e[31]||(e[31]=t("span",null,"New Data Store",-1))]),t("button",{onClick:e[0]||(e[0]=r=>Z(C).fetchDataStores()),class:"w-full flex items-center space-x-3 text-left px-3 py-2.5 rounded-lg text-sm font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors mt-2"},[g(Ft,{class:"w-5 h-5 flex-shrink-0"}),e[32]||(e[32]=t("span",null,"Refresh All Stores",-1))]),e[34]||(e[34]=t("h3",{class:"text-sm font-semibold uppercase text-gray-500 dark:text-gray-400 mt-4 px-3"},"Your Stores",-1)),t("ul",Kt,[(s(!0),n(T,null,U(Ie.value,r=>(s(),n("li",{key:r.id},[t("button",{onClick:l=>re(r.id),class:B(["w-full flex items-center justify-between text-left px-3 py-2 rounded-lg text-sm transition-colors group",{"bg-blue-100 dark:bg-blue-900/50 text-blue-700 dark:text-blue-300":$.value===r.id,"text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700":$.value!==r.id}])},[t("span",Bt,i(r.name),1),e[33]||(e[33]=t("span",{class:"ml-2 text-xs px-2 py-0.5 rounded-full bg-blue-50 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300"},"Owner",-1))],10,Ot)]))),128))]),e[35]||(e[35]=t("h3",{class:"text-sm font-semibold uppercase text-gray-500 dark:text-gray-400 mt-4 px-3"},"Shared With You",-1)),t("ul",Gt,[(s(!0),n(T,null,U(Z(Fe),r=>(s(),n("li",{key:r.id},[t("button",{onClick:l=>re(r.id),class:B(["w-full flex items-center justify-between text-left px-3 py-2 rounded-lg text-sm transition-colors group",{"bg-blue-100 dark:bg-blue-900/50 text-blue-700 dark:text-blue-300":$.value===r.id,"text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700":$.value!==r.id}])},[t("span",Ht,i(r.name),1),t("span",{class:B(["ml-2 text-xs px-2 py-0.5 rounded-full",{"bg-green-100 text-green-800 dark:bg-green-900/50 dark:text-green-300":r.permission_level==="revectorize","bg-purple-100 text-purple-800 dark:bg-purple-900/50 dark:text-purple-300":r.permission_level==="read_write","bg-yellow-100 text-yellow-800 dark:bg-yellow-900/50 dark:text-yellow-300":r.permission_level==="read_query"}])},i(r.permission_level.replace("_"," ")),3)],10,Qt)]))),128))])]),main:he(()=>{var r;return[t("div",Jt,[ee.value?(s(),n("div",Wt,[e[44]||(e[44]=t("h2",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"Create New Data Store",-1)),e[45]||(e[45]=t("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},"A Data Store turns your documents into a queryable knowledge base.",-1)),t("form",{onSubmit:ue(Xe,["prevent"]),class:"mt-6 space-y-6"},[t("div",null,[e[36]||(e[36]=t("label",{for:"new-ds-name",class:"block text-sm font-medium"},"Name",-1)),y(t("input",{id:"new-ds-name","onUpdate:modelValue":e[1]||(e[1]=l=>m.value.name=l),type:"text",class:"input-field mt-1",required:""},null,512),[[z,m.value.name]])]),t("div",null,[e[37]||(e[37]=t("label",{for:"new-ds-desc",class:"block text-sm font-medium"},"Description",-1)),y(t("textarea",{id:"new-ds-desc","onUpdate:modelValue":e[2]||(e[2]=l=>m.value.description=l),rows:"2",class:"input-field mt-1"},null,512),[[z,m.value.description]])]),Z(ce)&&Z(ce).allow_user_chunking_config?(s(),n("div",Yt,[t("div",null,[e[38]||(e[38]=t("label",{for:"new-ds-chunk-size",class:"block text-sm font-medium"},"Chunk Size",-1)),y(t("input",{id:"new-ds-chunk-size","onUpdate:modelValue":e[3]||(e[3]=l=>m.value.chunk_size=l),type:"number",min:"1",class:"input-field mt-1"},null,512),[[z,m.value.chunk_size,void 0,{number:!0}]]),e[39]||(e[39]=t("p",{class:"text-xs text-gray-500 mt-1"},"Number of characters per data chunk.",-1))]),t("div",null,[e[40]||(e[40]=t("label",{for:"new-ds-chunk-overlap",class:"block text-sm font-medium"},"Chunk Overlap",-1)),y(t("input",{id:"new-ds-chunk-overlap","onUpdate:modelValue":e[4]||(e[4]=l=>m.value.chunk_overlap=l),type:"number",min:"0",class:"input-field mt-1"},null,512),[[z,m.value.chunk_overlap,void 0,{number:!0}]]),e[41]||(e[41]=t("p",{class:"text-xs text-gray-500 mt-1"},"Number of overlapping characters between chunks.",-1))])])):c("",!0),t("div",null,[e[43]||(e[43]=t("label",{for:"new-ds-vectorizer",class:"block text-sm font-medium"},"Vectorizer",-1)),y(t("select",{id:"new-ds-vectorizer","onUpdate:modelValue":e[5]||(e[5]=l=>m.value.selectedVectorizerKey=l),class:"input-field mt-1"},[e[42]||(e[42]=t("option",{value:null,disabled:""},"-- Select a Vectorizer Model --",-1)),(s(!0),n(T,null,U(Se.value,l=>(s(),n("optgroup",{key:l.id,label:l.alias||l.vectorizer_name},[(s(!0),n(T,null,U(l.models,o=>(s(),n("option",{key:`${l.id}-${o.value}`,value:`${l.alias}/${o.value}`},i(o.name),9,Zt))),128))],8,Xt))),128))],512),[[qe,m.value.selectedVectorizerKey]]),Se.value.length===0?(s(),n("p",el," No active RAG bindings found. Please configure them in Settings. ")):c("",!0)]),L.value?(s(),n("div",tl,[t("h4",ll,i(L.value.title||L.value.name),1),t("p",al,i(L.value.description),1),((r=L.value.input_parameters)==null?void 0:r.length)>0?(s(),n("div",sl,[(s(!0),n(T,null,U(L.value.input_parameters,l=>(s(),n("div",{key:l.name},[l.name!=="model"?(s(),n("div",nl,[t("label",{for:`param-${l.name}`,class:"block text-sm font-medium"},[k(i(l.name)+" ",1),l.mandatory?(s(),n("span",rl,"*")):c("",!0)],8,ol),t("div",il,[y(t("input",{type:(l.name.includes("key")||l.name.includes("token"))&&!te.value[l.name]?"password":"text","onUpdate:modelValue":o=>m.value.config[l.name]=o,class:"input-field pr-10",placeholder:l.description},null,8,ul),[[ht,m.value.config[l.name]]]),l.name.includes("key")||l.name.includes("token")?(s(),n("button",{key:0,type:"button",onClick:o=>te.value[l.name]=!te.value[l.name],class:"absolute inset-y-0 right-0 px-3 flex items-center text-gray-500 hover:text-gray-700 dark:hover:text-gray-300",title:te.value[l.name]?"Hide":"Show"},[te.value[l.name]?(s(),S(xt,{key:0,class:"w-5 h-5"})):(s(),S(kt,{key:1,class:"w-5 h-5"}))],8,dl)):c("",!0)])])):c("",!0)]))),128))])):c("",!0)])):c("",!0),t("div",cl,[t("button",{type:"button",onClick:e[6]||(e[6]=l=>{var o;ee.value=!1,re((o=Ie.value[0])==null?void 0:o.id)}),class:"btn btn-secondary"},"Cancel"),t("button",{type:"submit",class:"btn btn-primary",disabled:D.value==="add_store"},[D.value==="add_store"?(s(),S(P,{key:0,class:"w-5 h-5 mr-2 animate-spin"})):c("",!0),k(" "+i(D.value==="add_store"?"Creating...":"Create Data Store"),1)],8,ml)])],32)])):$.value?d.value?(s(),n("div",gl,[t("div",yl,[t("div",null,[t("h2",bl,i(d.value.name),1),t("p",hl,i(d.value.description||"No description provided."),1),t("div",xl,[e[49]||(e[49]=t("span",{class:"mr-1"},"Owner:",-1)),g(wt,{username:d.value.owner_username,"size-class":"h-4 w-4",class:"mr-1"},null,8,["username"]),t("span",null,i(d.value.owner_username),1)]),t("div",kl,[t("p",null,[e[50]||(e[50]=t("span",{class:"font-semibold"},"Vectorizer:",-1)),k(" "+i(d.value.vectorizer_name),1)]),t("p",null,[e[51]||(e[51]=t("span",{class:"font-semibold"},"Chunking:",-1)),k(" "+i(d.value.chunk_size)+" / "+i(d.value.chunk_overlap),1)]),Object.keys(d.value.vectorizer_config).length>0?(s(),n("details",wl,[e[52]||(e[52]=t("summary",{class:"cursor-pointer text-gray-500"},"View Config",-1)),g(Me,{json:d.value.vectorizer_config,class:"mt-1 text-xs"},null,8,["json"])])):c("",!0)])]),t("div",_l,[d.value.permission_level==="owner"?(s(),n("button",{key:0,onClick:e[7]||(e[7]=l=>tt(d.value)),class:"btn btn-secondary btn-sm"},[g(Pt,{class:"w-4 h-4 mr-2"}),e[53]||(e[53]=k(" Share"))])):c("",!0),be(d.value)?(s(),n("button",{key:1,onClick:e[8]||(e[8]=l=>Ze(d.value)),class:"btn btn-secondary btn-sm"},[g(_t,{class:"w-4 h-4 mr-2"}),e[54]||(e[54]=k(" Edit"))])):c("",!0),d.value.permission_level==="owner"?(s(),n("button",{key:2,onClick:e[9]||(e[9]=l=>et(d.value)),class:"btn btn-danger btn-sm"},[D.value===`delete_store_${d.value.id}`?(s(),S(P,{key:0,class:"w-4 h-4 mr-2 animate-spin"})):(s(),S(Pe,{key:1,class:"w-4 h-4 mr-2"})),e[55]||(e[55]=k(" Delete "))])):c("",!0)])]),t("div",Sl,[t("nav",Cl,[t("button",{onClick:e[10]||(e[10]=l=>F.value="documents"),class:B(["tab-button",F.value==="documents"?"active":"inactive"])},"Documents",2),t("button",{onClick:e[11]||(e[11]=l=>F.value="query"),class:B(["tab-button",F.value==="query"?"active":"inactive"])},"Query",2),t("button",{onClick:e[12]||(e[12]=l=>F.value="graph"),class:B(["tab-button",F.value==="graph"?"active":"inactive"])},"Graph",2)])]),y(t("div",Dl,[be(d.value)?(s(),n("div",zl,[e[70]||(e[70]=t("h3",{class:"text-xl font-semibold text-gray-900 dark:text-white"},"Add Documents",-1)),t("div",$l,[t("div",null,[e[57]||(e[57]=t("label",{for:"metadata-option",class:"block text-sm font-medium"},"Metadata Handling",-1)),y(t("select",{id:"metadata-option","onUpdate:modelValue":e[13]||(e[13]=l=>q.value=l),class:"input-field mt-1"},e[56]||(e[56]=[t("option",{value:"none"},"None",-1),t("option",{value:"manual"},"Manual Entry",-1),t("option",{value:"auto-generate"},"Auto-generate for each file",-1),t("option",{value:"rewrite-chunk"},"Rewrite full content with metadata for each chunk",-1)]),512),[[qe,q.value]]),e[58]||(e[58]=t("p",{class:"text-xs text-gray-500 mt-1"},"Choose how to handle metadata for uploaded files.",-1))]),t("div",Vl,[t("div",Ml,[y(t("input",{id:"vectorize-with-metadata","onUpdate:modelValue":e[14]||(e[14]=l=>_e.value=l),type:"checkbox",class:"h-4 w-4 rounded border-gray-300 dark:border-gray-600 text-blue-600 focus:ring-blue-600"},null,512),[[St,_e.value]])]),e[59]||(e[59]=t("div",{class:"ml-3 text-sm leading-6"},[t("label",{for:"vectorize-with-metadata",class:"font-medium text-gray-900 dark:text-gray-100"},"Vectorize with Metadata"),t("p",{class:"text-gray-500 dark:text-gray-400"},"Include document metadata in the vectorization process for better context.")],-1))])]),t("div",Tl,[t("div",{onDragover:e[17]||(e[17]=ue(l=>le.value=!0,["prevent"])),onDragleave:e[18]||(e[18]=ue(l=>le.value=!1,["prevent"])),onDrop:ue(lt,["prevent"]),class:B(["border-2 border-dashed rounded-lg p-6 text-center transition-colors flex flex-col justify-center min-h-[180px]",{"border-blue-500 bg-blue-50 dark:bg-blue-900/20":le.value,"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500":!le.value}])},[t("input",{type:"file",multiple:"",ref_key:"fileInputRef",ref:ve,onChange:Ue,class:"hidden",accept:".pdf,.docx,.pptx,.xlsx,.msg,.vcf,.txt,.md,.py,.js,.ts,.html,.css,.c,.cpp,.h,.hpp,.cs,.java,.json,.xml,.sh,.vhd,.v,.rb,.php,.go,.rs,.swift,.kt,.yaml,.yml,.sql,.log,.csv"},null,544),t("input",{type:"file",ref_key:"folderInputRef",ref:pe,onChange:Ue,class:"hidden",webkitdirectory:"",directory:"",multiple:""},null,544),e[60]||(e[60]=t("p",{class:"text-gray-600 dark:text-gray-300 font-medium mb-4"},"Drag & drop files here",-1)),t("div",Fl,[t("button",{type:"button",onClick:e[15]||(e[15]=l=>ve.value.click()),class:"btn btn-secondary btn-sm"},"Select File(s)"),t("button",{type:"button",onClick:e[16]||(e[16]=l=>pe.value.click()),class:"btn btn-secondary btn-sm"},"Select Folder")])],34),t("div",Al,[t("h4",Il,[g(Et,{class:"w-4 h-4"}),e[61]||(e[61]=k(" Add from URL "))]),t("div",Ul,[y(t("input",{type:"text","onUpdate:modelValue":e[19]||(e[19]=l=>W.value=l),placeholder:"https://example.com/docs",class:"input-field text-sm"},null,512),[[z,W.value]]),t("div",jl,[t("div",Nl,[e[62]||(e[62]=t("label",{class:"text-xs text-gray-500 uppercase font-bold"},"Depth",-1)),y(t("input",{type:"number","onUpdate:modelValue":e[20]||(e[20]=l=>ge.value=l),min:"0",max:"5",class:"input-field text-sm mt-1"},null,512),[[z,ge.value,void 0,{number:!0}]])]),t("div",El,[t("button",{onClick:st,class:"btn btn-primary btn-sm w-full",disabled:se.value||ye.value||!W.value},[se.value?(s(),S(P,{key:0,class:"w-4 h-4 mr-1 animate-spin"})):c("",!0),k(" "+i(se.value?"Scraping...":"Scrape & Add"),1)],8,Rl)])]),e[63]||(e[63]=t("p",{class:"text-xs text-gray-500"},"Depth 0 = single page. Depth > 0 follows internal links.",-1))])])]),h.value.length>0?(s(),n("div",ql,[q.value==="manual"?(s(),n("div",Ll,[e[66]||(e[66]=t("label",{class:"block text-sm font-medium"},"Manual Metadata Mode",-1)),t("div",Pl,[t("label",Kl,[y(t("input",{type:"radio","onUpdate:modelValue":e[21]||(e[21]=l=>J.value=l),value:"per-file",class:"radio-input"},null,512),[[Ke,J.value]]),e[64]||(e[64]=t("span",{class:"ml-2"},"Per File",-1))]),t("label",Ol,[y(t("input",{type:"radio","onUpdate:modelValue":e[22]||(e[22]=l=>J.value=l),value:"all",class:"radio-input"},null,512),[[Ke,J.value]]),e[65]||(e[65]=t("span",{class:"ml-2"},"For All Files",-1))])])])):c("",!0),q.value==="manual"&&J.value==="all"?(s(),n("div",Bl,[t("h4",Gl,"Selected Files ("+i(h.value.length)+")",1),t("ul",Ql,[(s(!0),n(T,null,U(h.value,(l,o)=>(s(),n("li",{key:o,class:"flex justify-between items-center"},[t("span",Hl,i(l.name),1),t("button",{onClick:p=>De(o),class:"text-red-500 hover:text-red-700 ml-2",title:"Remove"},[g(Ve,{class:"w-4 h-4"})],8,Jl)]))),128))]),e[67]||(e[67]=t("label",{class:"block text-sm font-medium"},"Metadata for all files (Key: Value format)",-1)),y(t("textarea",{"onUpdate:modelValue":e[23]||(e[23]=l=>oe.value=l),rows:"4",class:"input-field mt-1 font-mono text-xs",placeholder:`title: My Document +subject: AI Research +authors: John Doe, Jane Smith`},null,512),[[z,oe.value]])])):q.value==="manual"&&J.value==="per-file"?(s(),n("div",Wl,[e[69]||(e[69]=t("h4",{class:"text-sm font-medium"},"Enter Metadata for Each File:",-1)),(s(!0),n(T,null,U(h.value,(l,o)=>(s(),n("div",{key:o,class:"p-3 border rounded-lg dark:border-gray-600 space-y-3"},[t("div",Yl,[t("p",Xl,i(l.name),1),t("button",{onClick:p=>De(o),class:"text-red-500 hover:text-red-700",title:"Remove"},[g(Ve,{class:"w-5 h-5"})],8,Zl)]),t("div",null,[e[68]||(e[68]=t("label",{class:"text-xs font-medium"},"Metadata (Key: Value format)",-1)),y(t("textarea",{"onUpdate:modelValue":p=>H.value[l.name]=p,rows:"4",class:"input-field-sm w-full mt-1 font-mono text-xs",placeholder:"title: ..."},null,8,ea),[[z,H.value[l.name]]])])]))),128))])):q.value!=="manual"?(s(),n("div",ta,[t("h4",la,"Selected for Upload ("+i(h.value.length)+")",1),t("ul",aa,[(s(!0),n(T,null,U(h.value,(l,o)=>(s(),n("li",{key:o,class:"flex justify-between items-center bg-gray-100 dark:bg-gray-800 p-2 rounded text-sm"},[t("span",sa,i(l.name)+" ("+i((l.size/1024/1024).toFixed(2))+" MB)",1),t("button",{onClick:p=>De(o),class:"text-red-500 hover:text-red-700 ml-2",title:"Remove"},[g(Ve,{class:"w-4 h-4"})],8,na)]))),128))])])):c("",!0)])):q.value==="manual"?(s(),n("div",oa," Select files to enter their metadata manually. ")):c("",!0),t("div",ra,[t("button",{onClick:at,class:"btn btn-primary",disabled:ye.value||h.value.length===0||ae.value},[ae.value?(s(),S(P,{key:0,class:"w-5 h-5 mr-2 animate-spin"})):(s(),S(Ct,{key:1,class:"w-5 h-5 mr-2"})),k(" "+i(ae.value?"Uploading...":`Add ${h.value.length} File(s)`),1)],8,ia)])])):c("",!0),N.value?(s(),n("div",ua,[e[71]||(e[71]=t("span",{class:"font-semibold text-blue-800 dark:text-blue-300"},"File Uploading:",-1)),k(" "+i(N.value.progress)+"% - "+i(N.value.description),1)])):c("",!0),E.value?(s(),n("div",da,[e[72]||(e[72]=t("span",{class:"font-semibold text-green-800 dark:text-green-300"},"Scraping:",-1)),k(" "+i(E.value.progress)+"% - "+i(E.value.description),1)])):c("",!0),t("div",null,[t("h3",ca,"Indexed Documents ("+i(j.value.length)+")",1),!me.value&&j.value.length>0&&be(d.value)?(s(),n("div",ma,[t("div",va,[t("input",{type:"checkbox",onChange:ot,checked:Ae.value,indeterminate:Je.value,id:"select-all-files-checkbox",class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500"},null,40,pa),e[73]||(e[73]=t("label",{for:"select-all-files-checkbox",class:"ml-2 text-sm select-none cursor-pointer"},"Select All",-1))]),t("button",{onClick:rt,class:"btn btn-danger btn-sm",disabled:_.value.size===0||D.value==="delete_selected_files"},[D.value==="delete_selected_files"?(s(),S(P,{key:0,class:"w-4 h-4 mr-2 animate-spin"})):(s(),S(Pe,{key:1,class:"w-4 h-4 mr-2"})),k(" Delete Selected ("+i(_.value.size)+") ",1)],8,fa)])):c("",!0),me.value?(s(),n("div",ga,e[74]||(e[74]=[t("p",null,"Loading documents...",-1)]))):j.value.length===0?(s(),n("div",ya,e[75]||(e[75]=[t("p",null,"No documents indexed.",-1)]))):(s(),n("ul",ba,[(s(!0),n(T,null,U(j.value,l=>(s(),n("li",{key:l.filename,class:"py-3 flex items-center"},[be(d.value)?(s(),n("input",{key:0,type:"checkbox",onChange:o=>nt(l.filename),checked:_.value.has(l.filename),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 mr-4 flex-shrink-0"},null,40,ha)):c("",!0),t("div",xa,[t("div",ka,[t("span",{class:B(["text-sm font-medium truncate cursor-pointer hover:text-blue-600 dark:hover:text-blue-400 transition-colors",{"opacity-50 pointer-events-none":Q.value&&Q.value!==l.filename}]),onClick:o=>ut(l)},i(l.filename),11,wa),Q.value===l.filename?(s(),S(P,{key:0,class:"w-4 h-4 text-blue-500 animate-spin flex-shrink-0"})):c("",!0)]),l.metadata&&Object.keys(l.metadata).length>0?(s(),n("details",_a,[e[76]||(e[76]=t("summary",{class:"cursor-pointer text-gray-500 hover:text-gray-700 dark:hover:text-gray-300"},"View Metadata",-1)),t("div",Sa,[g(Me,{json:l.metadata},null,8,["json"])])])):c("",!0)])]))),128))]))])],512),[[Dt,F.value==="documents"]]),F.value==="query"?(s(),n("div",Ca,[t("div",Da,[e[80]||(e[80]=t("h3",{class:"text-xl font-semibold"},"Query Data Store",-1)),t("form",{onSubmit:ue(it,["prevent"]),class:"space-y-4"},[t("div",null,[e[77]||(e[77]=t("label",{for:"query-text",class:"block text-sm font-medium"},"Query Text",-1)),y(t("textarea",{id:"query-text","onUpdate:modelValue":e[24]||(e[24]=l=>Y.value=l),rows:"3",class:"input-field mt-1",placeholder:"Enter your question..."},null,512),[[z,Y.value]])]),t("div",za,[t("div",null,[e[78]||(e[78]=t("label",{for:"query-topk",class:"block text-sm font-medium"},"Top K",-1)),y(t("input",{id:"query-topk","onUpdate:modelValue":e[25]||(e[25]=l=>ke.value=l),type:"number",min:"1",class:"input-field mt-1"},null,512),[[z,ke.value,void 0,{number:!0}]])]),t("div",null,[e[79]||(e[79]=t("label",{for:"query-minsim",class:"block text-sm font-medium"},"Min Similarity %",-1)),y(t("input",{id:"query-minsim","onUpdate:modelValue":e[26]||(e[26]=l=>we.value=l),type:"number",min:"0",max:"100",step:"0.1",class:"input-field mt-1"},null,512),[[z,we.value,void 0,{number:!0}]])]),t("div",$a,[t("button",{type:"submit",class:"btn btn-primary w-full",disabled:X.value||!Y.value.trim()},[X.value?(s(),S(P,{key:0,class:"w-5 h-5 mr-2 animate-spin"})):c("",!0),k(" "+i(X.value?"Querying...":"Query"),1)],8,Va)])])],32)]),t("div",Ma,[t("div",Ta,[t("h4",Fa,"Results ("+i(A.value.length)+")",1),A.value.length>0?(s(),n("div",Aa,[y(t("input",{type:"text","onUpdate:modelValue":e[27]||(e[27]=l=>R.value=l),onKeyup:zt(Ne,["enter"]),placeholder:"Search in results...",class:"input-field !py-1.5 !text-sm"},null,544),[[z,R.value]]),t("button",{onClick:Ne,class:"btn btn-secondary btn-sm p-2"},[g($t,{class:"w-4 h-4"})]),V.value.length>0?(s(),n(T,{key:0},[t("button",{onClick:e[28]||(e[28]=l=>Ee(-1)),class:"btn btn-secondary btn-sm p-2",title:"Previous match"},"‹"),t("span",Ia,i(G.value+1)+" / "+i(V.value.length),1),t("button",{onClick:e[29]||(e[29]=l=>Ee(1)),class:"btn btn-secondary btn-sm p-2",title:"Next match"},"›")],64)):c("",!0)])):c("",!0)]),X.value?(s(),n("div",Ua,[g(P,{class:"w-8 h-8 mx-auto animate-spin"}),e[81]||(e[81]=t("p",{class:"mt-2"},"Fetching results...",-1))])):ne.value?(s(),n("div",ja,i(ne.value),1)):A.value.length===0?(s(),n("div",Na," No results to display. Run a query to see matching text chunks. ")):R.value&&V.value.length===0?(s(),n("div",Ea," No chunks match your search term. ")):(s(),n("div",Ra,[(s(!0),n(T,null,U(A.value,(l,o)=>(s(),n("div",{key:o,id:`chunk-${o}`,class:"p-4 border rounded-lg dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50"},[t("div",La,[t("span",{class:"font-mono truncate",title:l.file_path},".../"+i(l.file_path.split(/[/\\]/).pop()),9,Pa),t("span",{class:"font-semibold",title:`Similarity: ${l.similarity_percent}`},i(l.similarity_percent.toFixed(2))+"%",9,Ka)]),t("pre",{class:"whitespace-pre-wrap font-sans text-sm",innerHTML:Ye(l.chunk_text)},null,8,Oa)],8,qa))),128))]))])])):c("",!0),F.value==="graph"?(s(),n("div",Ba,[g(Z(de),{store:d.value,task:fe.value},null,8,["store","task"])])):c("",!0)])):(s(),n("div",fl,e[48]||(e[48]=[t("h3",{class:"text-xl font-semibold text-gray-700 dark:text-gray-200"},"Data Store Not Found",-1),t("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"},"The selected data store could not be loaded.",-1)]))):(s(),n("div",vl,[t("div",pl,[g(Le,{class:"mx-auto h-12 w-12 text-gray-400"}),e[46]||(e[46]=t("h3",{class:"mt-2 text-xl font-semibold text-gray-900 dark:text-white"},"Select a Data Store",-1)),e[47]||(e[47]=t("p",{class:"mt-1 text-sm text-gray-500"},"Choose a store from the sidebar or create a new one to begin.",-1))])])),Q.value?(s(),n("div",Ga,[g(P,{class:"w-12 h-12 text-blue-600 dark:text-blue-400 mb-4 animate-spin"}),e[82]||(e[82]=t("h3",{class:"text-xl font-bold text-gray-900 dark:text-white"},"Loading file content",-1)),e[83]||(e[83]=t("p",{class:"text-gray-600 dark:text-gray-300"},"Please stand by...",-1))])):c("",!0)]),g(Nt,{modalName:"fileContent",title:"Document Viewer",size:"4xl"},{body:he(()=>{var l,o,p;return[b.value?(s(),n("div",Qa,[t("div",Ha,[t("div",Ja,[t("div",null,[t("h3",Wa,i(((l=b.value.metadata)==null?void 0:l.title)||b.value.filename),1),(o=b.value.metadata)!=null&&o.title&&((p=b.value.metadata)==null?void 0:p.title)!==b.value.filename?(s(),n("p",Ya,i(b.value.filename),1)):c("",!0)]),t("div",Xa,[t("div",Za,[t("span",es,i(b.value.content.length.toLocaleString()),1),e[84]||(e[84]=k(" chars"))]),t("div",ts,[t("span",ls,i(b.value.content.split(/\s+/).length.toLocaleString()),1),e[85]||(e[85]=k(" words"))]),t("div",as,[t("span",ss,"~"+i(Math.ceil(b.value.content.length/4).toLocaleString()),1),e[86]||(e[86]=k(" tokens"))])])]),b.value.metadata&&Object.keys(b.value.metadata).length>0?(s(),n("div",ns,[t("details",os,[e[87]||(e[87]=t("summary",{class:"cursor-pointer text-blue-600 dark:text-blue-400 font-medium select-none"},"Show Metadata",-1)),t("div",rs,[g(Me,{json:b.value.metadata},null,8,["json"])])])])):c("",!0)]),t("div",is,[t("div",us,[t("button",{onClick:dt,class:"p-2 bg-white dark:bg-gray-800 border dark:border-gray-600 rounded-md shadow-sm hover:bg-gray-50 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300 transition-colors",title:"Copy Content"},[g(Mt,{class:"w-4 h-4"})])]),t("div",ds,i(b.value.content),1)])])):c("",!0)]}),footer:he(()=>[t("button",{onClick:e[30]||(e[30]=l=>Z(w).closeModal("fileContent")),class:"btn btn-primary"},"Close")]),_:1})]}),_:1}))}};export{bs as default};
frontend/dist/ui_assets/DataStoresView-Cj7LSWRX.js+0 −121 removedfrontend/dist/ui_assets/DataZone-BdjhE2xi.js+2 −2 renamed@@ -1,3 +1,3 @@ -import{N as R,K as X,a8 as se,Q as E,s as $,c as p,E as ae,w as H,d as v,l as i,e,h as T,f as d,am as oe,Y as ne,ah as Q,an as W,t as _,T as Y,H as F,O as K,q as G,aj as re,o as J,z,L as le,n as D,m as ie,aq as ee,dc as te,M as de,y as ce,j as w,F as ue,i as ve,p as I,ao as ge,cV as fe,Z as ye,dd as O,de as he,cX as pe,ap as xe,df as B,B as P,a2 as be}from"./index-CEXks4lv.js";import{I as me,a as _e}from"./IconRedo-BeOOI5_N.js";const ke={class:"flex flex-col h-full overflow-hidden"},we={class:"flex-shrink-0 flex items-center justify-between gap-2 p-1.5 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-t-lg"},$e={class:"flex items-center gap-0.5"},Ce=["disabled"],Me=["disabled"],De=["disabled"],Te=["disabled"],Ie=["disabled"],Se={key:0,class:"flex items-center gap-2 pr-2"},Ze={class:"text-[10px] font-bold text-blue-500"},ze={__name:"DiscussionZone",setup(L){const u=R(),k=X(),f=se(),{activeDiscussion:s}=E(u),{tasks:m}=E(f),y=$(null),o=$(!1),x=$([]),c=$(-1);let r=null,h=null;const g=p({get:()=>{var t;return((t=s.value)==null?void 0:t.discussion_data_zone)||""},set:t=>{s.value&&(u.setDiscussionDataZoneContent(s.value.id,t),clearTimeout(h),h=setTimeout(()=>{s.value&&ae.put(`/api/discussions/${s.value.id}/data_zone`,{content:t}).then(()=>{u.fetchContextStatus(s.value.id)})},1500))}}),b=p(()=>{if(!s.value)return!1;const t=u.activeAiTasks[s.value.id];if(!t||!t.taskId)return!1;const a=m.value.find(M=>M.id===t.taskId);return a?a.status==="running"||a.status==="pending":!1}),C=p(()=>{if(!s.value)return null;const t=u.activeAiTasks[s.value.id];return!t||!t.taskId?null:m.value.find(a=>a.id===t.taskId)}),S=p(()=>c.value>0),Z=p(()=>c.value<x.value.length-1);function j(t){clearTimeout(r),r=setTimeout(()=>{x.value[c.value]!==t&&(c.value<x.value.length-1&&x.value.splice(c.value+1),x.value.push(t),c.value++)},750)}async function V(){S.value&&(o.value=!0,c.value--,g.value=x.value[c.value],await K(),o.value=!1)}async function A(){Z.value&&(o.value=!0,c.value++,g.value=x.value[c.value],await K(),o.value=!1)}H(g,(t,a)=>{!o.value&&t!==a&&j(t)},{flush:"post"}),H(s,(t,a)=>{t&&(!a||t.id!==a.id)&&(x.value=[t.discussion_data_zone||""],c.value=0)},{immediate:!0});function U(t){y.value=t.view}function N(){s.value&&u.cloneDiscussion(s.value.id)}function n(){s.value&&u.refreshDataZones(s.value.id)}async function l(t){const a=Array.from(t.dataTransfer.files);a.length>0&&s.value&&(k.addNotification(`Extracting text from ${a.length} file(s)...`,"info"),await u.uploadAndEmbedFilesToDataZone(s.value.id,a,!1))}return(t,a)=>{var M;return i(),v("div",ke,[e("div",we,[e("div",$e,[e("button",{onClick:V,class:"p-1.5 rounded hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-30",title:"Undo",disabled:!S.value||b.value},[d(me,{class:"w-4 h-4"})],8,Ce),e("button",{onClick:A,class:"p-1.5 rounded hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-30",title:"Redo",disabled:!Z.value||b.value},[d(_e,{class:"w-4 h-4"})],8,Me),a[3]||(a[3]=e("div",{class:"w-px h-4 bg-gray-200 dark:bg-gray-700 mx-1"},null,-1)),e("button",{onClick:N,class:"p-1.5 rounded hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-30",title:"Clone Data Zone",disabled:b.value},[d(oe,{class:"w-4 h-4"})],8,De),e("button",{onClick:n,class:"p-1.5 rounded hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-30",title:"Refresh",disabled:b.value},[d(ne,{class:"w-4 h-4"})],8,Te),e("button",{onClick:a[0]||(a[0]=q=>g.value=""),class:"p-1.5 rounded hover:bg-red-50 dark:hover:bg-red-900/20 text-red-500 disabled:opacity-30",title:"Clear Context",disabled:b.value},[d(Q,{class:"w-4 h-4"})],8,Ie)]),b.value?(i(),v("div",Se,[d(W,{class:"w-3.5 h-3.5 text-blue-500 animate-spin"}),e("span",Ze,_((M=C.value)==null?void 0:M.progress)+"%",1)])):T("",!0)]),e("div",{onDragover:a[2]||(a[2]=F(()=>{},["prevent"])),onDrop:F(l,["prevent"]),class:"flex-1 min-h-0 border-x border-b border-gray-200 dark:border-gray-700 rounded-b-lg overflow-hidden relative"},[d(Y,{ref:"discussionCodeMirrorEditor",modelValue:g.value,"onUpdate:modelValue":a[1]||(a[1]=q=>g.value=q),class:"h-full","read-only":b.value,renderable:!0,onReady:U},null,8,["modelValue","read-only"])],32)])}}},Ee={class:"h-full flex flex-col border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden"},Re={__name:"PersonalityZone",setup(L){const u=R(),k=p(()=>u.activeDiscussion),f=p(()=>{var s;return((s=k.value)==null?void 0:s.personality_data_zone)||""});return(s,m)=>(i(),v("div",Ee,[d(Y,{modelValue:f.value,"onUpdate:modelValue":m[0]||(m[0]=y=>f.value=y),class:"h-full","read-only":!0},null,8,["modelValue"])]))}},Le={class:"flex flex-col h-full gap-3 overflow-hidden"},je={class:"flex items-center justify-between bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 p-2 rounded-lg shadow-sm flex-shrink-0"},Ve=["disabled"],Ae={class:"flex-1 flex flex-col gap-3 min-h-0"},Ue={class:"flex-1 flex flex-col min-h-[150px] border border-gray-200 dark:border-gray-700 rounded-lg bg-white dark:bg-gray-900/50 shadow-inner overflow-hidden"},Ne={class:"p-2 border-b dark:border-gray-700 flex items-center justify-between bg-gray-50 dark:bg-gray-800/30"},Be={class:"flex gap-2"},Pe={key:0,class:"text-[9px] font-mono text-gray-500"},He={key:1,class:"text-[9px] font-mono text-blue-500"},We={class:"flex-1 overflow-y-auto custom-scrollbar p-3"},Fe={key:0,class:"h-full flex flex-col items-center justify-center text-gray-400 opacity-40"},Xe={class:"h-64 border border-gray-200 dark:border-gray-700 rounded-lg bg-white dark:bg-gray-900 flex flex-col shadow-sm overflow-hidden flex-shrink-0"},qe={class:"p-2 border-b dark:border-gray-700 flex justify-between items-center bg-gray-50/50 dark:bg-gray-800/30"},Ke={class:"text-[10px] font-black uppercase text-gray-500"},Oe={class:"flex-1 overflow-y-auto custom-scrollbar p-1"},Qe={key:0,class:"text-center py-6"},Ye={key:1,class:"text-center py-6 text-xs text-gray-400"},Ge={key:2,class:"space-y-1"},Je={class:"flex items-center gap-3 min-w-0"},et={class:"text-[10px] font-mono text-gray-400 font-bold w-5 text-center shrink-0"},tt=["onClick"],st={class:"flex flex-col min-w-0"},at=["title"],ot={class:"text-[10px] truncate text-gray-400"},nt={class:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity"},rt=["onClick"],lt=["onClick"],it={__name:"MemoryZone",setup(L){const u=R(),k=re(),f=X(),{memories:s,isLoading:m}=E(k),y=$(""),o=$(new Set);function x(n){return n?Math.ceil(n.length/4):0}const c=p(()=>u.activeDiscussion),r=p(()=>{var n;return c.value&&((n=u.activeAiTasks[c.value.id])==null?void 0:n.type)==="memorize"}),h=p(()=>[...s.value].sort((n,l)=>new Date(n.created_at)-new Date(l.created_at))),g=p(()=>{const n=h.value.filter(l=>o.value.has(l.title));return n.length===0?"":n.map(l=>`[Memory #${h.value.findIndex(a=>a.id===l.id)+1}] ${l.title}: ${l.content}`).join(` +import{N as R,K as X,Q as se,R as Z,s as $,c as p,E as ae,w as W,d as v,l as i,e,h as T,f as d,am as oe,a0 as ne,ah as Q,an as H,t as _,Y,H as F,O as K,q as G,aj as re,o as J,z as E,L as le,n as D,m as ie,aq as ee,dc as te,M as de,y as ce,j as w,F as ue,i as ve,p as I,ao as ge,cW as fe,a1 as ye,dd as O,de as he,ca as pe,ap as xe,df as B,B as P,a4 as be}from"./index-BBRgbnZQ.js";import{I as me,a as _e}from"./IconRedo-PegjuXO_.js";const ke={class:"flex flex-col h-full overflow-hidden"},we={class:"flex-shrink-0 flex items-center justify-between gap-2 p-1.5 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-t-lg"},$e={class:"flex items-center gap-0.5"},Ce=["disabled"],Me=["disabled"],De=["disabled"],Te=["disabled"],Ie=["disabled"],Se={key:0,class:"flex items-center gap-2 pr-2"},ze={class:"text-[10px] font-bold text-blue-500"},Ee={__name:"DiscussionZone",setup(L){const u=R(),k=X(),f=se(),{activeDiscussion:s}=Z(u),{tasks:m}=Z(f),y=$(null),o=$(!1),x=$([]),c=$(-1);let r=null,h=null;const g=p({get:()=>{var t;return((t=s.value)==null?void 0:t.discussion_data_zone)||""},set:t=>{s.value&&(u.setDiscussionDataZoneContent(s.value.id,t),clearTimeout(h),h=setTimeout(()=>{s.value&&ae.put(`/api/discussions/${s.value.id}/data_zone`,{content:t}).then(()=>{u.fetchContextStatus(s.value.id)})},1500))}}),b=p(()=>{if(!s.value)return!1;const t=u.activeAiTasks[s.value.id];if(!t||!t.taskId)return!1;const a=m.value.find(M=>M.id===t.taskId);return a?a.status==="running"||a.status==="pending":!1}),C=p(()=>{if(!s.value)return null;const t=u.activeAiTasks[s.value.id];return!t||!t.taskId?null:m.value.find(a=>a.id===t.taskId)}),S=p(()=>c.value>0),z=p(()=>c.value<x.value.length-1);function j(t){clearTimeout(r),r=setTimeout(()=>{x.value[c.value]!==t&&(c.value<x.value.length-1&&x.value.splice(c.value+1),x.value.push(t),c.value++)},750)}async function V(){S.value&&(o.value=!0,c.value--,g.value=x.value[c.value],await K(),o.value=!1)}async function A(){z.value&&(o.value=!0,c.value++,g.value=x.value[c.value],await K(),o.value=!1)}W(g,(t,a)=>{!o.value&&t!==a&&j(t)},{flush:"post"}),W(s,(t,a)=>{t&&(!a||t.id!==a.id)&&(x.value=[t.discussion_data_zone||""],c.value=0)},{immediate:!0});function U(t){y.value=t.view}function N(){s.value&&u.cloneDiscussion(s.value.id)}function n(){s.value&&u.refreshDataZones(s.value.id)}async function l(t){const a=Array.from(t.dataTransfer.files);a.length>0&&s.value&&(k.addNotification(`Extracting text from ${a.length} file(s)...`,"info"),await u.uploadAndEmbedFilesToDataZone(s.value.id,a,!1))}return(t,a)=>{var M;return i(),v("div",ke,[e("div",we,[e("div",$e,[e("button",{onClick:V,class:"p-1.5 rounded hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-30",title:"Undo",disabled:!S.value||b.value},[d(me,{class:"w-4 h-4"})],8,Ce),e("button",{onClick:A,class:"p-1.5 rounded hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-30",title:"Redo",disabled:!z.value||b.value},[d(_e,{class:"w-4 h-4"})],8,Me),a[3]||(a[3]=e("div",{class:"w-px h-4 bg-gray-200 dark:bg-gray-700 mx-1"},null,-1)),e("button",{onClick:N,class:"p-1.5 rounded hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-30",title:"Clone Data Zone",disabled:b.value},[d(oe,{class:"w-4 h-4"})],8,De),e("button",{onClick:n,class:"p-1.5 rounded hover:bg-gray-100 dark:hover:bg-gray-800 disabled:opacity-30",title:"Refresh",disabled:b.value},[d(ne,{class:"w-4 h-4"})],8,Te),e("button",{onClick:a[0]||(a[0]=q=>g.value=""),class:"p-1.5 rounded hover:bg-red-50 dark:hover:bg-red-900/20 text-red-500 disabled:opacity-30",title:"Clear Context",disabled:b.value},[d(Q,{class:"w-4 h-4"})],8,Ie)]),b.value?(i(),v("div",Se,[d(H,{class:"w-3.5 h-3.5 text-blue-500 animate-spin"}),e("span",ze,_((M=C.value)==null?void 0:M.progress)+"%",1)])):T("",!0)]),e("div",{onDragover:a[2]||(a[2]=F(()=>{},["prevent"])),onDrop:F(l,["prevent"]),class:"flex-1 min-h-0 border-x border-b border-gray-200 dark:border-gray-700 rounded-b-lg overflow-hidden relative"},[d(Y,{ref:"discussionCodeMirrorEditor",modelValue:g.value,"onUpdate:modelValue":a[1]||(a[1]=q=>g.value=q),class:"h-full","read-only":b.value,renderable:!0,onReady:U},null,8,["modelValue","read-only"])],32)])}}},Ze={class:"h-full flex flex-col border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden"},Re={__name:"PersonalityZone",setup(L){const u=R(),k=p(()=>u.activeDiscussion),f=p(()=>{var s;return((s=k.value)==null?void 0:s.personality_data_zone)||""});return(s,m)=>(i(),v("div",Ze,[d(Y,{modelValue:f.value,"onUpdate:modelValue":m[0]||(m[0]=y=>f.value=y),class:"h-full","read-only":!0},null,8,["modelValue"])]))}},Le={class:"flex flex-col h-full gap-3 overflow-hidden"},je={class:"flex items-center justify-between bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 p-2 rounded-lg shadow-sm flex-shrink-0"},Ve=["disabled"],Ae={class:"flex-1 flex flex-col gap-3 min-h-0"},Ue={class:"flex-1 flex flex-col min-h-[150px] border border-gray-200 dark:border-gray-700 rounded-lg bg-white dark:bg-gray-900/50 shadow-inner overflow-hidden"},Ne={class:"p-2 border-b dark:border-gray-700 flex items-center justify-between bg-gray-50 dark:bg-gray-800/30"},Be={class:"flex gap-2"},Pe={key:0,class:"text-[9px] font-mono text-gray-500"},We={key:1,class:"text-[9px] font-mono text-blue-500"},He={class:"flex-1 overflow-y-auto custom-scrollbar p-3"},Fe={key:0,class:"h-full flex flex-col items-center justify-center text-gray-400 opacity-40"},Xe={class:"h-64 border border-gray-200 dark:border-gray-700 rounded-lg bg-white dark:bg-gray-900 flex flex-col shadow-sm overflow-hidden flex-shrink-0"},qe={class:"p-2 border-b dark:border-gray-700 flex justify-between items-center bg-gray-50/50 dark:bg-gray-800/30"},Ke={class:"text-[10px] font-black uppercase text-gray-500"},Oe={class:"flex-1 overflow-y-auto custom-scrollbar p-1"},Qe={key:0,class:"text-center py-6"},Ye={key:1,class:"text-center py-6 text-xs text-gray-400"},Ge={key:2,class:"space-y-1"},Je={class:"flex items-center gap-3 min-w-0"},et={class:"text-[10px] font-mono text-gray-400 font-bold w-5 text-center shrink-0"},tt=["onClick"],st={class:"flex flex-col min-w-0"},at=["title"],ot={class:"text-[10px] truncate text-gray-400"},nt={class:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity"},rt=["onClick"],lt=["onClick"],it={__name:"MemoryZone",setup(L){const u=R(),k=re(),f=X(),{memories:s,isLoading:m}=Z(k),y=$(""),o=$(new Set);function x(n){return n?Math.ceil(n.length/4):0}const c=p(()=>u.activeDiscussion),r=p(()=>{var n;return c.value&&((n=u.activeAiTasks[c.value.id])==null?void 0:n.type)==="memorize"}),h=p(()=>[...s.value].sort((n,l)=>new Date(n.created_at)-new Date(l.created_at))),g=p(()=>{const n=h.value.filter(l=>o.value.has(l.title));return n.length===0?"":n.map(l=>`[Memory #${h.value.findIndex(a=>a.id===l.id)+1}] ${l.title}: ${l.content}`).join(` -`)}),b=p(()=>x(g.value)),C=p(()=>{if(!y.value)return h.value;const n=y.value.toLowerCase();return h.value.filter(l=>l.title.toLowerCase().includes(n)||l.content.toLowerCase().includes(n))});function S(){c.value&&u.memorizeLTM(c.value.id)}function Z(){f.openModal("memoryEditor")}function j(n){f.openModal("memoryEditor",{memory:n})}async function V(n){const l=s.value.find(a=>a.id===n);if(!l)return;await f.showConfirmation({title:"Delete Memory?",message:`Permanently delete "${l.title}"?`,confirmText:"Delete"})&&await k.deleteMemory(n)}function A(n){o.value.add(n)}function U(n){o.value.delete(n)}async function N(){await k.fetchMemories(),o.value.size===0&&s.value.length>0&&s.value.forEach(n=>o.value.add(n.title))}return H(s,n=>{},{deep:!0}),J(()=>{N()}),(n,l)=>(i(),v("div",Le,[e("div",je,[z(e("input",{type:"text","onUpdate:modelValue":l[0]||(l[0]=t=>y.value=t),placeholder:"Filter bank...",class:"w-32 px-2 py-1 text-xs bg-gray-50 dark:bg-gray-900 border-none focus:ring-1 focus:ring-blue-500 rounded"},null,512),[[le,y.value]]),e("button",{onClick:S,class:"btn btn-primary btn-xs py-1 px-3 shadow-sm",disabled:r.value},[r.value?(i(),D(W,{key:0,class:"w-3.5 h-3.5 mr-1 animate-spin"})):(i(),D(ee,{key:1,class:"w-3.5 h-3.5 mr-1"})),l[1]||(l[1]=ie(" Memorize Chat "))],8,Ve)]),e("div",Ae,[e("div",Ue,[e("div",Ne,[l[2]||(l[2]=e("span",{class:"text-[9px] font-black uppercase text-gray-400 tracking-tighter"},"Active Context Preview",-1)),e("div",Be,[g.value?(i(),v("span",Pe,_(g.value.length)+" chars",1)):T("",!0),g.value?(i(),v("span",He,"~"+_(b.value)+" tokens",1)):T("",!0)])]),e("div",We,[g.value?(i(),D(de,{key:1,content:g.value,class:"prose-xs"},null,8,["content"])):(i(),v("div",Fe,[d(te,{class:"w-10 h-10 mb-2"}),l[3]||(l[3]=e("p",{class:"text-[10px] uppercase font-black tracking-widest"},"No Active Memories",-1))]))])]),e("div",Xe,[e("div",qe,[e("span",Ke,"Memory Bank ("+_(C.value.length)+")",1),e("button",{onClick:Z,class:"p-1 rounded hover:bg-gray-200 dark:hover:bg-gray-700 text-blue-500",title:"Manual Memory Entry"},[d(ce,{class:"w-4 h-4"})])]),e("div",Oe,[w(m)?(i(),v("div",Qe,[d(W,{class:"w-6 h-6 text-gray-300 animate-spin mx-auto"})])):C.value.length===0?(i(),v("div",Ye,"Empty")):(i(),v("div",Ge,[(i(!0),v(ue,null,ve(C.value,(t,a)=>(i(),v("div",{key:t.id,class:I(["group p-2 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800/50 flex items-center justify-between transition-all border border-transparent",{"border-green-500/20 bg-green-50/10 dark:bg-green-900/5":o.value.has(t.title)}])},[e("div",Je,[e("span",et,"#"+_(a+1),1),e("button",{onClick:M=>o.value.has(t.title)?U(t.title):A(t.title),class:I(["flex-shrink-0 transition-colors",o.value.has(t.title)?"text-green-500":"text-gray-300 hover:text-gray-400"])},[o.value.has(t.title)?(i(),D(ge,{key:0,class:"w-5 h-5"})):(i(),D(fe,{key:1,class:"w-5 h-5"}))],10,tt),e("div",st,[e("span",{class:"text-xs font-bold truncate text-gray-700 dark:text-gray-200",title:t.title},_(t.title),9,at),e("span",ot,_(x(t.content))+" tokens",1)])]),e("div",nt,[e("button",{onClick:M=>j(t),class:"p-1.5 rounded hover:bg-white dark:hover:bg-gray-700 shadow-sm text-blue-500",title:"Edit"},[d(ye,{class:"w-3.5 h-3.5"})],8,rt),e("button",{onClick:M=>V(t.id),class:"p-1.5 rounded hover:bg-red-50 dark:hover:bg-red-900/30 shadow-sm text-red-500",title:"Delete"},[d(Q,{class:"w-3.5 h-3.5"})],8,lt)])],2))),128))]))])])])]))}},dt=G(it,[["__scopeId","data-v-ba908132"]]),ct={class:"flex-1 flex flex-col min-w-0 overflow-hidden"},ut={class:"flex-shrink-0 bg-gray-50 dark:bg-gray-800/80 backdrop-blur-sm border-b border-gray-200 dark:border-gray-700 flex justify-between items-center p-2 h-12"},vt={class:"flex items-center gap-2 px-2"},gt={class:"flex items-center gap-1"},ft=["title"],yt={class:"flex-1 overflow-y-auto custom-scrollbar flex flex-col bg-gray-50/30 dark:bg-gray-900/30"},ht={class:"flex flex-col border-b border-gray-200 dark:border-gray-800 transition-all"},pt={class:"flex items-center gap-3"},xt={class:"p-1.5 rounded-md bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400"},bt={key:0,class:"text-xs text-gray-400 font-mono"},mt={class:"h-96 p-2 pt-0"},_t={class:"flex flex-col border-b border-gray-200 dark:border-gray-800 transition-all"},kt={class:"flex items-center gap-3"},wt={class:"p-1.5 rounded-md bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400"},$t={key:0,class:"text-xs text-gray-400 font-mono"},Ct={class:"h-64 p-2 pt-0"},Mt={class:"flex flex-col flex-1 min-h-0"},Dt={class:"flex items-center gap-3"},Tt={class:"p-1.5 rounded-md bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400"},It={key:0,class:"text-xs text-gray-400 font-mono"},St={class:"flex-1 p-2 pt-0 min-h-[300px]"},Zt={__name:"DataZone",setup(L){const u=X(),k=R(),{liveDataZoneTokens:f}=E(k),s=$(450),m=$(!1),y=p(()=>u.isDataZoneExpanded),o=$({discussion:!0,personality:!0,memory:!0});function x(c){m.value=!0;const r=c.clientX,h=s.value,g=C=>{m.value&&(s.value=Math.max(320,h-(C.clientX-r)))},b=()=>{m.value=!1,window.removeEventListener("mousemove",g),window.removeEventListener("mouseup",b),localStorage.setItem("lollms_dataZoneWidth",s.value)};window.addEventListener("mousemove",g),window.addEventListener("mouseup",b)}return J(()=>{const c=localStorage.getItem("lollms_dataZoneWidth");c&&(s.value=parseInt(c,10))}),(c,r)=>(i(),v("div",{class:I(["relative h-full flex flex-shrink-0 border-l border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 z-10 shadow-2xl",[y.value?"absolute inset-0 w-full":""]]),style:be(y.value?{}:{width:`${s.value}px`})},[y.value?T("",!0):(i(),v("div",{key:0,onMousedown:F(x,["prevent"]),class:"absolute top-0 bottom-0 -left-1 w-2 cursor-col-resize z-20 hover:bg-blue-500/30 transition-colors"},null,32)),e("div",ct,[e("div",ut,[e("div",vt,[d(O,{class:"w-4 h-4 text-gray-400"}),r[5]||(r[5]=e("h3",{class:"text-[10px] font-black text-gray-500 dark:text-gray-400 uppercase tracking-widest"},"Context Explorer",-1))]),e("div",gt,[e("button",{onClick:r[0]||(r[0]=h=>w(u).toggleDataZoneExpansion()),class:"p-1.5 rounded-lg hover:bg-gray-200 dark:hover:bg-gray-700 text-gray-500 transition-colors",title:y.value?"Shrink":"Expand"},[y.value?(i(),D(he,{key:0,class:"w-4 h-4"})):(i(),D(pe,{key:1,class:"w-4 h-4"}))],8,ft),e("button",{onClick:r[1]||(r[1]=h=>w(u).toggleDataZone()),class:"p-1.5 rounded-lg hover:bg-red-500 hover:text-white text-gray-500 transition-colors",title:"Close Sidebar"},[d(xe,{class:"w-4 h-4"})])])]),e("div",yt,[e("div",ht,[e("button",{onClick:r[2]||(r[2]=h=>o.value.discussion=!o.value.discussion),class:"flex-shrink-0 w-full flex items-center justify-between p-4 hover:bg-gray-100 dark:hover:bg-gray-800/50 transition-colors group"},[e("div",pt,[e("div",xt,[d(O,{class:"w-4 h-4"})]),r[6]||(r[6]=e("span",{class:"text-sm font-bold text-gray-700 dark:text-gray-200"},"Discussion Zone",-1)),w(f).discussion>0?(i(),v("span",bt,"("+_(w(f).discussion)+" tok)",1)):T("",!0)]),d(B,{class:I(["w-4 h-4 text-gray-400 transition-transform duration-300",{"rotate-180":!o.value.discussion}])},null,8,["class"])]),z(e("div",mt,[d(ze)],512),[[P,!o.value.discussion]])]),e("div",_t,[e("button",{onClick:r[3]||(r[3]=h=>o.value.personality=!o.value.personality),class:"flex-shrink-0 w-full flex items-center justify-between p-4 hover:bg-gray-100 dark:hover:bg-gray-800/50 transition-colors group"},[e("div",kt,[e("div",wt,[d(ee,{class:"w-4 h-4"})]),r[7]||(r[7]=e("span",{class:"text-sm font-bold text-gray-700 dark:text-gray-200"},"AI Personality",-1)),w(f).personality>0?(i(),v("span",$t,"("+_(w(f).personality)+" tok)",1)):T("",!0)]),d(B,{class:I(["w-4 h-4 text-gray-400 transition-transform duration-300",{"rotate-180":!o.value.personality}])},null,8,["class"])]),z(e("div",Ct,[d(Re)],512),[[P,!o.value.personality]])]),e("div",Mt,[e("button",{onClick:r[4]||(r[4]=h=>o.value.memory=!o.value.memory),class:"flex-shrink-0 w-full flex items-center justify-between p-4 hover:bg-gray-100 dark:hover:bg-gray-800/50 transition-colors group"},[e("div",Dt,[e("div",Tt,[d(te,{class:"w-4 h-4"})]),r[8]||(r[8]=e("span",{class:"text-sm font-bold text-gray-700 dark:text-gray-200"},"Long-Term Memory",-1)),w(f).memory>0?(i(),v("span",It,"("+_(w(f).memory)+" tok)",1)):T("",!0)]),d(B,{class:I(["w-4 h-4 text-gray-400 transition-transform duration-300",{"rotate-180":!o.value.memory}])},null,8,["class"])]),z(e("div",St,[d(dt)],512),[[P,!o.value.memory]])])])])],6))}},Rt=G(Zt,[["__scopeId","data-v-5372207d"]]);export{Rt as default}; +`)}),b=p(()=>x(g.value)),C=p(()=>{if(!y.value)return h.value;const n=y.value.toLowerCase();return h.value.filter(l=>l.title.toLowerCase().includes(n)||l.content.toLowerCase().includes(n))});function S(){c.value&&u.memorizeLTM(c.value.id)}function z(){f.openModal("memoryEditor")}function j(n){f.openModal("memoryEditor",{memory:n})}async function V(n){const l=s.value.find(a=>a.id===n);if(!l)return;await f.showConfirmation({title:"Delete Memory?",message:`Permanently delete "${l.title}"?`,confirmText:"Delete"})&&await k.deleteMemory(n)}function A(n){o.value.add(n)}function U(n){o.value.delete(n)}async function N(){await k.fetchMemories(),o.value.size===0&&s.value.length>0&&s.value.forEach(n=>o.value.add(n.title))}return W(s,n=>{},{deep:!0}),J(()=>{N()}),(n,l)=>(i(),v("div",Le,[e("div",je,[E(e("input",{type:"text","onUpdate:modelValue":l[0]||(l[0]=t=>y.value=t),placeholder:"Filter bank...",class:"w-32 px-2 py-1 text-xs bg-gray-50 dark:bg-gray-900 border-none focus:ring-1 focus:ring-blue-500 rounded"},null,512),[[le,y.value]]),e("button",{onClick:S,class:"btn btn-primary btn-xs py-1 px-3 shadow-sm",disabled:r.value},[r.value?(i(),D(H,{key:0,class:"w-3.5 h-3.5 mr-1 animate-spin"})):(i(),D(ee,{key:1,class:"w-3.5 h-3.5 mr-1"})),l[1]||(l[1]=ie(" Memorize Chat "))],8,Ve)]),e("div",Ae,[e("div",Ue,[e("div",Ne,[l[2]||(l[2]=e("span",{class:"text-[9px] font-black uppercase text-gray-400 tracking-tighter"},"Active Context Preview",-1)),e("div",Be,[g.value?(i(),v("span",Pe,_(g.value.length)+" chars",1)):T("",!0),g.value?(i(),v("span",We,"~"+_(b.value)+" tokens",1)):T("",!0)])]),e("div",He,[g.value?(i(),D(de,{key:1,content:g.value,class:"prose-xs"},null,8,["content"])):(i(),v("div",Fe,[d(te,{class:"w-10 h-10 mb-2"}),l[3]||(l[3]=e("p",{class:"text-[10px] uppercase font-black tracking-widest"},"No Active Memories",-1))]))])]),e("div",Xe,[e("div",qe,[e("span",Ke,"Memory Bank ("+_(C.value.length)+")",1),e("button",{onClick:z,class:"p-1 rounded hover:bg-gray-200 dark:hover:bg-gray-700 text-blue-500",title:"Manual Memory Entry"},[d(ce,{class:"w-4 h-4"})])]),e("div",Oe,[w(m)?(i(),v("div",Qe,[d(H,{class:"w-6 h-6 text-gray-300 animate-spin mx-auto"})])):C.value.length===0?(i(),v("div",Ye,"Empty")):(i(),v("div",Ge,[(i(!0),v(ue,null,ve(C.value,(t,a)=>(i(),v("div",{key:t.id,class:I(["group p-2 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800/50 flex items-center justify-between transition-all border border-transparent",{"border-green-500/20 bg-green-50/10 dark:bg-green-900/5":o.value.has(t.title)}])},[e("div",Je,[e("span",et,"#"+_(a+1),1),e("button",{onClick:M=>o.value.has(t.title)?U(t.title):A(t.title),class:I(["flex-shrink-0 transition-colors",o.value.has(t.title)?"text-green-500":"text-gray-300 hover:text-gray-400"])},[o.value.has(t.title)?(i(),D(ge,{key:0,class:"w-5 h-5"})):(i(),D(fe,{key:1,class:"w-5 h-5"}))],10,tt),e("div",st,[e("span",{class:"text-xs font-bold truncate text-gray-700 dark:text-gray-200",title:t.title},_(t.title),9,at),e("span",ot,_(x(t.content))+" tokens",1)])]),e("div",nt,[e("button",{onClick:M=>j(t),class:"p-1.5 rounded hover:bg-white dark:hover:bg-gray-700 shadow-sm text-blue-500",title:"Edit"},[d(ye,{class:"w-3.5 h-3.5"})],8,rt),e("button",{onClick:M=>V(t.id),class:"p-1.5 rounded hover:bg-red-50 dark:hover:bg-red-900/30 shadow-sm text-red-500",title:"Delete"},[d(Q,{class:"w-3.5 h-3.5"})],8,lt)])],2))),128))]))])])])]))}},dt=G(it,[["__scopeId","data-v-ba908132"]]),ct={class:"flex-1 flex flex-col min-w-0 overflow-hidden"},ut={class:"flex-shrink-0 bg-gray-50 dark:bg-gray-800/80 backdrop-blur-sm border-b border-gray-200 dark:border-gray-700 flex justify-between items-center p-2 h-12"},vt={class:"flex items-center gap-2 px-2"},gt={class:"flex items-center gap-1"},ft=["title"],yt={class:"flex-1 overflow-y-auto custom-scrollbar flex flex-col bg-gray-50/30 dark:bg-gray-900/30"},ht={class:"flex flex-col border-b border-gray-200 dark:border-gray-800 transition-all"},pt={class:"flex items-center gap-3"},xt={class:"p-1.5 rounded-md bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400"},bt={key:0,class:"text-xs text-gray-400 font-mono"},mt={class:"h-96 p-2 pt-0"},_t={class:"flex flex-col border-b border-gray-200 dark:border-gray-800 transition-all"},kt={class:"flex items-center gap-3"},wt={class:"p-1.5 rounded-md bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400"},$t={key:0,class:"text-xs text-gray-400 font-mono"},Ct={class:"h-64 p-2 pt-0"},Mt={class:"flex flex-col flex-1 min-h-0"},Dt={class:"flex items-center gap-3"},Tt={class:"p-1.5 rounded-md bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400"},It={key:0,class:"text-xs text-gray-400 font-mono"},St={class:"flex-1 p-2 pt-0 min-h-[300px]"},zt={__name:"DataZone",setup(L){const u=X(),k=R(),{liveDataZoneTokens:f}=Z(k),s=$(450),m=$(!1),y=p(()=>u.isDataZoneExpanded),o=$({discussion:!0,personality:!0,memory:!0});function x(c){m.value=!0;const r=c.clientX,h=s.value,g=C=>{m.value&&(s.value=Math.max(320,h-(C.clientX-r)))},b=()=>{m.value=!1,window.removeEventListener("mousemove",g),window.removeEventListener("mouseup",b),localStorage.setItem("lollms_dataZoneWidth",s.value)};window.addEventListener("mousemove",g),window.addEventListener("mouseup",b)}return J(()=>{const c=localStorage.getItem("lollms_dataZoneWidth");c&&(s.value=parseInt(c,10))}),(c,r)=>(i(),v("div",{class:I(["relative h-full flex flex-shrink-0 border-l border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 z-10 shadow-2xl",[y.value?"absolute inset-0 w-full":""]]),style:be(y.value?{}:{width:`${s.value}px`})},[y.value?T("",!0):(i(),v("div",{key:0,onMousedown:F(x,["prevent"]),class:"absolute top-0 bottom-0 -left-1 w-2 cursor-col-resize z-20 hover:bg-blue-500/30 transition-colors"},null,32)),e("div",ct,[e("div",ut,[e("div",vt,[d(O,{class:"w-4 h-4 text-gray-400"}),r[5]||(r[5]=e("h3",{class:"text-[10px] font-black text-gray-500 dark:text-gray-400 uppercase tracking-widest"},"Context Explorer",-1))]),e("div",gt,[e("button",{onClick:r[0]||(r[0]=h=>w(u).toggleDataZoneExpansion()),class:"p-1.5 rounded-lg hover:bg-gray-200 dark:hover:bg-gray-700 text-gray-500 transition-colors",title:y.value?"Shrink":"Expand"},[y.value?(i(),D(he,{key:0,class:"w-4 h-4"})):(i(),D(pe,{key:1,class:"w-4 h-4"}))],8,ft),e("button",{onClick:r[1]||(r[1]=h=>w(u).toggleDataZone()),class:"p-1.5 rounded-lg hover:bg-red-500 hover:text-white text-gray-500 transition-colors",title:"Close Sidebar"},[d(xe,{class:"w-4 h-4"})])])]),e("div",yt,[e("div",ht,[e("button",{onClick:r[2]||(r[2]=h=>o.value.discussion=!o.value.discussion),class:"flex-shrink-0 w-full flex items-center justify-between p-4 hover:bg-gray-100 dark:hover:bg-gray-800/50 transition-colors group"},[e("div",pt,[e("div",xt,[d(O,{class:"w-4 h-4"})]),r[6]||(r[6]=e("span",{class:"text-sm font-bold text-gray-700 dark:text-gray-200"},"Discussion Zone",-1)),w(f).discussion>0?(i(),v("span",bt,"("+_(w(f).discussion)+" tok)",1)):T("",!0)]),d(B,{class:I(["w-4 h-4 text-gray-400 transition-transform duration-300",{"rotate-180":!o.value.discussion}])},null,8,["class"])]),E(e("div",mt,[d(Ee)],512),[[P,!o.value.discussion]])]),e("div",_t,[e("button",{onClick:r[3]||(r[3]=h=>o.value.personality=!o.value.personality),class:"flex-shrink-0 w-full flex items-center justify-between p-4 hover:bg-gray-100 dark:hover:bg-gray-800/50 transition-colors group"},[e("div",kt,[e("div",wt,[d(ee,{class:"w-4 h-4"})]),r[7]||(r[7]=e("span",{class:"text-sm font-bold text-gray-700 dark:text-gray-200"},"AI Personality",-1)),w(f).personality>0?(i(),v("span",$t,"("+_(w(f).personality)+" tok)",1)):T("",!0)]),d(B,{class:I(["w-4 h-4 text-gray-400 transition-transform duration-300",{"rotate-180":!o.value.personality}])},null,8,["class"])]),E(e("div",Ct,[d(Re)],512),[[P,!o.value.personality]])]),e("div",Mt,[e("button",{onClick:r[4]||(r[4]=h=>o.value.memory=!o.value.memory),class:"flex-shrink-0 w-full flex items-center justify-between p-4 hover:bg-gray-100 dark:hover:bg-gray-800/50 transition-colors group"},[e("div",Dt,[e("div",Tt,[d(te,{class:"w-4 h-4"})]),r[8]||(r[8]=e("span",{class:"text-sm font-bold text-gray-700 dark:text-gray-200"},"Long-Term Memory",-1)),w(f).memory>0?(i(),v("span",It,"("+_(w(f).memory)+" tok)",1)):T("",!0)]),d(B,{class:I(["w-4 h-4 text-gray-400 transition-transform duration-300",{"rotate-180":!o.value.memory}])},null,8,["class"])]),E(e("div",St,[d(dt)],512),[[P,!o.value.memory]])])])])],6))}},Rt=G(zt,[["__scopeId","data-v-5372207d"]]);export{Rt as default};
frontend/dist/ui_assets/DataZonePromptManagementModal-PETEmDGg.js+1 −1 renamed@@ -1 +1 @@ -import{K as T,as as U,a as E,c as p,s as f,w as j,n as B,l as n,g as _,e as a,f as v,m as g,$ as F,j as b,at as O,d as r,h as y,t as C,y as z,F as J,i as R,p as q,z as A,L as K,T as W}from"./index-CEXks4lv.js";import{_ as G}from"./GenericModal-Br5hR2Sz.js";const H={class:"grid grid-cols-1 md:grid-cols-3 gap-6 h-[60vh]"},Q={class:"md:col-span-1 flex flex-col h-full bg-gray-50 dark:bg-gray-700/50 rounded-lg p-2"},X={class:"flex-shrink-0 mb-2"},Y={class:"flex-grow overflow-y-auto"},ee={key:0,class:"text-center p-4 text-sm"},te={key:1,class:"text-center p-4 text-sm text-gray-500"},ae={key:2,class:"space-y-1"},oe=["onClick"],se={class:"md:col-span-2 flex flex-col h-full"},ne={key:0,class:"flex flex-col h-full space-y-4"},le={class:"flex-grow flex flex-col min-h-0"},re={key:1,class:"flex items-center justify-center h-full bg-gray-50 dark:bg-gray-700/50 rounded-lg"},ie={class:"flex justify-between w-full"},de={class:"flex gap-3"},ue=["disabled"],pe={__name:"DataZonePromptManagementModal",setup(me){const u=T(),i=U(),x=E(),S=p(()=>u.modalData("dataZonePromptManagement")),h=p(()=>{var t;return(t=S.value)==null?void 0:t.onLoad}),w=p(()=>i.savedPrompts),s=f(null),m=f(""),l=f(""),d=f(!1),k=f(null);j(()=>u.isModalOpen("dataZonePromptManagement"),t=>{t&&(i.fetchPrompts(),x.fetchFriends(),c())});function c(){s.value=null,d.value=!1,m.value="",l.value=""}function N(t){var e;d.value&&((e=s.value)==null?void 0:e.id)===t.id?c():(s.value={...t},m.value=t.name,l.value=t.content,d.value=!0)}function $(){c(),d.value=!0}async function M(){if(!m.value.trim()||!l.value.trim()){u.addNotification("Name and content are required.","warning");return}s.value?await i.updatePrompt(s.value.id,m.value,l.value):await i.savePrompt(m.value,l.value),c()}async function D(t){var o;await u.showConfirmation({title:`Delete '${t.name}'?`,message:"This action cannot be undone."})&&(await i.deletePrompt(t.id),((o=s.value)==null?void 0:o.id)===t.id&&c())}function V(){h.value&&l.value&&(h.value(l.value),u.closeModal("dataZonePromptManagement"))}function Z(){var t;(t=k.value)==null||t.click()}async function I(t){const e=t.target.files[0];e&&await i.importPrompts(e),t.target.value=""}async function L(t){const e=await u.showConfirmation({title:`Share '${t.name}'`,message:"Select a friend to share this prompt with:",inputType:"select",inputOptions:x.friends.map(o=>({value:o.username,text:o.username})),confirmText:"Share"});e&&await i.sharePrompt(t.content,e)}return(t,e)=>(n(),B(G,{"modal-name":"dataZonePromptManagement",title:"Data Zone Prompt Management",maxWidthClass:"max-w-5xl"},{body:_(()=>[a("div",H,[a("div",Q,[a("div",X,[a("button",{onClick:$,class:"btn btn-secondary w-full"},[v(z,{class:"w-4 h-4 mr-2"}),e[6]||(e[6]=g(" New Prompt "))])]),a("div",Y,[b(i).isLoading?(n(),r("div",ee,"Loading...")):w.value.length===0?(n(),r("div",te,"No saved prompts.")):(n(),r("ul",ae,[(n(!0),r(J,null,R(w.value,o=>{var P;return n(),r("li",{key:o.id},[a("button",{onClick:ce=>N(o),class:q(["w-full text-left p-2 rounded-md truncate text-sm",[((P=s.value)==null?void 0:P.id)===o.id?"bg-blue-200 dark:bg-blue-800 font-semibold":"hover:bg-gray-200 dark:hover:bg-gray-600"]])},C(o.name),11,oe)])}),128))]))])]),a("div",se,[d.value?(n(),r("div",ne,[a("div",null,[e[7]||(e[7]=a("label",{class:"block text-sm font-medium"},"Prompt Name",-1)),A(a("input",{type:"text","onUpdate:modelValue":e[0]||(e[0]=o=>m.value=o),class:"input-field mt-1",placeholder:"A descriptive name for your prompt"},null,512),[[K,m.value]])]),a("div",le,[e[8]||(e[8]=a("label",{class:"block text-sm font-medium mb-1"},"Prompt Content",-1)),v(W,{modelValue:l.value,"onUpdate:modelValue":e[1]||(e[1]=o=>l.value=o),class:"flex-grow",placeholder:"Enter your prompt here. Use @<name:type:default>@ for placeholders."},null,8,["modelValue"])])])):(n(),r("div",re,e[9]||(e[9]=[a("p",{class:"text-gray-500"},"Select a prompt to view or edit, or create a new one.",-1)])))])])]),footer:_(()=>[a("div",ie,[a("div",null,[a("input",{type:"file",ref_key:"importInputRef",ref:k,onChange:I,class:"hidden",accept:".json"},null,544),a("button",{onClick:Z,class:"btn btn-secondary",title:"Import from JSON"},[v(F,{class:"w-4 h-4 mr-2"}),e[10]||(e[10]=g("Import"))]),a("button",{onClick:e[2]||(e[2]=o=>b(i).exportPrompts()),class:"btn btn-secondary ml-2",title:"Export all to JSON"},[v(O,{class:"w-4 h-4 mr-2"}),e[11]||(e[11]=g("Export"))])]),a("div",de,[a("button",{onClick:e[3]||(e[3]=o=>b(u).closeModal("dataZonePromptManagement")),class:"btn btn-secondary"},"Close"),d.value&&s.value?(n(),r("button",{key:0,onClick:e[4]||(e[4]=o=>D(s.value)),class:"btn btn-danger"},"Delete")):y("",!0),d.value&&s.value?(n(),r("button",{key:1,onClick:e[5]||(e[5]=o=>L(s.value)),class:"btn btn-secondary"},"Share")):y("",!0),d.value?(n(),r("button",{key:2,onClick:M,class:"btn btn-secondary"},C(s.value?"Save Changes":"Save New"),1)):y("",!0),a("button",{onClick:V,class:"btn btn-primary",disabled:!l.value.trim()},"Use Prompt",8,ue)])])]),_:1}))}};export{pe as default}; +import{K as U,as as E,a as T,c as p,s as f,w as j,n as B,l as n,g as _,e as a,f as v,m as g,W as F,j as b,at as O,d as r,h as y,t as C,y as z,F as J,i as R,p as W,z as q,L as A,Y as K}from"./index-BBRgbnZQ.js";import{_ as Y}from"./GenericModal-eXiOHk6I.js";const G={class:"grid grid-cols-1 md:grid-cols-3 gap-6 h-[60vh]"},H={class:"md:col-span-1 flex flex-col h-full bg-gray-50 dark:bg-gray-700/50 rounded-lg p-2"},Q={class:"flex-shrink-0 mb-2"},X={class:"flex-grow overflow-y-auto"},ee={key:0,class:"text-center p-4 text-sm"},te={key:1,class:"text-center p-4 text-sm text-gray-500"},ae={key:2,class:"space-y-1"},oe=["onClick"],se={class:"md:col-span-2 flex flex-col h-full"},ne={key:0,class:"flex flex-col h-full space-y-4"},le={class:"flex-grow flex flex-col min-h-0"},re={key:1,class:"flex items-center justify-center h-full bg-gray-50 dark:bg-gray-700/50 rounded-lg"},ie={class:"flex justify-between w-full"},de={class:"flex gap-3"},ue=["disabled"],pe={__name:"DataZonePromptManagementModal",setup(me){const u=U(),i=E(),x=T(),S=p(()=>u.modalData("dataZonePromptManagement")),h=p(()=>{var t;return(t=S.value)==null?void 0:t.onLoad}),w=p(()=>i.savedPrompts),s=f(null),m=f(""),l=f(""),d=f(!1),k=f(null);j(()=>u.isModalOpen("dataZonePromptManagement"),t=>{t&&(i.fetchPrompts(),x.fetchFriends(),c())});function c(){s.value=null,d.value=!1,m.value="",l.value=""}function N(t){var e;d.value&&((e=s.value)==null?void 0:e.id)===t.id?c():(s.value={...t},m.value=t.name,l.value=t.content,d.value=!0)}function M(){c(),d.value=!0}async function $(){if(!m.value.trim()||!l.value.trim()){u.addNotification("Name and content are required.","warning");return}s.value?await i.updatePrompt(s.value.id,m.value,l.value):await i.savePrompt(m.value,l.value),c()}async function D(t){var o;await u.showConfirmation({title:`Delete '${t.name}'?`,message:"This action cannot be undone."})&&(await i.deletePrompt(t.id),((o=s.value)==null?void 0:o.id)===t.id&&c())}function V(){h.value&&l.value&&(h.value(l.value),u.closeModal("dataZonePromptManagement"))}function Z(){var t;(t=k.value)==null||t.click()}async function I(t){const e=t.target.files[0];e&&await i.importPrompts(e),t.target.value=""}async function L(t){const e=await u.showConfirmation({title:`Share '${t.name}'`,message:"Select a friend to share this prompt with:",inputType:"select",inputOptions:x.friends.map(o=>({value:o.username,text:o.username})),confirmText:"Share"});e&&await i.sharePrompt(t.content,e)}return(t,e)=>(n(),B(Y,{"modal-name":"dataZonePromptManagement",title:"Data Zone Prompt Management",maxWidthClass:"max-w-5xl"},{body:_(()=>[a("div",G,[a("div",H,[a("div",Q,[a("button",{onClick:M,class:"btn btn-secondary w-full"},[v(z,{class:"w-4 h-4 mr-2"}),e[6]||(e[6]=g(" New Prompt "))])]),a("div",X,[b(i).isLoading?(n(),r("div",ee,"Loading...")):w.value.length===0?(n(),r("div",te,"No saved prompts.")):(n(),r("ul",ae,[(n(!0),r(J,null,R(w.value,o=>{var P;return n(),r("li",{key:o.id},[a("button",{onClick:ce=>N(o),class:W(["w-full text-left p-2 rounded-md truncate text-sm",[((P=s.value)==null?void 0:P.id)===o.id?"bg-blue-200 dark:bg-blue-800 font-semibold":"hover:bg-gray-200 dark:hover:bg-gray-600"]])},C(o.name),11,oe)])}),128))]))])]),a("div",se,[d.value?(n(),r("div",ne,[a("div",null,[e[7]||(e[7]=a("label",{class:"block text-sm font-medium"},"Prompt Name",-1)),q(a("input",{type:"text","onUpdate:modelValue":e[0]||(e[0]=o=>m.value=o),class:"input-field mt-1",placeholder:"A descriptive name for your prompt"},null,512),[[A,m.value]])]),a("div",le,[e[8]||(e[8]=a("label",{class:"block text-sm font-medium mb-1"},"Prompt Content",-1)),v(K,{modelValue:l.value,"onUpdate:modelValue":e[1]||(e[1]=o=>l.value=o),class:"flex-grow",placeholder:"Enter your prompt here. Use @<name:type:default>@ for placeholders."},null,8,["modelValue"])])])):(n(),r("div",re,e[9]||(e[9]=[a("p",{class:"text-gray-500"},"Select a prompt to view or edit, or create a new one.",-1)])))])])]),footer:_(()=>[a("div",ie,[a("div",null,[a("input",{type:"file",ref_key:"importInputRef",ref:k,onChange:I,class:"hidden",accept:".json"},null,544),a("button",{onClick:Z,class:"btn btn-secondary",title:"Import from JSON"},[v(F,{class:"w-4 h-4 mr-2"}),e[10]||(e[10]=g("Import"))]),a("button",{onClick:e[2]||(e[2]=o=>b(i).exportPrompts()),class:"btn btn-secondary ml-2",title:"Export all to JSON"},[v(O,{class:"w-4 h-4 mr-2"}),e[11]||(e[11]=g("Export"))])]),a("div",de,[a("button",{onClick:e[3]||(e[3]=o=>b(u).closeModal("dataZonePromptManagement")),class:"btn btn-secondary"},"Close"),d.value&&s.value?(n(),r("button",{key:0,onClick:e[4]||(e[4]=o=>D(s.value)),class:"btn btn-danger"},"Delete")):y("",!0),d.value&&s.value?(n(),r("button",{key:1,onClick:e[5]||(e[5]=o=>L(s.value)),class:"btn btn-secondary"},"Share")):y("",!0),d.value?(n(),r("button",{key:2,onClick:$,class:"btn btn-secondary"},C(s.value?"Save Changes":"Save New"),1)):y("",!0),a("button",{onClick:V,class:"btn btn-primary",disabled:!l.value.trim()},"Use Prompt",8,ue)])])]),_:1}))}};export{pe as default};
frontend/dist/ui_assets/diagram-N5W7TBWH-B-k_Scru.js+1 −1 renamedfrontend/dist/ui_assets/diagram-QEK2KX5R-FvrMDJ_1.js+1 −1 renamedfrontend/dist/ui_assets/diagram-S2PKOQOG-BPg6Ddn2.js+1 −1 renamedfrontend/dist/ui_assets/DiscussionGroupModal-CctyTNF4.js+1 −1 renamed@@ -1 +1 @@ -import{K as N,N as B,c as i,s as p,w as L,n as V,l as m,g as b,e as u,j as $,t as y,H as j,z as x,L as C,d as k,F,i as P,R as U}from"./index-CEXks4lv.js";import{_ as E}from"./GenericModal-Br5hR2Sz.js";const H=["value"],T={class:"flex justify-end gap-2"},q=["disabled"],R={__name:"DiscussionGroupModal",setup(z){const d=N(),v=B(),w=i(()=>d.modalData("discussionGroup")),s=p(null),f=p(null),o=p(""),a=p(null),n=p(!1),S=i(()=>v.discussionGroups);L(w,e=>{e?(s.value=e.group,f.value=e.parentGroup,o.value=e.group?e.group.name:"",a.value=e.group?e.group.parent_id:e.parentGroup?e.parentGroup.id:null):(s.value=null,f.value=null,o.value="",a.value=null)},{immediate:!0});const _=i(()=>s.value?"Edit Discussion Group":"New Discussion Group"),g=i(()=>o.value.trim().length>0);function G(e,t=null,l=0){let c=[];const M=e.filter(r=>r.parent_id===t);for(const r of M)s.value&&r.id===s.value.id||(c.push({value:r.id,text:`${"—".repeat(l)} ${r.name}`}),c=c.concat(G(e,r.id,l+1)));return c}const D=i(()=>[{value:null,text:"None (Top Level)"},...G(S.value)]);async function h(){if(!(!g.value||n.value)){n.value=!0;try{s.value?await v.updateGroup(s.value.id,o.value,a.value):await v.createGroup(o.value,a.value),d.closeModal("discussionGroup")}catch{}finally{n.value=!1}}}return(e,t)=>(m(),V(E,{modalName:"discussionGroup",title:_.value},{body:b(()=>[u("form",{onSubmit:j(h,["prevent"]),id:"discussion-group-form",class:"space-y-4 p-6"},[u("div",null,[t[3]||(t[3]=u("label",{for:"group-name",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Group Name",-1)),x(u("input",{type:"text",id:"group-name","onUpdate:modelValue":t[0]||(t[0]=l=>o.value=l),class:"mt-1 input-field w-full",placeholder:"e.g., Work Projects",required:"",autofocus:""},null,512),[[C,o.value]])]),u("div",null,[t[4]||(t[4]=u("label",{for:"parent-group",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Parent Group",-1)),x(u("select",{id:"parent-group","onUpdate:modelValue":t[1]||(t[1]=l=>a.value=l),class:"mt-1 input-field w-full"},[(m(!0),k(F,null,P(D.value,l=>(m(),k("option",{key:l.value,value:l.value},y(l.text),9,H))),128))],512),[[U,a.value]])])],32)]),footer:b(()=>[u("div",T,[u("button",{type:"button",onClick:t[2]||(t[2]=l=>$(d).closeModal("discussionGroup")),class:"btn btn-secondary"}," Cancel "),u("button",{type:"submit",form:"discussion-group-form",disabled:!g.value||n.value,class:"btn btn-primary"},y(n.value?"Saving...":"Save"),9,q)])]),_:1},8,["title"]))}};export{R as default}; +import{K as N,N as B,c as i,s as p,w as L,n as V,l as m,g as b,e as u,j as $,t as y,H as j,z as x,L as C,d as k,F,i as P,X as U}from"./index-BBRgbnZQ.js";import{_ as E}from"./GenericModal-eXiOHk6I.js";const H=["value"],T={class:"flex justify-end gap-2"},q=["disabled"],W={__name:"DiscussionGroupModal",setup(z){const d=N(),v=B(),w=i(()=>d.modalData("discussionGroup")),s=p(null),f=p(null),o=p(""),a=p(null),n=p(!1),S=i(()=>v.discussionGroups);L(w,e=>{e?(s.value=e.group,f.value=e.parentGroup,o.value=e.group?e.group.name:"",a.value=e.group?e.group.parent_id:e.parentGroup?e.parentGroup.id:null):(s.value=null,f.value=null,o.value="",a.value=null)},{immediate:!0});const _=i(()=>s.value?"Edit Discussion Group":"New Discussion Group"),g=i(()=>o.value.trim().length>0);function G(e,t=null,l=0){let c=[];const M=e.filter(r=>r.parent_id===t);for(const r of M)s.value&&r.id===s.value.id||(c.push({value:r.id,text:`${"—".repeat(l)} ${r.name}`}),c=c.concat(G(e,r.id,l+1)));return c}const D=i(()=>[{value:null,text:"None (Top Level)"},...G(S.value)]);async function h(){if(!(!g.value||n.value)){n.value=!0;try{s.value?await v.updateGroup(s.value.id,o.value,a.value):await v.createGroup(o.value,a.value),d.closeModal("discussionGroup")}catch{}finally{n.value=!1}}}return(e,t)=>(m(),V(E,{modalName:"discussionGroup",title:_.value},{body:b(()=>[u("form",{onSubmit:j(h,["prevent"]),id:"discussion-group-form",class:"space-y-4 p-6"},[u("div",null,[t[3]||(t[3]=u("label",{for:"group-name",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Group Name",-1)),x(u("input",{type:"text",id:"group-name","onUpdate:modelValue":t[0]||(t[0]=l=>o.value=l),class:"mt-1 input-field w-full",placeholder:"e.g., Work Projects",required:"",autofocus:""},null,512),[[C,o.value]])]),u("div",null,[t[4]||(t[4]=u("label",{for:"parent-group",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Parent Group",-1)),x(u("select",{id:"parent-group","onUpdate:modelValue":t[1]||(t[1]=l=>a.value=l),class:"mt-1 input-field w-full"},[(m(!0),k(F,null,P(D.value,l=>(m(),k("option",{key:l.value,value:l.value},y(l.text),9,H))),128))],512),[[U,a.value]])])],32)]),footer:b(()=>[u("div",T,[u("button",{type:"button",onClick:t[2]||(t[2]=l=>$(d).closeModal("discussionGroup")),class:"btn btn-secondary"}," Cancel "),u("button",{type:"submit",form:"discussion-group-form",disabled:!g.value||n.value,class:"btn btn-primary"},y(n.value?"Saving...":"Save"),9,q)])]),_:1},8,["title"]))}};export{W as default};
frontend/dist/ui_assets/DiscussionTreeModal-C2w_6joR.js+1 −1 renamed@@ -1 +1 @@ -import{q as $,u as M,P as L,c as d,r as V,d as c,l as a,e as l,h as _,p as B,n as D,ce as q,aq as F,t as g,f as N,m as P,d7 as U,F as A,i as j,K,N as O,s as C,w as Y,g as I,j as G,an as H}from"./index-CEXks4lv.js";import{_ as J}from"./GenericModal-Br5hR2Sz.js";const Q={class:"tree-node-container relative"},R={class:"node-wrapper flex items-start relative z-10"},W={class:"flex items-center gap-2 mb-2 pb-2 border-b border-gray-100 dark:border-gray-700/50"},X={class:"relative"},Z=["src","alt"],ee={key:1,class:"w-6 h-6 rounded-full bg-gray-100 dark:bg-gray-700 flex items-center justify-center"},te={class:"flex-1 min-w-0"},se={class:"flex items-center justify-between"},ae={class:"text-xs font-bold text-gray-900 dark:text-gray-100 truncate"},re={class:"text-[10px] text-gray-400 tabular-nums"},ne={key:0,class:"text-[9px] text-gray-500 dark:text-gray-400 font-mono truncate opacity-80"},oe={class:"text-xs text-gray-600 dark:text-gray-300 leading-relaxed font-sans line-clamp-3"},ie={class:"mt-2 pt-2 flex items-center gap-3 text-[10px] text-gray-400 border-t border-gray-50 dark:border-gray-700/30"},le={class:"flex items-center gap-1"},ce={key:0,class:"ml-auto text-blue-500 font-bold uppercase tracking-wider"},de={key:0,class:"absolute left-0 top-0 bottom-0 w-1 bg-blue-500 rounded-l-lg opacity-50"},ue={key:0,class:"children-container pl-8 relative mt-4"},fe={key:0,class:"absolute left-[-17px] top-6 bottom-0 w-4 bg-white dark:bg-[#1f2937] z-0"},ve={__name:"DiscussionTreeNode",props:{node:{type:Object,required:!0},level:{type:Number,default:0},activeBranchId:{type:String,default:null}},emits:["select-branch"],setup(r,{emit:m}){const t=r,x=m,b=M(),y=L(),f=d(()=>t.node.sender_type==="user"),v=d(()=>t.node.sender_type==="assistant"),p=d(()=>{var e;return f.value?((e=b.user)==null?void 0:e.username)||"You":v.value?t.node.sender||"Assistant":t.node.sender||"System"}),k=d(()=>{var e;if(f.value)return(e=b.user)==null?void 0:e.icon;if(v.value){const n=y.allPersonalities.find(h=>h.name===t.node.sender);return n==null?void 0:n.icon_base64}return null}),T=d(()=>({"bg-white dark:bg-gray-800":!0,"border-blue-500 ring-2 ring-blue-500":s.value,"border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600":!s.value,"cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-750":t.node.is_leaf,"leaf-node":t.node.is_leaf})),S=d(()=>t.node.is_leaf?v.value?"bg-green-500":"bg-purple-500":"bg-gray-400"),s=d(()=>t.node.id===t.activeBranchId?!0:t.node.children?t.node.children.some(e=>{const n=h=>h.id===t.activeBranchId?!0:h.children?h.children.some(w=>n(w)):!1;return n(e)}):!1);function o(){t.node.is_leaf&&x("select-branch",t.node.id)}const u=e=>{if(!e)return"";const n=e.replace(/<[^>]*>?/gm,"").trim();return n.substring(0,120)+(n.length>120?"...":"")},i=e=>e?new Date(e).toLocaleString([],{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"";return(e,n)=>{const h=V("DiscussionTreeNode",!0);return a(),c("div",Q,[l("div",R,[l("div",{class:B(["node-card relative flex flex-col p-3 rounded-lg border shadow-sm transition-all duration-200 w-full min-w-[250px] max-w-[400px]",T.value]),onClick:o},[l("div",W,[l("div",X,[k.value?(a(),c("img",{key:0,src:k.value,class:"w-6 h-6 rounded-full object-cover border border-gray-200 dark:border-gray-700",alt:p.value},null,8,Z)):(a(),c("div",ee,[f.value?(a(),D(q,{key:0,class:"w-4 h-4 text-blue-500"})):(a(),D(F,{key:1,class:"w-4 h-4 text-purple-500"}))])),l("div",{class:B(["absolute -bottom-0.5 -right-0.5 w-2.5 h-2.5 rounded-full border-2 border-white dark:border-gray-800",S.value])},null,2)]),l("div",te,[l("div",se,[l("span",ae,g(p.value),1),l("span",re,g(i(r.node.created_at)),1)]),v.value&&(r.node.binding_name||r.node.model_name)?(a(),c("div",ne,g(r.node.binding_name)+g(r.node.model_name?"/"+r.node.model_name:""),1)):_("",!0)])]),l("div",oe,g(u(r.node.content)||"(No content)"),1),l("div",ie,[l("span",le,[N(U,{class:"w-3 h-3"}),P(" "+g(r.node.token_count||0),1)]),r.node.is_leaf?(a(),c("span",ce,"Leaf")):_("",!0)]),s.value&&!r.node.is_leaf?(a(),c("div",de)):_("",!0)],2)]),r.node.children&&r.node.children.length>0?(a(),c("div",ue,[n[2]||(n[2]=l("div",{class:"absolute left-4 top-[-20px] bottom-4 w-px bg-gray-300 dark:bg-gray-600 z-0"},null,-1)),(a(!0),c(A,null,j(r.node.children,(w,E)=>(a(),c("div",{key:w.id,class:"child-wrapper relative pl-4 pb-4 last:pb-0"},[n[1]||(n[1]=l("div",{class:"absolute left-[-16px] top-6 w-5 h-px bg-gray-300 dark:bg-gray-600 z-0"},null,-1)),E===r.node.children.length-1?(a(),c("div",fe)):_("",!0),N(h,{node:w,level:r.level+1,"active-branch-id":r.activeBranchId,onSelectBranch:n[0]||(n[0]=z=>x("select-branch",z))},null,8,["node","level","active-branch-id"])]))),128))])):_("",!0)])}}},he=$(ve,[["__scopeId","data-v-f1600cc6"]]),ge={key:0,class:"flex justify-center items-center p-8"},me={key:1,class:"text-center p-8 text-gray-500"},be={key:2,class:"text-center p-8 text-gray-500"},ye={key:3,class:"overflow-y-auto max-h-[70vh] py-2 px-4"},_e={__name:"DiscussionTreeModal",setup(r){const m=K(),t=O();M();const x=d(()=>m.modalData("discussionTree")),b=d(()=>{var s;return(s=x.value)==null?void 0:s.discussionId}),y=C(!1),f=C([]),v=d(()=>t.activeDiscussion),p=d(()=>{var s;return(s=v.value)==null?void 0:s.active_branch_id});Y(b,async s=>{s&&await k(s)},{immediate:!0});async function k(s){y.value=!0;try{const o=await t.fetchDiscussionTree(s);if(console.log("Messages received for tree:",o),!Array.isArray(o)){console.error("Error: Expected an array of messages but received:",o),f.value=[];return}f.value=T(o)}finally{y.value=!1}}function T(s){const o=new Map,u=[];return s.forEach(i=>{o.set(i.id,{...i,children:[],is_leaf:!0})}),o.forEach(i=>{if(i.parent_message_id&&o.has(i.parent_message_id)){const e=o.get(i.parent_message_id);e.children.push(i),e.is_leaf=!1,i.is_root=!1}else u.push(i),i.is_root=!0}),o.forEach(i=>{i.children.sort((e,n)=>new Date(e.created_at)-new Date(n.created_at))}),u.sort((i,e)=>new Date(i.created_at)-new Date(e.created_at)),u}function S(s){t.switchBranch(s),m.closeModal("discussionTree")}return(s,o)=>(a(),D(J,{"modal-name":"discussionTree",title:v.value?`Discussion Tree: ${v.value.title}`:"Discussion Tree","max-width-class":"max-w-4xl"},{body:I(()=>[y.value?(a(),c("div",ge,[N(H,{class:"w-8 h-8 text-gray-500"}),o[1]||(o[1]=l("span",{class:"ml-3 text-gray-500"},"Loading discussion tree...",-1))])):b.value?f.value.length===0?(a(),c("div",be," No messages found for this discussion. ")):(a(),c("div",ye,[(a(!0),c(A,null,j(f.value,u=>(a(),D(he,{key:u.id,node:u,level:0,"active-branch-id":p.value,onSelectBranch:S},null,8,["node","active-branch-id"]))),128))])):(a(),c("div",me," No discussion selected. "))]),footer:I(()=>[l("button",{onClick:o[0]||(o[0]=u=>G(m).closeModal("discussionTree")),class:"btn btn-secondary"},"Close")]),_:1},8,["title"]))}},ke=$(_e,[["__scopeId","data-v-8039cd17"]]);export{ke as default}; +import{q as $,u as M,P as L,c as d,r as V,d as c,l as a,e as l,h as _,p as B,n as D,ch as q,aq as F,t as g,f as N,m as P,d7 as U,F as A,i as j,K,N as O,s as C,w as Y,g as I,j as G,an as H}from"./index-BBRgbnZQ.js";import{_ as J}from"./GenericModal-eXiOHk6I.js";const Q={class:"tree-node-container relative"},R={class:"node-wrapper flex items-start relative z-10"},W={class:"flex items-center gap-2 mb-2 pb-2 border-b border-gray-100 dark:border-gray-700/50"},X={class:"relative"},Z=["src","alt"],ee={key:1,class:"w-6 h-6 rounded-full bg-gray-100 dark:bg-gray-700 flex items-center justify-center"},te={class:"flex-1 min-w-0"},se={class:"flex items-center justify-between"},ae={class:"text-xs font-bold text-gray-900 dark:text-gray-100 truncate"},re={class:"text-[10px] text-gray-400 tabular-nums"},ne={key:0,class:"text-[9px] text-gray-500 dark:text-gray-400 font-mono truncate opacity-80"},oe={class:"text-xs text-gray-600 dark:text-gray-300 leading-relaxed font-sans line-clamp-3"},ie={class:"mt-2 pt-2 flex items-center gap-3 text-[10px] text-gray-400 border-t border-gray-50 dark:border-gray-700/30"},le={class:"flex items-center gap-1"},ce={key:0,class:"ml-auto text-blue-500 font-bold uppercase tracking-wider"},de={key:0,class:"absolute left-0 top-0 bottom-0 w-1 bg-blue-500 rounded-l-lg opacity-50"},ue={key:0,class:"children-container pl-8 relative mt-4"},fe={key:0,class:"absolute left-[-17px] top-6 bottom-0 w-4 bg-white dark:bg-[#1f2937] z-0"},he={__name:"DiscussionTreeNode",props:{node:{type:Object,required:!0},level:{type:Number,default:0},activeBranchId:{type:String,default:null}},emits:["select-branch"],setup(r,{emit:m}){const t=r,x=m,b=M(),y=L(),f=d(()=>t.node.sender_type==="user"),h=d(()=>t.node.sender_type==="assistant"),p=d(()=>{var e;return f.value?((e=b.user)==null?void 0:e.username)||"You":h.value?t.node.sender||"Assistant":t.node.sender||"System"}),k=d(()=>{var e;if(f.value)return(e=b.user)==null?void 0:e.icon;if(h.value){const n=y.allPersonalities.find(v=>v.name===t.node.sender);return n==null?void 0:n.icon_base64}return null}),T=d(()=>({"bg-white dark:bg-gray-800":!0,"border-blue-500 ring-2 ring-blue-500":s.value,"border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600":!s.value,"cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-750":t.node.is_leaf,"leaf-node":t.node.is_leaf})),S=d(()=>t.node.is_leaf?h.value?"bg-green-500":"bg-purple-500":"bg-gray-400"),s=d(()=>t.node.id===t.activeBranchId?!0:t.node.children?t.node.children.some(e=>{const n=v=>v.id===t.activeBranchId?!0:v.children?v.children.some(w=>n(w)):!1;return n(e)}):!1);function o(){t.node.is_leaf&&x("select-branch",t.node.id)}const u=e=>{if(!e)return"";const n=e.replace(/<[^>]*>?/gm,"").trim();return n.substring(0,120)+(n.length>120?"...":"")},i=e=>e?new Date(e).toLocaleString([],{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"";return(e,n)=>{const v=V("DiscussionTreeNode",!0);return a(),c("div",Q,[l("div",R,[l("div",{class:B(["node-card relative flex flex-col p-3 rounded-lg border shadow-sm transition-all duration-200 w-full min-w-[250px] max-w-[400px]",T.value]),onClick:o},[l("div",W,[l("div",X,[k.value?(a(),c("img",{key:0,src:k.value,class:"w-6 h-6 rounded-full object-cover border border-gray-200 dark:border-gray-700",alt:p.value},null,8,Z)):(a(),c("div",ee,[f.value?(a(),D(q,{key:0,class:"w-4 h-4 text-blue-500"})):(a(),D(F,{key:1,class:"w-4 h-4 text-purple-500"}))])),l("div",{class:B(["absolute -bottom-0.5 -right-0.5 w-2.5 h-2.5 rounded-full border-2 border-white dark:border-gray-800",S.value])},null,2)]),l("div",te,[l("div",se,[l("span",ae,g(p.value),1),l("span",re,g(i(r.node.created_at)),1)]),h.value&&(r.node.binding_name||r.node.model_name)?(a(),c("div",ne,g(r.node.binding_name)+g(r.node.model_name?"/"+r.node.model_name:""),1)):_("",!0)])]),l("div",oe,g(u(r.node.content)||"(No content)"),1),l("div",ie,[l("span",le,[N(U,{class:"w-3 h-3"}),P(" "+g(r.node.token_count||0),1)]),r.node.is_leaf?(a(),c("span",ce,"Leaf")):_("",!0)]),s.value&&!r.node.is_leaf?(a(),c("div",de)):_("",!0)],2)]),r.node.children&&r.node.children.length>0?(a(),c("div",ue,[n[2]||(n[2]=l("div",{class:"absolute left-4 top-[-20px] bottom-4 w-px bg-gray-300 dark:bg-gray-600 z-0"},null,-1)),(a(!0),c(A,null,j(r.node.children,(w,E)=>(a(),c("div",{key:w.id,class:"child-wrapper relative pl-4 pb-4 last:pb-0"},[n[1]||(n[1]=l("div",{class:"absolute left-[-16px] top-6 w-5 h-px bg-gray-300 dark:bg-gray-600 z-0"},null,-1)),E===r.node.children.length-1?(a(),c("div",fe)):_("",!0),N(v,{node:w,level:r.level+1,"active-branch-id":r.activeBranchId,onSelectBranch:n[0]||(n[0]=z=>x("select-branch",z))},null,8,["node","level","active-branch-id"])]))),128))])):_("",!0)])}}},ve=$(he,[["__scopeId","data-v-f1600cc6"]]),ge={key:0,class:"flex justify-center items-center p-8"},me={key:1,class:"text-center p-8 text-gray-500"},be={key:2,class:"text-center p-8 text-gray-500"},ye={key:3,class:"overflow-y-auto max-h-[70vh] py-2 px-4"},_e={__name:"DiscussionTreeModal",setup(r){const m=K(),t=O();M();const x=d(()=>m.modalData("discussionTree")),b=d(()=>{var s;return(s=x.value)==null?void 0:s.discussionId}),y=C(!1),f=C([]),h=d(()=>t.activeDiscussion),p=d(()=>{var s;return(s=h.value)==null?void 0:s.active_branch_id});Y(b,async s=>{s&&await k(s)},{immediate:!0});async function k(s){y.value=!0;try{const o=await t.fetchDiscussionTree(s);if(console.log("Messages received for tree:",o),!Array.isArray(o)){console.error("Error: Expected an array of messages but received:",o),f.value=[];return}f.value=T(o)}finally{y.value=!1}}function T(s){const o=new Map,u=[];return s.forEach(i=>{o.set(i.id,{...i,children:[],is_leaf:!0})}),o.forEach(i=>{if(i.parent_message_id&&o.has(i.parent_message_id)){const e=o.get(i.parent_message_id);e.children.push(i),e.is_leaf=!1,i.is_root=!1}else u.push(i),i.is_root=!0}),o.forEach(i=>{i.children.sort((e,n)=>new Date(e.created_at)-new Date(n.created_at))}),u.sort((i,e)=>new Date(i.created_at)-new Date(e.created_at)),u}function S(s){t.switchBranch(s),m.closeModal("discussionTree")}return(s,o)=>(a(),D(J,{"modal-name":"discussionTree",title:h.value?`Discussion Tree: ${h.value.title}`:"Discussion Tree","max-width-class":"max-w-4xl"},{body:I(()=>[y.value?(a(),c("div",ge,[N(H,{class:"w-8 h-8 text-gray-500"}),o[1]||(o[1]=l("span",{class:"ml-3 text-gray-500"},"Loading discussion tree...",-1))])):b.value?f.value.length===0?(a(),c("div",be," No messages found for this discussion. ")):(a(),c("div",ye,[(a(!0),c(A,null,j(f.value,u=>(a(),D(ve,{key:u.id,node:u,level:0,"active-branch-id":p.value,onSelectBranch:S},null,8,["node","active-branch-id"]))),128))])):(a(),c("div",me," No discussion selected. "))]),footer:I(()=>[l("button",{onClick:o[0]||(o[0]=u=>G(m).closeModal("discussionTree")),class:"btn btn-secondary"},"Close")]),_:1},8,["title"]))}},ke=$(_e,[["__scopeId","data-v-8039cd17"]]);export{ke as default};
frontend/dist/ui_assets/EditDataStoreModal-pQS10Wc8.js+1 −1 renamed@@ -1 +1 @@ -import{K as S,P as g,c as D,s as r,w as m,n as x,l as h,g as p,e as a,t as k,H as _,z as f,L as v}from"./index-CEXks4lv.js";import{_ as w}from"./GenericModal-Br5hR2Sz.js";const C=["disabled"],N=["disabled"],U={__name:"EditDataStoreModal",setup(M){const i=S(),b=g(),y=D(()=>{var e;return(e=i.modalData("editDataStore"))==null?void 0:e.store}),t=r({id:"",name:"",description:""}),s=r(!1),l=r(!1);let d="{}";m(y,e=>{e&&(t.value={id:e.id,name:e.name,description:e.description||""},d=JSON.stringify(t.value),l.value=!1)},{immediate:!0}),m(t,e=>{l.value=JSON.stringify(e)!==d},{deep:!0});async function u(){if(!t.value.name.trim()){i.addNotification("Data Store name cannot be empty.","warning");return}s.value=!0;try{await b.updateDataStore(t.value),c()}catch{}finally{s.value=!1}}function c(){i.closeModal("editDataStore")}return(e,o)=>(h(),x(w,{modalName:"editDataStore",title:"Edit Data Store","allow-overlay-close":!s.value},{body:p(()=>[a("form",{onSubmit:_(u,["prevent"]),class:"space-y-4"},[a("div",null,[o[2]||(o[2]=a("label",{for:"ds-name",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," Name ",-1)),f(a("input",{id:"ds-name","onUpdate:modelValue":o[0]||(o[0]=n=>t.value.name=n),type:"text",required:"",class:"input-field mt-1",placeholder:"e.g., Project Documentation"},null,512),[[v,t.value.name]])]),a("div",null,[o[3]||(o[3]=a("label",{for:"ds-description",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," Description ",-1)),f(a("textarea",{id:"ds-description","onUpdate:modelValue":o[1]||(o[1]=n=>t.value.description=n),rows:"3",class:"input-field mt-1",placeholder:"A brief description of the data store's content."},null,512),[[v,t.value.description]])])],32)]),footer:p(()=>[a("button",{type:"button",onClick:c,disabled:s.value,class:"btn btn-secondary"}," Cancel ",8,C),a("button",{type:"button",onClick:u,disabled:s.value||!l.value,class:"btn btn-primary"},k(s.value?"Saving...":"Save Changes"),9,N)]),_:1},8,["allow-overlay-close"]))}};export{U as default}; +import{K as S,P as g,c as D,s as r,w as m,n as x,l as h,g as p,e as a,t as k,H as _,z as f,L as v}from"./index-BBRgbnZQ.js";import{_ as w}from"./GenericModal-eXiOHk6I.js";const C=["disabled"],N=["disabled"],U={__name:"EditDataStoreModal",setup(M){const i=S(),b=g(),y=D(()=>{var e;return(e=i.modalData("editDataStore"))==null?void 0:e.store}),t=r({id:"",name:"",description:""}),s=r(!1),l=r(!1);let d="{}";m(y,e=>{e&&(t.value={id:e.id,name:e.name,description:e.description||""},d=JSON.stringify(t.value),l.value=!1)},{immediate:!0}),m(t,e=>{l.value=JSON.stringify(e)!==d},{deep:!0});async function u(){if(!t.value.name.trim()){i.addNotification("Data Store name cannot be empty.","warning");return}s.value=!0;try{await b.updateDataStore(t.value),c()}catch{}finally{s.value=!1}}function c(){i.closeModal("editDataStore")}return(e,o)=>(h(),x(w,{modalName:"editDataStore",title:"Edit Data Store","allow-overlay-close":!s.value},{body:p(()=>[a("form",{onSubmit:_(u,["prevent"]),class:"space-y-4"},[a("div",null,[o[2]||(o[2]=a("label",{for:"ds-name",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," Name ",-1)),f(a("input",{id:"ds-name","onUpdate:modelValue":o[0]||(o[0]=n=>t.value.name=n),type:"text",required:"",class:"input-field mt-1",placeholder:"e.g., Project Documentation"},null,512),[[v,t.value.name]])]),a("div",null,[o[3]||(o[3]=a("label",{for:"ds-description",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," Description ",-1)),f(a("textarea",{id:"ds-description","onUpdate:modelValue":o[1]||(o[1]=n=>t.value.description=n),rows:"3",class:"input-field mt-1",placeholder:"A brief description of the data store's content."},null,512),[[v,t.value.description]])])],32)]),footer:p(()=>[a("button",{type:"button",onClick:c,disabled:s.value,class:"btn btn-secondary"}," Cancel ",8,C),a("button",{type:"button",onClick:u,disabled:s.value||!l.value,class:"btn btn-primary"},k(s.value?"Saving...":"Save Changes"),9,N)]),_:1},8,["allow-overlay-close"]))}};export{U as default};
frontend/dist/ui_assets/EditPromptModal-DrC0EKsC.js+0 −7 removed@@ -1,7 +0,0 @@ -import{K as S,as as k,c as n,s as P,w as V,n as C,l as y,g,e,j as N,t as M,d as U,h as $,H as D,f as m,z as i,m as p,L as r,T,al as h}from"./index-CEXks4lv.js";import{u as B}from"./admin-Dmx5gjU7.js";import{_ as E}from"./GenericModal-Br5hR2Sz.js";import{_ as A}from"./IconUploader-CuwxxXVq.js";const q={class:"flex items-start gap-4"},H={class:"flex-grow space-y-4"},I={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},j={class:"p-3 bg-blue-50 dark:bg-blue-900/20 border-l-4 border-blue-500 text-blue-800 dark:text-blue-200"},z={class:"flex items-center"},_={__name:"EditPromptModal",setup(F){const s=S(),u=B(),c=k(),d=n(()=>s.modalData("editPrompt")),f=n(()=>{var a;return((a=d.value)==null?void 0:a.isSystemPrompt)||!1}),v=n(()=>{var a,t;return(t=(a=d.value)==null?void 0:a.prompt)==null?void 0:t.id}),b=()=>({name:"",content:"",category:"",author:"",description:"",icon:null}),o=P(b());V(d,a=>{a&&s.isModalOpen("editPrompt")&&(o.value={...b(),...a.prompt||{}})},{immediate:!0,deep:!0});const w=n(()=>{const a=v.value?"Edit":"New",t=f.value?"System":"Personal";return`${a} ${t} Prompt`});async function x(){if(!o.value.name||!o.value.content){s.addNotification("Name and Content are required.","warning");return}try{const{id:a,...t}=o.value;f.value?a?await u.updateSystemPrompt(a,t):await u.createSystemPrompt(t):a?await c.updatePrompt(a,t):await c.createPrompt(t),s.closeModal("editPrompt")}catch{}}return(a,t)=>(y(),C(E,{"modal-name":"editPrompt",title:w.value,"max-width-class":"max-w-4xl"},{body:g(()=>[o.value?(y(),U("form",{key:0,onSubmit:D(x,["prevent"]),class:"space-y-4"},[e("div",q,[m(A,{modelValue:o.value.icon,"onUpdate:modelValue":t[0]||(t[0]=l=>o.value.icon=l),"default-icon-component":"IconTicket"},null,8,["modelValue"]),e("div",H,[e("div",I,[e("div",null,[t[7]||(t[7]=e("label",{for:"prompt-name",class:"block text-sm font-medium"},[p("Name "),e("span",{class:"text-red-500"},"*")],-1)),i(e("input",{id:"prompt-name","onUpdate:modelValue":t[1]||(t[1]=l=>o.value.name=l),type:"text",class:"input-field mt-1",required:""},null,512),[[r,o.value.name]])]),e("div",null,[t[8]||(t[8]=e("label",{for:"prompt-category",class:"block text-sm font-medium"},"Category",-1)),i(e("input",{id:"prompt-category","onUpdate:modelValue":t[2]||(t[2]=l=>o.value.category=l),type:"text",class:"input-field mt-1",placeholder:"e.g., Writing, Coding"},null,512),[[r,o.value.category]])])]),e("div",null,[t[9]||(t[9]=e("label",{for:"prompt-author",class:"block text-sm font-medium"},"Author",-1)),i(e("input",{id:"prompt-author","onUpdate:modelValue":t[3]||(t[3]=l=>o.value.author=l),type:"text",class:"input-field mt-1"},null,512),[[r,o.value.author]])])])]),e("div",null,[t[10]||(t[10]=e("label",{for:"prompt-description",class:"block text-sm font-medium"},"Description",-1)),i(e("textarea",{id:"prompt-description","onUpdate:modelValue":t[4]||(t[4]=l=>o.value.description=l),rows:"2",class:"input-field mt-1"},null,512),[[r,o.value.description]])]),e("div",null,[t[11]||(t[11]=e("label",{for:"prompt-content",class:"block text-sm font-medium"},[p("Content "),e("span",{class:"text-red-500"},"*")],-1)),m(T,{modelValue:o.value.content,"onUpdate:modelValue":t[5]||(t[5]=l=>o.value.content=l),class:"mt-1 h-64"},null,8,["modelValue"])]),e("div",j,[e("div",z,[m(h,{class:"h-5 w-5 mr-2"}),t[12]||(t[12]=e("h4",{class:"font-bold"},"Placeholder Help",-1))]),t[13]||(t[13]=e("div",{class:"mt-2 text-xs space-y-1"},[e("p",null,[e("code",{class:"font-mono bg-blue-200 dark:bg-blue-800/50 px-1 rounded"},"@<name>@"),p(": Simple text replacement.")]),e("p",null,"For advanced options with a user-friendly form:"),e("pre",{class:"whitespace-pre-wrap font-mono text-xs bg-blue-100 dark:bg-blue-900/40 p-2 rounded"},`@<name>@ -title (optional): Display Title -type (optional): str | text | int | float | bool -options (optional, only use if you want to fix the value to a restricted subset): comma, separated, list -default (optional): default value -help (optional): A helpful tip for the user. -@</name>@`)],-1))])],32)):$("",!0)]),footer:g(()=>[e("button",{onClick:t[6]||(t[6]=l=>N(s).closeModal("editPrompt")),class:"btn btn-secondary"},"Cancel"),e("button",{onClick:x,class:"btn btn-primary"},M(v.value?"Save Changes":"Create"),1)]),_:1},8,["title"]))}};export{_ as default};
frontend/dist/ui_assets/EditPromptModal-HYdNgYxW.js+7 −0 added@@ -0,0 +1,7 @@ +import{K as S,as as k,c as n,s as P,w as V,n as C,l as y,g,e,j as N,t as M,d as U,h as $,H as D,f as m,z as i,m as p,L as r,Y as h,al as B}from"./index-BBRgbnZQ.js";import{u as E}from"./admin-CwLQr1mG.js";import{_ as T}from"./GenericModal-eXiOHk6I.js";import{_ as A}from"./IconUploader-B6YcM4hf.js";const q={class:"flex items-start gap-4"},H={class:"flex-grow space-y-4"},I={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},j={class:"p-3 bg-blue-50 dark:bg-blue-900/20 border-l-4 border-blue-500 text-blue-800 dark:text-blue-200"},z={class:"flex items-center"},Y={__name:"EditPromptModal",setup(F){const s=S(),u=E(),c=k(),d=n(()=>s.modalData("editPrompt")),f=n(()=>{var a;return((a=d.value)==null?void 0:a.isSystemPrompt)||!1}),v=n(()=>{var a,t;return(t=(a=d.value)==null?void 0:a.prompt)==null?void 0:t.id}),b=()=>({name:"",content:"",category:"",author:"",description:"",icon:null}),o=P(b());V(d,a=>{a&&s.isModalOpen("editPrompt")&&(o.value={...b(),...a.prompt||{}})},{immediate:!0,deep:!0});const w=n(()=>{const a=v.value?"Edit":"New",t=f.value?"System":"Personal";return`${a} ${t} Prompt`});async function x(){if(!o.value.name||!o.value.content){s.addNotification("Name and Content are required.","warning");return}try{const{id:a,...t}=o.value;f.value?a?await u.updateSystemPrompt(a,t):await u.createSystemPrompt(t):a?await c.updatePrompt(a,t):await c.createPrompt(t),s.closeModal("editPrompt")}catch{}}return(a,t)=>(y(),C(T,{"modal-name":"editPrompt",title:w.value,"max-width-class":"max-w-4xl"},{body:g(()=>[o.value?(y(),U("form",{key:0,onSubmit:D(x,["prevent"]),class:"space-y-4"},[e("div",q,[m(A,{modelValue:o.value.icon,"onUpdate:modelValue":t[0]||(t[0]=l=>o.value.icon=l),"default-icon-component":"IconTicket"},null,8,["modelValue"]),e("div",H,[e("div",I,[e("div",null,[t[7]||(t[7]=e("label",{for:"prompt-name",class:"block text-sm font-medium"},[p("Name "),e("span",{class:"text-red-500"},"*")],-1)),i(e("input",{id:"prompt-name","onUpdate:modelValue":t[1]||(t[1]=l=>o.value.name=l),type:"text",class:"input-field mt-1",required:""},null,512),[[r,o.value.name]])]),e("div",null,[t[8]||(t[8]=e("label",{for:"prompt-category",class:"block text-sm font-medium"},"Category",-1)),i(e("input",{id:"prompt-category","onUpdate:modelValue":t[2]||(t[2]=l=>o.value.category=l),type:"text",class:"input-field mt-1",placeholder:"e.g., Writing, Coding"},null,512),[[r,o.value.category]])])]),e("div",null,[t[9]||(t[9]=e("label",{for:"prompt-author",class:"block text-sm font-medium"},"Author",-1)),i(e("input",{id:"prompt-author","onUpdate:modelValue":t[3]||(t[3]=l=>o.value.author=l),type:"text",class:"input-field mt-1"},null,512),[[r,o.value.author]])])])]),e("div",null,[t[10]||(t[10]=e("label",{for:"prompt-description",class:"block text-sm font-medium"},"Description",-1)),i(e("textarea",{id:"prompt-description","onUpdate:modelValue":t[4]||(t[4]=l=>o.value.description=l),rows:"2",class:"input-field mt-1"},null,512),[[r,o.value.description]])]),e("div",null,[t[11]||(t[11]=e("label",{for:"prompt-content",class:"block text-sm font-medium"},[p("Content "),e("span",{class:"text-red-500"},"*")],-1)),m(h,{modelValue:o.value.content,"onUpdate:modelValue":t[5]||(t[5]=l=>o.value.content=l),class:"mt-1 h-64"},null,8,["modelValue"])]),e("div",j,[e("div",z,[m(B,{class:"h-5 w-5 mr-2"}),t[12]||(t[12]=e("h4",{class:"font-bold"},"Placeholder Help",-1))]),t[13]||(t[13]=e("div",{class:"mt-2 text-xs space-y-1"},[e("p",null,[e("code",{class:"font-mono bg-blue-200 dark:bg-blue-800/50 px-1 rounded"},"@<name>@"),p(": Simple text replacement.")]),e("p",null,"For advanced options with a user-friendly form:"),e("pre",{class:"whitespace-pre-wrap font-mono text-xs bg-blue-100 dark:bg-blue-900/40 p-2 rounded"},`@<name>@ +title (optional): Display Title +type (optional): str | text | int | float | bool +options (optional, only use if you want to fix the value to a restricted subset): comma, separated, list +default (optional): default value +help (optional): A helpful tip for the user. +@</name>@`)],-1))])],32)):$("",!0)]),footer:g(()=>[e("button",{onClick:t[6]||(t[6]=l=>N(s).closeModal("editPrompt")),class:"btn btn-secondary"},"Cancel"),e("button",{onClick:x,class:"btn btn-primary"},M(v.value?"Save Changes":"Create"),1)]),_:1},8,["title"]))}};export{Y as default};
frontend/dist/ui_assets/EmailAllUsersModal-BhcZYJk7.js+0 −1 removed@@ -1 +0,0 @@ -import{K as F,c as _,Q as R,s as v,w as S,o as J,n as O,l as b,g as T,e,j as o,d as f,p as g,t as p,H as G,z as x,h as K,ak as A,L,f as Q,V as z,F as W,i as X,m as Y}from"./index-CEXks4lv.js";import{_ as Z}from"./GenericModal-Br5hR2Sz.js";import{u as ee}from"./admin-Dmx5gjU7.js";import{_ as te}from"./WysiwygEditor-CLoAF0GT.js";/* empty css */import"./InsertImageModal-09ZrJLXN.js";const le={class:"grid grid-cols-1 md:grid-cols-3 gap-6"},se={class:"space-y-6 md:col-span-2"},oe={class:"flex items-center gap-4"},ae={class:"flex-grow"},ne=["disabled"],re={class:"flex items-center justify-between mb-1"},ie={class:"flex items-center gap-2"},de=["disabled"],ue=["disabled"],ce={class:"space-y-4"},me={class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},ve={class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},be={class:"space-y-4"},fe={class:"text-sm font-medium"},ge={class:"relative"},pe={class:"flex items-center p-2 border-b dark:border-gray-600"},ye={class:"max-h-96 overflow-y-auto border dark:border-gray-600 rounded-b-md"},xe={key:0,class:"divide-y dark:divide-gray-600"},ke=["id","value"],he=["for"],we={class:"font-medium"},_e={key:1,class:"p-4 text-center text-sm text-gray-500"},Ce={class:"flex justify-between items-center w-full"},Ue=["disabled"],je={class:"flex justify-end space-x-3"},Me=["disabled"],$e={__name:"EmailAllUsersModal",setup(Se){const d=F(),C=ee(),I=_(()=>d.modalData("emailAllUsers")),{isEnhancingEmail:U}=R(C),{emailModalSubject:a,emailModalBody:n,emailModalBackgroundColor:r,emailModalSendAsText:c}=R(d),j=v(""),y=v(!1),u=v([]),i=v(-1),k=v(!1),m=v([]),V=v([]),M=v(!0),E=_(()=>i.value>0),B=_(()=>i.value<u.value.length-1),h=_(()=>(V.value||[]).filter(l=>l.is_active&&l.email));S(I,l=>{l&&l.users&&(V.value=l.users,m.value=l.users.map(t=>t.id))},{immediate:!0,deep:!0}),J(()=>{w()}),S(M,l=>{l?m.value=h.value.map(t=>t.id):m.value=[]}),S([a,n,r],()=>{w()});function w(){const l={subject:a.value,body:n.value,backgroundColor:r.value};u.value.length>0&&JSON.stringify(l)===JSON.stringify(u.value[i.value])||(u.value.splice(i.value+1),u.value.push(l),i.value=u.value.length-1)}function N(l){a.value=l.subject,n.value=l.body,r.value=l.backgroundColor}function P(){E.value&&(i.value--,N(u.value[i.value]))}function D(){B.value&&(i.value++,N(u.value[i.value]))}async function H(){if(!a.value&&!n.value){d.addNotification("Please provide a subject or body to enhance.","warning");return}try{const l=await C.enhanceEmail(a.value,n.value,r.value,j.value);l&&(a.value=l.subject,n.value=l.body,r.value=l.background_color||r.value,w())}catch{}}async function $(){if(!a.value||!n.value){d.addNotification("Subject and body are required.","error");return}if(m.value.length===0){d.addNotification("Please select at least one user to email.","error");return}k.value=!0;try{await C.sendEmailToUsers(a.value,n.value,m.value,r.value,c.value),d.closeModal("emailAllUsers"),d.initEmailModalState(),u.value=[],i.value=-1,w()}catch{}finally{k.value=!1}}return(l,t)=>(b(),O(Z,{"modal-name":"emailAllUsers",title:"Email Users",onClose:t[9]||(t[9]=s=>o(d).closeModal("emailAllUsers")),maxWidthClass:"max-w-6xl"},{body:T(()=>[e("form",{onSubmit:G($,["prevent"]),class:"p-6 space-y-6"},[e("div",le,[e("div",se,[e("div",oe,[e("div",ae,[t[10]||(t[10]=e("label",{for:"email-subject",class:"block text-sm font-medium"},"Subject",-1)),x(e("input",{id:"email-subject","onUpdate:modelValue":t[0]||(t[0]=s=>A(a)?a.value=s:null),type:"text",class:"input-field mt-1",required:""},null,512),[[L,o(a)]])]),e("div",null,[e("label",{for:"email-bg-color",class:g(["block text-sm font-medium",{"text-gray-400 dark:text-gray-500":o(c)}])},"BG Color",2),x(e("input",{id:"email-bg-color","onUpdate:modelValue":t[1]||(t[1]=s=>A(r)?r.value=s:null),type:"color",class:"w-20 h-10 mt-1 p-1 border border-gray-300 dark:border-gray-600 rounded-md",disabled:o(c)},null,8,ne),[[L,o(r)]])])]),e("div",null,[e("div",re,[t[13]||(t[13]=e("label",{class:"block text-sm font-medium"},"Body",-1)),e("div",ie,[e("button",{onClick:P,disabled:!E.value,type:"button",class:"toolbar-btn",title:"Undo"},t[11]||(t[11]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 10h10a8 8 0 018 8v2M3 10l4-4m-4 4l4 4"})],-1)]),8,de),e("button",{onClick:D,disabled:!B.value,type:"button",class:"toolbar-btn",title:"Redo"},t[12]||(t[12]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M21 10h-10a8 8 0 00-8 8v2m18-10l-4-4m4 4l-4 4"})],-1)]),8,ue)])]),Q(te,{modelValue:o(n),"onUpdate:modelValue":t[2]||(t[2]=s=>A(n)?n.value=s:null)},null,8,["modelValue"])]),e("div",ce,[e("div",me,[t[15]||(t[15]=e("label",{for:"send-as-text",class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Send as plain text",-1)),e("button",{onClick:t[3]||(t[3]=s=>c.value=!o(c)),type:"button",class:g(["relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800",o(c)?"bg-blue-600":"bg-gray-200 dark:bg-gray-600"])},[t[14]||(t[14]=e("span",{class:"sr-only"},"Use plain text",-1)),e("span",{class:g(["pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out",o(c)?"translate-x-5":"translate-x-0"])},null,2)],2)]),e("div",ve,[t[17]||(t[17]=e("label",{for:"show-custom-prompt",class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Use Custom AI Prompt",-1)),e("button",{onClick:t[4]||(t[4]=s=>y.value=!y.value),type:"button",class:g(["relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800",y.value?"bg-blue-600":"bg-gray-200 dark:bg-gray-600"])},[t[16]||(t[16]=e("span",{class:"sr-only"},"Use Custom AI Prompt",-1)),e("span",{class:g(["pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out",y.value?"translate-x-5":"translate-x-0"])},null,2)],2)])]),y.value?x((b(),f("textarea",{key:0,"onUpdate:modelValue":t[5]||(t[5]=s=>j.value=s),rows:"3",class:"input-field mt-2",placeholder:"e.g., Rewrite this to be more casual and exciting..."},null,512)),[[L,j.value]]):K("",!0)]),e("div",be,[e("h4",fe,"Recipients ("+p(m.value.length)+"/"+p(h.value.length)+")",1),e("div",ge,[e("div",pe,[x(e("input",{id:"select-all-users",type:"checkbox","onUpdate:modelValue":t[6]||(t[6]=s=>M.value=s),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-600"},null,512),[[z,M.value]]),t[18]||(t[18]=e("label",{for:"select-all-users",class:"ml-3 block text-sm font-medium"},"Select All",-1))]),e("div",ye,[h.value.length>0?(b(),f("div",xe,[(b(!0),f(W,null,X(h.value,s=>(b(),f("div",{key:s.id,class:"p-2 flex items-center"},[x(e("input",{id:`user-${s.id}`,type:"checkbox",value:s.id,"onUpdate:modelValue":t[7]||(t[7]=q=>m.value=q),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-600"},null,8,ke),[[z,m.value]]),e("label",{for:`user-${s.id}`,class:"ml-3 text-sm"},[e("span",we,p(s.username),1),Y(" ("+p(s.email)+") ",1)],8,he)]))),128))])):(b(),f("div",_e," No eligible users found. "))])])])])],32)]),footer:T(()=>[e("div",Ce,[e("button",{type:"button",onClick:H,class:"btn btn-secondary flex items-center gap-2",disabled:o(U)||o(c)},[(b(),f("svg",{xmlns:"http://www.w3.org/2000/svg",class:g(["h-5 w-5",{"animate-spin":o(U)}]),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},t[19]||(t[19]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09zM18.259 8.715L18 9.75l-.259-1.035a3.375 3.375 0 00-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 002.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 002.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 00-2.456 2.456zM16.898 20.572L16.5 21.75l-.398-1.178a3.375 3.375 0 00-2.3-2.3L12.75 18l1.178-.398a3.375 3.375 0 002.3-2.3L16.5 14.25l.398 1.178a3.375 3.375 0 002.3 2.3l1.178.398-1.178.398a3.375 3.375 0 00-2.3 2.3z"},null,-1)]),2)),e("span",null,p(o(U)?"Enhancing...":"Enhance with AI"),1)],8,Ue),e("div",je,[e("button",{type:"button",class:"btn btn-secondary",onClick:t[8]||(t[8]=s=>o(d).closeModal("emailAllUsers"))},"Cancel"),e("button",{type:"button",onClick:$,class:"btn btn-primary",disabled:k.value},p(k.value?"Sending...":"Send Email"),9,Me)])])]),_:1}))}};export{$e as default};
frontend/dist/ui_assets/EmailAllUsersModal-BX_m21q_.js+1 −0 added@@ -0,0 +1 @@ +import{K as F,c as _,R,s as v,w as S,o as J,n as O,l as b,g as T,e,j as o,d as f,p as g,t as p,H as G,z as x,h as K,ak as A,L,f as W,Z as z,F as Z,i as Q,m as X}from"./index-BBRgbnZQ.js";import{_ as Y}from"./GenericModal-eXiOHk6I.js";import{u as ee}from"./admin-CwLQr1mG.js";import{_ as te}from"./WysiwygEditor-DXZt4x7X.js";/* empty css */import"./InsertImageModal-DO4axX76.js";const le={class:"grid grid-cols-1 md:grid-cols-3 gap-6"},se={class:"space-y-6 md:col-span-2"},oe={class:"flex items-center gap-4"},ae={class:"flex-grow"},ne=["disabled"],re={class:"flex items-center justify-between mb-1"},ie={class:"flex items-center gap-2"},de=["disabled"],ue=["disabled"],ce={class:"space-y-4"},me={class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},ve={class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},be={class:"space-y-4"},fe={class:"text-sm font-medium"},ge={class:"relative"},pe={class:"flex items-center p-2 border-b dark:border-gray-600"},ye={class:"max-h-96 overflow-y-auto border dark:border-gray-600 rounded-b-md"},xe={key:0,class:"divide-y dark:divide-gray-600"},ke=["id","value"],he=["for"],we={class:"font-medium"},_e={key:1,class:"p-4 text-center text-sm text-gray-500"},Ce={class:"flex justify-between items-center w-full"},Ue=["disabled"],je={class:"flex justify-end space-x-3"},Me=["disabled"],$e={__name:"EmailAllUsersModal",setup(Se){const d=F(),C=ee(),I=_(()=>d.modalData("emailAllUsers")),{isEnhancingEmail:U}=R(C),{emailModalSubject:a,emailModalBody:n,emailModalBackgroundColor:r,emailModalSendAsText:c}=R(d),j=v(""),y=v(!1),u=v([]),i=v(-1),k=v(!1),m=v([]),E=v([]),M=v(!0),V=_(()=>i.value>0),B=_(()=>i.value<u.value.length-1),h=_(()=>(E.value||[]).filter(l=>l.is_active&&l.email));S(I,l=>{l&&l.users&&(E.value=l.users,m.value=l.users.map(t=>t.id))},{immediate:!0,deep:!0}),J(()=>{w()}),S(M,l=>{l?m.value=h.value.map(t=>t.id):m.value=[]}),S([a,n,r],()=>{w()});function w(){const l={subject:a.value,body:n.value,backgroundColor:r.value};u.value.length>0&&JSON.stringify(l)===JSON.stringify(u.value[i.value])||(u.value.splice(i.value+1),u.value.push(l),i.value=u.value.length-1)}function N(l){a.value=l.subject,n.value=l.body,r.value=l.backgroundColor}function P(){V.value&&(i.value--,N(u.value[i.value]))}function D(){B.value&&(i.value++,N(u.value[i.value]))}async function H(){if(!a.value&&!n.value){d.addNotification("Please provide a subject or body to enhance.","warning");return}try{const l=await C.enhanceEmail(a.value,n.value,r.value,j.value);l&&(a.value=l.subject,n.value=l.body,r.value=l.background_color||r.value,w())}catch{}}async function $(){if(!a.value||!n.value){d.addNotification("Subject and body are required.","error");return}if(m.value.length===0){d.addNotification("Please select at least one user to email.","error");return}k.value=!0;try{await C.sendEmailToUsers(a.value,n.value,m.value,r.value,c.value),d.closeModal("emailAllUsers"),d.initEmailModalState(),u.value=[],i.value=-1,w()}catch{}finally{k.value=!1}}return(l,t)=>(b(),O(Y,{"modal-name":"emailAllUsers",title:"Email Users",onClose:t[9]||(t[9]=s=>o(d).closeModal("emailAllUsers")),maxWidthClass:"max-w-6xl"},{body:T(()=>[e("form",{onSubmit:G($,["prevent"]),class:"p-6 space-y-6"},[e("div",le,[e("div",se,[e("div",oe,[e("div",ae,[t[10]||(t[10]=e("label",{for:"email-subject",class:"block text-sm font-medium"},"Subject",-1)),x(e("input",{id:"email-subject","onUpdate:modelValue":t[0]||(t[0]=s=>A(a)?a.value=s:null),type:"text",class:"input-field mt-1",required:""},null,512),[[L,o(a)]])]),e("div",null,[e("label",{for:"email-bg-color",class:g(["block text-sm font-medium",{"text-gray-400 dark:text-gray-500":o(c)}])},"BG Color",2),x(e("input",{id:"email-bg-color","onUpdate:modelValue":t[1]||(t[1]=s=>A(r)?r.value=s:null),type:"color",class:"w-20 h-10 mt-1 p-1 border border-gray-300 dark:border-gray-600 rounded-md",disabled:o(c)},null,8,ne),[[L,o(r)]])])]),e("div",null,[e("div",re,[t[13]||(t[13]=e("label",{class:"block text-sm font-medium"},"Body",-1)),e("div",ie,[e("button",{onClick:P,disabled:!V.value,type:"button",class:"toolbar-btn",title:"Undo"},t[11]||(t[11]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 10h10a8 8 0 018 8v2M3 10l4-4m-4 4l4 4"})],-1)]),8,de),e("button",{onClick:D,disabled:!B.value,type:"button",class:"toolbar-btn",title:"Redo"},t[12]||(t[12]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M21 10h-10a8 8 0 00-8 8v2m18-10l-4-4m4 4l-4 4"})],-1)]),8,ue)])]),W(te,{modelValue:o(n),"onUpdate:modelValue":t[2]||(t[2]=s=>A(n)?n.value=s:null)},null,8,["modelValue"])]),e("div",ce,[e("div",me,[t[15]||(t[15]=e("label",{for:"send-as-text",class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Send as plain text",-1)),e("button",{onClick:t[3]||(t[3]=s=>c.value=!o(c)),type:"button",class:g(["relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800",o(c)?"bg-blue-600":"bg-gray-200 dark:bg-gray-600"])},[t[14]||(t[14]=e("span",{class:"sr-only"},"Use plain text",-1)),e("span",{class:g(["pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out",o(c)?"translate-x-5":"translate-x-0"])},null,2)],2)]),e("div",ve,[t[17]||(t[17]=e("label",{for:"show-custom-prompt",class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Use Custom AI Prompt",-1)),e("button",{onClick:t[4]||(t[4]=s=>y.value=!y.value),type:"button",class:g(["relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800",y.value?"bg-blue-600":"bg-gray-200 dark:bg-gray-600"])},[t[16]||(t[16]=e("span",{class:"sr-only"},"Use Custom AI Prompt",-1)),e("span",{class:g(["pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out",y.value?"translate-x-5":"translate-x-0"])},null,2)],2)])]),y.value?x((b(),f("textarea",{key:0,"onUpdate:modelValue":t[5]||(t[5]=s=>j.value=s),rows:"3",class:"input-field mt-2",placeholder:"e.g., Rewrite this to be more casual and exciting..."},null,512)),[[L,j.value]]):K("",!0)]),e("div",be,[e("h4",fe,"Recipients ("+p(m.value.length)+"/"+p(h.value.length)+")",1),e("div",ge,[e("div",pe,[x(e("input",{id:"select-all-users",type:"checkbox","onUpdate:modelValue":t[6]||(t[6]=s=>M.value=s),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-600"},null,512),[[z,M.value]]),t[18]||(t[18]=e("label",{for:"select-all-users",class:"ml-3 block text-sm font-medium"},"Select All",-1))]),e("div",ye,[h.value.length>0?(b(),f("div",xe,[(b(!0),f(Z,null,Q(h.value,s=>(b(),f("div",{key:s.id,class:"p-2 flex items-center"},[x(e("input",{id:`user-${s.id}`,type:"checkbox",value:s.id,"onUpdate:modelValue":t[7]||(t[7]=q=>m.value=q),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-600"},null,8,ke),[[z,m.value]]),e("label",{for:`user-${s.id}`,class:"ml-3 text-sm"},[e("span",we,p(s.username),1),X(" ("+p(s.email)+") ",1)],8,he)]))),128))])):(b(),f("div",_e," No eligible users found. "))])])])])],32)]),footer:T(()=>[e("div",Ce,[e("button",{type:"button",onClick:H,class:"btn btn-secondary flex items-center gap-2",disabled:o(U)||o(c)},[(b(),f("svg",{xmlns:"http://www.w3.org/2000/svg",class:g(["h-5 w-5",{"animate-spin":o(U)}]),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},t[19]||(t[19]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09zM18.259 8.715L18 9.75l-.259-1.035a3.375 3.375 0 00-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 002.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 002.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 00-2.456 2.456zM16.898 20.572L16.5 21.75l-.398-1.178a3.375 3.375 0 00-2.3-2.3L12.75 18l1.178-.398a3.375 3.375 0 002.3-2.3L16.5 14.25l.398 1.178a3.375 3.375 0 002.3 2.3l1.178.398-1.178.398a3.375 3.375 0 00-2.3 2.3z"},null,-1)]),2)),e("span",null,p(o(U)?"Enhancing...":"Enhance with AI"),1)],8,Ue),e("div",je,[e("button",{type:"button",class:"btn btn-secondary",onClick:t[8]||(t[8]=s=>o(d).closeModal("emailAllUsers"))},"Cancel"),e("button",{type:"button",onClick:$,class:"btn btn-primary",disabled:k.value},p(k.value?"Sending...":"Send Email"),9,Me)])])]),_:1}))}};export{$e as default};
frontend/dist/ui_assets/EmailListModal-Dp0HGRaB.js+1 −1 renamed@@ -1 +1 @@ -import{K as S,c as v,s as r,o as M,w as g,n as $,l as d,g as h,e as t,H as U,p as _,t as u,j as k,z as b,V as w,d as p,F as V,i as j,m as B,R as A}from"./index-CEXks4lv.js";import{_ as D}from"./GenericModal-Br5hR2Sz.js";const N={class:"p-6 space-y-4"},T={class:"space-y-2"},z={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},F={class:"relative border border-gray-200 dark:border-gray-600 rounded-md"},R={class:"flex items-center p-2 border-b border-gray-200 dark:border-gray-600"},H={class:"max-h-60 overflow-y-auto"},I={key:0,class:"divide-y divide-gray-200 dark:divide-gray-600"},K=["id","value"],O=["for"],W={class:"font-medium"},q={key:1,class:"p-4 text-center text-sm text-gray-500"},G={class:"flex items-center justify-between mb-1"},J={class:"flex items-center gap-2"},P=["value"],Q={class:"flex justify-between items-center w-full"},X=["href"],Y={class:"flex space-x-3"},Z=["disabled"],se={__name:"EmailListModal",setup(ee){const m=S(),C=v(()=>m.modalData("emailList")),a=r([]),o=r([]),n=r(!0),f=r(",");M(()=>{var l;a.value=((l=C.value)==null?void 0:l.users)||[],o.value=a.value.map(e=>e.id)}),g(n,l=>{l?o.value=a.value.map(e=>e.id):o.value=[]}),g(o,l=>{l.length===a.value.length&&l.length>0?n.value=!0:l.length===0&&(n.value=!1)},{deep:!0});const i=v(()=>a.value.filter(l=>o.value.includes(l.id)).map(l=>l.email).filter(Boolean)),y=v(()=>i.value.join(f.value+" ")),x=v(()=>`mailto:?bcc=${i.value.join(",")}`),c=r(!1);function L(){i.value.length!==0&&m.copyToClipboard(y.value).then(l=>{l&&(c.value=!0,setTimeout(()=>{c.value=!1},2e3))})}return(l,e)=>(d(),$(D,{"modal-name":"emailList",title:"Copy Email List",onClose:e[5]||(e[5]=s=>k(m).closeModal("emailList")),maxWidthClass:"max-w-2xl"},{body:h(()=>[t("div",N,[t("div",T,[t("h4",z,"Recipients ("+u(o.value.length)+" / "+u(a.value.length)+")",1),t("div",F,[t("div",R,[b(t("input",{id:"select-all-manual",type:"checkbox","onUpdate:modelValue":e[0]||(e[0]=s=>n.value=s),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-600"},null,512),[[w,n.value]]),e[6]||(e[6]=t("label",{for:"select-all-manual",class:"ml-3 block text-sm font-medium text-gray-700 dark:text-gray-200"},"Select All",-1))]),t("div",H,[a.value.length>0?(d(),p("div",I,[(d(!0),p(V,null,j(a.value,s=>(d(),p("div",{key:s.id,class:"p-2 flex items-center"},[b(t("input",{id:`manual-user-${s.id}`,type:"checkbox",value:s.id,"onUpdate:modelValue":e[1]||(e[1]=E=>o.value=E),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-600"},null,8,K),[[w,o.value]]),t("label",{for:`manual-user-${s.id}`,class:"ml-3 text-sm text-gray-600 dark:text-gray-300"},[t("span",W,u(s.username),1),B(" ("+u(s.email)+") ",1)],8,O)]))),128))])):(d(),p("div",q," No users to list. "))])])]),t("div",null,[t("div",G,[e[9]||(e[9]=t("label",{for:"email-list-area",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Selected Emails",-1)),t("div",J,[e[8]||(e[8]=t("label",{for:"separator",class:"text-sm"},"Separator:",-1)),b(t("select",{id:"separator","onUpdate:modelValue":e[2]||(e[2]=s=>f.value=s),class:"input-field !py-1 !px-2 text-sm"},e[7]||(e[7]=[t("option",{value:","},"Comma",-1),t("option",{value:";"},"Semicolon",-1)]),512),[[A,f.value]])])]),t("textarea",{id:"email-list-area",value:y.value,rows:"5",readonly:"",class:"input-field mt-1 font-mono text-xs",placeholder:"Select users to see their emails here..."},null,8,P)])])]),footer:h(()=>[t("div",Q,[t("a",{href:x.value,target:"_blank",class:_(["btn btn-secondary",{"opacity-50 cursor-not-allowed":i.value.length===0}]),onClick:e[3]||(e[3]=U(s=>i.value.length>0&&(l.window.location.href=x.value),["prevent"]))}," Open in Email App ",10,X),e[10]||(e[10]=t("div",{class:"flex-grow"},null,-1)),t("div",Y,[t("button",{type:"button",onClick:L,class:_(["btn",c.value?"btn-success":"btn-secondary"]),disabled:i.value.length===0},u(c.value?"Copied!":"Copy List"),11,Z),t("button",{type:"button",class:"btn btn-primary",onClick:e[4]||(e[4]=s=>k(m).closeModal("emailList"))}," Done ")])])]),_:1}))}};export{se as default}; +import{K as S,c as v,s as r,o as M,w as g,n as $,l as d,g as h,e as t,H as U,p as _,t as u,j as k,z as b,Z as w,d as p,F as j,i as B,m as V,X as A}from"./index-BBRgbnZQ.js";import{_ as D}from"./GenericModal-eXiOHk6I.js";const N={class:"p-6 space-y-4"},T={class:"space-y-2"},z={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},F={class:"relative border border-gray-200 dark:border-gray-600 rounded-md"},H={class:"flex items-center p-2 border-b border-gray-200 dark:border-gray-600"},I={class:"max-h-60 overflow-y-auto"},K={key:0,class:"divide-y divide-gray-200 dark:divide-gray-600"},O=["id","value"],R=["for"],W={class:"font-medium"},X={key:1,class:"p-4 text-center text-sm text-gray-500"},Z={class:"flex items-center justify-between mb-1"},q={class:"flex items-center gap-2"},G=["value"],J={class:"flex justify-between items-center w-full"},P=["href"],Q={class:"flex space-x-3"},Y=["disabled"],se={__name:"EmailListModal",setup(ee){const m=S(),C=v(()=>m.modalData("emailList")),a=r([]),o=r([]),n=r(!0),f=r(",");M(()=>{var l;a.value=((l=C.value)==null?void 0:l.users)||[],o.value=a.value.map(e=>e.id)}),g(n,l=>{l?o.value=a.value.map(e=>e.id):o.value=[]}),g(o,l=>{l.length===a.value.length&&l.length>0?n.value=!0:l.length===0&&(n.value=!1)},{deep:!0});const i=v(()=>a.value.filter(l=>o.value.includes(l.id)).map(l=>l.email).filter(Boolean)),y=v(()=>i.value.join(f.value+" ")),x=v(()=>`mailto:?bcc=${i.value.join(",")}`),c=r(!1);function L(){i.value.length!==0&&m.copyToClipboard(y.value).then(l=>{l&&(c.value=!0,setTimeout(()=>{c.value=!1},2e3))})}return(l,e)=>(d(),$(D,{"modal-name":"emailList",title:"Copy Email List",onClose:e[5]||(e[5]=s=>k(m).closeModal("emailList")),maxWidthClass:"max-w-2xl"},{body:h(()=>[t("div",N,[t("div",T,[t("h4",z,"Recipients ("+u(o.value.length)+" / "+u(a.value.length)+")",1),t("div",F,[t("div",H,[b(t("input",{id:"select-all-manual",type:"checkbox","onUpdate:modelValue":e[0]||(e[0]=s=>n.value=s),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-600"},null,512),[[w,n.value]]),e[6]||(e[6]=t("label",{for:"select-all-manual",class:"ml-3 block text-sm font-medium text-gray-700 dark:text-gray-200"},"Select All",-1))]),t("div",I,[a.value.length>0?(d(),p("div",K,[(d(!0),p(j,null,B(a.value,s=>(d(),p("div",{key:s.id,class:"p-2 flex items-center"},[b(t("input",{id:`manual-user-${s.id}`,type:"checkbox",value:s.id,"onUpdate:modelValue":e[1]||(e[1]=E=>o.value=E),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-600"},null,8,O),[[w,o.value]]),t("label",{for:`manual-user-${s.id}`,class:"ml-3 text-sm text-gray-600 dark:text-gray-300"},[t("span",W,u(s.username),1),V(" ("+u(s.email)+") ",1)],8,R)]))),128))])):(d(),p("div",X," No users to list. "))])])]),t("div",null,[t("div",Z,[e[9]||(e[9]=t("label",{for:"email-list-area",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Selected Emails",-1)),t("div",q,[e[8]||(e[8]=t("label",{for:"separator",class:"text-sm"},"Separator:",-1)),b(t("select",{id:"separator","onUpdate:modelValue":e[2]||(e[2]=s=>f.value=s),class:"input-field !py-1 !px-2 text-sm"},e[7]||(e[7]=[t("option",{value:","},"Comma",-1),t("option",{value:";"},"Semicolon",-1)]),512),[[A,f.value]])])]),t("textarea",{id:"email-list-area",value:y.value,rows:"5",readonly:"",class:"input-field mt-1 font-mono text-xs",placeholder:"Select users to see their emails here..."},null,8,G)])])]),footer:h(()=>[t("div",J,[t("a",{href:x.value,target:"_blank",class:_(["btn btn-secondary",{"opacity-50 cursor-not-allowed":i.value.length===0}]),onClick:e[3]||(e[3]=U(s=>i.value.length>0&&(l.window.location.href=x.value),["prevent"]))}," Open in Email App ",10,P),e[10]||(e[10]=t("div",{class:"flex-grow"},null,-1)),t("div",Q,[t("button",{type:"button",onClick:L,class:_(["btn",c.value?"btn-success":"btn-secondary"]),disabled:i.value.length===0},u(c.value?"Copied!":"Copy List"),11,Y),t("button",{type:"button",class:"btn btn-primary",onClick:e[4]||(e[4]=s=>k(m).closeModal("emailList"))}," Done ")])])]),_:1}))}};export{se as default};
frontend/dist/ui_assets/EmailSettings-BnEWhzQU.js+1 −1 renamed@@ -1 +1 @@ -import{s as y,c as w,o as k,w as c,d,l as i,e,H as S,z as o,R as M,h as g,m as u,L as n,V as h,t as _,j as T}from"./index-CEXks4lv.js";import{u as P}from"./admin-Dmx5gjU7.js";const V={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},U={class:"space-y-8"},E={class:"mt-4"},L={key:0,class:"p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},C={key:1,class:"p-4 bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800/50 rounded-lg"},N={key:2,class:"space-y-6 pt-4"},A={class:"grid grid-cols-1 gap-y-6 sm:grid-cols-2 sm:gap-x-6"},F={class:"sm:col-span-2"},O={class:"sm:col-span-2"},j={class:"sm:col-span-2"},B={class:"relative flex items-start"},q={class:"flex h-6 items-center"},D={class:"mt-8 pt-5 border-t border-gray-200 dark:border-gray-700"},G={class:"flex justify-end"},H=["disabled"],I={key:1,class:"p-6 text-center"},J={class:"text-gray-500"},K={__name:"EmailSettings",setup(R){const r=P(),s=y({}),m=y(!1),p=y(!1);let v="{}";const b=w(()=>r.globalSettings.filter(a=>a.category==="Email Settings"||a.key==="password_recovery_mode"));k(()=>{r.globalSettings.length===0?r.fetchGlobalSettings():f()}),c(()=>r.globalSettings,f,{deep:!0}),c(s,a=>{p.value=JSON.stringify(a)!==v},{deep:!0});function f(){const a={};b.value.length>0&&(b.value.forEach(t=>{a[t.key]=t.value}),s.value=a,v=JSON.stringify(s.value),p.value=!1)}async function x(){m.value=!0;try{const a={...s.value};(a.smtp_password===null||a.smtp_password==="")&&delete a.smtp_password,await r.updateGlobalSettings(a),a.smtp_password&&(s.value.smtp_password="")}catch{}finally{m.value=!1}}return(a,t)=>(i(),d("div",V,[t[18]||(t[18]=e("div",{class:"p-6 border-b border-gray-200 dark:border-gray-700"},[e("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," Email & Password Recovery "),e("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Configure the method for sending system emails and managing password recovery. ")],-1)),Object.keys(s.value).length?(i(),d("form",{key:0,onSubmit:S(x,["prevent"]),class:"p-6"},[e("div",U,[e("div",null,[t[8]||(t[8]=e("label",{for:"password_recovery_mode",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Email Sending Method",-1)),o(e("select",{id:"password_recovery_mode","onUpdate:modelValue":t[0]||(t[0]=l=>s.value.password_recovery_mode=l),class:"input-field mt-1"},t[7]||(t[7]=[e("option",{value:"manual"},"Manual (Admin Managed)",-1),e("option",{value:"automatic"},"SMTP Server",-1),e("option",{value:"system_mail"},"System Mail Command",-1),e("option",{value:"outlook"},"Outlook (Windows only)",-1)]),512),[[M,s.value.password_recovery_mode]])]),e("div",E,[s.value.password_recovery_mode==="manual"?(i(),d("div",L,t[9]||(t[9]=[e("p",{class:"text-sm text-gray-600 dark:text-gray-300"},[u(" In "),e("span",{class:"font-semibold"},"Manual Mode"),u(", the system will not send any emails. When a user requests a password reset, a notification will be sent to administrators in the UI. Admins must then manually generate a reset link and send it to the user. ")],-1)]))):g("",!0),s.value.password_recovery_mode==="system_mail"?(i(),d("div",C,t[10]||(t[10]=[e("p",{class:"text-sm text-yellow-800 dark:text-yellow-200"},[e("span",{class:"font-semibold"},"System Mail Mode"),u(" uses the server's built-in `mail` command (e.g., from `mailutils`). This is a simpler alternative to SMTP but requires the command to be installed and properly configured on the server's operating system. ")],-1)]))):g("",!0),s.value.password_recovery_mode==="automatic"?(i(),d("div",N,[t[17]||(t[17]=e("div",{class:"p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800/50 rounded-lg"},[e("p",{class:"text-sm text-blue-800 dark:text-blue-200"},[e("span",{class:"font-semibold"},"SMTP Mode"),u(" provides the most reliable way to send emails. Fill in your SMTP provider's details below. ")])],-1)),e("div",A,[e("div",null,[t[11]||(t[11]=e("label",{for:"smtp_host",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"SMTP Host",-1)),o(e("input",{type:"text",id:"smtp_host","onUpdate:modelValue":t[1]||(t[1]=l=>s.value.smtp_host=l),class:"input-field mt-1"},null,512),[[n,s.value.smtp_host]])]),e("div",null,[t[12]||(t[12]=e("label",{for:"smtp_port",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"SMTP Port",-1)),o(e("input",{type:"number",id:"smtp_port","onUpdate:modelValue":t[2]||(t[2]=l=>s.value.smtp_port=l),class:"input-field mt-1"},null,512),[[n,s.value.smtp_port]])]),e("div",F,[t[13]||(t[13]=e("label",{for:"smtp_from_email",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"From Email Address",-1)),o(e("input",{type:"email",id:"smtp_from_email","onUpdate:modelValue":t[3]||(t[3]=l=>s.value.smtp_from_email=l),class:"input-field mt-1"},null,512),[[n,s.value.smtp_from_email]])]),e("div",O,[t[14]||(t[14]=e("label",{for:"smtp_user",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"SMTP Username",-1)),o(e("input",{type:"text",id:"smtp_user","onUpdate:modelValue":t[4]||(t[4]=l=>s.value.smtp_user=l),class:"input-field mt-1",autocomplete:"off"},null,512),[[n,s.value.smtp_user]])]),e("div",j,[t[15]||(t[15]=e("label",{for:"smtp_password",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"SMTP Password",-1)),o(e("input",{type:"password",id:"smtp_password","onUpdate:modelValue":t[5]||(t[5]=l=>s.value.smtp_password=l),class:"input-field mt-1",placeholder:"Leave blank to keep existing password",autocomplete:"new-password"},null,512),[[n,s.value.smtp_password]])]),e("div",B,[e("div",q,[o(e("input",{id:"smtp_use_tls","onUpdate:modelValue":t[6]||(t[6]=l=>s.value.smtp_use_tls=l),type:"checkbox",class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-600"},null,512),[[h,s.value.smtp_use_tls]])]),t[16]||(t[16]=e("div",{class:"ml-3 text-sm leading-6"},[e("label",{for:"smtp_use_tls",class:"font-medium text-gray-900 dark:text-gray-100"},"Use TLS"),e("p",{class:"text-gray-500 dark:text-gray-400"},"Enable TLS encryption for the connection.")],-1))])])])):g("",!0)])]),e("div",D,[e("div",G,[e("button",{type:"submit",class:"btn btn-primary",disabled:m.value||!p.value},_(m.value?"Saving...":"Save Settings"),9,H)])])],32)):(i(),d("div",I,[e("p",J,_(T(r).isLoadingSettings?"Loading settings...":"Could not load email settings."),1)]))]))}};export{K as default}; +import{s as y,c as w,o as k,w as c,d,l as i,e,H as S,z as o,X as M,h as g,m as u,L as n,Z as h,t as _,j as T}from"./index-BBRgbnZQ.js";import{u as P}from"./admin-CwLQr1mG.js";const U={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},V={class:"space-y-8"},E={class:"mt-4"},L={key:0,class:"p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},C={key:1,class:"p-4 bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800/50 rounded-lg"},N={key:2,class:"space-y-6 pt-4"},A={class:"grid grid-cols-1 gap-y-6 sm:grid-cols-2 sm:gap-x-6"},F={class:"sm:col-span-2"},O={class:"sm:col-span-2"},j={class:"sm:col-span-2"},B={class:"relative flex items-start"},q={class:"flex h-6 items-center"},D={class:"mt-8 pt-5 border-t border-gray-200 dark:border-gray-700"},G={class:"flex justify-end"},H=["disabled"],I={key:1,class:"p-6 text-center"},J={class:"text-gray-500"},X={__name:"EmailSettings",setup(W){const r=P(),s=y({}),m=y(!1),p=y(!1);let v="{}";const b=w(()=>r.globalSettings.filter(a=>a.category==="Email Settings"||a.key==="password_recovery_mode"));k(()=>{r.globalSettings.length===0?r.fetchGlobalSettings():f()}),c(()=>r.globalSettings,f,{deep:!0}),c(s,a=>{p.value=JSON.stringify(a)!==v},{deep:!0});function f(){const a={};b.value.length>0&&(b.value.forEach(t=>{a[t.key]=t.value}),s.value=a,v=JSON.stringify(s.value),p.value=!1)}async function x(){m.value=!0;try{const a={...s.value};(a.smtp_password===null||a.smtp_password==="")&&delete a.smtp_password,await r.updateGlobalSettings(a),a.smtp_password&&(s.value.smtp_password="")}catch{}finally{m.value=!1}}return(a,t)=>(i(),d("div",U,[t[18]||(t[18]=e("div",{class:"p-6 border-b border-gray-200 dark:border-gray-700"},[e("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," Email & Password Recovery "),e("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Configure the method for sending system emails and managing password recovery. ")],-1)),Object.keys(s.value).length?(i(),d("form",{key:0,onSubmit:S(x,["prevent"]),class:"p-6"},[e("div",V,[e("div",null,[t[8]||(t[8]=e("label",{for:"password_recovery_mode",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Email Sending Method",-1)),o(e("select",{id:"password_recovery_mode","onUpdate:modelValue":t[0]||(t[0]=l=>s.value.password_recovery_mode=l),class:"input-field mt-1"},t[7]||(t[7]=[e("option",{value:"manual"},"Manual (Admin Managed)",-1),e("option",{value:"automatic"},"SMTP Server",-1),e("option",{value:"system_mail"},"System Mail Command",-1),e("option",{value:"outlook"},"Outlook (Windows only)",-1)]),512),[[M,s.value.password_recovery_mode]])]),e("div",E,[s.value.password_recovery_mode==="manual"?(i(),d("div",L,t[9]||(t[9]=[e("p",{class:"text-sm text-gray-600 dark:text-gray-300"},[u(" In "),e("span",{class:"font-semibold"},"Manual Mode"),u(", the system will not send any emails. When a user requests a password reset, a notification will be sent to administrators in the UI. Admins must then manually generate a reset link and send it to the user. ")],-1)]))):g("",!0),s.value.password_recovery_mode==="system_mail"?(i(),d("div",C,t[10]||(t[10]=[e("p",{class:"text-sm text-yellow-800 dark:text-yellow-200"},[e("span",{class:"font-semibold"},"System Mail Mode"),u(" uses the server's built-in `mail` command (e.g., from `mailutils`). This is a simpler alternative to SMTP but requires the command to be installed and properly configured on the server's operating system. ")],-1)]))):g("",!0),s.value.password_recovery_mode==="automatic"?(i(),d("div",N,[t[17]||(t[17]=e("div",{class:"p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800/50 rounded-lg"},[e("p",{class:"text-sm text-blue-800 dark:text-blue-200"},[e("span",{class:"font-semibold"},"SMTP Mode"),u(" provides the most reliable way to send emails. Fill in your SMTP provider's details below. ")])],-1)),e("div",A,[e("div",null,[t[11]||(t[11]=e("label",{for:"smtp_host",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"SMTP Host",-1)),o(e("input",{type:"text",id:"smtp_host","onUpdate:modelValue":t[1]||(t[1]=l=>s.value.smtp_host=l),class:"input-field mt-1"},null,512),[[n,s.value.smtp_host]])]),e("div",null,[t[12]||(t[12]=e("label",{for:"smtp_port",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"SMTP Port",-1)),o(e("input",{type:"number",id:"smtp_port","onUpdate:modelValue":t[2]||(t[2]=l=>s.value.smtp_port=l),class:"input-field mt-1"},null,512),[[n,s.value.smtp_port]])]),e("div",F,[t[13]||(t[13]=e("label",{for:"smtp_from_email",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"From Email Address",-1)),o(e("input",{type:"email",id:"smtp_from_email","onUpdate:modelValue":t[3]||(t[3]=l=>s.value.smtp_from_email=l),class:"input-field mt-1"},null,512),[[n,s.value.smtp_from_email]])]),e("div",O,[t[14]||(t[14]=e("label",{for:"smtp_user",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"SMTP Username",-1)),o(e("input",{type:"text",id:"smtp_user","onUpdate:modelValue":t[4]||(t[4]=l=>s.value.smtp_user=l),class:"input-field mt-1",autocomplete:"off"},null,512),[[n,s.value.smtp_user]])]),e("div",j,[t[15]||(t[15]=e("label",{for:"smtp_password",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"SMTP Password",-1)),o(e("input",{type:"password",id:"smtp_password","onUpdate:modelValue":t[5]||(t[5]=l=>s.value.smtp_password=l),class:"input-field mt-1",placeholder:"Leave blank to keep existing password",autocomplete:"new-password"},null,512),[[n,s.value.smtp_password]])]),e("div",B,[e("div",q,[o(e("input",{id:"smtp_use_tls","onUpdate:modelValue":t[6]||(t[6]=l=>s.value.smtp_use_tls=l),type:"checkbox",class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-600"},null,512),[[h,s.value.smtp_use_tls]])]),t[16]||(t[16]=e("div",{class:"ml-3 text-sm leading-6"},[e("label",{for:"smtp_use_tls",class:"font-medium text-gray-900 dark:text-gray-100"},"Use TLS"),e("p",{class:"text-gray-500 dark:text-gray-400"},"Enable TLS encryption for the connection.")],-1))])])])):g("",!0)])]),e("div",D,[e("div",G,[e("button",{type:"submit",class:"btn btn-primary",disabled:m.value||!p.value},_(m.value?"Saving...":"Save Settings"),9,H)])])],32)):(i(),d("div",I,[e("p",J,_(T(r).isLoadingSettings?"Loading settings...":"Could not load email settings."),1)]))]))}};export{X as default};
frontend/dist/ui_assets/EmailUserModal-CRj1pKZb.js+1 −1 renamed@@ -1 +1 @@ -import{K as V,Q as U,c as g,s as y,n as $,l as c,g as L,e as t,j as a,d as x,p as u,t as M,h as _,H as A,z as k,ak as w,L as h,f as z}from"./index-CEXks4lv.js";import{_ as N}from"./GenericModal-Br5hR2Sz.js";import{u as P}from"./admin-Dmx5gjU7.js";import{_ as T}from"./WysiwygEditor-CLoAF0GT.js";/* empty css */import"./InsertImageModal-09ZrJLXN.js";const D={class:"flex items-center gap-4"},R={class:"flex-grow"},q=["disabled"],I={class:"space-y-4"},G={class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},H={class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},K={class:"flex justify-between items-center w-full"},Q=["disabled"],W={class:"flex justify-end space-x-3"},F=["disabled"],ae={__name:"EmailUserModal",setup(J){const i=V(),C=P(),{isEnhancingEmail:f}=U(C),{emailModalSubject:o,emailModalBody:n,emailModalBackgroundColor:d,emailModalSendAsText:r}=U(i),E=g(()=>i.modalData("adminUserEmail")),p=g(()=>{var l;return(l=E.value)==null?void 0:l.user}),S=g(()=>{var l;return(l=E.value)==null?void 0:l.onSend}),v=y(""),m=y(!1),b=y(!1);async function B(){if(!o.value&&!n.value){i.addNotification("Please provide a subject or body to enhance.","warning");return}try{const l=await C.enhanceEmail(o.value,n.value,d.value,v.value);l&&(o.value=l.subject,n.value=l.body,d.value=l.background_color||d.value)}catch{}}async function j(){if(!o.value||!n.value){i.addNotification("Subject and body are required.","error");return}b.value=!0;try{S.value&&await S.value({subject:o.value,body:n.value,backgroundColor:d.value,sendAsText:r.value}),i.closeModal("adminUserEmail")}catch{}finally{b.value=!1}}return(l,e)=>(c(),$(N,{"modal-name":"adminUserEmail",title:p.value?`Email User: ${p.value.username}`:"Email User",onClose:e[7]||(e[7]=s=>a(i).closeModal("adminUserEmail")),maxWidthClass:"max-w-4xl"},{body:L(()=>[p.value?(c(),x("form",{key:0,onSubmit:A(j,["prevent"]),class:"p-6 space-y-6"},[t("div",D,[t("div",R,[e[8]||(e[8]=t("label",{for:"user-email-subject",class:"block text-sm font-medium"},"Subject",-1)),k(t("input",{id:"user-email-subject","onUpdate:modelValue":e[0]||(e[0]=s=>w(o)?o.value=s:null),type:"text",class:"input-field mt-1",required:""},null,512),[[h,a(o)]])]),t("div",null,[t("label",{for:"user-email-bg-color",class:u(["block text-sm font-medium",{"text-gray-400 dark:text-gray-500":a(r)}])},"BG Color",2),k(t("input",{id:"user-email-bg-color","onUpdate:modelValue":e[1]||(e[1]=s=>w(d)?d.value=s:null),type:"color",class:"w-20 h-10 mt-1 p-1 border border-gray-300 dark:border-gray-600 rounded-md",disabled:a(r)},null,8,q),[[h,a(d)]])])]),t("div",null,[e[9]||(e[9]=t("label",{class:"block text-sm font-medium mb-1"},"Body",-1)),z(T,{modelValue:a(n),"onUpdate:modelValue":e[2]||(e[2]=s=>w(n)?n.value=s:null)},null,8,["modelValue"])]),t("div",I,[t("div",G,[e[10]||(e[10]=t("label",{for:"user-send-as-text",class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Send as plain text",-1)),t("button",{onClick:e[3]||(e[3]=s=>r.value=!a(r)),type:"button",class:u(["relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out",a(r)?"bg-blue-600":"bg-gray-200 dark:bg-gray-600"])},[t("span",{class:u(["pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition",a(r)?"translate-x-5":"translate-x-0"])},null,2)],2)]),t("div",H,[e[11]||(e[11]=t("label",{for:"user-show-custom-prompt",class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Use Custom AI Prompt",-1)),t("button",{onClick:e[4]||(e[4]=s=>m.value=!m.value),type:"button",class:u(["relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out",m.value?"bg-blue-600":"bg-gray-200 dark:bg-gray-600"])},[t("span",{class:u(["pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition",m.value?"translate-x-5":"translate-x-0"])},null,2)],2)])]),m.value?k((c(),x("textarea",{key:0,"onUpdate:modelValue":e[5]||(e[5]=s=>v.value=s),rows:"3",class:"input-field mt-2",placeholder:"e.g., Rewrite this to be more professional..."},null,512)),[[h,v.value]]):_("",!0)],32)):_("",!0)]),footer:L(()=>[t("div",K,[t("button",{type:"button",onClick:B,class:"btn btn-secondary flex items-center gap-2",disabled:a(f)||a(r)},[(c(),x("svg",{xmlns:"http://www.w3.org/2000/svg",class:u(["h-5 w-5",{"animate-spin":a(f)}]),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},e[12]||(e[12]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09zM18.259 8.715L18 9.75l-.259-1.035a3.375 3.375 0 00-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 002.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 002.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 00-2.456 2.456zM16.898 20.572L16.5 21.75l-.398-1.178a3.375 3.375 0 00-2.3-2.3L12.75 18l1.178-.398a3.375 3.375 0 002.3-2.3L16.5 14.25l.398 1.178a3.375 3.375 0 002.3 2.3l1.178.398-1.178.398a3.375 3.375 0 00-2.3 2.3z"},null,-1)]),2)),t("span",null,M(a(f)?"Enhancing...":"Enhance with AI"),1)],8,Q),t("div",W,[t("button",{type:"button",class:"btn btn-secondary",onClick:e[6]||(e[6]=s=>a(i).closeModal("adminUserEmail"))},"Cancel"),t("button",{type:"button",onClick:j,class:"btn btn-primary",disabled:b.value},M(b.value?"Sending...":"Send Email"),9,F)])])]),_:1},8,["title"]))}};export{ae as default}; +import{K as V,R as U,c as g,s as y,n as $,l as c,g as L,e as t,j as a,d as x,p as u,t as M,h as _,H as A,z as k,ak as w,L as h,f as z}from"./index-BBRgbnZQ.js";import{_ as N}from"./GenericModal-eXiOHk6I.js";import{u as P}from"./admin-CwLQr1mG.js";import{_ as T}from"./WysiwygEditor-DXZt4x7X.js";/* empty css */import"./InsertImageModal-DO4axX76.js";const R={class:"flex items-center gap-4"},D={class:"flex-grow"},q=["disabled"],I={class:"space-y-4"},G={class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},H={class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},K={class:"flex justify-between items-center w-full"},W=["disabled"],F={class:"flex justify-end space-x-3"},J=["disabled"],ae={__name:"EmailUserModal",setup(O){const i=V(),C=P(),{isEnhancingEmail:f}=U(C),{emailModalSubject:o,emailModalBody:n,emailModalBackgroundColor:d,emailModalSendAsText:r}=U(i),E=g(()=>i.modalData("adminUserEmail")),p=g(()=>{var l;return(l=E.value)==null?void 0:l.user}),S=g(()=>{var l;return(l=E.value)==null?void 0:l.onSend}),v=y(""),m=y(!1),b=y(!1);async function B(){if(!o.value&&!n.value){i.addNotification("Please provide a subject or body to enhance.","warning");return}try{const l=await C.enhanceEmail(o.value,n.value,d.value,v.value);l&&(o.value=l.subject,n.value=l.body,d.value=l.background_color||d.value)}catch{}}async function j(){if(!o.value||!n.value){i.addNotification("Subject and body are required.","error");return}b.value=!0;try{S.value&&await S.value({subject:o.value,body:n.value,backgroundColor:d.value,sendAsText:r.value}),i.closeModal("adminUserEmail")}catch{}finally{b.value=!1}}return(l,e)=>(c(),$(N,{"modal-name":"adminUserEmail",title:p.value?`Email User: ${p.value.username}`:"Email User",onClose:e[7]||(e[7]=s=>a(i).closeModal("adminUserEmail")),maxWidthClass:"max-w-4xl"},{body:L(()=>[p.value?(c(),x("form",{key:0,onSubmit:A(j,["prevent"]),class:"p-6 space-y-6"},[t("div",R,[t("div",D,[e[8]||(e[8]=t("label",{for:"user-email-subject",class:"block text-sm font-medium"},"Subject",-1)),k(t("input",{id:"user-email-subject","onUpdate:modelValue":e[0]||(e[0]=s=>w(o)?o.value=s:null),type:"text",class:"input-field mt-1",required:""},null,512),[[h,a(o)]])]),t("div",null,[t("label",{for:"user-email-bg-color",class:u(["block text-sm font-medium",{"text-gray-400 dark:text-gray-500":a(r)}])},"BG Color",2),k(t("input",{id:"user-email-bg-color","onUpdate:modelValue":e[1]||(e[1]=s=>w(d)?d.value=s:null),type:"color",class:"w-20 h-10 mt-1 p-1 border border-gray-300 dark:border-gray-600 rounded-md",disabled:a(r)},null,8,q),[[h,a(d)]])])]),t("div",null,[e[9]||(e[9]=t("label",{class:"block text-sm font-medium mb-1"},"Body",-1)),z(T,{modelValue:a(n),"onUpdate:modelValue":e[2]||(e[2]=s=>w(n)?n.value=s:null)},null,8,["modelValue"])]),t("div",I,[t("div",G,[e[10]||(e[10]=t("label",{for:"user-send-as-text",class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Send as plain text",-1)),t("button",{onClick:e[3]||(e[3]=s=>r.value=!a(r)),type:"button",class:u(["relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out",a(r)?"bg-blue-600":"bg-gray-200 dark:bg-gray-600"])},[t("span",{class:u(["pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition",a(r)?"translate-x-5":"translate-x-0"])},null,2)],2)]),t("div",H,[e[11]||(e[11]=t("label",{for:"user-show-custom-prompt",class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Use Custom AI Prompt",-1)),t("button",{onClick:e[4]||(e[4]=s=>m.value=!m.value),type:"button",class:u(["relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out",m.value?"bg-blue-600":"bg-gray-200 dark:bg-gray-600"])},[t("span",{class:u(["pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition",m.value?"translate-x-5":"translate-x-0"])},null,2)],2)])]),m.value?k((c(),x("textarea",{key:0,"onUpdate:modelValue":e[5]||(e[5]=s=>v.value=s),rows:"3",class:"input-field mt-2",placeholder:"e.g., Rewrite this to be more professional..."},null,512)),[[h,v.value]]):_("",!0)],32)):_("",!0)]),footer:L(()=>[t("div",K,[t("button",{type:"button",onClick:B,class:"btn btn-secondary flex items-center gap-2",disabled:a(f)||a(r)},[(c(),x("svg",{xmlns:"http://www.w3.org/2000/svg",class:u(["h-5 w-5",{"animate-spin":a(f)}]),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},e[12]||(e[12]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09zM18.259 8.715L18 9.75l-.259-1.035a3.375 3.375 0 00-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 002.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 002.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 00-2.456 2.456zM16.898 20.572L16.5 21.75l-.398-1.178a3.375 3.375 0 00-2.3-2.3L12.75 18l1.178-.398a3.375 3.375 0 002.3-2.3L16.5 14.25l.398 1.178a3.375 3.375 0 002.3 2.3l1.178.398-1.178.398a3.375 3.375 0 00-2.3 2.3z"},null,-1)]),2)),t("span",null,M(a(f)?"Enhancing...":"Enhance with AI"),1)],8,W),t("div",F,[t("button",{type:"button",class:"btn btn-secondary",onClick:e[6]||(e[6]=s=>a(i).closeModal("adminUserEmail"))},"Cancel"),t("button",{type:"button",onClick:j,class:"btn btn-primary",disabled:b.value},M(b.value?"Sending...":"Send Email"),9,J)])])]),_:1},8,["title"]))}};export{ae as default};
frontend/dist/ui_assets/EnhancePersonalityPromptModal-DaWn29st.js+1 −0 added@@ -0,0 +1 @@ +import{K as O,P as D,Q as N,c as m,s as f,w,n as L,l as s,g as P,d as o,h as r,e,t as i,z as M,L as B,f as F,an as R,a4 as V,F as S,i as C,m as z,p as j}from"./index-BBRgbnZQ.js";import{_ as J}from"./GenericModal-eXiOHk6I.js";const U={class:"p-6 space-y-6"},$={key:0,class:"space-y-4"},K={class:"mt-1 text-sm text-gray-600 dark:text-gray-400 p-3 bg-gray-50 dark:bg-gray-700/50 rounded-md whitespace-pre-wrap font-mono max-h-40 overflow-y-auto"},Q={key:1,class:"space-y-4"},W={class:"flex items-center space-x-3 text-lg font-semibold"},q={key:0},G={class:"w-full bg-gray-200 rounded-full dark:bg-gray-700 h-2.5"},H={class:"text-center text-sm mt-2"},X={key:0,class:"mt-4 max-h-40 overflow-y-auto bg-gray-900 text-white font-mono text-xs p-3 rounded-md"},Y={class:"text-gray-500 mr-2"},Z={key:2,class:"space-y-4"},ee={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},te={class:"text-sm h-64 overflow-y-auto text-gray-600 dark:text-gray-400 p-3 bg-gray-50 dark:bg-gray-700/50 rounded-md whitespace-pre-wrap font-mono"},ae={class:"text-sm h-64 overflow-y-auto text-gray-800 dark:text-gray-200 p-3 bg-green-50 dark:bg-green-900/20 rounded-md whitespace-pre-wrap font-mono"},se={key:3,class:"space-y-4"},oe={key:0,class:"text-sm bg-red-50 dark:bg-red-900/20 text-red-700 dark:text-red-300 p-3 rounded-md font-mono"},ne={key:1,class:"text-sm bg-red-50 dark:bg-red-900/20 text-red-700 dark:text-red-300 p-3 rounded-md"},le={key:2},re={class:"max-h-48 overflow-y-auto bg-gray-900 text-white font-mono text-xs p-3 rounded-md"},de={class:"text-gray-500 mr-2"},ie={key:0},ue={key:1},ce={key:2},me={key:3},ve={__name:"EnhancePersonalityPromptModal",setup(pe){const y=O(),E=D(),I=N(),b=m(()=>y.modalData("enhancePersonalityPrompt")),g=m(()=>{var a;return((a=b.value)==null?void 0:a.prompt_text)||""}),h=m(()=>{var a;return(a=b.value)==null?void 0:a.onApply}),u=f(""),l=f("confirm"),c=f(null),n=m(()=>c.value?I.getTaskById(c.value):null),v=m(()=>{var a;if((a=n.value)!=null&&a.result&&typeof n.value.result=="string")try{return JSON.parse(n.value.result).enhanced_system_prompt||""}catch(t){return console.error("Failed to parse task result JSON for enhanced prompt:",t),""}return""});async function A(){l.value="running";try{const a=await E.enhancePersonalityPrompt(g.value,u.value);if(a&&a.task_id)c.value=a.task_id;else throw new Error("Failed to start enhancement task.")}catch{l.value="failed"}}w(n,a=>{a&&["completed","failed","cancelled"].includes(a.status)&&(l.value=a.status==="completed"?"completed":"failed")});function T(){h.value&&v.value&&h.value(v.value),p()}function p(){c.value=null,l.value="confirm",u.value="",y.closeModal("enhancePersonalityPrompt")}return w(()=>y.isModalOpen("enhancePersonalityPrompt"),a=>{a||(c.value=null,l.value="confirm",u.value="")}),(a,t)=>(s(),L(J,{"modal-name":"enhancePersonalityPrompt",title:"Enhance System Prompt with AI",maxWidthClass:"max-w-4xl","allow-overlay-close":l.value!=="running"},{body:P(()=>{var k,_;return[e("div",U,[l.value==="confirm"?(s(),o("div",$,[e("div",null,[t[1]||(t[1]=e("h4",{class:"font-semibold text-gray-800 dark:text-gray-200"},"Original Prompt",-1)),e("p",K,i(g.value||"(No prompt provided)"),1)]),e("div",null,[t[2]||(t[2]=e("label",{for:"modification-prompt-input",class:"block font-semibold text-gray-800 dark:text-gray-200"},"Enhancement Instructions (optional)",-1)),M(e("textarea",{id:"modification-prompt-input","onUpdate:modelValue":t[0]||(t[0]=d=>u.value=d),rows:"3",class:"input-field mt-1",placeholder:"e.g., Make the personality more formal and professional..."},null,512),[[B,u.value]]),t[3]||(t[3]=e("p",{class:"mt-1 text-xs text-gray-500"},"The AI will refine the original prompt based on your instructions. If left blank, a general enhancement will be applied.",-1))])])):r("",!0),l.value==="running"?(s(),o("div",Q,[e("div",W,[F(R,{class:"w-6 h-6 text-blue-500"}),t[4]||(t[4]=e("span",null,"Enhancing prompt...",-1))]),n.value?(s(),o("div",q,[e("div",G,[e("div",{class:"bg-blue-600 h-2.5 rounded-full transition-all duration-300",style:V({width:`${n.value.progress}%`})},null,4)]),e("p",H,i(n.value.progress)+"%",1),n.value.logs&&n.value.logs.length>0?(s(),o("div",X,[(s(!0),o(S,null,C(n.value.logs,(d,x)=>(s(),o("p",{key:x},[e("span",Y,i(new Date(d.timestamp).toLocaleTimeString())+":",1),e("span",null,i(d.message),1)]))),128))])):r("",!0)])):r("",!0)])):r("",!0),l.value==="completed"?(s(),o("div",Z,[t[7]||(t[7]=e("h3",{class:"text-lg font-semibold text-green-600 dark:text-green-400"},"Enhancement Complete!",-1)),e("div",ee,[e("div",null,[t[5]||(t[5]=e("h4",{class:"font-semibold text-gray-800 dark:text-gray-200 mb-1"},"Original",-1)),e("p",te,i(g.value),1)]),e("div",null,[t[6]||(t[6]=e("h4",{class:"font-semibold text-gray-800 dark:text-gray-200 mb-1"},"Enhanced",-1)),e("p",ae,i(v.value),1)])])])):r("",!0),l.value==="failed"?(s(),o("div",se,[t[10]||(t[10]=e("h3",{class:"text-lg font-semibold text-red-600 dark:text-red-400"},"Enhancement Failed",-1)),t[11]||(t[11]=e("p",{class:"text-sm text-gray-600 dark:text-gray-400"},"The task could not be completed. See the error and logs below for details.",-1)),(k=n.value)!=null&&k.error?(s(),o("div",oe,[t[8]||(t[8]=e("strong",null,"Error:",-1)),z(" "+i(n.value.error),1)])):(s(),o("div",ne," An unknown error occurred. Please check the server console for more details. ")),(_=n.value)!=null&&_.logs&&n.value.logs.length>0?(s(),o("div",le,[t[9]||(t[9]=e("h4",{class:"font-semibold text-gray-800 dark:text-gray-200 mb-1 text-sm"},"Task Logs",-1)),e("div",re,[(s(!0),o(S,null,C(n.value.logs,(d,x)=>(s(),o("p",{key:x,class:j({"text-red-400":d.level==="CRITICAL"||d.level==="ERROR"})},[e("span",de,i(new Date(d.timestamp).toLocaleTimeString())+":",1),e("span",null,i(d.message),1)],2))),128))])])):r("",!0)])):r("",!0)])]}),footer:P(()=>[l.value==="confirm"?(s(),o("div",ie,[e("button",{type:"button",onClick:p,class:"btn btn-secondary"},"Cancel"),e("button",{type:"button",onClick:A,class:"btn btn-primary ml-3"},"Start Enhancement")])):r("",!0),l.value==="running"?(s(),o("div",ue,t[12]||(t[12]=[e("button",{type:"button",class:"btn btn-secondary",disabled:""},"Running...",-1)]))):r("",!0),l.value==="completed"?(s(),o("div",ce,[e("button",{type:"button",onClick:p,class:"btn btn-secondary"},"Discard"),e("button",{type:"button",onClick:T,class:"btn btn-primary ml-3"},"Apply Changes")])):r("",!0),l.value==="failed"?(s(),o("div",me,[e("button",{type:"button",onClick:p,class:"btn btn-secondary"},"Close")])):r("",!0)]),_:1},8,["allow-overlay-close"]))}};export{ve as default};
frontend/dist/ui_assets/EnhancePersonalityPromptModal-mLDr62t5.js+0 −1 removed@@ -1 +0,0 @@ -import{K as O,P as D,a8 as N,c as m,s as f,w,n as L,l as s,g as P,d as o,h as r,e,t as i,z as M,L as B,f as F,an as R,a2 as V,F as S,i as C,m as z,p as j}from"./index-CEXks4lv.js";import{_ as J}from"./GenericModal-Br5hR2Sz.js";const U={class:"p-6 space-y-6"},$={key:0,class:"space-y-4"},K={class:"mt-1 text-sm text-gray-600 dark:text-gray-400 p-3 bg-gray-50 dark:bg-gray-700/50 rounded-md whitespace-pre-wrap font-mono max-h-40 overflow-y-auto"},W={key:1,class:"space-y-4"},q={class:"flex items-center space-x-3 text-lg font-semibold"},G={key:0},H={class:"w-full bg-gray-200 rounded-full dark:bg-gray-700 h-2.5"},Q={class:"text-center text-sm mt-2"},X={key:0,class:"mt-4 max-h-40 overflow-y-auto bg-gray-900 text-white font-mono text-xs p-3 rounded-md"},Y={class:"text-gray-500 mr-2"},Z={key:2,class:"space-y-4"},ee={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},te={class:"text-sm h-64 overflow-y-auto text-gray-600 dark:text-gray-400 p-3 bg-gray-50 dark:bg-gray-700/50 rounded-md whitespace-pre-wrap font-mono"},ae={class:"text-sm h-64 overflow-y-auto text-gray-800 dark:text-gray-200 p-3 bg-green-50 dark:bg-green-900/20 rounded-md whitespace-pre-wrap font-mono"},se={key:3,class:"space-y-4"},oe={key:0,class:"text-sm bg-red-50 dark:bg-red-900/20 text-red-700 dark:text-red-300 p-3 rounded-md font-mono"},ne={key:1,class:"text-sm bg-red-50 dark:bg-red-900/20 text-red-700 dark:text-red-300 p-3 rounded-md"},le={key:2},re={class:"max-h-48 overflow-y-auto bg-gray-900 text-white font-mono text-xs p-3 rounded-md"},de={class:"text-gray-500 mr-2"},ie={key:0},ue={key:1},ce={key:2},me={key:3},ve={__name:"EnhancePersonalityPromptModal",setup(pe){const y=O(),E=D(),I=N(),b=m(()=>y.modalData("enhancePersonalityPrompt")),g=m(()=>{var a;return((a=b.value)==null?void 0:a.prompt_text)||""}),h=m(()=>{var a;return(a=b.value)==null?void 0:a.onApply}),u=f(""),l=f("confirm"),c=f(null),n=m(()=>c.value?I.getTaskById(c.value):null),v=m(()=>{var a;if((a=n.value)!=null&&a.result&&typeof n.value.result=="string")try{return JSON.parse(n.value.result).enhanced_system_prompt||""}catch(t){return console.error("Failed to parse task result JSON for enhanced prompt:",t),""}return""});async function A(){l.value="running";try{const a=await E.enhancePersonalityPrompt(g.value,u.value);if(a&&a.task_id)c.value=a.task_id;else throw new Error("Failed to start enhancement task.")}catch{l.value="failed"}}w(n,a=>{a&&["completed","failed","cancelled"].includes(a.status)&&(l.value=a.status==="completed"?"completed":"failed")});function T(){h.value&&v.value&&h.value(v.value),p()}function p(){c.value=null,l.value="confirm",u.value="",y.closeModal("enhancePersonalityPrompt")}return w(()=>y.isModalOpen("enhancePersonalityPrompt"),a=>{a||(c.value=null,l.value="confirm",u.value="")}),(a,t)=>(s(),L(J,{"modal-name":"enhancePersonalityPrompt",title:"Enhance System Prompt with AI",maxWidthClass:"max-w-4xl","allow-overlay-close":l.value!=="running"},{body:P(()=>{var k,_;return[e("div",U,[l.value==="confirm"?(s(),o("div",$,[e("div",null,[t[1]||(t[1]=e("h4",{class:"font-semibold text-gray-800 dark:text-gray-200"},"Original Prompt",-1)),e("p",K,i(g.value||"(No prompt provided)"),1)]),e("div",null,[t[2]||(t[2]=e("label",{for:"modification-prompt-input",class:"block font-semibold text-gray-800 dark:text-gray-200"},"Enhancement Instructions (optional)",-1)),M(e("textarea",{id:"modification-prompt-input","onUpdate:modelValue":t[0]||(t[0]=d=>u.value=d),rows:"3",class:"input-field mt-1",placeholder:"e.g., Make the personality more formal and professional..."},null,512),[[B,u.value]]),t[3]||(t[3]=e("p",{class:"mt-1 text-xs text-gray-500"},"The AI will refine the original prompt based on your instructions. If left blank, a general enhancement will be applied.",-1))])])):r("",!0),l.value==="running"?(s(),o("div",W,[e("div",q,[F(R,{class:"w-6 h-6 text-blue-500"}),t[4]||(t[4]=e("span",null,"Enhancing prompt...",-1))]),n.value?(s(),o("div",G,[e("div",H,[e("div",{class:"bg-blue-600 h-2.5 rounded-full transition-all duration-300",style:V({width:`${n.value.progress}%`})},null,4)]),e("p",Q,i(n.value.progress)+"%",1),n.value.logs&&n.value.logs.length>0?(s(),o("div",X,[(s(!0),o(S,null,C(n.value.logs,(d,x)=>(s(),o("p",{key:x},[e("span",Y,i(new Date(d.timestamp).toLocaleTimeString())+":",1),e("span",null,i(d.message),1)]))),128))])):r("",!0)])):r("",!0)])):r("",!0),l.value==="completed"?(s(),o("div",Z,[t[7]||(t[7]=e("h3",{class:"text-lg font-semibold text-green-600 dark:text-green-400"},"Enhancement Complete!",-1)),e("div",ee,[e("div",null,[t[5]||(t[5]=e("h4",{class:"font-semibold text-gray-800 dark:text-gray-200 mb-1"},"Original",-1)),e("p",te,i(g.value),1)]),e("div",null,[t[6]||(t[6]=e("h4",{class:"font-semibold text-gray-800 dark:text-gray-200 mb-1"},"Enhanced",-1)),e("p",ae,i(v.value),1)])])])):r("",!0),l.value==="failed"?(s(),o("div",se,[t[10]||(t[10]=e("h3",{class:"text-lg font-semibold text-red-600 dark:text-red-400"},"Enhancement Failed",-1)),t[11]||(t[11]=e("p",{class:"text-sm text-gray-600 dark:text-gray-400"},"The task could not be completed. See the error and logs below for details.",-1)),(k=n.value)!=null&&k.error?(s(),o("div",oe,[t[8]||(t[8]=e("strong",null,"Error:",-1)),z(" "+i(n.value.error),1)])):(s(),o("div",ne," An unknown error occurred. Please check the server console for more details. ")),(_=n.value)!=null&&_.logs&&n.value.logs.length>0?(s(),o("div",le,[t[9]||(t[9]=e("h4",{class:"font-semibold text-gray-800 dark:text-gray-200 mb-1 text-sm"},"Task Logs",-1)),e("div",re,[(s(!0),o(S,null,C(n.value.logs,(d,x)=>(s(),o("p",{key:x,class:j({"text-red-400":d.level==="CRITICAL"||d.level==="ERROR"})},[e("span",de,i(new Date(d.timestamp).toLocaleTimeString())+":",1),e("span",null,i(d.message),1)],2))),128))])])):r("",!0)])):r("",!0)])]}),footer:P(()=>[l.value==="confirm"?(s(),o("div",ie,[e("button",{type:"button",onClick:p,class:"btn btn-secondary"},"Cancel"),e("button",{type:"button",onClick:A,class:"btn btn-primary ml-3"},"Start Enhancement")])):r("",!0),l.value==="running"?(s(),o("div",ue,t[12]||(t[12]=[e("button",{type:"button",class:"btn btn-secondary",disabled:""},"Running...",-1)]))):r("",!0),l.value==="completed"?(s(),o("div",ce,[e("button",{type:"button",onClick:p,class:"btn btn-secondary"},"Discard"),e("button",{type:"button",onClick:T,class:"btn btn-primary ml-3"},"Apply Changes")])):r("",!0),l.value==="failed"?(s(),o("div",me,[e("button",{type:"button",onClick:p,class:"btn btn-secondary"},"Close")])):r("",!0)]),_:1},8,["allow-overlay-close"]))}};export{ve as default};
frontend/dist/ui_assets/EnhancePromptModal-D9SSOskO.js+1 −1 renamed@@ -1 +1 @@ -import{K as c,c as f,s as u,w as x,n as v,l as b,g as d,e,j as g,z as r,L as y,ar as m}from"./index-CEXks4lv.js";import{_ as k}from"./GenericModal-Br5hR2Sz.js";const C={class:"space-y-4"},M={class:"flex gap-4"},w={class:"flex items-center gap-2 cursor-pointer"},h={class:"flex items-center gap-2 cursor-pointer"},V={__name:"EnhancePromptModal",setup(U){const n=c(),i=f(()=>n.modalData("enhancePrompt")),l=u(""),o=u("description");x(i,s=>{s&&(l.value=s.instructions||"",o.value=s.mode||"description")},{immediate:!0});function p(){var s;(s=i.value)!=null&&s.onConfirm&&i.value.onConfirm({instructions:l.value,mode:o.value}),n.closeModal("enhancePrompt")}return(s,t)=>(b(),v(k,{"modal-name":"enhancePrompt",title:"Enhance Prompt","max-width-class":"max-w-lg"},{body:d(()=>[e("div",C,[t[8]||(t[8]=e("p",{class:"text-sm text-gray-600 dark:text-gray-300"}," Configure how the AI should enhance your prompt. ",-1)),e("div",null,[t[4]||(t[4]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Instructions (Optional)",-1)),r(e("textarea",{"onUpdate:modelValue":t[0]||(t[0]=a=>l.value=a),rows:"3",class:"input-field w-full text-sm",placeholder:"e.g. 'Make it more cinematic', 'Add cyberpunk elements', 'Focus on lighting'"},null,512),[[y,l.value]])]),e("div",null,[t[7]||(t[7]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Mode",-1)),e("div",M,[e("label",w,[r(e("input",{type:"radio","onUpdate:modelValue":t[1]||(t[1]=a=>o.value=a),value:"description",class:"text-blue-600 focus:ring-blue-500"},null,512),[[m,o.value]]),t[5]||(t[5]=e("span",{class:"text-sm"},"Description (Enhance details)",-1))]),e("label",h,[r(e("input",{type:"radio","onUpdate:modelValue":t[2]||(t[2]=a=>o.value=a),value:"update",class:"text-blue-600 focus:ring-blue-500"},null,512),[[m,o.value]]),t[6]||(t[6]=e("span",{class:"text-sm"},"Update (Apply instructions)",-1))])])])])]),footer:d(()=>[e("button",{onClick:t[3]||(t[3]=a=>g(n).closeModal("enhancePrompt")),class:"btn btn-secondary"},"Cancel"),e("button",{onClick:p,class:"btn btn-primary"},"Enhance")]),_:1}))}};export{V as default}; +import{K as c,c as f,s as u,w as x,n as v,l as b,g as d,e,j as g,z as r,L as y,ar as m}from"./index-BBRgbnZQ.js";import{_ as k}from"./GenericModal-eXiOHk6I.js";const C={class:"space-y-4"},M={class:"flex gap-4"},w={class:"flex items-center gap-2 cursor-pointer"},h={class:"flex items-center gap-2 cursor-pointer"},V={__name:"EnhancePromptModal",setup(U){const n=c(),i=f(()=>n.modalData("enhancePrompt")),l=u(""),o=u("description");x(i,s=>{s&&(l.value=s.instructions||"",o.value=s.mode||"description")},{immediate:!0});function p(){var s;(s=i.value)!=null&&s.onConfirm&&i.value.onConfirm({instructions:l.value,mode:o.value}),n.closeModal("enhancePrompt")}return(s,t)=>(b(),v(k,{"modal-name":"enhancePrompt",title:"Enhance Prompt","max-width-class":"max-w-lg"},{body:d(()=>[e("div",C,[t[8]||(t[8]=e("p",{class:"text-sm text-gray-600 dark:text-gray-300"}," Configure how the AI should enhance your prompt. ",-1)),e("div",null,[t[4]||(t[4]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Instructions (Optional)",-1)),r(e("textarea",{"onUpdate:modelValue":t[0]||(t[0]=a=>l.value=a),rows:"3",class:"input-field w-full text-sm",placeholder:"e.g. 'Make it more cinematic', 'Add cyberpunk elements', 'Focus on lighting'"},null,512),[[y,l.value]])]),e("div",null,[t[7]||(t[7]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Mode",-1)),e("div",M,[e("label",w,[r(e("input",{type:"radio","onUpdate:modelValue":t[1]||(t[1]=a=>o.value=a),value:"description",class:"text-blue-600 focus:ring-blue-500"},null,512),[[m,o.value]]),t[5]||(t[5]=e("span",{class:"text-sm"},"Description (Enhance details)",-1))]),e("label",h,[r(e("input",{type:"radio","onUpdate:modelValue":t[2]||(t[2]=a=>o.value=a),value:"update",class:"text-blue-600 focus:ring-blue-500"},null,512),[[m,o.value]]),t[6]||(t[6]=e("span",{class:"text-sm"},"Update (Apply instructions)",-1))])])])])]),footer:d(()=>[e("button",{onClick:t[3]||(t[3]=a=>g(n).closeModal("enhancePrompt")),class:"btn btn-secondary"},"Cancel"),e("button",{onClick:p,class:"btn btn-primary"},"Enhance")]),_:1}))}};export{V as default};
frontend/dist/ui_assets/erDiagram-AWTI2OKA-BaFidwM_.js+1 −1 renamedfrontend/dist/ui_assets/ExportModal-Dy-ZcfWe.js+1 −1 renamed@@ -1 +1 @@ -import{N as V,K as E,s as u,c as x,w as N,n as U,l as a,g,e as l,j as z,t as d,z as m,L as A,h as B,d as i,F as k,i as w,p as $,H as I,m as T,V as C}from"./index-CEXks4lv.js";import{_ as j}from"./GenericModal-Br5hR2Sz.js";const F={class:"space-y-4"},Z={class:"flex items-center space-x-2"},H={class:"relative"},K={key:0,class:"absolute top-full right-0 mt-2 w-48 bg-white dark:bg-gray-800 border dark:border-gray-600 rounded-lg shadow-xl z-20"},Q=["onClick"],R={class:"border dark:border-gray-600 rounded-md max-h-80 overflow-y-auto"},W={key:0,class:"p-3 space-y-2"},q={class:"border-b dark:border-gray-600 pb-2 mb-2"},G={class:"flex items-center text-sm font-medium cursor-pointer p-1"},J=["value"],P=["title"],X={key:1,class:"text-center italic text-gray-500 p-6"},Y={key:0},ee={key:1},te={class:"text-xs text-center text-gray-500"},se=["disabled"],ne={__name:"ExportModal",setup(le){const y=V(),b=E(),r=u(""),v=u("date_desc"),c=u(!1),S={date_desc:"Most Recent",date_asc:"Oldest First",title_asc:"Title (A-Z)",title_za:"Title (Z-A)"},h=x(()=>Object.values(y.discussions)),o=u([]),p=u(!1),D=x(()=>b.isModalOpen("export")),_=x(()=>h.value.filter(e=>(e.title||"").toLowerCase().includes(r.value.toLowerCase())).sort((e,t)=>{switch(v.value){case"date_asc":return new Date(e.last_activity_at||0)-new Date(t.last_activity_at||0);case"title_asc":return(e.title||"").localeCompare(t.title||"");case"title_za":return(t.title||"").localeCompare(e.title||"");case"date_desc":default:return new Date(t.last_activity_at||0)-new Date(e.last_activity_at||0)}})),f=x({get:()=>{const s=_.value.map(e=>e.id);return s.length>0&&s.every(e=>o.value.includes(e))},set:s=>{const e=_.value.map(t=>t.id);if(s){const t=new Set([...o.value,...e]);o.value=Array.from(t)}else{const t=new Set(e);o.value=o.value.filter(n=>!t.has(n))}}});N(D,s=>{s&&(r.value="",v.value="date_desc",o.value=h.value.map(e=>e.id))});function M(s){v.value=s,c.value=!1}async function O(){p.value=!0;try{await y.exportDiscussions(o.value),b.closeModal("export")}catch{}finally{p.value=!1}}const L={mounted:(s,e)=>{s.__vueClickOutside__=t=>{s===t.target||s.contains(t.target)||e.value(t)},document.body.addEventListener("click",s.__vueClickOutside__)},unmounted:s=>{document.body.removeEventListener("click",s.__vueClickOutside__)}};return(s,e)=>(a(),U(j,{modalName:"export",title:"Export Discussions",maxWidthClass:"max-w-xl"},{body:g(()=>[l("div",F,[l("div",Z,[m(l("input",{type:"text","onUpdate:modelValue":e[0]||(e[0]=t=>r.value=t),placeholder:"Search...",class:"input-field flex-grow"},null,512),[[A,r.value]]),l("div",H,[l("button",{onClick:e[1]||(e[1]=t=>c.value=!c.value),class:"btn btn-secondary !px-3",title:"Sort options"},e[5]||(e[5]=[l("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"w-5 h-5"},[l("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M3 4.5h14.25M3 9h9.75M3 13.5h5.25m5.25-.75L17.25 9m0 0L21 12.75M17.25 9v12"})],-1)])),c.value?m((a(),i("div",K,[(a(),i(k,null,w(S,(t,n)=>l("a",{key:n,href:"#",onClick:I(oe=>M(n),["prevent"]),class:$(["block px-4 py-2 text-sm text-gray-700 dark:text-gray-300 hover:bg-blue-500 hover:text-white",{"font-bold text-blue-600 dark:text-blue-400":v.value===n}])},d(t),11,Q)),64))])),[[L,()=>c.value=!1]]):B("",!0)])]),l("div",R,[_.value.length>0?(a(),i("div",W,[l("div",q,[l("label",G,[m(l("input",{type:"checkbox","onUpdate:modelValue":e[2]||(e[2]=t=>f.value=t),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 mr-3"},null,512),[[C,f.value]]),e[6]||(e[6]=T(" Select / Deselect All Visible "))])]),(a(!0),i(k,null,w(_.value,t=>(a(),i("label",{key:t.id,class:"flex items-center text-sm cursor-pointer p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700"},[m(l("input",{type:"checkbox",value:t.id,"onUpdate:modelValue":e[3]||(e[3]=n=>o.value=n),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 mr-3"},null,8,J),[[C,o.value]]),l("span",{class:"truncate",title:t.title||"Untitled Discussion"},d(t.title||"Untitled Discussion"),9,P)]))),128))])):(a(),i("div",X,[r.value?(a(),i("p",Y,"No discussions match your search.")):(a(),i("p",ee,"No discussions to export."))]))]),l("p",te," Selected "+d(o.value.length)+" out of "+d(h.value.length)+" total discussions. ",1)])]),footer:g(()=>[l("button",{onClick:e[4]||(e[4]=t=>z(b).closeModal("export")),class:"btn btn-secondary"},"Cancel"),l("button",{onClick:O,class:"btn btn-primary",disabled:p.value||o.value.length===0},d(p.value?"Exporting...":`Export ${o.value.length} Discussion(s)`),9,se)]),_:1}))}};export{ne as default}; +import{N as E,K as V,s as u,c as x,w as N,n as U,l as a,g,e as l,j as z,t as d,z as m,L as A,h as B,d as i,F as k,i as w,p as $,H as I,m as T,Z as C}from"./index-BBRgbnZQ.js";import{_ as j}from"./GenericModal-eXiOHk6I.js";const F={class:"space-y-4"},Z={class:"flex items-center space-x-2"},H={class:"relative"},K={key:0,class:"absolute top-full right-0 mt-2 w-48 bg-white dark:bg-gray-800 border dark:border-gray-600 rounded-lg shadow-xl z-20"},Q=["onClick"],R={class:"border dark:border-gray-600 rounded-md max-h-80 overflow-y-auto"},W={key:0,class:"p-3 space-y-2"},q={class:"border-b dark:border-gray-600 pb-2 mb-2"},G={class:"flex items-center text-sm font-medium cursor-pointer p-1"},J=["value"],P=["title"],X={key:1,class:"text-center italic text-gray-500 p-6"},Y={key:0},ee={key:1},te={class:"text-xs text-center text-gray-500"},se=["disabled"],ne={__name:"ExportModal",setup(le){const y=E(),b=V(),r=u(""),v=u("date_desc"),c=u(!1),S={date_desc:"Most Recent",date_asc:"Oldest First",title_asc:"Title (A-Z)",title_za:"Title (Z-A)"},h=x(()=>Object.values(y.discussions)),o=u([]),p=u(!1),D=x(()=>b.isModalOpen("export")),_=x(()=>h.value.filter(e=>(e.title||"").toLowerCase().includes(r.value.toLowerCase())).sort((e,t)=>{switch(v.value){case"date_asc":return new Date(e.last_activity_at||0)-new Date(t.last_activity_at||0);case"title_asc":return(e.title||"").localeCompare(t.title||"");case"title_za":return(t.title||"").localeCompare(e.title||"");case"date_desc":default:return new Date(t.last_activity_at||0)-new Date(e.last_activity_at||0)}})),f=x({get:()=>{const s=_.value.map(e=>e.id);return s.length>0&&s.every(e=>o.value.includes(e))},set:s=>{const e=_.value.map(t=>t.id);if(s){const t=new Set([...o.value,...e]);o.value=Array.from(t)}else{const t=new Set(e);o.value=o.value.filter(n=>!t.has(n))}}});N(D,s=>{s&&(r.value="",v.value="date_desc",o.value=h.value.map(e=>e.id))});function M(s){v.value=s,c.value=!1}async function O(){p.value=!0;try{await y.exportDiscussions(o.value),b.closeModal("export")}catch{}finally{p.value=!1}}const L={mounted:(s,e)=>{s.__vueClickOutside__=t=>{s===t.target||s.contains(t.target)||e.value(t)},document.body.addEventListener("click",s.__vueClickOutside__)},unmounted:s=>{document.body.removeEventListener("click",s.__vueClickOutside__)}};return(s,e)=>(a(),U(j,{modalName:"export",title:"Export Discussions",maxWidthClass:"max-w-xl"},{body:g(()=>[l("div",F,[l("div",Z,[m(l("input",{type:"text","onUpdate:modelValue":e[0]||(e[0]=t=>r.value=t),placeholder:"Search...",class:"input-field flex-grow"},null,512),[[A,r.value]]),l("div",H,[l("button",{onClick:e[1]||(e[1]=t=>c.value=!c.value),class:"btn btn-secondary !px-3",title:"Sort options"},e[5]||(e[5]=[l("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"w-5 h-5"},[l("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M3 4.5h14.25M3 9h9.75M3 13.5h5.25m5.25-.75L17.25 9m0 0L21 12.75M17.25 9v12"})],-1)])),c.value?m((a(),i("div",K,[(a(),i(k,null,w(S,(t,n)=>l("a",{key:n,href:"#",onClick:I(oe=>M(n),["prevent"]),class:$(["block px-4 py-2 text-sm text-gray-700 dark:text-gray-300 hover:bg-blue-500 hover:text-white",{"font-bold text-blue-600 dark:text-blue-400":v.value===n}])},d(t),11,Q)),64))])),[[L,()=>c.value=!1]]):B("",!0)])]),l("div",R,[_.value.length>0?(a(),i("div",W,[l("div",q,[l("label",G,[m(l("input",{type:"checkbox","onUpdate:modelValue":e[2]||(e[2]=t=>f.value=t),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 mr-3"},null,512),[[C,f.value]]),e[6]||(e[6]=T(" Select / Deselect All Visible "))])]),(a(!0),i(k,null,w(_.value,t=>(a(),i("label",{key:t.id,class:"flex items-center text-sm cursor-pointer p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700"},[m(l("input",{type:"checkbox",value:t.id,"onUpdate:modelValue":e[3]||(e[3]=n=>o.value=n),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 mr-3"},null,8,J),[[C,o.value]]),l("span",{class:"truncate",title:t.title||"Untitled Discussion"},d(t.title||"Untitled Discussion"),9,P)]))),128))])):(a(),i("div",X,[r.value?(a(),i("p",Y,"No discussions match your search.")):(a(),i("p",ee,"No discussions to export."))]))]),l("p",te," Selected "+d(o.value.length)+" out of "+d(h.value.length)+" total discussions. ",1)])]),footer:g(()=>[l("button",{onClick:e[4]||(e[4]=t=>z(b).closeModal("export")),class:"btn btn-secondary"},"Cancel"),l("button",{onClick:O,class:"btn btn-primary",disabled:p.value||o.value.length===0},d(p.value?"Exporting...":`Export ${o.value.length} Discussion(s)`),9,se)]),_:1}))}};export{ne as default};
frontend/dist/ui_assets/FillPlaceholdersModal-bT7UZqwK.js+3 −3 renamed@@ -1,4 +1,4 @@ -import{K as C,c as V,s as _,w as S,n as x,l as s,g as h,e as p,d as u,H as U,F as g,i as k,h as $,z as b,t as v,R as D,V as P,T as M,J as E}from"./index-CEXks4lv.js";import{_ as B}from"./GenericModal-Br5hR2Sz.js";function T(d){if(!d)return[];const c=new Map,m=/@<([^>]+?)>@([\s\S]*?)@<\/\1>@|@<([^>]+?)>@/g;let n;for(;(n=m.exec(d))!==null;){const a=n[1]||n[3],o=n[2];if(!c.has(a)){const r={name:a,title:a.replace(/_/g," ").replace(/\b\w/g,l=>l.toUpperCase()),type:"str",options:[],default:"",help:""};o&&o.trim()&&o.trim().split(` -`).forEach(i=>{const e=i.indexOf(":");if(e===-1)return;const t=i.substring(0,e).trim().toLowerCase(),f=i.substring(e+1).trim();t&&f!==""&&Object.prototype.hasOwnProperty.call(r,t)&&(t==="options"?r.options=f.split(",").map(y=>y.trim()).filter(Boolean):r[t]=f)}),["str","text","int","float","bool"].includes(r.type)||(r.type="str"),c.set(a,r)}}return Array.from(c.values())}function F(d){if(!d)return"";const c=/@<([^>]+?)>@[\s\S]*?@<\/\1>@/g,n=d.replace(c,"").split(` +import{K as C,c as V,s as _,w as S,n as x,l as s,g as h,e as p,d as u,H as U,F as g,i as k,h as $,z as b,t as v,X as D,Z as P,Y as M,J as E}from"./index-BBRgbnZQ.js";import{_ as B}from"./GenericModal-eXiOHk6I.js";function F(d){if(!d)return[];const c=new Map,m=/@<([^>]+?)>@([\s\S]*?)@<\/\1>@|@<([^>]+?)>@/g;let n;for(;(n=m.exec(d))!==null;){const a=n[1]||n[3],o=n[2];if(!c.has(a)){const r={name:a,title:a.replace(/_/g," ").replace(/\b\w/g,l=>l.toUpperCase()),type:"str",options:[],default:"",help:""};o&&o.trim()&&o.trim().split(` +`).forEach(i=>{const e=i.indexOf(":");if(e===-1)return;const t=i.substring(0,e).trim().toLowerCase(),f=i.substring(e+1).trim();t&&f!==""&&Object.prototype.hasOwnProperty.call(r,t)&&(t==="options"?r.options=f.split(",").map(y=>y.trim()).filter(Boolean):r[t]=f)}),["str","text","int","float","bool"].includes(r.type)||(r.type="str"),c.set(a,r)}}return Array.from(c.values())}function N(d){if(!d)return"";const c=/@<([^>]+?)>@[\s\S]*?@<\/\1>@/g,n=d.replace(c,"").split(` `);let a=-1;for(let o=0;o<n.length;o++)if(n[o].trim()!==""){a=o;break}return a!==-1?n.slice(a).join(` -`):""}const w={parse:T,clean:F},N=["for"],L={key:0,class:"text-xs text-gray-500 mb-1"},O=["id","onUpdate:modelValue"],R=["value"],j={key:2,class:"mt-2 flex items-center"},I=["id","onUpdate:modelValue"],z=["for"],A=["type","id","onUpdate:modelValue"],H={key:1,class:"text-center text-gray-500"},W={__name:"FillPlaceholdersModal",setup(d){const c=C(),m=V(()=>c.modalData("fillPlaceholders")),n=_([]),a=_({});S(()=>{var l;return(l=m.value)==null?void 0:l.promptTemplate},l=>{if(l){const i=w.parse(l);n.value=i;const e={};i.forEach(t=>{t.type==="bool"?e[t.name]=t.default==="true":e[t.name]=t.default||""}),a.value=e}else n.value=[],a.value={}},{immediate:!0});function o(){var e;const l=m.value.promptTemplate;let i=w.clean(l);n.value.forEach(t=>{const f=a.value[t.name],y=new RegExp(`@<${t.name}>@`,"g");i=i.replace(y,String(f))}),(e=m.value)!=null&&e.onConfirm&&m.value.onConfirm(i),r()}function r(){c.closeModal("fillPlaceholders")}return(l,i)=>(s(),x(B,{modalName:"fillPlaceholders",title:"Fill in Prompt Details",maxWidthClass:"max-w-2xl",onClose:r},{body:h(()=>[n.value.length>0?(s(),u("form",{key:0,onSubmit:U(o,["prevent"]),class:"space-y-4"},[(s(!0),u(g,null,k(n.value,e=>(s(),u("div",{key:e.name},[p("label",{for:`placeholder-${e.name}`,class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},v(e.title),9,N),e.help?(s(),u("p",L,v(e.help),1)):$("",!0),e.options&&e.options.length>0?b((s(),u("select",{key:1,id:`placeholder-${e.name}`,"onUpdate:modelValue":t=>a.value[e.name]=t,class:"input-field mt-1"},[(s(!0),u(g,null,k(e.options,t=>(s(),u("option",{key:t,value:t},v(t),9,R))),128))],8,O)),[[D,a.value[e.name]]]):e.type==="bool"?(s(),u("div",j,[b(p("input",{id:`placeholder-${e.name}`,type:"checkbox","onUpdate:modelValue":t=>a.value[e.name]=t,class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500"},null,8,I),[[P,a.value[e.name]]]),p("label",{for:`placeholder-${e.name}`,class:"ml-2 block text-sm text-gray-900 dark:text-gray-100"}," Enable ",8,z)])):e.type==="text"?(s(),x(M,{key:3,id:`placeholder-${e.name}`,modelValue:a.value[e.name],"onUpdate:modelValue":t=>a.value[e.name]=t,class:"mt-1 h-40"},null,8,["id","modelValue","onUpdate:modelValue"])):b((s(),u("input",{key:4,type:e.type==="int"||e.type==="float"?"number":"text",id:`placeholder-${e.name}`,"onUpdate:modelValue":t=>a.value[e.name]=t,class:"input-field mt-1"},null,8,A)),[[E,a.value[e.name]]])]))),128))],32)):(s(),u("div",H," No placeholders were found in this prompt. "))]),footer:h(()=>[p("button",{onClick:r,type:"button",class:"btn btn-secondary"}," Cancel "),p("button",{onClick:o,type:"button",class:"btn btn-primary"}," Confirm ")]),_:1}))}};export{W as default}; +`):""}const w={parse:F,clean:N},T=["for"],L={key:0,class:"text-xs text-gray-500 mb-1"},O=["id","onUpdate:modelValue"],j=["value"],I={key:2,class:"mt-2 flex items-center"},R=["id","onUpdate:modelValue"],z=["for"],A=["type","id","onUpdate:modelValue"],H={key:1,class:"text-center text-gray-500"},W={__name:"FillPlaceholdersModal",setup(d){const c=C(),m=V(()=>c.modalData("fillPlaceholders")),n=_([]),a=_({});S(()=>{var l;return(l=m.value)==null?void 0:l.promptTemplate},l=>{if(l){const i=w.parse(l);n.value=i;const e={};i.forEach(t=>{t.type==="bool"?e[t.name]=t.default==="true":e[t.name]=t.default||""}),a.value=e}else n.value=[],a.value={}},{immediate:!0});function o(){var e;const l=m.value.promptTemplate;let i=w.clean(l);n.value.forEach(t=>{const f=a.value[t.name],y=new RegExp(`@<${t.name}>@`,"g");i=i.replace(y,String(f))}),(e=m.value)!=null&&e.onConfirm&&m.value.onConfirm(i),r()}function r(){c.closeModal("fillPlaceholders")}return(l,i)=>(s(),x(B,{modalName:"fillPlaceholders",title:"Fill in Prompt Details",maxWidthClass:"max-w-2xl",onClose:r},{body:h(()=>[n.value.length>0?(s(),u("form",{key:0,onSubmit:U(o,["prevent"]),class:"space-y-4"},[(s(!0),u(g,null,k(n.value,e=>(s(),u("div",{key:e.name},[p("label",{for:`placeholder-${e.name}`,class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},v(e.title),9,T),e.help?(s(),u("p",L,v(e.help),1)):$("",!0),e.options&&e.options.length>0?b((s(),u("select",{key:1,id:`placeholder-${e.name}`,"onUpdate:modelValue":t=>a.value[e.name]=t,class:"input-field mt-1"},[(s(!0),u(g,null,k(e.options,t=>(s(),u("option",{key:t,value:t},v(t),9,j))),128))],8,O)),[[D,a.value[e.name]]]):e.type==="bool"?(s(),u("div",I,[b(p("input",{id:`placeholder-${e.name}`,type:"checkbox","onUpdate:modelValue":t=>a.value[e.name]=t,class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500"},null,8,R),[[P,a.value[e.name]]]),p("label",{for:`placeholder-${e.name}`,class:"ml-2 block text-sm text-gray-900 dark:text-gray-100"}," Enable ",8,z)])):e.type==="text"?(s(),x(M,{key:3,id:`placeholder-${e.name}`,modelValue:a.value[e.name],"onUpdate:modelValue":t=>a.value[e.name]=t,class:"mt-1 h-40"},null,8,["id","modelValue","onUpdate:modelValue"])):b((s(),u("input",{key:4,type:e.type==="int"||e.type==="float"?"number":"text",id:`placeholder-${e.name}`,"onUpdate:modelValue":t=>a.value[e.name]=t,class:"input-field mt-1"},null,8,A)),[[E,a.value[e.name]]])]))),128))],32)):(s(),u("div",H," No placeholders were found in this prompt. "))]),footer:h(()=>[p("button",{onClick:r,type:"button",class:"btn btn-secondary"}," Cancel "),p("button",{onClick:o,type:"button",class:"btn btn-primary"}," Confirm ")]),_:1}))}};export{W as default};
frontend/dist/ui_assets/flowDiagram-PVAE7QVJ-UOXKMG5z.js+1 −1 renamedfrontend/dist/ui_assets/ForceSettingsModal-RFUdHnY3.js+1 −1 renamed@@ -1 +1 @@ -import{K as B,Q as F,c as g,s as _,w as U,o as $,n as D,l as i,g as z,e as t,j as v,t as x,H as j,z as n,d as r,F as L,i as M,R as Q,L as b,V as A,h as T}from"./index-CEXks4lv.js";import{_ as R}from"./GenericModal-Br5hR2Sz.js";import{u as E}from"./admin-Dmx5gjU7.js";const H={class:"space-y-4"},I=["disabled"],K={key:0,disabled:"",value:""},O={key:1,value:""},P=["value"],q={class:"space-y-3 pt-4 border-t dark:border-gray-600"},G={class:"text-base font-medium text-gray-800 dark:text-gray-200"},J={class:"relative flex items-start"},W={class:"flex h-6 items-center"},X={class:"max-h-60 overflow-y-auto border dark:border-gray-600 rounded-md p-2 space-y-1"},Y={key:0,class:"text-center text-sm text-gray-500"},Z={key:1,class:"text-center text-sm text-gray-500"},ee={class:"flex h-6 items-center"},te=["id","value"],le={class:"ml-3 text-sm leading-6"},se=["for"],ae={class:"flex justify-end space-x-3"},oe=["disabled"],ue={__name:"ForceSettingsModal",setup(ie){const d=B(),f=E(),{adminAvailableLollmsModels:h,isLoadingLollmsModels:k,allUsers:u,isLoadingUsers:V}=F(f),C=g(()=>d.modalData("forceSettings")),y=g(()=>{var s;return(s=C.value)==null?void 0:s.onSettingsApplied}),a=_({lollms_model_name:"",safe_store_vectorizer:"",llm_ctx_size:null}),o=_([]),c=_(""),p=_(!1),m=g(()=>{if(!c.value)return u.value;const s=c.value.toLowerCase();return u.value.filter(e=>e.username.toLowerCase().includes(s))}),S=g({get(){return m.value.length>0&&o.value.length===m.value.length},set(s){s?o.value=m.value.map(e=>e.id):o.value=[]}});U(c,()=>{o.value=[]});async function w(){p.value=!0;try{const s={user_ids:o.value};if(a.value.lollms_model_name&&(s.lollms_model_name=a.value.lollms_model_name),a.value.safe_store_vectorizer&&(s.safe_store_vectorizer=a.value.safe_store_vectorizer),a.value.llm_ctx_size&&(s.llm_ctx_size=Number(a.value.llm_ctx_size)),Object.keys(s).length<=1){d.addNotification("Please specify at least one setting to apply.","warning");return}await f.batchUpdateUsers(s),y.value&&typeof y.value=="function"&&y.value(),d.addNotification("Settings applied to selected users.","success"),d.closeModal("forceSettings")}finally{p.value=!1}}return $(()=>{h.value.length===0&&f.fetchAdminAvailableLollmsModels(),u.value.length===0?f.fetchAllUsers():o.value=u.value.map(s=>s.id)}),U(u,s=>{o.value=s.map(e=>e.id)}),(s,e)=>(i(),D(R,{"modal-name":"forceSettings",title:"Force Settings on Users","max-width-class":"max-w-2xl"},{body:z(()=>[t("form",{onSubmit:j(w,["prevent"]),class:"space-y-6"},[e[11]||(e[11]=t("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," Apply these settings to the selected users below. Fields left blank will not be changed. ",-1)),t("div",H,[t("div",null,[e[7]||(e[7]=t("label",{for:"force-model",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"LLM Model/Binding",-1)),n(t("select",{id:"force-model","onUpdate:modelValue":e[0]||(e[0]=l=>a.value.lollms_model_name=l),class:"input-field mt-1",disabled:v(k)},[v(k)?(i(),r("option",K,"Loading models...")):(i(),r("option",O,"-- Do Not Change --")),(i(!0),r(L,null,M(v(h),l=>(i(),r("option",{key:l.id,value:l.id},x(l.name),9,P))),128))],8,I),[[Q,a.value.lollms_model_name]])]),t("div",null,[e[8]||(e[8]=t("label",{for:"force-vectorizer",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Vectorizer",-1)),n(t("input",{type:"text",id:"force-vectorizer","onUpdate:modelValue":e[1]||(e[1]=l=>a.value.safe_store_vectorizer=l),class:"input-field mt-1",placeholder:"e.g., st:all-MiniLM-L6-v2"},null,512),[[b,a.value.safe_store_vectorizer]])]),t("div",null,[e[9]||(e[9]=t("label",{for:"force-ctx",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Context Size",-1)),n(t("input",{type:"number",id:"force-ctx","onUpdate:modelValue":e[2]||(e[2]=l=>a.value.llm_ctx_size=l),class:"input-field mt-1",placeholder:"e.g., 4096"},null,512),[[b,a.value.llm_ctx_size,void 0,{number:!0}]])])]),t("div",q,[t("h4",G,"Target Users ("+x(o.value.length)+" selected)",1),n(t("input",{type:"text","onUpdate:modelValue":e[3]||(e[3]=l=>c.value=l),placeholder:"Search users...",class:"input-field w-full"},null,512),[[b,c.value]]),t("div",J,[t("div",W,[n(t("input",{id:"select-all-users",type:"checkbox","onUpdate:modelValue":e[4]||(e[4]=l=>S.value=l),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-600"},null,512),[[A,S.value]])]),e[10]||(e[10]=t("div",{class:"ml-3 text-sm leading-6"},[t("label",{for:"select-all-users",class:"font-medium text-gray-900 dark:text-gray-100"},"Select All Visible")],-1))]),t("div",X,[v(V)?(i(),r("div",Y,"Loading users...")):m.value.length===0?(i(),r("div",Z,"No users match search.")):T("",!0),(i(!0),r(L,null,M(m.value,l=>(i(),r("div",{key:l.id,class:"relative flex items-start"},[t("div",ee,[n(t("input",{id:`user-${l.id}`,value:l.id,"onUpdate:modelValue":e[5]||(e[5]=N=>o.value=N),type:"checkbox",class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-600"},null,8,te),[[A,o.value]])]),t("div",le,[t("label",{for:`user-${l.id}`,class:"font-medium text-gray-900 dark:text-gray-100"},x(l.username),9,se)])]))),128))])])],32)]),footer:z(()=>[t("div",ae,[t("button",{type:"button",class:"btn btn-secondary",onClick:e[6]||(e[6]=l=>v(d).closeModal("forceSettings"))},"Cancel"),t("button",{type:"submit",class:"btn btn-primary",disabled:p.value||o.value.length===0,onClick:w},x(p.value?"Applying...":`Apply to ${o.value.length} Users`),9,oe)])]),_:1}))}};export{ue as default}; +import{K as B,R as F,c as g,s as _,w as U,o as $,n as D,l as i,g as z,e as t,j as v,t as x,H as j,z as n,d as r,F as L,i as M,X as T,L as b,Z as A,h as Q}from"./index-BBRgbnZQ.js";import{_ as R}from"./GenericModal-eXiOHk6I.js";import{u as E}from"./admin-CwLQr1mG.js";const H={class:"space-y-4"},I=["disabled"],K={key:0,disabled:"",value:""},O={key:1,value:""},P=["value"],X={class:"space-y-3 pt-4 border-t dark:border-gray-600"},Z={class:"text-base font-medium text-gray-800 dark:text-gray-200"},q={class:"relative flex items-start"},G={class:"flex h-6 items-center"},J={class:"max-h-60 overflow-y-auto border dark:border-gray-600 rounded-md p-2 space-y-1"},W={key:0,class:"text-center text-sm text-gray-500"},Y={key:1,class:"text-center text-sm text-gray-500"},ee={class:"flex h-6 items-center"},te=["id","value"],le={class:"ml-3 text-sm leading-6"},se=["for"],ae={class:"flex justify-end space-x-3"},oe=["disabled"],ue={__name:"ForceSettingsModal",setup(ie){const d=B(),f=E(),{adminAvailableLollmsModels:h,isLoadingLollmsModels:k,allUsers:u,isLoadingUsers:C}=F(f),V=g(()=>d.modalData("forceSettings")),y=g(()=>{var s;return(s=V.value)==null?void 0:s.onSettingsApplied}),a=_({lollms_model_name:"",safe_store_vectorizer:"",llm_ctx_size:null}),o=_([]),c=_(""),p=_(!1),m=g(()=>{if(!c.value)return u.value;const s=c.value.toLowerCase();return u.value.filter(e=>e.username.toLowerCase().includes(s))}),S=g({get(){return m.value.length>0&&o.value.length===m.value.length},set(s){s?o.value=m.value.map(e=>e.id):o.value=[]}});U(c,()=>{o.value=[]});async function w(){p.value=!0;try{const s={user_ids:o.value};if(a.value.lollms_model_name&&(s.lollms_model_name=a.value.lollms_model_name),a.value.safe_store_vectorizer&&(s.safe_store_vectorizer=a.value.safe_store_vectorizer),a.value.llm_ctx_size&&(s.llm_ctx_size=Number(a.value.llm_ctx_size)),Object.keys(s).length<=1){d.addNotification("Please specify at least one setting to apply.","warning");return}await f.batchUpdateUsers(s),y.value&&typeof y.value=="function"&&y.value(),d.addNotification("Settings applied to selected users.","success"),d.closeModal("forceSettings")}finally{p.value=!1}}return $(()=>{h.value.length===0&&f.fetchAdminAvailableLollmsModels(),u.value.length===0?f.fetchAllUsers():o.value=u.value.map(s=>s.id)}),U(u,s=>{o.value=s.map(e=>e.id)}),(s,e)=>(i(),D(R,{"modal-name":"forceSettings",title:"Force Settings on Users","max-width-class":"max-w-2xl"},{body:z(()=>[t("form",{onSubmit:j(w,["prevent"]),class:"space-y-6"},[e[11]||(e[11]=t("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," Apply these settings to the selected users below. Fields left blank will not be changed. ",-1)),t("div",H,[t("div",null,[e[7]||(e[7]=t("label",{for:"force-model",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"LLM Model/Binding",-1)),n(t("select",{id:"force-model","onUpdate:modelValue":e[0]||(e[0]=l=>a.value.lollms_model_name=l),class:"input-field mt-1",disabled:v(k)},[v(k)?(i(),r("option",K,"Loading models...")):(i(),r("option",O,"-- Do Not Change --")),(i(!0),r(L,null,M(v(h),l=>(i(),r("option",{key:l.id,value:l.id},x(l.name),9,P))),128))],8,I),[[T,a.value.lollms_model_name]])]),t("div",null,[e[8]||(e[8]=t("label",{for:"force-vectorizer",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Vectorizer",-1)),n(t("input",{type:"text",id:"force-vectorizer","onUpdate:modelValue":e[1]||(e[1]=l=>a.value.safe_store_vectorizer=l),class:"input-field mt-1",placeholder:"e.g., st:all-MiniLM-L6-v2"},null,512),[[b,a.value.safe_store_vectorizer]])]),t("div",null,[e[9]||(e[9]=t("label",{for:"force-ctx",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Context Size",-1)),n(t("input",{type:"number",id:"force-ctx","onUpdate:modelValue":e[2]||(e[2]=l=>a.value.llm_ctx_size=l),class:"input-field mt-1",placeholder:"e.g., 4096"},null,512),[[b,a.value.llm_ctx_size,void 0,{number:!0}]])])]),t("div",X,[t("h4",Z,"Target Users ("+x(o.value.length)+" selected)",1),n(t("input",{type:"text","onUpdate:modelValue":e[3]||(e[3]=l=>c.value=l),placeholder:"Search users...",class:"input-field w-full"},null,512),[[b,c.value]]),t("div",q,[t("div",G,[n(t("input",{id:"select-all-users",type:"checkbox","onUpdate:modelValue":e[4]||(e[4]=l=>S.value=l),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-600"},null,512),[[A,S.value]])]),e[10]||(e[10]=t("div",{class:"ml-3 text-sm leading-6"},[t("label",{for:"select-all-users",class:"font-medium text-gray-900 dark:text-gray-100"},"Select All Visible")],-1))]),t("div",J,[v(C)?(i(),r("div",W,"Loading users...")):m.value.length===0?(i(),r("div",Y,"No users match search.")):Q("",!0),(i(!0),r(L,null,M(m.value,l=>(i(),r("div",{key:l.id,class:"relative flex items-start"},[t("div",ee,[n(t("input",{id:`user-${l.id}`,value:l.id,"onUpdate:modelValue":e[5]||(e[5]=N=>o.value=N),type:"checkbox",class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-600"},null,8,te),[[A,o.value]])]),t("div",le,[t("label",{for:`user-${l.id}`,class:"font-medium text-gray-900 dark:text-gray-100"},x(l.username),9,se)])]))),128))])])],32)]),footer:z(()=>[t("div",ae,[t("button",{type:"button",class:"btn btn-secondary",onClick:e[6]||(e[6]=l=>v(d).closeModal("forceSettings"))},"Cancel"),t("button",{type:"submit",class:"btn btn-primary",disabled:p.value||o.value.length===0,onClick:w},x(p.value?"Applying...":`Apply to ${o.value.length} Users`),9,oe)])]),_:1}))}};export{ue as default};
frontend/dist/ui_assets/ForgotPasswordModal-kdq2zxfB.js+1 −1 renamed@@ -1 +1 @@ -import{K as v,s as i,n as f,l as u,g as m,e,H as g,d as b,h as x,z as y,L as _,p as w,t as c,E as k}from"./index-CEXks4lv.js";import{_ as h}from"./GenericModal-Br5hR2Sz.js";const C={class:"p-6 space-y-4"},P=["disabled"],B={class:"pt-2"},E=["disabled"],q={__name:"ForgotPasswordModal",setup(M){const n=v(),o=i(""),a=i(!1),t=i(""),p=async()=>{var l,s;if(!o.value){t.value="Please enter your username or email address.";return}a.value=!0,t.value="";try{const r=await k.post("/api/auth/forgot-password",{username_or_email:o.value});t.value=r.data.message}catch(r){t.value=((s=(l=r.response)==null?void 0:l.data)==null?void 0:s.detail)||"An unexpected error occurred."}finally{a.value=!1}},d=()=>{n.closeModal("forgotPassword"),n.openModal("login")};return(l,s)=>(u(),f(h,{modalName:"forgotPassword",title:"Forgot Password",onClose:d},{body:m(()=>[e("div",C,[s[2]||(s[2]=e("p",{class:"text-sm text-gray-600 dark:text-gray-400"}," Enter your username or email address, and we will initiate the password reset process. ",-1)),e("form",{onSubmit:g(p,["prevent"]),class:"space-y-4"},[e("div",null,[s[1]||(s[1]=e("label",{for:"username-or-email",class:"block text-sm font-medium"},"Username or Email",-1)),y(e("input",{"onUpdate:modelValue":s[0]||(s[0]=r=>o.value=r),type:"text",id:"username-or-email",required:"",disabled:a.value||t.value.includes("initiated"),class:"input-field mt-1 w-full"},null,8,P),[[_,o.value]])]),t.value?(u(),b("div",{key:0,class:w([t.value.includes("initiated")?"text-green-700 bg-green-100 dark:text-green-300 dark:bg-green-900/50":"text-red-700 bg-red-100 dark:text-red-300 dark:bg-red-900/50","text-sm text-center p-3 rounded-md"]),role:"alert"},c(t.value),3)):x("",!0),e("div",B,[e("button",{type:"submit",class:"btn btn-primary w-full",disabled:a.value||t.value.includes("initiated")},c(a.value?"Processing...":"Request Reset"),9,E)])],32)])]),footer:m(()=>[e("div",{class:"flex justify-start"},[e("button",{type:"button",onClick:d,class:"text-sm font-medium text-blue-600 hover:text-blue-500"}," ← Back to Login ")])]),_:1}))}};export{q as default}; +import{K as v,s as i,n as f,l as u,g as m,e,H as g,d as b,h as x,z as y,L as _,p as w,t as c,E as k}from"./index-BBRgbnZQ.js";import{_ as h}from"./GenericModal-eXiOHk6I.js";const C={class:"p-6 space-y-4"},P=["disabled"],B={class:"pt-2"},E=["disabled"],q={__name:"ForgotPasswordModal",setup(M){const n=v(),o=i(""),a=i(!1),t=i(""),p=async()=>{var l,s;if(!o.value){t.value="Please enter your username or email address.";return}a.value=!0,t.value="";try{const r=await k.post("/api/auth/forgot-password",{username_or_email:o.value});t.value=r.data.message}catch(r){t.value=((s=(l=r.response)==null?void 0:l.data)==null?void 0:s.detail)||"An unexpected error occurred."}finally{a.value=!1}},d=()=>{n.closeModal("forgotPassword"),n.openModal("login")};return(l,s)=>(u(),f(h,{modalName:"forgotPassword",title:"Forgot Password",onClose:d},{body:m(()=>[e("div",C,[s[2]||(s[2]=e("p",{class:"text-sm text-gray-600 dark:text-gray-400"}," Enter your username or email address, and we will initiate the password reset process. ",-1)),e("form",{onSubmit:g(p,["prevent"]),class:"space-y-4"},[e("div",null,[s[1]||(s[1]=e("label",{for:"username-or-email",class:"block text-sm font-medium"},"Username or Email",-1)),y(e("input",{"onUpdate:modelValue":s[0]||(s[0]=r=>o.value=r),type:"text",id:"username-or-email",required:"",disabled:a.value||t.value.includes("initiated"),class:"input-field mt-1 w-full"},null,8,P),[[_,o.value]])]),t.value?(u(),b("div",{key:0,class:w([t.value.includes("initiated")?"text-green-700 bg-green-100 dark:text-green-300 dark:bg-green-900/50":"text-red-700 bg-red-100 dark:text-red-300 dark:bg-red-900/50","text-sm text-center p-3 rounded-md"]),role:"alert"},c(t.value),3)):x("",!0),e("div",B,[e("button",{type:"submit",class:"btn btn-primary w-full",disabled:a.value||t.value.includes("initiated")},c(a.value?"Processing...":"Request Reset"),9,E)])],32)])]),footer:m(()=>[e("div",{class:"flex justify-start"},[e("button",{type:"button",onClick:d,class:"text-sm font-medium text-blue-600 hover:text-blue-500"}," ← Back to Login ")])]),_:1}))}};export{q as default};
frontend/dist/ui_assets/FriendList-BGhizqey.js+1 −1 renamed@@ -1 +1 @@ -import{a as h,K as v,k,c as d,r as w,d as o,l as n,e as s,F as C,i as F,f as r,g as m,U as S,p as L,m as R,t as g,ca as $,ah as A}from"./index-CEXks4lv.js";const T={class:"max-w-4xl mx-auto"},U={key:0,class:"text-center py-6 text-gray-500 dark:text-gray-400"},B={key:1,class:"text-center py-10 bg-gray-50 dark:bg-gray-800/50 rounded-lg"},M={key:2,class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4"},N=["title"],V={class:"text-xs text-gray-500 mb-3"},z={class:"mt-auto flex items-center space-x-2 w-full"},I=["onClick"],O=["onClick"],E={__name:"FriendList",setup(j){const i=h(),x=v();k();const l=d(()=>i.friends),y=d(()=>i.isLoadingFriends);async function p(e){await x.showConfirmation({title:"Remove Friend",message:`Are you sure you want to remove ${e.username} from your friends list?`,confirmText:"Remove"})&&i.removeFriend(e.id)}async function f(e){i.openConversation({id:e.id,username:e.username,icon:e.icon})}function _(e){return e==="connected"?"bg-green-500":e==="absent"?"bg-yellow-500":"bg-gray-400"}function c(e){return e==="connected"?"Online":e==="absent"?"Absent":"Offline"}return(e,a)=>{const u=w("router-link");return n(),o("div",T,[y.value?(n(),o("div",U," Loading friends... ")):l.value.length===0?(n(),o("div",B,a[0]||(a[0]=[s("p",{class:"text-gray-500 dark:text-gray-400"},"Your friends list is empty.",-1),s("p",{class:"text-sm text-gray-400 dark:text-gray-500 mt-1"},"Use the 'Add Friend' tab to find people.",-1)]))):(n(),o("ul",M,[(n(!0),o(C,null,F(l.value,t=>(n(),o("li",{key:t.id,class:"bg-white dark:bg-gray-800 p-4 rounded-lg shadow-sm flex flex-col items-center text-center"},[r(u,{to:`/profile/${t.username}`,class:"relative"},{default:m(()=>[r(S,{icon:t.icon,username:t.username,"size-class":"h-20 w-20"},null,8,["icon","username"]),s("div",{class:L(["absolute bottom-1 right-1 w-5 h-5 border-4 border-white dark:border-gray-800 rounded-full",_(t.status)]),title:c(t.status)},null,10,N)]),_:2},1032,["to"]),r(u,{to:`/profile/${t.username}`,class:"mt-3 font-bold text-gray-900 dark:text-gray-100 hover:underline truncate w-full"},{default:m(()=>[R(g(t.username),1)]),_:2},1032,["to"]),s("p",V,g(c(t.status)),1),s("div",z,[s("button",{onClick:b=>f(t),class:"btn btn-secondary btn-sm flex-1 flex items-center justify-center space-x-1.5"},[r($,{class:"w-4 h-4"}),a[1]||(a[1]=s("span",null,"Message",-1))],8,I),s("button",{onClick:b=>p(t),class:"btn-icon-danger p-2",title:"Remove Friend"},[r(A,{class:"w-4 h-4"})],8,O)])]))),128))]))])}}};export{E as default}; +import{a as h,K as v,k,c as u,r as w,d as o,l as n,e as s,F as C,i as F,f as r,g as m,U as S,p as L,m as R,t as g,cd as $,ah as A}from"./index-BBRgbnZQ.js";const T={class:"max-w-4xl mx-auto"},U={key:0,class:"text-center py-6 text-gray-500 dark:text-gray-400"},B={key:1,class:"text-center py-10 bg-gray-50 dark:bg-gray-800/50 rounded-lg"},M={key:2,class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4"},N=["title"],V={class:"text-xs text-gray-500 mb-3"},z={class:"mt-auto flex items-center space-x-2 w-full"},I=["onClick"],O=["onClick"],E={__name:"FriendList",setup(j){const i=h(),x=v();k();const l=u(()=>i.friends),y=u(()=>i.isLoadingFriends);async function p(e){await x.showConfirmation({title:"Remove Friend",message:`Are you sure you want to remove ${e.username} from your friends list?`,confirmText:"Remove"})&&i.removeFriend(e.id)}async function f(e){i.openConversation({id:e.id,username:e.username,icon:e.icon})}function _(e){return e==="connected"?"bg-green-500":e==="absent"?"bg-yellow-500":"bg-gray-400"}function c(e){return e==="connected"?"Online":e==="absent"?"Absent":"Offline"}return(e,a)=>{const d=w("router-link");return n(),o("div",T,[y.value?(n(),o("div",U," Loading friends... ")):l.value.length===0?(n(),o("div",B,a[0]||(a[0]=[s("p",{class:"text-gray-500 dark:text-gray-400"},"Your friends list is empty.",-1),s("p",{class:"text-sm text-gray-400 dark:text-gray-500 mt-1"},"Use the 'Add Friend' tab to find people.",-1)]))):(n(),o("ul",M,[(n(!0),o(C,null,F(l.value,t=>(n(),o("li",{key:t.id,class:"bg-white dark:bg-gray-800 p-4 rounded-lg shadow-sm flex flex-col items-center text-center"},[r(d,{to:`/profile/${t.username}`,class:"relative"},{default:m(()=>[r(S,{icon:t.icon,username:t.username,"size-class":"h-20 w-20"},null,8,["icon","username"]),s("div",{class:L(["absolute bottom-1 right-1 w-5 h-5 border-4 border-white dark:border-gray-800 rounded-full",_(t.status)]),title:c(t.status)},null,10,N)]),_:2},1032,["to"]),r(d,{to:`/profile/${t.username}`,class:"mt-3 font-bold text-gray-900 dark:text-gray-100 hover:underline truncate w-full"},{default:m(()=>[R(g(t.username),1)]),_:2},1032,["to"]),s("p",V,g(c(t.status)),1),s("div",z,[s("button",{onClick:b=>f(t),class:"btn btn-secondary btn-sm flex-1 flex items-center justify-center space-x-1.5"},[r($,{class:"w-4 h-4"}),a[1]||(a[1]=s("span",null,"Message",-1))],8,I),s("button",{onClick:b=>p(t),class:"btn-icon-danger p-2",title:"Remove Friend"},[r(A,{class:"w-4 h-4"})],8,O)])]))),128))]))])}}};export{E as default};
frontend/dist/ui_assets/FriendRequestList-QIJNuKIF.js+1 −1 renamed@@ -1 +1 @@ -import{a as p,c as r,d as s,l as n,e,F as m,i as x,f as y,U as h,t as d}from"./index-CEXks4lv.js";const f={class:"max-w-2xl mx-auto"},k={key:0,class:"text-center py-6 text-gray-500"},b={key:1,class:"text-center py-10 bg-gray-50 dark:bg-gray-800/50 rounded-lg"},v={key:2,class:"space-y-3"},q={class:"flex items-center space-x-3"},w={class:"font-medium text-gray-800 dark:text-gray-100"},F={class:"text-xs text-gray-500"},L={class:"flex items-center space-x-2"},R=["onClick"],S=["onClick"],A={__name:"FriendRequestList",setup(D){const a=p(),c=r(()=>a.pendingFriendRequests),l=r(()=>a.isLoadingRequests);function u(i){a.acceptFriendRequest(i)}function _(i){a.rejectFriendRequest(i)}return(i,o)=>(n(),s("div",f,[l.value?(n(),s("div",k," Loading requests... ")):c.value.length===0?(n(),s("div",b,o[0]||(o[0]=[e("p",{class:"text-gray-500 dark:text-gray-400"},"No pending friend requests.",-1)]))):(n(),s("ul",v,[(n(!0),s(m,null,x(c.value,t=>(n(),s("li",{key:t.friendship_id,class:"bg-white dark:bg-gray-800 p-3 rounded-lg shadow-sm flex items-center justify-between"},[e("div",q,[y(h,{username:t.requesting_username,"size-class":"h-10 w-10"},null,8,["username"]),e("div",null,[e("span",w,d(t.requesting_username),1),e("p",F,"Sent on "+d(new Date(t.requested_at).toLocaleDateString()),1)])]),e("div",L,[e("button",{onClick:g=>_(t.friendship_id),class:"btn btn-secondary btn-sm"},"Decline",8,R),e("button",{onClick:g=>u(t.friendship_id),class:"btn btn-primary btn-sm"},"Accept",8,S)])]))),128))]))]))}};export{A as default}; +import{a as p,c as r,d as s,l as n,e,F as m,i as x,f as y,U as h,t as d}from"./index-BBRgbnZQ.js";const f={class:"max-w-2xl mx-auto"},k={key:0,class:"text-center py-6 text-gray-500"},b={key:1,class:"text-center py-10 bg-gray-50 dark:bg-gray-800/50 rounded-lg"},v={key:2,class:"space-y-3"},q={class:"flex items-center space-x-3"},w={class:"font-medium text-gray-800 dark:text-gray-100"},F={class:"text-xs text-gray-500"},L={class:"flex items-center space-x-2"},R=["onClick"],S=["onClick"],A={__name:"FriendRequestList",setup(D){const a=p(),c=r(()=>a.pendingFriendRequests),l=r(()=>a.isLoadingRequests);function u(i){a.acceptFriendRequest(i)}function _(i){a.rejectFriendRequest(i)}return(i,o)=>(n(),s("div",f,[l.value?(n(),s("div",k," Loading requests... ")):c.value.length===0?(n(),s("div",b,o[0]||(o[0]=[e("p",{class:"text-gray-500 dark:text-gray-400"},"No pending friend requests.",-1)]))):(n(),s("ul",v,[(n(!0),s(m,null,x(c.value,t=>(n(),s("li",{key:t.friendship_id,class:"bg-white dark:bg-gray-800 p-3 rounded-lg shadow-sm flex items-center justify-between"},[e("div",q,[y(h,{username:t.requesting_username,"size-class":"h-10 w-10"},null,8,["username"]),e("div",null,[e("span",w,d(t.requesting_username),1),e("p",F,"Sent on "+d(new Date(t.requested_at).toLocaleDateString()),1)])]),e("div",L,[e("button",{onClick:g=>_(t.friendship_id),class:"btn btn-secondary btn-sm"},"Decline",8,R),e("button",{onClick:g=>u(t.friendship_id),class:"btn btn-primary btn-sm"},"Accept",8,S)])]))),128))]))]))}};export{A as default};
frontend/dist/ui_assets/FriendsView-BgxfK7Dw.js+2 −2 renamed@@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["ui_assets/AddFriend-SF0kmOHR.js","ui_assets/index-CEXks4lv.js","ui_assets/index-MA3P6vxv.css","ui_assets/FriendRequestList-DAJlHtK3.js","ui_assets/FriendList-De5V2pf3.js","ui_assets/BlockedList-zivMfqrZ.js"])))=>i.map(i=>d[i]); -import{a as w,s as C,c as v,v as x,x as F,y as A,o as E,n as o,g as t,l as e,z as V,d as i,h as d,e as n,S as c,f as u,j as _,A as f,B as q,F as B,i as D,p as P,C as R,t as k,D as m}from"./index-CEXks4lv.js";import{P as S}from"./PageViewLayout-BRrEfO0i.js";import{_ as T}from"./IconNoSymbol-DV6K_m0o.js";const $=["onClick"],I={class:"flex items-center space-x-3"},O={key:0,class:"bg-red-500 text-white text-xs font-bold rounded-full h-5 w-5 flex items-center justify-center"},j={key:0},N={key:1},z={key:2},Q={__name:"FriendsView",setup(M){const g=f(()=>m(()=>import("./AddFriend-SF0kmOHR.js"),__vite__mapDeps([0,1,2]))),p=f(()=>m(()=>import("./FriendRequestList-DAJlHtK3.js"),__vite__mapDeps([3,1,2]))),y=f(()=>m(()=>import("./FriendList-De5V2pf3.js"),__vite__mapDeps([4,1,2]))),b=f(()=>m(()=>import("./BlockedList-zivMfqrZ.js"),__vite__mapDeps([5,1,2]))),r=w(),l=C("all"),L=v(()=>r.friendRequestCount),h=v(()=>[{id:"all",label:"All Friends",icon:x},{id:"requests",label:"Requests",icon:F,count:L.value},{id:"add",label:"Add Friend",icon:A},{id:"blocked",label:"Blocked",icon:T}]);return E(()=>{r.fetchFriends(),r.fetchPendingRequests(),r.fetchBlockedUsers()}),(U,s)=>(e(),o(S,{title:"Friends","title-icon":x},{sidebar:t(()=>[(e(!0),i(B,null,D(h.value,a=>(e(),i("button",{key:a.id,onClick:G=>l.value=a.id,class:P([l.value===a.id?"bg-blue-100 dark:bg-blue-900/50 text-blue-700 dark:text-blue-300":"text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700","w-full flex items-center justify-between text-left px-3 py-2.5 rounded-lg text-sm font-medium transition-colors"])},[n("div",I,[(e(),o(R(a.icon),{class:"w-5 h-5 flex-shrink-0"})),n("span",null,k(a.label),1)]),a.count>0?(e(),i("span",O,k(a.count),1)):d("",!0)],10,$))),128))]),main:t(()=>[V(n("div",null,[(e(),o(c,null,{fallback:t(()=>s[0]||(s[0]=[n("div",{class:"text-center text-gray-500"},"Loading friends...",-1)])),default:t(()=>[u(_(y))]),_:1}))],512),[[q,l.value==="all"]]),l.value==="requests"?(e(),i("div",j,[(e(),o(c,null,{fallback:t(()=>s[1]||(s[1]=[n("div",{class:"text-center text-gray-500"},"Loading requests...",-1)])),default:t(()=>[u(_(p))]),_:1}))])):d("",!0),l.value==="add"?(e(),i("div",N,[(e(),o(c,null,{fallback:t(()=>s[2]||(s[2]=[n("div",{class:"text-center text-gray-500"},"Loading...",-1)])),default:t(()=>[u(_(g))]),_:1}))])):d("",!0),l.value==="blocked"?(e(),i("div",z,[(e(),o(c,null,{fallback:t(()=>s[3]||(s[3]=[n("div",{class:"text-center text-gray-500"},"Loading...",-1)])),default:t(()=>[u(_(b))]),_:1}))])):d("",!0)]),_:1}))}};export{Q as default}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["ui_assets/AddFriend-MjpwGod-.js","ui_assets/index-BBRgbnZQ.js","ui_assets/index-BtkqZe_k.css","ui_assets/FriendRequestList-QIJNuKIF.js","ui_assets/FriendList-BGhizqey.js","ui_assets/BlockedList-B9-i_iMo.js"])))=>i.map(i=>d[i]); +import{a as w,s as C,c as v,v as x,x as F,y as A,o as E,n as o,g as t,l as e,z as V,d as i,h as d,e as n,S as c,f as u,j as _,A as f,B as q,F as B,i as D,p as P,C as R,t as k,D as m}from"./index-BBRgbnZQ.js";import{P as S}from"./PageViewLayout-CieE8QU1.js";import{_ as T}from"./IconNoSymbol-D0HTNvx3.js";const $=["onClick"],I={class:"flex items-center space-x-3"},O={key:0,class:"bg-red-500 text-white text-xs font-bold rounded-full h-5 w-5 flex items-center justify-center"},j={key:0},N={key:1},z={key:2},Q={__name:"FriendsView",setup(M){const g=f(()=>m(()=>import("./AddFriend-MjpwGod-.js"),__vite__mapDeps([0,1,2]))),p=f(()=>m(()=>import("./FriendRequestList-QIJNuKIF.js"),__vite__mapDeps([3,1,2]))),y=f(()=>m(()=>import("./FriendList-BGhizqey.js"),__vite__mapDeps([4,1,2]))),b=f(()=>m(()=>import("./BlockedList-B9-i_iMo.js"),__vite__mapDeps([5,1,2]))),r=w(),l=C("all"),L=v(()=>r.friendRequestCount),h=v(()=>[{id:"all",label:"All Friends",icon:x},{id:"requests",label:"Requests",icon:F,count:L.value},{id:"add",label:"Add Friend",icon:A},{id:"blocked",label:"Blocked",icon:T}]);return E(()=>{r.fetchFriends(),r.fetchPendingRequests(),r.fetchBlockedUsers()}),(U,s)=>(e(),o(S,{title:"Friends","title-icon":x},{sidebar:t(()=>[(e(!0),i(B,null,D(h.value,a=>(e(),i("button",{key:a.id,onClick:G=>l.value=a.id,class:P([l.value===a.id?"bg-blue-100 dark:bg-blue-900/50 text-blue-700 dark:text-blue-300":"text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700","w-full flex items-center justify-between text-left px-3 py-2.5 rounded-lg text-sm font-medium transition-colors"])},[n("div",I,[(e(),o(R(a.icon),{class:"w-5 h-5 flex-shrink-0"})),n("span",null,k(a.label),1)]),a.count>0?(e(),i("span",O,k(a.count),1)):d("",!0)],10,$))),128))]),main:t(()=>[V(n("div",null,[(e(),o(c,null,{fallback:t(()=>s[0]||(s[0]=[n("div",{class:"text-center text-gray-500"},"Loading friends...",-1)])),default:t(()=>[u(_(y))]),_:1}))],512),[[q,l.value==="all"]]),l.value==="requests"?(e(),i("div",j,[(e(),o(c,null,{fallback:t(()=>s[1]||(s[1]=[n("div",{class:"text-center text-gray-500"},"Loading requests...",-1)])),default:t(()=>[u(_(p))]),_:1}))])):d("",!0),l.value==="add"?(e(),i("div",N,[(e(),o(c,null,{fallback:t(()=>s[2]||(s[2]=[n("div",{class:"text-center text-gray-500"},"Loading...",-1)])),default:t(()=>[u(_(g))]),_:1}))])):d("",!0),l.value==="blocked"?(e(),i("div",z,[(e(),o(c,null,{fallback:t(()=>s[3]||(s[3]=[n("div",{class:"text-center text-gray-500"},"Loading...",-1)])),default:t(()=>[u(_(b))]),_:1}))])):d("",!0)]),_:1}))}};export{Q as default};
frontend/dist/ui_assets/FunFactCategoryModal-DTYEqa_Q.js+1 −1 renamed@@ -1 +1 @@ -import{K as C,c as n,s as f,w,n as x,l as F,g as p,e as a,j as S,t as _,H as k,z as b,L as y,p as g}from"./index-CEXks4lv.js";import{_ as M}from"./GenericModal-Br5hR2Sz.js";import{u as B}from"./admin-Dmx5gjU7.js";const A={class:"flex items-center gap-4"},D={class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},N=["disabled"],z={__name:"FunFactCategoryModal",setup(U){const r=C(),u=B(),d=n(()=>r.modalData("funFactCategory")),i=n(()=>{var o;return(o=d.value)==null?void 0:o.category}),c=n(()=>{var o;return(o=d.value)==null?void 0:o.onSave}),t=f({name:"",is_active:!0,color:"#3B82F6"}),s=f(!1),v=n(()=>!!i.value);w(i,o=>{o?t.value={...o}:t.value={name:"",is_active:!0,color:"#3B82F6"}},{immediate:!0});async function m(){s.value=!0;try{v.value?await u.updateFunFactCategory(i.value.id,t.value):await u.createFunFactCategory(t.value),c.value&&c.value(),r.closeModal("funFactCategory")}finally{s.value=!1}}return(o,e)=>(F(),x(M,{modalName:"funFactCategory",title:v.value?"Edit Category":"Add Category"},{body:p(()=>[a("form",{onSubmit:k(m,["prevent"]),class:"space-y-4"},[a("div",null,[e[4]||(e[4]=a("label",{for:"cat-name",class:"label"},"Name",-1)),b(a("input",{id:"cat-name",type:"text","onUpdate:modelValue":e[0]||(e[0]=l=>t.value.name=l),class:"input-field",required:""},null,512),[[y,t.value.name]])]),a("div",A,[e[5]||(e[5]=a("label",{for:"cat-color",class:"label"},"Color",-1)),b(a("input",{id:"cat-color",type:"color","onUpdate:modelValue":e[1]||(e[1]=l=>t.value.color=l),class:"w-12 h-10 p-1 border rounded-md"},null,512),[[y,t.value.color]])]),a("div",D,[e[6]||(e[6]=a("label",{for:"cat-active",class:"text-sm font-medium"},"Active",-1)),a("button",{onClick:e[2]||(e[2]=l=>t.value.is_active=!t.value.is_active),type:"button",class:g(["relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors",t.value.is_active?"bg-blue-600":"bg-gray-200 dark:bg-gray-600"])},[a("span",{class:g([t.value.is_active?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition"])},null,2)],2)])],32)]),footer:p(()=>[a("button",{type:"button",onClick:e[3]||(e[3]=l=>S(r).closeModal("funFactCategory")),class:"btn btn-secondary"},"Cancel"),a("button",{type:"button",onClick:m,class:"btn btn-primary",disabled:s.value},_(s.value?"Saving...":"Save"),9,N)]),_:1},8,["title"]))}};export{z as default}; +import{K as C,c as n,s as f,w,n as x,l as F,g as p,e as a,j as S,t as _,H as k,z as b,L as y,p as g}from"./index-BBRgbnZQ.js";import{_ as M}from"./GenericModal-eXiOHk6I.js";import{u as B}from"./admin-CwLQr1mG.js";const A={class:"flex items-center gap-4"},D={class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},N=["disabled"],z={__name:"FunFactCategoryModal",setup(U){const r=C(),u=B(),d=n(()=>r.modalData("funFactCategory")),i=n(()=>{var o;return(o=d.value)==null?void 0:o.category}),c=n(()=>{var o;return(o=d.value)==null?void 0:o.onSave}),t=f({name:"",is_active:!0,color:"#3B82F6"}),s=f(!1),v=n(()=>!!i.value);w(i,o=>{o?t.value={...o}:t.value={name:"",is_active:!0,color:"#3B82F6"}},{immediate:!0});async function m(){s.value=!0;try{v.value?await u.updateFunFactCategory(i.value.id,t.value):await u.createFunFactCategory(t.value),c.value&&c.value(),r.closeModal("funFactCategory")}finally{s.value=!1}}return(o,e)=>(F(),x(M,{modalName:"funFactCategory",title:v.value?"Edit Category":"Add Category"},{body:p(()=>[a("form",{onSubmit:k(m,["prevent"]),class:"space-y-4"},[a("div",null,[e[4]||(e[4]=a("label",{for:"cat-name",class:"label"},"Name",-1)),b(a("input",{id:"cat-name",type:"text","onUpdate:modelValue":e[0]||(e[0]=l=>t.value.name=l),class:"input-field",required:""},null,512),[[y,t.value.name]])]),a("div",A,[e[5]||(e[5]=a("label",{for:"cat-color",class:"label"},"Color",-1)),b(a("input",{id:"cat-color",type:"color","onUpdate:modelValue":e[1]||(e[1]=l=>t.value.color=l),class:"w-12 h-10 p-1 border rounded-md"},null,512),[[y,t.value.color]])]),a("div",D,[e[6]||(e[6]=a("label",{for:"cat-active",class:"text-sm font-medium"},"Active",-1)),a("button",{onClick:e[2]||(e[2]=l=>t.value.is_active=!t.value.is_active),type:"button",class:g(["relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors",t.value.is_active?"bg-blue-600":"bg-gray-200 dark:bg-gray-600"])},[a("span",{class:g([t.value.is_active?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition"])},null,2)],2)])],32)]),footer:p(()=>[a("button",{type:"button",onClick:e[3]||(e[3]=l=>S(r).closeModal("funFactCategory")),class:"btn btn-secondary"},"Cancel"),a("button",{type:"button",onClick:m,class:"btn btn-primary",disabled:s.value},_(s.value?"Saving...":"Save"),9,N)]),_:1},8,["title"]))}};export{z as default};
frontend/dist/ui_assets/FunFactModal-D4vSDtzF.js+1 −1 renamed@@ -1 +1 @@ -import{K as w,c as d,s as c,w as S,n as C,l as f,g as y,e as t,j as N,t as b,H as h,z as x,d as k,F as M,i as V,R as L,L as B,f as E,al as T,m as p,E as m}from"./index-CEXks4lv.js";import{_ as U}from"./GenericModal-Br5hR2Sz.js";const $=["value"],D={class:"bg-blue-50 dark:bg-gray-900/50 rounded-xl p-4 border border-blue-100 dark:border-gray-700"},I={class:"flex items-center gap-2 mb-3 text-blue-700 dark:text-blue-400"},j={class:"flex justify-end gap-3"},q=["disabled"],G={__name:"FunFactModal",setup(R){const l=w(),i=d(()=>l.modalData("funFact")),o=d(()=>{var a;return(a=i.value)==null?void 0:a.fact}),F=d(()=>{var a;return(a=i.value)==null?void 0:a.preselectedCategoryId}),v=d(()=>{var a;return(a=i.value)==null?void 0:a.onSave}),s=c({content:"",category_id:null}),r=c(!1),u=c([]);async function _(){try{const a=await m.get("/api/admin/fun-facts/categories");u.value=a.data}catch(a){console.error("Failed to fetch categories:",a)}}S(i,async a=>{var e;a&&(await _(),o.value?s.value={content:o.value.content,category_id:o.value.category.id}:s.value={content:"",category_id:F.value||((e=u.value[0])==null?void 0:e.id)||null})},{immediate:!0});async function g(){if(!(!s.value.content.trim()||!s.value.category_id)){r.value=!0;try{o.value?(await m.put(`/api/admin/fun-facts/${o.value.id}`,s.value),l.addNotification("Fun fact updated.","success")):(await m.post("/api/admin/fun-facts",s.value),l.addNotification("Fun fact created.","success")),v.value&&v.value(),l.closeModal("funFact")}finally{r.value=!1}}}return(a,e)=>(f(),C(U,{modalName:"funFact",title:o.value?"Edit Fun Fact":"New Fun Fact"},{body:y(()=>[t("form",{onSubmit:h(g,["prevent"]),class:"p-6 space-y-6"},[t("div",null,[e[3]||(e[3]=t("label",{for:"fact-category",class:"block text-sm font-medium"},"Category",-1)),x(t("select",{id:"fact-category","onUpdate:modelValue":e[0]||(e[0]=n=>s.value.category_id=n),class:"input-field mt-1",required:""},[(f(!0),k(M,null,V(u.value,n=>(f(),k("option",{key:n.id,value:n.id},b(n.name),9,$))),128))],512),[[L,s.value.category_id]])]),t("div",null,[e[4]||(e[4]=t("label",{for:"fact-content",class:"block text-sm font-medium"},"Content (Markdown Supported)",-1)),x(t("textarea",{id:"fact-content","onUpdate:modelValue":e[1]||(e[1]=n=>s.value.content=n),rows:"6",class:"input-field mt-1",placeholder:"Enter the fun fact here...",required:""},null,512),[[B,s.value.content]])]),t("div",D,[t("div",I,[E(T,{class:"w-4 h-4"}),e[5]||(e[5]=t("span",{class:"text-xs font-black uppercase tracking-widest"},"Formatting Guide",-1))]),e[6]||(e[6]=t("ul",{class:"text-[11px] space-y-2 text-gray-600 dark:text-gray-400 font-mono"},[t("li",null,[t("span",{class:"font-sans font-bold text-gray-800 dark:text-gray-200"},"Link:"),p(),t("code",null,"[Site Name](https://...)")]),t("li",null,[t("span",{class:"font-sans font-bold text-gray-800 dark:text-gray-200"},"Image:"),p(),t("code",null,"")]),t("li",null,[t("span",{class:"font-sans font-bold text-gray-800 dark:text-gray-200"},"Video:"),p(),t("code",null,"Just paste a YouTube URL on its own line")])],-1))])],32)]),footer:y(()=>[t("div",j,[t("button",{onClick:e[2]||(e[2]=n=>N(l).closeModal("funFact")),class:"btn btn-secondary"},"Cancel"),t("button",{onClick:g,class:"btn btn-primary",disabled:r.value},b(r.value?"Saving...":"Save Fact"),9,q)])]),_:1},8,["title"]))}};export{G as default}; +import{K as w,c as d,s as c,w as S,n as C,l as f,g as y,e as t,j as N,t as b,H as h,z as x,d as k,F as M,i as V,X as L,L as B,f as E,al as T,m as p,E as m}from"./index-BBRgbnZQ.js";import{_ as U}from"./GenericModal-eXiOHk6I.js";const $=["value"],D={class:"bg-blue-50 dark:bg-gray-900/50 rounded-xl p-4 border border-blue-100 dark:border-gray-700"},I={class:"flex items-center gap-2 mb-3 text-blue-700 dark:text-blue-400"},j={class:"flex justify-end gap-3"},q=["disabled"],H={__name:"FunFactModal",setup(z){const l=w(),i=d(()=>l.modalData("funFact")),o=d(()=>{var a;return(a=i.value)==null?void 0:a.fact}),F=d(()=>{var a;return(a=i.value)==null?void 0:a.preselectedCategoryId}),v=d(()=>{var a;return(a=i.value)==null?void 0:a.onSave}),s=c({content:"",category_id:null}),r=c(!1),u=c([]);async function _(){try{const a=await m.get("/api/admin/fun-facts/categories");u.value=a.data}catch(a){console.error("Failed to fetch categories:",a)}}S(i,async a=>{var e;a&&(await _(),o.value?s.value={content:o.value.content,category_id:o.value.category.id}:s.value={content:"",category_id:F.value||((e=u.value[0])==null?void 0:e.id)||null})},{immediate:!0});async function g(){if(!(!s.value.content.trim()||!s.value.category_id)){r.value=!0;try{o.value?(await m.put(`/api/admin/fun-facts/${o.value.id}`,s.value),l.addNotification("Fun fact updated.","success")):(await m.post("/api/admin/fun-facts",s.value),l.addNotification("Fun fact created.","success")),v.value&&v.value(),l.closeModal("funFact")}finally{r.value=!1}}}return(a,e)=>(f(),C(U,{modalName:"funFact",title:o.value?"Edit Fun Fact":"New Fun Fact"},{body:y(()=>[t("form",{onSubmit:h(g,["prevent"]),class:"p-6 space-y-6"},[t("div",null,[e[3]||(e[3]=t("label",{for:"fact-category",class:"block text-sm font-medium"},"Category",-1)),x(t("select",{id:"fact-category","onUpdate:modelValue":e[0]||(e[0]=n=>s.value.category_id=n),class:"input-field mt-1",required:""},[(f(!0),k(M,null,V(u.value,n=>(f(),k("option",{key:n.id,value:n.id},b(n.name),9,$))),128))],512),[[L,s.value.category_id]])]),t("div",null,[e[4]||(e[4]=t("label",{for:"fact-content",class:"block text-sm font-medium"},"Content (Markdown Supported)",-1)),x(t("textarea",{id:"fact-content","onUpdate:modelValue":e[1]||(e[1]=n=>s.value.content=n),rows:"6",class:"input-field mt-1",placeholder:"Enter the fun fact here...",required:""},null,512),[[B,s.value.content]])]),t("div",D,[t("div",I,[E(T,{class:"w-4 h-4"}),e[5]||(e[5]=t("span",{class:"text-xs font-black uppercase tracking-widest"},"Formatting Guide",-1))]),e[6]||(e[6]=t("ul",{class:"text-[11px] space-y-2 text-gray-600 dark:text-gray-400 font-mono"},[t("li",null,[t("span",{class:"font-sans font-bold text-gray-800 dark:text-gray-200"},"Link:"),p(),t("code",null,"[Site Name](https://...)")]),t("li",null,[t("span",{class:"font-sans font-bold text-gray-800 dark:text-gray-200"},"Image:"),p(),t("code",null,"")]),t("li",null,[t("span",{class:"font-sans font-bold text-gray-800 dark:text-gray-200"},"Video:"),p(),t("code",null,"Just paste a YouTube URL on its own line")])],-1))])],32)]),footer:y(()=>[t("div",j,[t("button",{onClick:e[2]||(e[2]=n=>N(l).closeModal("funFact")),class:"btn btn-secondary"},"Cancel"),t("button",{onClick:g,class:"btn btn-primary",disabled:r.value},b(r.value?"Saving...":"Save Fact"),9,q)])]),_:1},8,["title"]))}};export{H as default};
frontend/dist/ui_assets/ganttDiagram-OWAHRB6G-DHJ-yvIf.js+1 −1 renamedfrontend/dist/ui_assets/GeneralSettings-tF4SP_To.js+1 −1 renamed@@ -1 +1 @@ -import{u as I,P as L,Q as k,s as p,o as D,w as h,d as l,l as r,h as j,j as w,H as U,e,z as g,R as v,F as x,i as _,t as u,L as F,p as o}from"./index-CEXks4lv.js";const M={class:"space-y-10"},N={class:"space-y-8"},P={class:"grid grid-cols-1 md:grid-cols-2 gap-x-8 gap-y-6"},V=["value"],T=["value"],B=["value"],G={class:"flex items-center gap-4 mt-1"},$={class:"font-mono text-sm w-12 text-center"},E={class:"space-y-6 pt-6 border-t dark:border-gray-700"},R={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},H={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},J={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},O={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},Q={class:"mt-8 pt-5 border-t border-gray-200 dark:border-gray-700"},q={class:"flex justify-end"},K=["disabled"],Y={__name:"GeneralSettings",setup(W){const c=I(),m=L(),{user:n}=k(c),{languages:S}=k(m),s=p({user_ui_level:0,first_page:"feed",ai_response_language:"auto",auto_title:!1,show_token_counter:!0,fun_mode:!1,put_thoughts_in_context:!1,message_font_size:14}),i=p(!1),f=p(!1);let b="{}";const z=[{value:0,label:"Beginner"},{value:1,label:"Novice"},{value:2,label:"Intermediate"},{value:3,label:"Advanced"},{value:4,label:"Expert"}],C=[{value:"feed",label:"Social Feed"},{value:"last_discussion",label:"Last Used Discussion"},{value:"new_discussion",label:"New Discussion"}];function y(){n.value&&(s.value={user_ui_level:n.value.user_ui_level,first_page:n.value.first_page||"feed",ai_response_language:n.value.ai_response_language||"auto",auto_title:n.value.auto_title,show_token_counter:n.value.show_token_counter,fun_mode:n.value.fun_mode,put_thoughts_in_context:n.value.put_thoughts_in_context,message_font_size:n.value.message_font_size||14},b=JSON.stringify(s.value),f.value=!1)}D(()=>{y(),m.fetchLanguages()}),h(n,y,{deep:!0,immediate:!0}),h(s,d=>{f.value=JSON.stringify(d)!==b},{deep:!0});async function A(){i.value=!0;try{const d={user_ui_level:s.value.user_ui_level,first_page:s.value.first_page,ai_response_language:s.value.ai_response_language,auto_title:s.value.auto_title,show_token_counter:s.value.show_token_counter,fun_mode:s.value.fun_mode,put_thoughts_in_context:s.value.put_thoughts_in_context,message_font_size:s.value.message_font_size};await c.updateUserPreferences(d)}finally{i.value=!1}}return(d,t)=>(r(),l("div",M,[w(n)?(r(),l("form",{key:0,onSubmit:U(A,["prevent"])},[e("div",N,[t[21]||(t[21]=e("div",null,[e("h3",{class:"text-xl font-bold leading-6 text-gray-900 dark:text-white"},"General Settings"),e("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},"Customize your user experience and interface preferences.")],-1)),e("div",P,[e("div",null,[t[8]||(t[8]=e("label",{for:"uiLevel",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"UI Level",-1)),g(e("select",{id:"uiLevel","onUpdate:modelValue":t[0]||(t[0]=a=>s.value.user_ui_level=a),class:"input-field mt-1"},[(r(),l(x,null,_(z,a=>e("option",{key:a.value,value:a.value},u(a.label),9,V)),64))],512),[[v,s.value.user_ui_level,void 0,{number:!0}]]),t[9]||(t[9]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"Controls the complexity and number of features shown.",-1))]),e("div",null,[t[10]||(t[10]=e("label",{for:"homePage",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Default Home Page",-1)),g(e("select",{id:"homePage","onUpdate:modelValue":t[1]||(t[1]=a=>s.value.first_page=a),class:"input-field mt-1"},[(r(),l(x,null,_(C,a=>e("option",{key:a.value,value:a.value},u(a.label),9,T)),64))],512),[[v,s.value.first_page]]),t[11]||(t[11]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"Choose the first page you see after logging in.",-1))]),e("div",null,[t[13]||(t[13]=e("label",{for:"language",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"AI Response Language",-1)),g(e("select",{id:"language","onUpdate:modelValue":t[2]||(t[2]=a=>s.value.ai_response_language=a),class:"input-field mt-1"},[t[12]||(t[12]=e("option",{value:"auto"},"Auto-detect",-1)),(r(!0),l(x,null,_(w(S),a=>(r(),l("option",{key:a.value,value:a.value},u(a.label),9,B))),128))],512),[[v,s.value.ai_response_language]]),t[14]||(t[14]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"Instruct the AI to respond in a specific language.",-1))]),e("div",null,[t[15]||(t[15]=e("label",{for:"fontSize",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Message Font Size",-1)),e("div",G,[g(e("input",{type:"range",id:"fontSize","onUpdate:modelValue":t[3]||(t[3]=a=>s.value.message_font_size=a),min:"10",max:"24",class:"w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"},null,512),[[F,s.value.message_font_size,void 0,{number:!0}]]),e("span",$,u(s.value.message_font_size)+"px",1)]),t[16]||(t[16]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"Adjust the font size for chat messages.",-1))])]),e("div",E,[e("div",R,[t[17]||(t[17]=e("span",{class:"flex-grow flex flex-col pr-4"},[e("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Auto Generate Discussion Titles"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Automatically create a title for new discussions.")],-1)),e("button",{onClick:t[4]||(t[4]=a=>s.value.auto_title=!s.value.auto_title),type:"button",class:o([s.value.auto_title?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[e("span",{class:o([s.value.auto_title?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),e("div",H,[t[18]||(t[18]=e("span",{class:"flex-grow flex flex-col pr-4"},[e("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Show Token Counter"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Display a token counter in the chat input bar.")],-1)),e("button",{onClick:t[5]||(t[5]=a=>s.value.show_token_counter=!s.value.show_token_counter),type:"button",class:o([s.value.show_token_counter?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[e("span",{class:o([s.value.show_token_counter?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),e("div",J,[t[19]||(t[19]=e("span",{class:"flex-grow flex flex-col pr-4"},[e("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Fun Mode"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Enables more playful and whimsical AI responses.")],-1)),e("button",{onClick:t[6]||(t[6]=a=>s.value.fun_mode=!s.value.fun_mode),type:"button",class:o([s.value.fun_mode?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[e("span",{class:o([s.value.fun_mode?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),e("div",O,[t[20]||(t[20]=e("span",{class:"flex-grow flex flex-col pr-4"},[e("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Include AI Thoughts in Context"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},`AI's internal "thoughts" will be part of the next turn's history.`)],-1)),e("button",{onClick:t[7]||(t[7]=a=>s.value.put_thoughts_in_context=!s.value.put_thoughts_in_context),type:"button",class:o([s.value.put_thoughts_in_context?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[e("span",{class:o([s.value.put_thoughts_in_context?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)])])]),e("div",Q,[e("div",q,[e("button",{type:"submit",class:"btn btn-primary",disabled:i.value||!f.value},u(i.value?"Saving...":"Save General Settings"),9,K)])])],32)):j("",!0)]))}};export{Y as default}; +import{u as I,P as L,R as k,s as p,o as D,w as h,d as l,l as r,h as j,j as w,H as U,e,z as g,X as v,F as x,i as _,t as u,L as F,p as o}from"./index-BBRgbnZQ.js";const M={class:"space-y-10"},N={class:"space-y-8"},P={class:"grid grid-cols-1 md:grid-cols-2 gap-x-8 gap-y-6"},V=["value"],T=["value"],B=["value"],G={class:"flex items-center gap-4 mt-1"},$={class:"font-mono text-sm w-12 text-center"},E={class:"space-y-6 pt-6 border-t dark:border-gray-700"},R={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},H={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},J={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},O={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},X={class:"mt-8 pt-5 border-t border-gray-200 dark:border-gray-700"},q={class:"flex justify-end"},K=["disabled"],Y={__name:"GeneralSettings",setup(Q){const c=I(),m=L(),{user:n}=k(c),{languages:S}=k(m),s=p({user_ui_level:0,first_page:"feed",ai_response_language:"auto",auto_title:!1,show_token_counter:!0,fun_mode:!1,put_thoughts_in_context:!1,message_font_size:14}),i=p(!1),f=p(!1);let b="{}";const z=[{value:0,label:"Beginner"},{value:1,label:"Novice"},{value:2,label:"Intermediate"},{value:3,label:"Advanced"},{value:4,label:"Expert"}],C=[{value:"feed",label:"Social Feed"},{value:"last_discussion",label:"Last Used Discussion"},{value:"new_discussion",label:"New Discussion"}];function y(){n.value&&(s.value={user_ui_level:n.value.user_ui_level,first_page:n.value.first_page||"feed",ai_response_language:n.value.ai_response_language||"auto",auto_title:n.value.auto_title,show_token_counter:n.value.show_token_counter,fun_mode:n.value.fun_mode,put_thoughts_in_context:n.value.put_thoughts_in_context,message_font_size:n.value.message_font_size||14},b=JSON.stringify(s.value),f.value=!1)}D(()=>{y(),m.fetchLanguages()}),h(n,y,{deep:!0,immediate:!0}),h(s,d=>{f.value=JSON.stringify(d)!==b},{deep:!0});async function A(){i.value=!0;try{const d={user_ui_level:s.value.user_ui_level,first_page:s.value.first_page,ai_response_language:s.value.ai_response_language,auto_title:s.value.auto_title,show_token_counter:s.value.show_token_counter,fun_mode:s.value.fun_mode,put_thoughts_in_context:s.value.put_thoughts_in_context,message_font_size:s.value.message_font_size};await c.updateUserPreferences(d)}finally{i.value=!1}}return(d,t)=>(r(),l("div",M,[w(n)?(r(),l("form",{key:0,onSubmit:U(A,["prevent"])},[e("div",N,[t[21]||(t[21]=e("div",null,[e("h3",{class:"text-xl font-bold leading-6 text-gray-900 dark:text-white"},"General Settings"),e("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},"Customize your user experience and interface preferences.")],-1)),e("div",P,[e("div",null,[t[8]||(t[8]=e("label",{for:"uiLevel",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"UI Level",-1)),g(e("select",{id:"uiLevel","onUpdate:modelValue":t[0]||(t[0]=a=>s.value.user_ui_level=a),class:"input-field mt-1"},[(r(),l(x,null,_(z,a=>e("option",{key:a.value,value:a.value},u(a.label),9,V)),64))],512),[[v,s.value.user_ui_level,void 0,{number:!0}]]),t[9]||(t[9]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"Controls the complexity and number of features shown.",-1))]),e("div",null,[t[10]||(t[10]=e("label",{for:"homePage",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Default Home Page",-1)),g(e("select",{id:"homePage","onUpdate:modelValue":t[1]||(t[1]=a=>s.value.first_page=a),class:"input-field mt-1"},[(r(),l(x,null,_(C,a=>e("option",{key:a.value,value:a.value},u(a.label),9,T)),64))],512),[[v,s.value.first_page]]),t[11]||(t[11]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"Choose the first page you see after logging in.",-1))]),e("div",null,[t[13]||(t[13]=e("label",{for:"language",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"AI Response Language",-1)),g(e("select",{id:"language","onUpdate:modelValue":t[2]||(t[2]=a=>s.value.ai_response_language=a),class:"input-field mt-1"},[t[12]||(t[12]=e("option",{value:"auto"},"Auto-detect",-1)),(r(!0),l(x,null,_(w(S),a=>(r(),l("option",{key:a.value,value:a.value},u(a.label),9,B))),128))],512),[[v,s.value.ai_response_language]]),t[14]||(t[14]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"Instruct the AI to respond in a specific language.",-1))]),e("div",null,[t[15]||(t[15]=e("label",{for:"fontSize",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Message Font Size",-1)),e("div",G,[g(e("input",{type:"range",id:"fontSize","onUpdate:modelValue":t[3]||(t[3]=a=>s.value.message_font_size=a),min:"10",max:"24",class:"w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer dark:bg-gray-700"},null,512),[[F,s.value.message_font_size,void 0,{number:!0}]]),e("span",$,u(s.value.message_font_size)+"px",1)]),t[16]||(t[16]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"Adjust the font size for chat messages.",-1))])]),e("div",E,[e("div",R,[t[17]||(t[17]=e("span",{class:"flex-grow flex flex-col pr-4"},[e("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Auto Generate Discussion Titles"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Automatically create a title for new discussions.")],-1)),e("button",{onClick:t[4]||(t[4]=a=>s.value.auto_title=!s.value.auto_title),type:"button",class:o([s.value.auto_title?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[e("span",{class:o([s.value.auto_title?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),e("div",H,[t[18]||(t[18]=e("span",{class:"flex-grow flex flex-col pr-4"},[e("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Show Token Counter"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Display a token counter in the chat input bar.")],-1)),e("button",{onClick:t[5]||(t[5]=a=>s.value.show_token_counter=!s.value.show_token_counter),type:"button",class:o([s.value.show_token_counter?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[e("span",{class:o([s.value.show_token_counter?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),e("div",J,[t[19]||(t[19]=e("span",{class:"flex-grow flex flex-col pr-4"},[e("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Fun Mode"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Enables more playful and whimsical AI responses.")],-1)),e("button",{onClick:t[6]||(t[6]=a=>s.value.fun_mode=!s.value.fun_mode),type:"button",class:o([s.value.fun_mode?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[e("span",{class:o([s.value.fun_mode?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)]),e("div",O,[t[20]||(t[20]=e("span",{class:"flex-grow flex flex-col pr-4"},[e("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Include AI Thoughts in Context"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},`AI's internal "thoughts" will be part of the next turn's history.`)],-1)),e("button",{onClick:t[7]||(t[7]=a=>s.value.put_thoughts_in_context=!s.value.put_thoughts_in_context),type:"button",class:o([s.value.put_thoughts_in_context?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[e("span",{class:o([s.value.put_thoughts_in_context?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],2)])])]),e("div",X,[e("div",q,[e("button",{type:"submit",class:"btn btn-primary",disabled:i.value||!f.value},u(i.value?"Saving...":"Save General Settings"),9,K)])])],32)):j("",!0)]))}};export{Y as default};
frontend/dist/ui_assets/GenerateFunFactsModal-CVbpWgBb.js+1 −1 renamed@@ -1 +1 @@ -import{K as b,s as i,c as m,n as x,l as k,g as p,e as a,f as F,m as w,aq as S,p as T,t as M,H as h,z as f,L as v}from"./index-CEXks4lv.js";import{u as C}from"./admin-Dmx5gjU7.js";import{_ as G}from"./GenericModal-Br5hR2Sz.js";const _=["disabled"],B={__name:"GenerateFunFactsModal",setup(V){const n=b(),y=C(),o=i(""),l=i(""),s=i(!1),g=m(()=>n.modalData("generateFunFacts")),u=m(()=>{var t;return(t=g.value)==null?void 0:t.onTaskSubmitted});async function d(){if(!(!o.value.trim()||s.value)){s.value=!0;try{const t=await y.generateFunFacts(o.value,l.value);t&&(u.value&&u.value(t.id),n.openModal("tasksManager",{initialTaskId:t.id})),c()}catch{}finally{s.value=!1}}}function c(){o.value="",l.value="",n.closeModal("generateFunFacts")}return(t,e)=>(k(),x(G,{modalName:"generateFunFacts",title:"Generate Fun Facts with AI"},{body:p(()=>[e[4]||(e[4]=a("p",{class:"text-sm text-gray-600 dark:text-gray-400 mb-4"}," Provide a topic, idea, or a detailed prompt. The AI will generate fun facts based on your input. You can also specify a category to add them to. ",-1)),a("form",{onSubmit:h(d,["prevent"]),class:"space-y-4"},[a("div",null,[e[2]||(e[2]=a("label",{for:"ff-prompt",class:"block text-sm font-medium"},"Topic or Prompt",-1)),f(a("textarea",{id:"ff-prompt","onUpdate:modelValue":e[0]||(e[0]=r=>o.value=r),rows:"4",class:"input-field w-full mt-1",placeholder:"e.g., 'The history of coffee' or 'Generate 10 surprising facts about space exploration'"},null,512),[[v,o.value]])]),a("div",null,[e[3]||(e[3]=a("label",{for:"ff-category",class:"block text-sm font-medium"},"Category (optional)",-1)),f(a("input",{id:"ff-category","onUpdate:modelValue":e[1]||(e[1]=r=>l.value=r),type:"text",class:"input-field w-full mt-1",placeholder:"e.g., Space, History. If empty, uses the topic."},null,512),[[v,l.value]])])],32)]),footer:p(()=>[a("button",{onClick:c,class:"btn btn-secondary"},"Cancel"),a("button",{onClick:d,class:"btn btn-primary",disabled:!o.value.trim()||s.value},[F(S,{class:T(["w-4 h-4 mr-2",{"animate-pulse":s.value}])},null,8,["class"]),w(" "+M(s.value?"Generating...":"Generate"),1)],8,_)]),_:1}))}};export{B as default}; +import{K as b,s as i,c as m,n as x,l as k,g as p,e as a,f as F,m as w,aq as S,p as T,t as M,H as h,z as f,L as v}from"./index-BBRgbnZQ.js";import{u as C}from"./admin-CwLQr1mG.js";import{_ as G}from"./GenericModal-eXiOHk6I.js";const _=["disabled"],B={__name:"GenerateFunFactsModal",setup(V){const n=b(),y=C(),o=i(""),l=i(""),s=i(!1),g=m(()=>n.modalData("generateFunFacts")),u=m(()=>{var t;return(t=g.value)==null?void 0:t.onTaskSubmitted});async function d(){if(!(!o.value.trim()||s.value)){s.value=!0;try{const t=await y.generateFunFacts(o.value,l.value);t&&(u.value&&u.value(t.id),n.openModal("tasksManager",{initialTaskId:t.id})),c()}catch{}finally{s.value=!1}}}function c(){o.value="",l.value="",n.closeModal("generateFunFacts")}return(t,e)=>(k(),x(G,{modalName:"generateFunFacts",title:"Generate Fun Facts with AI"},{body:p(()=>[e[4]||(e[4]=a("p",{class:"text-sm text-gray-600 dark:text-gray-400 mb-4"}," Provide a topic, idea, or a detailed prompt. The AI will generate fun facts based on your input. You can also specify a category to add them to. ",-1)),a("form",{onSubmit:h(d,["prevent"]),class:"space-y-4"},[a("div",null,[e[2]||(e[2]=a("label",{for:"ff-prompt",class:"block text-sm font-medium"},"Topic or Prompt",-1)),f(a("textarea",{id:"ff-prompt","onUpdate:modelValue":e[0]||(e[0]=r=>o.value=r),rows:"4",class:"input-field w-full mt-1",placeholder:"e.g., 'The history of coffee' or 'Generate 10 surprising facts about space exploration'"},null,512),[[v,o.value]])]),a("div",null,[e[3]||(e[3]=a("label",{for:"ff-category",class:"block text-sm font-medium"},"Category (optional)",-1)),f(a("input",{id:"ff-category","onUpdate:modelValue":e[1]||(e[1]=r=>l.value=r),type:"text",class:"input-field w-full mt-1",placeholder:"e.g., Space, History. If empty, uses the topic."},null,512),[[v,l.value]])])],32)]),footer:p(()=>[a("button",{onClick:c,class:"btn btn-secondary"},"Cancel"),a("button",{onClick:d,class:"btn btn-primary",disabled:!o.value.trim()||s.value},[F(S,{class:T(["w-4 h-4 mr-2",{"animate-pulse":s.value}])},null,8,["class"]),w(" "+M(s.value?"Generating...":"Generate"),1)],8,_)]),_:1}))}};export{B as default};
frontend/dist/ui_assets/GeneratePersonalityModal-CkuCrkw9.js+0 −1 removed@@ -1 +0,0 @@ -import{K as w,P as k,a8 as N,Q as S,s as m,c as g,w as v,n as G,l,g as b,e as r,j as C,f as x,m as M,aq as A,t as f,d as u,h as d,z as B,L as D,an as I,a2 as V}from"./index-CEXks4lv.js";import{_ as $}from"./GenericModal-Br5hR2Sz.js";const O={class:"space-y-4"},U={key:0},j={key:1,class:"text-center p-6 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},z={key:0,class:"text-sm text-gray-500 mt-2"},E={key:1,class:"w-full bg-gray-200 rounded-full h-2.5 dark:bg-gray-600 mt-4"},F={key:2,class:"text-xs text-gray-500 mt-1"},J={class:"flex justify-end gap-3"},L=["disabled"],Q={__name:"GeneratePersonalityModal",setup(q){const a=w(),y=k(),h=N(),{tasks:_}=S(h),n=m(""),i=m(null),o=m(!1),s=g(()=>i.value?_.value.find(e=>e.id===i.value):null),c=g(()=>o.value||s.value&&["pending","running"].includes(s.value.status));v(()=>a.isModalOpen("generatePersonality"),e=>{e&&(n.value="",i.value=null,o.value=!1)}),v(s,e=>{if(e)if(e.status==="completed"){o.value=!1;let t=null;if(e.result&&typeof e.result=="string")try{t=JSON.parse(e.result)}catch(p){console.error("Failed to parse task result JSON:",p),a.addNotification("Generation completed, but result data was malformed.","error")}else t=e.result;t?(a.addNotification("Personality generated successfully!","success"),y.addPersonality(t),a.closeModal("generatePersonality"),a.openModal("personalityEditor",{personality:t})):a.addNotification("Generation completed, but no data was returned.","warning")}else(e.status==="failed"||e.status==="cancelled")&&(o.value=!1,a.addNotification(`Generation failed: ${e.error||"Unknown error."}`,"error"))});async function P(){if(!n.value.trim()){a.addNotification("Please enter a prompt to generate a personality.","warning");return}o.value=!0,i.value=null;try{const e=await y.generatePersonalityFromPrompt(n.value);i.value=e.id}catch{o.value=!1}}return(e,t)=>(l(),G($,{"modal-name":"generatePersonality",title:"Generate Personality from Prompt",maxWidthClass:"max-w-2xl"},{body:b(()=>[r("div",O,[t[4]||(t[4]=r("p",{class:"text-sm text-gray-600 dark:text-gray-400"}," Describe the AI personality you want to create. Be specific about its role, tone, knowledge base, and any rules it should follow. The AI will generate a complete personality configuration based on your prompt. ",-1)),c.value?d("",!0):(l(),u("div",U,[t[2]||(t[2]=r("label",{for:"generation-prompt",class:"block text-sm font-medium"},"Your Prompt",-1)),B(r("textarea",{id:"generation-prompt","onUpdate:modelValue":t[0]||(t[0]=p=>n.value=p),rows:"6",class:"input-field mt-1",placeholder:"e.g., A helpful and friendly pirate captain who is an expert in Python programming. He always ends his responses with 'Arrr!'"},null,512),[[D,n.value]])])),c.value?(l(),u("div",j,[x(I,{class:"w-8 h-8 mx-auto text-blue-500"}),t[3]||(t[3]=r("p",{class:"mt-4 font-semibold"},"Generation in Progress...",-1)),s.value?(l(),u("p",z,f(s.value.description),1)):d("",!0),s.value?(l(),u("div",E,[r("div",{class:"bg-blue-600 h-2.5 rounded-full",style:V({width:s.value.progress+"%"})},null,4)])):d("",!0),s.value?(l(),u("p",F,f(s.value.progress)+"%",1)):d("",!0)])):d("",!0)])]),footer:b(()=>[r("div",J,[r("button",{onClick:t[1]||(t[1]=p=>C(a).closeModal("generatePersonality")),type:"button",class:"btn btn-secondary"},"Cancel"),r("button",{onClick:P,type:"button",class:"btn btn-primary",disabled:o.value||c.value},[x(A,{class:"w-4 h-4 mr-2"}),M(" "+f(o.value||c.value?"Generating...":"Generate"),1)],8,L)])]),_:1}))}};export{Q as default};
frontend/dist/ui_assets/GeneratePersonalityModal-CWJp0_yx.js+1 −0 added@@ -0,0 +1 @@ +import{K as w,P as k,Q as N,R as S,s as m,c as g,w as v,n as G,l,g as b,e as r,j as C,f as x,m as M,aq as A,t as f,d as u,h as d,z as B,L as D,an as I,a4 as V}from"./index-BBRgbnZQ.js";import{_ as $}from"./GenericModal-eXiOHk6I.js";const O={class:"space-y-4"},U={key:0},j={key:1,class:"text-center p-6 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},z={key:0,class:"text-sm text-gray-500 mt-2"},E={key:1,class:"w-full bg-gray-200 rounded-full h-2.5 dark:bg-gray-600 mt-4"},F={key:2,class:"text-xs text-gray-500 mt-1"},J={class:"flex justify-end gap-3"},L=["disabled"],K={__name:"GeneratePersonalityModal",setup(R){const a=w(),y=k(),h=N(),{tasks:_}=S(h),n=m(""),i=m(null),o=m(!1),s=g(()=>i.value?_.value.find(e=>e.id===i.value):null),c=g(()=>o.value||s.value&&["pending","running"].includes(s.value.status));v(()=>a.isModalOpen("generatePersonality"),e=>{e&&(n.value="",i.value=null,o.value=!1)}),v(s,e=>{if(e)if(e.status==="completed"){o.value=!1;let t=null;if(e.result&&typeof e.result=="string")try{t=JSON.parse(e.result)}catch(p){console.error("Failed to parse task result JSON:",p),a.addNotification("Generation completed, but result data was malformed.","error")}else t=e.result;t?(a.addNotification("Personality generated successfully!","success"),y.addPersonality(t),a.closeModal("generatePersonality"),a.openModal("personalityEditor",{personality:t})):a.addNotification("Generation completed, but no data was returned.","warning")}else(e.status==="failed"||e.status==="cancelled")&&(o.value=!1,a.addNotification(`Generation failed: ${e.error||"Unknown error."}`,"error"))});async function P(){if(!n.value.trim()){a.addNotification("Please enter a prompt to generate a personality.","warning");return}o.value=!0,i.value=null;try{const e=await y.generatePersonalityFromPrompt(n.value);i.value=e.id}catch{o.value=!1}}return(e,t)=>(l(),G($,{"modal-name":"generatePersonality",title:"Generate Personality from Prompt",maxWidthClass:"max-w-2xl"},{body:b(()=>[r("div",O,[t[4]||(t[4]=r("p",{class:"text-sm text-gray-600 dark:text-gray-400"}," Describe the AI personality you want to create. Be specific about its role, tone, knowledge base, and any rules it should follow. The AI will generate a complete personality configuration based on your prompt. ",-1)),c.value?d("",!0):(l(),u("div",U,[t[2]||(t[2]=r("label",{for:"generation-prompt",class:"block text-sm font-medium"},"Your Prompt",-1)),B(r("textarea",{id:"generation-prompt","onUpdate:modelValue":t[0]||(t[0]=p=>n.value=p),rows:"6",class:"input-field mt-1",placeholder:"e.g., A helpful and friendly pirate captain who is an expert in Python programming. He always ends his responses with 'Arrr!'"},null,512),[[D,n.value]])])),c.value?(l(),u("div",j,[x(I,{class:"w-8 h-8 mx-auto text-blue-500"}),t[3]||(t[3]=r("p",{class:"mt-4 font-semibold"},"Generation in Progress...",-1)),s.value?(l(),u("p",z,f(s.value.description),1)):d("",!0),s.value?(l(),u("div",E,[r("div",{class:"bg-blue-600 h-2.5 rounded-full",style:V({width:s.value.progress+"%"})},null,4)])):d("",!0),s.value?(l(),u("p",F,f(s.value.progress)+"%",1)):d("",!0)])):d("",!0)])]),footer:b(()=>[r("div",J,[r("button",{onClick:t[1]||(t[1]=p=>C(a).closeModal("generatePersonality")),type:"button",class:"btn btn-secondary"},"Cancel"),r("button",{onClick:P,type:"button",class:"btn btn-primary",disabled:o.value||c.value},[x(A,{class:"w-4 h-4 mr-2"}),M(" "+f(o.value||c.value?"Generating...":"Generate"),1)],8,L)])]),_:1}))}};export{K as default};
frontend/dist/ui_assets/GeneratePromptModal-B-BVrlI1.js+1 −0 added@@ -0,0 +1 @@ +import{K as S,as as g,Q as w,s as c,c as r,n as P,l as k,g as d,e as s,f as _,m as h,aq as x,p as M,t as C,H as G,z as N,L as T}from"./index-BBRgbnZQ.js";import{u as D}from"./admin-CwLQr1mG.js";import{_ as B}from"./GenericModal-eXiOHk6I.js";const V=["disabled"],L={__name:"GeneratePromptModal",setup(z){const l=S(),f=D(),v=g();w();const t=c(""),a=c(!1),n=r(()=>l.modalData("generatePrompt")),i=r(()=>{var e;return((e=n.value)==null?void 0:e.isSystemPrompt)||!1}),m=r(()=>{var e;return(e=n.value)==null?void 0:e.onTaskSubmitted}),y=r(()=>i.value?"Generate New System Prompt":"Generate New User Prompt");async function u(){if(!(!t.value.trim()||a.value)){a.value=!0;try{let e;i.value?e=await f.generateSystemPrompt(t.value):e=await v.generatePrompt(t.value),e&&(m.value&&m.value(e.id),l.openModal("tasksManager",{initialTaskId:e.id})),p()}catch{}finally{a.value=!1}}}function p(){t.value="",l.closeModal("generatePrompt")}return(e,o)=>(k(),P(B,{modalName:"generatePrompt",title:y.value},{body:d(()=>[o[1]||(o[1]=s("p",{class:"text-sm text-gray-600 dark:text-gray-400 mb-4"},' Describe the kind of prompt you want the AI to create. Be descriptive. For example: "Create a prompt that acts as a Python coding expert, specializing in data analysis with pandas." ',-1)),s("form",{onSubmit:G(u,["prevent"])},[N(s("textarea",{"onUpdate:modelValue":o[0]||(o[0]=b=>t.value=b),rows:"6",class:"input-field w-full",placeholder:"Describe the prompt you want to create..."},null,512),[[T,t.value]])],32)]),footer:d(()=>[s("button",{onClick:p,class:"btn btn-secondary"},"Cancel"),s("button",{onClick:u,class:"btn btn-primary",disabled:!t.value.trim()||a.value},[_(x,{class:M(["w-4 h-4 mr-2",{"animate-pulse":a.value}])},null,8,["class"]),h(" "+C(a.value?"Generating...":"Generate"),1)],8,V)]),_:1},8,["title"]))}};export{L as default};
frontend/dist/ui_assets/GeneratePromptModal-kmSOcWCB.js+0 −1 removed@@ -1 +0,0 @@ -import{K as S,as as g,a8 as w,s as c,c as r,n as P,l as k,g as d,e as s,f as _,m as h,aq as x,p as M,t as C,H as G,z as N,L as T}from"./index-CEXks4lv.js";import{u as D}from"./admin-Dmx5gjU7.js";import{_ as B}from"./GenericModal-Br5hR2Sz.js";const V=["disabled"],L={__name:"GeneratePromptModal",setup(z){const l=S(),f=D(),v=g();w();const t=c(""),a=c(!1),n=r(()=>l.modalData("generatePrompt")),i=r(()=>{var e;return((e=n.value)==null?void 0:e.isSystemPrompt)||!1}),m=r(()=>{var e;return(e=n.value)==null?void 0:e.onTaskSubmitted}),y=r(()=>i.value?"Generate New System Prompt":"Generate New User Prompt");async function u(){if(!(!t.value.trim()||a.value)){a.value=!0;try{let e;i.value?e=await f.generateSystemPrompt(t.value):e=await v.generatePrompt(t.value),e&&(m.value&&m.value(e.id),l.openModal("tasksManager",{initialTaskId:e.id})),p()}catch{}finally{a.value=!1}}}function p(){t.value="",l.closeModal("generatePrompt")}return(e,o)=>(k(),P(B,{modalName:"generatePrompt",title:y.value},{body:d(()=>[o[1]||(o[1]=s("p",{class:"text-sm text-gray-600 dark:text-gray-400 mb-4"},' Describe the kind of prompt you want the AI to create. Be descriptive. For example: "Create a prompt that acts as a Python coding expert, specializing in data analysis with pandas." ',-1)),s("form",{onSubmit:G(u,["prevent"])},[N(s("textarea",{"onUpdate:modelValue":o[0]||(o[0]=b=>t.value=b),rows:"6",class:"input-field w-full",placeholder:"Describe the prompt you want to create..."},null,512),[[T,t.value]])],32)]),footer:d(()=>[s("button",{onClick:p,class:"btn btn-secondary"},"Cancel"),s("button",{onClick:u,class:"btn btn-primary",disabled:!t.value.trim()||a.value},[_(x,{class:M(["w-4 h-4 mr-2",{"animate-pulse":a.value}])},null,8,["class"]),h(" "+C(a.value?"Generating...":"Generate"),1)],8,V)]),_:1},8,["title"]))}};export{L as default};
frontend/dist/ui_assets/GenericModal-eXiOHk6I.js+1 −1 renamed@@ -1 +1 @@ -import{K as g,c as h,o as k,X as x,n as w,l as s,f as c,g as f,d as o,h as l,a5 as p,e as r,p as C,t as B,a0 as N,ab as d,a6 as S}from"./index-CEXks4lv.js";const _={key:0,class:"fixed inset-0 z-50 flex items-center justify-center p-4 pointer-events-none"},$={class:"flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-700 flex-shrink-0"},M={class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},E={class:"p-6 overflow-y-auto flex-1"},O={key:0,class:"flex items-center justify-end p-4 space-x-3 bg-gray-50 dark:bg-gray-800/50 border-t border-gray-200 dark:border-gray-700 flex-shrink-0"},z={__name:"GenericModal",props:{modalName:{type:String,default:""},visible:{type:Boolean,default:!1},title:{type:String,default:"Modal"},allowOverlayClose:{type:Boolean,default:!0},maxWidthClass:{type:String,default:"max-w-xl"},showCloseButton:{type:Boolean,default:!0}},emits:["close"],setup(a,{emit:v}){const e=a,b=v,u=g(),n=h(()=>e.modalName?u.isModalOpen(e.modalName):e.visible);function i(){b("close"),e.modalName&&u.closeModal(e.modalName)}function y(t){t.key==="Escape"&&n.value&&e.allowOverlayClose&&e.showCloseButton&&i()}return k(()=>{document.addEventListener("keydown",y)}),x(()=>{document.removeEventListener("keydown",y)}),(t,m)=>(s(),w(S,{to:"body"},[c(p,{"enter-active-class":"transition-opacity ease-out duration-300","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"transition-opacity ease-in duration-200","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:f(()=>[n.value?(s(),o("div",{key:0,class:"fixed inset-0 bg-black/60 backdrop-blur-sm z-40",onClick:m[0]||(m[0]=V=>a.allowOverlayClose?i():null)})):l("",!0)]),_:1}),c(p,{"enter-active-class":"transition ease-out duration-300","enter-from-class":"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95","enter-to-class":"opacity-100 translate-y-0 sm:scale-100","leave-active-class":"transition ease-in duration-200","leave-from-class":"opacity-100 translate-y-0 sm:scale-100","leave-to-class":"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"},{default:f(()=>[n.value?(s(),o("div",_,[r("div",{class:C(["modal-panel bg-white dark:bg-gray-800 rounded-lg shadow-xl w-full flex flex-col max-h-[90vh] pointer-events-auto",[a.maxWidthClass]])},[r("header",$,[r("h2",M,B(a.title),1),a.showCloseButton?(s(),o("button",{key:0,onClick:i,class:"p-1 rounded-full text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-600 transition-colors"},[c(N,{class:"w-6 h-6"})])):l("",!0)]),r("main",E,[d(t.$slots,"body",{},()=>[d(t.$slots,"default")])]),t.$slots.footer?(s(),o("footer",O,[d(t.$slots,"footer")])):l("",!0)],2)])):l("",!0)]),_:3})]))}};export{z as _}; +import{K as g,c as h,o as k,V as x,n as w,l as s,f as c,g as f,d as o,h as l,a7 as p,e as r,p as C,t as B,a2 as N,ab as d,a8 as S}from"./index-BBRgbnZQ.js";const _={key:0,class:"fixed inset-0 z-50 flex items-center justify-center p-4 pointer-events-none"},$={class:"flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-700 flex-shrink-0"},M={class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},V={class:"p-6 overflow-y-auto flex-1"},E={key:0,class:"flex items-center justify-end p-4 space-x-3 bg-gray-50 dark:bg-gray-800/50 border-t border-gray-200 dark:border-gray-700 flex-shrink-0"},z={__name:"GenericModal",props:{modalName:{type:String,default:""},visible:{type:Boolean,default:!1},title:{type:String,default:"Modal"},allowOverlayClose:{type:Boolean,default:!0},maxWidthClass:{type:String,default:"max-w-xl"},showCloseButton:{type:Boolean,default:!0}},emits:["close"],setup(a,{emit:v}){const e=a,b=v,u=g(),n=h(()=>e.modalName?u.isModalOpen(e.modalName):e.visible);function i(){b("close"),e.modalName&&u.closeModal(e.modalName)}function y(t){t.key==="Escape"&&n.value&&e.allowOverlayClose&&e.showCloseButton&&i()}return k(()=>{document.addEventListener("keydown",y)}),x(()=>{document.removeEventListener("keydown",y)}),(t,m)=>(s(),w(S,{to:"body"},[c(p,{"enter-active-class":"transition-opacity ease-out duration-300","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"transition-opacity ease-in duration-200","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:f(()=>[n.value?(s(),o("div",{key:0,class:"fixed inset-0 bg-black/60 backdrop-blur-sm z-40",onClick:m[0]||(m[0]=O=>a.allowOverlayClose?i():null)})):l("",!0)]),_:1}),c(p,{"enter-active-class":"transition ease-out duration-300","enter-from-class":"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95","enter-to-class":"opacity-100 translate-y-0 sm:scale-100","leave-active-class":"transition ease-in duration-200","leave-from-class":"opacity-100 translate-y-0 sm:scale-100","leave-to-class":"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"},{default:f(()=>[n.value?(s(),o("div",_,[r("div",{class:C(["modal-panel bg-white dark:bg-gray-800 rounded-lg shadow-xl w-full flex flex-col max-h-[90vh] pointer-events-auto",[a.maxWidthClass]])},[r("header",$,[r("h2",M,B(a.title),1),a.showCloseButton?(s(),o("button",{key:0,onClick:i,class:"p-1 rounded-full text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-600 transition-colors"},[c(N,{class:"w-6 h-6"})])):l("",!0)]),r("main",V,[d(t.$slots,"body",{},()=>[d(t.$slots,"default")])]),t.$slots.footer?(s(),o("footer",E,[d(t.$slots,"footer")])):l("",!0)],2)])):l("",!0)]),_:3})]))}};export{z as _};
frontend/dist/ui_assets/gitGraphDiagram-NY62KEGX-CqPQ-hmu.js+1 −1 renamedfrontend/dist/ui_assets/GPULoad-omj4pq4T.js+0 −1 removed@@ -1 +0,0 @@ -import{u as P}from"./admin-Dmx5gjU7.js";import{K as S,c as I,s as G,o as U,X as A,d as a,l as o,e as t,f as c,m as f,p as B,Y as N,F as h,i as b,t as l,a2 as _,ah as C}from"./index-CEXks4lv.js";import{a as p}from"./AdminView-BDw3vQ10.js";import"./PageViewLayout-BRrEfO0i.js";import"./IconGlobeAlt-BuKg8C2g.js";import"./IconKey-x480EFkO.js";const D={class:"space-y-6"},V={class:"flex items-center justify-between"},F=["disabled"],K={key:0,class:"space-y-6"},L={class:"p-6 border-b dark:border-gray-700"},$={class:"flex flex-col md:flex-row md:items-center justify-between gap-6"},j={class:"flex items-center gap-4 min-w-[200px]"},z={class:"p-3 bg-green-100 dark:bg-green-900/30 rounded-full text-green-600 dark:text-green-400"},M={class:"font-bold text-lg text-gray-900 dark:text-white"},R={class:"text-sm text-gray-500 font-mono"},T={class:"flex-grow grid grid-cols-1 sm:grid-cols-2 gap-6"},E={class:"flex justify-between text-xs mb-1 font-medium text-gray-600 dark:text-gray-300"},X={class:"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2.5"},Y={class:"flex justify-between text-xs mb-1 font-medium text-gray-600 dark:text-gray-300"},q={class:"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2.5 mb-1"},H={class:"text-xs text-gray-500 text-right"},J={class:"bg-gray-50 dark:bg-gray-900/30 p-4"},O={key:0,class:"overflow-x-auto rounded-lg border dark:border-gray-700 bg-white dark:bg-gray-800"},Q={class:"w-full text-sm text-left"},W={class:"divide-y divide-gray-200 dark:divide-gray-700"},Z={class:"px-4 py-2 font-mono text-gray-600 dark:text-gray-400"},tt={class:"px-4 py-2 font-medium text-gray-900 dark:text-white"},st={class:"px-4 py-2 text-gray-600 dark:text-gray-400"},et={class:"px-4 py-2 text-right"},at=["onClick"],ot={key:1,class:"text-sm text-gray-500 italic px-2"},rt={key:1,class:"p-8 text-center bg-white dark:bg-gray-800 rounded-xl shadow-sm border dark:border-gray-700"},lt={key:2,class:"text-center py-10 text-gray-500"},yt={__name:"GPULoad",setup(nt){const g=P(),v=S(),d=I(()=>g.systemStatus),i=G(!1);let u=null;async function m(){i.value=!0;try{await g.fetchSystemStatus()}finally{i.value=!1}}U(()=>{m(),u=setInterval(m,3e3)}),A(()=>{u&&clearInterval(u)});async function k(r,s){(await v.showConfirmation({title:"Kill Process?",message:`Are you sure you want to kill process ${r} on ${s}? This might crash running generations.`,confirmText:"Kill",isDanger:!0})).confirmed&&await g.killProcess(r)}const y=r=>r?`${r.toFixed(1)} GB`:"0 GB",w=r=>r?`${r.toFixed(1)}%`:"0%";return(r,s)=>{var x;return o(),a("div",D,[t("div",V,[s[1]||(s[1]=t("h3",{class:"text-xl font-bold text-gray-900 dark:text-white"},"GPU Status",-1)),t("button",{onClick:m,class:"btn btn-secondary btn-sm",disabled:i.value},[c(N,{class:B(["w-4 h-4 mr-2",{"animate-spin":i.value}])},null,8,["class"]),s[0]||(s[0]=f(" Refresh "))],8,F)]),(x=d.value)!=null&&x.gpus&&d.value.gpus.length?(o(),a("div",K,[(o(!0),a(h,null,b(d.value.gpus,e=>(o(),a("div",{key:e.id,class:"bg-white dark:bg-gray-800 rounded-xl shadow-sm border dark:border-gray-700 overflow-hidden"},[t("div",L,[t("div",$,[t("div",j,[t("div",z,[c(p,{class:"w-8 h-8"})]),t("div",null,[t("h4",M,l(e.name),1),t("p",R,"ID: "+l(e.id),1)])]),t("div",T,[t("div",null,[t("div",E,[s[2]||(s[2]=t("span",null,"Compute Load",-1)),t("span",null,l(e.gpu_utilization)+"%",1)]),t("div",X,[t("div",{class:"bg-orange-500 h-2.5 rounded-full transition-all duration-500",style:_({width:e.gpu_utilization+"%"})},null,4)])]),t("div",null,[t("div",Y,[s[3]||(s[3]=t("span",null,"VRAM Usage",-1)),t("span",null,l(w(e.vram_usage_percent)),1)]),t("div",q,[t("div",{class:"bg-indigo-500 h-2.5 rounded-full transition-all duration-500",style:_({width:e.vram_usage_percent+"%"})},null,4)]),t("div",H,l(y(e.vram_used_gb))+" / "+l(y(e.vram_total_gb)),1)])])])]),t("div",J,[s[6]||(s[6]=t("h5",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300 mb-3 px-2"},"Active Processes",-1)),e.processes&&e.processes.length?(o(),a("div",O,[t("table",Q,[s[5]||(s[5]=t("thead",{class:"text-xs text-gray-500 uppercase bg-gray-100 dark:bg-gray-700"},[t("tr",null,[t("th",{class:"px-4 py-2 font-semibold"},"PID"),t("th",{class:"px-4 py-2 font-semibold"},"Process Name"),t("th",{class:"px-4 py-2 font-semibold"},"VRAM"),t("th",{class:"px-4 py-2 text-right"},"Action")])],-1)),t("tbody",W,[(o(!0),a(h,null,b(e.processes,n=>(o(),a("tr",{key:n.pid,class:"hover:bg-gray-50 dark:hover:bg-gray-700/50"},[t("td",Z,l(n.pid),1),t("td",tt,l(n.name),1),t("td",st,l(n.memory_used.toFixed(0))+" MB",1),t("td",et,[t("button",{onClick:dt=>k(n.pid,e.name),class:"btn btn-danger btn-xs",title:"Kill Process"},[c(C,{class:"w-3 h-3 mr-1"}),s[4]||(s[4]=f(" Kill "))],8,at)])]))),128))])])])):(o(),a("div",ot,"No active processes detected on this GPU."))])]))),128))])):d.value?(o(),a("div",rt,[c(p,{class:"w-12 h-12 mx-auto text-gray-400 mb-3"}),s[7]||(s[7]=t("h3",{class:"text-lg font-medium text-gray-900 dark:text-white"},"No GPU Detected",-1)),s[8]||(s[8]=t("p",{class:"text-gray-500 dark:text-gray-400 mt-1"},"NVIDIA drivers might not be installed or no compatible GPU was found.",-1))])):(o(),a("div",lt," Loading GPU status... "))])}}};export{yt as default};
frontend/dist/ui_assets/GPULoad-VvV8L4Wt.js+1 −0 added@@ -0,0 +1 @@ +import{u as P}from"./admin-CwLQr1mG.js";import{K as S,c as I,s as G,o as U,V as A,d as a,l as o,e as t,f as c,m as f,p as B,a0 as N,F as h,i as b,t as l,a4 as _,ah as V}from"./index-BBRgbnZQ.js";import{a as p}from"./AdminView-Bo442GSB.js";import"./PageViewLayout-CieE8QU1.js";import"./IconGlobeAlt-DJc8Wsna.js";import"./IconKey-C28jqjj0.js";const C={class:"space-y-6"},D={class:"flex items-center justify-between"},F=["disabled"],K={key:0,class:"space-y-6"},L={class:"p-6 border-b dark:border-gray-700"},$={class:"flex flex-col md:flex-row md:items-center justify-between gap-6"},j={class:"flex items-center gap-4 min-w-[200px]"},z={class:"p-3 bg-green-100 dark:bg-green-900/30 rounded-full text-green-600 dark:text-green-400"},M={class:"font-bold text-lg text-gray-900 dark:text-white"},R={class:"text-sm text-gray-500 font-mono"},T={class:"flex-grow grid grid-cols-1 sm:grid-cols-2 gap-6"},E={class:"flex justify-between text-xs mb-1 font-medium text-gray-600 dark:text-gray-300"},q={class:"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2.5"},H={class:"flex justify-between text-xs mb-1 font-medium text-gray-600 dark:text-gray-300"},J={class:"w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2.5 mb-1"},O={class:"text-xs text-gray-500 text-right"},Q={class:"bg-gray-50 dark:bg-gray-900/30 p-4"},W={key:0,class:"overflow-x-auto rounded-lg border dark:border-gray-700 bg-white dark:bg-gray-800"},X={class:"w-full text-sm text-left"},Y={class:"divide-y divide-gray-200 dark:divide-gray-700"},Z={class:"px-4 py-2 font-mono text-gray-600 dark:text-gray-400"},tt={class:"px-4 py-2 font-medium text-gray-900 dark:text-white"},st={class:"px-4 py-2 text-gray-600 dark:text-gray-400"},et={class:"px-4 py-2 text-right"},at=["onClick"],ot={key:1,class:"text-sm text-gray-500 italic px-2"},rt={key:1,class:"p-8 text-center bg-white dark:bg-gray-800 rounded-xl shadow-sm border dark:border-gray-700"},lt={key:2,class:"text-center py-10 text-gray-500"},yt={__name:"GPULoad",setup(nt){const g=P(),v=S(),d=I(()=>g.systemStatus),i=G(!1);let u=null;async function m(){i.value=!0;try{await g.fetchSystemStatus()}finally{i.value=!1}}U(()=>{m(),u=setInterval(m,3e3)}),A(()=>{u&&clearInterval(u)});async function k(r,s){(await v.showConfirmation({title:"Kill Process?",message:`Are you sure you want to kill process ${r} on ${s}? This might crash running generations.`,confirmText:"Kill",isDanger:!0})).confirmed&&await g.killProcess(r)}const y=r=>r?`${r.toFixed(1)} GB`:"0 GB",w=r=>r?`${r.toFixed(1)}%`:"0%";return(r,s)=>{var x;return o(),a("div",C,[t("div",D,[s[1]||(s[1]=t("h3",{class:"text-xl font-bold text-gray-900 dark:text-white"},"GPU Status",-1)),t("button",{onClick:m,class:"btn btn-secondary btn-sm",disabled:i.value},[c(N,{class:B(["w-4 h-4 mr-2",{"animate-spin":i.value}])},null,8,["class"]),s[0]||(s[0]=f(" Refresh "))],8,F)]),(x=d.value)!=null&&x.gpus&&d.value.gpus.length?(o(),a("div",K,[(o(!0),a(h,null,b(d.value.gpus,e=>(o(),a("div",{key:e.id,class:"bg-white dark:bg-gray-800 rounded-xl shadow-sm border dark:border-gray-700 overflow-hidden"},[t("div",L,[t("div",$,[t("div",j,[t("div",z,[c(p,{class:"w-8 h-8"})]),t("div",null,[t("h4",M,l(e.name),1),t("p",R,"ID: "+l(e.id),1)])]),t("div",T,[t("div",null,[t("div",E,[s[2]||(s[2]=t("span",null,"Compute Load",-1)),t("span",null,l(e.gpu_utilization)+"%",1)]),t("div",q,[t("div",{class:"bg-orange-500 h-2.5 rounded-full transition-all duration-500",style:_({width:e.gpu_utilization+"%"})},null,4)])]),t("div",null,[t("div",H,[s[3]||(s[3]=t("span",null,"VRAM Usage",-1)),t("span",null,l(w(e.vram_usage_percent)),1)]),t("div",J,[t("div",{class:"bg-indigo-500 h-2.5 rounded-full transition-all duration-500",style:_({width:e.vram_usage_percent+"%"})},null,4)]),t("div",O,l(y(e.vram_used_gb))+" / "+l(y(e.vram_total_gb)),1)])])])]),t("div",Q,[s[6]||(s[6]=t("h5",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300 mb-3 px-2"},"Active Processes",-1)),e.processes&&e.processes.length?(o(),a("div",W,[t("table",X,[s[5]||(s[5]=t("thead",{class:"text-xs text-gray-500 uppercase bg-gray-100 dark:bg-gray-700"},[t("tr",null,[t("th",{class:"px-4 py-2 font-semibold"},"PID"),t("th",{class:"px-4 py-2 font-semibold"},"Process Name"),t("th",{class:"px-4 py-2 font-semibold"},"VRAM"),t("th",{class:"px-4 py-2 text-right"},"Action")])],-1)),t("tbody",Y,[(o(!0),a(h,null,b(e.processes,n=>(o(),a("tr",{key:n.pid,class:"hover:bg-gray-50 dark:hover:bg-gray-700/50"},[t("td",Z,l(n.pid),1),t("td",tt,l(n.name),1),t("td",st,l(n.memory_used.toFixed(0))+" MB",1),t("td",et,[t("button",{onClick:dt=>k(n.pid,e.name),class:"btn btn-danger btn-xs",title:"Kill Process"},[c(V,{class:"w-3 h-3 mr-1"}),s[4]||(s[4]=f(" Kill "))],8,at)])]))),128))])])])):(o(),a("div",ot,"No active processes detected on this GPU."))])]))),128))])):d.value?(o(),a("div",rt,[c(p,{class:"w-12 h-12 mx-auto text-gray-400 mb-3"}),s[7]||(s[7]=t("h3",{class:"text-lg font-medium text-gray-900 dark:text-white"},"No GPU Detected",-1)),s[8]||(s[8]=t("p",{class:"text-gray-500 dark:text-gray-400 mt-1"},"NVIDIA drivers might not be installed or no compatible GPU was found.",-1))])):(o(),a("div",lt," Loading GPU status... "))])}}};export{yt as default};
frontend/dist/ui_assets/graph-CKHv_0Qx.js+1 −1 renamedfrontend/dist/ui_assets/HelpView-Cud776uN.js+3 −3 renamed@@ -1,5 +1,5 @@ -import{cj as L,ck as S,u as z,c as H,s as d,o as D,E as T,b as P,w as V,n as W,g as F,k as J,O as Y,l as n,d as i,e as l,m as G,h as $,t as b,j as K,z as Q,L as X,f as B,cl as Z,ap as R,F as E,i as A,p as ee,cm as te}from"./index-CEXks4lv.js";import{P as re}from"./PageViewLayout-BRrEfO0i.js";/* empty css */const ae={class:"px-3 py-2.5 text-sm font-medium text-gray-500 dark:text-gray-400"},se={class:"text-gray-800 dark:text-gray-200"},le={key:0,class:"text-red-500 dark:text-red-400 ml-1"},ne={class:"relative px-3 mb-4"},oe={class:"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-6"},ie={key:0,class:"px-3 py-5 text-center"},ce={key:1,class:"px-3 py-5 text-center"},ue={key:2,class:"space-y-1"},de={class:"px-3 py-2 text-xs font-semibold uppercase text-gray-500 dark:text-gray-400"},pe={class:"ml-2 border-l border-gray-300 dark:border-gray-600"},ye=["onClick"],ve={key:0,class:"text-xs text-gray-500 dark:text-gray-400 mt-0.5"},he={key:0,class:"text-center py-10"},ge=["innerHTML"],_e={__name:"HelpView",setup(xe){L.setOptions({gfm:!0,breaks:!0,highlight:function(e,t){const a=S.getLanguage(t)?t:"plaintext";return S.highlight(e,{language:a}).value}});const N={heading(e,t,a){const r=e.toLowerCase().replace(/[^\w]+/g,"-");return` +import{cm as L,cn as S,u as D,c as H,s as d,o as P,E as T,b as W,w as V,n as j,g as F,k as J,O as Y,l as n,d as i,e as l,m as G,h as $,t as b,j as K,z as Q,L as X,f as B,co as Z,ap as R,F as E,i as A,p as ee,cp as te}from"./index-BBRgbnZQ.js";import{P as re}from"./PageViewLayout-CieE8QU1.js";/* empty css */const ae={class:"px-3 py-2.5 text-sm font-medium text-gray-500 dark:text-gray-400"},se={class:"text-gray-800 dark:text-gray-200"},le={key:0,class:"text-red-500 dark:text-red-400 ml-1"},ne={class:"relative px-3 mb-4"},oe={class:"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-6"},ie={key:0,class:"px-3 py-5 text-center"},ce={key:1,class:"px-3 py-5 text-center"},ue={key:2,class:"space-y-1"},de={class:"px-3 py-2 text-xs font-semibold uppercase text-gray-500 dark:text-gray-400"},pe={class:"ml-2 border-l border-gray-300 dark:border-gray-600"},ye=["onClick"],ve={key:0,class:"text-xs text-gray-500 dark:text-gray-400 mt-0.5"},he={key:0,class:"text-center py-10"},ge=["innerHTML"],_e={__name:"HelpView",setup(xe){L.setOptions({gfm:!0,breaks:!0,highlight:function(e,t){const a=S.getLanguage(t)?t:"plaintext";return S.highlight(e,{language:a}).value}});const N={heading(e,t,a){const r=e.toLowerCase().replace(/[^\w]+/g,"-");return` <h${t} id="${r}"> ${e} - </h${t}>`}};L.use({renderer:N});const p=P(),h=J(),I=z(),f=H(()=>{var e;return((e=I.user)==null?void 0:e.user_ui_level)||0}),U=d(""),m=d([]),q=d(""),C=d(!0),w=d(!0),s=d(""),y=d(null),g=d(null),x=d(null);function k(e){return e.replace(/\*\*(.*?)\*\*/g,"$1")}const M=H(()=>{if(!m.value)return[];const e=s.value.toLowerCase();return m.value.map(a=>{const r=a.items.filter(o=>{const u=k(o.title).toLowerCase().includes(e),_=o.description&&o.description.toLowerCase().includes(e);return u||_}),c=k(a.title).toLowerCase().includes(e);return r.length>0||c?{...a,items:r}:null}).filter(a=>a!==null)});function O(e){const t=e.split(` -`),a=[];let r=null;return t.forEach(c=>{if(c.startsWith("### "))r={title:k(c.substring(4).trim()),items:[]},a.push(r);else if(c.startsWith("* [")){const o=c.match(/\* \[\*\*(.*?)\*\*\]\(help\/([^\)#]+)(?:#([^\)]+))?\)\s*-\s*(.*)/);o&&r&&r.items.push({title:k(o[1]),filename:o[2],sectionId:o[3]||null,description:(o[4]||"").trim()})}}),a}async function v(e,t=null){var c,o;C.value=!0;const a=p.query.topic,r=p.query.section;s.value?h.replace({query:{search:s.value}}):e&&(e!==a||t!==r)?h.replace({query:{topic:e,section:t}}):!e&&!s.value&&a&&h.replace({query:{}});try{let u;s.value?(u=await T.get("/api/help/search",{params:{query:s.value}}),y.value=null,g.value=null):(u=await T.get("/api/help/topic",{params:{topic_filename:e}}),y.value=e,g.value=t),q.value=L.parse(u.data),Y(()=>{if(t&&x.value){const _=x.value.querySelector(`#${t.toLowerCase().replace(/[^\w]+/g,"-")}`);_&&_.scrollIntoView({behavior:"smooth",block:"start"})}else x.value&&x.value.scrollTo({top:0,behavior:"smooth"})})}catch(u){q.value=`<p class="text-red-500 dark:text-red-400">Failed to load help content: ${((o=(c=u.response)==null?void 0:c.data)==null?void 0:o.detail)||u.message||"Unknown error"}</p>`,console.error("Error fetching help topic:",u)}finally{C.value=!1}}D(async()=>{w.value=!0;try{const e=await T.get("/api/help/index");U.value=e.data,m.value=O(e.data)}catch(e){console.error("Error fetching help index:",e),m.value=[]}finally{if(w.value=!1,p.query.search)s.value=p.query.search,v(null,null);else if(p.query.topic)v(p.query.topic,p.query.section);else{const e=`level_${f.value}_beginner.md`;v(e)}}}),V(p,e=>{if(e.query.topic!==y.value||e.query.section!==g.value||e.query.search!==s.value){if(e.query.search?s.value=e.query.search:s.value="",e.query.topic)v(e.query.topic,e.query.section);else if(!e.query.search){const t=`level_${f.value}_beginner.md`;v(t)}}},{deep:!0}),V(s,e=>{if(e)h.replace({query:{search:e}}).catch(()=>{}),v(null,null);else if(y.value)h.replace({query:{topic:y.value,section:g.value}}).catch(()=>{}),v(y.value,g.value);else{h.replace({query:{}}).catch(()=>{});const t=`level_${f.value}_beginner.md`;v(t)}});function j(e){s.value="",h.push({query:{topic:e.filename,section:e.sectionId}})}return(e,t)=>(n(),W(re,{title:"Contextual Help","title-icon":te},{sidebar:F(()=>[l("div",ae,[t[2]||(t[2]=G(" Your Current UI Level: ")),l("strong",se,b(f.value),1),K(I).isAdmin?(n(),i("span",le,"(Admin)")):$("",!0)]),t[5]||(t[5]=l("p",{class:"px-3 py-2.5 text-xs text-gray-400 dark:text-gray-500"}," The content displayed here is tailored to your current UI experience level and admin status. ",-1)),l("div",ne,[Q(l("input",{type:"text","onUpdate:modelValue":t[0]||(t[0]=a=>s.value=a),placeholder:"Search help...",class:"w-full rounded-md border-gray-300 bg-gray-100 dark:border-gray-600 dark:bg-gray-700/50 py-2 pl-10 pr-10 text-sm focus:border-blue-500 focus:ring-blue-500"},null,512),[[X,s.value]]),l("div",oe,[B(Z,{class:"h-4 w-4 text-gray-400"})]),s.value?(n(),i("button",{key:0,onClick:t[1]||(t[1]=a=>s.value=""),class:"absolute inset-y-0 right-0 flex items-center pr-3",title:"Clear search"},[B(R,{class:"h-4 w-4 text-gray-400 hover:text-gray-600"})])):$("",!0)]),w.value?(n(),i("div",ie,t[3]||(t[3]=[l("p",{class:"text-gray-500 dark:text-gray-400"},"Loading help index...",-1)]))):M.value.length===0?(n(),i("div",ce,t[4]||(t[4]=[l("p",{class:"text-gray-500 dark:text-gray-400"},"No topics found matching your search.",-1)]))):(n(),i("ul",ue,[(n(!0),i(E,null,A(M.value,a=>(n(),i("li",{key:a.title},[l("h3",de,b(a.title),1),l("ul",pe,[(n(!0),i(E,null,A(a.items,r=>(n(),i("li",{key:r.filename+(r.sectionId||"")},[l("button",{onClick:c=>j(r),class:ee(["w-full text-left flex flex-col px-3 py-2.5 rounded-lg text-sm font-medium transition-colors",{"bg-blue-100 dark:bg-blue-900/50 text-blue-700 dark:text-blue-300":y.value===r.filename&&(!r.sectionId||g.value===r.sectionId)&&!s.value,"text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700":!(y.value===r.filename&&(!r.sectionId||g.value===r.sectionId)&&!s.value)}])},[l("span",null,b(r.title),1),r.description?(n(),i("span",ve,b(r.description),1)):$("",!0)],10,ye)]))),128))])]))),128))]))]),main:F(()=>[C.value?(n(),i("div",he,t[6]||(t[6]=[l("p",{class:"text-gray-500 dark:text-gray-400"},"Loading help content...",-1)]))):(n(),i("div",{key:1,ref_key:"mainContentAreaRef",ref:x,class:"prose dark:prose-invert max-w-none text-gray-800 dark:text-gray-100"},[l("div",{innerHTML:q.value},null,8,ge)],512))]),_:1}))}};export{_e as default}; + </h${t}>`}};L.use({renderer:N});const p=W(),h=J(),I=D(),f=H(()=>{var e;return((e=I.user)==null?void 0:e.user_ui_level)||0}),U=d(""),m=d([]),q=d(""),C=d(!0),w=d(!0),s=d(""),y=d(null),g=d(null),x=d(null);function k(e){return e.replace(/\*\*(.*?)\*\*/g,"$1")}const M=H(()=>{if(!m.value)return[];const e=s.value.toLowerCase();return m.value.map(a=>{const r=a.items.filter(o=>{const u=k(o.title).toLowerCase().includes(e),_=o.description&&o.description.toLowerCase().includes(e);return u||_}),c=k(a.title).toLowerCase().includes(e);return r.length>0||c?{...a,items:r}:null}).filter(a=>a!==null)});function O(e){const t=e.split(` +`),a=[];let r=null;return t.forEach(c=>{if(c.startsWith("### "))r={title:k(c.substring(4).trim()),items:[]},a.push(r);else if(c.startsWith("* [")){const o=c.match(/\* \[\*\*(.*?)\*\*\]\(help\/([^\)#]+)(?:#([^\)]+))?\)\s*-\s*(.*)/);o&&r&&r.items.push({title:k(o[1]),filename:o[2],sectionId:o[3]||null,description:(o[4]||"").trim()})}}),a}async function v(e,t=null){var c,o;C.value=!0;const a=p.query.topic,r=p.query.section;s.value?h.replace({query:{search:s.value}}):e&&(e!==a||t!==r)?h.replace({query:{topic:e,section:t}}):!e&&!s.value&&a&&h.replace({query:{}});try{let u;s.value?(u=await T.get("/api/help/search",{params:{query:s.value}}),y.value=null,g.value=null):(u=await T.get("/api/help/topic",{params:{topic_filename:e}}),y.value=e,g.value=t),q.value=L.parse(u.data),Y(()=>{if(t&&x.value){const _=x.value.querySelector(`#${t.toLowerCase().replace(/[^\w]+/g,"-")}`);_&&_.scrollIntoView({behavior:"smooth",block:"start"})}else x.value&&x.value.scrollTo({top:0,behavior:"smooth"})})}catch(u){q.value=`<p class="text-red-500 dark:text-red-400">Failed to load help content: ${((o=(c=u.response)==null?void 0:c.data)==null?void 0:o.detail)||u.message||"Unknown error"}</p>`,console.error("Error fetching help topic:",u)}finally{C.value=!1}}P(async()=>{w.value=!0;try{const e=await T.get("/api/help/index");U.value=e.data,m.value=O(e.data)}catch(e){console.error("Error fetching help index:",e),m.value=[]}finally{if(w.value=!1,p.query.search)s.value=p.query.search,v(null,null);else if(p.query.topic)v(p.query.topic,p.query.section);else{const e=`level_${f.value}_beginner.md`;v(e)}}}),V(p,e=>{if(e.query.topic!==y.value||e.query.section!==g.value||e.query.search!==s.value){if(e.query.search?s.value=e.query.search:s.value="",e.query.topic)v(e.query.topic,e.query.section);else if(!e.query.search){const t=`level_${f.value}_beginner.md`;v(t)}}},{deep:!0}),V(s,e=>{if(e)h.replace({query:{search:e}}).catch(()=>{}),v(null,null);else if(y.value)h.replace({query:{topic:y.value,section:g.value}}).catch(()=>{}),v(y.value,g.value);else{h.replace({query:{}}).catch(()=>{});const t=`level_${f.value}_beginner.md`;v(t)}});function z(e){s.value="",h.push({query:{topic:e.filename,section:e.sectionId}})}return(e,t)=>(n(),j(re,{title:"Contextual Help","title-icon":te},{sidebar:F(()=>[l("div",ae,[t[2]||(t[2]=G(" Your Current UI Level: ")),l("strong",se,b(f.value),1),K(I).isAdmin?(n(),i("span",le,"(Admin)")):$("",!0)]),t[5]||(t[5]=l("p",{class:"px-3 py-2.5 text-xs text-gray-400 dark:text-gray-500"}," The content displayed here is tailored to your current UI experience level and admin status. ",-1)),l("div",ne,[Q(l("input",{type:"text","onUpdate:modelValue":t[0]||(t[0]=a=>s.value=a),placeholder:"Search help...",class:"w-full rounded-md border-gray-300 bg-gray-100 dark:border-gray-600 dark:bg-gray-700/50 py-2 pl-10 pr-10 text-sm focus:border-blue-500 focus:ring-blue-500"},null,512),[[X,s.value]]),l("div",oe,[B(Z,{class:"h-4 w-4 text-gray-400"})]),s.value?(n(),i("button",{key:0,onClick:t[1]||(t[1]=a=>s.value=""),class:"absolute inset-y-0 right-0 flex items-center pr-3",title:"Clear search"},[B(R,{class:"h-4 w-4 text-gray-400 hover:text-gray-600"})])):$("",!0)]),w.value?(n(),i("div",ie,t[3]||(t[3]=[l("p",{class:"text-gray-500 dark:text-gray-400"},"Loading help index...",-1)]))):M.value.length===0?(n(),i("div",ce,t[4]||(t[4]=[l("p",{class:"text-gray-500 dark:text-gray-400"},"No topics found matching your search.",-1)]))):(n(),i("ul",ue,[(n(!0),i(E,null,A(M.value,a=>(n(),i("li",{key:a.title},[l("h3",de,b(a.title),1),l("ul",pe,[(n(!0),i(E,null,A(a.items,r=>(n(),i("li",{key:r.filename+(r.sectionId||"")},[l("button",{onClick:c=>z(r),class:ee(["w-full text-left flex flex-col px-3 py-2.5 rounded-lg text-sm font-medium transition-colors",{"bg-blue-100 dark:bg-blue-900/50 text-blue-700 dark:text-blue-300":y.value===r.filename&&(!r.sectionId||g.value===r.sectionId)&&!s.value,"text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700":!(y.value===r.filename&&(!r.sectionId||g.value===r.sectionId)&&!s.value)}])},[l("span",null,b(r.title),1),r.description?(n(),i("span",ve,b(r.description),1)):$("",!0)],10,ye)]))),128))])]))),128))]))]),main:F(()=>[C.value?(n(),i("div",he,t[6]||(t[6]=[l("p",{class:"text-gray-500 dark:text-gray-400"},"Loading help content...",-1)]))):(n(),i("div",{key:1,ref_key:"mainContentAreaRef",ref:x,class:"prose dark:prose-invert max-w-none text-gray-800 dark:text-gray-100"},[l("div",{innerHTML:q.value},null,8,ge)],512))]),_:1}))}};export{_e as default};
frontend/dist/ui_assets/IconArrowPath-DUE5IYPL.js+1 −1 renamed@@ -1 +1 @@ -import{q as t,d as L,l as o,e as C}from"./index-CEXks4lv.js";const r={},s={fill:"currentColor",width:"20px",height:"20px",viewBox:"0 0 56 56",xmlns:"http://www.w3.org/2000/svg"};function n(c,e){return o(),L("svg",s,e[0]||(e[0]=[C("path",{d:"M 40.1314 7.9037 L 21.8613 7.9037 C 20.5819 7.9037 19.8413 8.5546 19.8637 9.6993 C 19.8861 10.8440 20.5819 11.5173 21.8613 11.5173 L 40.0641 11.5173 C 42.3087 11.5173 43.5654 12.7069 43.5654 15.0412 L 43.5654 39.4163 L 40.1988 35.8251 L 38.0665 33.7153 C 37.3034 32.9746 36.2260 32.8848 35.4629 33.6479 C 34.6998 34.4111 34.7447 35.5109 35.5078 36.2740 L 43.0718 43.7930 C 44.5308 45.2519 46.1690 45.2519 47.6280 43.7930 L 55.1919 36.2740 C 55.9775 35.5109 56 34.4111 55.2369 33.6479 C 54.4739 32.8848 53.4189 32.9521 52.6554 33.7153 L 50.5010 35.8251 L 47.1789 39.3938 L 47.1789 14.8616 C 47.1789 10.2155 44.8001 7.9037 40.1314 7.9037 Z M 15.8910 49.2247 L 34.1611 49.2247 C 35.4404 49.2247 36.1812 48.5738 36.1587 47.4291 C 36.1362 46.2620 35.4404 45.6111 34.1611 45.6111 L 15.9359 45.6111 C 13.6914 45.6111 12.4569 44.4215 12.4569 42.0872 L 12.4569 17.7121 L 15.8012 21.2808 L 17.9559 23.4131 C 18.7190 24.1538 19.7739 24.2435 20.5595 23.4580 C 21.3226 22.7173 21.2778 21.6175 20.5146 20.8544 L 12.9507 13.3129 C 11.4693 11.8764 9.8533 11.8764 8.3719 13.3129 L .8080 20.8544 C .9 21.6175 0 22.7173 .7631 23.4580 C 1.5262 24.2435 2.6036 24.1538 3.3667 23.4131 L 5.5214 21.2808 L 8.8433 17.7346 L 8.8433 42.2668 C 8.8433 46.9129 11.2000 49.2247 15.8910 49.2247 Z"},null,-1)]))}const l=t(r,[["render",n]]);export{l as I}; +import{q as t,d as L,l as o,e as C}from"./index-BBRgbnZQ.js";const r={},s={fill:"currentColor",width:"20px",height:"20px",viewBox:"0 0 56 56",xmlns:"http://www.w3.org/2000/svg"};function n(c,e){return o(),L("svg",s,e[0]||(e[0]=[C("path",{d:"M 40.1314 7.9037 L 21.8613 7.9037 C 20.5819 7.9037 19.8413 8.5546 19.8637 9.6993 C 19.8861 10.8440 20.5819 11.5173 21.8613 11.5173 L 40.0641 11.5173 C 42.3087 11.5173 43.5654 12.7069 43.5654 15.0412 L 43.5654 39.4163 L 40.1988 35.8251 L 38.0665 33.7153 C 37.3034 32.9746 36.2260 32.8848 35.4629 33.6479 C 34.6998 34.4111 34.7447 35.5109 35.5078 36.2740 L 43.0718 43.7930 C 44.5308 45.2519 46.1690 45.2519 47.6280 43.7930 L 55.1919 36.2740 C 55.9775 35.5109 56 34.4111 55.2369 33.6479 C 54.4739 32.8848 53.4189 32.9521 52.6554 33.7153 L 50.5010 35.8251 L 47.1789 39.3938 L 47.1789 14.8616 C 47.1789 10.2155 44.8001 7.9037 40.1314 7.9037 Z M 15.8910 49.2247 L 34.1611 49.2247 C 35.4404 49.2247 36.1812 48.5738 36.1587 47.4291 C 36.1362 46.2620 35.4404 45.6111 34.1611 45.6111 L 15.9359 45.6111 C 13.6914 45.6111 12.4569 44.4215 12.4569 42.0872 L 12.4569 17.7121 L 15.8012 21.2808 L 17.9559 23.4131 C 18.7190 24.1538 19.7739 24.2435 20.5595 23.4580 C 21.3226 22.7173 21.2778 21.6175 20.5146 20.8544 L 12.9507 13.3129 C 11.4693 11.8764 9.8533 11.8764 8.3719 13.3129 L .8080 20.8544 C .9 21.6175 0 22.7173 .7631 23.4580 C 1.5262 24.2435 2.6036 24.1538 3.3667 23.4131 L 5.5214 21.2808 L 8.8433 17.7346 L 8.8433 42.2668 C 8.8433 46.9129 11.2000 49.2247 15.8910 49.2247 Z"},null,-1)]))}const l=t(r,[["render",n]]);export{l as I};
frontend/dist/ui_assets/IconArrowUp-Q6qK09pz.js+1 −1 renamed@@ -1 +1 @@ -import{q as e,d as r,l as n,e as t}from"./index-CEXks4lv.js";const s={},c={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function l(a,o){return n(),r("svg",c,o[0]||(o[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 19.5v-15m0 0-6.75 6.75M12 4.5l6.75 6.75"},null,-1)]))}const d=e(s,[["render",l]]);export{d as I}; +import{q as e,d as r,l as n,e as t}from"./index-BBRgbnZQ.js";const s={},c={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function l(a,o){return n(),r("svg",c,o[0]||(o[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 19.5v-15m0 0-6.75 6.75M12 4.5l6.75 6.75"},null,-1)]))}const d=e(s,[["render",l]]);export{d as I};
frontend/dist/ui_assets/IconChevronUp-CEIEXC6_.js+1 −1 renamed@@ -1 +1 @@ -import{d as o,l as r,e as t,p as n}from"./index-CEXks4lv.js";const p={__name:"IconChevronUp",props:{class:{type:String,default:"w-6 h-6"}},setup(s){return(l,e)=>(r(),o("svg",{xmlns:"http://www.w3.org/2000/svg",class:n(s.class),fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"},e[0]||(e[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m4.5 15.75 7.5-7.5 7.5 7.5"},null,-1)]),2))}};export{p as _}; +import{d as o,l as r,e as t,p as n}from"./index-BBRgbnZQ.js";const p={__name:"IconChevronUp",props:{class:{type:String,default:"w-6 h-6"}},setup(s){return(l,e)=>(r(),o("svg",{xmlns:"http://www.w3.org/2000/svg",class:n(s.class),fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"},e[0]||(e[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m4.5 15.75 7.5-7.5 7.5 7.5"},null,-1)]),2))}};export{p as _};
frontend/dist/ui_assets/IconGlobeAlt-DJc8Wsna.js+1 −1 renamed@@ -1 +1 @@ -import{q as o,d as t,l as n,e as r}from"./index-CEXks4lv.js";const s={},c={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function a(l,e){return n(),t("svg",c,e[0]||(e[0]=[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 21a9.004 9.004 0 0 0 8.716-6.747M12 21a9.004 9.004 0 0 1-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 0 1 7.843 4.582M12 3a8.997 8.997 0 0 0-7.843 4.582m15.686 0A11.953 11.953 0 0 1 12 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0 1 21 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0 1 12 16.5c-3.162 0-6.133-.815-8.716-2.247m0 0A9.015 9.015 0 0 1 3 12c0-.778.099-1.533.284-2.253"},null,-1)]))}const i=o(s,[["render",a]]);export{i as I}; +import{q as o,d as t,l as n,e as r}from"./index-BBRgbnZQ.js";const s={},c={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function a(l,e){return n(),t("svg",c,e[0]||(e[0]=[r("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 21a9.004 9.004 0 0 0 8.716-6.747M12 21a9.004 9.004 0 0 1-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 0 1 7.843 4.582M12 3a8.997 8.997 0 0 0-7.843 4.582m15.686 0A11.953 11.953 0 0 1 12 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0 1 21 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0 1 12 16.5c-3.162 0-6.133-.815-8.716-2.247m0 0A9.015 9.015 0 0 1 3 12c0-.778.099-1.533.284-2.253"},null,-1)]))}const i=o(s,[["render",a]]);export{i as I};
frontend/dist/ui_assets/IconKey-C28jqjj0.js+1 −1 renamed@@ -1 +1 @@ -import{d as o,l as r,e as t,p as n}from"./index-CEXks4lv.js";const c={__name:"IconKey",props:{class:{type:String,default:"w-6 h-6"}},setup(s){return(a,e)=>(r(),o("svg",{xmlns:"http://www.w3.org/2000/svg",class:n(s.class),fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"},e[0]||(e[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.75 5.25a3 3 0 0 1 3 3m3 0a6 6 0 0 1-7.029 5.912c-.563-.097-1.159.026-1.563.43L10.5 17.25H8.25v2.25H6v2.25H2.25v-2.818c0-.597.237-1.17.659-1.591l6.499-6.499c.404-.404.527-1 .43-1.563A6 6 0 1 1 21.75 8.25Z"},null,-1)]),2))}};export{c as _}; +import{d as o,l as r,e as t,p as n}from"./index-BBRgbnZQ.js";const c={__name:"IconKey",props:{class:{type:String,default:"w-6 h-6"}},setup(s){return(a,e)=>(r(),o("svg",{xmlns:"http://www.w3.org/2000/svg",class:n(s.class),fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"},e[0]||(e[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.75 5.25a3 3 0 0 1 3 3m3 0a6 6 0 0 1-7.029 5.912c-.563-.097-1.159.026-1.563.43L10.5 17.25H8.25v2.25H6v2.25H2.25v-2.818c0-.597.237-1.17.659-1.591l6.499-6.499c.404-.404.527-1 .43-1.563A6 6 0 1 1 21.75 8.25Z"},null,-1)]),2))}};export{c as _};
frontend/dist/ui_assets/IconNoSymbol-D0HTNvx3.js+1 −1 renamed@@ -1 +1 @@ -import{d as s,l as r,e as t,p as n}from"./index-CEXks4lv.js";const c={__name:"IconNoSymbol",props:{class:{type:String,default:"w-6 h-6"}},setup(o){return(l,e)=>(r(),s("svg",{xmlns:"http://www.w3.org/2000/svg",class:n(o.class),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"1.5"},e[0]||(e[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636"},null,-1)]),2))}};export{c as _}; +import{d as s,l as r,e as t,p as n}from"./index-BBRgbnZQ.js";const c={__name:"IconNoSymbol",props:{class:{type:String,default:"w-6 h-6"}},setup(o){return(l,e)=>(r(),s("svg",{xmlns:"http://www.w3.org/2000/svg",class:n(o.class),fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"1.5"},e[0]||(e[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636"},null,-1)]),2))}};export{c as _};
frontend/dist/ui_assets/IconPlayCircle-ClB9mJda.js+0 −1 removed@@ -1 +0,0 @@ -import{q as n,d as r,l as t,e as o}from"./index-CEXks4lv.js";const s={},l={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function a(c,e){return t(),r("svg",l,e[0]||(e[0]=[o("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"},null,-1),o("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.91 11.672a.375.375 0 0 1 0 .656l-5.603 3.113a.375.375 0 0 1-.557-.328V8.887c0-.286.307-.466.557-.327l5.603 3.112Z"},null,-1)]))}const d=n(s,[["render",a]]);export{d as I};
frontend/dist/ui_assets/IconPlayCircle-D2gooLkD.js+1 −0 added@@ -0,0 +1 @@ +import{q as n,d as r,l as t,e}from"./index-BBRgbnZQ.js";const s={},l={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function a(c,o){return t(),r("svg",l,o[0]||(o[0]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"},null,-1),e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.91 11.672a.375.375 0 0 1 0 .656l-5.603 3.113a.375.375 0 0 1-.557-.328V8.887c0-.286.307-.466.557-.327l5.603 3.112Z"},null,-1)]))}const d=n(s,[["render",a]]);export{d as I};
frontend/dist/ui_assets/IconRedo-PegjuXO_.js+1 −1 renamed@@ -1 +1 @@ -import{q as n,d as e,l as r,e as t}from"./index-CEXks4lv.js";const l={},c={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function i(s,o){return r(),e("svg",c,o[0]||(o[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M3 10h10a8 8 0 018 8v2M3 10l4-4m-4 4l4 4"},null,-1)]))}const w=n(l,[["render",i]]),d={},a={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function _(s,o){return r(),e("svg",a,o[0]||(o[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21 10h-10a8 8 0 00-8 8v2m18-10l-4-4m4 4l-4 4"},null,-1)]))}const f=n(d,[["render",_]]);export{w as I,f as a}; +import{q as n,d as e,l as r,e as t}from"./index-BBRgbnZQ.js";const l={},c={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function i(s,o){return r(),e("svg",c,o[0]||(o[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M3 10h10a8 8 0 018 8v2M3 10l4-4m-4 4l4 4"},null,-1)]))}const w=n(l,[["render",i]]),d={},a={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function _(s,o){return r(),e("svg",a,o[0]||(o[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21 10h-10a8 8 0 00-8 8v2m18-10l-4-4m4 4l-4 4"},null,-1)]))}const f=n(d,[["render",_]]);export{w as I,f as a};
frontend/dist/ui_assets/IconUploader-B6YcM4hf.js+1 −1 renamed@@ -1 +1 @@ -import{K as k,s as v,d as i,l as s,e as t,t as x,p as u,n as I,ai as w,h as V}from"./index-CEXks4lv.js";const C={class:"label"},z={class:"mt-1 flex items-center gap-4"},U=["src"],S={class:"space-y-2"},N={__name:"IconUploader",props:{modelValue:{type:String,default:null},label:{type:String,default:"Icon"},size:{type:Number,default:16}},emits:["update:modelValue"],setup(e,{emit:m}){const c=m,g=k(),r=v(null);function f(){var a;(a=r.value)==null||a.click()}function y(a){const l=a.target.files[0];if(!l)return;if(!l.type.startsWith("image/")){g.addNotification("Please select a valid image file.","warning");return}const d=new FileReader;d.onload=h=>{const o=new Image;o.onload=()=>{const n=document.createElement("canvas"),p=n.getContext("2d");n.width=128,n.height=128,p.drawImage(o,0,0,128,128),c("update:modelValue",n.toDataURL("image/png"))},o.src=h.target.result},d.readAsDataURL(l)}function b(){c("update:modelValue",null)}return(a,l)=>(s(),i("div",null,[t("label",C,x(e.label),1),t("div",z,[t("div",{class:u(["flex-shrink-0 bg-gray-100 dark:bg-gray-700 rounded-lg border border-gray-300 dark:border-gray-600 flex items-center justify-center",`h-${e.size} w-${e.size}`])},[e.modelValue?(s(),i("img",{key:0,src:e.modelValue,alt:"Icon preview",class:"h-full w-full object-cover rounded-lg"},null,8,U)):(s(),I(w,{key:1,class:u(["text-gray-400",`h-${e.size/2} w-${e.size/2}`])},null,8,["class"]))],2),t("div",S,[t("input",{type:"file",ref_key:"fileInput",ref:r,onChange:y,accept:"image/*",class:"hidden"},null,544),t("button",{type:"button",onClick:f,class:"btn btn-secondary text-sm"},"Upload Image"),e.modelValue?(s(),i("button",{key:0,type:"button",onClick:b,class:"btn btn-danger-outline text-sm"},"Remove")):V("",!0)])])]))}};export{N as _}; +import{K as k,s as v,d as i,l as s,e as t,t as x,p as u,n as I,ai as w,h as V}from"./index-BBRgbnZQ.js";const C={class:"label"},z={class:"mt-1 flex items-center gap-4"},U=["src"],S={class:"space-y-2"},N={__name:"IconUploader",props:{modelValue:{type:String,default:null},label:{type:String,default:"Icon"},size:{type:Number,default:16}},emits:["update:modelValue"],setup(e,{emit:m}){const c=m,g=k(),r=v(null);function f(){var a;(a=r.value)==null||a.click()}function y(a){const l=a.target.files[0];if(!l)return;if(!l.type.startsWith("image/")){g.addNotification("Please select a valid image file.","warning");return}const d=new FileReader;d.onload=h=>{const o=new Image;o.onload=()=>{const n=document.createElement("canvas"),p=n.getContext("2d");n.width=128,n.height=128,p.drawImage(o,0,0,128,128),c("update:modelValue",n.toDataURL("image/png"))},o.src=h.target.result},d.readAsDataURL(l)}function b(){c("update:modelValue",null)}return(a,l)=>(s(),i("div",null,[t("label",C,x(e.label),1),t("div",z,[t("div",{class:u(["flex-shrink-0 bg-gray-100 dark:bg-gray-700 rounded-lg border border-gray-300 dark:border-gray-600 flex items-center justify-center",`h-${e.size} w-${e.size}`])},[e.modelValue?(s(),i("img",{key:0,src:e.modelValue,alt:"Icon preview",class:"h-full w-full object-cover rounded-lg"},null,8,U)):(s(),I(w,{key:1,class:u(["text-gray-400",`h-${e.size/2} w-${e.size/2}`])},null,8,["class"]))],2),t("div",S,[t("input",{type:"file",ref_key:"fileInput",ref:r,onChange:y,accept:"image/*",class:"hidden"},null,544),t("button",{type:"button",onClick:f,class:"btn btn-secondary text-sm"},"Upload Image"),e.modelValue?(s(),i("button",{key:0,type:"button",onClick:b,class:"btn btn-danger-outline text-sm"},"Remove")):V("",!0)])])]))}};export{N as _};
frontend/dist/ui_assets/ImageEditorSettingsModal-CIaJFFCD.js+1 −1 renamed@@ -1 +1 @@ -import{K as _,P as M,c as b,n as U,l as n,g as f,e as a,j as x,d as o,z as d,F as u,i as r,t as m,R as p,L as g,J as V}from"./index-CEXks4lv.js";import{_ as h}from"./GenericModal-Br5hR2Sz.js";const w={key:0,class:"p-4 space-y-6"},z=["label"],C=["value"],D=["value"],E={class:"block text-sm font-medium"},L=["for"],T=["id","onUpdate:modelValue"],$=["value"],B=["type","step","id","onUpdate:modelValue","placeholder"],P={key:1,class:"p-4 text-center text-gray-500"},G={__name:"ImageEditorSettingsModal",setup(q){const v=_(),c=M(),l=b(()=>{var i;return(i=v.modalData("imageEditorSettings"))==null?void 0:i.settings}),y=[{value:"1024x1024",label:"1024x1024 (Square 1:1)"},{value:"1152x896",label:"1152x896 (Landscape ~4:3)"},{value:"896x1152",label:"896x1152 (Portrait ~3:4)"},{value:"1216x832",label:"1216x832 (Landscape ~3:2)"},{value:"832x1216",label:"832x1216 (Portrait ~2:3)"},{value:"1344x768",label:"1344x768 (Widescreen 16:9)"},{value:"768x1344",label:"768x1344 (Tall 9:16)"},{value:"1536x640",label:"1536x640 (Cinematic ~2.4:1)"},{value:"640x1536",label:"640x1536 (Tall Cinematic ~1:2.4)"},{value:"512x512",label:"512x512 (Small Square)"}],S=b(()=>{if(!l.value)return[];const i=c.availableTtiModels.find(s=>s.id===l.value.selectedModel);if(!(i!=null&&i.binding_params))return[];const t=i.binding_params.edit_parameters||[],e=["prompt","negative_prompt","image","mask","width","height","seed","strength"];return t.filter(s=>!e.includes(s.name))});function k(i){return typeof i=="string"?i.split(",").map(t=>t.trim()).filter(t=>t):Array.isArray(i)?i.filter(t=>t):[]}return(i,t)=>(n(),U(h,{"modal-name":"imageEditorSettings",title:"Generation Settings","max-width-class":"max-w-xl"},{body:f(()=>[l.value?(n(),o("div",w,[a("div",null,[t[6]||(t[6]=a("label",{for:"model-select",class:"block text-sm font-medium"},"Model",-1)),d(a("select",{id:"model-select","onUpdate:modelValue":t[0]||(t[0]=e=>l.value.selectedModel=e),class:"input-field mt-1"},[t[5]||(t[5]=a("option",{disabled:"",value:""},"Select a model",-1)),(n(!0),o(u,null,r(x(c).availableTtiModelsGrouped,e=>(n(),o("optgroup",{key:e.label,label:e.label},[(n(!0),o(u,null,r(e.items,s=>(n(),o("option",{key:s.id,value:s.id},m(s.name),9,C))),128))],8,z))),128))],512),[[p,l.value.selectedModel]])]),a("div",null,[t[7]||(t[7]=a("label",{for:"size",class:"block text-sm font-medium"},"Image Size",-1)),d(a("select",{id:"size","onUpdate:modelValue":t[1]||(t[1]=e=>l.value.imageSize=e),class:"input-field mt-1"},[(n(),o(u,null,r(y,e=>a("option",{key:e.value,value:e.value},m(e.label),9,D)),64))],512),[[p,l.value.imageSize]])]),a("div",null,[t[8]||(t[8]=a("label",{for:"seed",class:"block text-sm font-medium"},"Seed",-1)),d(a("input",{id:"seed","onUpdate:modelValue":t[2]||(t[2]=e=>l.value.seed=e),type:"number",class:"input-field mt-1",placeholder:"-1 for random"},null,512),[[g,l.value.seed,void 0,{number:!0}]])]),a("div",null,[a("label",E,"Strength: "+m(l.value.params.strength||"Default"),1),d(a("input",{type:"range",min:"0",max:"1",step:"0.01","onUpdate:modelValue":t[3]||(t[3]=e=>l.value.params.strength=e),class:"w-full"},null,512),[[g,l.value.params.strength,void 0,{number:!0}]])]),(n(!0),o(u,null,r(S.value,e=>(n(),o("div",{key:e.name},[a("label",{for:`param-${e.name}`,class:"block text-sm font-medium capitalize"},m(e.name.replace(/_/g," ")),9,L),e.options&&e.options.length>0?d((n(),o("select",{key:0,id:`param-${e.name}`,"onUpdate:modelValue":s=>l.value.params[e.name]=s,class:"input-field mt-1"},[(n(!0),o(u,null,r(k(e.options),s=>(n(),o("option",{key:s,value:s},m(s),9,$))),128))],8,T)),[[p,l.value.params[e.name]]]):d((n(),o("input",{key:1,type:e.type==="str"?"text":"number",step:e.type==="float"?"0.1":"1",id:`param-${e.name}`,"onUpdate:modelValue":s=>l.value.params[e.name]=s,class:"input-field mt-1",placeholder:e.default},null,8,B)),[[V,l.value.params[e.name]]])]))),128))])):(n(),o("div",P," Loading settings... "))]),footer:f(()=>[a("button",{onClick:t[4]||(t[4]=e=>x(v).closeModal("imageEditorSettings")),class:"btn btn-primary"},"Close")]),_:1}))}};export{G as default}; +import{K as _,P as M,c as b,n as U,l as n,g as f,e as a,j as x,d as o,z as d,F as u,i as r,t as m,X as p,L as g,J as V}from"./index-BBRgbnZQ.js";import{_ as h}from"./GenericModal-eXiOHk6I.js";const w={key:0,class:"p-4 space-y-6"},z=["label"],C=["value"],D=["value"],E={class:"block text-sm font-medium"},L=["for"],T=["id","onUpdate:modelValue"],$=["value"],B=["type","step","id","onUpdate:modelValue","placeholder"],P={key:1,class:"p-4 text-center text-gray-500"},G={__name:"ImageEditorSettingsModal",setup(q){const v=_(),c=M(),l=b(()=>{var i;return(i=v.modalData("imageEditorSettings"))==null?void 0:i.settings}),y=[{value:"1024x1024",label:"1024x1024 (Square 1:1)"},{value:"1152x896",label:"1152x896 (Landscape ~4:3)"},{value:"896x1152",label:"896x1152 (Portrait ~3:4)"},{value:"1216x832",label:"1216x832 (Landscape ~3:2)"},{value:"832x1216",label:"832x1216 (Portrait ~2:3)"},{value:"1344x768",label:"1344x768 (Widescreen 16:9)"},{value:"768x1344",label:"768x1344 (Tall 9:16)"},{value:"1536x640",label:"1536x640 (Cinematic ~2.4:1)"},{value:"640x1536",label:"640x1536 (Tall Cinematic ~1:2.4)"},{value:"512x512",label:"512x512 (Small Square)"}],S=b(()=>{if(!l.value)return[];const i=c.availableTtiModels.find(s=>s.id===l.value.selectedModel);if(!(i!=null&&i.binding_params))return[];const t=i.binding_params.edit_parameters||[],e=["prompt","negative_prompt","image","mask","width","height","seed","strength"];return t.filter(s=>!e.includes(s.name))});function k(i){return typeof i=="string"?i.split(",").map(t=>t.trim()).filter(t=>t):Array.isArray(i)?i.filter(t=>t):[]}return(i,t)=>(n(),U(h,{"modal-name":"imageEditorSettings",title:"Generation Settings","max-width-class":"max-w-xl"},{body:f(()=>[l.value?(n(),o("div",w,[a("div",null,[t[6]||(t[6]=a("label",{for:"model-select",class:"block text-sm font-medium"},"Model",-1)),d(a("select",{id:"model-select","onUpdate:modelValue":t[0]||(t[0]=e=>l.value.selectedModel=e),class:"input-field mt-1"},[t[5]||(t[5]=a("option",{disabled:"",value:""},"Select a model",-1)),(n(!0),o(u,null,r(x(c).availableTtiModelsGrouped,e=>(n(),o("optgroup",{key:e.label,label:e.label},[(n(!0),o(u,null,r(e.items,s=>(n(),o("option",{key:s.id,value:s.id},m(s.name),9,C))),128))],8,z))),128))],512),[[p,l.value.selectedModel]])]),a("div",null,[t[7]||(t[7]=a("label",{for:"size",class:"block text-sm font-medium"},"Image Size",-1)),d(a("select",{id:"size","onUpdate:modelValue":t[1]||(t[1]=e=>l.value.imageSize=e),class:"input-field mt-1"},[(n(),o(u,null,r(y,e=>a("option",{key:e.value,value:e.value},m(e.label),9,D)),64))],512),[[p,l.value.imageSize]])]),a("div",null,[t[8]||(t[8]=a("label",{for:"seed",class:"block text-sm font-medium"},"Seed",-1)),d(a("input",{id:"seed","onUpdate:modelValue":t[2]||(t[2]=e=>l.value.seed=e),type:"number",class:"input-field mt-1",placeholder:"-1 for random"},null,512),[[g,l.value.seed,void 0,{number:!0}]])]),a("div",null,[a("label",E,"Strength: "+m(l.value.params.strength||"Default"),1),d(a("input",{type:"range",min:"0",max:"1",step:"0.01","onUpdate:modelValue":t[3]||(t[3]=e=>l.value.params.strength=e),class:"w-full"},null,512),[[g,l.value.params.strength,void 0,{number:!0}]])]),(n(!0),o(u,null,r(S.value,e=>(n(),o("div",{key:e.name},[a("label",{for:`param-${e.name}`,class:"block text-sm font-medium capitalize"},m(e.name.replace(/_/g," ")),9,L),e.options&&e.options.length>0?d((n(),o("select",{key:0,id:`param-${e.name}`,"onUpdate:modelValue":s=>l.value.params[e.name]=s,class:"input-field mt-1"},[(n(!0),o(u,null,r(k(e.options),s=>(n(),o("option",{key:s,value:s},m(s),9,$))),128))],8,T)),[[p,l.value.params[e.name]]]):d((n(),o("input",{key:1,type:e.type==="str"?"text":"number",step:e.type==="float"?"0.1":"1",id:`param-${e.name}`,"onUpdate:modelValue":s=>l.value.params[e.name]=s,class:"input-field mt-1",placeholder:e.default},null,8,B)),[[V,l.value.params[e.name]]])]))),128))])):(n(),o("div",P," Loading settings... "))]),footer:f(()=>[a("button",{onClick:t[4]||(t[4]=e=>x(v).closeModal("imageEditorSettings")),class:"btn btn-primary"},"Close")]),_:1}))}};export{G as default};
frontend/dist/ui_assets/ImageEditorView-DO0LkbY5.js+1 −1 renamed@@ -1 +1 @@ -import{q as le,d as p,l as d,e as n,av as gt,P as mt,K as ht,u as ft,s,c as he,o as bt,aa as wt,Z as Ae,X as xt,k as yt,E as kt,n as fe,h as ae,F as T,i as ne,a6 as Pe,f as m,p as A,m as be,cT as Ct,cW as Mt,z as C,L as V,t as x,a2 as Ee,B as Ve,d9 as It,y as _t,cX as Lt,ap as Rt,aq as Fe,R as St,an as $t,C as Tt,cn as c,cV as At}from"./index-CEXks4lv.js";import{I as Pt,a as Et}from"./IconRedo-BeOOI5_N.js";import{_ as Vt}from"./IconChevronUp-BOxnjcTx.js";const Ft={},Zt={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function zt(Y,y){return d(),p("svg",Zt,y[0]||(y[0]=[n("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21 11.25v8.25a1.5 1.5 0 0 1-1.5 1.5H5.25a1.5 1.5 0 0 1-1.5-1.5v-8.25M12 4.875A2.625 2.625 0 1 0 9.375 7.5H12m0-2.625V7.5m0-2.625A2.625 2.625 0 1 1 14.625 7.5H12m0 0V21m-8.625-9.75h18c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125h-18c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125Z"},null,-1)]))}const Bt=le(Ft,[["render",zt]]),Ht={},Ut={width:"50px",height:"50px",viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"};function Nt(Y,y){return d(),p("svg",Ut,y[0]||(y[0]=[n("path",{d:"M5.50506 11.4096L6.03539 11.9399L5.50506 11.4096ZM3 14.9522H2.25H3ZM12.5904 18.4949L12.0601 17.9646L12.5904 18.4949ZM9.04776 21V21.75V21ZM11.4096 5.50506L10.8792 4.97473L11.4096 5.50506ZM13.241 17.8444C13.5339 18.1373 14.0088 18.1373 14.3017 17.8444C14.5946 17.5515 14.5946 17.0766 14.3017 16.7837L13.241 17.8444ZM7.21629 9.69832C6.9234 9.40543 6.44852 9.40543 6.15563 9.69832C5.86274 9.99122 5.86274 10.4661 6.15563 10.759L7.21629 9.69832ZM16.073 16.073C16.3659 15.7801 16.3659 15.3053 16.073 15.0124C15.7801 14.7195 15.3053 14.7195 15.0124 15.0124L16.073 16.073ZM18.4676 11.5559C18.1759 11.8499 18.1777 12.3248 18.4718 12.6165C18.7658 12.9083 19.2407 12.9064 19.5324 12.6124L18.4676 11.5559ZM6.03539 11.9399L11.9399 6.03539L10.8792 4.97473L4.97473 10.8792L6.03539 11.9399ZM6.03539 17.9646C5.18538 17.1146 4.60235 16.5293 4.22253 16.0315C3.85592 15.551 3.75 15.2411 3.75 14.9522H2.25C2.25 15.701 2.56159 16.3274 3.03 16.9414C3.48521 17.538 4.1547 18.2052 4.97473 19.0253L6.03539 17.9646ZM4.97473 10.8792C4.1547 11.6993 3.48521 12.3665 3.03 12.9631C2.56159 13.577 2.25 14.2035 2.25 14.9522H3.75C3.75 14.6633 3.85592 14.3535 4.22253 13.873C4.60235 13.3752 5.18538 12.7899 6.03539 11.9399L4.97473 10.8792ZM12.0601 17.9646C11.2101 18.8146 10.6248 19.3977 10.127 19.7775C9.64651 20.1441 9.33665 20.25 9.04776 20.25V21.75C9.79649 21.75 10.423 21.4384 11.0369 20.97C11.6335 20.5148 12.3008 19.8453 13.1208 19.0253L12.0601 17.9646ZM4.97473 19.0253C5.79476 19.8453 6.46201 20.5148 7.05863 20.97C7.67256 21.4384 8.29902 21.75 9.04776 21.75V20.25C8.75886 20.25 8.449 20.1441 7.9685 19.7775C7.47069 19.3977 6.88541 18.8146 6.03539 17.9646L4.97473 19.0253ZM17.9646 6.03539C18.8146 6.88541 19.3977 7.47069 19.7775 7.9685C20.1441 8.449 20.25 8.75886 20.25 9.04776H21.75C21.75 8.29902 21.4384 7.67256 20.97 7.05863C20.5148 6.46201 19.8453 5.79476 19.0253 4.97473L17.9646 6.03539ZM19.0253 4.97473C18.2052 4.1547 17.538 3.48521 16.9414 3.03C16.3274 2.56159 15.701 2.25 14.9522 2.25V3.75C15.2411 3.75 15.551 3.85592 16.0315 4.22253C16.5293 4.60235 17.1146 5.18538 17.9646 6.03539L19.0253 4.97473ZM11.9399 6.03539C12.7899 5.18538 13.3752 4.60235 13.873 4.22253C14.3535 3.85592 14.6633 3.75 14.9522 3.75V2.25C14.2035 2.25 13.577 2.56159 12.9631 3.03C12.3665 3.48521 11.6993 4.1547 10.8792 4.97473L11.9399 6.03539ZM14.3017 16.7837L7.21629 9.69832L6.15563 10.759L13.241 17.8444L14.3017 16.7837ZM15.0124 15.0124L12.0601 17.9646L13.1208 19.0253L16.073 16.073L15.0124 15.0124ZM19.5324 12.6124C20.1932 11.9464 20.7384 11.3759 21.114 10.8404C21.5023 10.2869 21.75 9.71511 21.75 9.04776H20.25C20.25 9.30755 20.1644 9.58207 19.886 9.979C19.5949 10.394 19.1401 10.8781 18.4676 11.5559L19.5324 12.6124Z",fill:"#1C274C"},null,-1),n("path",{d:"M9 21H21",stroke:"#1C274C","stroke-width":"1.5","stroke-linecap":"round"},null,-1)]))}const Dt=le(Ht,[["render",Nt]]),jt={},Xt={width:"50px",height:"50px",viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"};function Yt(Y,y){return d(),p("svg",Xt,y[0]||(y[0]=[n("path",{d:"M8 7H16M12 7V17M7.8 21H16.2C17.8802 21 18.7202 21 19.362 20.673C19.9265 20.3854 20.3854 19.9265 20.673 19.362C21 18.7202 21 17.8802 21 16.2V7.8C21 6.11984 21 5.27976 20.673 4.63803C20.3854 4.07354 19.9265 3.6146 19.362 3.32698C18.7202 3 17.8802 3 16.2 3H7.8C6.11984 3 5.27976 3 4.63803 3.32698C4.07354 3.6146 3.6146 4.07354 3.32698 4.63803C3 5.27976 3 6.11984 3 7.8V16.2C3 17.8802 3 18.7202 3.32698 19.362C3.6146 19.9265 4.07354 20.3854 4.63803 20.673C5.27976 21 6.11984 21 7.8 21Z",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)]))}const Gt=le(jt,[["render",Yt]]),Ot={class:"flex items-center bg-gray-100 dark:bg-gray-800 rounded-lg p-0.5 sm:p-1 gap-0.5 sm:gap-1 pointer-events-auto"},Wt=["onClick","title"],Kt={class:"flex items-center gap-1 sm:gap-2 shrink-0 pointer-events-auto"},qt=["disabled"],Jt=["disabled"],Qt={class:"hidden sm:flex items-center bg-gray-100 dark:bg-gray-800 rounded-lg p-1 gap-1 border dark:border-gray-700"},ea={class:"h-full flex flex-col bg-gray-100 dark:bg-gray-950 overflow-hidden relative select-none"},ta={key:0,class:"absolute top-4 left-1/2 -translate-x-1/2 z-20 flex items-center gap-4 bg-white/90 dark:bg-gray-900/90 backdrop-blur px-4 py-2 rounded-2xl shadow-xl border dark:border-gray-800"},aa={class:"flex items-center gap-2"},na={class:"flex items-center gap-2"},la={class:"text-[9px] font-black text-gray-400 uppercase tracking-tighter"},oa={class:"text-[10px] font-mono w-6"},sa={class:"flex-grow flex min-h-0 relative overflow-hidden"},ra={class:"absolute bottom-4 left-4 bg-white/90 dark:bg-gray-900/90 backdrop-blur rounded-xl shadow-lg p-1 sm:p-2 flex items-center gap-1 sm:gap-2 z-10 border dark:border-gray-800"},ia={class:"text-[10px] font-black font-mono w-10 text-center"},ua={class:"p-4 border-b dark:border-gray-800 bg-gray-50 dark:bg-gray-800/50 flex justify-between items-center"},da={class:"flex-grow overflow-y-auto custom-scrollbar p-1"},ca={class:"p-4 border-b dark:border-gray-800 sm:hidden"},va={class:"flex items-center bg-gray-100 dark:bg-gray-800 rounded-lg p-1 gap-1 border dark:border-gray-700"},pa=["onClick"],ga={class:"text-[10px] font-black text-gray-400 uppercase tracking-widest group-hover:text-blue-500 transition-colors"},ma={class:"space-y-4 animate-in fade-in slide-in-from-top-1"},ha={key:0,class:"space-y-3"},fa={class:"flex justify-between text-[9px] font-bold text-gray-500 mb-1"},ba={class:"flex justify-between text-[9px] font-bold text-gray-500 mb-1"},wa={class:"grid grid-cols-2 gap-2"},xa={class:"grid grid-cols-2 gap-2"},ya={class:"space-y-2 p-3 bg-gray-50 dark:bg-black/40 rounded-xl border dark:border-gray-800"},ka={class:"flex justify-between text-[9px] text-gray-400 font-bold uppercase"},Ca={class:"flex justify-between text-[9px] text-gray-400 font-bold uppercase"},Ma={class:"grid grid-cols-3 gap-2 pt-2 border-t dark:border-gray-800"},Ia={key:2,class:"flex flex-wrap gap-1.5"},_a=["onClick"],La={class:"p-4 space-y-4"},Ra={class:"flex justify-between items-center mb-1"},Sa=["disabled"],$a=["value"],Ta={class:"p-4 border-t dark:border-gray-800 bg-gray-50 dark:bg-gray-900/80"},Aa=["disabled"],Pa={__name:"ImageEditorView",props:{id:{type:String,default:null}},setup(Y){const y={render:()=>c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[c("path",{d:"M17 3l4 4-4 4"}),c("path",{d:"M3 7h18"}),c("path",{d:"M7 13l-4 4 4 4"}),c("path",{d:"M3 17h18"})])},Ze={render:()=>c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[c("path",{d:"M7 17l4 4 4-4"}),c("path",{d:"M11 3v18"}),c("path",{d:"M17 7l-4-4-4 4"}),c("path",{d:"M13 3v18"})])},ze={render:()=>c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[c("path",{d:"M20 11a8.1 8.1 0 0 0-15.5-2m-.5 5v-5h5"}),c("path",{d:"M4 13a8.1 8.1 0 0 0 15.5 2m.5-5v5h-5"})])},Be={render:()=>c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[c("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"})])},He={render:()=>c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"},[c("path",{d:"M5 19L19 5"})])},Ue={render:()=>c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[c("path",{d:"M15 4V2M15 16V14M8 9h2M20 9h2M17.8 11.8L19 13M10.6 5.2L12 6.6M11.6 12.2l-8.4 8.6"})])},oe=Y,we=yt(),se=gt(),Ne=mt(),F=ht(),G=ft(),{on:re,off:ie}=wt(),P=s(!1),Z=s(!1),O=s(null),v=s(null),L=s(null),z=s(null),R=s(null),S=s(null),ue=s(null),W=s({Adjustments:!1,"Canvas & Geometry":!1,"Style Presets":!0,"Hair & Color":!0,"AI Retouch":!0}),De={Adjustments:[],"Canvas & Geometry":[],"AI Retouch":[{name:"Skin Smooth",prompt:"retouch skin, smooth texture, highly detailed facial features"},{name:"Sharpen",prompt:"ultra sharp details, enhance micro texture, high resolution"},{name:"Remove Object",prompt:"fill area seamlessly with background context, inpaint"}],"Style Presets":[{name:"Watercolor",prompt:"transform area into watercolor painting style, soft paper texture"},{name:"Oil Paint",prompt:"transform area into thick oil painting brushstrokes, classical art style"},{name:"Anime",prompt:"transform area into vibrant 2d anime art style, cel shaded"}],"Hair & Color":[{name:"Mohawk",prompt:"a sharp mohawk haircut, highly detailed hair"},{name:"Bob Cut",prompt:"a stylish bob haircut, chin-length"},{name:"Bald",prompt:"a clean bald head"},{name:"Crimson Hair",prompt:"vibrant crimson red hair color"},{name:"Neon Green",prompt:"glowing neon green hair color"}]},g=s("image"),i=s("brush"),K=s("#000000"),E=s(40),je=s(1);s(10);const q=s(1),J=s(1),H=s(0),U=s(0),M=s(1),de=s(0),ce=s(0),I=s(""),Xe=s(.75),Ye=s(-1),N=s(""),_=s(!1),ve=s(!1),pe=s(null),D=s(!1),Q=s(0),ee=s(0),xe=s(0),ye=s(0),b=s(0),w=s(0),k=s([]),f=s(-1),Ge=[{id:"pan",name:"Pan",icon:Bt},{id:"brush",name:"Brush",icon:Ae},{id:"eraser",name:"Eraser",icon:Dt},{id:"text",name:"Text",icon:Gt},{id:"wand",name:"Wand",icon:Ue},{id:"line",name:"Line",icon:He},{id:"rect",name:"Rect",icon:Be},{id:"circle",name:"Circle",icon:At}],Oe=he(()=>Ne.availableTtiModels),We=he(()=>["brush","eraser","circle","text"].includes(i.value)&&i.value!=="pan"),Ke=he(()=>({transform:`translate(${de.value}px, ${ce.value}px) scale(${M.value}) perspective(1000px) rotateX(${H.value}deg) rotateY(${U.value}deg)`}));function qe(a){i.value=a}function Je(a){g.value="mask",I.value=a,F.addNotification("Preset applied to prompt.","info")}function Qe(){H.value=0,U.value=0}bt(async()=>{P.value=!0,re("prompt:enhanced",Re),re("image:generated",Se),re("task:completed",$e),F.setPageTitle({title:"Image Editor",icon:markRaw(Ae)}),v.value&&(R.value=v.value.getContext("2d",{willReadFrequently:!0})),L.value&&(S.value=L.value.getContext("2d",{willReadFrequently:!0})),z.value&&(ue.value=z.value.getContext("2d")),oe.id==="new"?et():oe.id&&await ke(oe.id),G.user&&(N.value=G.user.iti_binding_model_name||G.user.tti_binding_model_name||""),window.addEventListener("keydown",Te),window.addEventListener("resize",X)}),xt(()=>{P.value=!1,F.setPageTitle({title:""}),ie("prompt:enhanced",Re),ie("image:generated",Se),ie("task:completed",$e),window.removeEventListener("keydown",Te),window.removeEventListener("resize",X)});async function et(){const{confirmed:a,value:e}=await F.showConfirmation({title:"Canvas Size",inputType:"select",inputOptions:[{text:"1:1",value:"1024x1024"},{text:"16:9",value:"1344x768"},{text:"9:16",value:"768x1344"}],inputValue:"1024x1024"});if(a&&e){const[t,l]=e.split("x").map(Number);tt(t,l)}else we.push("/image-studio")}function tt(a,e){ge(a,e),R.value.fillStyle="#FFFFFF",R.value.fillRect(0,0,a,e),$(),X()}async function ke(a){try{const e=await kt.get(`/api/image-studio/${a}/file`,{responseType:"blob"}),t=new Image;await new Promise((l,o)=>{t.onload=l,t.onerror=o,t.src=URL.createObjectURL(e.data)}),ge(t.naturalWidth,t.naturalHeight),R.value.drawImage(t,0,0),$(),X()}catch{we.push("/image-studio")}}function ge(a,e){[v,L,z].forEach(t=>{t.value&&(t.value.width=a,t.value.height=e)})}function me(a){const e=v.value.getBoundingClientRect(),t=v.value.width/e.width,l=v.value.height/e.height;return{x:(a.clientX-e.left)*t,y:(a.clientY-e.top)*l}}function at(a){if(a.button!==0)return;D.value=!0;const{x:e,y:t}=me(a);if(Q.value=a.clientX,ee.value=a.clientY,b.value=e,w.value=t,i.value==="text"){const l=I("Text:");if(l){const o=B();te(o),o.font=`bold ${E.value}px sans-serif`,o.textBaseline="middle",o.fillText(l,e,t),$()}D.value=!1}else["brush","eraser"].includes(i.value)&&(B().beginPath(),B().moveTo(e,t),Me(e,t))}function nt(a){const{x:e,y:t}=me(a);xe.value=e,ye.value=t,D.value&&(i.value==="pan"?(de.value+=a.clientX-Q.value,ce.value+=a.clientY-ee.value,Q.value=a.clientX,ee.value=a.clientY):["brush","eraser"].includes(i.value)?Me(e,t):["line","rect","circle"].includes(i.value)&<(e,t))}function Ce(){D.value&&(D.value=!1,["line","rect","circle"].includes(i.value)&&ot(me({clientX:Q.value,clientY:ee.value})),["pan","text"].includes(i.value)||$())}function B(){return g.value==="image"?R.value:S.value}function te(a){a.lineCap="round",a.lineJoin="round",a.lineWidth=E.value,i.value==="eraser"?a.globalCompositeOperation="destination-out":(a.globalCompositeOperation="source-over",a.globalAlpha=je.value,a.fillStyle=g.value==="mask"?"#FFF":K.value,a.strokeStyle=g.value==="mask"?"#FFF":K.value)}function Me(a,e){const t=B();te(t),t.lineTo(a,e),t.stroke(),t.beginPath(),t.moveTo(a,e)}function lt(a,e){const t=ue.value;t.clearRect(0,0,t.canvas.width,t.canvas.height),te(t),t.beginPath(),i.value==="line"?(t.moveTo(b.value,w.value),t.lineTo(a,e)):i.value==="rect"?t.rect(b.value,w.value,a-b.value,e-w.value):i.value==="circle"&&t.arc(b.value,w.value,Math.sqrt(Math.pow(a-b.value,2)+Math.pow(e-w.value,2)),0,2*Math.PI),t.stroke(),i.value!=="line"&&t.fill()}function ot(a){ue.value.clearRect(0,0,z.value.width,z.value.height);const e=B();te(e),e.beginPath(),i.value==="line"?(e.moveTo(b.value,w.value),e.lineTo(a.x,a.y),e.stroke()):i.value==="rect"?(e.rect(b.value,w.value,a.x-b.value,a.y-w.value),e.fill(),e.stroke()):i.value==="circle"&&(e.arc(b.value,w.value,Math.sqrt(Math.pow(a.x-b.value,2)+Math.pow(a.y-w.value,2)),0,2*Math.PI),e.fill(),e.stroke()),e.globalAlpha=1,e.globalCompositeOperation="source-over"}function st(){const a=R.value,e=a.getImageData(0,0,a.canvas.width,a.canvas.height),t=e.data,l=q.value,o=J.value,u=128*(1-o);for(let r=0;r<t.length;r+=4)t[r]=t[r]*l*o+u,t[r+1]=t[r+1]*l*o+u,t[r+2]=t[r+2]*l*o+u;a.putImageData(e,0,0),$(),F.addNotification("Adjustments applied.","success")}function rt(a){const e=R.value,t=e.canvas.width,l=e.canvas.height,o=document.createElement("canvas");o.width=t,o.height=l;const u=o.getContext("2d");u.fillStyle="#FFF",u.fillRect(0,0,t,l);const r=t*a,h=l*a;u.drawImage(e.canvas,(t-r)/2,(l-h)/2,r,h),e.clearRect(0,0,t,l),e.drawImage(o,0,0),S.value.fillStyle="#FFF",S.value.fillRect(0,0,t,(l-h)/2),S.value.fillRect(0,l-(l-h)/2,t,(l-h)/2),S.value.fillRect(0,(l-h)/2,(t-r)/2,h),S.value.fillRect(t-(t-r)/2,(l-h)/2,(t-r)/2,h),g.value="mask",$()}function j(a){const e=B(),t=e.canvas,l=document.createElement("canvas");l.width=t.width,l.height=t.height;const o=l.getContext("2d");if(a==="flip-h")o.scale(-1,1),o.drawImage(t,-t.width,0);else if(a==="flip-v")o.scale(1,-1),o.drawImage(t,0,-t.height);else if(a==="rotate-cw")l.width=t.height,l.height=t.width,o.translate(l.width/2,l.height/2),o.rotate(Math.PI/2),o.drawImage(t,-t.width/2,-t.height/2),ge(l.width,l.height);else if(a==="greyscale"||a==="invert"){const u=e.getImageData(0,0,t.width,t.height);for(let r=0;r<u.data.length;r+=4)if(a==="greyscale"){const h=(u.data[r]+u.data[r+1]+u.data[r+2])/3;u.data[r]=h,u.data[r+1]=h,u.data[r+2]=h}else u.data[r]=255-u.data[r],u.data[r+1]=255-u.data[r+1],u.data[r+2]=255-u.data[r+2];e.putImageData(u,0,0),$();return}e.clearRect(0,0,t.width,t.height),e.drawImage(l,0,0),$()}async function it(){_.value=!0;try{const a=v.value.toDataURL("image/png").split(",")[1],e=document.createElement("canvas");e.width=L.value.width,e.height=L.value.height;const t=e.getContext("2d");t.fillStyle="#000",t.fillRect(0,0,e.width,e.height),t.drawImage(L.value,0,0);const l=e.toDataURL("image/png").split(",")[1],o=await se.editImage({base_image_b64:a,mask:l,prompt:I.value,strength:Xe.value,seed:Ye.value,model:N.value,width:v.value.width,height:v.value.height});o!=null&&o.id&&(pe.value=o.id)}catch{_.value=!1}}function ut(a){F.openModal("enhancePrompt",{onConfirm:e=>{var t;ve.value=!0,_.value=!0,se.enhanceImagePrompt({prompt:I.value,target:a,model:(t=G.user)==null?void 0:t.lollms_model_name,...e,image_b64s:[v.value.toDataURL().split(",")[1]]}).then(l=>{l!=null&&l.id&&(pe.value=l.id)})}})}function dt(){const a=v.value.toDataURL("image/png").split(",")[1];se.saveCanvasAsNewImage({base_image_b64:a,prompt:I.value||"Edited",width:v.value.width,height:v.value.height,model:N.value})}function X(){if(!O.value||!v.value)return;const a=O.value.clientWidth,e=O.value.clientHeight,t=v.value.width,l=v.value.height;t&&(M.value=Math.min((a-40)/t,(e-40)/l,1),de.value=0,ce.value=0)}function ct(a){(a.ctrlKey||i.value==="pan")&&(a.preventDefault(),M.value=Math.min(Math.max(.1,M.value-Math.sign(a.deltaY)*.1),5))}function vt(){M.value=Math.min(5,M.value+.1)}function pt(){M.value=Math.max(.1,M.value-.1)}function Ie(){f.value>0&&(f.value--,Le(k.value[f.value]))}function _e(){f.value<k.value.length-1&&(f.value++,Le(k.value[f.value]))}function Le(a){const e=new Image;e.onload=()=>R.value.drawImage(e,0,0),e.src=a.image;const t=new Image;t.onload=()=>S.value.drawImage(t,0,0),t.src=a.mask}function $(){f.value<k.value.length-1&&(k.value=k.value.slice(0,f.value+1)),k.value.push({image:v.value.toDataURL(),mask:L.value.toDataURL()}),f.value++,k.value.length>20&&(k.value.shift(),f.value--)}function Re(a){P.value&&(I.value=a.prompt||I.value,ve.value=!1,_.value=!1)}function Se(a){P.value&&a&&(ke(a.id),_.value=!1)}function $e(a){P.value&&a.id===pe.value&&(_.value=!1,ve.value=!1)}function Te(a){if(a.target.tagName==="INPUT"||a.target.tagName==="TEXTAREA")return;const e={" ":"pan",b:"brush",e:"eraser",t:"text",w:"wand",l:"line",r:"rect",c:"circle"};e[a.key.toLowerCase()]&&(i.value=e[a.key.toLowerCase()]),(a.ctrlKey||a.metaKey)&&a.key.toLowerCase()==="z"&&Ie(),(a.ctrlKey||a.metaKey)&&a.key.toLowerCase()==="y"&&_e()}return(a,e)=>(d(),p(T,null,[P.value?(d(),fe(Pe,{key:0,to:"#global-header-title-target"},[n("div",Ot,[(d(),p(T,null,ne(Ge,t=>n("button",{key:t.id,onClick:l=>qe(t.id),class:A(["p-1.5 sm:p-2 rounded-md transition-colors",i.value===t.id?"bg-white dark:bg-gray-700 text-blue-600 dark:text-blue-400 shadow-sm":"text-gray-500 hover:text-gray-700 dark:hover:text-gray-300"]),title:t.name},[(d(),fe(Tt(t.icon),{class:"w-4 h-4 sm:w-5 sm:h-5"}))],10,Wt)),64))])])):ae("",!0),P.value?(d(),fe(Pe,{key:1,to:"#global-header-actions-target"},[n("div",Kt,[n("button",{onClick:Ie,disabled:f.value<=0,class:"p-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded disabled:opacity-20 transition-opacity"},[m(Pt,{class:"w-5 h-5"})],8,qt),n("button",{onClick:_e,disabled:f.value>=k.value.length-1,class:"p-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded disabled:opacity-20 transition-opacity"},[m(Et,{class:"w-5 h-5"})],8,Jt),e[24]||(e[24]=n("div",{class:"h-6 w-px bg-gray-300 dark:bg-gray-600 mx-1"},null,-1)),n("div",Qt,[n("button",{onClick:e[0]||(e[0]=t=>g.value="image"),class:A(["px-2 py-1 text-[9px] font-black rounded transition-colors uppercase",g.value==="image"?"bg-white dark:bg-gray-700 shadow-sm text-blue-600 dark:text-blue-400":"text-gray-500"])},"Img",2),n("button",{onClick:e[1]||(e[1]=t=>g.value="mask"),class:A(["px-2 py-1 text-[9px] font-black rounded transition-colors uppercase",g.value==="mask"?"bg-white dark:bg-gray-700 shadow-sm text-blue-600 dark:text-blue-400":"text-gray-500"])},"Mask",2)]),n("button",{onClick:dt,class:"btn btn-primary btn-sm gap-2"},[m(Ct,{class:"w-4 h-4"}),e[22]||(e[22]=be()),e[23]||(e[23]=n("span",{class:"hidden sm:inline"},"Save",-1))]),n("button",{onClick:e[2]||(e[2]=t=>Z.value=!Z.value),class:"lg:hidden btn btn-secondary p-2 ml-1"},[m(Mt,{class:"w-5 h-5"})])])])):ae("",!0),n("div",ea,[["brush","eraser","line","rect","circle","text"].includes(i.value)?(d(),p("div",ta,[n("div",aa,[C(n("input",{type:"color","onUpdate:modelValue":e[3]||(e[3]=t=>K.value=t),class:"w-6 h-6 rounded cursor-pointer border-0 p-0 bg-transparent"},null,512),[[V,K.value]])]),e[25]||(e[25]=n("div",{class:"h-4 w-px bg-gray-300 dark:bg-gray-700"},null,-1)),n("div",na,[n("span",la,x(i.value==="text"?"Font":"Size"),1),C(n("input",{type:"range","onUpdate:modelValue":e[4]||(e[4]=t=>E.value=t),min:"1",max:"400",class:"w-24 sm:w-32 h-1.5 bg-gray-200 dark:bg-gray-700 rounded-lg appearance-none cursor-pointer"},null,512),[[V,E.value,void 0,{number:!0}]]),n("span",oa,x(E.value),1)])])):ae("",!0),n("div",sa,[n("main",{ref_key:"containerRef",ref:O,class:"flex-grow bg-gray-200 dark:bg-black relative overflow-hidden flex items-center justify-center cursor-crosshair pattern-grid",onWheel:ct,onMousedown:at,onMousemove:nt,onMouseup:Ce,onMouseleave:Ce},[n("div",{style:Ee(Ke.value),class:"relative shadow-2xl origin-center canvas-stack transition-transform duration-75"},[n("canvas",{ref_key:"imageCanvasRef",ref:v,class:"block bg-white layer-canvas"},null,512),n("canvas",{ref_key:"maskCanvasRef",ref:L,class:A(["absolute inset-0 opacity-60 layer-canvas",{"pointer-events-none":g.value!=="mask"}])},null,2),n("canvas",{ref_key:"previewCanvasRef",ref:z,class:"absolute inset-0 pointer-events-none layer-canvas"},null,512),C(n("div",{class:"absolute pointer-events-none rounded-full border border-black/50 bg-white/20 z-50 transform -translate-x-1/2 -translate-y-1/2 shadow-sm",style:Ee({width:`${E.value}px`,height:`${E.value}px`,left:`${xe.value}px`,top:`${ye.value}px`})},null,4),[[Ve,We.value]])],4),n("div",ra,[n("button",{onClick:pt,class:"p-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded"},[m(It,{class:"w-4 h-4"})]),n("span",ia,x(Math.round(M.value*100))+"%",1),n("button",{onClick:vt,class:"p-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded"},[m(_t,{class:"w-4 h-4"})]),n("button",{onClick:X,class:"p-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded ml-1"},[m(Lt,{class:"w-4 h-4"})])])],544),n("aside",{class:A(["absolute inset-y-0 right-0 z-30 w-72 sm:w-80 bg-white dark:bg-gray-900 border-l dark:border-gray-800 transform transition-transform duration-300 lg:relative lg:translate-x-0 flex flex-col shadow-xl",Z.value?"translate-x-0":"translate-x-full"])},[n("div",ua,[e[26]||(e[26]=n("h3",{class:"font-black text-[10px] uppercase tracking-widest text-gray-500"},"Editor Inspector",-1)),n("button",{onClick:e[5]||(e[5]=t=>Z.value=!1),class:"lg:hidden p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded transition-colors"},[m(Rt,{class:"w-5 h-5"})])]),n("div",da,[n("div",ca,[e[27]||(e[27]=n("label",{class:"text-[10px] font-black text-gray-400 uppercase tracking-widest mb-2 block"},"Active Layer",-1)),n("div",va,[n("button",{onClick:e[6]||(e[6]=t=>g.value="image"),class:A(["flex-1 py-2 text-xs font-black rounded transition-colors uppercase",g.value==="image"?"bg-white dark:bg-gray-700 shadow-sm text-blue-600 dark:text-blue-400":"text-gray-500"])},"Image",2),n("button",{onClick:e[7]||(e[7]=t=>g.value="mask"),class:A(["flex-1 py-2 text-xs font-black rounded transition-colors uppercase",g.value==="mask"?"bg-white dark:bg-gray-700 shadow-sm text-blue-600 dark:text-blue-400":"text-gray-500"])},"Mask",2)])]),(d(),p(T,null,ne(De,(t,l)=>n("div",{key:l,class:"p-4 border-b dark:border-gray-800 space-y-4"},[n("div",{class:"flex items-center justify-between cursor-pointer group",onClick:o=>W.value[l]=!W.value[l]},[n("span",ga,x(l),1),m(Vt,{class:A(["w-3 h-3 transition-transform text-gray-500",{"rotate-180":W.value[l]}])},null,8,["class"])],8,pa),C(n("div",ma,[l==="Adjustments"?(d(),p("div",ha,[n("div",null,[n("div",fa,[e[28]||(e[28]=n("span",null,"BRIGHTNESS",-1)),n("span",null,x(Math.round(q.value*100))+"%",1)]),C(n("input",{type:"range","onUpdate:modelValue":e[8]||(e[8]=o=>q.value=o),min:"0",max:"2",step:"0.05",class:"w-full h-1.5 bg-gray-200 dark:bg-gray-800 rounded-lg appearance-none cursor-pointer"},null,512),[[V,q.value,void 0,{number:!0}]])]),n("div",null,[n("div",ba,[e[29]||(e[29]=n("span",null,"CONTRAST",-1)),n("span",null,x(Math.round(J.value*100))+"%",1)]),C(n("input",{type:"range","onUpdate:modelValue":e[9]||(e[9]=o=>J.value=o),min:"0",max:"2",step:"0.05",class:"w-full h-1.5 bg-gray-200 dark:bg-gray-800 rounded-lg appearance-none cursor-pointer"},null,512),[[V,J.value,void 0,{number:!0}]])]),n("div",wa,[n("button",{onClick:e[10]||(e[10]=o=>j("greyscale")),class:"btn btn-secondary text-[10px] py-1 font-bold"},"Greyscale"),n("button",{onClick:e[11]||(e[11]=o=>j("invert")),class:"btn btn-secondary text-[10px] py-1 font-bold"},"Invert")]),n("button",{onClick:st,class:"btn btn-primary w-full text-[10px] py-2 font-black uppercase tracking-widest"},"Apply Filters")])):l==="Canvas & Geometry"?(d(),p(T,{key:1},[n("div",xa,[n("button",{onClick:e[12]||(e[12]=o=>rt(.75)),class:"btn btn-secondary text-[10px] py-1.5 font-bold uppercase",title:"Scale image down and add blank canvas padding"},"Outpaint Pad"),n("button",{onClick:Qe,class:"btn btn-secondary text-[10px] py-1.5 font-bold uppercase"},"Reset 3D")]),n("div",ya,[n("div",ka,[e[30]||(e[30]=n("span",null,"Tilt X",-1)),n("span",null,x(H.value)+"°",1)]),C(n("input",{type:"range","onUpdate:modelValue":e[13]||(e[13]=o=>H.value=o),min:"-45",max:"45",class:"w-full h-1 bg-gray-200 dark:bg-gray-800 rounded-lg appearance-none cursor-pointer"},null,512),[[V,H.value,void 0,{number:!0}]]),n("div",Ca,[e[31]||(e[31]=n("span",null,"Swing Y",-1)),n("span",null,x(U.value)+"°",1)]),C(n("input",{type:"range","onUpdate:modelValue":e[14]||(e[14]=o=>U.value=o),min:"-45",max:"45",class:"w-full h-1 bg-gray-200 dark:bg-gray-800 rounded-lg appearance-none cursor-pointer"},null,512),[[V,U.value,void 0,{number:!0}]])]),n("div",Ma,[n("button",{onClick:e[15]||(e[15]=o=>j("flip-h")),class:"btn btn-secondary p-2",title:"Flip Horizontal"},[m(y,{class:"w-4 h-4 mx-auto"})]),n("button",{onClick:e[16]||(e[16]=o=>j("flip-v")),class:"btn btn-secondary p-2",title:"Flip Vertical"},[m(Ze,{class:"w-4 h-4 mx-auto"})]),n("button",{onClick:e[17]||(e[17]=o=>j("rotate-cw")),class:"btn btn-secondary p-2",title:"Rotate 90°"},[m(ze,{class:"w-4 h-4 mx-auto"})])])],64)):(d(),p("div",Ia,[(d(!0),p(T,null,ne(t,o=>(d(),p("button",{key:o.name,onClick:u=>Je(o.prompt),class:"px-2 py-1 bg-gray-50 dark:bg-gray-800 text-[9px] border dark:border-gray-700 rounded-lg hover:border-blue-500 transition-all uppercase font-black text-gray-600 dark:text-gray-300"},x(o.name),9,_a))),128))]))],512),[[Ve,!W.value[l]]])])),64)),n("div",La,[n("div",null,[n("div",Ra,[e[32]||(e[32]=n("label",{class:"text-[10px] font-black text-gray-400 uppercase tracking-widest"},"AI Context Prompt",-1)),n("button",{onClick:e[18]||(e[18]=t=>ut("prompt")),class:"text-blue-500 hover:scale-110 transition-transform",disabled:_.value},[m(Fe,{class:"w-4 h-4"})],8,Sa)]),C(n("textarea",{"onUpdate:modelValue":e[19]||(e[19]=t=>I.value=t),rows:"3",class:"input-field w-full text-xs resize-none shadow-inner",placeholder:"Instructions for the AI..."},null,512),[[V,I.value]])]),n("div",null,[e[33]||(e[33]=n("label",{class:"text-[10px] font-black text-gray-400 uppercase tracking-widest"},"Model",-1)),C(n("select",{"onUpdate:modelValue":e[20]||(e[20]=t=>N.value=t),class:"input-field w-full text-xs mt-1"},[(d(!0),p(T,null,ne(Oe.value,t=>(d(),p("option",{key:t.id,value:t.id},x(t.name),9,$a))),128))],512),[[St,N.value]])])])]),n("div",Ta,[n("button",{onClick:it,class:"btn btn-primary w-full py-3 shadow-xl transform active:scale-95 transition-all",disabled:_.value},[_.value?(d(),p(T,{key:0},[m($t,{class:"w-5 h-5 mr-2 animate-spin"}),e[34]||(e[34]=be(" GENERATING..."))],64)):(d(),p(T,{key:1},[m(Fe,{class:"w-5 h-5 mr-2"}),be(" "+x(g.value==="mask"?"INPAINT MASK":"FULL GENERATE"),1)],64))],8,Aa)])],2),Z.value?(d(),p("div",{key:0,onClick:e[21]||(e[21]=t=>Z.value=!1),class:"absolute inset-0 bg-black/50 z-20 lg:hidden backdrop-blur-xs"})):ae("",!0)])])],64))}},Za=le(Pa,[["__scopeId","data-v-c7a101c6"]]);export{Za as default}; +import{q as le,d as p,l as d,e as n,av as gt,P as mt,K as ht,u as ft,s,c as he,o as bt,T as wt,a1 as Ae,V as xt,k as yt,E as kt,n as fe,h as ae,F as T,i as ne,a8 as Pe,f as m,p as A,m as be,cb as Ct,cX as Mt,z as C,L as V,t as x,a4 as Ee,B as Ve,d9 as It,y as _t,ca as Lt,ap as Rt,aq as Fe,X as St,an as $t,C as Tt,cq as c,cW as At}from"./index-BBRgbnZQ.js";import{I as Pt,a as Et}from"./IconRedo-PegjuXO_.js";import{_ as Vt}from"./IconChevronUp-CEIEXC6_.js";const Ft={},Zt={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function zt(Y,y){return d(),p("svg",Zt,y[0]||(y[0]=[n("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21 11.25v8.25a1.5 1.5 0 0 1-1.5 1.5H5.25a1.5 1.5 0 0 1-1.5-1.5v-8.25M12 4.875A2.625 2.625 0 1 0 9.375 7.5H12m0-2.625V7.5m0-2.625A2.625 2.625 0 1 1 14.625 7.5H12m0 0V21m-8.625-9.75h18c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125h-18c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125Z"},null,-1)]))}const Bt=le(Ft,[["render",zt]]),Ht={},Ut={width:"50px",height:"50px",viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"};function Nt(Y,y){return d(),p("svg",Ut,y[0]||(y[0]=[n("path",{d:"M5.50506 11.4096L6.03539 11.9399L5.50506 11.4096ZM3 14.9522H2.25H3ZM12.5904 18.4949L12.0601 17.9646L12.5904 18.4949ZM9.04776 21V21.75V21ZM11.4096 5.50506L10.8792 4.97473L11.4096 5.50506ZM13.241 17.8444C13.5339 18.1373 14.0088 18.1373 14.3017 17.8444C14.5946 17.5515 14.5946 17.0766 14.3017 16.7837L13.241 17.8444ZM7.21629 9.69832C6.9234 9.40543 6.44852 9.40543 6.15563 9.69832C5.86274 9.99122 5.86274 10.4661 6.15563 10.759L7.21629 9.69832ZM16.073 16.073C16.3659 15.7801 16.3659 15.3053 16.073 15.0124C15.7801 14.7195 15.3053 14.7195 15.0124 15.0124L16.073 16.073ZM18.4676 11.5559C18.1759 11.8499 18.1777 12.3248 18.4718 12.6165C18.7658 12.9083 19.2407 12.9064 19.5324 12.6124L18.4676 11.5559ZM6.03539 11.9399L11.9399 6.03539L10.8792 4.97473L4.97473 10.8792L6.03539 11.9399ZM6.03539 17.9646C5.18538 17.1146 4.60235 16.5293 4.22253 16.0315C3.85592 15.551 3.75 15.2411 3.75 14.9522H2.25C2.25 15.701 2.56159 16.3274 3.03 16.9414C3.48521 17.538 4.1547 18.2052 4.97473 19.0253L6.03539 17.9646ZM4.97473 10.8792C4.1547 11.6993 3.48521 12.3665 3.03 12.9631C2.56159 13.577 2.25 14.2035 2.25 14.9522H3.75C3.75 14.6633 3.85592 14.3535 4.22253 13.873C4.60235 13.3752 5.18538 12.7899 6.03539 11.9399L4.97473 10.8792ZM12.0601 17.9646C11.2101 18.8146 10.6248 19.3977 10.127 19.7775C9.64651 20.1441 9.33665 20.25 9.04776 20.25V21.75C9.79649 21.75 10.423 21.4384 11.0369 20.97C11.6335 20.5148 12.3008 19.8453 13.1208 19.0253L12.0601 17.9646ZM4.97473 19.0253C5.79476 19.8453 6.46201 20.5148 7.05863 20.97C7.67256 21.4384 8.29902 21.75 9.04776 21.75V20.25C8.75886 20.25 8.449 20.1441 7.9685 19.7775C7.47069 19.3977 6.88541 18.8146 6.03539 17.9646L4.97473 19.0253ZM17.9646 6.03539C18.8146 6.88541 19.3977 7.47069 19.7775 7.9685C20.1441 8.449 20.25 8.75886 20.25 9.04776H21.75C21.75 8.29902 21.4384 7.67256 20.97 7.05863C20.5148 6.46201 19.8453 5.79476 19.0253 4.97473L17.9646 6.03539ZM19.0253 4.97473C18.2052 4.1547 17.538 3.48521 16.9414 3.03C16.3274 2.56159 15.701 2.25 14.9522 2.25V3.75C15.2411 3.75 15.551 3.85592 16.0315 4.22253C16.5293 4.60235 17.1146 5.18538 17.9646 6.03539L19.0253 4.97473ZM11.9399 6.03539C12.7899 5.18538 13.3752 4.60235 13.873 4.22253C14.3535 3.85592 14.6633 3.75 14.9522 3.75V2.25C14.2035 2.25 13.577 2.56159 12.9631 3.03C12.3665 3.48521 11.6993 4.1547 10.8792 4.97473L11.9399 6.03539ZM14.3017 16.7837L7.21629 9.69832L6.15563 10.759L13.241 17.8444L14.3017 16.7837ZM15.0124 15.0124L12.0601 17.9646L13.1208 19.0253L16.073 16.073L15.0124 15.0124ZM19.5324 12.6124C20.1932 11.9464 20.7384 11.3759 21.114 10.8404C21.5023 10.2869 21.75 9.71511 21.75 9.04776H20.25C20.25 9.30755 20.1644 9.58207 19.886 9.979C19.5949 10.394 19.1401 10.8781 18.4676 11.5559L19.5324 12.6124Z",fill:"#1C274C"},null,-1),n("path",{d:"M9 21H21",stroke:"#1C274C","stroke-width":"1.5","stroke-linecap":"round"},null,-1)]))}const Dt=le(Ht,[["render",Nt]]),jt={},Xt={width:"50px",height:"50px",viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"};function Yt(Y,y){return d(),p("svg",Xt,y[0]||(y[0]=[n("path",{d:"M8 7H16M12 7V17M7.8 21H16.2C17.8802 21 18.7202 21 19.362 20.673C19.9265 20.3854 20.3854 19.9265 20.673 19.362C21 18.7202 21 17.8802 21 16.2V7.8C21 6.11984 21 5.27976 20.673 4.63803C20.3854 4.07354 19.9265 3.6146 19.362 3.32698C18.7202 3 17.8802 3 16.2 3H7.8C6.11984 3 5.27976 3 4.63803 3.32698C4.07354 3.6146 3.6146 4.07354 3.32698 4.63803C3 5.27976 3 6.11984 3 7.8V16.2C3 17.8802 3 18.7202 3.32698 19.362C3.6146 19.9265 4.07354 20.3854 4.63803 20.673C5.27976 21 6.11984 21 7.8 21Z",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)]))}const Gt=le(jt,[["render",Yt]]),Ot={class:"flex items-center bg-gray-100 dark:bg-gray-800 rounded-lg p-0.5 sm:p-1 gap-0.5 sm:gap-1 pointer-events-auto"},Wt=["onClick","title"],Kt={class:"flex items-center gap-1 sm:gap-2 shrink-0 pointer-events-auto"},qt=["disabled"],Jt=["disabled"],Qt={class:"hidden sm:flex items-center bg-gray-100 dark:bg-gray-800 rounded-lg p-1 gap-1 border dark:border-gray-700"},ea={class:"h-full flex flex-col bg-gray-100 dark:bg-gray-950 overflow-hidden relative select-none"},ta={key:0,class:"absolute top-4 left-1/2 -translate-x-1/2 z-20 flex items-center gap-4 bg-white/90 dark:bg-gray-900/90 backdrop-blur px-4 py-2 rounded-2xl shadow-xl border dark:border-gray-800"},aa={class:"flex items-center gap-2"},na={class:"flex items-center gap-2"},la={class:"text-[9px] font-black text-gray-400 uppercase tracking-tighter"},oa={class:"text-[10px] font-mono w-6"},sa={class:"flex-grow flex min-h-0 relative overflow-hidden"},ra={class:"absolute bottom-4 left-4 bg-white/90 dark:bg-gray-900/90 backdrop-blur rounded-xl shadow-lg p-1 sm:p-2 flex items-center gap-1 sm:gap-2 z-10 border dark:border-gray-800"},ia={class:"text-[10px] font-black font-mono w-10 text-center"},ua={class:"p-4 border-b dark:border-gray-800 bg-gray-50 dark:bg-gray-800/50 flex justify-between items-center"},da={class:"flex-grow overflow-y-auto custom-scrollbar p-1"},ca={class:"p-4 border-b dark:border-gray-800 sm:hidden"},va={class:"flex items-center bg-gray-100 dark:bg-gray-800 rounded-lg p-1 gap-1 border dark:border-gray-700"},pa=["onClick"],ga={class:"text-[10px] font-black text-gray-400 uppercase tracking-widest group-hover:text-blue-500 transition-colors"},ma={class:"space-y-4 animate-in fade-in slide-in-from-top-1"},ha={key:0,class:"space-y-3"},fa={class:"flex justify-between text-[9px] font-bold text-gray-500 mb-1"},ba={class:"flex justify-between text-[9px] font-bold text-gray-500 mb-1"},wa={class:"grid grid-cols-2 gap-2"},xa={class:"grid grid-cols-2 gap-2"},ya={class:"space-y-2 p-3 bg-gray-50 dark:bg-black/40 rounded-xl border dark:border-gray-800"},ka={class:"flex justify-between text-[9px] text-gray-400 font-bold uppercase"},Ca={class:"flex justify-between text-[9px] text-gray-400 font-bold uppercase"},Ma={class:"grid grid-cols-3 gap-2 pt-2 border-t dark:border-gray-800"},Ia={key:2,class:"flex flex-wrap gap-1.5"},_a=["onClick"],La={class:"p-4 space-y-4"},Ra={class:"flex justify-between items-center mb-1"},Sa=["disabled"],$a=["value"],Ta={class:"p-4 border-t dark:border-gray-800 bg-gray-50 dark:bg-gray-900/80"},Aa=["disabled"],Pa={__name:"ImageEditorView",props:{id:{type:String,default:null}},setup(Y){const y={render:()=>c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[c("path",{d:"M17 3l4 4-4 4"}),c("path",{d:"M3 7h18"}),c("path",{d:"M7 13l-4 4 4 4"}),c("path",{d:"M3 17h18"})])},Ze={render:()=>c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[c("path",{d:"M7 17l4 4 4-4"}),c("path",{d:"M11 3v18"}),c("path",{d:"M17 7l-4-4-4 4"}),c("path",{d:"M13 3v18"})])},ze={render:()=>c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[c("path",{d:"M20 11a8.1 8.1 0 0 0-15.5-2m-.5 5v-5h5"}),c("path",{d:"M4 13a8.1 8.1 0 0 0 15.5 2m.5-5v5h-5"})])},Be={render:()=>c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[c("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"})])},He={render:()=>c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"},[c("path",{d:"M5 19L19 5"})])},Ue={render:()=>c("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[c("path",{d:"M15 4V2M15 16V14M8 9h2M20 9h2M17.8 11.8L19 13M10.6 5.2L12 6.6M11.6 12.2l-8.4 8.6"})])},oe=Y,we=yt(),se=gt(),Ne=mt(),F=ht(),G=ft(),{on:re,off:ie}=wt(),P=s(!1),Z=s(!1),O=s(null),v=s(null),L=s(null),z=s(null),R=s(null),S=s(null),ue=s(null),W=s({Adjustments:!1,"Canvas & Geometry":!1,"Style Presets":!0,"Hair & Color":!0,"AI Retouch":!0}),De={Adjustments:[],"Canvas & Geometry":[],"AI Retouch":[{name:"Skin Smooth",prompt:"retouch skin, smooth texture, highly detailed facial features"},{name:"Sharpen",prompt:"ultra sharp details, enhance micro texture, high resolution"},{name:"Remove Object",prompt:"fill area seamlessly with background context, inpaint"}],"Style Presets":[{name:"Watercolor",prompt:"transform area into watercolor painting style, soft paper texture"},{name:"Oil Paint",prompt:"transform area into thick oil painting brushstrokes, classical art style"},{name:"Anime",prompt:"transform area into vibrant 2d anime art style, cel shaded"}],"Hair & Color":[{name:"Mohawk",prompt:"a sharp mohawk haircut, highly detailed hair"},{name:"Bob Cut",prompt:"a stylish bob haircut, chin-length"},{name:"Bald",prompt:"a clean bald head"},{name:"Crimson Hair",prompt:"vibrant crimson red hair color"},{name:"Neon Green",prompt:"glowing neon green hair color"}]},g=s("image"),i=s("brush"),K=s("#000000"),E=s(40),je=s(1);s(10);const q=s(1),J=s(1),H=s(0),U=s(0),M=s(1),de=s(0),ce=s(0),I=s(""),Xe=s(.75),Ye=s(-1),N=s(""),_=s(!1),ve=s(!1),pe=s(null),D=s(!1),Q=s(0),ee=s(0),xe=s(0),ye=s(0),b=s(0),w=s(0),k=s([]),f=s(-1),Ge=[{id:"pan",name:"Pan",icon:Bt},{id:"brush",name:"Brush",icon:Ae},{id:"eraser",name:"Eraser",icon:Dt},{id:"text",name:"Text",icon:Gt},{id:"wand",name:"Wand",icon:Ue},{id:"line",name:"Line",icon:He},{id:"rect",name:"Rect",icon:Be},{id:"circle",name:"Circle",icon:At}],Oe=he(()=>Ne.availableTtiModels),We=he(()=>["brush","eraser","circle","text"].includes(i.value)&&i.value!=="pan"),Ke=he(()=>({transform:`translate(${de.value}px, ${ce.value}px) scale(${M.value}) perspective(1000px) rotateX(${H.value}deg) rotateY(${U.value}deg)`}));function qe(a){i.value=a}function Je(a){g.value="mask",I.value=a,F.addNotification("Preset applied to prompt.","info")}function Qe(){H.value=0,U.value=0}bt(async()=>{P.value=!0,re("prompt:enhanced",Re),re("image:generated",Se),re("task:completed",$e),F.setPageTitle({title:"Image Editor",icon:markRaw(Ae)}),v.value&&(R.value=v.value.getContext("2d",{willReadFrequently:!0})),L.value&&(S.value=L.value.getContext("2d",{willReadFrequently:!0})),z.value&&(ue.value=z.value.getContext("2d")),oe.id==="new"?et():oe.id&&await ke(oe.id),G.user&&(N.value=G.user.iti_binding_model_name||G.user.tti_binding_model_name||""),window.addEventListener("keydown",Te),window.addEventListener("resize",X)}),xt(()=>{P.value=!1,F.setPageTitle({title:""}),ie("prompt:enhanced",Re),ie("image:generated",Se),ie("task:completed",$e),window.removeEventListener("keydown",Te),window.removeEventListener("resize",X)});async function et(){const{confirmed:a,value:e}=await F.showConfirmation({title:"Canvas Size",inputType:"select",inputOptions:[{text:"1:1",value:"1024x1024"},{text:"16:9",value:"1344x768"},{text:"9:16",value:"768x1344"}],inputValue:"1024x1024"});if(a&&e){const[t,l]=e.split("x").map(Number);tt(t,l)}else we.push("/image-studio")}function tt(a,e){ge(a,e),R.value.fillStyle="#FFFFFF",R.value.fillRect(0,0,a,e),$(),X()}async function ke(a){try{const e=await kt.get(`/api/image-studio/${a}/file`,{responseType:"blob"}),t=new Image;await new Promise((l,o)=>{t.onload=l,t.onerror=o,t.src=URL.createObjectURL(e.data)}),ge(t.naturalWidth,t.naturalHeight),R.value.drawImage(t,0,0),$(),X()}catch{we.push("/image-studio")}}function ge(a,e){[v,L,z].forEach(t=>{t.value&&(t.value.width=a,t.value.height=e)})}function me(a){const e=v.value.getBoundingClientRect(),t=v.value.width/e.width,l=v.value.height/e.height;return{x:(a.clientX-e.left)*t,y:(a.clientY-e.top)*l}}function at(a){if(a.button!==0)return;D.value=!0;const{x:e,y:t}=me(a);if(Q.value=a.clientX,ee.value=a.clientY,b.value=e,w.value=t,i.value==="text"){const l=I("Text:");if(l){const o=B();te(o),o.font=`bold ${E.value}px sans-serif`,o.textBaseline="middle",o.fillText(l,e,t),$()}D.value=!1}else["brush","eraser"].includes(i.value)&&(B().beginPath(),B().moveTo(e,t),Me(e,t))}function nt(a){const{x:e,y:t}=me(a);xe.value=e,ye.value=t,D.value&&(i.value==="pan"?(de.value+=a.clientX-Q.value,ce.value+=a.clientY-ee.value,Q.value=a.clientX,ee.value=a.clientY):["brush","eraser"].includes(i.value)?Me(e,t):["line","rect","circle"].includes(i.value)&<(e,t))}function Ce(){D.value&&(D.value=!1,["line","rect","circle"].includes(i.value)&&ot(me({clientX:Q.value,clientY:ee.value})),["pan","text"].includes(i.value)||$())}function B(){return g.value==="image"?R.value:S.value}function te(a){a.lineCap="round",a.lineJoin="round",a.lineWidth=E.value,i.value==="eraser"?a.globalCompositeOperation="destination-out":(a.globalCompositeOperation="source-over",a.globalAlpha=je.value,a.fillStyle=g.value==="mask"?"#FFF":K.value,a.strokeStyle=g.value==="mask"?"#FFF":K.value)}function Me(a,e){const t=B();te(t),t.lineTo(a,e),t.stroke(),t.beginPath(),t.moveTo(a,e)}function lt(a,e){const t=ue.value;t.clearRect(0,0,t.canvas.width,t.canvas.height),te(t),t.beginPath(),i.value==="line"?(t.moveTo(b.value,w.value),t.lineTo(a,e)):i.value==="rect"?t.rect(b.value,w.value,a-b.value,e-w.value):i.value==="circle"&&t.arc(b.value,w.value,Math.sqrt(Math.pow(a-b.value,2)+Math.pow(e-w.value,2)),0,2*Math.PI),t.stroke(),i.value!=="line"&&t.fill()}function ot(a){ue.value.clearRect(0,0,z.value.width,z.value.height);const e=B();te(e),e.beginPath(),i.value==="line"?(e.moveTo(b.value,w.value),e.lineTo(a.x,a.y),e.stroke()):i.value==="rect"?(e.rect(b.value,w.value,a.x-b.value,a.y-w.value),e.fill(),e.stroke()):i.value==="circle"&&(e.arc(b.value,w.value,Math.sqrt(Math.pow(a.x-b.value,2)+Math.pow(a.y-w.value,2)),0,2*Math.PI),e.fill(),e.stroke()),e.globalAlpha=1,e.globalCompositeOperation="source-over"}function st(){const a=R.value,e=a.getImageData(0,0,a.canvas.width,a.canvas.height),t=e.data,l=q.value,o=J.value,u=128*(1-o);for(let r=0;r<t.length;r+=4)t[r]=t[r]*l*o+u,t[r+1]=t[r+1]*l*o+u,t[r+2]=t[r+2]*l*o+u;a.putImageData(e,0,0),$(),F.addNotification("Adjustments applied.","success")}function rt(a){const e=R.value,t=e.canvas.width,l=e.canvas.height,o=document.createElement("canvas");o.width=t,o.height=l;const u=o.getContext("2d");u.fillStyle="#FFF",u.fillRect(0,0,t,l);const r=t*a,h=l*a;u.drawImage(e.canvas,(t-r)/2,(l-h)/2,r,h),e.clearRect(0,0,t,l),e.drawImage(o,0,0),S.value.fillStyle="#FFF",S.value.fillRect(0,0,t,(l-h)/2),S.value.fillRect(0,l-(l-h)/2,t,(l-h)/2),S.value.fillRect(0,(l-h)/2,(t-r)/2,h),S.value.fillRect(t-(t-r)/2,(l-h)/2,(t-r)/2,h),g.value="mask",$()}function j(a){const e=B(),t=e.canvas,l=document.createElement("canvas");l.width=t.width,l.height=t.height;const o=l.getContext("2d");if(a==="flip-h")o.scale(-1,1),o.drawImage(t,-t.width,0);else if(a==="flip-v")o.scale(1,-1),o.drawImage(t,0,-t.height);else if(a==="rotate-cw")l.width=t.height,l.height=t.width,o.translate(l.width/2,l.height/2),o.rotate(Math.PI/2),o.drawImage(t,-t.width/2,-t.height/2),ge(l.width,l.height);else if(a==="greyscale"||a==="invert"){const u=e.getImageData(0,0,t.width,t.height);for(let r=0;r<u.data.length;r+=4)if(a==="greyscale"){const h=(u.data[r]+u.data[r+1]+u.data[r+2])/3;u.data[r]=h,u.data[r+1]=h,u.data[r+2]=h}else u.data[r]=255-u.data[r],u.data[r+1]=255-u.data[r+1],u.data[r+2]=255-u.data[r+2];e.putImageData(u,0,0),$();return}e.clearRect(0,0,t.width,t.height),e.drawImage(l,0,0),$()}async function it(){_.value=!0;try{const a=v.value.toDataURL("image/png").split(",")[1],e=document.createElement("canvas");e.width=L.value.width,e.height=L.value.height;const t=e.getContext("2d");t.fillStyle="#000",t.fillRect(0,0,e.width,e.height),t.drawImage(L.value,0,0);const l=e.toDataURL("image/png").split(",")[1],o=await se.editImage({base_image_b64:a,mask:l,prompt:I.value,strength:Xe.value,seed:Ye.value,model:N.value,width:v.value.width,height:v.value.height});o!=null&&o.id&&(pe.value=o.id)}catch{_.value=!1}}function ut(a){F.openModal("enhancePrompt",{onConfirm:e=>{var t;ve.value=!0,_.value=!0,se.enhanceImagePrompt({prompt:I.value,target:a,model:(t=G.user)==null?void 0:t.lollms_model_name,...e,image_b64s:[v.value.toDataURL().split(",")[1]]}).then(l=>{l!=null&&l.id&&(pe.value=l.id)})}})}function dt(){const a=v.value.toDataURL("image/png").split(",")[1];se.saveCanvasAsNewImage({base_image_b64:a,prompt:I.value||"Edited",width:v.value.width,height:v.value.height,model:N.value})}function X(){if(!O.value||!v.value)return;const a=O.value.clientWidth,e=O.value.clientHeight,t=v.value.width,l=v.value.height;t&&(M.value=Math.min((a-40)/t,(e-40)/l,1),de.value=0,ce.value=0)}function ct(a){(a.ctrlKey||i.value==="pan")&&(a.preventDefault(),M.value=Math.min(Math.max(.1,M.value-Math.sign(a.deltaY)*.1),5))}function vt(){M.value=Math.min(5,M.value+.1)}function pt(){M.value=Math.max(.1,M.value-.1)}function Ie(){f.value>0&&(f.value--,Le(k.value[f.value]))}function _e(){f.value<k.value.length-1&&(f.value++,Le(k.value[f.value]))}function Le(a){const e=new Image;e.onload=()=>R.value.drawImage(e,0,0),e.src=a.image;const t=new Image;t.onload=()=>S.value.drawImage(t,0,0),t.src=a.mask}function $(){f.value<k.value.length-1&&(k.value=k.value.slice(0,f.value+1)),k.value.push({image:v.value.toDataURL(),mask:L.value.toDataURL()}),f.value++,k.value.length>20&&(k.value.shift(),f.value--)}function Re(a){P.value&&(I.value=a.prompt||I.value,ve.value=!1,_.value=!1)}function Se(a){P.value&&a&&(ke(a.id),_.value=!1)}function $e(a){P.value&&a.id===pe.value&&(_.value=!1,ve.value=!1)}function Te(a){if(a.target.tagName==="INPUT"||a.target.tagName==="TEXTAREA")return;const e={" ":"pan",b:"brush",e:"eraser",t:"text",w:"wand",l:"line",r:"rect",c:"circle"};e[a.key.toLowerCase()]&&(i.value=e[a.key.toLowerCase()]),(a.ctrlKey||a.metaKey)&&a.key.toLowerCase()==="z"&&Ie(),(a.ctrlKey||a.metaKey)&&a.key.toLowerCase()==="y"&&_e()}return(a,e)=>(d(),p(T,null,[P.value?(d(),fe(Pe,{key:0,to:"#global-header-title-target"},[n("div",Ot,[(d(),p(T,null,ne(Ge,t=>n("button",{key:t.id,onClick:l=>qe(t.id),class:A(["p-1.5 sm:p-2 rounded-md transition-colors",i.value===t.id?"bg-white dark:bg-gray-700 text-blue-600 dark:text-blue-400 shadow-sm":"text-gray-500 hover:text-gray-700 dark:hover:text-gray-300"]),title:t.name},[(d(),fe(Tt(t.icon),{class:"w-4 h-4 sm:w-5 sm:h-5"}))],10,Wt)),64))])])):ae("",!0),P.value?(d(),fe(Pe,{key:1,to:"#global-header-actions-target"},[n("div",Kt,[n("button",{onClick:Ie,disabled:f.value<=0,class:"p-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded disabled:opacity-20 transition-opacity"},[m(Pt,{class:"w-5 h-5"})],8,qt),n("button",{onClick:_e,disabled:f.value>=k.value.length-1,class:"p-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded disabled:opacity-20 transition-opacity"},[m(Et,{class:"w-5 h-5"})],8,Jt),e[24]||(e[24]=n("div",{class:"h-6 w-px bg-gray-300 dark:bg-gray-600 mx-1"},null,-1)),n("div",Qt,[n("button",{onClick:e[0]||(e[0]=t=>g.value="image"),class:A(["px-2 py-1 text-[9px] font-black rounded transition-colors uppercase",g.value==="image"?"bg-white dark:bg-gray-700 shadow-sm text-blue-600 dark:text-blue-400":"text-gray-500"])},"Img",2),n("button",{onClick:e[1]||(e[1]=t=>g.value="mask"),class:A(["px-2 py-1 text-[9px] font-black rounded transition-colors uppercase",g.value==="mask"?"bg-white dark:bg-gray-700 shadow-sm text-blue-600 dark:text-blue-400":"text-gray-500"])},"Mask",2)]),n("button",{onClick:dt,class:"btn btn-primary btn-sm gap-2"},[m(Ct,{class:"w-4 h-4"}),e[22]||(e[22]=be()),e[23]||(e[23]=n("span",{class:"hidden sm:inline"},"Save",-1))]),n("button",{onClick:e[2]||(e[2]=t=>Z.value=!Z.value),class:"lg:hidden btn btn-secondary p-2 ml-1"},[m(Mt,{class:"w-5 h-5"})])])])):ae("",!0),n("div",ea,[["brush","eraser","line","rect","circle","text"].includes(i.value)?(d(),p("div",ta,[n("div",aa,[C(n("input",{type:"color","onUpdate:modelValue":e[3]||(e[3]=t=>K.value=t),class:"w-6 h-6 rounded cursor-pointer border-0 p-0 bg-transparent"},null,512),[[V,K.value]])]),e[25]||(e[25]=n("div",{class:"h-4 w-px bg-gray-300 dark:bg-gray-700"},null,-1)),n("div",na,[n("span",la,x(i.value==="text"?"Font":"Size"),1),C(n("input",{type:"range","onUpdate:modelValue":e[4]||(e[4]=t=>E.value=t),min:"1",max:"400",class:"w-24 sm:w-32 h-1.5 bg-gray-200 dark:bg-gray-700 rounded-lg appearance-none cursor-pointer"},null,512),[[V,E.value,void 0,{number:!0}]]),n("span",oa,x(E.value),1)])])):ae("",!0),n("div",sa,[n("main",{ref_key:"containerRef",ref:O,class:"flex-grow bg-gray-200 dark:bg-black relative overflow-hidden flex items-center justify-center cursor-crosshair pattern-grid",onWheel:ct,onMousedown:at,onMousemove:nt,onMouseup:Ce,onMouseleave:Ce},[n("div",{style:Ee(Ke.value),class:"relative shadow-2xl origin-center canvas-stack transition-transform duration-75"},[n("canvas",{ref_key:"imageCanvasRef",ref:v,class:"block bg-white layer-canvas"},null,512),n("canvas",{ref_key:"maskCanvasRef",ref:L,class:A(["absolute inset-0 opacity-60 layer-canvas",{"pointer-events-none":g.value!=="mask"}])},null,2),n("canvas",{ref_key:"previewCanvasRef",ref:z,class:"absolute inset-0 pointer-events-none layer-canvas"},null,512),C(n("div",{class:"absolute pointer-events-none rounded-full border border-black/50 bg-white/20 z-50 transform -translate-x-1/2 -translate-y-1/2 shadow-sm",style:Ee({width:`${E.value}px`,height:`${E.value}px`,left:`${xe.value}px`,top:`${ye.value}px`})},null,4),[[Ve,We.value]])],4),n("div",ra,[n("button",{onClick:pt,class:"p-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded"},[m(It,{class:"w-4 h-4"})]),n("span",ia,x(Math.round(M.value*100))+"%",1),n("button",{onClick:vt,class:"p-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded"},[m(_t,{class:"w-4 h-4"})]),n("button",{onClick:X,class:"p-1.5 hover:bg-gray-100 dark:hover:bg-gray-700 rounded ml-1"},[m(Lt,{class:"w-4 h-4"})])])],544),n("aside",{class:A(["absolute inset-y-0 right-0 z-30 w-72 sm:w-80 bg-white dark:bg-gray-900 border-l dark:border-gray-800 transform transition-transform duration-300 lg:relative lg:translate-x-0 flex flex-col shadow-xl",Z.value?"translate-x-0":"translate-x-full"])},[n("div",ua,[e[26]||(e[26]=n("h3",{class:"font-black text-[10px] uppercase tracking-widest text-gray-500"},"Editor Inspector",-1)),n("button",{onClick:e[5]||(e[5]=t=>Z.value=!1),class:"lg:hidden p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded transition-colors"},[m(Rt,{class:"w-5 h-5"})])]),n("div",da,[n("div",ca,[e[27]||(e[27]=n("label",{class:"text-[10px] font-black text-gray-400 uppercase tracking-widest mb-2 block"},"Active Layer",-1)),n("div",va,[n("button",{onClick:e[6]||(e[6]=t=>g.value="image"),class:A(["flex-1 py-2 text-xs font-black rounded transition-colors uppercase",g.value==="image"?"bg-white dark:bg-gray-700 shadow-sm text-blue-600 dark:text-blue-400":"text-gray-500"])},"Image",2),n("button",{onClick:e[7]||(e[7]=t=>g.value="mask"),class:A(["flex-1 py-2 text-xs font-black rounded transition-colors uppercase",g.value==="mask"?"bg-white dark:bg-gray-700 shadow-sm text-blue-600 dark:text-blue-400":"text-gray-500"])},"Mask",2)])]),(d(),p(T,null,ne(De,(t,l)=>n("div",{key:l,class:"p-4 border-b dark:border-gray-800 space-y-4"},[n("div",{class:"flex items-center justify-between cursor-pointer group",onClick:o=>W.value[l]=!W.value[l]},[n("span",ga,x(l),1),m(Vt,{class:A(["w-3 h-3 transition-transform text-gray-500",{"rotate-180":W.value[l]}])},null,8,["class"])],8,pa),C(n("div",ma,[l==="Adjustments"?(d(),p("div",ha,[n("div",null,[n("div",fa,[e[28]||(e[28]=n("span",null,"BRIGHTNESS",-1)),n("span",null,x(Math.round(q.value*100))+"%",1)]),C(n("input",{type:"range","onUpdate:modelValue":e[8]||(e[8]=o=>q.value=o),min:"0",max:"2",step:"0.05",class:"w-full h-1.5 bg-gray-200 dark:bg-gray-800 rounded-lg appearance-none cursor-pointer"},null,512),[[V,q.value,void 0,{number:!0}]])]),n("div",null,[n("div",ba,[e[29]||(e[29]=n("span",null,"CONTRAST",-1)),n("span",null,x(Math.round(J.value*100))+"%",1)]),C(n("input",{type:"range","onUpdate:modelValue":e[9]||(e[9]=o=>J.value=o),min:"0",max:"2",step:"0.05",class:"w-full h-1.5 bg-gray-200 dark:bg-gray-800 rounded-lg appearance-none cursor-pointer"},null,512),[[V,J.value,void 0,{number:!0}]])]),n("div",wa,[n("button",{onClick:e[10]||(e[10]=o=>j("greyscale")),class:"btn btn-secondary text-[10px] py-1 font-bold"},"Greyscale"),n("button",{onClick:e[11]||(e[11]=o=>j("invert")),class:"btn btn-secondary text-[10px] py-1 font-bold"},"Invert")]),n("button",{onClick:st,class:"btn btn-primary w-full text-[10px] py-2 font-black uppercase tracking-widest"},"Apply Filters")])):l==="Canvas & Geometry"?(d(),p(T,{key:1},[n("div",xa,[n("button",{onClick:e[12]||(e[12]=o=>rt(.75)),class:"btn btn-secondary text-[10px] py-1.5 font-bold uppercase",title:"Scale image down and add blank canvas padding"},"Outpaint Pad"),n("button",{onClick:Qe,class:"btn btn-secondary text-[10px] py-1.5 font-bold uppercase"},"Reset 3D")]),n("div",ya,[n("div",ka,[e[30]||(e[30]=n("span",null,"Tilt X",-1)),n("span",null,x(H.value)+"°",1)]),C(n("input",{type:"range","onUpdate:modelValue":e[13]||(e[13]=o=>H.value=o),min:"-45",max:"45",class:"w-full h-1 bg-gray-200 dark:bg-gray-800 rounded-lg appearance-none cursor-pointer"},null,512),[[V,H.value,void 0,{number:!0}]]),n("div",Ca,[e[31]||(e[31]=n("span",null,"Swing Y",-1)),n("span",null,x(U.value)+"°",1)]),C(n("input",{type:"range","onUpdate:modelValue":e[14]||(e[14]=o=>U.value=o),min:"-45",max:"45",class:"w-full h-1 bg-gray-200 dark:bg-gray-800 rounded-lg appearance-none cursor-pointer"},null,512),[[V,U.value,void 0,{number:!0}]])]),n("div",Ma,[n("button",{onClick:e[15]||(e[15]=o=>j("flip-h")),class:"btn btn-secondary p-2",title:"Flip Horizontal"},[m(y,{class:"w-4 h-4 mx-auto"})]),n("button",{onClick:e[16]||(e[16]=o=>j("flip-v")),class:"btn btn-secondary p-2",title:"Flip Vertical"},[m(Ze,{class:"w-4 h-4 mx-auto"})]),n("button",{onClick:e[17]||(e[17]=o=>j("rotate-cw")),class:"btn btn-secondary p-2",title:"Rotate 90°"},[m(ze,{class:"w-4 h-4 mx-auto"})])])],64)):(d(),p("div",Ia,[(d(!0),p(T,null,ne(t,o=>(d(),p("button",{key:o.name,onClick:u=>Je(o.prompt),class:"px-2 py-1 bg-gray-50 dark:bg-gray-800 text-[9px] border dark:border-gray-700 rounded-lg hover:border-blue-500 transition-all uppercase font-black text-gray-600 dark:text-gray-300"},x(o.name),9,_a))),128))]))],512),[[Ve,!W.value[l]]])])),64)),n("div",La,[n("div",null,[n("div",Ra,[e[32]||(e[32]=n("label",{class:"text-[10px] font-black text-gray-400 uppercase tracking-widest"},"AI Context Prompt",-1)),n("button",{onClick:e[18]||(e[18]=t=>ut("prompt")),class:"text-blue-500 hover:scale-110 transition-transform",disabled:_.value},[m(Fe,{class:"w-4 h-4"})],8,Sa)]),C(n("textarea",{"onUpdate:modelValue":e[19]||(e[19]=t=>I.value=t),rows:"3",class:"input-field w-full text-xs resize-none shadow-inner",placeholder:"Instructions for the AI..."},null,512),[[V,I.value]])]),n("div",null,[e[33]||(e[33]=n("label",{class:"text-[10px] font-black text-gray-400 uppercase tracking-widest"},"Model",-1)),C(n("select",{"onUpdate:modelValue":e[20]||(e[20]=t=>N.value=t),class:"input-field w-full text-xs mt-1"},[(d(!0),p(T,null,ne(Oe.value,t=>(d(),p("option",{key:t.id,value:t.id},x(t.name),9,$a))),128))],512),[[St,N.value]])])])]),n("div",Ta,[n("button",{onClick:it,class:"btn btn-primary w-full py-3 shadow-xl transform active:scale-95 transition-all",disabled:_.value},[_.value?(d(),p(T,{key:0},[m($t,{class:"w-5 h-5 mr-2 animate-spin"}),e[34]||(e[34]=be(" GENERATING..."))],64)):(d(),p(T,{key:1},[m(Fe,{class:"w-5 h-5 mr-2"}),be(" "+x(g.value==="mask"?"INPAINT MASK":"FULL GENERATE"),1)],64))],8,Aa)])],2),Z.value?(d(),p("div",{key:0,onClick:e[21]||(e[21]=t=>Z.value=!1),class:"absolute inset-0 bg-black/50 z-20 lg:hidden backdrop-blur-xs"})):ae("",!0)])])],64))}},Za=le(Pa,[["__scopeId","data-v-c7a101c6"]]);export{Za as default};
frontend/dist/ui_assets/ImageStudioView-BW9O7hdW.js+1 −0 added@@ -0,0 +1 @@ +import{q as de,d as r,l as n,e as t,av as ze,P as Ee,K as Ne,u as Re,N as Le,Q as We,R as E,s as g,c as y,w as ne,o as Ue,cg as Ge,ai as le,V as Be,n as H,j as c,h as x,an as N,t as m,aq as X,f as l,cX as Oe,a8 as qe,a4 as Z,p as k,H as w,ap as Fe,z as _,L as R,ak as L,F as S,i as M,Z as He,a0 as re,W as Xe,y as Ze,cU as Je,ah as Ke,k as Qe,B as Ye,a3 as et,a1 as tt,ca as at}from"./index-BBRgbnZQ.js";import{_ as st}from"./IconChevronUp-CEIEXC6_.js";const ot={},it={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function nt(ce,d){return n(),r("svg",it,d[0]||(d[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6.827 6.175A2.31 2.31 0 0 1 5.186 7.23c-.38.054-.757.112-1.134.175C2.999 7.58 2.25 8.507 2.25 9.574V18a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9.574c0-1.067-.75-1.994-1.802-2.169a47.865 47.865 0 0 0-1.134-.175 2.31 2.31 0 0 1-1.64-1.055l-.822-1.316a2.192 2.192 0 0 0-1.736-1.039 48.776 48.776 0 0 0-5.232 0 2.192 2.192 0 0 0-1.736 1.039l-.821 1.316Z"},null,-1),t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M16.5 12.75a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0ZM18.75 10.5h.008v.008h-.008V10.5Z"},null,-1)]))}const lt=de(ot,[["render",nt]]),rt={class:"flex items-center gap-2"},dt=["disabled"],ct={class:"hidden xs:inline"},ut={key:0,class:"absolute inset-0 bg-blue-500/20 border-4 border-dashed border-blue-500 rounded-lg z-50 flex items-center justify-center m-4 pointer-events-none"},pt={class:"flex-grow min-h-0 flex relative overflow-hidden"},mt={class:"flex-grow p-4 space-y-6 overflow-y-auto custom-scrollbar"},gt={class:"flex items-center justify-between lg:hidden mb-4 border-b dark:border-gray-700 pb-2"},vt={class:"space-y-4"},ht={class:"flex justify-between items-center mb-1"},bt=["disabled"],ft={class:"relative"},xt=["disabled"],wt={key:0,class:"absolute inset-0 flex items-center justify-center bg-white/40 dark:bg-black/40 backdrop-blur-sm rounded"},yt=["onClick"],kt={class:"text-[10px] font-black text-gray-400 uppercase tracking-widest"},_t={class:"grid grid-cols-3 gap-1.5 animate-in fade-in slide-in-from-top-1"},St=["onClick","title"],Ct={class:"text-lg mb-0.5"},jt={class:"text-[8px] font-bold truncate w-full text-center leading-tight uppercase"},It={class:"flex justify-between items-center mb-1"},Mt=["disabled"],$t={class:"pt-4 border-t dark:border-gray-700 space-y-4"},Dt={class:"space-y-2"},Tt={class:"grid grid-cols-3 sm:flex sm:flex-wrap gap-2"},Pt=["onClick"],At={class:"text-[10px] font-black uppercase"},Vt={class:"grid grid-cols-2 gap-4"},zt={class:"flex-grow flex flex-col min-w-0 h-full relative"},Et={class:"bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 p-2 sm:p-3 flex items-center justify-between flex-shrink-0 z-10 shadow-sm overflow-x-auto no-scrollbar"},Nt={class:"flex items-center gap-3 sm:gap-4 whitespace-nowrap"},Rt={class:"flex items-center gap-2"},Lt={class:"font-bold text-gray-800 dark:text-gray-200 text-xs uppercase tracking-widest"},Wt={class:"flex items-center gap-1"},Ut={class:"btn-icon text-gray-400 hover:text-blue-600 cursor-pointer p-1.5",title:"Upload"},Gt={key:0,class:"flex items-center gap-2 bg-blue-50 dark:bg-blue-900/30 px-2 py-1 rounded-xl border border-blue-100 dark:border-blue-800 transition-all ml-4 shadow-sm"},Bt={class:"text-[10px] font-black text-blue-800 dark:text-blue-200 uppercase"},Ot={class:"flex-grow overflow-y-auto p-4 custom-scrollbar bg-gray-50 dark:bg-gray-900"},qt={key:0,class:"mb-8 grid grid-cols-1 xs:grid-cols-2 md:grid-cols-3 xl:grid-cols-4 gap-4 animate-in fade-in zoom-in-95"},Ft={class:"text-[10px] font-black text-blue-600 uppercase"},Ht={class:"absolute bottom-0 left-0 right-0 h-1.5 bg-gray-100 dark:bg-gray-700"},Xt={key:1,class:"h-64 flex flex-col items-center justify-center opacity-40"},Zt={key:2,class:"h-full flex flex-col items-center justify-center text-gray-400 opacity-40"},Jt={key:3,class:"grid grid-cols-1 xs:grid-cols-2 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 2xl:grid-cols-6 gap-6 pb-20"},Kt=["onClick"],Qt={class:"text-white text-[10px] font-medium line-clamp-2 drop-shadow-lg mb-2 opacity-90"},Yt={class:"flex items-center justify-between pt-2 border-t border-white/20"},ea={class:"text-[9px] text-gray-400 font-black uppercase tracking-tighter"},ta={class:"flex gap-1.5"},aa=["onClick"],sa=["onClick"],oa=["onClick"],ia={__name:"ImageStudioView",setup(ce){const d=ze(),W=Ee(),b=Ne(),J=Re(),K=Le(),Q=We(),Y=Qe(),{images:h,isLoading:ue,isGenerating:U,prompt:p,negativePrompt:v,imageSize:$,nImages:D,seed:C,generationParams:pe}=E(d),{user:me}=E(J),{imageGenerationTasks:ge,imageGenerationTasksCount:G}=E(Q),{currentModelVisionSupport:na}=E(K);g(!0);const T=g("None"),f=g(!1),j=g(384),B=g(!1),P=g({"Art Style":!1,"Artist Style":!0,Enhancements:!0,Technical:!0}),ve=y(()=>({width:window.innerWidth>=1024?`${j.value}px`:void 0,minWidth:window.innerWidth>=1024?"320px":void 0}));function he(e){B.value=!0;const a=e.clientX,s=j.value,i=ie=>{B.value&&(j.value=Math.max(320,Math.min(s+(ie.clientX-a),700)))},o=()=>{B.value=!1,localStorage.setItem("lollms_image_studio_sidebar_width",j.value),window.removeEventListener("mousemove",i),window.removeEventListener("mouseup",o)};window.addEventListener("mousemove",i),window.addEventListener("mouseup",o)}const ee={"Art Style":[{name:"Photo",emoji:"📸",prompt:"photorealistic, RAW photo, 8k uhd, high detailed",negative:"cartoon, anime, illustration, blurred"},{name:"Cinematic",emoji:"🎬",prompt:"cinematic lighting, dramatic, epic scale, highly detailed",negative:"grainy, simple, low res"},{name:"Anime",emoji:"🎌",prompt:"anime style, vibrant colors, cell shaded, high quality 2d",negative:"3d, realistic, blurry"},{name:"Digital Art",emoji:"🎨",prompt:"digital art, sharp focus, intricate detail, artstation style",negative:"hand drawn, blurry"},{name:"Oil Paint",emoji:"🖼️",prompt:"oil painting, thick brushstrokes, textured canvas, classical art",negative:"photography, smooth, plastic"},{name:"Watercolor",emoji:"🖌️",prompt:"watercolor painting, soft edges, paper texture, elegant",negative:"dark, heavy, photography"},{name:"Cyberpunk",emoji:"🌃",prompt:"cyberpunk aesthetic, neon lights, futuristic city, rainy night",negative:"nature, pastoral"},{name:"Comic",emoji:"🗯️",prompt:"comic book style, bold lines, halftone dots, vibrant",negative:"photorealistic"}],"Artist Style":[{name:"Van Gogh",emoji:"🌻",prompt:"in the style of Vincent Van Gogh, post-impressionism, swirling colors",negative:""},{name:"Dali",emoji:"⏳",prompt:"in the style of Salvador Dali, surrealism, melting objects, dreamlike",negative:""},{name:"Ghibli",emoji:"🌳",prompt:"Studio Ghibli style, Hayao Miyazaki, lush environments, whimsical",negative:""},{name:"Picasso",emoji:"🧊",prompt:"cubism style, Pablo Picasso, abstract geometry, fragmented",negative:""},{name:"Shinkai",emoji:"✨",prompt:"Makoto Shinkai style, breathtaking sky, detailed light, emotional",negative:""}],Enhancements:[{name:"Hyperreal",emoji:"💎",prompt:"hyperrealistic, insanely detailed, micro texture, masterpiece",negative:"ugly, deformed"},{name:"HDR",emoji:"🌈",prompt:"high dynamic range, rich colors, deep contrast",negative:"flat, dull"},{name:"Retro 8-bit",emoji:"🕹️",prompt:"8-bit style, pixel art, low resolution game aesthetic",negative:"high definition, smooth"},{name:"Macro",emoji:"🔍",prompt:"macro photography, shallow depth of field, extreme close-up",negative:"wide angle"}],Thematic:[{name:"Horror",emoji:"🎃",prompt:"horror aesthetic, dark, eerie, macabre, halloween theme",negative:"bright, cheerful"},{name:"Minecraft",emoji:"🧱",prompt:"minecraft style, blocky, voxel art, cubic shapes",negative:"curved lines"},{name:"Steampunk",emoji:"⚙️",prompt:"steampunk aesthetic, copper, brass, Victorian industrial",negative:"modern"}]};ee["Art Style"];const be=[{name:"1:1",value:"1024x1024",style:{width:"16px",height:"16px"}},{name:"16:9",value:"1344x768",style:{width:"22px",height:"12px"}},{name:"9:16",value:"768x1344",style:{width:"12px",height:"22px"}},{name:"4:3",value:"1152x896",style:{width:"20px",height:"15px"}},{name:"3:2",value:"1216x832",style:{width:"21px",height:"14px"}}],I=g(!1),O=g(!1),q=y(()=>I.value||O.value),u=g([]),A=y(()=>u.value.length>0),te=y({get:()=>h.value.length>0&&u.value.length===h.value.length,set:e=>{u.value=e?h.value.map(a=>a.id):[]}}),V=g(!1),F=y(()=>{var e;return(e=me.value)==null?void 0:e.tti_binding_model_name});y(()=>{const e=W.availableTtiModels.find(s=>s.id===F.value);return e!=null&&e.binding_params?(A.value?e.binding_params.edit_parameters||[]:e.binding_params.generation_parameters||[]).filter(s=>!["prompt","negative_prompt","image","mask","width","height","n","seed","size"].includes(s.name)):[]});function fe(e){T.value===e.name?T.value="None":(T.value=e.name,e.name!=="None"&&(p.value=p.value.trim()?`${p.value}, ${e.prompt}`:e.prompt,e.negative&&(v.value=v.value.trim()?`${v.value}, ${e.negative}`:e.negative)))}ne(G,(e,a)=>{a>0&&e===0&&setTimeout(()=>d.fetchImages(),1e3)}),Ue(()=>{const e=localStorage.getItem("lollms_image_studio_sidebar_width");e&&(j.value=parseInt(e,10)),b.setPageTitle({title:"Image Studio",icon:Ge(le)}),d.fetchImages(),W.availableTtiModels.length===0&&W.fetchAvailableTtiModels(),window.addEventListener("paste",oe)}),Be(()=>{b.setPageTitle({title:""}),window.removeEventListener("paste",oe)});function xe(e){const a=u.value.indexOf(e);a>-1?u.value.splice(a,1):u.value.push(e)}function ae(e){return u.value.includes(e)}async function we(){if(!p.value.trim()||!F.value)return;f.value=!1;const e={prompt:p.value,negative_prompt:v.value,model:F.value,seed:C.value,...pe.value};if(A.value){const[a,s]=$.value.split("x").map(Number);await d.editImage({...e,image_ids:u.value,width:a,height:s})}else await d.generateImage({...e,size:$.value,n:D.value})}async function ye(e,a={}){var i;if(e!=="negative_prompt"&&!p.value.trim())return;(e==="prompt"||e==="both")&&(I.value=!0),(e==="negative_prompt"||e==="both")&&(O.value=!0);const s={prompt:p.value,negative_prompt:v.value,target:e,model:(i=J.user)==null?void 0:i.lollms_model_name,instructions:a.instructions||"",mode:a.mode||"description"};try{const o=await d.enhanceImagePrompt(s);o!=null&&o.id?ke(o.id,e):z(e)}catch{z(e)}}function ke(e,a){const s=ne(()=>Q.tasks.find(i=>i.id===e),i=>{if(i)if(i.status==="completed"){let o=typeof i.result=="string"?JSON.parse(i.result):i.result;o&&(o.prompt&&(d.prompt=o.prompt),o.negative_prompt&&(d.negativePrompt=o.negative_prompt)),z(a),s()}else["failed","cancelled"].includes(i.status)&&(z(a),s())},{deep:!0,immediate:!0})}function z(e){(e==="prompt"||e==="both")&&(I.value=!1),(e==="negative_prompt"||e==="both")&&(O.value=!1)}function se(e){b.openModal("enhancePrompt",{onConfirm:a=>ye(e,a)})}function _e(){Y.push("/image-studio/edit/new")}function Se(e){p.value=e.prompt,v.value=e.negative_prompt,C.value=e.seed}function Ce(e){Y.push(`/image-studio/edit/${e.id}`)}function je(e,a){b.openImageViewer({imageList:h.value.map(s=>({...s,src:`/api/image-studio/${s.id}/file`})),startIndex:a})}async function Ie(e){e.target.files.length&&await d.uploadImages(Array.from(e.target.files))}async function Me(){await b.showConfirmation({title:"Delete Images?"})&&(await Promise.all(u.value.map(e=>d.deleteImage(e))),u.value=[])}async function $e(){const{confirmed:e,value:a}=await b.showConfirmation({title:"Move to Discussion",inputType:"select",inputOptions:K.sortedDiscussions.map(s=>({text:s.title,value:s.id}))});e&&a&&(await Promise.all(u.value.map(s=>d.moveImageToDiscussion(s,a))),u.value=[])}function De(e){e.preventDefault(),V.value=!0}function Te(e){e.currentTarget.contains(e.relatedTarget)||(V.value=!1)}async function Pe(e){e.preventDefault(),V.value=!1;const a=Array.from(e.dataTransfer.files).filter(s=>s.type.startsWith("image/"));a.length&&await d.uploadImages(a)}async function oe(e){const a=(e.clipboardData||window.clipboardData).items,s=[];for(const i of a)if(i.kind==="file"&&i.type.startsWith("image/")){const o=i.getAsFile();o&&s.push(new File([o],`pasted_${Date.now()}.png`,{type:o.type}))}s.length&&(e.preventDefault(),await d.uploadImages(s))}function Ae(){b.openModal("cameraCapture")}function Ve(){d.fetchImages()}return(e,a)=>(n(),r(S,null,[(n(),H(qe,{to:"#global-header-actions-target"},[t("div",rt,[t("button",{onClick:we,class:"btn btn-primary whitespace-nowrap",disabled:c(U)||q.value},[c(U)?(n(),H(N,{key:0,class:"w-5 h-5 mr-1 sm:mr-2 animate-spin"})):x("",!0),t("span",ct,m(A.value?"Apply Edit":"Generate"),1),c(U)?x("",!0):(n(),H(X,{key:1,class:"w-5 h-5 xs:hidden"}))],8,dt),t("button",{onClick:a[0]||(a[0]=s=>f.value=!f.value),class:"lg:hidden btn btn-secondary p-2",title:"Toggle Settings"},[l(Oe,{class:"w-6 h-6"})])])])),t("div",{class:"h-full flex flex-col bg-gray-50 dark:bg-gray-900 overflow-hidden relative",onDragover:w(De,["prevent"]),onDragleave:w(Te,["prevent"]),onDrop:w(Pe,["prevent"])},[V.value?(n(),r("div",ut,a[10]||(a[10]=[t("p",{class:"text-xl sm:text-2xl font-bold text-blue-600 text-center"},"Drop images to upload",-1)]))):x("",!0),t("div",pt,[t("aside",{class:k(["absolute inset-y-0 left-0 z-30 bg-white dark:bg-gray-800 border-r dark:border-gray-700 transform transition-transform duration-300 ease-in-out lg:relative lg:translate-x-0 flex flex-col flex-shrink-0 shadow-lg",f.value?"translate-x-0":"-translate-x-full"]),style:Z(ve.value)},[t("div",{onMousedown:w(he,["prevent"]),class:"hidden lg:block absolute top-0 right-0 bottom-0 w-1.5 cursor-col-resize z-50 hover:bg-blue-500/50 transition-colors"},null,32),t("div",mt,[t("div",gt,[a[11]||(a[11]=t("span",{class:"font-black uppercase tracking-widest text-xs text-gray-500"},"Studio Tools",-1)),t("button",{onClick:a[1]||(a[1]=s=>f.value=!1),class:"p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded"},[l(Fe,{class:"w-6 h-6"})])]),t("div",vt,[t("div",null,[t("div",ht,[a[12]||(a[12]=t("label",{for:"prompt",class:"text-[10px] font-black uppercase text-gray-400"},"Positive Prompt",-1)),t("button",{onClick:a[2]||(a[2]=s=>se("prompt")),class:"text-blue-500 hover:text-blue-600 p-1 rounded",disabled:q.value},[l(X,{class:"w-4 h-4"})],8,bt)]),t("div",ft,[_(t("textarea",{id:"prompt","onUpdate:modelValue":a[3]||(a[3]=s=>L(p)?p.value=s:null),rows:"4",class:"input-field w-full resize-none !text-sm",disabled:I.value,placeholder:"What do you want to see?"},null,8,xt),[[R,c(p)]]),I.value?(n(),r("div",wt,[l(N,{class:"w-6 h-6 text-blue-500 animate-spin"})])):x("",!0)])]),(n(),r(S,null,M(ee,(s,i)=>t("div",{key:i,class:"space-y-2 border-t dark:border-gray-700 pt-3"},[t("div",{class:"flex items-center justify-between cursor-pointer group",onClick:o=>P.value[i]=!P.value[i]},[t("span",kt,m(i),1),l(st,{class:k(["w-3 h-3 text-gray-400 transition-transform",{"rotate-180":P.value[i]}])},null,8,["class"])],8,yt),_(t("div",_t,[(n(!0),r(S,null,M(s,o=>(n(),r("button",{key:o.name,onClick:ie=>fe(o),class:k(["flex flex-col items-center p-1.5 rounded-lg border dark:border-gray-700 transition-all hover:border-blue-500 hover:bg-blue-50 dark:hover:bg-blue-900/20",T.value===o.name?"border-blue-500 bg-blue-50 dark:bg-blue-900/30 ring-1 ring-blue-500":"bg-gray-50 dark:bg-gray-900/30"]),title:o.name},[t("span",Ct,m(o.emoji),1),t("span",jt,m(o.name),1)],10,St))),128))],512),[[Ye,!P.value[i]]])])),64)),t("div",null,[t("div",It,[a[13]||(a[13]=t("label",{for:"negative-prompt",class:"text-[10px] font-black uppercase text-gray-400"},"Negative Prompt",-1)),t("button",{onClick:a[4]||(a[4]=s=>se("negative_prompt")),class:"text-red-500 hover:text-red-600 p-1",disabled:q.value},[l(X,{class:"w-4 h-4"})],8,Mt)]),_(t("textarea",{id:"negative-prompt","onUpdate:modelValue":a[5]||(a[5]=s=>L(v)?v.value=s:null),rows:"2",class:"input-field w-full resize-none !text-xs opacity-80",placeholder:"Avoid..."},null,512),[[R,c(v)]])])]),t("div",$t,[t("div",Dt,[a[14]||(a[14]=t("label",{class:"text-[10px] font-black text-gray-400 uppercase tracking-widest"},"Aspect Ratio",-1)),t("div",Tt,[(n(),r(S,null,M(be,s=>t("button",{key:s.name,onClick:i=>$.value=s.value,class:k(["p-2 rounded-xl border dark:border-gray-700 flex flex-col items-center transition-all hover:bg-gray-100 dark:hover:bg-gray-700 flex-1 min-w-[60px]",c($)===s.value?"border-blue-500 bg-blue-50 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400":"bg-gray-50 dark:bg-gray-900/30 text-gray-500"])},[t("div",{class:"border-2 border-current rounded mb-1",style:Z(s.style)},null,4),t("span",At,m(s.name),1)],10,Pt)),64))])]),t("div",Vt,[t("div",null,[a[15]||(a[15]=t("label",{class:"label text-[10px] font-bold text-gray-400 uppercase"},"Count",-1)),_(t("input",{type:"number","onUpdate:modelValue":a[6]||(a[6]=s=>L(D)?D.value=s:null),min:"1",max:"10",class:"input-field mt-1 !text-xs"},null,512),[[R,c(D),void 0,{number:!0}]])]),t("div",null,[a[16]||(a[16]=t("label",{class:"label text-[10px] font-bold text-gray-400 uppercase"},"Seed",-1)),_(t("input",{"onUpdate:modelValue":a[7]||(a[7]=s=>L(C)?C.value=s:null),type:"number",class:"input-field mt-1 !text-xs font-mono",placeholder:"-1"},null,512),[[R,c(C),void 0,{number:!0}]])])])])])],6),f.value?(n(),r("div",{key:0,onClick:a[8]||(a[8]=s=>f.value=!1),class:"absolute inset-0 bg-black/40 z-20 lg:hidden backdrop-blur-sm"})):x("",!0),t("main",zt,[t("div",Et,[t("div",Nt,[t("div",Rt,[_(t("input",{type:"checkbox","onUpdate:modelValue":a[9]||(a[9]=s=>te.value=s),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 cursor-pointer"},null,512),[[He,te.value]]),t("h2",Lt,"Library ("+m(c(h).length)+")",1)]),a[17]||(a[17]=t("div",{class:"h-6 w-px bg-gray-300 dark:bg-gray-600"},null,-1)),t("div",Wt,[t("button",{onClick:Ve,class:"btn-icon text-gray-400 hover:text-blue-600 p-1.5",title:"Refresh"},[l(re,{class:"w-5 h-5"})]),t("label",Ut,[l(Xe,{class:"w-5 h-5"}),t("input",{type:"file",onChange:Ie,class:"hidden",accept:"image/*",multiple:""},null,32)]),t("button",{onClick:Ae,class:"btn-icon text-gray-400 hover:text-blue-600 p-1.5",title:"Camera"},[l(lt,{class:"w-5 h-5"})]),t("button",{onClick:_e,class:"btn-icon text-gray-400 hover:text-blue-600 p-1.5",title:"New Canvas"},[l(Ze,{class:"w-5 h-5"})])])]),A.value?(n(),r("div",Gt,[t("span",Bt,m(u.value.length)+" selected",1),t("button",{onClick:$e,class:"text-blue-600 dark:text-blue-400 p-1",title:"Send to Chat"},[l(Je,{class:"w-5 h-5"})]),t("button",{onClick:Me,class:"text-red-500 p-1",title:"Delete"},[l(Ke,{class:"w-5 h-5"})])])):x("",!0)]),t("div",Ot,[c(G)>0?(n(),r("div",qt,[(n(!0),r(S,null,M(c(ge),s=>(n(),r("div",{key:s.id,class:"relative aspect-square rounded-[2rem] bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 shadow-sm flex flex-col items-center justify-center p-6 overflow-hidden"},[a[18]||(a[18]=t("div",{class:"absolute inset-0 bg-gradient-to-br from-blue-500/5 to-purple-500/5 animate-pulse"},null,-1)),l(N,{class:"w-8 h-8 text-blue-500 mb-4 animate-spin"}),t("p",Ft,m(s.progress)+"% Complete",1),t("div",Ht,[t("div",{class:"h-full bg-gradient-to-r from-blue-500 to-indigo-600",style:Z({width:s.progress+"%"})},null,4)])]))),128))])):x("",!0),c(ue)&&c(h).length===0?(n(),r("div",Xt,[l(N,{class:"w-12 h-12 mb-4 text-blue-500 animate-spin"}),a[19]||(a[19]=t("p",{class:"text-xs font-black uppercase tracking-widest"},"Gathering images...",-1))])):c(h).length===0&&c(G)===0?(n(),r("div",Zt,[l(le,{class:"w-20 h-20 mb-6"}),a[20]||(a[20]=t("p",{class:"text-xl font-black uppercase tracking-widest"},"No Creations Yet",-1))])):(n(),r("div",Jt,[(n(!0),r(S,null,M(c(h),(s,i)=>(n(),r("div",{key:s.id,onClick:o=>xe(s.id),class:k(["relative aspect-square rounded-[1.5rem] overflow-hidden group cursor-pointer border-2 transition-all duration-300 bg-gray-200 dark:bg-gray-800",ae(s.id)?"border-blue-500 ring-4 ring-blue-500/10 scale-[0.98]":"border-transparent hover:border-gray-300 dark:hover:border-gray-700 hover:shadow-xl"])},[l(et,{src:`/api/image-studio/${s.id}/file`,class:"w-full h-full object-cover transition-transform duration-700 sm:group-hover:scale-110"},null,8,["src"]),t("div",{class:k(["absolute inset-0 bg-gradient-to-t from-black/90 via-black/20 to-transparent flex flex-col justify-end p-3 transition-opacity duration-300 lg:opacity-0 lg:group-hover:opacity-100",{"!opacity-100":ae(s.id)}])},[t("p",Qt,m(s.prompt||"No prompt"),1),t("div",Yt,[t("span",ea,m(s.width)+"x"+m(s.height),1),t("div",ta,[t("button",{onClick:w(o=>Se(s),["stop"]),class:"p-2 bg-white/10 hover:bg-blue-500 rounded-lg text-white backdrop-blur-md transition-all active:scale-90"},[l(re,{class:"w-4 h-4"})],8,aa),t("button",{onClick:w(o=>Ce(s),["stop"]),class:"p-2 bg-white/10 hover:bg-purple-500 rounded-lg text-white backdrop-blur-md transition-all active:scale-90"},[l(tt,{class:"w-4 h-4"})],8,sa),t("button",{onClick:w(o=>je(s,i),["stop"]),class:"p-2 bg-white/10 hover:bg-white/30 rounded-lg text-white backdrop-blur-md transition-all active:scale-90"},[l(at,{class:"w-4 h-4"})],8,oa)])])],2)],10,Kt))),128))]))])])])],32)],64))}},da=de(ia,[["__scopeId","data-v-f72e984c"]]);export{da as default};
frontend/dist/ui_assets/ImageStudioView-wN5Xooqt.js+0 −1 removed@@ -1 +0,0 @@ -import{q as de,d as r,l as n,e as t,av as ze,P as Ee,K as Ne,u as Re,N as Le,a8 as We,Q as E,s as g,c as y,w as ne,o as Ge,cd as Ue,ai as le,X as Be,n as H,j as c,h as x,an as N,t as m,aq as X,f as l,cW as Oe,a6 as qe,a2 as Z,p as k,H as w,ap as Fe,z as _,L as R,ak as L,F as S,i as M,V as He,Y as re,$ as Xe,y as Ze,cS as Ye,ah as Je,k as Ke,B as Qe,a1 as et,Z as tt,cX as at}from"./index-CEXks4lv.js";import{_ as st}from"./IconChevronUp-BOxnjcTx.js";const ot={},it={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function nt(ce,d){return n(),r("svg",it,d[0]||(d[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6.827 6.175A2.31 2.31 0 0 1 5.186 7.23c-.38.054-.757.112-1.134.175C2.999 7.58 2.25 8.507 2.25 9.574V18a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9.574c0-1.067-.75-1.994-1.802-2.169a47.865 47.865 0 0 0-1.134-.175 2.31 2.31 0 0 1-1.64-1.055l-.822-1.316a2.192 2.192 0 0 0-1.736-1.039 48.776 48.776 0 0 0-5.232 0 2.192 2.192 0 0 0-1.736 1.039l-.821 1.316Z"},null,-1),t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M16.5 12.75a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0ZM18.75 10.5h.008v.008h-.008V10.5Z"},null,-1)]))}const lt=de(ot,[["render",nt]]),rt={class:"flex items-center gap-2"},dt=["disabled"],ct={class:"hidden xs:inline"},ut={key:0,class:"absolute inset-0 bg-blue-500/20 border-4 border-dashed border-blue-500 rounded-lg z-50 flex items-center justify-center m-4 pointer-events-none"},pt={class:"flex-grow min-h-0 flex relative overflow-hidden"},mt={class:"flex-grow p-4 space-y-6 overflow-y-auto custom-scrollbar"},gt={class:"flex items-center justify-between lg:hidden mb-4 border-b dark:border-gray-700 pb-2"},vt={class:"space-y-4"},ht={class:"flex justify-between items-center mb-1"},bt=["disabled"],ft={class:"relative"},xt=["disabled"],wt={key:0,class:"absolute inset-0 flex items-center justify-center bg-white/40 dark:bg-black/40 backdrop-blur-sm rounded"},yt=["onClick"],kt={class:"text-[10px] font-black text-gray-400 uppercase tracking-widest"},_t={class:"grid grid-cols-3 gap-1.5 animate-in fade-in slide-in-from-top-1"},St=["onClick","title"],Ct={class:"text-lg mb-0.5"},jt={class:"text-[8px] font-bold truncate w-full text-center leading-tight uppercase"},It={class:"flex justify-between items-center mb-1"},Mt=["disabled"],$t={class:"pt-4 border-t dark:border-gray-700 space-y-4"},Dt={class:"space-y-2"},Tt={class:"grid grid-cols-3 sm:flex sm:flex-wrap gap-2"},Pt=["onClick"],At={class:"text-[10px] font-black uppercase"},Vt={class:"grid grid-cols-2 gap-4"},zt={class:"flex-grow flex flex-col min-w-0 h-full relative"},Et={class:"bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 p-2 sm:p-3 flex items-center justify-between flex-shrink-0 z-10 shadow-sm overflow-x-auto no-scrollbar"},Nt={class:"flex items-center gap-3 sm:gap-4 whitespace-nowrap"},Rt={class:"flex items-center gap-2"},Lt={class:"font-bold text-gray-800 dark:text-gray-200 text-xs uppercase tracking-widest"},Wt={class:"flex items-center gap-1"},Gt={class:"btn-icon text-gray-400 hover:text-blue-600 cursor-pointer p-1.5",title:"Upload"},Ut={key:0,class:"flex items-center gap-2 bg-blue-50 dark:bg-blue-900/30 px-2 py-1 rounded-xl border border-blue-100 dark:border-blue-800 transition-all ml-4 shadow-sm"},Bt={class:"text-[10px] font-black text-blue-800 dark:text-blue-200 uppercase"},Ot={class:"flex-grow overflow-y-auto p-4 custom-scrollbar bg-gray-50 dark:bg-gray-900"},qt={key:0,class:"mb-8 grid grid-cols-1 xs:grid-cols-2 md:grid-cols-3 xl:grid-cols-4 gap-4 animate-in fade-in zoom-in-95"},Ft={class:"text-[10px] font-black text-blue-600 uppercase"},Ht={class:"absolute bottom-0 left-0 right-0 h-1.5 bg-gray-100 dark:bg-gray-700"},Xt={key:1,class:"h-64 flex flex-col items-center justify-center opacity-40"},Zt={key:2,class:"h-full flex flex-col items-center justify-center text-gray-400 opacity-40"},Yt={key:3,class:"grid grid-cols-1 xs:grid-cols-2 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 2xl:grid-cols-6 gap-6 pb-20"},Jt=["onClick"],Kt={class:"text-white text-[10px] font-medium line-clamp-2 drop-shadow-lg mb-2 opacity-90"},Qt={class:"flex items-center justify-between pt-2 border-t border-white/20"},ea={class:"text-[9px] text-gray-400 font-black uppercase tracking-tighter"},ta={class:"flex gap-1.5"},aa=["onClick"],sa=["onClick"],oa=["onClick"],ia={__name:"ImageStudioView",setup(ce){const d=ze(),W=Ee(),b=Ne(),Y=Re(),J=Le(),K=We(),Q=Ke(),{images:h,isLoading:ue,isGenerating:G,prompt:p,negativePrompt:v,imageSize:$,nImages:D,seed:C,generationParams:pe}=E(d),{user:me}=E(Y),{imageGenerationTasks:ge,imageGenerationTasksCount:U}=E(K),{currentModelVisionSupport:na}=E(J);g(!0);const T=g("None"),f=g(!1),j=g(384),B=g(!1),P=g({"Art Style":!1,"Artist Style":!0,Enhancements:!0,Technical:!0}),ve=y(()=>({width:window.innerWidth>=1024?`${j.value}px`:void 0,minWidth:window.innerWidth>=1024?"320px":void 0}));function he(e){B.value=!0;const a=e.clientX,s=j.value,i=ie=>{B.value&&(j.value=Math.max(320,Math.min(s+(ie.clientX-a),700)))},o=()=>{B.value=!1,localStorage.setItem("lollms_image_studio_sidebar_width",j.value),window.removeEventListener("mousemove",i),window.removeEventListener("mouseup",o)};window.addEventListener("mousemove",i),window.addEventListener("mouseup",o)}const ee={"Art Style":[{name:"Photo",emoji:"📸",prompt:"photorealistic, RAW photo, 8k uhd, high detailed",negative:"cartoon, anime, illustration, blurred"},{name:"Cinematic",emoji:"🎬",prompt:"cinematic lighting, dramatic, epic scale, highly detailed",negative:"grainy, simple, low res"},{name:"Anime",emoji:"🎌",prompt:"anime style, vibrant colors, cell shaded, high quality 2d",negative:"3d, realistic, blurry"},{name:"Digital Art",emoji:"🎨",prompt:"digital art, sharp focus, intricate detail, artstation style",negative:"hand drawn, blurry"},{name:"Oil Paint",emoji:"🖼️",prompt:"oil painting, thick brushstrokes, textured canvas, classical art",negative:"photography, smooth, plastic"},{name:"Watercolor",emoji:"🖌️",prompt:"watercolor painting, soft edges, paper texture, elegant",negative:"dark, heavy, photography"},{name:"Cyberpunk",emoji:"🌃",prompt:"cyberpunk aesthetic, neon lights, futuristic city, rainy night",negative:"nature, pastoral"},{name:"Comic",emoji:"🗯️",prompt:"comic book style, bold lines, halftone dots, vibrant",negative:"photorealistic"}],"Artist Style":[{name:"Van Gogh",emoji:"🌻",prompt:"in the style of Vincent Van Gogh, post-impressionism, swirling colors",negative:""},{name:"Dali",emoji:"⏳",prompt:"in the style of Salvador Dali, surrealism, melting objects, dreamlike",negative:""},{name:"Ghibli",emoji:"🌳",prompt:"Studio Ghibli style, Hayao Miyazaki, lush environments, whimsical",negative:""},{name:"Picasso",emoji:"🧊",prompt:"cubism style, Pablo Picasso, abstract geometry, fragmented",negative:""},{name:"Shinkai",emoji:"✨",prompt:"Makoto Shinkai style, breathtaking sky, detailed light, emotional",negative:""}],Enhancements:[{name:"Hyperreal",emoji:"💎",prompt:"hyperrealistic, insanely detailed, micro texture, masterpiece",negative:"ugly, deformed"},{name:"HDR",emoji:"🌈",prompt:"high dynamic range, rich colors, deep contrast",negative:"flat, dull"},{name:"Retro 8-bit",emoji:"🕹️",prompt:"8-bit style, pixel art, low resolution game aesthetic",negative:"high definition, smooth"},{name:"Macro",emoji:"🔍",prompt:"macro photography, shallow depth of field, extreme close-up",negative:"wide angle"}],Thematic:[{name:"Horror",emoji:"🎃",prompt:"horror aesthetic, dark, eerie, macabre, halloween theme",negative:"bright, cheerful"},{name:"Minecraft",emoji:"🧱",prompt:"minecraft style, blocky, voxel art, cubic shapes",negative:"curved lines"},{name:"Steampunk",emoji:"⚙️",prompt:"steampunk aesthetic, copper, brass, Victorian industrial",negative:"modern"}]};ee["Art Style"];const be=[{name:"1:1",value:"1024x1024",style:{width:"16px",height:"16px"}},{name:"16:9",value:"1344x768",style:{width:"22px",height:"12px"}},{name:"9:16",value:"768x1344",style:{width:"12px",height:"22px"}},{name:"4:3",value:"1152x896",style:{width:"20px",height:"15px"}},{name:"3:2",value:"1216x832",style:{width:"21px",height:"14px"}}],I=g(!1),O=g(!1),q=y(()=>I.value||O.value),u=g([]),A=y(()=>u.value.length>0),te=y({get:()=>h.value.length>0&&u.value.length===h.value.length,set:e=>{u.value=e?h.value.map(a=>a.id):[]}}),V=g(!1),F=y(()=>{var e;return(e=me.value)==null?void 0:e.tti_binding_model_name});y(()=>{const e=W.availableTtiModels.find(s=>s.id===F.value);return e!=null&&e.binding_params?(A.value?e.binding_params.edit_parameters||[]:e.binding_params.generation_parameters||[]).filter(s=>!["prompt","negative_prompt","image","mask","width","height","n","seed","size"].includes(s.name)):[]});function fe(e){T.value===e.name?T.value="None":(T.value=e.name,e.name!=="None"&&(p.value=p.value.trim()?`${p.value}, ${e.prompt}`:e.prompt,e.negative&&(v.value=v.value.trim()?`${v.value}, ${e.negative}`:e.negative)))}ne(U,(e,a)=>{a>0&&e===0&&setTimeout(()=>d.fetchImages(),1e3)}),Ge(()=>{const e=localStorage.getItem("lollms_image_studio_sidebar_width");e&&(j.value=parseInt(e,10)),b.setPageTitle({title:"Image Studio",icon:Ue(le)}),d.fetchImages(),W.availableTtiModels.length===0&&W.fetchAvailableTtiModels(),window.addEventListener("paste",oe)}),Be(()=>{b.setPageTitle({title:""}),window.removeEventListener("paste",oe)});function xe(e){const a=u.value.indexOf(e);a>-1?u.value.splice(a,1):u.value.push(e)}function ae(e){return u.value.includes(e)}async function we(){if(!p.value.trim()||!F.value)return;f.value=!1;const e={prompt:p.value,negative_prompt:v.value,model:F.value,seed:C.value,...pe.value};if(A.value){const[a,s]=$.value.split("x").map(Number);await d.editImage({...e,image_ids:u.value,width:a,height:s})}else await d.generateImage({...e,size:$.value,n:D.value})}async function ye(e,a={}){var i;if(e!=="negative_prompt"&&!p.value.trim())return;(e==="prompt"||e==="both")&&(I.value=!0),(e==="negative_prompt"||e==="both")&&(O.value=!0);const s={prompt:p.value,negative_prompt:v.value,target:e,model:(i=Y.user)==null?void 0:i.lollms_model_name,instructions:a.instructions||"",mode:a.mode||"description"};try{const o=await d.enhanceImagePrompt(s);o!=null&&o.id?ke(o.id,e):z(e)}catch{z(e)}}function ke(e,a){const s=ne(()=>K.tasks.find(i=>i.id===e),i=>{if(i)if(i.status==="completed"){let o=typeof i.result=="string"?JSON.parse(i.result):i.result;o&&(o.prompt&&(d.prompt=o.prompt),o.negative_prompt&&(d.negativePrompt=o.negative_prompt)),z(a),s()}else["failed","cancelled"].includes(i.status)&&(z(a),s())},{deep:!0,immediate:!0})}function z(e){(e==="prompt"||e==="both")&&(I.value=!1),(e==="negative_prompt"||e==="both")&&(O.value=!1)}function se(e){b.openModal("enhancePrompt",{onConfirm:a=>ye(e,a)})}function _e(){Q.push("/image-studio/edit/new")}function Se(e){p.value=e.prompt,v.value=e.negative_prompt,C.value=e.seed}function Ce(e){Q.push(`/image-studio/edit/${e.id}`)}function je(e,a){b.openImageViewer({imageList:h.value.map(s=>({...s,src:`/api/image-studio/${s.id}/file`})),startIndex:a})}async function Ie(e){e.target.files.length&&await d.uploadImages(Array.from(e.target.files))}async function Me(){await b.showConfirmation({title:"Delete Images?"})&&(await Promise.all(u.value.map(e=>d.deleteImage(e))),u.value=[])}async function $e(){const{confirmed:e,value:a}=await b.showConfirmation({title:"Move to Discussion",inputType:"select",inputOptions:J.sortedDiscussions.map(s=>({text:s.title,value:s.id}))});e&&a&&(await Promise.all(u.value.map(s=>d.moveImageToDiscussion(s,a))),u.value=[])}function De(e){e.preventDefault(),V.value=!0}function Te(e){e.currentTarget.contains(e.relatedTarget)||(V.value=!1)}async function Pe(e){e.preventDefault(),V.value=!1;const a=Array.from(e.dataTransfer.files).filter(s=>s.type.startsWith("image/"));a.length&&await d.uploadImages(a)}async function oe(e){const a=(e.clipboardData||window.clipboardData).items,s=[];for(const i of a)if(i.kind==="file"&&i.type.startsWith("image/")){const o=i.getAsFile();o&&s.push(new File([o],`pasted_${Date.now()}.png`,{type:o.type}))}s.length&&(e.preventDefault(),await d.uploadImages(s))}function Ae(){b.openModal("cameraCapture")}function Ve(){d.fetchImages()}return(e,a)=>(n(),r(S,null,[(n(),H(qe,{to:"#global-header-actions-target"},[t("div",rt,[t("button",{onClick:we,class:"btn btn-primary whitespace-nowrap",disabled:c(G)||q.value},[c(G)?(n(),H(N,{key:0,class:"w-5 h-5 mr-1 sm:mr-2 animate-spin"})):x("",!0),t("span",ct,m(A.value?"Apply Edit":"Generate"),1),c(G)?x("",!0):(n(),H(X,{key:1,class:"w-5 h-5 xs:hidden"}))],8,dt),t("button",{onClick:a[0]||(a[0]=s=>f.value=!f.value),class:"lg:hidden btn btn-secondary p-2",title:"Toggle Settings"},[l(Oe,{class:"w-6 h-6"})])])])),t("div",{class:"h-full flex flex-col bg-gray-50 dark:bg-gray-900 overflow-hidden relative",onDragover:w(De,["prevent"]),onDragleave:w(Te,["prevent"]),onDrop:w(Pe,["prevent"])},[V.value?(n(),r("div",ut,a[10]||(a[10]=[t("p",{class:"text-xl sm:text-2xl font-bold text-blue-600 text-center"},"Drop images to upload",-1)]))):x("",!0),t("div",pt,[t("aside",{class:k(["absolute inset-y-0 left-0 z-30 bg-white dark:bg-gray-800 border-r dark:border-gray-700 transform transition-transform duration-300 ease-in-out lg:relative lg:translate-x-0 flex flex-col flex-shrink-0 shadow-lg",f.value?"translate-x-0":"-translate-x-full"]),style:Z(ve.value)},[t("div",{onMousedown:w(he,["prevent"]),class:"hidden lg:block absolute top-0 right-0 bottom-0 w-1.5 cursor-col-resize z-50 hover:bg-blue-500/50 transition-colors"},null,32),t("div",mt,[t("div",gt,[a[11]||(a[11]=t("span",{class:"font-black uppercase tracking-widest text-xs text-gray-500"},"Studio Tools",-1)),t("button",{onClick:a[1]||(a[1]=s=>f.value=!1),class:"p-1 hover:bg-gray-100 dark:hover:bg-gray-700 rounded"},[l(Fe,{class:"w-6 h-6"})])]),t("div",vt,[t("div",null,[t("div",ht,[a[12]||(a[12]=t("label",{for:"prompt",class:"text-[10px] font-black uppercase text-gray-400"},"Positive Prompt",-1)),t("button",{onClick:a[2]||(a[2]=s=>se("prompt")),class:"text-blue-500 hover:text-blue-600 p-1 rounded",disabled:q.value},[l(X,{class:"w-4 h-4"})],8,bt)]),t("div",ft,[_(t("textarea",{id:"prompt","onUpdate:modelValue":a[3]||(a[3]=s=>L(p)?p.value=s:null),rows:"4",class:"input-field w-full resize-none !text-sm",disabled:I.value,placeholder:"What do you want to see?"},null,8,xt),[[R,c(p)]]),I.value?(n(),r("div",wt,[l(N,{class:"w-6 h-6 text-blue-500 animate-spin"})])):x("",!0)])]),(n(),r(S,null,M(ee,(s,i)=>t("div",{key:i,class:"space-y-2 border-t dark:border-gray-700 pt-3"},[t("div",{class:"flex items-center justify-between cursor-pointer group",onClick:o=>P.value[i]=!P.value[i]},[t("span",kt,m(i),1),l(st,{class:k(["w-3 h-3 text-gray-400 transition-transform",{"rotate-180":P.value[i]}])},null,8,["class"])],8,yt),_(t("div",_t,[(n(!0),r(S,null,M(s,o=>(n(),r("button",{key:o.name,onClick:ie=>fe(o),class:k(["flex flex-col items-center p-1.5 rounded-lg border dark:border-gray-700 transition-all hover:border-blue-500 hover:bg-blue-50 dark:hover:bg-blue-900/20",T.value===o.name?"border-blue-500 bg-blue-50 dark:bg-blue-900/30 ring-1 ring-blue-500":"bg-gray-50 dark:bg-gray-900/30"]),title:o.name},[t("span",Ct,m(o.emoji),1),t("span",jt,m(o.name),1)],10,St))),128))],512),[[Qe,!P.value[i]]])])),64)),t("div",null,[t("div",It,[a[13]||(a[13]=t("label",{for:"negative-prompt",class:"text-[10px] font-black uppercase text-gray-400"},"Negative Prompt",-1)),t("button",{onClick:a[4]||(a[4]=s=>se("negative_prompt")),class:"text-red-500 hover:text-red-600 p-1",disabled:q.value},[l(X,{class:"w-4 h-4"})],8,Mt)]),_(t("textarea",{id:"negative-prompt","onUpdate:modelValue":a[5]||(a[5]=s=>L(v)?v.value=s:null),rows:"2",class:"input-field w-full resize-none !text-xs opacity-80",placeholder:"Avoid..."},null,512),[[R,c(v)]])])]),t("div",$t,[t("div",Dt,[a[14]||(a[14]=t("label",{class:"text-[10px] font-black text-gray-400 uppercase tracking-widest"},"Aspect Ratio",-1)),t("div",Tt,[(n(),r(S,null,M(be,s=>t("button",{key:s.name,onClick:i=>$.value=s.value,class:k(["p-2 rounded-xl border dark:border-gray-700 flex flex-col items-center transition-all hover:bg-gray-100 dark:hover:bg-gray-700 flex-1 min-w-[60px]",c($)===s.value?"border-blue-500 bg-blue-50 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400":"bg-gray-50 dark:bg-gray-900/30 text-gray-500"])},[t("div",{class:"border-2 border-current rounded mb-1",style:Z(s.style)},null,4),t("span",At,m(s.name),1)],10,Pt)),64))])]),t("div",Vt,[t("div",null,[a[15]||(a[15]=t("label",{class:"label text-[10px] font-bold text-gray-400 uppercase"},"Count",-1)),_(t("input",{type:"number","onUpdate:modelValue":a[6]||(a[6]=s=>L(D)?D.value=s:null),min:"1",max:"10",class:"input-field mt-1 !text-xs"},null,512),[[R,c(D),void 0,{number:!0}]])]),t("div",null,[a[16]||(a[16]=t("label",{class:"label text-[10px] font-bold text-gray-400 uppercase"},"Seed",-1)),_(t("input",{"onUpdate:modelValue":a[7]||(a[7]=s=>L(C)?C.value=s:null),type:"number",class:"input-field mt-1 !text-xs font-mono",placeholder:"-1"},null,512),[[R,c(C),void 0,{number:!0}]])])])])])],6),f.value?(n(),r("div",{key:0,onClick:a[8]||(a[8]=s=>f.value=!1),class:"absolute inset-0 bg-black/40 z-20 lg:hidden backdrop-blur-sm"})):x("",!0),t("main",zt,[t("div",Et,[t("div",Nt,[t("div",Rt,[_(t("input",{type:"checkbox","onUpdate:modelValue":a[9]||(a[9]=s=>te.value=s),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 cursor-pointer"},null,512),[[He,te.value]]),t("h2",Lt,"Library ("+m(c(h).length)+")",1)]),a[17]||(a[17]=t("div",{class:"h-6 w-px bg-gray-300 dark:bg-gray-600"},null,-1)),t("div",Wt,[t("button",{onClick:Ve,class:"btn-icon text-gray-400 hover:text-blue-600 p-1.5",title:"Refresh"},[l(re,{class:"w-5 h-5"})]),t("label",Gt,[l(Xe,{class:"w-5 h-5"}),t("input",{type:"file",onChange:Ie,class:"hidden",accept:"image/*",multiple:""},null,32)]),t("button",{onClick:Ae,class:"btn-icon text-gray-400 hover:text-blue-600 p-1.5",title:"Camera"},[l(lt,{class:"w-5 h-5"})]),t("button",{onClick:_e,class:"btn-icon text-gray-400 hover:text-blue-600 p-1.5",title:"New Canvas"},[l(Ze,{class:"w-5 h-5"})])])]),A.value?(n(),r("div",Ut,[t("span",Bt,m(u.value.length)+" selected",1),t("button",{onClick:$e,class:"text-blue-600 dark:text-blue-400 p-1",title:"Send to Chat"},[l(Ye,{class:"w-5 h-5"})]),t("button",{onClick:Me,class:"text-red-500 p-1",title:"Delete"},[l(Je,{class:"w-5 h-5"})])])):x("",!0)]),t("div",Ot,[c(U)>0?(n(),r("div",qt,[(n(!0),r(S,null,M(c(ge),s=>(n(),r("div",{key:s.id,class:"relative aspect-square rounded-[2rem] bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 shadow-sm flex flex-col items-center justify-center p-6 overflow-hidden"},[a[18]||(a[18]=t("div",{class:"absolute inset-0 bg-gradient-to-br from-blue-500/5 to-purple-500/5 animate-pulse"},null,-1)),l(N,{class:"w-8 h-8 text-blue-500 mb-4 animate-spin"}),t("p",Ft,m(s.progress)+"% Complete",1),t("div",Ht,[t("div",{class:"h-full bg-gradient-to-r from-blue-500 to-indigo-600",style:Z({width:s.progress+"%"})},null,4)])]))),128))])):x("",!0),c(ue)&&c(h).length===0?(n(),r("div",Xt,[l(N,{class:"w-12 h-12 mb-4 text-blue-500 animate-spin"}),a[19]||(a[19]=t("p",{class:"text-xs font-black uppercase tracking-widest"},"Gathering images...",-1))])):c(h).length===0&&c(U)===0?(n(),r("div",Zt,[l(le,{class:"w-20 h-20 mb-6"}),a[20]||(a[20]=t("p",{class:"text-xl font-black uppercase tracking-widest"},"No Creations Yet",-1))])):(n(),r("div",Yt,[(n(!0),r(S,null,M(c(h),(s,i)=>(n(),r("div",{key:s.id,onClick:o=>xe(s.id),class:k(["relative aspect-square rounded-[1.5rem] overflow-hidden group cursor-pointer border-2 transition-all duration-300 bg-gray-200 dark:bg-gray-800",ae(s.id)?"border-blue-500 ring-4 ring-blue-500/10 scale-[0.98]":"border-transparent hover:border-gray-300 dark:hover:border-gray-700 hover:shadow-xl"])},[l(et,{src:`/api/image-studio/${s.id}/file`,class:"w-full h-full object-cover transition-transform duration-700 sm:group-hover:scale-110"},null,8,["src"]),t("div",{class:k(["absolute inset-0 bg-gradient-to-t from-black/90 via-black/20 to-transparent flex flex-col justify-end p-3 transition-opacity duration-300 lg:opacity-0 lg:group-hover:opacity-100",{"!opacity-100":ae(s.id)}])},[t("p",Kt,m(s.prompt||"No prompt"),1),t("div",Qt,[t("span",ea,m(s.width)+"x"+m(s.height),1),t("div",ta,[t("button",{onClick:w(o=>Se(s),["stop"]),class:"p-2 bg-white/10 hover:bg-blue-500 rounded-lg text-white backdrop-blur-md transition-all active:scale-90"},[l(re,{class:"w-4 h-4"})],8,aa),t("button",{onClick:w(o=>Ce(s),["stop"]),class:"p-2 bg-white/10 hover:bg-purple-500 rounded-lg text-white backdrop-blur-md transition-all active:scale-90"},[l(tt,{class:"w-4 h-4"})],8,sa),t("button",{onClick:w(o=>je(s,i),["stop"]),class:"p-2 bg-white/10 hover:bg-white/30 rounded-lg text-white backdrop-blur-md transition-all active:scale-90"},[l(at,{class:"w-4 h-4"})],8,oa)])])],2)],10,Jt))),128))]))])])])],32)],64))}},da=de(ia,[["__scopeId","data-v-f72e984c"]]);export{da as default};
frontend/dist/ui_assets/ImageViewerModal-C0fxOh5G.js+1 −0 added@@ -0,0 +1 @@ +import{K as G,k as J,s as u,c as p,w as Q,o as Z,V as ee,n as j,l as s,f as h,g as te,d,h as b,j as ae,H as L,e as t,t as B,a0 as se,a1 as le,W as oe,a2 as ne,a3 as N,a4 as W,a5 as re,a6 as ce,F as ie,i as ue,p as de,a7 as ve,a8 as fe,E as he}from"./index-BBRgbnZQ.js";const me={class:"flex-shrink-0 flex items-center justify-between p-4 text-white"},pe={class:"min-w-0"},we={class:"text-sm font-semibold truncate"},ge={key:0,class:"text-xs text-gray-300 font-mono truncate"},be={class:"flex items-center gap-2"},ye={class:"w-full h-full flex items-center justify-center p-4"},_e=["src"],ke={class:"flex-shrink-0 bg-black/20 p-2"},xe={class:"overflow-x-auto py-2 custom-scrollbar"},Ce={class:"flex items-center gap-3 px-2 whitespace-nowrap"},Me=["onClick"],Ie=["src"],je={__name:"ImageViewerModal",setup(Ve){const v=G(),A=J(),o=u(0),n=u(1),w=u(0),g=u(0),y=u(!1),x=u(0),C=u(0),M=u(null),I=p(()=>v.imageViewer.imageList),r=p(()=>I.value[o.value]||null),c=p(()=>{var e;return(e=r.value)==null?void 0:e.src}),V=p(()=>o.value<I.value.length-1),R=p(()=>o.value>0),D=p(()=>({transform:`scale(${n.value}) translate(${w.value}px, ${g.value}px)`,cursor:y.value?"grabbing":"grab"}));Q(()=>v.imageViewer.isOpen,e=>{e&&(o.value=v.imageViewer.startIndex,k())});function E(e){return e&&e.startsWith("/api/")}function O(e){return e&&e.src?e.id||e.src.substring(e.src.length-30):Math.random()}const _=()=>v.closeImageViewer(),$=()=>{V.value&&o.value++,k()},S=()=>{R.value&&o.value--,k()};function Y(e){v.imageViewer.isOpen&&(e.key==="Escape"&&_(),e.key==="ArrowRight"&&V.value&&$(),e.key==="ArrowLeft"&&R.value&&S())}async function T(){var e;if(c.value)try{const i=await he.get(c.value,{responseType:"blob"}),l=window.URL.createObjectURL(new Blob([i.data])),a=document.createElement("a");a.href=l,a.setAttribute("download",((e=r.value)==null?void 0:e.filename)||"image.png"),document.body.appendChild(a),a.click(),document.body.removeChild(a),window.URL.revokeObjectURL(l)}catch(i){console.error("Download failed:",i),v.addNotification("Failed to download image.","error")}}function z(){!r.value||!r.value.id||(_(),A.push(`/image-studio/edit/${r.value.id}`))}function k(){n.value=1,w.value=0,g.value=0}function F(e){e.preventDefault();const i=.1;if(!M.value)return;const l=M.value.getBoundingClientRect(),a=e.clientX-l.left,f=e.clientY-l.top,m=n.value,X=m*(1-Math.sign(e.deltaY)*i);n.value=Math.min(Math.max(.1,10),X);const H=w.value-(a/m-a/n.value),q=g.value-(f/m-f/n.value);w.value=H,g.value=q}function K(e){e.button===0&&(e.preventDefault(),y.value=!0,x.value=e.clientX,C.value=e.clientY)}function P(e){if(!y.value)return;e.preventDefault();const i=(e.clientX-x.value)/n.value,l=(e.clientY-C.value)/n.value;w.value+=i,g.value+=l,x.value=e.clientX,C.value=e.clientY}function U(){y.value=!1}return Z(()=>{document.addEventListener("keydown",Y)}),ee(()=>{document.removeEventListener("keydown",Y)}),(e,i)=>(s(),j(fe,{to:"body"},[h(ve,{"enter-active-class":"transition-opacity ease-out duration-300","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"transition-opacity ease-in duration-200","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:te(()=>{var l,a;return[ae(v).imageViewer.isOpen?(s(),d("div",{key:0,class:"fixed inset-0 bg-black/80 backdrop-blur-sm z-50 flex flex-col",onClick:L(_,["self"])},[t("div",me,[t("div",pe,[t("p",we,B(((l=r.value)==null?void 0:l.prompt)||"Image"),1),(a=r.value)!=null&&a.model?(s(),d("p",ge,B(r.value.model),1)):b("",!0)]),t("div",be,[t("button",{onClick:k,class:"p-2 rounded-full hover:bg-white/20 transition-colors",title:"Reset View"},[h(se,{class:"w-6 h-6"})]),t("button",{onClick:z,class:"p-2 rounded-full hover:bg-white/20 transition-colors",title:"Edit Image"},[h(le,{class:"w-6 h-6"})]),t("button",{onClick:T,class:"p-2 rounded-full hover:bg-white/20 transition-colors",title:"Download"},[h(oe,{class:"w-6 h-6"})]),t("button",{onClick:_,class:"p-2 rounded-full hover:bg-white/20 transition-colors",title:"Close (Esc)"},[h(ne,{class:"w-6 h-6"})])])]),t("div",{ref_key:"imageWrapperRef",ref:M,class:"flex-1 flex items-center justify-center min-h-0 relative overflow-hidden",onWheel:F,onMousedown:K,onMousemove:P,onMouseup:U,onMouseleave:U},[t("div",ye,[E(c.value)?(s(),j(N,{key:c.value,src:c.value,style:W(D.value),class:"object-contain transition-transform max-w-full max-h-full"},null,8,["src","style"])):c.value?(s(),d("img",{key:c.value,src:c.value,style:W(D.value),class:"object-contain transition-transform max-w-full max-h-full"},null,12,_e)):b("",!0)]),R.value?(s(),d("button",{key:0,onClick:L(S,["stop"]),class:"absolute left-4 top-1/2 -translate-y-1/2 p-3 rounded-full bg-black/40 hover:bg-black/60 text-white transition-colors",title:"Previous (←)"},[h(re,{class:"w-6 h-6"})])):b("",!0),V.value?(s(),d("button",{key:1,onClick:L($,["stop"]),class:"absolute right-4 top-1/2 -translate-y-1/2 p-3 rounded-full bg-black/40 hover:bg-black/60 text-white transition-colors",title:"Next (→)"},[h(ce,{class:"w-6 h-6"})])):b("",!0)],544),t("div",ke,[t("div",xe,[t("div",Ce,[(s(!0),d(ie,null,ue(I.value,(f,m)=>(s(),d("div",{key:O(f),onClick:X=>o.value=m,class:de(["w-16 h-16 rounded-md overflow-hidden cursor-pointer flex-shrink-0 border-2 transition-colors",m===o.value?"border-blue-500":"border-transparent hover:border-gray-400"])},[E(f.src)?(s(),j(N,{key:0,src:f.src,class:"w-full h-full object-cover"},null,8,["src"])):(s(),d("img",{key:1,src:f.src,class:"w-full h-full object-cover"},null,8,Ie))],10,Me))),128))])])])])):b("",!0)]}),_:1})]))}};export{je as default};
frontend/dist/ui_assets/ImageViewerModal-Ca_JsFyS.js+0 −1 removed@@ -1 +0,0 @@ -import{K as q,k as G,s as u,c as p,w as J,o as Q,X as ee,n as j,l as s,f as h,g as te,d,h as b,j as ae,H as L,e as t,t as B,Y as se,Z as le,$ as oe,a0 as ne,a1 as N,a2 as A,a3 as re,a4 as ce,F as ie,i as ue,p as de,a5 as ve,a6 as fe,E as he}from"./index-CEXks4lv.js";const me={class:"flex-shrink-0 flex items-center justify-between p-4 text-white"},pe={class:"min-w-0"},we={class:"text-sm font-semibold truncate"},ge={key:0,class:"text-xs text-gray-300 font-mono truncate"},be={class:"flex items-center gap-2"},ye={class:"w-full h-full flex items-center justify-center p-4"},_e=["src"],ke={class:"flex-shrink-0 bg-black/20 p-2"},xe={class:"overflow-x-auto py-2 custom-scrollbar"},Ce={class:"flex items-center gap-3 px-2 whitespace-nowrap"},Me=["onClick"],Ie=["src"],je={__name:"ImageViewerModal",setup(Re){const v=q(),O=G(),o=u(0),n=u(1),w=u(0),g=u(0),y=u(!1),x=u(0),C=u(0),M=u(null),I=p(()=>v.imageViewer.imageList),r=p(()=>I.value[o.value]||null),c=p(()=>{var e;return(e=r.value)==null?void 0:e.src}),R=p(()=>o.value<I.value.length-1),V=p(()=>o.value>0),$=p(()=>({transform:`scale(${n.value}) translate(${w.value}px, ${g.value}px)`,cursor:y.value?"grabbing":"grab"}));J(()=>v.imageViewer.isOpen,e=>{e&&(o.value=v.imageViewer.startIndex,k())});function D(e){return e&&e.startsWith("/api/")}function T(e){return e&&e.src?e.id||e.src.substring(e.src.length-30):Math.random()}const _=()=>v.closeImageViewer(),E=()=>{R.value&&o.value++,k()},Y=()=>{V.value&&o.value--,k()};function S(e){v.imageViewer.isOpen&&(e.key==="Escape"&&_(),e.key==="ArrowRight"&&R.value&&E(),e.key==="ArrowLeft"&&V.value&&Y())}async function W(){var e;if(c.value)try{const i=await he.get(c.value,{responseType:"blob"}),l=window.URL.createObjectURL(new Blob([i.data])),a=document.createElement("a");a.href=l,a.setAttribute("download",((e=r.value)==null?void 0:e.filename)||"image.png"),document.body.appendChild(a),a.click(),document.body.removeChild(a),window.URL.revokeObjectURL(l)}catch(i){console.error("Download failed:",i),v.addNotification("Failed to download image.","error")}}function z(){!r.value||!r.value.id||(_(),O.push(`/image-studio/edit/${r.value.id}`))}function k(){n.value=1,w.value=0,g.value=0}function F(e){e.preventDefault();const i=.1;if(!M.value)return;const l=M.value.getBoundingClientRect(),a=e.clientX-l.left,f=e.clientY-l.top,m=n.value,U=m*(1-Math.sign(e.deltaY)*i);n.value=Math.min(Math.max(.1,10),U);const H=w.value-(a/m-a/n.value),Z=g.value-(f/m-f/n.value);w.value=H,g.value=Z}function K(e){e.button===0&&(e.preventDefault(),y.value=!0,x.value=e.clientX,C.value=e.clientY)}function P(e){if(!y.value)return;e.preventDefault();const i=(e.clientX-x.value)/n.value,l=(e.clientY-C.value)/n.value;w.value+=i,g.value+=l,x.value=e.clientX,C.value=e.clientY}function X(){y.value=!1}return Q(()=>{document.addEventListener("keydown",S)}),ee(()=>{document.removeEventListener("keydown",S)}),(e,i)=>(s(),j(fe,{to:"body"},[h(ve,{"enter-active-class":"transition-opacity ease-out duration-300","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"transition-opacity ease-in duration-200","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:te(()=>{var l,a;return[ae(v).imageViewer.isOpen?(s(),d("div",{key:0,class:"fixed inset-0 bg-black/80 backdrop-blur-sm z-50 flex flex-col",onClick:L(_,["self"])},[t("div",me,[t("div",pe,[t("p",we,B(((l=r.value)==null?void 0:l.prompt)||"Image"),1),(a=r.value)!=null&&a.model?(s(),d("p",ge,B(r.value.model),1)):b("",!0)]),t("div",be,[t("button",{onClick:k,class:"p-2 rounded-full hover:bg-white/20 transition-colors",title:"Reset View"},[h(se,{class:"w-6 h-6"})]),t("button",{onClick:z,class:"p-2 rounded-full hover:bg-white/20 transition-colors",title:"Edit Image"},[h(le,{class:"w-6 h-6"})]),t("button",{onClick:W,class:"p-2 rounded-full hover:bg-white/20 transition-colors",title:"Download"},[h(oe,{class:"w-6 h-6"})]),t("button",{onClick:_,class:"p-2 rounded-full hover:bg-white/20 transition-colors",title:"Close (Esc)"},[h(ne,{class:"w-6 h-6"})])])]),t("div",{ref_key:"imageWrapperRef",ref:M,class:"flex-1 flex items-center justify-center min-h-0 relative overflow-hidden",onWheel:F,onMousedown:K,onMousemove:P,onMouseup:X,onMouseleave:X},[t("div",ye,[D(c.value)?(s(),j(N,{key:c.value,src:c.value,style:A($.value),class:"object-contain transition-transform max-w-full max-h-full"},null,8,["src","style"])):c.value?(s(),d("img",{key:c.value,src:c.value,style:A($.value),class:"object-contain transition-transform max-w-full max-h-full"},null,12,_e)):b("",!0)]),V.value?(s(),d("button",{key:0,onClick:L(Y,["stop"]),class:"absolute left-4 top-1/2 -translate-y-1/2 p-3 rounded-full bg-black/40 hover:bg-black/60 text-white transition-colors",title:"Previous (←)"},[h(re,{class:"w-6 h-6"})])):b("",!0),R.value?(s(),d("button",{key:1,onClick:L(E,["stop"]),class:"absolute right-4 top-1/2 -translate-y-1/2 p-3 rounded-full bg-black/40 hover:bg-black/60 text-white transition-colors",title:"Next (→)"},[h(ce,{class:"w-6 h-6"})])):b("",!0)],544),t("div",ke,[t("div",xe,[t("div",Ce,[(s(!0),d(ie,null,ue(I.value,(f,m)=>(s(),d("div",{key:T(f),onClick:U=>o.value=m,class:de(["w-16 h-16 rounded-md overflow-hidden cursor-pointer flex-shrink-0 border-2 transition-colors",m===o.value?"border-blue-500":"border-transparent hover:border-gray-400"])},[D(f.src)?(s(),j(N,{key:0,src:f.src,class:"w-full h-full object-cover"},null,8,["src"])):(s(),d("img",{key:1,src:f.src,class:"w-full h-full object-cover"},null,8,Ie))],10,Me))),128))])])])])):b("",!0)]}),_:1})]))}};export{je as default};
frontend/dist/ui_assets/ImportModal-DOPpiP9I.js+1 −1 renamed@@ -1 +1 @@ -import{N,K as C,s as n,c as v,w as D,n as F,l as f,g,e as t,j as M,t as y,d as p,h as V,z as x,m as A,V as h,F as j,i as B}from"./index-CEXks4lv.js";import{_ as E}from"./GenericModal-Br5hR2Sz.js";const O={class:"space-y-4"},U={key:0,class:"space-y-2"},J={class:"border dark:border-gray-600 rounded-md max-h-60 overflow-y-auto p-3 space-y-2"},R={class:"border-b dark:border-gray-600 pb-2 mb-2"},T={class:"flex items-center text-sm font-medium cursor-pointer"},$=["value"],L=["disabled"],W={__name:"ImportModal",setup(P){const k=N(),o=C(),d=n(null),m=n(null),i=n([]),l=n([]),u=n(!1),_=v(()=>o.isModalOpen("import"));D(_,a=>{a&&c()});const b=v({get:()=>i.value.length>0&&l.value.length===i.value.length,set:a=>{l.value=a?i.value.map(e=>e.discussion_id):[]}});function c(){d.value=null,i.value=[],l.value=[],m.value&&(m.value.value="")}async function w(a){const e=a.target.files[0];if(!e){c();return}if(e.type!=="application/json"){o.addNotification("Invalid file type. Please select a JSON file.","error"),c();return}d.value=e,o.addNotification("Reading file...","info");try{const s=await e.text(),r=JSON.parse(s);if(!r||!Array.isArray(r.discussions))throw new Error("Invalid import file format.");i.value=r.discussions,l.value=r.discussions.map(I=>I.discussion_id)}catch(s){o.addNotification(`Error reading file: ${s.message}`,"error"),c()}}async function S(){if(!d.value||l.value.length===0){o.addNotification("Please select a file and discussions to import.","warning");return}u.value=!0;try{await k.importDiscussions({file:d.value,discussionIdsToImport:l.value}),o.closeModal("import")}catch{}finally{u.value=!1}}return(a,e)=>(f(),F(E,{modalName:"import",title:"Import Discussions",maxWidthClass:"max-w-lg"},{body:g(()=>[t("div",O,[t("div",null,[e[3]||(e[3]=t("label",{for:"importFile",class:"block text-sm font-medium mb-1"},"Select Exported JSON File (.json)",-1)),t("input",{type:"file",id:"importFile",ref_key:"fileInputRef",ref:m,onChange:w,accept:".json",class:"block w-full text-sm file:mr-4 file:py-1.5 file:px-3 file:rounded-full file:border-0 file:text-sm file:font-semibold file:bg-blue-100 dark:file:bg-blue-900/50 file:text-blue-700 dark:file:text-blue-300 hover:file:bg-blue-200 dark:hover:file:bg-blue-800/50 border border-gray-300 dark:border-gray-600 rounded-md cursor-pointer"},null,544)]),i.value.length>0?(f(),p("div",U,[e[5]||(e[5]=t("p",{class:"text-sm text-gray-600 dark:text-gray-400"},"Select discussions to import from the file:",-1)),t("div",J,[t("div",R,[t("label",T,[x(t("input",{type:"checkbox","onUpdate:modelValue":e[0]||(e[0]=s=>b.value=s),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 mr-2"},null,512),[[h,b.value]]),e[4]||(e[4]=A(" Select All / Deselect All "))])]),(f(!0),p(j,null,B(i.value,s=>(f(),p("label",{key:s.discussion_id,class:"flex items-center text-sm cursor-pointer p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700"},[x(t("input",{type:"checkbox",value:s.discussion_id,"onUpdate:modelValue":e[1]||(e[1]=r=>l.value=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 mr-2"},null,8,$),[[h,l.value]]),t("span",null,y(s.title||"Untitled Discussion"),1)]))),128))])])):V("",!0)])]),footer:g(()=>[t("button",{onClick:e[2]||(e[2]=s=>M(o).closeModal("import")),class:"btn btn-secondary"},"Cancel"),t("button",{onClick:S,class:"btn btn-primary",disabled:u.value||l.value.length===0},y(u.value?"Importing...":"Import Selected"),9,L)]),_:1}))}};export{W as default}; +import{N,K as C,s as n,c as v,w as D,n as F,l as f,g,e as t,j as M,t as y,d as p,h as A,z as x,m as V,Z as h,F as j,i as B}from"./index-BBRgbnZQ.js";import{_ as E}from"./GenericModal-eXiOHk6I.js";const O={class:"space-y-4"},U={key:0,class:"space-y-2"},J={class:"border dark:border-gray-600 rounded-md max-h-60 overflow-y-auto p-3 space-y-2"},R={class:"border-b dark:border-gray-600 pb-2 mb-2"},T={class:"flex items-center text-sm font-medium cursor-pointer"},$=["value"],L=["disabled"],W={__name:"ImportModal",setup(P){const k=N(),o=C(),d=n(null),m=n(null),i=n([]),l=n([]),u=n(!1),_=v(()=>o.isModalOpen("import"));D(_,a=>{a&&c()});const b=v({get:()=>i.value.length>0&&l.value.length===i.value.length,set:a=>{l.value=a?i.value.map(e=>e.discussion_id):[]}});function c(){d.value=null,i.value=[],l.value=[],m.value&&(m.value.value="")}async function w(a){const e=a.target.files[0];if(!e){c();return}if(e.type!=="application/json"){o.addNotification("Invalid file type. Please select a JSON file.","error"),c();return}d.value=e,o.addNotification("Reading file...","info");try{const s=await e.text(),r=JSON.parse(s);if(!r||!Array.isArray(r.discussions))throw new Error("Invalid import file format.");i.value=r.discussions,l.value=r.discussions.map(I=>I.discussion_id)}catch(s){o.addNotification(`Error reading file: ${s.message}`,"error"),c()}}async function S(){if(!d.value||l.value.length===0){o.addNotification("Please select a file and discussions to import.","warning");return}u.value=!0;try{await k.importDiscussions({file:d.value,discussionIdsToImport:l.value}),o.closeModal("import")}catch{}finally{u.value=!1}}return(a,e)=>(f(),F(E,{modalName:"import",title:"Import Discussions",maxWidthClass:"max-w-lg"},{body:g(()=>[t("div",O,[t("div",null,[e[3]||(e[3]=t("label",{for:"importFile",class:"block text-sm font-medium mb-1"},"Select Exported JSON File (.json)",-1)),t("input",{type:"file",id:"importFile",ref_key:"fileInputRef",ref:m,onChange:w,accept:".json",class:"block w-full text-sm file:mr-4 file:py-1.5 file:px-3 file:rounded-full file:border-0 file:text-sm file:font-semibold file:bg-blue-100 dark:file:bg-blue-900/50 file:text-blue-700 dark:file:text-blue-300 hover:file:bg-blue-200 dark:hover:file:bg-blue-800/50 border border-gray-300 dark:border-gray-600 rounded-md cursor-pointer"},null,544)]),i.value.length>0?(f(),p("div",U,[e[5]||(e[5]=t("p",{class:"text-sm text-gray-600 dark:text-gray-400"},"Select discussions to import from the file:",-1)),t("div",J,[t("div",R,[t("label",T,[x(t("input",{type:"checkbox","onUpdate:modelValue":e[0]||(e[0]=s=>b.value=s),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 mr-2"},null,512),[[h,b.value]]),e[4]||(e[4]=V(" Select All / Deselect All "))])]),(f(!0),p(j,null,B(i.value,s=>(f(),p("label",{key:s.discussion_id,class:"flex items-center text-sm cursor-pointer p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-700"},[x(t("input",{type:"checkbox",value:s.discussion_id,"onUpdate:modelValue":e[1]||(e[1]=r=>l.value=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 mr-2"},null,8,$),[[h,l.value]]),t("span",null,y(s.title||"Untitled Discussion"),1)]))),128))])])):A("",!0)])]),footer:g(()=>[t("button",{onClick:e[2]||(e[2]=s=>M(o).closeModal("import")),class:"btn btn-secondary"},"Cancel"),t("button",{onClick:S,class:"btn btn-primary",disabled:u.value||l.value.length===0},y(u.value?"Importing...":"Import Selected"),9,L)]),_:1}))}};export{W as default};
frontend/dist/ui_assets/ImportTools-Bnghe8pb.js+1 −1 renamed@@ -1 +1 @@ -import{K as k,s as n,d as i,l as d,e,p as h,H as u,t as g,j as p}from"./index-CEXks4lv.js";import{u as w}from"./admin-Dmx5gjU7.js";const I={class:"space-y-8"},_={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},D={class:"p-6"},P={class:"space-y-6"},S={class:"text-center"},U={key:0,class:"mt-4 text-sm text-gray-600 dark:text-gray-300"},T={class:"font-semibold"},C={class:"text-xs text-gray-500"},M={key:1,class:"mt-4 flex text-sm leading-6 text-gray-600 dark:text-gray-400"},j={class:"flex justify-end"},B=["disabled"],O={__name:"ImportTools",setup(F){const s=w(),o=k(),c=n(null),a=n(null),l=n(!1);function m(r){const t=r.target.files;t.length>0&&(t[0].name==="webui.db"?a.value=t[0]:(o.addNotification("Invalid file. Please select 'webui.db'.","error"),a.value=null))}function f(){var r;(r=c.value)==null||r.click()}function b(r){l.value=!1;const t=r.dataTransfer.files;t.length>0&&(t[0].name==="webui.db"?a.value=t[0]:(o.addNotification("Invalid file. Please select 'webui.db'.","error"),a.value=null))}async function x(){if(!a.value){o.addNotification("Please select a file to import.","warning");return}try{await s.importOpenWebUIData(a.value),a.value=null}catch{}}async function y(){if(await o.showConfirmation({title:"Purge Temporary Files?",message:"This will delete all temporary uploaded files older than 24 hours. This action cannot be undone.",confirmText:"Yes, Purge"}))try{await s.purgeUnusedUploads()}catch{}}return(r,t)=>(d(),i("div",I,[e("div",_,[t[6]||(t[6]=e("div",{class:"p-6 border-b border-gray-200 dark:border-gray-700"},[e("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," Data Import "),e("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Import data from other compatible applications. ")],-1)),e("div",D,[e("div",P,[t[5]||(t[5]=e("div",null,[e("h4",{class:"text-base font-medium text-gray-800 dark:text-gray-200"},"Import from Open-WebUI"),e("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Migrate users and discussions from an Open-WebUI instance by uploading its `webui.db` database file. The migration will run in the background. ")],-1)),e("div",null,[e("input",{type:"file",ref_key:"fileInput",ref:c,onChange:m,accept:".db",class:"hidden"},null,544),e("div",{onClick:f,onDragover:t[0]||(t[0]=u(v=>l.value=!0,["prevent"])),onDragleave:t[1]||(t[1]=u(v=>l.value=!1,["prevent"])),onDrop:u(b,["prevent"]),class:h(["mt-2 flex justify-center rounded-lg border-2 border-dashed px-6 py-10 transition-colors",l.value?"border-blue-500 bg-blue-50 dark:bg-blue-900/20":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"])},[e("div",S,[t[3]||(t[3]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",stroke:"currentColor",fill:"none",viewBox:"0 0 48 48","aria-hidden":"true"},[e("path",{d:"M28 8H12a4 4 0 00-4 4v20m32-12v8m0 0v8a4 4 0 01-4 4H12a4 4 0 01-4-4v-4m32-4l-3.172-3.172a4 4 0 00-5.656 0L28 28M8 32l9.172-9.172a4 4 0 015.656 0L28 28","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)),a.value?(d(),i("div",U,[e("p",T,g(a.value.name),1),e("p",C,g((a.value.size/1024/1024).toFixed(2))+" MB",1)])):(d(),i("p",M,t[2]||(t[2]=[e("span",{class:"font-semibold text-blue-600 dark:text-blue-400 hover:text-blue-500"},"Upload a file",-1),e("span",{class:"pl-1"},"or drag and drop",-1)]))),t[4]||(t[4]=e("p",{class:"text-xs leading-5 text-gray-600 dark:text-gray-400"},"webui.db file only",-1))])],34)]),e("div",j,[e("button",{onClick:x,disabled:!a.value||p(s).isImporting,class:"btn btn-primary"},g(p(s).isImporting?"Importing...":"Start Import"),9,B)])])])]),e("div",{class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},[t[8]||(t[8]=e("div",{class:"p-6 border-b border-gray-200 dark:border-gray-700"},[e("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," Data Maintenance "),e("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Perform cleanup and maintenance tasks. ")],-1)),e("div",{class:"p-6 flex items-center justify-between"},[t[7]||(t[7]=e("div",null,[e("h4",{class:"font-medium text-gray-800 dark:text-gray-200"},"Purge Unused Uploads"),e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," Deletes temporary files uploaded more than 24 hours ago that are not part of a discussion. ")],-1)),e("button",{onClick:y,class:"btn btn-danger"}," Start Purge Task ")])])]))}};export{O as default}; +import{K as k,s as n,d as i,l as d,e,p as h,H as u,t as g,j as p}from"./index-BBRgbnZQ.js";import{u as w}from"./admin-CwLQr1mG.js";const I={class:"space-y-8"},_={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},D={class:"p-6"},P={class:"space-y-6"},S={class:"text-center"},U={key:0,class:"mt-4 text-sm text-gray-600 dark:text-gray-300"},T={class:"font-semibold"},C={class:"text-xs text-gray-500"},M={key:1,class:"mt-4 flex text-sm leading-6 text-gray-600 dark:text-gray-400"},j={class:"flex justify-end"},B=["disabled"],O={__name:"ImportTools",setup(F){const s=w(),o=k(),c=n(null),a=n(null),l=n(!1);function m(r){const t=r.target.files;t.length>0&&(t[0].name==="webui.db"?a.value=t[0]:(o.addNotification("Invalid file. Please select 'webui.db'.","error"),a.value=null))}function f(){var r;(r=c.value)==null||r.click()}function b(r){l.value=!1;const t=r.dataTransfer.files;t.length>0&&(t[0].name==="webui.db"?a.value=t[0]:(o.addNotification("Invalid file. Please select 'webui.db'.","error"),a.value=null))}async function x(){if(!a.value){o.addNotification("Please select a file to import.","warning");return}try{await s.importOpenWebUIData(a.value),a.value=null}catch{}}async function y(){if(await o.showConfirmation({title:"Purge Temporary Files?",message:"This will delete all temporary uploaded files older than 24 hours. This action cannot be undone.",confirmText:"Yes, Purge"}))try{await s.purgeUnusedUploads()}catch{}}return(r,t)=>(d(),i("div",I,[e("div",_,[t[6]||(t[6]=e("div",{class:"p-6 border-b border-gray-200 dark:border-gray-700"},[e("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," Data Import "),e("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Import data from other compatible applications. ")],-1)),e("div",D,[e("div",P,[t[5]||(t[5]=e("div",null,[e("h4",{class:"text-base font-medium text-gray-800 dark:text-gray-200"},"Import from Open-WebUI"),e("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Migrate users and discussions from an Open-WebUI instance by uploading its `webui.db` database file. The migration will run in the background. ")],-1)),e("div",null,[e("input",{type:"file",ref_key:"fileInput",ref:c,onChange:m,accept:".db",class:"hidden"},null,544),e("div",{onClick:f,onDragover:t[0]||(t[0]=u(v=>l.value=!0,["prevent"])),onDragleave:t[1]||(t[1]=u(v=>l.value=!1,["prevent"])),onDrop:u(b,["prevent"]),class:h(["mt-2 flex justify-center rounded-lg border-2 border-dashed px-6 py-10 transition-colors",l.value?"border-blue-500 bg-blue-50 dark:bg-blue-900/20":"border-gray-300 dark:border-gray-600 hover:border-gray-400 dark:hover:border-gray-500"])},[e("div",S,[t[3]||(t[3]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",stroke:"currentColor",fill:"none",viewBox:"0 0 48 48","aria-hidden":"true"},[e("path",{d:"M28 8H12a4 4 0 00-4 4v20m32-12v8m0 0v8a4 4 0 01-4 4H12a4 4 0 01-4-4v-4m32-4l-3.172-3.172a4 4 0 00-5.656 0L28 28M8 32l9.172-9.172a4 4 0 015.656 0L28 28","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)),a.value?(d(),i("div",U,[e("p",T,g(a.value.name),1),e("p",C,g((a.value.size/1024/1024).toFixed(2))+" MB",1)])):(d(),i("p",M,t[2]||(t[2]=[e("span",{class:"font-semibold text-blue-600 dark:text-blue-400 hover:text-blue-500"},"Upload a file",-1),e("span",{class:"pl-1"},"or drag and drop",-1)]))),t[4]||(t[4]=e("p",{class:"text-xs leading-5 text-gray-600 dark:text-gray-400"},"webui.db file only",-1))])],34)]),e("div",j,[e("button",{onClick:x,disabled:!a.value||p(s).isImporting,class:"btn btn-primary"},g(p(s).isImporting?"Importing...":"Start Import"),9,B)])])])]),e("div",{class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},[t[8]||(t[8]=e("div",{class:"p-6 border-b border-gray-200 dark:border-gray-700"},[e("h3",{class:"text-xl font-semibold leading-6 text-gray-900 dark:text-white"}," Data Maintenance "),e("p",{class:"mt-1 text-sm text-gray-500 dark:text-gray-400"}," Perform cleanup and maintenance tasks. ")],-1)),e("div",{class:"p-6 flex items-center justify-between"},[t[7]||(t[7]=e("div",null,[e("h4",{class:"font-medium text-gray-800 dark:text-gray-200"},"Purge Unused Uploads"),e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," Deletes temporary files uploaded more than 24 hours ago that are not part of a discussion. ")],-1)),e("button",{onClick:y,class:"btn btn-danger"}," Start Purge Task ")])])]))}};export{O as default};
frontend/dist/ui_assets/index-aSsgiHf6.js+1 −1 renamedfrontend/dist/ui_assets/index-BBRgbnZQ.js+137 −137 renamedfrontend/dist/ui_assets/index-BlxP2fG2.js+1 −1 renamedfrontend/dist/ui_assets/index-BtkqZe_k.css+1 −0 addedfrontend/dist/ui_assets/index-CADqoj57.js+1 −1 renamedfrontend/dist/ui_assets/index-CcT3rvQn.js+1 −1 renamedfrontend/dist/ui_assets/index-CKVXfZls.js+1 −1 renamedfrontend/dist/ui_assets/index-COWU5EyJ.js+1 −1 renamedfrontend/dist/ui_assets/index-Cu3UEtAo.js+1 −1 renamedfrontend/dist/ui_assets/index-D6Dg1dVO.js+1 −1 renamedfrontend/dist/ui_assets/index-Dj40VWaL.js+1 −1 renamedfrontend/dist/ui_assets/index-DTmw6ZWo.js+1 −1 renamedfrontend/dist/ui_assets/index-fkSIbGI0.js+1 −1 renamedfrontend/dist/ui_assets/index-h_GukIcu.js+1 −1 renamedfrontend/dist/ui_assets/index-MA3P6vxv.css+0 −1 removedfrontend/dist/ui_assets/index-oJVtcWab.js+1 −1 renamedfrontend/dist/ui_assets/index-OkqUf0D3.js+1 −1 renamedfrontend/dist/ui_assets/index-WukKsCas.js+1 −1 renamedfrontend/dist/ui_assets/infoDiagram-STP46IZ2-C3wMpxtw.js+1 −1 renamedfrontend/dist/ui_assets/InsertImageModal-DO4axX76.js+1 −1 renamed@@ -1 +1 @@ -import{q as w,K as L,s as n,n as N,l as i,g as x,e as t,d as m,h as p,j as y,p as b,z as k,L as C}from"./index-CEXks4lv.js";import{_ as S}from"./GenericModal-Br5hR2Sz.js";const V={class:"space-y-4"},G={class:"border-b border-gray-200 dark:border-gray-700"},B={class:"-mb-px flex space-x-4","aria-label":"Tabs"},F={key:0},P={key:1},R={key:2},$={class:"mt-1 flex justify-center rounded-md border-2 border-dashed border-gray-300 dark:border-gray-600 px-6 pt-5 pb-6"},h={class:"space-y-1 text-center"},j={class:"flex text-sm text-gray-600 dark:text-gray-400"},A={for:"file-upload-input",class:"relative cursor-pointer rounded-md bg-white dark:bg-gray-800 font-medium text-blue-600 dark:text-blue-400 hover:text-blue-500"},D={class:"flex justify-end space-x-3"},d="insertImage",T={__name:"InsertImageModal",emits:["insert"],setup(W,{emit:I}){const s=L(),f=I,a=n("url"),r=n(""),o=n(""),g=n(null),c=n(!1);function u(){a.value="url",r.value="",o.value="",g.value&&(g.value.value=""),c.value=!1}function U(v){const e=v.target.files[0];if(!e)return;if(!e.type.startsWith("image/")){s.addNotification("Please select a valid image file.","error");return}c.value=!0;const l=new FileReader;l.onload=_=>{f("insert",_.target.result),s.closeModal(d),u()},l.onerror=()=>{s.addNotification("Failed to read the file.","error"),c.value=!1},l.readAsDataURL(e)}function M(){if(a.value==="url"){if(!r.value){s.addNotification("Please enter an image URL.","warning");return}f("insert",r.value)}else if(a.value==="svg"){if(!o.value.trim().startsWith("<svg")||!o.value.trim().endsWith("</svg>")){s.addNotification("Please enter valid SVG code.","warning");return}const v=`data:image/svg+xml;base64,${btoa(o.value)}`;f("insert",v)}s.closeModal(d),u()}return(v,e)=>(i(),N(S,{"modal-name":d,title:"Insert Image",onClose:e[6]||(e[6]=()=>{y(s).closeModal(d),u()})},{body:x(()=>[t("div",V,[t("div",G,[t("nav",B,[t("button",{onClick:e[0]||(e[0]=l=>a.value="url"),class:b(["tab-btn",{active:a.value==="url"}])},"From URL",2),t("button",{onClick:e[1]||(e[1]=l=>a.value="svg"),class:b(["tab-btn",{active:a.value==="svg"}])},"From SVG Code",2),t("button",{onClick:e[2]||(e[2]=l=>a.value="upload"),class:b(["tab-btn",{active:a.value==="upload"}])},"Upload",2)])]),a.value==="url"?(i(),m("div",F,[e[7]||(e[7]=t("label",{for:"imageUrl",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Image URL",-1)),k(t("input",{"onUpdate:modelValue":e[3]||(e[3]=l=>r.value=l),type:"url",id:"imageUrl",class:"input-field mt-1",placeholder:"https://example.com/image.png"},null,512),[[C,r.value]])])):p("",!0),a.value==="svg"?(i(),m("div",P,[e[8]||(e[8]=t("label",{for:"svgCode",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"SVG Code",-1)),k(t("textarea",{"onUpdate:modelValue":e[4]||(e[4]=l=>o.value=l),id:"svgCode",rows:"6",class:"input-field font-mono mt-1",placeholder:"<svg>...</svg>"},null,512),[[C,o.value]])])):p("",!0),a.value==="upload"?(i(),m("div",R,[e[13]||(e[13]=t("label",{for:"file-upload",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Upload Image",-1)),t("div",$,[t("div",h,[e[11]||(e[11]=t("svg",{class:"mx-auto h-12 w-12 text-gray-400",stroke:"currentColor",fill:"none",viewBox:"0 0 48 48","aria-hidden":"true"},[t("path",{d:"M28 8H12a4 4 0 00-4 4v20m32-12v8m0 0v8a4 4 0 01-4 4H12a4 4 0 01-4-4v-4m32-4l-3.172-3.172a4 4 0 00-5.656 0L28 28M8 32l9.172-9.172a4 4 0 015.656 0L28 28","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)),t("div",j,[t("label",A,[e[9]||(e[9]=t("span",null,"Upload a file",-1)),t("input",{id:"file-upload-input",ref_key:"fileInput",ref:g,onChange:U,type:"file",class:"sr-only",accept:"image/*"},null,544)]),e[10]||(e[10]=t("p",{class:"pl-1"},"or drag and drop",-1))]),e[12]||(e[12]=t("p",{class:"text-xs text-gray-500"},"PNG, JPG, GIF, SVG up to 2MB",-1))])])])):p("",!0)])]),footer:x(()=>[t("div",D,[t("button",{onClick:e[5]||(e[5]=()=>{y(s).closeModal(d),u()}),type:"button",class:"btn btn-secondary"},"Cancel"),a.value!=="upload"?(i(),m("button",{key:0,onClick:M,type:"button",class:"btn btn-primary"},"Insert Image")):p("",!0)])]),_:1}))}},H=w(T,[["__scopeId","data-v-f4e0ec97"]]);export{H as default}; +import{q as w,K as L,s as n,n as N,l as i,g as x,e as t,d as m,h as p,j as y,p as b,z as k,L as C}from"./index-BBRgbnZQ.js";import{_ as S}from"./GenericModal-eXiOHk6I.js";const V={class:"space-y-4"},G={class:"border-b border-gray-200 dark:border-gray-700"},B={class:"-mb-px flex space-x-4","aria-label":"Tabs"},F={key:0},P={key:1},R={key:2},$={class:"mt-1 flex justify-center rounded-md border-2 border-dashed border-gray-300 dark:border-gray-600 px-6 pt-5 pb-6"},h={class:"space-y-1 text-center"},j={class:"flex text-sm text-gray-600 dark:text-gray-400"},A={for:"file-upload-input",class:"relative cursor-pointer rounded-md bg-white dark:bg-gray-800 font-medium text-blue-600 dark:text-blue-400 hover:text-blue-500"},D={class:"flex justify-end space-x-3"},d="insertImage",T={__name:"InsertImageModal",emits:["insert"],setup(W,{emit:I}){const s=L(),f=I,a=n("url"),r=n(""),o=n(""),g=n(null),c=n(!1);function u(){a.value="url",r.value="",o.value="",g.value&&(g.value.value=""),c.value=!1}function U(v){const e=v.target.files[0];if(!e)return;if(!e.type.startsWith("image/")){s.addNotification("Please select a valid image file.","error");return}c.value=!0;const l=new FileReader;l.onload=_=>{f("insert",_.target.result),s.closeModal(d),u()},l.onerror=()=>{s.addNotification("Failed to read the file.","error"),c.value=!1},l.readAsDataURL(e)}function M(){if(a.value==="url"){if(!r.value){s.addNotification("Please enter an image URL.","warning");return}f("insert",r.value)}else if(a.value==="svg"){if(!o.value.trim().startsWith("<svg")||!o.value.trim().endsWith("</svg>")){s.addNotification("Please enter valid SVG code.","warning");return}const v=`data:image/svg+xml;base64,${btoa(o.value)}`;f("insert",v)}s.closeModal(d),u()}return(v,e)=>(i(),N(S,{"modal-name":d,title:"Insert Image",onClose:e[6]||(e[6]=()=>{y(s).closeModal(d),u()})},{body:x(()=>[t("div",V,[t("div",G,[t("nav",B,[t("button",{onClick:e[0]||(e[0]=l=>a.value="url"),class:b(["tab-btn",{active:a.value==="url"}])},"From URL",2),t("button",{onClick:e[1]||(e[1]=l=>a.value="svg"),class:b(["tab-btn",{active:a.value==="svg"}])},"From SVG Code",2),t("button",{onClick:e[2]||(e[2]=l=>a.value="upload"),class:b(["tab-btn",{active:a.value==="upload"}])},"Upload",2)])]),a.value==="url"?(i(),m("div",F,[e[7]||(e[7]=t("label",{for:"imageUrl",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Image URL",-1)),k(t("input",{"onUpdate:modelValue":e[3]||(e[3]=l=>r.value=l),type:"url",id:"imageUrl",class:"input-field mt-1",placeholder:"https://example.com/image.png"},null,512),[[C,r.value]])])):p("",!0),a.value==="svg"?(i(),m("div",P,[e[8]||(e[8]=t("label",{for:"svgCode",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"SVG Code",-1)),k(t("textarea",{"onUpdate:modelValue":e[4]||(e[4]=l=>o.value=l),id:"svgCode",rows:"6",class:"input-field font-mono mt-1",placeholder:"<svg>...</svg>"},null,512),[[C,o.value]])])):p("",!0),a.value==="upload"?(i(),m("div",R,[e[13]||(e[13]=t("label",{for:"file-upload",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Upload Image",-1)),t("div",$,[t("div",h,[e[11]||(e[11]=t("svg",{class:"mx-auto h-12 w-12 text-gray-400",stroke:"currentColor",fill:"none",viewBox:"0 0 48 48","aria-hidden":"true"},[t("path",{d:"M28 8H12a4 4 0 00-4 4v20m32-12v8m0 0v8a4 4 0 01-4 4H12a4 4 0 01-4-4v-4m32-4l-3.172-3.172a4 4 0 00-5.656 0L28 28M8 32l9.172-9.172a4 4 0 015.656 0L28 28","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)),t("div",j,[t("label",A,[e[9]||(e[9]=t("span",null,"Upload a file",-1)),t("input",{id:"file-upload-input",ref_key:"fileInput",ref:g,onChange:U,type:"file",class:"sr-only",accept:"image/*"},null,544)]),e[10]||(e[10]=t("p",{class:"pl-1"},"or drag and drop",-1))]),e[12]||(e[12]=t("p",{class:"text-xs text-gray-500"},"PNG, JPG, GIF, SVG up to 2MB",-1))])])])):p("",!0)])]),footer:x(()=>[t("div",D,[t("button",{onClick:e[5]||(e[5]=()=>{y(s).closeModal(d),u()}),type:"button",class:"btn btn-secondary"},"Cancel"),a.value!=="upload"?(i(),m("button",{key:0,onClick:M,type:"button",class:"btn btn-primary"},"Insert Image")):p("",!0)])]),_:1}))}},H=w(T,[["__scopeId","data-v-f4e0ec97"]]);export{H as default};
frontend/dist/ui_assets/InteractiveGraphViewer-Cgi2b6Pt.js+84 −0 addedfrontend/dist/ui_assets/InteractiveGraphViewer-CoD_Cgx1.css+1 −0 added@@ -0,0 +1 @@ +[data-v-581152e6] .vis-network{outline:none}
frontend/dist/ui_assets/InteractiveOutputModal-ByyYKfEQ.js+6 −6 renamedfrontend/dist/ui_assets/journeyDiagram-BIP6EPQ6-DfFI_JCj.js+1 −1 renamedfrontend/dist/ui_assets/JsonRenderer-VjVGwdYN.js+1 −1 renamed@@ -1 +1 @@ -import{q as p,s as b,c as d,d as a,l as t,e as c,H as k,t as u,F as v,n as x,j as _,A as h,p as g,D as j,i as V,f as w,a2 as A}from"./index-CEXks4lv.js";/* empty css */const N={class:"json-node"},B={class:"flex items-start"},O={class:"flex-shrink-0 flex items-center",style:{"min-width":"150px"}},S={class:"font-bold text-lg"},C={key:1,class:"w-6 h-6 mr-1 flex-shrink-0"},E={class:"text-gray-800 dark:text-gray-200 select-all break-all"},J={class:"ml-2 flex-grow"},P=["src"],q={key:3,class:"text-gray-500 italic"},I={key:4,class:"text-gray-500 italic"},R={key:5,class:"text-gray-700 dark:text-gray-300 whitespace-pre-wrap break-words select-all"},z={__name:"JsonNode",props:{itemKey:{type:[String,Number],required:!0},itemValue:{required:!0},level:{type:Number,default:0}},setup(r){const s=h(()=>j(()=>Promise.resolve().then(()=>T),void 0)),l=r,o=b(l.level<2),i=y=>typeof y=="string"&&y.startsWith("data:image/")&&y.includes(";base64,"),e=d(()=>l.itemValue===null?"null":Array.isArray(l.itemValue)?"array":i(l.itemValue)?"image":typeof l.itemValue=="object"?"object":typeof l.itemValue),n=d(()=>e.value==="object"&&Object.keys(l.itemValue).length>0||e.value==="array"&&l.itemValue.length>0),f=d(()=>e.value==="array"?`[... ${l.itemValue.length} items]`:e.value==="object"?"{...}":"");function m(){n.value&&(o.value=!o.value)}return(y,$)=>(t(),a("div",N,[c("div",B,[c("div",O,[n.value?(t(),a("button",{key:0,onClick:k(m,["prevent"]),class:"w-6 h-6 mr-1 flex items-center justify-center text-gray-500 hover:bg-gray-200 dark:hover:bg-gray-600 rounded"},[c("span",S,u(o.value?"−":"+"),1)])):(t(),a("span",C)),c("strong",E,u(r.itemKey)+":",1)]),c("div",J,[n.value&&!o.value?(t(),a("span",{key:0,onClick:m,class:"text-gray-500 cursor-pointer hover:underline"},u(f.value),1)):(t(),a(v,{key:1},[n.value?(t(),x(_(s),{key:0,json:r.itemValue,level:r.level+1},null,8,["json","level"])):e.value==="image"?(t(),a("img",{key:1,src:r.itemValue,alt:"Base64 Image",class:"max-w-xs max-h-48 rounded-md border border-gray-200 dark:border-gray-700 mt-1"},null,8,P)):e.value==="boolean"?(t(),a("span",{key:2,class:g([r.itemValue?"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-300","px-2 py-0.5 text-xs font-semibold rounded-full"])},u(r.itemValue),3)):e.value==="null"?(t(),a("span",q,"null")):e.value==="object"||e.value==="array"?(t(),a("span",I,u(e.value==="object"?"{} (empty object)":"[] (empty array)"),1)):(t(),a("span",R,u(r.itemValue),1))],64))])])]))}},D=p(z,[["__scopeId","data-v-36aad7d8"]]),L={__name:"JsonRenderer",props:{json:{type:[Object,Array],required:!0},level:{type:Number,default:0}},setup(r){const s=r,l=d(()=>s.json===null||typeof s.json!="object"?[]:Array.isArray(s.json)?s.json.map((i,e)=>({key:e,value:i})):Object.entries(s.json).map(([i,e])=>({key:i,value:e}))),o=d(()=>s.level>0?{paddingLeft:"20px"}:{});return(i,e)=>(t(),a("div",{class:g(["json-renderer-container w-full",{"border-l border-gray-200 dark:border-gray-700":r.level>0}]),style:A(o.value)},[(t(!0),a(v,null,V(l.value,n=>(t(),a("div",{key:n.key,class:"json-entry py-1"},[w(D,{"item-key":n.key,"item-value":n.value,level:r.level},null,8,["item-key","item-value","level"])]))),128))],6))}},T=Object.freeze(Object.defineProperty({__proto__:null,default:L},Symbol.toStringTag,{value:"Module"}));export{L as _}; +import{q as p,s as b,c as d,d as a,l as t,e as c,H as k,t as u,F as v,n as x,j as _,A as h,p as g,D as j,i as V,f as w,a4 as A}from"./index-BBRgbnZQ.js";/* empty css */const N={class:"json-node"},B={class:"flex items-start"},O={class:"flex-shrink-0 flex items-center",style:{"min-width":"150px"}},S={class:"font-bold text-lg"},C={key:1,class:"w-6 h-6 mr-1 flex-shrink-0"},E={class:"text-gray-800 dark:text-gray-200 select-all break-all"},J={class:"ml-2 flex-grow"},P=["src"],q={key:3,class:"text-gray-500 italic"},I={key:4,class:"text-gray-500 italic"},R={key:5,class:"text-gray-700 dark:text-gray-300 whitespace-pre-wrap break-words select-all"},z={__name:"JsonNode",props:{itemKey:{type:[String,Number],required:!0},itemValue:{required:!0},level:{type:Number,default:0}},setup(r){const s=h(()=>j(()=>Promise.resolve().then(()=>T),void 0)),l=r,o=b(l.level<2),i=y=>typeof y=="string"&&y.startsWith("data:image/")&&y.includes(";base64,"),e=d(()=>l.itemValue===null?"null":Array.isArray(l.itemValue)?"array":i(l.itemValue)?"image":typeof l.itemValue=="object"?"object":typeof l.itemValue),n=d(()=>e.value==="object"&&Object.keys(l.itemValue).length>0||e.value==="array"&&l.itemValue.length>0),f=d(()=>e.value==="array"?`[... ${l.itemValue.length} items]`:e.value==="object"?"{...}":"");function m(){n.value&&(o.value=!o.value)}return(y,$)=>(t(),a("div",N,[c("div",B,[c("div",O,[n.value?(t(),a("button",{key:0,onClick:k(m,["prevent"]),class:"w-6 h-6 mr-1 flex items-center justify-center text-gray-500 hover:bg-gray-200 dark:hover:bg-gray-600 rounded"},[c("span",S,u(o.value?"−":"+"),1)])):(t(),a("span",C)),c("strong",E,u(r.itemKey)+":",1)]),c("div",J,[n.value&&!o.value?(t(),a("span",{key:0,onClick:m,class:"text-gray-500 cursor-pointer hover:underline"},u(f.value),1)):(t(),a(v,{key:1},[n.value?(t(),x(_(s),{key:0,json:r.itemValue,level:r.level+1},null,8,["json","level"])):e.value==="image"?(t(),a("img",{key:1,src:r.itemValue,alt:"Base64 Image",class:"max-w-xs max-h-48 rounded-md border border-gray-200 dark:border-gray-700 mt-1"},null,8,P)):e.value==="boolean"?(t(),a("span",{key:2,class:g([r.itemValue?"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-300","px-2 py-0.5 text-xs font-semibold rounded-full"])},u(r.itemValue),3)):e.value==="null"?(t(),a("span",q,"null")):e.value==="object"||e.value==="array"?(t(),a("span",I,u(e.value==="object"?"{} (empty object)":"[] (empty array)"),1)):(t(),a("span",R,u(r.itemValue),1))],64))])])]))}},D=p(z,[["__scopeId","data-v-36aad7d8"]]),L={__name:"JsonRenderer",props:{json:{type:[Object,Array],required:!0},level:{type:Number,default:0}},setup(r){const s=r,l=d(()=>s.json===null||typeof s.json!="object"?[]:Array.isArray(s.json)?s.json.map((i,e)=>({key:e,value:i})):Object.entries(s.json).map(([i,e])=>({key:i,value:e}))),o=d(()=>s.level>0?{paddingLeft:"20px"}:{});return(i,e)=>(t(),a("div",{class:g(["json-renderer-container w-full",{"border-l border-gray-200 dark:border-gray-700":r.level>0}]),style:A(o.value)},[(t(!0),a(v,null,V(l.value,n=>(t(),a("div",{key:n.key,class:"json-entry py-1"},[w(D,{"item-key":n.key,"item-value":n.value,level:r.level},null,8,["item-key","item-value","level"])]))),128))],6))}},T=Object.freeze(Object.defineProperty({__proto__:null,default:L},Symbol.toStringTag,{value:"Module"}));export{L as _};
frontend/dist/ui_assets/kanban-definition-6OIFK2YF-nVpBsIqj.js+1 −1 renamedfrontend/dist/ui_assets/LanguageSelector-CWDlYex3.js+1 −1 renamed@@ -1 +1 @@ -import{P as O,c as u,s as c,ac as B,ad as E,ae as z,af as M,ag as N,o as R,d as l,l as s,e as o,n as A,t as k,f as D,g as F,z as b,h as T,a2 as j,j as U,L as $,F as P,i as q,p as G,a5 as H,a6 as I}from"./index-CEXks4lv.js";const J={class:"relative w-full"},K={class:"truncate"},Q={class:"p-2 border-b dark:border-gray-700"},W={class:"flex-grow overflow-y-auto"},X={key:0,class:"p-4 text-center text-sm text-gray-500"},Y={key:1,class:"p-4 text-center text-sm text-gray-500"},Z={key:2,class:"py-1"},ee=["onClick"],ae={__name:"LanguageSelector",props:{modelValue:{type:String,default:"auto"},includeAuto:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(v,{emit:x}){const m=v,L=x,d=O(),p=u(()=>d.languages),_=u(()=>d.isLoadingLanguages),n=c(!1),f=c(null),y=c(null),r=c(""),{floatingStyles:C}=B(f,y,{placement:"bottom-start",whileElementsMounted:E,middleware:[z(5),M(),N({padding:5})]}),S={mounted:(e,t)=>{e.clickOutsideEvent=a=>{const i=f.value;e===a.target||e.contains(a.target)||i!=null&&i.contains(a.target)||t.value()},document.addEventListener("mousedown",e.clickOutsideEvent)},unmounted:e=>{document.removeEventListener("mousedown",e.clickOutsideEvent)}},g=u(()=>{const e=[...p.value];return m.includeAuto&&e.unshift({value:"auto",label:"Auto-detect"}),e}),h=u(()=>g.value.find(e=>e.value===m.modelValue)||null),w=u(()=>{if(!r.value)return g.value;const e=r.value.toLowerCase();return g.value.filter(t=>t.label.toLowerCase().includes(e)||t.value.toLowerCase().includes(e))});function V(e){L("update:modelValue",e),n.value=!1,r.value=""}return R(()=>{p.value.length===0&&d.fetchLanguages()}),(e,t)=>(s(),l("div",J,[o("button",{ref_key:"triggerRef",ref:f,onClick:t[0]||(t[0]=a=>n.value=!n.value),type:"button",class:"input-field flex items-center justify-between"},[o("span",K,k(h.value?h.value.label:"Select Language"),1),t[2]||(t[2]=o("svg",{class:"w-4 h-4 text-gray-400",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},[o("path",{"fill-rule":"evenodd",d:"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z","clip-rule":"evenodd"})],-1))],512),(s(),A(I,{to:"body"},[D(H,{"enter-active-class":"transition ease-out duration-100","enter-from-class":"transform opacity-0 scale-95","enter-to-class":"transform opacity-100 scale-100","leave-active-class":"transition ease-in duration-75","leave-from-class":"transform opacity-100 scale-100","leave-to-class":"transform opacity-0 scale-95"},{default:F(()=>[n.value?b((s(),l("div",{key:0,ref_key:"floatingRef",ref:y,style:j(U(C)),class:"z-50 w-64 origin-top-left rounded-md bg-white dark:bg-gray-800 shadow-lg ring-1 ring-black ring-opacity-5 dark:ring-gray-700 focus:outline-none flex flex-col max-h-[50vh]"},[o("div",Q,[b(o("input",{"onUpdate:modelValue":t[1]||(t[1]=a=>r.value=a),type:"text",placeholder:"Search language...",class:"input-field-sm w-full"},null,512),[[$,r.value]])]),o("div",W,[_.value?(s(),l("div",X,"Loading...")):w.value.length===0?(s(),l("div",Y,"No matches found.")):(s(),l("ul",Z,[(s(!0),l(P,null,q(w.value,a=>(s(),l("li",{key:a.value,onClick:i=>V(a.value),class:G(["px-3 py-2 text-sm cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700",{"bg-blue-100 dark:bg-blue-900/50 font-semibold":v.modelValue===a.value}])},k(a.label),11,ee))),128))]))])],4)),[[S,()=>n.value=!1]]):T("",!0)]),_:1})]))]))}};export{ae as _}; +import{P as O,c as u,s as c,ac as B,ad as E,ae as z,af as M,ag as N,o as R,d as l,l as s,e as o,n as A,t as k,f as D,g as F,z as b,h as T,a4 as j,j as U,L as $,F as P,i as q,p as G,a7 as H,a8 as I}from"./index-BBRgbnZQ.js";const J={class:"relative w-full"},K={class:"truncate"},Q={class:"p-2 border-b dark:border-gray-700"},W={class:"flex-grow overflow-y-auto"},X={key:0,class:"p-4 text-center text-sm text-gray-500"},Y={key:1,class:"p-4 text-center text-sm text-gray-500"},Z={key:2,class:"py-1"},ee=["onClick"],ae={__name:"LanguageSelector",props:{modelValue:{type:String,default:"auto"},includeAuto:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(v,{emit:x}){const m=v,L=x,d=O(),p=u(()=>d.languages),_=u(()=>d.isLoadingLanguages),n=c(!1),f=c(null),y=c(null),r=c(""),{floatingStyles:C}=B(f,y,{placement:"bottom-start",whileElementsMounted:E,middleware:[z(5),M(),N({padding:5})]}),S={mounted:(e,t)=>{e.clickOutsideEvent=a=>{const i=f.value;e===a.target||e.contains(a.target)||i!=null&&i.contains(a.target)||t.value()},document.addEventListener("mousedown",e.clickOutsideEvent)},unmounted:e=>{document.removeEventListener("mousedown",e.clickOutsideEvent)}},g=u(()=>{const e=[...p.value];return m.includeAuto&&e.unshift({value:"auto",label:"Auto-detect"}),e}),h=u(()=>g.value.find(e=>e.value===m.modelValue)||null),w=u(()=>{if(!r.value)return g.value;const e=r.value.toLowerCase();return g.value.filter(t=>t.label.toLowerCase().includes(e)||t.value.toLowerCase().includes(e))});function V(e){L("update:modelValue",e),n.value=!1,r.value=""}return R(()=>{p.value.length===0&&d.fetchLanguages()}),(e,t)=>(s(),l("div",J,[o("button",{ref_key:"triggerRef",ref:f,onClick:t[0]||(t[0]=a=>n.value=!n.value),type:"button",class:"input-field flex items-center justify-between"},[o("span",K,k(h.value?h.value.label:"Select Language"),1),t[2]||(t[2]=o("svg",{class:"w-4 h-4 text-gray-400",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},[o("path",{"fill-rule":"evenodd",d:"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z","clip-rule":"evenodd"})],-1))],512),(s(),A(I,{to:"body"},[D(H,{"enter-active-class":"transition ease-out duration-100","enter-from-class":"transform opacity-0 scale-95","enter-to-class":"transform opacity-100 scale-100","leave-active-class":"transition ease-in duration-75","leave-from-class":"transform opacity-100 scale-100","leave-to-class":"transform opacity-0 scale-95"},{default:F(()=>[n.value?b((s(),l("div",{key:0,ref_key:"floatingRef",ref:y,style:j(U(C)),class:"z-50 w-64 origin-top-left rounded-md bg-white dark:bg-gray-800 shadow-lg ring-1 ring-black ring-opacity-5 dark:ring-gray-700 focus:outline-none flex flex-col max-h-[50vh]"},[o("div",Q,[b(o("input",{"onUpdate:modelValue":t[1]||(t[1]=a=>r.value=a),type:"text",placeholder:"Search language...",class:"input-field-sm w-full"},null,512),[[$,r.value]])]),o("div",W,[_.value?(s(),l("div",X,"Loading...")):w.value.length===0?(s(),l("div",Y,"No matches found.")):(s(),l("ul",Z,[(s(!0),l(P,null,q(w.value,a=>(s(),l("li",{key:a.value,onClick:i=>V(a.value),class:G(["px-3 py-2 text-sm cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700",{"bg-blue-100 dark:bg-blue-900/50 font-semibold":v.modelValue===a.value}])},k(a.label),11,ee))),128))]))])],4)),[[S,()=>n.value=!1]]):T("",!0)]),_:1})]))]))}};export{ae as _};
frontend/dist/ui_assets/layout-S04zzVDm.js+1 −1 renamedfrontend/dist/ui_assets/linear-DH3bSlPp.js+1 −1 renamedfrontend/dist/ui_assets/LLMBindingsSettings-BhvWwcKs.js+2 −2 renamed@@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["ui_assets/BindingModelsManager-CjDoxmXU.js","ui_assets/index-CEXks4lv.js","ui_assets/index-MA3P6vxv.css","ui_assets/admin-Dmx5gjU7.js","ui_assets/BindingZoo-D-mJ6Exj.js"])))=>i.map(i=>d[i]); -import{K as de,Q as ue,s as c,c as E,w as ce,o as me,d as o,l as a,f as N,e as t,h as g,t as r,p as u,z as C,m as M,L as F,R as L,F as x,i as h,j as B,J as ve,n as U,c8 as ge,c9 as fe,an as be,H as O,A as K,au as ye,g as Z,D as Q}from"./index-CEXks4lv.js";import{u as pe}from"./admin-Dmx5gjU7.js";import{_ as _e}from"./GenericModal-Br5hR2Sz.js";const xe={class:"space-y-8"},he={key:0,class:"bg-white dark:bg-gray-800 shadow-md rounded-lg p-6"},ke={class:"flex justify-between items-center mb-4"},we={class:"text-xl font-semibold"},Ce={key:0,class:"flex gap-2 text-sm font-medium"},Be={key:0},Se={class:"grid grid-cols-1 md:grid-cols-2 gap-6"},$e=["disabled"],Ae=["value"],Me={key:0,class:"space-y-6 border-t dark:border-gray-700 pt-6"},Te={class:"text-sm text-gray-600 dark:text-gray-400"},Ve=["for"],De={key:0,class:"text-red-500"},je=["id","onUpdate:modelValue"],Ee=["value"],Ne={key:1},Fe={class:"relative"},Le=["type","id","onUpdate:modelValue","required","placeholder"],Ue=["onClick","title"],Oe={key:2,class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},ze={class:"flex-grow flex flex-col pr-4"},Ie={class:"text-sm text-gray-500 dark:text-gray-400"},Pe=["onClick"],qe={class:"text-xs text-gray-500 mt-1"},Re={key:1,class:"mt-6 border-t dark:border-gray-700 pt-6"},Je={class:"grid grid-cols-1 gap-4"},Ge={class:"flex justify-between items-start mb-3"},He={class:"font-bold text-md"},Ke={class:"text-sm text-gray-600 dark:text-gray-400"},Ze={key:0,class:"space-y-3 mb-4"},Qe={class:"block text-xs font-medium uppercase text-gray-500 dark:text-gray-400 mb-1"},We=["onUpdate:modelValue","placeholder"],Xe={key:1,class:"flex items-center gap-2"},Ye=["onClick"],et={class:"text-sm"},tt={class:"flex justify-end"},nt=["onClick"],st={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},at={class:"flex justify-end gap-3"},lt=["disabled"],ot={key:1},it={key:2},rt={key:1},dt={class:"flex justify-between items-center mb-4 flex-wrap gap-4"},ut={class:"flex items-center gap-4"},ct={key:0,class:"text-center p-6"},mt={key:1,class:"text-center p-6 bg-gray-50 dark:bg-gray-800/50 rounded-lg"},vt={key:2,class:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6"},gt=["onClick"],ft=["onClick","title"],bt={class:"flex-grow"},yt={class:"flex items-center gap-3 mb-2"},pt={class:"font-bold text-lg text-gray-900 dark:text-white"},_t={class:"text-xs text-gray-500 dark:text-gray-400"},xt={class:"mt-3 text-sm text-gray-600 dark:text-gray-300"},ht={key:0,class:"mb-1"},kt={class:"text-xs text-gray-400 truncate"},wt={class:"border-t dark:border-gray-700 pt-3 flex justify-between items-center text-xs text-gray-500"},Ct=["onClick"],Bt={class:"space-y-4"},St={key:0,class:"text-center text-gray-500"},$t={key:1,class:"flex gap-4"},At={class:"w-1/3 border-r dark:border-gray-700 pr-4 space-y-2"},Mt=["onClick"],Tt={class:"w-2/3 pl-2"},Vt={key:0},Dt={class:"font-bold text-lg mb-2"},jt={class:"text-sm text-gray-600 dark:text-gray-400 mb-4"},Et={key:0,class:"space-y-3 mb-4 bg-gray-50 dark:bg-gray-800 p-3 rounded-md border dark:border-gray-700"},Nt={class:"block text-xs font-medium uppercase text-gray-500 dark:text-gray-400 mb-1"},Ft=["onUpdate:modelValue","placeholder"],Lt={key:1,class:"flex items-center gap-2"},Ut=["onClick"],Ot={class:"text-sm"},zt={class:"flex justify-end"},It=["disabled"],Pt={key:1,class:"h-full flex items-center justify-center text-gray-400 text-sm"},Ht={__name:"LLMBindingsSettings",setup(qt){const W=K(()=>Q(()=>import("./BindingModelsManager-CjDoxmXU.js"),__vite__mapDeps([0,1,2,3]))),X=K(()=>Q(()=>import("./BindingZoo-D-mJ6Exj.js"),__vite__mapDeps([4,1,2,3]))),f=pe(),S=de(),{bindings:z,availableBindingTypes:$,isLoadingBindings:Y,globalSettings:I}=ue(f),T=c(!1),p=c(null),A=c(!1),k=c({}),b=c({}),d=c("settings"),V=c(!1),P=c(null),q=c([]),m=c(null),y=c({}),D=c(!1),R=()=>({id:null,alias:"",name:"",config:{},default_model_name:"",is_active:!0}),i=c(R()),w=E(()=>p.value!==null),_=E(()=>i.value.name?$.value.find(l=>l.binding_name===i.value.name):null),ee=E(()=>{if(!_.value)return[];const l=_.value.input_parameters||[],n=new Set(l.map(s=>s.name)),e=Object.keys(i.value.config||{}).filter(s=>!n.has(s)&&s!=="model_name").map(s=>({name:s,type:typeof i.value.config[s]=="boolean"?"bool":typeof i.value.config[s]=="number"?"float":"str",description:"(Parameter not in binding description)",mandatory:!1}));return[...l.filter(s=>s.name!=="model_name"),...e]});ce(()=>i.value.name,(l,n)=>{if(l!==n&&!w.value){const e=$.value.find(v=>v.binding_name===l),s={};e&&e.input_parameters&&e.input_parameters.forEach(v=>{s[v.name]=v.default}),i.value.config=s}});const J=E({get(){if(!Array.isArray(I.value))return"mixed";const l=I.value.find(n=>n.key==="model_display_mode");return l?l.value:"mixed"},set(l){f.updateGlobalSettings({model_display_mode:l})}});me(()=>{f.fetchBindings(),f.fetchAvailableBindingTypes(),f.fetchGlobalSettings()});function G(){p.value=null,i.value=R(),k.value={},b.value={},T.value=!0,d.value="settings",window.scrollTo({top:0,behavior:"smooth"})}function te(l){p.value=l,i.value=JSON.parse(JSON.stringify(l)),i.value.config||(i.value.config={}),k.value={};const n=$.value.find(e=>e.binding_name===l.name);if(n&&n.commands){const e={};n.commands.forEach(s=>{e[s.name]={},s.parameters&&s.parameters.forEach(v=>{e[s.name][v.name]=v.default!==void 0?v.default:""})}),b.value=e}else b.value={};T.value=!0,d.value="settings",window.scrollTo({top:0,behavior:"smooth"})}function j(){T.value=!1,p.value=null}function ne(l){return typeof l=="string"?l.split(",").map(n=>n.trim()).filter(n=>n):Array.isArray(l)?l.filter(n=>n):[]}async function se(){if(!i.value.alias.trim()||!i.value.name){S.addNotification("Alias and Binding Type are required fields.","warning");return}A.value=!0;try{const l={alias:i.value.alias,name:i.value.name,config:i.value.config||{},is_active:i.value.is_active,default_model_name:i.value.default_model_name||null};w.value?await f.updateBinding(p.value.id,l):await f.addBinding(l),j()}catch(l){console.error("Submit failed:",l.message)}finally{A.value=!1}}async function ae(l){await S.showConfirmation({title:`Delete Binding '${l.alias}'?`,message:"Are you sure? This action cannot be undone.",confirmText:"Delete"})&&await f.deleteBinding(l.id)}async function le(l){await f.updateBinding(l.id,{is_active:!l.is_active})}function oe(l){const n=$.value.find(e=>e.binding_name===l);return n?n.title:l}async function H(l,n,e){try{S.addNotification(`Submitting command '${l.title||l.name}'...`,"info");const s=await f.executeBindingCommand(n,l.name,e);if(s)return S.addNotification(`Task started: ${l.title||l.name}. Check Task Manager for progress.`,"success",5e3),s}catch(s){console.error(s),S.addNotification(`Command submission failed: ${s.message}`,"error")}}function ie(l){m.value=l,y.value={},l.parameters&&l.parameters.forEach(n=>{y.value[n.name]=n.default!==void 0?n.default:""})}async function re(){if(!(!m.value||!P.value)){D.value=!0;try{await H(m.value,P.value.id,y.value),V.value=!1}finally{D.value=!1}}}return(l,n)=>(a(),o("div",xe,[T.value?(a(),o("div",he,[t("div",ke,[t("h3",we,r(w.value?"Edit Binding: "+i.value.alias:"Add New Binding"),1),w.value?(a(),o("div",Ce,[t("button",{onClick:n[0]||(n[0]=e=>d.value="settings"),class:u([{"text-blue-600 border-b-2 border-blue-600":d.value==="settings","text-gray-500 hover:text-gray-700":d.value!=="settings"},"px-3 py-2"])},"Settings",2),t("button",{onClick:n[1]||(n[1]=e=>d.value="zoo"),class:u([{"text-blue-600 border-b-2 border-blue-600":d.value==="zoo","text-gray-500 hover:text-gray-700":d.value!=="zoo"},"px-3 py-2"])},"Models Zoo",2),t("button",{onClick:n[2]||(n[2]=e=>d.value="models"),class:u([{"text-blue-600 border-b-2 border-blue-600":d.value==="models","text-gray-500 hover:text-gray-700":d.value!=="models"},"px-3 py-2"])},"Installed Models",2)])):g("",!0)]),d.value==="settings"?(a(),o("div",Be,[t("form",{onSubmit:O(se,["prevent"]),class:"space-y-6"},[t("div",Se,[t("div",null,[n[10]||(n[10]=t("label",{for:"alias",class:"block text-sm font-medium"},[M("Alias "),t("span",{class:"text-red-500"},"*")],-1)),C(t("input",{type:"text",id:"alias","onUpdate:modelValue":n[3]||(n[3]=e=>i.value.alias=e),class:"input-field mt-1",required:"",placeholder:"e.g., local_ollama",autocomplete:"off"},null,512),[[F,i.value.alias]]),n[11]||(n[11]=t("p",{class:"text-xs text-gray-500 mt-1"},"A unique, short name for this configuration.",-1))]),t("div",null,[n[13]||(n[13]=t("label",{for:"name",class:"block text-sm font-medium"},[M("Binding Type "),t("span",{class:"text-red-500"},"*")],-1)),C(t("select",{id:"name","onUpdate:modelValue":n[4]||(n[4]=e=>i.value.name=e),class:"input-field mt-1",required:"",disabled:w.value},[n[12]||(n[12]=t("option",{disabled:"",value:""},"Select a type",-1)),(a(!0),o(x,null,h(B($),e=>(a(),o("option",{key:e.binding_name,value:e.binding_name},r(e.title),9,Ae))),128))],8,$e),[[L,i.value.name]])])]),_.value?(a(),o("div",Me,[t("p",Te,r(_.value.description),1),(a(!0),o(x,null,h(ee.value,e=>(a(),o("div",{key:e.name,class:"space-y-1"},[t("label",{for:`param-${e.name}`,class:"block text-sm font-medium capitalize"},[M(r(e.name.replace(/_/g," "))+" ",1),e.mandatory?(a(),o("span",De,"*")):g("",!0)],8,Ve),e.options&&e.options.length>0?C((a(),o("select",{key:0,id:`param-${e.name}`,"onUpdate:modelValue":s=>i.value.config[e.name]=s,class:"input-field"},[(a(!0),o(x,null,h(ne(e.options),s=>(a(),o("option",{key:s,value:s},r(s),9,Ee))),128))],8,je)),[[L,i.value.config[e.name]]]):["str","int","float"].includes(e.type)?(a(),o("div",Ne,[t("div",Fe,[C(t("input",{type:(e.name.includes("key")||e.name.includes("token"))&&!k.value[e.name]?"password":"text",id:`param-${e.name}`,"onUpdate:modelValue":s=>i.value.config[e.name]=s,class:"input-field",required:e.mandatory,placeholder:e.description,autocomplete:"off"},null,8,Le),[[ve,i.value.config[e.name]]]),e.name.includes("key")||e.name.includes("token")?(a(),o("button",{key:0,type:"button",onClick:s=>k.value[e.name]=!k.value[e.name],class:"absolute inset-y-0 right-0 px-3 flex items-center text-gray-500 hover:text-gray-700 dark:hover:text-gray-300",title:k.value[e.name]?"Hide":"Show"},[k.value[e.name]?(a(),U(ge,{key:0,class:"w-5 h-5"})):(a(),U(fe,{key:1,class:"w-5 h-5"}))],8,Ue)):g("",!0)])])):e.type==="bool"?(a(),o("div",Oe,[t("span",ze,[t("span",Ie,r(e.description),1)]),t("button",{onClick:s=>i.value.config[e.name]=!i.value.config[e.name],type:"button",class:u([i.value.config[e.name]?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:u([i.value.config[e.name]?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],10,Pe)])):g("",!0),t("p",qe,r(e.description),1)]))),128))])):g("",!0),w.value&&_.value&&_.value.commands&&_.value.commands.length>0?(a(),o("div",Re,[n[14]||(n[14]=t("h4",{class:"text-lg font-semibold mb-4"},"Binding Commands",-1)),t("div",Je,[(a(!0),o(x,null,h(_.value.commands,e=>(a(),o("div",{key:e.name,class:"p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg border dark:border-gray-600"},[t("div",Ge,[t("div",null,[t("h5",He,r(e.title||e.name),1),t("p",Ke,r(e.description),1)])]),e.parameters&&e.parameters.length>0?(a(),o("div",Ze,[(a(!0),o(x,null,h(e.parameters,s=>(a(),o("div",{key:s.name},[t("label",Qe,r(s.name),1),s.type!=="bool"?C((a(),o("input",{key:0,type:"text","onUpdate:modelValue":v=>b.value[e.name][s.name]=v,class:"input-field text-sm",placeholder:s.default},null,8,We)),[[F,b.value[e.name][s.name]]]):(a(),o("div",Xe,[t("button",{onClick:v=>b.value[e.name][s.name]=!b.value[e.name][s.name],type:"button",class:u([b.value[e.name][s.name]?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:u([b.value[e.name][s.name]?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],10,Ye),t("span",et,r(s.description),1)]))]))),128))])):g("",!0),t("div",tt,[t("button",{type:"button",onClick:s=>H(e,p.value.id,b.value[e.name]),class:"btn btn-primary btn-sm"},"Execute",8,nt)])]))),128))])])):g("",!0),t("div",st,[n[15]||(n[15]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Active"),t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"If disabled, users cannot see or use models from this binding.")],-1)),t("button",{onClick:n[5]||(n[5]=e=>i.value.is_active=!i.value.is_active),type:"button",class:u([i.value.is_active?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:u([i.value.is_active?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2)]),t("div",at,[t("button",{type:"button",onClick:j,class:"btn btn-secondary"},"Close"),t("button",{type:"submit",class:"btn btn-primary",disabled:A.value},[A.value?(a(),U(be,{key:0,class:"w-5 h-5 mr-2"})):g("",!0),M(" "+r(A.value?"Saving...":w.value?"Save Changes":"Add Binding"),1)],8,lt)])],32)])):d.value==="zoo"?(a(),o("div",ot,[N(B(X),{binding:p.value,"binding-type":"llm"},null,8,["binding"]),t("div",{class:"flex justify-end gap-3 mt-4"},[t("button",{type:"button",onClick:j,class:"btn btn-secondary"},"Close")])])):d.value==="models"?(a(),o("div",it,[N(B(W),{binding:p.value,"binding-type":"llm"},null,8,["binding"]),t("div",{class:"flex justify-end gap-3 mt-4"},[t("button",{type:"button",onClick:j,class:"btn btn-secondary"},"Close")])])):g("",!0)])):(a(),o("div",rt,[t("div",dt,[n[18]||(n[18]=t("h2",{class:"text-2xl font-bold"},"LLM Bindings",-1)),t("div",ut,[t("div",null,[n[17]||(n[17]=t("label",{for:"model-display-mode",class:"block text-xs font-medium text-gray-500 dark:text-gray-400"},"Model Display Mode",-1)),C(t("select",{id:"model-display-mode","onUpdate:modelValue":n[6]||(n[6]=e=>J.value=e),class:"input-field mt-1"},n[16]||(n[16]=[t("option",{value:"mixed"},"Mixed (Alias or Original)",-1),t("option",{value:"aliased"},"Aliased Only",-1),t("option",{value:"original"},"Original Names Only",-1)]),512),[[L,J.value]])]),t("button",{onClick:G,class:"btn btn-primary self-end"},"+ Add New Binding")])]),B(Y)?(a(),o("div",ct,"Loading bindings...")):B(z).length===0?(a(),o("div",mt,[n[19]||(n[19]=t("p",null,"No LLM bindings configured yet.",-1)),t("button",{onClick:G,class:"mt-2 text-blue-600 hover:underline"},"Add your first one")])):(a(),o("div",vt,[(a(!0),o(x,null,h(B(z),e=>(a(),o("div",{key:e.id,onClick:s=>te(e),class:"bg-white dark:bg-gray-800 p-5 rounded-lg shadow-md hover:shadow-lg transition-shadow cursor-pointer flex flex-col gap-4 border border-transparent hover:border-blue-500 group relative"},[t("div",{class:"absolute top-4 right-4 z-10",onClick:n[7]||(n[7]=O(()=>{},["stop"]))},[t("button",{onClick:s=>le(e),type:"button",class:u([e.is_active?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"]),title:e.is_active?"Deactivate":"Activate"},[t("span",{class:u([e.is_active?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],10,ft)]),t("div",bt,[t("div",yt,[N(ye,{class:"w-8 h-8 text-blue-500"}),t("div",null,[t("h4",pt,r(e.alias),1),t("p",_t,r(oe(e.name)),1)])]),t("div",xt,[e.default_model_name?(a(),o("p",ht,[n[20]||(n[20]=t("span",{class:"font-semibold"},"Default:",-1)),M(" "+r(e.default_model_name),1)])):g("",!0),t("p",kt,r(e.config?Object.keys(e.config).filter(s=>!s.includes("key")).join(", "):""),1)])]),t("div",wt,[n[21]||(n[21]=t("span",null,"Click to edit",-1)),t("button",{onClick:O(s=>ae(e),["stop"]),class:"text-red-500 hover:underline p-1"},"Delete",8,Ct)])],8,gt))),128))]))])),N(_e,{visible:V.value,title:"Binding Commands",onClose:n[9]||(n[9]=e=>V.value=!1)},{footer:Z(()=>[t("button",{onClick:n[8]||(n[8]=e=>V.value=!1),class:"btn btn-secondary"},"Close")]),default:Z(()=>[t("div",Bt,[q.value.length?(a(),o("div",$t,[t("div",At,[(a(!0),o(x,null,h(q.value,e=>(a(),o("button",{key:e.name,onClick:s=>ie(e),class:u(["w-full text-left px-3 py-2 rounded-md text-sm transition-colors",m.value&&m.value.name===e.name?"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-200 font-medium":"hover:bg-gray-100 dark:hover:bg-gray-700"])},r(e.title||e.name),11,Mt))),128))]),t("div",Tt,[m.value?(a(),o("div",Vt,[t("h4",Dt,r(m.value.title||m.value.name),1),t("p",jt,r(m.value.description),1),m.value.parameters&&m.value.parameters.length?(a(),o("div",Et,[(a(!0),o(x,null,h(m.value.parameters,e=>(a(),o("div",{key:e.name},[t("label",Nt,r(e.name),1),e.type!=="bool"?C((a(),o("input",{key:0,type:"text","onUpdate:modelValue":s=>y.value[e.name]=s,class:"input-field text-sm",placeholder:e.default},null,8,Ft)),[[F,y.value[e.name]]]):(a(),o("div",Lt,[t("button",{onClick:s=>y.value[e.name]=!y.value[e.name],type:"button",class:u([y.value[e.name]?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:u([y.value[e.name]?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],10,Ut),t("span",Ot,r(e.description),1)]))]))),128))])):g("",!0),t("div",zt,[t("button",{onClick:re,class:"btn btn-primary",disabled:D.value},r(D.value?"Starting Task...":"Execute Command"),9,It)])])):(a(),o("div",Pt," Select a command to view details. "))])])):(a(),o("div",St," No commands available for this binding. "))])]),_:1},8,["visible"])]))}};export{Ht as default}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["ui_assets/BindingModelsManager-Tycn4EOO.js","ui_assets/index-BBRgbnZQ.js","ui_assets/index-BtkqZe_k.css","ui_assets/admin-CwLQr1mG.js","ui_assets/BindingZoo-CY8K_Ul1.js"])))=>i.map(i=>d[i]); +import{K as de,R as ue,s as c,c as E,w as ce,o as me,d as o,l as a,f as N,e as t,h as g,t as r,p as u,z as C,m as M,L as F,X as L,F as x,i as h,j as B,J as ve,n as U,c8 as ge,c9 as fe,an as be,H as O,A as K,au as ye,g as Z,D as X}from"./index-BBRgbnZQ.js";import{u as pe}from"./admin-CwLQr1mG.js";import{_ as _e}from"./GenericModal-eXiOHk6I.js";const xe={class:"space-y-8"},he={key:0,class:"bg-white dark:bg-gray-800 shadow-md rounded-lg p-6"},ke={class:"flex justify-between items-center mb-4"},we={class:"text-xl font-semibold"},Ce={key:0,class:"flex gap-2 text-sm font-medium"},Be={key:0},Se={class:"grid grid-cols-1 md:grid-cols-2 gap-6"},$e=["disabled"],Ae=["value"],Me={key:0,class:"space-y-6 border-t dark:border-gray-700 pt-6"},Te={class:"text-sm text-gray-600 dark:text-gray-400"},Ve=["for"],De={key:0,class:"text-red-500"},je=["id","onUpdate:modelValue"],Ee=["value"],Ne={key:1},Fe={class:"relative"},Le=["type","id","onUpdate:modelValue","required","placeholder"],Ue=["onClick","title"],Oe={key:2,class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},ze={class:"flex-grow flex flex-col pr-4"},Ie={class:"text-sm text-gray-500 dark:text-gray-400"},Pe=["onClick"],qe={class:"text-xs text-gray-500 mt-1"},Re={key:1,class:"mt-6 border-t dark:border-gray-700 pt-6"},Je={class:"grid grid-cols-1 gap-4"},Ge={class:"flex justify-between items-start mb-3"},He={class:"font-bold text-md"},Ke={class:"text-sm text-gray-600 dark:text-gray-400"},Ze={key:0,class:"space-y-3 mb-4"},Xe={class:"block text-xs font-medium uppercase text-gray-500 dark:text-gray-400 mb-1"},Qe=["onUpdate:modelValue","placeholder"],We={key:1,class:"flex items-center gap-2"},Ye=["onClick"],et={class:"text-sm"},tt={class:"flex justify-end"},nt=["onClick"],st={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},at={class:"flex justify-end gap-3"},lt=["disabled"],ot={key:1},it={key:2},rt={key:1},dt={class:"flex justify-between items-center mb-4 flex-wrap gap-4"},ut={class:"flex items-center gap-4"},ct={key:0,class:"text-center p-6"},mt={key:1,class:"text-center p-6 bg-gray-50 dark:bg-gray-800/50 rounded-lg"},vt={key:2,class:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6"},gt=["onClick"],ft=["onClick","title"],bt={class:"flex-grow"},yt={class:"flex items-center gap-3 mb-2"},pt={class:"font-bold text-lg text-gray-900 dark:text-white"},_t={class:"text-xs text-gray-500 dark:text-gray-400"},xt={class:"mt-3 text-sm text-gray-600 dark:text-gray-300"},ht={key:0,class:"mb-1"},kt={class:"text-xs text-gray-400 truncate"},wt={class:"border-t dark:border-gray-700 pt-3 flex justify-between items-center text-xs text-gray-500"},Ct=["onClick"],Bt={class:"space-y-4"},St={key:0,class:"text-center text-gray-500"},$t={key:1,class:"flex gap-4"},At={class:"w-1/3 border-r dark:border-gray-700 pr-4 space-y-2"},Mt=["onClick"],Tt={class:"w-2/3 pl-2"},Vt={key:0},Dt={class:"font-bold text-lg mb-2"},jt={class:"text-sm text-gray-600 dark:text-gray-400 mb-4"},Et={key:0,class:"space-y-3 mb-4 bg-gray-50 dark:bg-gray-800 p-3 rounded-md border dark:border-gray-700"},Nt={class:"block text-xs font-medium uppercase text-gray-500 dark:text-gray-400 mb-1"},Ft=["onUpdate:modelValue","placeholder"],Lt={key:1,class:"flex items-center gap-2"},Ut=["onClick"],Ot={class:"text-sm"},zt={class:"flex justify-end"},It=["disabled"],Pt={key:1,class:"h-full flex items-center justify-center text-gray-400 text-sm"},Ht={__name:"LLMBindingsSettings",setup(qt){const Q=K(()=>X(()=>import("./BindingModelsManager-Tycn4EOO.js"),__vite__mapDeps([0,1,2,3]))),W=K(()=>X(()=>import("./BindingZoo-CY8K_Ul1.js"),__vite__mapDeps([4,1,2,3]))),f=pe(),S=de(),{bindings:z,availableBindingTypes:$,isLoadingBindings:Y,globalSettings:I}=ue(f),T=c(!1),p=c(null),A=c(!1),k=c({}),b=c({}),d=c("settings"),V=c(!1),P=c(null),q=c([]),m=c(null),y=c({}),D=c(!1),R=()=>({id:null,alias:"",name:"",config:{},default_model_name:"",is_active:!0}),i=c(R()),w=E(()=>p.value!==null),_=E(()=>i.value.name?$.value.find(l=>l.binding_name===i.value.name):null),ee=E(()=>{if(!_.value)return[];const l=_.value.input_parameters||[],n=new Set(l.map(s=>s.name)),e=Object.keys(i.value.config||{}).filter(s=>!n.has(s)&&s!=="model_name").map(s=>({name:s,type:typeof i.value.config[s]=="boolean"?"bool":typeof i.value.config[s]=="number"?"float":"str",description:"(Parameter not in binding description)",mandatory:!1}));return[...l.filter(s=>s.name!=="model_name"),...e]});ce(()=>i.value.name,(l,n)=>{if(l!==n&&!w.value){const e=$.value.find(v=>v.binding_name===l),s={};e&&e.input_parameters&&e.input_parameters.forEach(v=>{s[v.name]=v.default}),i.value.config=s}});const J=E({get(){if(!Array.isArray(I.value))return"mixed";const l=I.value.find(n=>n.key==="model_display_mode");return l?l.value:"mixed"},set(l){f.updateGlobalSettings({model_display_mode:l})}});me(()=>{f.fetchBindings(),f.fetchAvailableBindingTypes(),f.fetchGlobalSettings()});function G(){p.value=null,i.value=R(),k.value={},b.value={},T.value=!0,d.value="settings",window.scrollTo({top:0,behavior:"smooth"})}function te(l){p.value=l,i.value=JSON.parse(JSON.stringify(l)),i.value.config||(i.value.config={}),k.value={};const n=$.value.find(e=>e.binding_name===l.name);if(n&&n.commands){const e={};n.commands.forEach(s=>{e[s.name]={},s.parameters&&s.parameters.forEach(v=>{e[s.name][v.name]=v.default!==void 0?v.default:""})}),b.value=e}else b.value={};T.value=!0,d.value="settings",window.scrollTo({top:0,behavior:"smooth"})}function j(){T.value=!1,p.value=null}function ne(l){return typeof l=="string"?l.split(",").map(n=>n.trim()).filter(n=>n):Array.isArray(l)?l.filter(n=>n):[]}async function se(){if(!i.value.alias.trim()||!i.value.name){S.addNotification("Alias and Binding Type are required fields.","warning");return}A.value=!0;try{const l={alias:i.value.alias,name:i.value.name,config:i.value.config||{},is_active:i.value.is_active,default_model_name:i.value.default_model_name||null};w.value?await f.updateBinding(p.value.id,l):await f.addBinding(l),j()}catch(l){console.error("Submit failed:",l.message)}finally{A.value=!1}}async function ae(l){await S.showConfirmation({title:`Delete Binding '${l.alias}'?`,message:"Are you sure? This action cannot be undone.",confirmText:"Delete"})&&await f.deleteBinding(l.id)}async function le(l){await f.updateBinding(l.id,{is_active:!l.is_active})}function oe(l){const n=$.value.find(e=>e.binding_name===l);return n?n.title:l}async function H(l,n,e){try{S.addNotification(`Submitting command '${l.title||l.name}'...`,"info");const s=await f.executeBindingCommand(n,l.name,e);if(s)return S.addNotification(`Task started: ${l.title||l.name}. Check Task Manager for progress.`,"success",5e3),s}catch(s){console.error(s),S.addNotification(`Command submission failed: ${s.message}`,"error")}}function ie(l){m.value=l,y.value={},l.parameters&&l.parameters.forEach(n=>{y.value[n.name]=n.default!==void 0?n.default:""})}async function re(){if(!(!m.value||!P.value)){D.value=!0;try{await H(m.value,P.value.id,y.value),V.value=!1}finally{D.value=!1}}}return(l,n)=>(a(),o("div",xe,[T.value?(a(),o("div",he,[t("div",ke,[t("h3",we,r(w.value?"Edit Binding: "+i.value.alias:"Add New Binding"),1),w.value?(a(),o("div",Ce,[t("button",{onClick:n[0]||(n[0]=e=>d.value="settings"),class:u([{"text-blue-600 border-b-2 border-blue-600":d.value==="settings","text-gray-500 hover:text-gray-700":d.value!=="settings"},"px-3 py-2"])},"Settings",2),t("button",{onClick:n[1]||(n[1]=e=>d.value="zoo"),class:u([{"text-blue-600 border-b-2 border-blue-600":d.value==="zoo","text-gray-500 hover:text-gray-700":d.value!=="zoo"},"px-3 py-2"])},"Models Zoo",2),t("button",{onClick:n[2]||(n[2]=e=>d.value="models"),class:u([{"text-blue-600 border-b-2 border-blue-600":d.value==="models","text-gray-500 hover:text-gray-700":d.value!=="models"},"px-3 py-2"])},"Installed Models",2)])):g("",!0)]),d.value==="settings"?(a(),o("div",Be,[t("form",{onSubmit:O(se,["prevent"]),class:"space-y-6"},[t("div",Se,[t("div",null,[n[10]||(n[10]=t("label",{for:"alias",class:"block text-sm font-medium"},[M("Alias "),t("span",{class:"text-red-500"},"*")],-1)),C(t("input",{type:"text",id:"alias","onUpdate:modelValue":n[3]||(n[3]=e=>i.value.alias=e),class:"input-field mt-1",required:"",placeholder:"e.g., local_ollama",autocomplete:"off"},null,512),[[F,i.value.alias]]),n[11]||(n[11]=t("p",{class:"text-xs text-gray-500 mt-1"},"A unique, short name for this configuration.",-1))]),t("div",null,[n[13]||(n[13]=t("label",{for:"name",class:"block text-sm font-medium"},[M("Binding Type "),t("span",{class:"text-red-500"},"*")],-1)),C(t("select",{id:"name","onUpdate:modelValue":n[4]||(n[4]=e=>i.value.name=e),class:"input-field mt-1",required:"",disabled:w.value},[n[12]||(n[12]=t("option",{disabled:"",value:""},"Select a type",-1)),(a(!0),o(x,null,h(B($),e=>(a(),o("option",{key:e.binding_name,value:e.binding_name},r(e.title),9,Ae))),128))],8,$e),[[L,i.value.name]])])]),_.value?(a(),o("div",Me,[t("p",Te,r(_.value.description),1),(a(!0),o(x,null,h(ee.value,e=>(a(),o("div",{key:e.name,class:"space-y-1"},[t("label",{for:`param-${e.name}`,class:"block text-sm font-medium capitalize"},[M(r(e.name.replace(/_/g," "))+" ",1),e.mandatory?(a(),o("span",De,"*")):g("",!0)],8,Ve),e.options&&e.options.length>0?C((a(),o("select",{key:0,id:`param-${e.name}`,"onUpdate:modelValue":s=>i.value.config[e.name]=s,class:"input-field"},[(a(!0),o(x,null,h(ne(e.options),s=>(a(),o("option",{key:s,value:s},r(s),9,Ee))),128))],8,je)),[[L,i.value.config[e.name]]]):["str","int","float"].includes(e.type)?(a(),o("div",Ne,[t("div",Fe,[C(t("input",{type:(e.name.includes("key")||e.name.includes("token"))&&!k.value[e.name]?"password":"text",id:`param-${e.name}`,"onUpdate:modelValue":s=>i.value.config[e.name]=s,class:"input-field",required:e.mandatory,placeholder:e.description,autocomplete:"off"},null,8,Le),[[ve,i.value.config[e.name]]]),e.name.includes("key")||e.name.includes("token")?(a(),o("button",{key:0,type:"button",onClick:s=>k.value[e.name]=!k.value[e.name],class:"absolute inset-y-0 right-0 px-3 flex items-center text-gray-500 hover:text-gray-700 dark:hover:text-gray-300",title:k.value[e.name]?"Hide":"Show"},[k.value[e.name]?(a(),U(ge,{key:0,class:"w-5 h-5"})):(a(),U(fe,{key:1,class:"w-5 h-5"}))],8,Ue)):g("",!0)])])):e.type==="bool"?(a(),o("div",Oe,[t("span",ze,[t("span",Ie,r(e.description),1)]),t("button",{onClick:s=>i.value.config[e.name]=!i.value.config[e.name],type:"button",class:u([i.value.config[e.name]?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:u([i.value.config[e.name]?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],10,Pe)])):g("",!0),t("p",qe,r(e.description),1)]))),128))])):g("",!0),w.value&&_.value&&_.value.commands&&_.value.commands.length>0?(a(),o("div",Re,[n[14]||(n[14]=t("h4",{class:"text-lg font-semibold mb-4"},"Binding Commands",-1)),t("div",Je,[(a(!0),o(x,null,h(_.value.commands,e=>(a(),o("div",{key:e.name,class:"p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg border dark:border-gray-600"},[t("div",Ge,[t("div",null,[t("h5",He,r(e.title||e.name),1),t("p",Ke,r(e.description),1)])]),e.parameters&&e.parameters.length>0?(a(),o("div",Ze,[(a(!0),o(x,null,h(e.parameters,s=>(a(),o("div",{key:s.name},[t("label",Xe,r(s.name),1),s.type!=="bool"?C((a(),o("input",{key:0,type:"text","onUpdate:modelValue":v=>b.value[e.name][s.name]=v,class:"input-field text-sm",placeholder:s.default},null,8,Qe)),[[F,b.value[e.name][s.name]]]):(a(),o("div",We,[t("button",{onClick:v=>b.value[e.name][s.name]=!b.value[e.name][s.name],type:"button",class:u([b.value[e.name][s.name]?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:u([b.value[e.name][s.name]?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],10,Ye),t("span",et,r(s.description),1)]))]))),128))])):g("",!0),t("div",tt,[t("button",{type:"button",onClick:s=>H(e,p.value.id,b.value[e.name]),class:"btn btn-primary btn-sm"},"Execute",8,nt)])]))),128))])])):g("",!0),t("div",st,[n[15]||(n[15]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Active"),t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"If disabled, users cannot see or use models from this binding.")],-1)),t("button",{onClick:n[5]||(n[5]=e=>i.value.is_active=!i.value.is_active),type:"button",class:u([i.value.is_active?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:u([i.value.is_active?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2)]),t("div",at,[t("button",{type:"button",onClick:j,class:"btn btn-secondary"},"Close"),t("button",{type:"submit",class:"btn btn-primary",disabled:A.value},[A.value?(a(),U(be,{key:0,class:"w-5 h-5 mr-2"})):g("",!0),M(" "+r(A.value?"Saving...":w.value?"Save Changes":"Add Binding"),1)],8,lt)])],32)])):d.value==="zoo"?(a(),o("div",ot,[N(B(W),{binding:p.value,"binding-type":"llm"},null,8,["binding"]),t("div",{class:"flex justify-end gap-3 mt-4"},[t("button",{type:"button",onClick:j,class:"btn btn-secondary"},"Close")])])):d.value==="models"?(a(),o("div",it,[N(B(Q),{binding:p.value,"binding-type":"llm"},null,8,["binding"]),t("div",{class:"flex justify-end gap-3 mt-4"},[t("button",{type:"button",onClick:j,class:"btn btn-secondary"},"Close")])])):g("",!0)])):(a(),o("div",rt,[t("div",dt,[n[18]||(n[18]=t("h2",{class:"text-2xl font-bold"},"LLM Bindings",-1)),t("div",ut,[t("div",null,[n[17]||(n[17]=t("label",{for:"model-display-mode",class:"block text-xs font-medium text-gray-500 dark:text-gray-400"},"Model Display Mode",-1)),C(t("select",{id:"model-display-mode","onUpdate:modelValue":n[6]||(n[6]=e=>J.value=e),class:"input-field mt-1"},n[16]||(n[16]=[t("option",{value:"mixed"},"Mixed (Alias or Original)",-1),t("option",{value:"aliased"},"Aliased Only",-1),t("option",{value:"original"},"Original Names Only",-1)]),512),[[L,J.value]])]),t("button",{onClick:G,class:"btn btn-primary self-end"},"+ Add New Binding")])]),B(Y)?(a(),o("div",ct,"Loading bindings...")):B(z).length===0?(a(),o("div",mt,[n[19]||(n[19]=t("p",null,"No LLM bindings configured yet.",-1)),t("button",{onClick:G,class:"mt-2 text-blue-600 hover:underline"},"Add your first one")])):(a(),o("div",vt,[(a(!0),o(x,null,h(B(z),e=>(a(),o("div",{key:e.id,onClick:s=>te(e),class:"bg-white dark:bg-gray-800 p-5 rounded-lg shadow-md hover:shadow-lg transition-shadow cursor-pointer flex flex-col gap-4 border border-transparent hover:border-blue-500 group relative"},[t("div",{class:"absolute top-4 right-4 z-10",onClick:n[7]||(n[7]=O(()=>{},["stop"]))},[t("button",{onClick:s=>le(e),type:"button",class:u([e.is_active?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"]),title:e.is_active?"Deactivate":"Activate"},[t("span",{class:u([e.is_active?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],10,ft)]),t("div",bt,[t("div",yt,[N(ye,{class:"w-8 h-8 text-blue-500"}),t("div",null,[t("h4",pt,r(e.alias),1),t("p",_t,r(oe(e.name)),1)])]),t("div",xt,[e.default_model_name?(a(),o("p",ht,[n[20]||(n[20]=t("span",{class:"font-semibold"},"Default:",-1)),M(" "+r(e.default_model_name),1)])):g("",!0),t("p",kt,r(e.config?Object.keys(e.config).filter(s=>!s.includes("key")).join(", "):""),1)])]),t("div",wt,[n[21]||(n[21]=t("span",null,"Click to edit",-1)),t("button",{onClick:O(s=>ae(e),["stop"]),class:"text-red-500 hover:underline p-1"},"Delete",8,Ct)])],8,gt))),128))]))])),N(_e,{visible:V.value,title:"Binding Commands",onClose:n[9]||(n[9]=e=>V.value=!1)},{footer:Z(()=>[t("button",{onClick:n[8]||(n[8]=e=>V.value=!1),class:"btn btn-secondary"},"Close")]),default:Z(()=>[t("div",Bt,[q.value.length?(a(),o("div",$t,[t("div",At,[(a(!0),o(x,null,h(q.value,e=>(a(),o("button",{key:e.name,onClick:s=>ie(e),class:u(["w-full text-left px-3 py-2 rounded-md text-sm transition-colors",m.value&&m.value.name===e.name?"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-200 font-medium":"hover:bg-gray-100 dark:hover:bg-gray-700"])},r(e.title||e.name),11,Mt))),128))]),t("div",Tt,[m.value?(a(),o("div",Vt,[t("h4",Dt,r(m.value.title||m.value.name),1),t("p",jt,r(m.value.description),1),m.value.parameters&&m.value.parameters.length?(a(),o("div",Et,[(a(!0),o(x,null,h(m.value.parameters,e=>(a(),o("div",{key:e.name},[t("label",Nt,r(e.name),1),e.type!=="bool"?C((a(),o("input",{key:0,type:"text","onUpdate:modelValue":s=>y.value[e.name]=s,class:"input-field text-sm",placeholder:e.default},null,8,Ft)),[[F,y.value[e.name]]]):(a(),o("div",Lt,[t("button",{onClick:s=>y.value[e.name]=!y.value[e.name],type:"button",class:u([y.value[e.name]?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:u([y.value[e.name]?"translate-x-4":"translate-x-0","pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],10,Ut),t("span",Ot,r(e.description),1)]))]))),128))])):g("",!0),t("div",zt,[t("button",{onClick:re,class:"btn btn-primary",disabled:D.value},r(D.value?"Starting Task...":"Execute Command"),9,It)])])):(a(),o("div",Pt," Select a command to view details. "))])])):(a(),o("div",St," No commands available for this binding. "))])]),_:1},8,["visible"])]))}};export{Ht as default};
frontend/dist/ui_assets/LLMSettings-BLqY1jK5.js+1 −1 renamed@@ -1 +1 @@ -import{q as W,u as X,P as Z,Q as A,s as p,ac as ee,ad as te,ae as le,af as se,ag as ae,w as T,c as b,o as oe,d as u,l as n,e as t,H as F,h as x,n as h,f as P,au as $,t as V,g as ne,z as c,a2 as re,j as B,L as f,F as D,i as I,p as r,ao as ie,c9 as de,a5 as ue,a6 as me,R as ce,O as ge}from"./index-CEXks4lv.js";const pe={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},fe={class:"border-t border-gray-200 dark:border-gray-700"},ve={class:"relative mt-1"},be={class:"flex items-center space-x-3 truncate"},xe=["src"],_e={key:1,class:"w-8 h-8 flex-shrink-0 text-gray-500 dark:text-gray-400 flex items-center justify-center bg-gray-200 dark:bg-gray-700 rounded-md"},ye={class:"min-w-0 text-left"},ke={class:"block font-semibold truncate"},he={class:"p-2 sticky top-0 bg-white dark:bg-gray-800 z-10 border-b dark:border-gray-700"},we={class:"p-1 flex-grow overflow-y-auto"},Le={key:0,class:"text-center p-4 text-sm text-gray-500"},Se={class:"px-2 py-1.5 text-xs font-bold text-gray-600 dark:text-gray-300"},Me=["onClick"],Ce={class:"flex items-center space-x-3 truncate"},ze=["src"],Te={class:"truncate text-left"},Ve={class:"font-medium truncate text-sm"},Oe={class:"flex items-center gap-2 flex-shrink-0"},Re={key:0,class:"p-4 bg-blue-50 dark:bg-blue-900/20 border-l-4 border-blue-500 text-blue-800 dark:text-blue-200"},Ne=["disabled"],je={key:0,class:"mt-1 text-xs text-red-600 dark:text-red-400"},Ee=["disabled"],Ue=["disabled"],Ae=["disabled"],Fe=["disabled"],Pe=["disabled"],$e={class:"border-t dark:border-gray-700 pt-4"},Be={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},De=["disabled"],Ie=["disabled"],Je={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},Ke=["disabled"],qe={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},He=["disabled"],Ge={class:"flex justify-end pt-4"},Qe=["disabled"],Ye={key:0},We={key:1},Xe={__name:"LLMSettings",setup(Ze){const O=X(),w=Z(),{user:i}=A(O),{availableLLMModelsGrouped:L,isLoadingLollmsModels:J,availableLollmsModels:R}=A(w),l=p({lollms_model_name:"",llm_ctx_size:4096,llm_temperature:.7,llm_top_k:50,llm_top_p:.95,llm_repeat_penalty:1.1,llm_repeat_last_n:64,put_thoughts_in_context:!1,reasoning_activation:!1,reasoning_effort:null,reasoning_summary:!1}),y=p(!1),S=p(!1);let N={};const v=p(!1),M=p(null),C=p(null),k=p(""),{floatingStyles:K}=ee(M,C,{placement:"bottom-start",whileElementsMounted:te,middleware:[le(5),se(),ae({padding:5})]}),q={mounted:(s,e)=>{s.clickOutsideEvent=d=>{const m=M.value;s===d.target||s.contains(d.target)||m!=null&&m.contains(d.target)||e.value()},document.addEventListener("mousedown",s.clickOutsideEvent)},unmounted:s=>{document.removeEventListener("mousedown",s.clickOutsideEvent)}};T(v,s=>{s&&ge(()=>{const e=C.value;if(e){const d=e.querySelector(".menu-item-button.selected");d&&d.scrollIntoView({block:"nearest"})}})});const o=b(()=>{var s;return((s=i.value)==null?void 0:s.llm_settings_overridden)??!1}),H=b(()=>!l.value.lollms_model_name||!R.value?null:R.value.find(s=>s.id===l.value.lollms_model_name)),j=b(()=>{var s,e;return((e=(s=H.value)==null?void 0:s.alias)==null?void 0:e.ctx_size_locked)===!0}),_=b({get:()=>l.value.lollms_model_name,set:s=>{o.value||(l.value.lollms_model_name=s)}}),z=b(()=>{if(!_.value)return null;for(const s of L.value){const e=s.items.find(d=>d.id===_.value);if(e)return e}return null}),G=b(()=>{if(!k.value)return L.value;const s=k.value.toLowerCase(),e=[];for(const d of L.value){const m=d.items.filter(a=>a.name.toLowerCase().includes(s));m.length>0&&e.push({...d,items:m})}return e});function Q(s){_.value=s,v.value=!1}const E=()=>{i.value&&(l.value={lollms_model_name:i.value.lollms_model_name||"",llm_ctx_size:i.value.llm_ctx_size??null,llm_temperature:i.value.llm_temperature??null,llm_top_k:i.value.llm_top_k??null,llm_top_p:i.value.llm_top_p??null,llm_repeat_penalty:i.value.llm_repeat_penalty??null,llm_repeat_last_n:i.value.llm_repeat_last_n??null,put_thoughts_in_context:i.value.put_thoughts_in_context||!1,reasoning_activation:i.value.reasoning_activation||!1,reasoning_effort:i.value.reasoning_effort||null,reasoning_summary:i.value.reasoning_summary||!1},N=JSON.parse(JSON.stringify(l.value)),S.value=!1)};oe(()=>{w.availableLollmsModels.length===0&&w.fetchAvailableLollmsModels(),E()}),T(i,E,{deep:!0}),T(l,s=>{S.value=JSON.stringify(s)!==JSON.stringify(N)},{deep:!0});async function Y(){y.value=!0;try{await O.updateUserPreferences(l.value)}catch{}finally{y.value=!1}}return(s,e)=>{var d,m;return n(),u("div",pe,[e[29]||(e[29]=t("div",{class:"px-4 py-5 sm:p-6"},[t("h2",{class:"text-xl font-bold leading-6 text-gray-900 dark:text-white"},"LLM Configuration"),t("p",{class:"mt-1 max-w-2xl text-sm text-gray-500 dark:text-gray-400"}," Select your default text generation model and adjust its parameters. ")],-1)),t("div",fe,[t("form",{onSubmit:F(Y,["prevent"]),class:"p-4 sm:p-6 space-y-6"},[t("div",null,[e[14]||(e[14]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Default LLM Model",-1)),t("div",ve,[t("button",{ref_key:"llmTriggerRef",ref:M,onClick:e[0]||(e[0]=a=>v.value=!v.value),type:"button",class:"toolbox-select truncate w-full flex items-center justify-between"},[t("div",be,[(d=z.value)!=null&&d.icon_base64?(n(),u("img",{key:0,src:z.value.icon_base64,class:"h-8 w-8 rounded-md object-cover"},null,8,xe)):(n(),u("span",_e,[P($,{class:"w-5 h-5"})])),t("div",ye,[t("span",ke,V(((m=z.value)==null?void 0:m.name)||"Select a Model"),1)])]),e[13]||(e[13]=t("svg",{class:"w-4 h-4 text-gray-400 flex-shrink-0",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},[t("path",{"fill-rule":"evenodd",d:"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z","clip-rule":"evenodd"})],-1))],512),(n(),h(me,{to:"body"},[P(ue,{"enter-active-class":"transition ease-out duration-100","enter-from-class":"transform opacity-0 scale-95","enter-to-class":"transform opacity-100 scale-100","leave-active-class":"transition ease-in duration-75","leave-from-class":"transform opacity-100 scale-100","leave-to-class":"transform opacity-0 scale-95"},{default:ne(()=>[v.value?c((n(),u("div",{key:0,ref_key:"llmFloatingRef",ref:C,style:re(B(K)),class:"z-50 w-80 origin-top-left rounded-md bg-white dark:bg-gray-800 shadow-lg ring-1 ring-black ring-opacity-5 dark:ring-gray-700 focus:outline-none py-1 flex flex-col max-h-[50vh]"},[t("div",he,[c(t("input",{type:"text","onUpdate:modelValue":e[1]||(e[1]=a=>k.value=a),onClick:e[2]||(e[2]=F(()=>{},["stop"])),placeholder:"Search models...",class:"input-field-sm w-full"},null,512),[[f,k.value]])]),t("div",we,[B(J)?(n(),u("div",Le,"Loading models...")):x("",!0),(n(!0),u(D,null,I(G.value,a=>(n(),u("div",{key:a.label},[t("h4",Se,V(a.label),1),(n(!0),u(D,null,I(a.items,g=>{var U;return n(),u("button",{key:g.id,onClick:et=>Q(g.id),class:r(["menu-item-button",{selected:_.value===g.id}])},[t("div",Ce,[g.icon_base64?(n(),u("img",{key:0,src:g.icon_base64,class:"h-6 w-6 rounded-md object-cover flex-shrink-0"},null,8,ze)):(n(),h($,{key:1,class:"w-6 h-6 p-0.5 text-gray-500 dark:text-gray-400 flex-shrink-0"})),t("div",Te,[t("p",Ve,V(g.name),1)])]),t("div",Oe,[_.value===g.id?(n(),h(ie,{key:0,class:"w-5 h-5 text-blue-600 dark:text-blue-400"})):x("",!0),(U=g.alias)!=null&&U.has_vision?(n(),h(de,{key:1,class:"w-5 h-5 text-green-500",title:"Vision active"})):x("",!0)])],10,Me)}),128))]))),128))])],4)),[[q,()=>v.value=!1]]):x("",!0)]),_:1})]))])]),o.value?(n(),u("div",Re,e[15]||(e[15]=[t("p",{class:"font-semibold"},"Settings Overridden by Admin",-1),t("p",{class:"text-sm"},"An administrator has set and locked the generation parameters for this model. Your personal settings will not apply.",-1)]))):x("",!0),t("fieldset",{class:r(["grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",{"opacity-60":o.value}])},[t("div",null,[e[16]||(e[16]=t("label",{for:"contextSize",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Context Size (tokens)",-1)),c(t("input",{type:"number",id:"contextSize","onUpdate:modelValue":e[3]||(e[3]=a=>l.value.llm_ctx_size=a),class:"input-field mt-1",placeholder:"e.g., 4096",disabled:o.value||j.value},null,8,Ne),[[f,l.value.llm_ctx_size,void 0,{number:!0}]]),j.value?(n(),u("p",je,"This model has a fixed context size set by the administrator.")):x("",!0)]),t("div",{class:r({"cursor-not-allowed":o.value})},[e[17]||(e[17]=t("label",{for:"temperature",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Temperature",-1)),c(t("input",{type:"number",id:"temperature","onUpdate:modelValue":e[4]||(e[4]=a=>l.value.llm_temperature=a),class:"input-field mt-1",step:"0.01",min:"0",max:"2",placeholder:"e.g., 0.7",disabled:o.value},null,8,Ee),[[f,l.value.llm_temperature,void 0,{number:!0}]])],2),t("div",{class:r({"cursor-not-allowed":o.value})},[e[18]||(e[18]=t("label",{for:"topK",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Top K",-1)),c(t("input",{type:"number",id:"topK","onUpdate:modelValue":e[5]||(e[5]=a=>l.value.llm_top_k=a),class:"input-field mt-1",step:"1",min:"1",placeholder:"e.g., 50",disabled:o.value},null,8,Ue),[[f,l.value.llm_top_k,void 0,{number:!0}]])],2),t("div",{class:r({"cursor-not-allowed":o.value})},[e[19]||(e[19]=t("label",{for:"topP",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Top P",-1)),c(t("input",{type:"number",id:"topP","onUpdate:modelValue":e[6]||(e[6]=a=>l.value.llm_top_p=a),class:"input-field mt-1",step:"0.01",min:"0",max:"1",placeholder:"e.g., 0.95",disabled:o.value},null,8,Ae),[[f,l.value.llm_top_p,void 0,{number:!0}]])],2),t("div",{class:r({"cursor-not-allowed":o.value})},[e[20]||(e[20]=t("label",{for:"repeatPenalty",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Repeat Penalty",-1)),c(t("input",{type:"number",id:"repeatPenalty","onUpdate:modelValue":e[7]||(e[7]=a=>l.value.llm_repeat_penalty=a),class:"input-field mt-1",step:"0.01",min:"0",placeholder:"e.g., 1.1",disabled:o.value},null,8,Fe),[[f,l.value.llm_repeat_penalty,void 0,{number:!0}]])],2),t("div",{class:r({"cursor-not-allowed":o.value})},[e[21]||(e[21]=t("label",{for:"repeatLastN",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Repeat Last N",-1)),c(t("input",{type:"number",id:"repeatLastN","onUpdate:modelValue":e[8]||(e[8]=a=>l.value.llm_repeat_last_n=a),class:"input-field mt-1",step:"1",min:"0",placeholder:"e.g., 64",disabled:o.value},null,8,Pe),[[f,l.value.llm_repeat_last_n,void 0,{number:!0}]])],2)],2),t("div",$e,[e[28]||(e[28]=t("h3",{class:"font-semibold text-gray-800 dark:text-gray-200 mb-3"},"Reasoning Capabilities",-1)),t("div",{class:r(["grid grid-cols-1 md:grid-cols-2 gap-6",{"opacity-60":o.value}])},[t("div",Be,[e[22]||(e[22]=t("span",{class:"flex-grow flex flex-col pr-4"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Enable Reasoning (Thinking)"),t("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Activates thought generation if supported by the model.")],-1)),t("button",{onClick:e[9]||(e[9]=a=>l.value.reasoning_activation=!l.value.reasoning_activation),type:"button",disabled:o.value,class:r([l.value.reasoning_activation?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[t("span",{class:r([l.value.reasoning_activation?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],10,De)]),t("div",{class:r({"cursor-not-allowed":o.value})},[e[24]||(e[24]=t("label",{for:"reasoning-effort",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Reasoning Effort",-1)),c(t("select",{id:"reasoning-effort","onUpdate:modelValue":e[10]||(e[10]=a=>l.value.reasoning_effort=a),class:"input-field mt-1",disabled:o.value},e[23]||(e[23]=[t("option",{value:null},"Default",-1),t("option",{value:"low"},"Low",-1),t("option",{value:"medium"},"Medium",-1),t("option",{value:"high"},"High",-1)]),8,Ie),[[ce,l.value.reasoning_effort]]),e[25]||(e[25]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"Controls the depth of reasoning (model dependent).",-1))],2),t("div",Je,[e[26]||(e[26]=t("span",{class:"flex-grow flex flex-col pr-4"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Reasoning Summary"),t("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Enable summarization of reasoning steps in output.")],-1)),t("button",{onClick:e[11]||(e[11]=a=>l.value.reasoning_summary=!l.value.reasoning_summary),type:"button",disabled:o.value,class:r([l.value.reasoning_summary?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[t("span",{class:r([l.value.reasoning_summary?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],10,Ke)]),t("div",qe,[e[27]||(e[27]=t("span",{class:"flex-grow flex flex-col pr-4"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},'Include "think" blocks in context'),t("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Allows the AI to see its previous reasoning steps.")],-1)),t("button",{onClick:e[12]||(e[12]=a=>l.value.put_thoughts_in_context=!l.value.put_thoughts_in_context),type:"button",disabled:o.value,class:r([l.value.put_thoughts_in_context?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[t("span",{class:r([l.value.put_thoughts_in_context?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],10,He)])],2)]),t("div",Ge,[t("button",{type:"submit",class:"btn btn-primary",disabled:y.value||!S.value||o.value},[y.value?(n(),u("span",Ye,"Saving...")):(n(),u("span",We,"Save LLM Settings"))],8,Qe)])],32)])])}}},lt=W(Xe,[["__scopeId","data-v-de2b5b61"]]);export{lt as default}; +import{q as Q,u as W,P as Z,R as A,s as p,ac as ee,ad as te,ae as le,af as se,ag as ae,w as T,c as b,o as oe,d as u,l as n,e as t,H as F,h as x,n as h,f as P,au as $,t as V,g as ne,z as c,a4 as re,j as B,L as f,F as D,i as I,p as r,ao as ie,c9 as de,a7 as ue,a8 as me,X as ce,O as ge}from"./index-BBRgbnZQ.js";const pe={class:"bg-white dark:bg-gray-800 shadow-md rounded-lg"},fe={class:"border-t border-gray-200 dark:border-gray-700"},ve={class:"relative mt-1"},be={class:"flex items-center space-x-3 truncate"},xe=["src"],_e={key:1,class:"w-8 h-8 flex-shrink-0 text-gray-500 dark:text-gray-400 flex items-center justify-center bg-gray-200 dark:bg-gray-700 rounded-md"},ye={class:"min-w-0 text-left"},ke={class:"block font-semibold truncate"},he={class:"p-2 sticky top-0 bg-white dark:bg-gray-800 z-10 border-b dark:border-gray-700"},we={class:"p-1 flex-grow overflow-y-auto"},Le={key:0,class:"text-center p-4 text-sm text-gray-500"},Se={class:"px-2 py-1.5 text-xs font-bold text-gray-600 dark:text-gray-300"},Me=["onClick"],Ce={class:"flex items-center space-x-3 truncate"},ze=["src"],Te={class:"truncate text-left"},Ve={class:"font-medium truncate text-sm"},Oe={class:"flex items-center gap-2 flex-shrink-0"},Re={key:0,class:"p-4 bg-blue-50 dark:bg-blue-900/20 border-l-4 border-blue-500 text-blue-800 dark:text-blue-200"},Ne=["disabled"],je={key:0,class:"mt-1 text-xs text-red-600 dark:text-red-400"},Ee=["disabled"],Ue=["disabled"],Ae=["disabled"],Fe=["disabled"],Pe=["disabled"],$e={class:"border-t dark:border-gray-700 pt-4"},Be={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},De=["disabled"],Ie=["disabled"],Je={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},Ke=["disabled"],qe={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},He=["disabled"],Ge={class:"flex justify-end pt-4"},Xe=["disabled"],Ye={key:0},Qe={key:1},We={__name:"LLMSettings",setup(Ze){const O=W(),w=Z(),{user:i}=A(O),{availableLLMModelsGrouped:L,isLoadingLollmsModels:J,availableLollmsModels:R}=A(w),l=p({lollms_model_name:"",llm_ctx_size:4096,llm_temperature:.7,llm_top_k:50,llm_top_p:.95,llm_repeat_penalty:1.1,llm_repeat_last_n:64,put_thoughts_in_context:!1,reasoning_activation:!1,reasoning_effort:null,reasoning_summary:!1}),y=p(!1),S=p(!1);let N={};const v=p(!1),M=p(null),C=p(null),k=p(""),{floatingStyles:K}=ee(M,C,{placement:"bottom-start",whileElementsMounted:te,middleware:[le(5),se(),ae({padding:5})]}),q={mounted:(s,e)=>{s.clickOutsideEvent=d=>{const m=M.value;s===d.target||s.contains(d.target)||m!=null&&m.contains(d.target)||e.value()},document.addEventListener("mousedown",s.clickOutsideEvent)},unmounted:s=>{document.removeEventListener("mousedown",s.clickOutsideEvent)}};T(v,s=>{s&&ge(()=>{const e=C.value;if(e){const d=e.querySelector(".menu-item-button.selected");d&&d.scrollIntoView({block:"nearest"})}})});const o=b(()=>{var s;return((s=i.value)==null?void 0:s.llm_settings_overridden)??!1}),H=b(()=>!l.value.lollms_model_name||!R.value?null:R.value.find(s=>s.id===l.value.lollms_model_name)),j=b(()=>{var s,e;return((e=(s=H.value)==null?void 0:s.alias)==null?void 0:e.ctx_size_locked)===!0}),_=b({get:()=>l.value.lollms_model_name,set:s=>{o.value||(l.value.lollms_model_name=s)}}),z=b(()=>{if(!_.value)return null;for(const s of L.value){const e=s.items.find(d=>d.id===_.value);if(e)return e}return null}),G=b(()=>{if(!k.value)return L.value;const s=k.value.toLowerCase(),e=[];for(const d of L.value){const m=d.items.filter(a=>a.name.toLowerCase().includes(s));m.length>0&&e.push({...d,items:m})}return e});function X(s){_.value=s,v.value=!1}const E=()=>{i.value&&(l.value={lollms_model_name:i.value.lollms_model_name||"",llm_ctx_size:i.value.llm_ctx_size??null,llm_temperature:i.value.llm_temperature??null,llm_top_k:i.value.llm_top_k??null,llm_top_p:i.value.llm_top_p??null,llm_repeat_penalty:i.value.llm_repeat_penalty??null,llm_repeat_last_n:i.value.llm_repeat_last_n??null,put_thoughts_in_context:i.value.put_thoughts_in_context||!1,reasoning_activation:i.value.reasoning_activation||!1,reasoning_effort:i.value.reasoning_effort||null,reasoning_summary:i.value.reasoning_summary||!1},N=JSON.parse(JSON.stringify(l.value)),S.value=!1)};oe(()=>{w.availableLollmsModels.length===0&&w.fetchAvailableLollmsModels(),E()}),T(i,E,{deep:!0}),T(l,s=>{S.value=JSON.stringify(s)!==JSON.stringify(N)},{deep:!0});async function Y(){y.value=!0;try{await O.updateUserPreferences(l.value)}catch{}finally{y.value=!1}}return(s,e)=>{var d,m;return n(),u("div",pe,[e[29]||(e[29]=t("div",{class:"px-4 py-5 sm:p-6"},[t("h2",{class:"text-xl font-bold leading-6 text-gray-900 dark:text-white"},"LLM Configuration"),t("p",{class:"mt-1 max-w-2xl text-sm text-gray-500 dark:text-gray-400"}," Select your default text generation model and adjust its parameters. ")],-1)),t("div",fe,[t("form",{onSubmit:F(Y,["prevent"]),class:"p-4 sm:p-6 space-y-6"},[t("div",null,[e[14]||(e[14]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Default LLM Model",-1)),t("div",ve,[t("button",{ref_key:"llmTriggerRef",ref:M,onClick:e[0]||(e[0]=a=>v.value=!v.value),type:"button",class:"toolbox-select truncate w-full flex items-center justify-between"},[t("div",be,[(d=z.value)!=null&&d.icon_base64?(n(),u("img",{key:0,src:z.value.icon_base64,class:"h-8 w-8 rounded-md object-cover"},null,8,xe)):(n(),u("span",_e,[P($,{class:"w-5 h-5"})])),t("div",ye,[t("span",ke,V(((m=z.value)==null?void 0:m.name)||"Select a Model"),1)])]),e[13]||(e[13]=t("svg",{class:"w-4 h-4 text-gray-400 flex-shrink-0",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor"},[t("path",{"fill-rule":"evenodd",d:"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z","clip-rule":"evenodd"})],-1))],512),(n(),h(me,{to:"body"},[P(ue,{"enter-active-class":"transition ease-out duration-100","enter-from-class":"transform opacity-0 scale-95","enter-to-class":"transform opacity-100 scale-100","leave-active-class":"transition ease-in duration-75","leave-from-class":"transform opacity-100 scale-100","leave-to-class":"transform opacity-0 scale-95"},{default:ne(()=>[v.value?c((n(),u("div",{key:0,ref_key:"llmFloatingRef",ref:C,style:re(B(K)),class:"z-50 w-80 origin-top-left rounded-md bg-white dark:bg-gray-800 shadow-lg ring-1 ring-black ring-opacity-5 dark:ring-gray-700 focus:outline-none py-1 flex flex-col max-h-[50vh]"},[t("div",he,[c(t("input",{type:"text","onUpdate:modelValue":e[1]||(e[1]=a=>k.value=a),onClick:e[2]||(e[2]=F(()=>{},["stop"])),placeholder:"Search models...",class:"input-field-sm w-full"},null,512),[[f,k.value]])]),t("div",we,[B(J)?(n(),u("div",Le,"Loading models...")):x("",!0),(n(!0),u(D,null,I(G.value,a=>(n(),u("div",{key:a.label},[t("h4",Se,V(a.label),1),(n(!0),u(D,null,I(a.items,g=>{var U;return n(),u("button",{key:g.id,onClick:et=>X(g.id),class:r(["menu-item-button",{selected:_.value===g.id}])},[t("div",Ce,[g.icon_base64?(n(),u("img",{key:0,src:g.icon_base64,class:"h-6 w-6 rounded-md object-cover flex-shrink-0"},null,8,ze)):(n(),h($,{key:1,class:"w-6 h-6 p-0.5 text-gray-500 dark:text-gray-400 flex-shrink-0"})),t("div",Te,[t("p",Ve,V(g.name),1)])]),t("div",Oe,[_.value===g.id?(n(),h(ie,{key:0,class:"w-5 h-5 text-blue-600 dark:text-blue-400"})):x("",!0),(U=g.alias)!=null&&U.has_vision?(n(),h(de,{key:1,class:"w-5 h-5 text-green-500",title:"Vision active"})):x("",!0)])],10,Me)}),128))]))),128))])],4)),[[q,()=>v.value=!1]]):x("",!0)]),_:1})]))])]),o.value?(n(),u("div",Re,e[15]||(e[15]=[t("p",{class:"font-semibold"},"Settings Overridden by Admin",-1),t("p",{class:"text-sm"},"An administrator has set and locked the generation parameters for this model. Your personal settings will not apply.",-1)]))):x("",!0),t("fieldset",{class:r(["grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",{"opacity-60":o.value}])},[t("div",null,[e[16]||(e[16]=t("label",{for:"contextSize",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Context Size (tokens)",-1)),c(t("input",{type:"number",id:"contextSize","onUpdate:modelValue":e[3]||(e[3]=a=>l.value.llm_ctx_size=a),class:"input-field mt-1",placeholder:"e.g., 4096",disabled:o.value||j.value},null,8,Ne),[[f,l.value.llm_ctx_size,void 0,{number:!0}]]),j.value?(n(),u("p",je,"This model has a fixed context size set by the administrator.")):x("",!0)]),t("div",{class:r({"cursor-not-allowed":o.value})},[e[17]||(e[17]=t("label",{for:"temperature",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Temperature",-1)),c(t("input",{type:"number",id:"temperature","onUpdate:modelValue":e[4]||(e[4]=a=>l.value.llm_temperature=a),class:"input-field mt-1",step:"0.01",min:"0",max:"2",placeholder:"e.g., 0.7",disabled:o.value},null,8,Ee),[[f,l.value.llm_temperature,void 0,{number:!0}]])],2),t("div",{class:r({"cursor-not-allowed":o.value})},[e[18]||(e[18]=t("label",{for:"topK",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Top K",-1)),c(t("input",{type:"number",id:"topK","onUpdate:modelValue":e[5]||(e[5]=a=>l.value.llm_top_k=a),class:"input-field mt-1",step:"1",min:"1",placeholder:"e.g., 50",disabled:o.value},null,8,Ue),[[f,l.value.llm_top_k,void 0,{number:!0}]])],2),t("div",{class:r({"cursor-not-allowed":o.value})},[e[19]||(e[19]=t("label",{for:"topP",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Top P",-1)),c(t("input",{type:"number",id:"topP","onUpdate:modelValue":e[6]||(e[6]=a=>l.value.llm_top_p=a),class:"input-field mt-1",step:"0.01",min:"0",max:"1",placeholder:"e.g., 0.95",disabled:o.value},null,8,Ae),[[f,l.value.llm_top_p,void 0,{number:!0}]])],2),t("div",{class:r({"cursor-not-allowed":o.value})},[e[20]||(e[20]=t("label",{for:"repeatPenalty",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Repeat Penalty",-1)),c(t("input",{type:"number",id:"repeatPenalty","onUpdate:modelValue":e[7]||(e[7]=a=>l.value.llm_repeat_penalty=a),class:"input-field mt-1",step:"0.01",min:"0",placeholder:"e.g., 1.1",disabled:o.value},null,8,Fe),[[f,l.value.llm_repeat_penalty,void 0,{number:!0}]])],2),t("div",{class:r({"cursor-not-allowed":o.value})},[e[21]||(e[21]=t("label",{for:"repeatLastN",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Repeat Last N",-1)),c(t("input",{type:"number",id:"repeatLastN","onUpdate:modelValue":e[8]||(e[8]=a=>l.value.llm_repeat_last_n=a),class:"input-field mt-1",step:"1",min:"0",placeholder:"e.g., 64",disabled:o.value},null,8,Pe),[[f,l.value.llm_repeat_last_n,void 0,{number:!0}]])],2)],2),t("div",$e,[e[28]||(e[28]=t("h3",{class:"font-semibold text-gray-800 dark:text-gray-200 mb-3"},"Reasoning Capabilities",-1)),t("div",{class:r(["grid grid-cols-1 md:grid-cols-2 gap-6",{"opacity-60":o.value}])},[t("div",Be,[e[22]||(e[22]=t("span",{class:"flex-grow flex flex-col pr-4"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Enable Reasoning (Thinking)"),t("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Activates thought generation if supported by the model.")],-1)),t("button",{onClick:e[9]||(e[9]=a=>l.value.reasoning_activation=!l.value.reasoning_activation),type:"button",disabled:o.value,class:r([l.value.reasoning_activation?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[t("span",{class:r([l.value.reasoning_activation?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],10,De)]),t("div",{class:r({"cursor-not-allowed":o.value})},[e[24]||(e[24]=t("label",{for:"reasoning-effort",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Reasoning Effort",-1)),c(t("select",{id:"reasoning-effort","onUpdate:modelValue":e[10]||(e[10]=a=>l.value.reasoning_effort=a),class:"input-field mt-1",disabled:o.value},e[23]||(e[23]=[t("option",{value:null},"Default",-1),t("option",{value:"low"},"Low",-1),t("option",{value:"medium"},"Medium",-1),t("option",{value:"high"},"High",-1)]),8,Ie),[[ce,l.value.reasoning_effort]]),e[25]||(e[25]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"Controls the depth of reasoning (model dependent).",-1))],2),t("div",Je,[e[26]||(e[26]=t("span",{class:"flex-grow flex flex-col pr-4"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},"Reasoning Summary"),t("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Enable summarization of reasoning steps in output.")],-1)),t("button",{onClick:e[11]||(e[11]=a=>l.value.reasoning_summary=!l.value.reasoning_summary),type:"button",disabled:o.value,class:r([l.value.reasoning_summary?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[t("span",{class:r([l.value.reasoning_summary?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],10,Ke)]),t("div",qe,[e[27]||(e[27]=t("span",{class:"flex-grow flex flex-col pr-4"},[t("span",{class:"text-sm font-medium text-gray-900 dark:text-gray-100"},'Include "think" blocks in context'),t("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Allows the AI to see its previous reasoning steps.")],-1)),t("button",{onClick:e[12]||(e[12]=a=>l.value.put_thoughts_in_context=!l.value.put_thoughts_in_context),type:"button",disabled:o.value,class:r([l.value.put_thoughts_in_context?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"])},[t("span",{class:r([l.value.put_thoughts_in_context?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"])},null,2)],10,He)])],2)]),t("div",Ge,[t("button",{type:"submit",class:"btn btn-primary",disabled:y.value||!S.value||o.value},[y.value?(n(),u("span",Ye,"Saving...")):(n(),u("span",Qe,"Save LLM Settings"))],8,Xe)])],32)])])}}},lt=Q(We,[["__scopeId","data-v-de2b5b61"]]);export{lt as default};
frontend/dist/ui_assets/LoginModal-DkbKVVEW.js+1 −1 renamed@@ -1 +1 @@ -import{q as L,d as l,l as s,e,u as S,K as V,s as i,c as B,o as j,w as z,O as E,n as I,g as N,f as A,H as v,h as u,z as w,L as b,t as h,m as g}from"./index-CEXks4lv.js";import{_ as U}from"./GenericModal-Br5hR2Sz.js";const q={},D={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function P(y,o){return s(),l("svg",D,o[0]||(o[0]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15M12 9l-3 3m0 0l3 3m-3-3h12.75"},null,-1)]))}const T=L(q,[["render",P]]),$={class:"text-center mb-6"},F={class:"inline-flex items-center justify-center w-12 h-12 rounded-full bg-blue-100 text-blue-600 dark:bg-blue-900/30 dark:text-blue-400 mb-3"},H={class:"mt-1"},O=["disabled"],R={class:"mt-1"},W=["disabled"],K={class:"mt-2 text-right"},G={key:0,class:"rounded-md bg-red-50 dark:bg-red-900/20 p-3"},J={class:"flex"},Q={class:"ml-3"},X={class:"text-sm font-medium text-red-800 dark:text-red-200"},Y=["disabled"],Z={key:0,class:"flex items-center"},ee={key:1},te={key:1,class:"relative"},se=["src"],oe={class:"text-sm text-center text-gray-600 dark:text-gray-400 pt-2"},ne={__name:"LoginModal",setup(y){const o=S(),n=V(),c=i(""),m=i(""),a=i(!1),d=i(""),x=i(null),r=B(()=>o.ssoClientConfig);j(()=>{o.ssoClientConfig.enabled||o.fetchSsoClientConfig()});function k(){window.location.href="/api/sso-client/login"}z(()=>n.activeModal,p=>{p==="login"&&E(()=>{var t;(t=x.value)==null||t.focus()})});const _=async()=>{d.value="",a.value=!0;try{await o.login(c.value,m.value)}catch{d.value="Incorrect username or password."}finally{a.value=!1}},C=()=>{n.closeModal("login"),n.openModal("register")},M=()=>{n.closeModal("login"),n.openModal("forgotPassword")};return(p,t)=>(s(),I(U,{modalName:"login",title:"Welcome Back",maxWidthClass:"max-w-md"},{body:N(()=>[e("div",$,[e("div",F,[A(T,{class:"w-6 h-6"})]),t[2]||(t[2]=e("h3",{class:"text-lg font-medium text-gray-900 dark:text-white"},"Sign in to your account",-1)),t[3]||(t[3]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"},"Enter your credentials to access your workspace.",-1))]),e("form",{onSubmit:v(_,["prevent"]),class:"space-y-5"},[e("div",null,[t[4]||(t[4]=e("label",{for:"login-username",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Username or Email",-1)),e("div",H,[w(e("input",{ref_key:"usernameInput",ref:x,"onUpdate:modelValue":t[0]||(t[0]=f=>c.value=f),type:"text",id:"login-username",required:"",disabled:a.value,class:"input-field w-full",placeholder:"Enter username",autocomplete:"username"},null,8,O),[[b,c.value]])])]),e("div",null,[t[5]||(t[5]=e("label",{for:"login-password",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Password",-1)),e("div",R,[w(e("input",{"onUpdate:modelValue":t[1]||(t[1]=f=>m.value=f),type:"password",id:"login-password",required:"",disabled:a.value,class:"input-field w-full",placeholder:"Enter password",autocomplete:"current-password"},null,8,W),[[b,m.value]])]),e("div",K,[e("a",{onClick:v(M,["prevent"]),href:"#",class:"text-sm font-medium text-blue-600 hover:text-blue-500 dark:text-blue-400 dark:hover:text-blue-300 transition-colors"}," Forgot password? ")])]),d.value?(s(),l("div",G,[e("div",J,[t[6]||(t[6]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",viewBox:"0 0 20 20",fill:"currentColor"},[e("path",{"fill-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","clip-rule":"evenodd"})])],-1)),e("div",Q,[e("h3",X,h(d.value),1)])])])):u("",!0),e("div",null,[e("button",{type:"submit",class:"btn btn-primary w-full justify-center py-2.5 text-sm font-semibold shadow-sm hover:shadow transition-all",disabled:a.value},[a.value?(s(),l("span",Z,t[7]||(t[7]=[e("svg",{class:"animate-spin -ml-1 mr-2 h-4 w-4 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})],-1),g(" Signing in... ")]))):(s(),l("span",ee,"Sign In"))],8,Y)]),r.value.enabled?(s(),l("div",te,t[8]||(t[8]=[e("div",{class:"absolute inset-0 flex items-center"},[e("div",{class:"w-full border-t border-gray-300 dark:border-gray-600"})],-1),e("div",{class:"relative flex justify-center text-sm"},[e("span",{class:"px-2 bg-white dark:bg-gray-800 text-gray-500"},"Or continue with")],-1)]))):u("",!0),r.value.enabled?(s(),l("button",{key:2,onClick:k,type:"button",class:"btn btn-secondary w-full justify-center flex items-center gap-3 py-2.5"},[r.value.icon_url?(s(),l("img",{key:0,src:r.value.icon_url,alt:"",class:"w-5 h-5"},null,8,se)):u("",!0),g(" "+h(r.value.display_name),1)])):u("",!0),e("div",oe,[t[9]||(t[9]=g(" Don't have an account? ")),e("a",{onClick:v(C,["prevent"]),href:"#",class:"font-semibold text-blue-600 hover:text-blue-500 dark:text-blue-400 dark:hover:text-blue-300 ml-1 transition-colors"}," Register now ")])],32)]),_:1}))}};export{ne as default}; +import{q as L,d as l,l as s,e,u as S,K as V,s as i,c as B,o as j,w as z,O as E,n as I,g as N,f as A,H as v,h as u,z as w,L as b,t as h,m as g}from"./index-BBRgbnZQ.js";import{_ as U}from"./GenericModal-eXiOHk6I.js";const q={},D={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"};function P(y,o){return s(),l("svg",D,o[0]||(o[0]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.75 9V5.25A2.25 2.25 0 0013.5 3h-6a2.25 2.25 0 00-2.25 2.25v13.5A2.25 2.25 0 007.5 21h6a2.25 2.25 0 002.25-2.25V15M12 9l-3 3m0 0l3 3m-3-3h12.75"},null,-1)]))}const T=L(q,[["render",P]]),$={class:"text-center mb-6"},F={class:"inline-flex items-center justify-center w-12 h-12 rounded-full bg-blue-100 text-blue-600 dark:bg-blue-900/30 dark:text-blue-400 mb-3"},H={class:"mt-1"},O=["disabled"],R={class:"mt-1"},W=["disabled"],K={class:"mt-2 text-right"},G={key:0,class:"rounded-md bg-red-50 dark:bg-red-900/20 p-3"},J={class:"flex"},Q={class:"ml-3"},X={class:"text-sm font-medium text-red-800 dark:text-red-200"},Y=["disabled"],Z={key:0,class:"flex items-center"},ee={key:1},te={key:1,class:"relative"},se=["src"],oe={class:"text-sm text-center text-gray-600 dark:text-gray-400 pt-2"},ne={__name:"LoginModal",setup(y){const o=S(),n=V(),c=i(""),m=i(""),a=i(!1),d=i(""),x=i(null),r=B(()=>o.ssoClientConfig);j(()=>{o.ssoClientConfig.enabled||o.fetchSsoClientConfig()});function k(){window.location.href="/api/sso-client/login"}z(()=>n.activeModal,p=>{p==="login"&&E(()=>{var t;(t=x.value)==null||t.focus()})});const _=async()=>{d.value="",a.value=!0;try{await o.login(c.value,m.value)}catch{d.value="Incorrect username or password."}finally{a.value=!1}},C=()=>{n.closeModal("login"),n.openModal("register")},M=()=>{n.closeModal("login"),n.openModal("forgotPassword")};return(p,t)=>(s(),I(U,{modalName:"login",title:"Welcome Back",maxWidthClass:"max-w-md"},{body:N(()=>[e("div",$,[e("div",F,[A(T,{class:"w-6 h-6"})]),t[2]||(t[2]=e("h3",{class:"text-lg font-medium text-gray-900 dark:text-white"},"Sign in to your account",-1)),t[3]||(t[3]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"},"Enter your credentials to access your workspace.",-1))]),e("form",{onSubmit:v(_,["prevent"]),class:"space-y-5"},[e("div",null,[t[4]||(t[4]=e("label",{for:"login-username",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Username or Email",-1)),e("div",H,[w(e("input",{ref_key:"usernameInput",ref:x,"onUpdate:modelValue":t[0]||(t[0]=f=>c.value=f),type:"text",id:"login-username",required:"",disabled:a.value,class:"input-field w-full",placeholder:"Enter username",autocomplete:"username"},null,8,O),[[b,c.value]])])]),e("div",null,[t[5]||(t[5]=e("label",{for:"login-password",class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},"Password",-1)),e("div",R,[w(e("input",{"onUpdate:modelValue":t[1]||(t[1]=f=>m.value=f),type:"password",id:"login-password",required:"",disabled:a.value,class:"input-field w-full",placeholder:"Enter password",autocomplete:"current-password"},null,8,W),[[b,m.value]])]),e("div",K,[e("a",{onClick:v(M,["prevent"]),href:"#",class:"text-sm font-medium text-blue-600 hover:text-blue-500 dark:text-blue-400 dark:hover:text-blue-300 transition-colors"}," Forgot password? ")])]),d.value?(s(),l("div",G,[e("div",J,[t[6]||(t[6]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",viewBox:"0 0 20 20",fill:"currentColor"},[e("path",{"fill-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","clip-rule":"evenodd"})])],-1)),e("div",Q,[e("h3",X,h(d.value),1)])])])):u("",!0),e("div",null,[e("button",{type:"submit",class:"btn btn-primary w-full justify-center py-2.5 text-sm font-semibold shadow-sm hover:shadow transition-all",disabled:a.value},[a.value?(s(),l("span",Z,t[7]||(t[7]=[e("svg",{class:"animate-spin -ml-1 mr-2 h-4 w-4 text-white",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})],-1),g(" Signing in... ")]))):(s(),l("span",ee,"Sign In"))],8,Y)]),r.value.enabled?(s(),l("div",te,t[8]||(t[8]=[e("div",{class:"absolute inset-0 flex items-center"},[e("div",{class:"w-full border-t border-gray-300 dark:border-gray-600"})],-1),e("div",{class:"relative flex justify-center text-sm"},[e("span",{class:"px-2 bg-white dark:bg-gray-800 text-gray-500"},"Or continue with")],-1)]))):u("",!0),r.value.enabled?(s(),l("button",{key:2,onClick:k,type:"button",class:"btn btn-secondary w-full justify-center flex items-center gap-3 py-2.5"},[r.value.icon_url?(s(),l("img",{key:0,src:r.value.icon_url,alt:"",class:"w-5 h-5"},null,8,se)):u("",!0),g(" "+h(r.value.display_name),1)])):u("",!0),e("div",oe,[t[9]||(t[9]=g(" Don't have an account? ")),e("a",{onClick:v(C,["prevent"]),href:"#",class:"font-semibold text-blue-600 hover:text-blue-500 dark:text-blue-400 dark:hover:text-blue-300 ml-1 transition-colors"}," Register now ")])],32)]),_:1}))}};export{ne as default};
frontend/dist/ui_assets/LogsAndAnalysis-BIfZWm-o.js+1 −0 added@@ -0,0 +1 @@ +import{u as w}from"./admin-CwLQr1mG.js";import{Q as _,K as h,s as u,c as A,w as S,o as L,d as l,l as n,e as s,f as r,m as y,I as g,n as m,an as p,t as x,ao as I,M as C}from"./index-BBRgbnZQ.js";import{I as T}from"./IconPlayCircle-D2gooLkD.js";const z={class:"space-y-6"},M={class:"flex items-center justify-between"},B={class:"bg-white dark:bg-gray-800 rounded-xl shadow-sm border dark:border-gray-700 overflow-hidden"},D={class:"p-6 border-b dark:border-gray-700 flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4"},N=["disabled"],R={class:"p-6"},V={key:0,class:"flex flex-col items-center justify-center py-12 text-blue-600 dark:text-blue-400"},j={key:1,class:"space-y-4"},U={class:"flex items-center gap-2 text-sm text-green-600 dark:text-green-400 mb-2"},E={class:"text-gray-500"},F={class:"prose dark:prose-invert max-w-none bg-gray-50 dark:bg-gray-900/50 p-6 rounded-lg border dark:border-gray-700"},K={key:2,class:"text-center py-12 text-gray-500 dark:text-gray-400 border-2 border-dashed border-gray-200 dark:border-gray-700 rounded-lg"},H={__name:"LogsAndAnalysis",setup(P){const b=w(),i=_(),f=h(),o=u(null),t=u(!1),k=A(()=>i.tasks.filter(a=>a.name==="Analyze System Logs").sort((a,e)=>new Date(e.created_at)-new Date(a.created_at)));S(k,a=>{var c;const e=a[0];e?e.status==="running"||e.status==="pending"?t.value=!0:(t.value=!1,e.status==="completed"&&((c=e.result)!=null&&c.report)&&(o.value=e.result)):(t.value=!1,o.value=null)},{immediate:!0,deep:!0}),L(()=>{i.fetchTasks()});async function d(){try{await b.analyzeSystemLogs(),setTimeout(()=>i.fetchTasks(),500)}catch{}}function v(){f.openModal("systemLog")}return(a,e)=>(n(),l("div",z,[s("div",M,[e[1]||(e[1]=s("h3",{class:"text-xl font-bold text-gray-900 dark:text-white"},"System Logs & Analysis",-1)),s("button",{onClick:v,class:"btn btn-secondary btn-sm flex items-center gap-2"},[r(g,{class:"w-4 h-4"}),e[0]||(e[0]=y(" View Raw Logs "))])]),s("div",B,[s("div",D,[e[2]||(e[2]=s("div",null,[s("h4",{class:"text-lg font-bold text-gray-900 dark:text-white"},"AI Log Analysis"),s("p",{class:"text-sm text-gray-500 dark:text-gray-400 mt-1"}," Use the AI to scan recent tasks and logs for errors, warnings, and potential issues. ")],-1)),s("button",{onClick:d,disabled:t.value,class:"btn btn-primary flex items-center gap-2"},[t.value?(n(),m(p,{key:0,class:"w-5 h-5 animate-spin"})):(n(),m(T,{key:1,class:"w-5 h-5"})),y(" "+x(t.value?"Analyzing...":"Regenerate Analysis"),1)],8,N)]),s("div",R,[t.value?(n(),l("div",V,[r(p,{class:"w-10 h-10 animate-spin mb-3"}),e[3]||(e[3]=s("p",{class:"font-medium"},"Analyzing system logs...",-1))])):o.value?(n(),l("div",j,[s("div",U,[r(I,{class:"w-5 h-5"}),e[4]||(e[4]=s("span",{class:"font-semibold"},"Analysis Complete",-1)),e[5]||(e[5]=s("span",{class:"text-gray-400 mx-2"},"|",-1)),s("span",E,x(new Date(o.value.generated_at).toLocaleString()),1)]),s("div",F,[r(C,{content:o.value.report},null,8,["content"])])])):(n(),l("div",K,[r(g,{class:"w-12 h-12 mx-auto text-gray-300 dark:text-gray-600 mb-3"}),e[6]||(e[6]=s("p",null,"No analysis report available.",-1)),s("button",{onClick:d,class:"text-blue-600 hover:underline mt-2"},"Start Analysis")]))])])]))}};export{H as default};
frontend/dist/ui_assets/LogsAndAnalysis-CMhzcBQa.js+0 −1 removed@@ -1 +0,0 @@ -import{u as w}from"./admin-Dmx5gjU7.js";import{a8 as _,K as h,s as u,c as A,w as S,o as L,d as l,l as n,e as s,f as r,m as y,I as g,n as m,an as p,t as x,ao as C,M as I}from"./index-CEXks4lv.js";import{I as T}from"./IconPlayCircle-ClB9mJda.js";const z={class:"space-y-6"},M={class:"flex items-center justify-between"},B={class:"bg-white dark:bg-gray-800 rounded-xl shadow-sm border dark:border-gray-700 overflow-hidden"},D={class:"p-6 border-b dark:border-gray-700 flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4"},N=["disabled"],R={class:"p-6"},V={key:0,class:"flex flex-col items-center justify-center py-12 text-blue-600 dark:text-blue-400"},j={key:1,class:"space-y-4"},U={class:"flex items-center gap-2 text-sm text-green-600 dark:text-green-400 mb-2"},E={class:"text-gray-500"},F={class:"prose dark:prose-invert max-w-none bg-gray-50 dark:bg-gray-900/50 p-6 rounded-lg border dark:border-gray-700"},K={key:2,class:"text-center py-12 text-gray-500 dark:text-gray-400 border-2 border-dashed border-gray-200 dark:border-gray-700 rounded-lg"},J={__name:"LogsAndAnalysis",setup(P){const b=w(),i=_(),f=h(),o=u(null),t=u(!1),k=A(()=>i.tasks.filter(a=>a.name==="Analyze System Logs").sort((a,e)=>new Date(e.created_at)-new Date(a.created_at)));S(k,a=>{var c;const e=a[0];e?e.status==="running"||e.status==="pending"?t.value=!0:(t.value=!1,e.status==="completed"&&((c=e.result)!=null&&c.report)&&(o.value=e.result)):(t.value=!1,o.value=null)},{immediate:!0,deep:!0}),L(()=>{i.fetchTasks()});async function d(){try{await b.analyzeSystemLogs(),setTimeout(()=>i.fetchTasks(),500)}catch{}}function v(){f.openModal("systemLog")}return(a,e)=>(n(),l("div",z,[s("div",M,[e[1]||(e[1]=s("h3",{class:"text-xl font-bold text-gray-900 dark:text-white"},"System Logs & Analysis",-1)),s("button",{onClick:v,class:"btn btn-secondary btn-sm flex items-center gap-2"},[r(g,{class:"w-4 h-4"}),e[0]||(e[0]=y(" View Raw Logs "))])]),s("div",B,[s("div",D,[e[2]||(e[2]=s("div",null,[s("h4",{class:"text-lg font-bold text-gray-900 dark:text-white"},"AI Log Analysis"),s("p",{class:"text-sm text-gray-500 dark:text-gray-400 mt-1"}," Use the AI to scan recent tasks and logs for errors, warnings, and potential issues. ")],-1)),s("button",{onClick:d,disabled:t.value,class:"btn btn-primary flex items-center gap-2"},[t.value?(n(),m(p,{key:0,class:"w-5 h-5 animate-spin"})):(n(),m(T,{key:1,class:"w-5 h-5"})),y(" "+x(t.value?"Analyzing...":"Regenerate Analysis"),1)],8,N)]),s("div",R,[t.value?(n(),l("div",V,[r(p,{class:"w-10 h-10 animate-spin mb-3"}),e[3]||(e[3]=s("p",{class:"font-medium"},"Analyzing system logs...",-1))])):o.value?(n(),l("div",j,[s("div",U,[r(C,{class:"w-5 h-5"}),e[4]||(e[4]=s("span",{class:"font-semibold"},"Analysis Complete",-1)),e[5]||(e[5]=s("span",{class:"text-gray-400 mx-2"},"|",-1)),s("span",E,x(new Date(o.value.generated_at).toLocaleString()),1)]),s("div",F,[r(I,{content:o.value.report},null,8,["content"])])])):(n(),l("div",K,[r(g,{class:"w-12 h-12 mx-auto text-gray-300 dark:text-gray-600 mb-3"}),e[6]||(e[6]=s("p",null,"No analysis report available.",-1)),s("button",{onClick:d,class:"text-blue-600 hover:underline mt-2"},"Start Analysis")]))])])]))}};export{J as default};
frontend/dist/ui_assets/ManageModelsModal-CfmAM5XK.js+0 −1 removed@@ -1 +0,0 @@ -import{K as _e,P as xe,a8 as we,Q as X,c as w,s as p,w as Y,o as ke,n as A,l as n,g as he,d as o,e as t,f as E,an as j,z as x,L as h,F as B,i as Z,p as g,h as b,t as M,m as N,H as Me,ai as Ce,at as Se,aq as ee,R as Te,J as Ae}from"./index-CEXks4lv.js";import{u as Be}from"./admin-Dmx5gjU7.js";import{_ as Ie}from"./GenericModal-Br5hR2Sz.js";const De={key:0,class:"text-center p-8 text-red-500 dark:text-red-400"},ze={key:1,class:"text-center p-8"},Ne={class:"flex justify-center items-center gap-3"},$e={key:2,class:"flex gap-6 h-[70vh]"},Ue={class:"w-1/3 border-r dark:border-gray-600 pr-4 flex flex-col"},Ge={class:"relative mb-2"},Ve={class:"overflow-y-auto flex-grow"},je={key:0},Re=["onClick"],Le={class:"flex-grow min-w-0"},Pe={key:0,class:"text-xs text-gray-500 truncate"},Fe={class:"flex-shrink-0 flex items-center gap-1.5 pl-2"},Ee={key:0,class:"tag text-xs bg-blue-100 text-blue-800",title:"Binding Default"},qe={key:1,class:"tag text-xs bg-green-100 text-green-800",title:"Global Default"},Je={key:1,class:"text-center text-sm text-gray-500 py-4"},Oe={class:"w-2/3 overflow-y-auto pr-2"},We={key:0,class:"flex items-center justify-center h-full"},He={key:1},Ke={class:"font-semibold mb-4"},Qe={class:"font-mono text-blue-600 dark:text-blue-400"},Xe={key:0,class:"mt-1 p-4 text-center bg-gray-50 dark:bg-gray-700/50 rounded-lg"},Ye={key:1,class:"mt-1"},Ze={class:"group relative w-24 h-24 rounded-lg border-2 border-dashed border-gray-300 dark:border-gray-600 flex items-center justify-center"},et=["src"],tt={class:"absolute inset-0 bg-black/60 rounded-md flex items-center justify-center gap-3 opacity-0 group-hover:opacity-100 transition-opacity"},at=["disabled"],lt={key:0,class:"p-4 border rounded-lg dark:border-gray-700"},st={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},nt={class:"flex items-center gap-2"},it=["disabled"],ot={class:"mt-4 border-t pt-4 dark:border-gray-600"},rt={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},ut={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},dt={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md md:col-span-2"},vt={key:1,class:"p-4 border rounded-lg dark:border-gray-700"},ct={class:"font-medium mb-4"},gt={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},ft=["for"],mt=["type","step","id","onUpdate:modelValue","placeholder"],pt={key:1,class:"mt-1"},bt=["onClick"],yt={key:2,class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},_t={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},xt={class:"flex-grow flex flex-col"},wt={class:"text-sm font-medium"},kt={class:"text-sm text-gray-500 dark:text-gray-400"},ht={key:3,class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},Mt={class:"flex justify-end gap-3 pt-4"},Ct=["disabled"],St=["disabled"],Tt={class:"mt-6"},At={class:"space-y-4"},Bt={class:"flex items-center gap-4"},It=["disabled"],Dt={key:0,class:"text-sm text-green-600 dark:text-green-400 font-medium"},zt={key:0,class:"flex items-center gap-4"},Nt=["disabled"],$t={key:0,class:"text-sm text-green-600 dark:text-green-400 font-medium"},Rt={__name:"ManageModelsModal",setup(Ut){const y=_e(),u=Be();xe();const te=we(),{globalSettings:ae,availableBindingTypes:le,availableTtiBindingTypes:se,availableTtsBindingTypes:ne,ttiBindings:q}=X(u),{tasks:ie}=X(te),J=w(()=>y.modalData("manageModels")),i=w(()=>{var s;return(s=J.value)==null?void 0:s.binding}),d=w(()=>{var s;return(s=J.value)==null?void 0:s.bindingType}),I=p(!0),C=p(!1),$=p(!1),U=p(!1),G=p(!1),T=p(null),D=p(!1),O=p(null),m=p([]),r=p(null),V=p(""),z=p([]),oe=w(()=>q.value&&q.value.some(s=>s.is_active)),R=()=>({icon:"",title:"",name:"",description:"",has_vision:!0,ctx_size:null,ctx_size_locked:!1,temperature:null,top_k:null,top_p:null,repeat_penalty:null,repeat_last_n:null,allow_parameters_override:!0,reasoning_activation:!1,reasoning_effort:null,reasoning_summary:!1}),l=p(R()),L=w(()=>T.value?ie.value.find(s=>s.id===T.value):null),re=w(()=>D.value?!0:L.value?["pending","running"].includes(L.value.status):!1);Y(L,s=>{if(s)if(s.status==="completed"){let e=s.result;if(e&&typeof e=="string")try{e=JSON.parse(e)}catch{}let a=e&&typeof e=="object"&&e.icon_base64?e.icon_base64:typeof e=="string"?e:null;a?(l.value.icon=a.startsWith("data:image")?a:`data:image/png;base64,${a}`,y.addNotification("Icon generated successfully!","success")):y.addNotification("Icon generation completed, but no image was returned.","warning"),T.value=null}else(s.status==="failed"||s.status==="cancelled")&&(y.addNotification(`Icon generation failed: ${s.error||"Unknown error."}`,"error"),T.value=null)});const W=w(()=>{if(!V.value)return m.value;const s=V.value.toLowerCase();return m.value.filter(e=>{var a,v;return e.original_model_name.toLowerCase().includes(s)||((v=(a=e.alias)==null?void 0:a.title)==null?void 0:v.toLowerCase().includes(s))})}),H=w(()=>{const s=ae.value.find(e=>e.key==="default_lollms_model_name");return s?s.value:null}),K=w(()=>r.value&&i.value&&r.value.original_model_name===i.value.default_model_name),Q=w(()=>r.value&&i.value&&`${i.value.alias}/${r.value.original_model_name}`===H.value),ue=s=>i.value&&s===i.value.default_model_name,de=s=>i.value&&`${i.value.alias}/${s}`===H.value;async function P(){if(!i.value){I.value=!1,m.value=[];return}I.value=!0;try{switch(d.value){case"llm":m.value=await u.fetchBindingModels(i.value.id);break;case"tti":m.value=await u.fetchTtiBindingModels(i.value.id);break;case"tts":m.value=await u.fetchTtsBindingModels(i.value.id);break;case"stt":m.value=await u.fetchSttBindingModels(i.value.id);break;case"rag":m.value=await u.fetchRagBindingModels(i.value.id);break;default:m.value=[]}}finally{I.value=!1}}function F(s){var c;r.value=s;const e={...R(),...s.alias||{}};d.value==="llm"&&!e.name&&(e.name=e.title||s.original_model_name);let a;d.value==="tti"?a=se.value:d.value==="tts"?a=ne.value:d.value==="rag"?a=u.availableRagBindingTypes:a=le.value;const v=(c=i.value)==null?void 0:c.name;if(v){const _=a.find(f=>(f.binding_name||f.name)===v),k=(_==null?void 0:_.model_parameters)||(_==null?void 0:_.input_parameters)||[];z.value=k,k.forEach(f=>{f.name in e||(e[f.name]=f.default)})}else z.value=[];l.value=e}async function ve(){if(!(!r.value||!i.value||d.value!=="llm")){G.value=!0;try{const s=await u.getModelCtxSize(i.value.id,r.value.original_model_name);s!==null&&(l.value.ctx_size=s)}finally{G.value=!1}}}async function ce(){if(!l.value.title&&!r.value.original_model_name){y.addNotification("Please provide an Alias Title to generate an icon.","warning");return}D.value=!0,T.value=null;try{const e=`a high-quality, abstract, minimalist, vector logo for an AI model named "${l.value.title||r.value.original_model_name}". Description: ${l.value.description||"General purpose model."}`,a=await u.generateIconForModel(e);a!=null&&a.id&&(T.value=a.id,y.addNotification("Icon generation started...","info"))}finally{D.value=!1}}async function ge(){if(!(!r.value||!i.value)){C.value=!0;try{const s={...l.value};let e={};d.value==="llm"?(s.title&&(s.name=s.title),["ctx_size","temperature","top_k","top_p","repeat_penalty","repeat_last_n"].forEach(v=>{const c=s[v];s[v]=c===""||c===null||isNaN(parseFloat(c))?null:Number(c)}),e={original_model_name:r.value.original_model_name,alias:s},await u.saveModelAlias(i.value.id,e)):(z.value.forEach(v=>{if(["int","float"].includes(v.type)){const c=s[v.name];s[v.name]=c===""||c===null||isNaN(parseFloat(c))?null:Number(c)}}),e={original_model_name:r.value.original_model_name,alias:s},d.value==="tti"?await u.saveTtiModelAlias(i.value.id,e):d.value==="tts"?await u.saveTtsModelAlias(i.value.id,e):d.value==="stt"?await u.saveSttModelAlias(i.value.id,e):d.value==="rag"&&await u.saveRagModelAlias(i.value.id,e)),await P();const a=m.value.find(v=>v.original_model_name===r.value.original_model_name);a&&F(a)}finally{C.value=!1}}}async function fe(){var s;if(!(!((s=r.value)!=null&&s.alias)||!i.value)&&await y.showConfirmation({title:"Delete Alias?",message:`Delete the alias for '${r.value.original_model_name}'?`,confirmText:"Delete"})){C.value=!0;try{switch(d.value){case"llm":await u.deleteModelAlias(i.value.id,r.value.original_model_name);break;case"tti":await u.deleteTtiModelAlias(i.value.id,r.value.original_model_name);break;case"tts":await u.deleteTtsModelAlias(i.value.id,r.value.original_model_name);break;case"rag":await u.deleteRagModelAlias(i.value.id,r.value.original_model_name);break}await P();const e=m.value.find(a=>a.original_model_name===r.value.original_model_name);F(e||m.value[0]||null)}finally{C.value=!1}}}async function me(){if(!(!r.value||!i.value)){$.value=!0;try{const s={default_model_name:r.value.original_model_name};switch(d.value){case"llm":await u.updateBinding(i.value.id,s);break;case"tti":await u.updateTtiBinding(i.value.id,s);break;case"tts":await u.updateTtsBinding(i.value.id,s);break}y.addNotification("Binding default model updated.","success")}finally{$.value=!1}}}async function pe(){if(!(!r.value||!i.value||d.value!=="llm")){U.value=!0;try{const s=`${i.value.alias}/${r.value.original_model_name}`;await u.updateGlobalSettings({default_lollms_model_name:s}),y.addNotification("Global default model for new users has been updated.","success")}finally{U.value=!1}}}function be(){O.value.click()}function ye(s){const e=s.target.files[0];if(!e)return;if(e.size>5*1024*1024){y.addNotification("File is too large (max 5MB).","error");return}if(!["image/jpeg","image/png","image/webp"].includes(e.type)){y.addNotification("Invalid file type. Use JPG, PNG, or WEBP.","error");return}const a=new FileReader;a.onload=v=>{const c=new Image;c.onload=()=>{const _=document.createElement("canvas"),k=128;let{width:f,height:S}=c;f>S?f>k&&(S*=k/f,f=k):S>k&&(f*=k/S,S=k),_.width=f,_.height=S,_.getContext("2d").drawImage(c,0,0,f,S),l.value.icon=_.toDataURL("image/png")},c.src=v.target.result},a.readAsDataURL(e),s.target.value=""}return ke(()=>{u.fetchGlobalSettings(),u.fetchAvailableBindingTypes(),u.fetchAvailableTtiBindingTypes(),u.fetchAvailableTtsBindingTypes(),u.fetchTtiBindings()}),Y(i,s=>{s?(r.value=null,l.value=R(),P()):(m.value=[],I.value=!0)},{immediate:!0}),(s,e)=>(n(),A(Ie,{"modal-name":"manageModels",title:i.value?`Manage Models for: ${i.value.alias}`:"Manage Models",maxWidthClass:"max-w-5xl"},{body:he(()=>[i.value?I.value?(n(),o("div",ze,[t("div",Ne,[E(j,{class:"w-6 h-6 text-blue-500"}),e[17]||(e[17]=t("p",{class:"font-semibold"},"Loading models...",-1))]),e[18]||(e[18]=t("p",{class:"mt-3 text-sm text-gray-500 dark:text-gray-400"}," Please be patient. The first time a binding is loaded, it may need to download and install large files, which can take a very long time. ",-1))])):(n(),o("div",$e,[t("div",Ue,[t("div",Ge,[x(t("input",{type:"text","onUpdate:modelValue":e[0]||(e[0]=a=>V.value=a),placeholder:"Search models...",class:"input-field w-full pl-10"},null,512),[[h,V.value]]),e[19]||(e[19]=t("div",{class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},[t("svg",{class:"h-5 w-5 text-gray-400",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"})])],-1))]),t("div",Ve,[W.value.length>0?(n(),o("ul",je,[(n(!0),o(B,null,Z(W.value,a=>{var v;return n(),o("li",{key:a.original_model_name},[t("button",{onClick:c=>F(a),class:g(["w-full text-left p-2 rounded-md hover:bg-gray-100 dark:hover:bg-gray-700 flex items-center justify-between",{"bg-blue-100 dark:bg-blue-900/50":r.value&&r.value.original_model_name===a.original_model_name}])},[t("div",Le,[t("p",{class:g(["font-mono text-sm truncate",{"font-bold":a.alias}])},M(((v=a.alias)==null?void 0:v.title)||a.original_model_name),3),a.alias?(n(),o("p",Pe,M(a.original_model_name),1)):b("",!0)]),t("div",Fe,[ue(a.original_model_name)?(n(),o("span",Ee,"B")):b("",!0),de(a.original_model_name)?(n(),o("span",qe,"G")):b("",!0)])],10,Re)])}),128))])):(n(),o("div",Je,"No models match your search."))])]),t("div",Oe,[r.value?(n(),o("div",He,[t("h3",Ke,[e[21]||(e[21]=N("Editing Alias for: ")),t("span",Qe,M(r.value.original_model_name),1)]),t("form",{onSubmit:Me(ge,["prevent"]),class:"space-y-6 pb-6 border-b dark:border-gray-600"},[t("div",null,[e[23]||(e[23]=t("label",{class:"label"},"Icon",-1)),re.value?(n(),o("div",Xe,[E(j,{class:"w-8 h-8 mx-auto text-blue-500"}),e[22]||(e[22]=t("p",{class:"mt-3 font-semibold"},"Generation in Progress...",-1))])):(n(),o("div",Ye,[t("input",{type:"file",ref_key:"fileInput",ref:O,onChange:ye,class:"hidden",accept:"image/png, image/jpeg, image/webp"},null,544),t("div",Ze,[l.value.icon?(n(),o("img",{key:0,src:l.value.icon,alt:"Model Icon",class:"w-full h-full object-cover rounded-md"},null,8,et)):(n(),A(Ce,{key:1,class:"w-10 h-10 text-gray-400"})),t("div",tt,[t("button",{onClick:be,type:"button",title:"Upload Icon",class:"p-2 rounded-full bg-white/20 hover:bg-white/40 text-white"},[E(Se,{class:"w-6 h-6"})]),oe.value?(n(),o("button",{key:0,onClick:ce,type:"button",title:"Generate Icon with AI",class:"p-2 rounded-full bg-white/20 hover:bg-white/40 text-white",disabled:D.value},[D.value?(n(),A(j,{key:0,class:"w-6 h-6"})):(n(),A(ee,{key:1,class:"w-6 h-6"}))],8,at)):b("",!0)])])]))]),t("div",null,[e[24]||(e[24]=t("label",{for:"alias-title",class:"label"},"Alias Title",-1)),x(t("input",{id:"alias-title","onUpdate:modelValue":e[1]||(e[1]=a=>l.value.title=a),type:"text",class:"input-field",placeholder:"e.g., Llama 3 Chat (Fast)"},null,512),[[h,l.value.title]])]),t("div",null,[e[25]||(e[25]=t("label",{for:"alias-description",class:"label"},"Description",-1)),x(t("textarea",{id:"alias-description","onUpdate:modelValue":e[2]||(e[2]=a=>l.value.description=a),rows:"3",class:"input-field",placeholder:"A short description of the model's capabilities for users."},null,512),[[h,l.value.description]])]),d.value==="llm"?(n(),o("div",lt,[e[37]||(e[37]=t("h4",{class:"font-medium mb-4"},"LLM Generation Parameters",-1)),t("div",st,[t("div",null,[e[26]||(e[26]=t("label",{for:"alias-ctx-size",class:"label text-xs"},"Context Size",-1)),t("div",nt,[x(t("input",{id:"alias-ctx-size","onUpdate:modelValue":e[3]||(e[3]=a=>l.value.ctx_size=a),type:"number",class:"input-field",placeholder:"e.g., 8192"},null,512),[[h,l.value.ctx_size]]),t("button",{type:"button",onClick:ve,class:"btn btn-secondary p-2",title:"Auto-detect max context size from binding",disabled:G.value},[G.value?(n(),A(j,{key:0,class:"w-5 h-5"})):(n(),A(ee,{key:1,class:"w-5 h-5"}))],8,it)])]),t("div",null,[e[27]||(e[27]=t("label",{for:"alias-temp",class:"label text-xs"},"Temperature",-1)),x(t("input",{id:"alias-temp","onUpdate:modelValue":e[4]||(e[4]=a=>l.value.temperature=a),type:"number",step:"0.01",class:"input-field",placeholder:"e.g., 0.7"},null,512),[[h,l.value.temperature]])]),t("div",null,[e[28]||(e[28]=t("label",{for:"alias-top-k",class:"label text-xs"},"Top K",-1)),x(t("input",{id:"alias-top-k","onUpdate:modelValue":e[5]||(e[5]=a=>l.value.top_k=a),type:"number",class:"input-field",placeholder:"e.g., 50"},null,512),[[h,l.value.top_k]])]),t("div",null,[e[29]||(e[29]=t("label",{for:"alias-top-p",class:"label text-xs"},"Top P",-1)),x(t("input",{id:"alias-top-p","onUpdate:modelValue":e[6]||(e[6]=a=>l.value.top_p=a),type:"number",step:"0.01",class:"input-field",placeholder:"e.g., 0.95"},null,512),[[h,l.value.top_p]])]),t("div",null,[e[30]||(e[30]=t("label",{for:"alias-repeat-penalty",class:"label text-xs"},"Repeat Penalty",-1)),x(t("input",{id:"alias-repeat-penalty","onUpdate:modelValue":e[7]||(e[7]=a=>l.value.repeat_penalty=a),type:"number",step:"0.01",class:"input-field",placeholder:"e.g., 1.1"},null,512),[[h,l.value.repeat_penalty]])]),t("div",null,[e[31]||(e[31]=t("label",{for:"alias-repeat-last-n",class:"label text-xs"},"Repeat Last N",-1)),x(t("input",{id:"alias-repeat-last-n","onUpdate:modelValue":e[8]||(e[8]=a=>l.value.repeat_last_n=a),type:"number",class:"input-field",placeholder:"e.g., 64"},null,512),[[h,l.value.repeat_last_n]])])]),t("div",ot,[e[36]||(e[36]=t("h4",{class:"font-medium mb-2 text-sm"},"Reasoning Capabilities",-1)),t("div",rt,[t("div",ut,[e[32]||(e[32]=t("span",{class:"flex-grow flex flex-col pr-4"},[t("span",{class:"text-sm font-medium"},"Enable Reasoning (Thinking)"),t("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Activates thought generation if supported.")],-1)),t("button",{onClick:e[9]||(e[9]=a=>l.value.reasoning_activation=!l.value.reasoning_activation),type:"button",class:g([l.value.reasoning_activation?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:g([l.value.reasoning_activation?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2)]),t("div",null,[e[34]||(e[34]=t("label",{for:"reasoning-effort",class:"label text-xs"},"Reasoning Effort",-1)),x(t("select",{id:"reasoning-effort","onUpdate:modelValue":e[10]||(e[10]=a=>l.value.reasoning_effort=a),class:"input-field mt-1"},e[33]||(e[33]=[t("option",{value:null},"Default",-1),t("option",{value:"low"},"Low",-1),t("option",{value:"medium"},"Medium",-1),t("option",{value:"high"},"High",-1)]),512),[[Te,l.value.reasoning_effort]])]),t("div",dt,[e[35]||(e[35]=t("span",{class:"flex-grow flex flex-col pr-4"},[t("span",{class:"text-sm font-medium"},"Reasoning Summary"),t("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Enable summarization of reasoning steps in output.")],-1)),t("button",{onClick:e[11]||(e[11]=a=>l.value.reasoning_summary=!l.value.reasoning_summary),type:"button",class:g([l.value.reasoning_summary?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:g([l.value.reasoning_summary?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2)])])])])):b("",!0),["tti","tts"].includes(d.value)&&z.value.length>0?(n(),o("div",vt,[t("h4",ct,M(d.value.toUpperCase())+" Generation Parameters",1),t("div",gt,[(n(!0),o(B,null,Z(z.value,a=>(n(),o("div",{key:a.name},[t("label",{for:`param-${a.name}`,class:"label text-xs"},M(a.title||a.name.replace(/_/g," ")),9,ft),["str","int","float"].includes(a.type)?x((n(),o("input",{key:0,type:a.type==="str"?"text":"number",step:a.type==="float"?"0.1":"1",id:`param-${a.name}`,"onUpdate:modelValue":v=>l.value[a.name]=v,class:"input-field mt-1",placeholder:a.help||""},null,8,mt)),[[Ae,l.value[a.name]]]):a.type==="bool"?(n(),o("div",pt,[t("button",{onClick:v=>l.value[a.name]=!l.value[a.name],type:"button",class:g([l.value[a.name]?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:g([l.value[a.name]?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],10,bt)])):b("",!0)]))),128))])])):b("",!0),d.value==="llm"?(n(),o("div",yt,[e[38]||(e[38]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium"},"Vision Support"),t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Enable if this model can process images.")],-1)),t("button",{onClick:e[12]||(e[12]=a=>l.value.has_vision=!l.value.has_vision),type:"button",class:g([l.value.has_vision?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:g([l.value.has_vision?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2)])):b("",!0),t("div",_t,[t("span",xt,[t("span",wt,[d.value==="llm"?(n(),o(B,{key:0},[N("Lock Context Size")],64)):(n(),o(B,{key:1},[N("Allow User Overrides")],64))]),t("span",kt,[d.value==="llm"?(n(),o(B,{key:0},[N("If enabled, users cannot override the context size for this model.")],64)):(n(),o(B,{key:1},[N("If enabled, users can change these generation parameters for their own use.")],64))])]),d.value==="llm"?(n(),o("button",{key:0,onClick:e[13]||(e[13]=a=>l.value.ctx_size_locked=!l.value.ctx_size_locked),type:"button",class:g([l.value.ctx_size_locked?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:g([l.value.ctx_size_locked?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2)):(n(),o("button",{key:1,onClick:e[14]||(e[14]=a=>l.value.allow_parameters_override=!l.value.allow_parameters_override),type:"button",class:g([l.value.allow_parameters_override?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:g([l.value.allow_parameters_override?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2))]),d.value==="llm"?(n(),o("div",ht,[e[39]||(e[39]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium"},"Allow User Overrides"),t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"If disabled, all generation parameters above will be forced for this model.")],-1)),t("button",{onClick:e[15]||(e[15]=a=>l.value.allow_parameters_override=!l.value.allow_parameters_override),type:"button",class:g([l.value.allow_parameters_override?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:g([l.value.allow_parameters_override?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2)])):b("",!0),t("div",Mt,[r.value.alias?(n(),o("button",{key:0,type:"button",onClick:fe,class:"btn btn-danger-outline",disabled:C.value},"Delete Alias",8,Ct)):b("",!0),t("button",{type:"submit",class:"btn btn-primary",disabled:C.value},M(C.value?"Saving...":"Save Alias"),9,St)])],32),t("div",Tt,[e[40]||(e[40]=t("h3",{class:"font-semibold mb-4"},"Default Model Settings",-1)),t("div",At,[t("div",Bt,[t("button",{onClick:me,class:"btn btn-secondary w-full",disabled:K.value||$.value},M($.value?"Setting...":"Set as Binding Default"),9,It),K.value?(n(),o("p",Dt,"✓ Current binding default")):b("",!0)]),d.value==="llm"?(n(),o("div",zt,[t("button",{onClick:pe,class:"btn btn-secondary w-full",disabled:Q.value||U.value},M(U.value?"Setting...":"Set as Global Default"),9,Nt),Q.value?(n(),o("p",$t,"✓ Global default for new users")):b("",!0)])):b("",!0)])])])):(n(),o("div",We,e[20]||(e[20]=[t("p",{class:"text-gray-500"},"Select a model to configure its alias and defaults.",-1)])))])])):(n(),o("div",De,e[16]||(e[16]=[t("p",null,"Error: Binding information is missing.",-1)])))]),_:1},8,["title"]))}};export{Rt as default};
frontend/dist/ui_assets/ManageModelsModal-CFWmhBRD.js+1 −0 added@@ -0,0 +1 @@ +import{K as _e,P as xe,Q as we,R as Q,c as w,s as p,w as Y,o as ke,n as A,l as n,g as he,d as o,e as t,f as E,an as j,z as x,L as h,F as B,i as Z,p as g,h as b,t as M,m as N,H as Me,ai as Ce,at as Se,aq as ee,X as Te,J as Ae}from"./index-BBRgbnZQ.js";import{u as Be}from"./admin-CwLQr1mG.js";import{_ as Ie}from"./GenericModal-eXiOHk6I.js";const De={key:0,class:"text-center p-8 text-red-500 dark:text-red-400"},ze={key:1,class:"text-center p-8"},Ne={class:"flex justify-center items-center gap-3"},$e={key:2,class:"flex gap-6 h-[70vh]"},Ue={class:"w-1/3 border-r dark:border-gray-600 pr-4 flex flex-col"},Ge={class:"relative mb-2"},Ve={class:"overflow-y-auto flex-grow"},je={key:0},Re=["onClick"],Le={class:"flex-grow min-w-0"},Pe={key:0,class:"text-xs text-gray-500 truncate"},Fe={class:"flex-shrink-0 flex items-center gap-1.5 pl-2"},Ee={key:0,class:"tag text-xs bg-blue-100 text-blue-800",title:"Binding Default"},qe={key:1,class:"tag text-xs bg-green-100 text-green-800",title:"Global Default"},Je={key:1,class:"text-center text-sm text-gray-500 py-4"},Oe={class:"w-2/3 overflow-y-auto pr-2"},We={key:0,class:"flex items-center justify-center h-full"},He={key:1},Ke={class:"font-semibold mb-4"},Xe={class:"font-mono text-blue-600 dark:text-blue-400"},Qe={key:0,class:"mt-1 p-4 text-center bg-gray-50 dark:bg-gray-700/50 rounded-lg"},Ye={key:1,class:"mt-1"},Ze={class:"group relative w-24 h-24 rounded-lg border-2 border-dashed border-gray-300 dark:border-gray-600 flex items-center justify-center"},et=["src"],tt={class:"absolute inset-0 bg-black/60 rounded-md flex items-center justify-center gap-3 opacity-0 group-hover:opacity-100 transition-opacity"},at=["disabled"],lt={key:0,class:"p-4 border rounded-lg dark:border-gray-700"},st={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},nt={class:"flex items-center gap-2"},it=["disabled"],ot={class:"mt-4 border-t pt-4 dark:border-gray-600"},rt={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},ut={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},dt={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md md:col-span-2"},vt={key:1,class:"p-4 border rounded-lg dark:border-gray-700"},ct={class:"font-medium mb-4"},gt={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},ft=["for"],mt=["type","step","id","onUpdate:modelValue","placeholder"],pt={key:1,class:"mt-1"},bt=["onClick"],yt={key:2,class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},_t={class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},xt={class:"flex-grow flex flex-col"},wt={class:"text-sm font-medium"},kt={class:"text-sm text-gray-500 dark:text-gray-400"},ht={key:3,class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700/50 p-3 rounded-md"},Mt={class:"flex justify-end gap-3 pt-4"},Ct=["disabled"],St=["disabled"],Tt={class:"mt-6"},At={class:"space-y-4"},Bt={class:"flex items-center gap-4"},It=["disabled"],Dt={key:0,class:"text-sm text-green-600 dark:text-green-400 font-medium"},zt={key:0,class:"flex items-center gap-4"},Nt=["disabled"],$t={key:0,class:"text-sm text-green-600 dark:text-green-400 font-medium"},Rt={__name:"ManageModelsModal",setup(Ut){const y=_e(),u=Be();xe();const te=we(),{globalSettings:ae,availableBindingTypes:le,availableTtiBindingTypes:se,availableTtsBindingTypes:ne,ttiBindings:q}=Q(u),{tasks:ie}=Q(te),J=w(()=>y.modalData("manageModels")),i=w(()=>{var s;return(s=J.value)==null?void 0:s.binding}),d=w(()=>{var s;return(s=J.value)==null?void 0:s.bindingType}),I=p(!0),C=p(!1),$=p(!1),U=p(!1),G=p(!1),T=p(null),D=p(!1),O=p(null),m=p([]),r=p(null),V=p(""),z=p([]),oe=w(()=>q.value&&q.value.some(s=>s.is_active)),R=()=>({icon:"",title:"",name:"",description:"",has_vision:!0,ctx_size:null,ctx_size_locked:!1,temperature:null,top_k:null,top_p:null,repeat_penalty:null,repeat_last_n:null,allow_parameters_override:!0,reasoning_activation:!1,reasoning_effort:null,reasoning_summary:!1}),l=p(R()),L=w(()=>T.value?ie.value.find(s=>s.id===T.value):null),re=w(()=>D.value?!0:L.value?["pending","running"].includes(L.value.status):!1);Y(L,s=>{if(s)if(s.status==="completed"){let e=s.result;if(e&&typeof e=="string")try{e=JSON.parse(e)}catch{}let a=e&&typeof e=="object"&&e.icon_base64?e.icon_base64:typeof e=="string"?e:null;a?(l.value.icon=a.startsWith("data:image")?a:`data:image/png;base64,${a}`,y.addNotification("Icon generated successfully!","success")):y.addNotification("Icon generation completed, but no image was returned.","warning"),T.value=null}else(s.status==="failed"||s.status==="cancelled")&&(y.addNotification(`Icon generation failed: ${s.error||"Unknown error."}`,"error"),T.value=null)});const W=w(()=>{if(!V.value)return m.value;const s=V.value.toLowerCase();return m.value.filter(e=>{var a,v;return e.original_model_name.toLowerCase().includes(s)||((v=(a=e.alias)==null?void 0:a.title)==null?void 0:v.toLowerCase().includes(s))})}),H=w(()=>{const s=ae.value.find(e=>e.key==="default_lollms_model_name");return s?s.value:null}),K=w(()=>r.value&&i.value&&r.value.original_model_name===i.value.default_model_name),X=w(()=>r.value&&i.value&&`${i.value.alias}/${r.value.original_model_name}`===H.value),ue=s=>i.value&&s===i.value.default_model_name,de=s=>i.value&&`${i.value.alias}/${s}`===H.value;async function P(){if(!i.value){I.value=!1,m.value=[];return}I.value=!0;try{switch(d.value){case"llm":m.value=await u.fetchBindingModels(i.value.id);break;case"tti":m.value=await u.fetchTtiBindingModels(i.value.id);break;case"tts":m.value=await u.fetchTtsBindingModels(i.value.id);break;case"stt":m.value=await u.fetchSttBindingModels(i.value.id);break;case"rag":m.value=await u.fetchRagBindingModels(i.value.id);break;default:m.value=[]}}finally{I.value=!1}}function F(s){var c;r.value=s;const e={...R(),...s.alias||{}};d.value==="llm"&&!e.name&&(e.name=e.title||s.original_model_name);let a;d.value==="tti"?a=se.value:d.value==="tts"?a=ne.value:d.value==="rag"?a=u.availableRagBindingTypes:a=le.value;const v=(c=i.value)==null?void 0:c.name;if(v){const _=a.find(f=>(f.binding_name||f.name)===v),k=(_==null?void 0:_.model_parameters)||(_==null?void 0:_.input_parameters)||[];z.value=k,k.forEach(f=>{f.name in e||(e[f.name]=f.default)})}else z.value=[];l.value=e}async function ve(){if(!(!r.value||!i.value||d.value!=="llm")){G.value=!0;try{const s=await u.getModelCtxSize(i.value.id,r.value.original_model_name);s!==null&&(l.value.ctx_size=s)}finally{G.value=!1}}}async function ce(){if(!l.value.title&&!r.value.original_model_name){y.addNotification("Please provide an Alias Title to generate an icon.","warning");return}D.value=!0,T.value=null;try{const e=`a high-quality, abstract, minimalist, vector logo for an AI model named "${l.value.title||r.value.original_model_name}". Description: ${l.value.description||"General purpose model."}`,a=await u.generateIconForModel(e);a!=null&&a.id&&(T.value=a.id,y.addNotification("Icon generation started...","info"))}finally{D.value=!1}}async function ge(){if(!(!r.value||!i.value)){C.value=!0;try{const s={...l.value};let e={};d.value==="llm"?(s.title&&(s.name=s.title),["ctx_size","temperature","top_k","top_p","repeat_penalty","repeat_last_n"].forEach(v=>{const c=s[v];s[v]=c===""||c===null||isNaN(parseFloat(c))?null:Number(c)}),e={original_model_name:r.value.original_model_name,alias:s},await u.saveModelAlias(i.value.id,e)):(z.value.forEach(v=>{if(["int","float"].includes(v.type)){const c=s[v.name];s[v.name]=c===""||c===null||isNaN(parseFloat(c))?null:Number(c)}}),e={original_model_name:r.value.original_model_name,alias:s},d.value==="tti"?await u.saveTtiModelAlias(i.value.id,e):d.value==="tts"?await u.saveTtsModelAlias(i.value.id,e):d.value==="stt"?await u.saveSttModelAlias(i.value.id,e):d.value==="rag"&&await u.saveRagModelAlias(i.value.id,e)),await P();const a=m.value.find(v=>v.original_model_name===r.value.original_model_name);a&&F(a)}finally{C.value=!1}}}async function fe(){var s;if(!(!((s=r.value)!=null&&s.alias)||!i.value)&&await y.showConfirmation({title:"Delete Alias?",message:`Delete the alias for '${r.value.original_model_name}'?`,confirmText:"Delete"})){C.value=!0;try{switch(d.value){case"llm":await u.deleteModelAlias(i.value.id,r.value.original_model_name);break;case"tti":await u.deleteTtiModelAlias(i.value.id,r.value.original_model_name);break;case"tts":await u.deleteTtsModelAlias(i.value.id,r.value.original_model_name);break;case"rag":await u.deleteRagModelAlias(i.value.id,r.value.original_model_name);break}await P();const e=m.value.find(a=>a.original_model_name===r.value.original_model_name);F(e||m.value[0]||null)}finally{C.value=!1}}}async function me(){if(!(!r.value||!i.value)){$.value=!0;try{const s={default_model_name:r.value.original_model_name};switch(d.value){case"llm":await u.updateBinding(i.value.id,s);break;case"tti":await u.updateTtiBinding(i.value.id,s);break;case"tts":await u.updateTtsBinding(i.value.id,s);break}y.addNotification("Binding default model updated.","success")}finally{$.value=!1}}}async function pe(){if(!(!r.value||!i.value||d.value!=="llm")){U.value=!0;try{const s=`${i.value.alias}/${r.value.original_model_name}`;await u.updateGlobalSettings({default_lollms_model_name:s}),y.addNotification("Global default model for new users has been updated.","success")}finally{U.value=!1}}}function be(){O.value.click()}function ye(s){const e=s.target.files[0];if(!e)return;if(e.size>5*1024*1024){y.addNotification("File is too large (max 5MB).","error");return}if(!["image/jpeg","image/png","image/webp"].includes(e.type)){y.addNotification("Invalid file type. Use JPG, PNG, or WEBP.","error");return}const a=new FileReader;a.onload=v=>{const c=new Image;c.onload=()=>{const _=document.createElement("canvas"),k=128;let{width:f,height:S}=c;f>S?f>k&&(S*=k/f,f=k):S>k&&(f*=k/S,S=k),_.width=f,_.height=S,_.getContext("2d").drawImage(c,0,0,f,S),l.value.icon=_.toDataURL("image/png")},c.src=v.target.result},a.readAsDataURL(e),s.target.value=""}return ke(()=>{u.fetchGlobalSettings(),u.fetchAvailableBindingTypes(),u.fetchAvailableTtiBindingTypes(),u.fetchAvailableTtsBindingTypes(),u.fetchTtiBindings()}),Y(i,s=>{s?(r.value=null,l.value=R(),P()):(m.value=[],I.value=!0)},{immediate:!0}),(s,e)=>(n(),A(Ie,{"modal-name":"manageModels",title:i.value?`Manage Models for: ${i.value.alias}`:"Manage Models",maxWidthClass:"max-w-5xl"},{body:he(()=>[i.value?I.value?(n(),o("div",ze,[t("div",Ne,[E(j,{class:"w-6 h-6 text-blue-500"}),e[17]||(e[17]=t("p",{class:"font-semibold"},"Loading models...",-1))]),e[18]||(e[18]=t("p",{class:"mt-3 text-sm text-gray-500 dark:text-gray-400"}," Please be patient. The first time a binding is loaded, it may need to download and install large files, which can take a very long time. ",-1))])):(n(),o("div",$e,[t("div",Ue,[t("div",Ge,[x(t("input",{type:"text","onUpdate:modelValue":e[0]||(e[0]=a=>V.value=a),placeholder:"Search models...",class:"input-field w-full pl-10"},null,512),[[h,V.value]]),e[19]||(e[19]=t("div",{class:"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"},[t("svg",{class:"h-5 w-5 text-gray-400",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"})])],-1))]),t("div",Ve,[W.value.length>0?(n(),o("ul",je,[(n(!0),o(B,null,Z(W.value,a=>{var v;return n(),o("li",{key:a.original_model_name},[t("button",{onClick:c=>F(a),class:g(["w-full text-left p-2 rounded-md hover:bg-gray-100 dark:hover:bg-gray-700 flex items-center justify-between",{"bg-blue-100 dark:bg-blue-900/50":r.value&&r.value.original_model_name===a.original_model_name}])},[t("div",Le,[t("p",{class:g(["font-mono text-sm truncate",{"font-bold":a.alias}])},M(((v=a.alias)==null?void 0:v.title)||a.original_model_name),3),a.alias?(n(),o("p",Pe,M(a.original_model_name),1)):b("",!0)]),t("div",Fe,[ue(a.original_model_name)?(n(),o("span",Ee,"B")):b("",!0),de(a.original_model_name)?(n(),o("span",qe,"G")):b("",!0)])],10,Re)])}),128))])):(n(),o("div",Je,"No models match your search."))])]),t("div",Oe,[r.value?(n(),o("div",He,[t("h3",Ke,[e[21]||(e[21]=N("Editing Alias for: ")),t("span",Xe,M(r.value.original_model_name),1)]),t("form",{onSubmit:Me(ge,["prevent"]),class:"space-y-6 pb-6 border-b dark:border-gray-600"},[t("div",null,[e[23]||(e[23]=t("label",{class:"label"},"Icon",-1)),re.value?(n(),o("div",Qe,[E(j,{class:"w-8 h-8 mx-auto text-blue-500"}),e[22]||(e[22]=t("p",{class:"mt-3 font-semibold"},"Generation in Progress...",-1))])):(n(),o("div",Ye,[t("input",{type:"file",ref_key:"fileInput",ref:O,onChange:ye,class:"hidden",accept:"image/png, image/jpeg, image/webp"},null,544),t("div",Ze,[l.value.icon?(n(),o("img",{key:0,src:l.value.icon,alt:"Model Icon",class:"w-full h-full object-cover rounded-md"},null,8,et)):(n(),A(Ce,{key:1,class:"w-10 h-10 text-gray-400"})),t("div",tt,[t("button",{onClick:be,type:"button",title:"Upload Icon",class:"p-2 rounded-full bg-white/20 hover:bg-white/40 text-white"},[E(Se,{class:"w-6 h-6"})]),oe.value?(n(),o("button",{key:0,onClick:ce,type:"button",title:"Generate Icon with AI",class:"p-2 rounded-full bg-white/20 hover:bg-white/40 text-white",disabled:D.value},[D.value?(n(),A(j,{key:0,class:"w-6 h-6"})):(n(),A(ee,{key:1,class:"w-6 h-6"}))],8,at)):b("",!0)])])]))]),t("div",null,[e[24]||(e[24]=t("label",{for:"alias-title",class:"label"},"Alias Title",-1)),x(t("input",{id:"alias-title","onUpdate:modelValue":e[1]||(e[1]=a=>l.value.title=a),type:"text",class:"input-field",placeholder:"e.g., Llama 3 Chat (Fast)"},null,512),[[h,l.value.title]])]),t("div",null,[e[25]||(e[25]=t("label",{for:"alias-description",class:"label"},"Description",-1)),x(t("textarea",{id:"alias-description","onUpdate:modelValue":e[2]||(e[2]=a=>l.value.description=a),rows:"3",class:"input-field",placeholder:"A short description of the model's capabilities for users."},null,512),[[h,l.value.description]])]),d.value==="llm"?(n(),o("div",lt,[e[37]||(e[37]=t("h4",{class:"font-medium mb-4"},"LLM Generation Parameters",-1)),t("div",st,[t("div",null,[e[26]||(e[26]=t("label",{for:"alias-ctx-size",class:"label text-xs"},"Context Size",-1)),t("div",nt,[x(t("input",{id:"alias-ctx-size","onUpdate:modelValue":e[3]||(e[3]=a=>l.value.ctx_size=a),type:"number",class:"input-field",placeholder:"e.g., 8192"},null,512),[[h,l.value.ctx_size]]),t("button",{type:"button",onClick:ve,class:"btn btn-secondary p-2",title:"Auto-detect max context size from binding",disabled:G.value},[G.value?(n(),A(j,{key:0,class:"w-5 h-5"})):(n(),A(ee,{key:1,class:"w-5 h-5"}))],8,it)])]),t("div",null,[e[27]||(e[27]=t("label",{for:"alias-temp",class:"label text-xs"},"Temperature",-1)),x(t("input",{id:"alias-temp","onUpdate:modelValue":e[4]||(e[4]=a=>l.value.temperature=a),type:"number",step:"0.01",class:"input-field",placeholder:"e.g., 0.7"},null,512),[[h,l.value.temperature]])]),t("div",null,[e[28]||(e[28]=t("label",{for:"alias-top-k",class:"label text-xs"},"Top K",-1)),x(t("input",{id:"alias-top-k","onUpdate:modelValue":e[5]||(e[5]=a=>l.value.top_k=a),type:"number",class:"input-field",placeholder:"e.g., 50"},null,512),[[h,l.value.top_k]])]),t("div",null,[e[29]||(e[29]=t("label",{for:"alias-top-p",class:"label text-xs"},"Top P",-1)),x(t("input",{id:"alias-top-p","onUpdate:modelValue":e[6]||(e[6]=a=>l.value.top_p=a),type:"number",step:"0.01",class:"input-field",placeholder:"e.g., 0.95"},null,512),[[h,l.value.top_p]])]),t("div",null,[e[30]||(e[30]=t("label",{for:"alias-repeat-penalty",class:"label text-xs"},"Repeat Penalty",-1)),x(t("input",{id:"alias-repeat-penalty","onUpdate:modelValue":e[7]||(e[7]=a=>l.value.repeat_penalty=a),type:"number",step:"0.01",class:"input-field",placeholder:"e.g., 1.1"},null,512),[[h,l.value.repeat_penalty]])]),t("div",null,[e[31]||(e[31]=t("label",{for:"alias-repeat-last-n",class:"label text-xs"},"Repeat Last N",-1)),x(t("input",{id:"alias-repeat-last-n","onUpdate:modelValue":e[8]||(e[8]=a=>l.value.repeat_last_n=a),type:"number",class:"input-field",placeholder:"e.g., 64"},null,512),[[h,l.value.repeat_last_n]])])]),t("div",ot,[e[36]||(e[36]=t("h4",{class:"font-medium mb-2 text-sm"},"Reasoning Capabilities",-1)),t("div",rt,[t("div",ut,[e[32]||(e[32]=t("span",{class:"flex-grow flex flex-col pr-4"},[t("span",{class:"text-sm font-medium"},"Enable Reasoning (Thinking)"),t("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Activates thought generation if supported.")],-1)),t("button",{onClick:e[9]||(e[9]=a=>l.value.reasoning_activation=!l.value.reasoning_activation),type:"button",class:g([l.value.reasoning_activation?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:g([l.value.reasoning_activation?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2)]),t("div",null,[e[34]||(e[34]=t("label",{for:"reasoning-effort",class:"label text-xs"},"Reasoning Effort",-1)),x(t("select",{id:"reasoning-effort","onUpdate:modelValue":e[10]||(e[10]=a=>l.value.reasoning_effort=a),class:"input-field mt-1"},e[33]||(e[33]=[t("option",{value:null},"Default",-1),t("option",{value:"low"},"Low",-1),t("option",{value:"medium"},"Medium",-1),t("option",{value:"high"},"High",-1)]),512),[[Te,l.value.reasoning_effort]])]),t("div",dt,[e[35]||(e[35]=t("span",{class:"flex-grow flex flex-col pr-4"},[t("span",{class:"text-sm font-medium"},"Reasoning Summary"),t("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Enable summarization of reasoning steps in output.")],-1)),t("button",{onClick:e[11]||(e[11]=a=>l.value.reasoning_summary=!l.value.reasoning_summary),type:"button",class:g([l.value.reasoning_summary?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:g([l.value.reasoning_summary?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2)])])])])):b("",!0),["tti","tts"].includes(d.value)&&z.value.length>0?(n(),o("div",vt,[t("h4",ct,M(d.value.toUpperCase())+" Generation Parameters",1),t("div",gt,[(n(!0),o(B,null,Z(z.value,a=>(n(),o("div",{key:a.name},[t("label",{for:`param-${a.name}`,class:"label text-xs"},M(a.title||a.name.replace(/_/g," ")),9,ft),["str","int","float"].includes(a.type)?x((n(),o("input",{key:0,type:a.type==="str"?"text":"number",step:a.type==="float"?"0.1":"1",id:`param-${a.name}`,"onUpdate:modelValue":v=>l.value[a.name]=v,class:"input-field mt-1",placeholder:a.help||""},null,8,mt)),[[Ae,l.value[a.name]]]):a.type==="bool"?(n(),o("div",pt,[t("button",{onClick:v=>l.value[a.name]=!l.value[a.name],type:"button",class:g([l.value[a.name]?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:g([l.value[a.name]?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],10,bt)])):b("",!0)]))),128))])])):b("",!0),d.value==="llm"?(n(),o("div",yt,[e[38]||(e[38]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium"},"Vision Support"),t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"Enable if this model can process images.")],-1)),t("button",{onClick:e[12]||(e[12]=a=>l.value.has_vision=!l.value.has_vision),type:"button",class:g([l.value.has_vision?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:g([l.value.has_vision?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2)])):b("",!0),t("div",_t,[t("span",xt,[t("span",wt,[d.value==="llm"?(n(),o(B,{key:0},[N("Lock Context Size")],64)):(n(),o(B,{key:1},[N("Allow User Overrides")],64))]),t("span",kt,[d.value==="llm"?(n(),o(B,{key:0},[N("If enabled, users cannot override the context size for this model.")],64)):(n(),o(B,{key:1},[N("If enabled, users can change these generation parameters for their own use.")],64))])]),d.value==="llm"?(n(),o("button",{key:0,onClick:e[13]||(e[13]=a=>l.value.ctx_size_locked=!l.value.ctx_size_locked),type:"button",class:g([l.value.ctx_size_locked?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:g([l.value.ctx_size_locked?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2)):(n(),o("button",{key:1,onClick:e[14]||(e[14]=a=>l.value.allow_parameters_override=!l.value.allow_parameters_override),type:"button",class:g([l.value.allow_parameters_override?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:g([l.value.allow_parameters_override?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2))]),d.value==="llm"?(n(),o("div",ht,[e[39]||(e[39]=t("span",{class:"flex-grow flex flex-col"},[t("span",{class:"text-sm font-medium"},"Allow User Overrides"),t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"If disabled, all generation parameters above will be forced for this model.")],-1)),t("button",{onClick:e[15]||(e[15]=a=>l.value.allow_parameters_override=!l.value.allow_parameters_override),type:"button",class:g([l.value.allow_parameters_override?"bg-blue-600":"bg-gray-200 dark:bg-gray-600","relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out"])},[t("span",{class:g([l.value.allow_parameters_override?"translate-x-5":"translate-x-0","pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition-colors duration-200 ease-in-out"])},null,2)],2)])):b("",!0),t("div",Mt,[r.value.alias?(n(),o("button",{key:0,type:"button",onClick:fe,class:"btn btn-danger-outline",disabled:C.value},"Delete Alias",8,Ct)):b("",!0),t("button",{type:"submit",class:"btn btn-primary",disabled:C.value},M(C.value?"Saving...":"Save Alias"),9,St)])],32),t("div",Tt,[e[40]||(e[40]=t("h3",{class:"font-semibold mb-4"},"Default Model Settings",-1)),t("div",At,[t("div",Bt,[t("button",{onClick:me,class:"btn btn-secondary w-full",disabled:K.value||$.value},M($.value?"Setting...":"Set as Binding Default"),9,It),K.value?(n(),o("p",Dt,"✓ Current binding default")):b("",!0)]),d.value==="llm"?(n(),o("div",zt,[t("button",{onClick:pe,class:"btn btn-secondary w-full",disabled:X.value||U.value},M(U.value?"Setting...":"Set as Global Default"),9,Nt),X.value?(n(),o("p",$t,"✓ Global default for new users")):b("",!0)])):b("",!0)])])])):(n(),o("div",We,e[20]||(e[20]=[t("p",{class:"text-gray-500"},"Select a model to configure its alias and defaults.",-1)])))])])):(n(),o("div",De,e[16]||(e[16]=[t("p",null,"Error: Binding information is missing.",-1)])))]),_:1},8,["title"]))}};export{Rt as default};
frontend/dist/ui_assets/McpCard-B9qZHmoB.js+1 −1 renamed@@ -1 +1 @@ -import{s as h,d as a,l,h as c,e as t,p as d,t as s}from"./index-CEXks4lv.js";const p={class:"relative bg-white dark:bg-gray-800/80 shadow rounded-lg p-4 flex flex-col transition hover:shadow-md"},v=["title"],f={class:"flex-grow"},b={class:"flex items-center gap-x-4"},k={class:"h-12 w-12 rounded-md flex-shrink-0 bg-gray-200 dark:bg-gray-700 flex items-center justify-center overflow-hidden"},y=["src"],w={key:1,class:"w-7 h-7 text-gray-500 dark:text-gray-400",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"},C={class:"truncate"},E=["title"],B=["title"],j={class:"mt-3 flex items-center gap-x-3 flex-wrap"},M={class:"capitalize"},_={key:1,class:"mt-4 pt-4 border-t border-gray-200 dark:border-gray-700 flex justify-end items-center gap-x-3 text-sm"},I={__name:"McpCard",props:{mcp:{type:Object,required:!0},isEditable:{type:Boolean,default:!1}},emits:["edit","delete"],setup(e,{emit:m}){const o=e,n=m,i=h(!1);function u(){i.value=!0}function x(){n("edit",o.mcp)}function g(){n("delete",o.mcp)}return(D,r)=>(l(),a("div",p,[typeof e.mcp.active=="boolean"?(l(),a("span",{key:0,class:d(["absolute top-3 right-3 h-3 w-3 rounded-full",e.mcp.active?"bg-green-500":"bg-gray-400 dark:bg-gray-600"]),title:e.mcp.active?"Active":"Inactive"},null,10,v)):c("",!0),t("div",f,[t("div",b,[t("div",k,[e.mcp.icon&&!i.value?(l(),a("img",{key:0,src:e.mcp.icon,onError:u,alt:"Server Icon",class:"h-full w-full object-cover"},null,40,y)):(l(),a("svg",w,r[0]||(r[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21.75 17.25v-.228a4.5 4.5 0 0 0-.12-1.03l-2.268-9.64a3.375 3.375 0 0 0-3.285-2.602H7.923a3.375 3.375 0 0 0-3.285 2.602l-2.268 9.64a4.5 4.5 0 0 0-.12 1.03v.228m19.5 0a3 3 0 0 1-3 3H5.25a3 3 0 0 1-3-3m19.5 0a3 3 0 0 0-3-3H5.25a3 3 0 0 0-3 3m16.5 0h.008v.008h-.008v-.008Z"},null,-1)])))]),t("div",C,[t("p",{class:"font-semibold text-gray-900 dark:text-white truncate pr-6",title:e.mcp.name},s(e.mcp.name),9,E),t("p",{class:"text-xs text-gray-500 dark:text-gray-400 font-mono truncate",title:e.mcp.url},s(e.mcp.url),9,B)])]),t("div",j,[t("div",{class:d(["flex items-center gap-x-1 px-2 py-0.5 rounded-full text-xs",e.mcp.type==="system"?"bg-purple-100 dark:bg-purple-900/50 text-purple-700 dark:text-purple-300":"bg-blue-100 dark:bg-blue-900/50 text-blue-700 dark:text-blue-300"])},[r[1]||(r[1]=t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor",class:"w-3 h-3"},[t("path",{d:"M8 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6ZM12.735 14c.618 0 1.093-.561.872-1.139a6.002 6.002 0 0 0-11.215 0c-.22.578.254 1.139.872 1.139h9.47Z"})],-1)),t("span",M,s(e.mcp.owner_username||e.mcp.type),1)],2)])]),e.isEditable?(l(),a("div",_,[t("button",{onClick:x,class:"font-medium text-blue-600 hover:text-blue-500 dark:text-blue-500 dark:hover:text-blue-400"},"Edit"),t("button",{onClick:g,class:"font-medium text-red-600 hover:text-red-500 dark:text-red-500 dark:hover:text-red-400"},"Delete")])):c("",!0)]))}};export{I as _}; +import{s as h,d as a,l,h as c,e as t,p as d,t as s}from"./index-BBRgbnZQ.js";const p={class:"relative bg-white dark:bg-gray-800/80 shadow rounded-lg p-4 flex flex-col transition hover:shadow-md"},v=["title"],f={class:"flex-grow"},b={class:"flex items-center gap-x-4"},k={class:"h-12 w-12 rounded-md flex-shrink-0 bg-gray-200 dark:bg-gray-700 flex items-center justify-center overflow-hidden"},y=["src"],w={key:1,class:"w-7 h-7 text-gray-500 dark:text-gray-400",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor"},C={class:"truncate"},E=["title"],B=["title"],j={class:"mt-3 flex items-center gap-x-3 flex-wrap"},M={class:"capitalize"},_={key:1,class:"mt-4 pt-4 border-t border-gray-200 dark:border-gray-700 flex justify-end items-center gap-x-3 text-sm"},I={__name:"McpCard",props:{mcp:{type:Object,required:!0},isEditable:{type:Boolean,default:!1}},emits:["edit","delete"],setup(e,{emit:m}){const o=e,n=m,i=h(!1);function u(){i.value=!0}function x(){n("edit",o.mcp)}function g(){n("delete",o.mcp)}return(D,r)=>(l(),a("div",p,[typeof e.mcp.active=="boolean"?(l(),a("span",{key:0,class:d(["absolute top-3 right-3 h-3 w-3 rounded-full",e.mcp.active?"bg-green-500":"bg-gray-400 dark:bg-gray-600"]),title:e.mcp.active?"Active":"Inactive"},null,10,v)):c("",!0),t("div",f,[t("div",b,[t("div",k,[e.mcp.icon&&!i.value?(l(),a("img",{key:0,src:e.mcp.icon,onError:u,alt:"Server Icon",class:"h-full w-full object-cover"},null,40,y)):(l(),a("svg",w,r[0]||(r[0]=[t("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M21.75 17.25v-.228a4.5 4.5 0 0 0-.12-1.03l-2.268-9.64a3.375 3.375 0 0 0-3.285-2.602H7.923a3.375 3.375 0 0 0-3.285 2.602l-2.268 9.64a4.5 4.5 0 0 0-.12 1.03v.228m19.5 0a3 3 0 0 1-3 3H5.25a3 3 0 0 1-3-3m19.5 0a3 3 0 0 0-3-3H5.25a3 3 0 0 0-3 3m16.5 0h.008v.008h-.008v-.008Z"},null,-1)])))]),t("div",C,[t("p",{class:"font-semibold text-gray-900 dark:text-white truncate pr-6",title:e.mcp.name},s(e.mcp.name),9,E),t("p",{class:"text-xs text-gray-500 dark:text-gray-400 font-mono truncate",title:e.mcp.url},s(e.mcp.url),9,B)])]),t("div",j,[t("div",{class:d(["flex items-center gap-x-1 px-2 py-0.5 rounded-full text-xs",e.mcp.type==="system"?"bg-purple-100 dark:bg-purple-900/50 text-purple-700 dark:text-purple-300":"bg-blue-100 dark:bg-blue-900/50 text-blue-700 dark:text-blue-300"])},[r[1]||(r[1]=t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",fill:"currentColor",class:"w-3 h-3"},[t("path",{d:"M8 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6ZM12.735 14c.618 0 1.093-.561.872-1.139a6.002 6.002 0 0 0-11.215 0c-.22.578.254 1.139.872 1.139h9.47Z"})],-1)),t("span",M,s(e.mcp.owner_username||e.mcp.type),1)],2)])]),e.isEditable?(l(),a("div",_,[t("button",{onClick:x,class:"font-medium text-blue-600 hover:text-blue-500 dark:text-blue-500 dark:hover:text-blue-400"},"Edit"),t("button",{onClick:g,class:"font-medium text-red-600 hover:text-red-500 dark:text-red-500 dark:hover:text-red-400"},"Delete")])):c("",!0)]))}};export{I as _};
frontend/dist/ui_assets/McpsManagement-C1hyRCxl.js+0 −0 renamedfrontend/dist/ui_assets/McpsSettings-CMOBippn.js+1 −1 renamedfrontend/dist/ui_assets/MemoryEditorModal-TZP3lS6H.js+1 −1 renamedfrontend/dist/ui_assets/MessagesView-DznlzHgz.js+1 −1 renamedfrontend/dist/ui_assets/mindmap-definition-Q6HEUPPD-Dg6qqfq4.js+1 −1 renamedfrontend/dist/ui_assets/ModelCardModal-DWcD1Irv.js+1 −1 renamedfrontend/dist/ui_assets/ModerationQueue-CNPmr7UD.js+0 −1 removedfrontend/dist/ui_assets/ModerationQueue-DtUjRrI5.js+1 −0 addedfrontend/dist/ui_assets/MoveDiscussionModal-CoxDH_ab.js+1 −1 renamedfrontend/dist/ui_assets/MultiSelectMenu-CtnadQ-5.js+1 −1 renamedfrontend/dist/ui_assets/NewApiKeyModal-CIDRdZgz.js+1 −1 renamedfrontend/dist/ui_assets/NewsFeedSettings-BZXfdZRH.js+1 −1 renamedfrontend/dist/ui_assets/NewsManagement-BKIHCoG8.js+1 −0 addedfrontend/dist/ui_assets/NewsManagement-DkImNfGe.js+0 −1 removedfrontend/dist/ui_assets/NewsView-CDpBvecg.js+1 −1 renamedfrontend/dist/ui_assets/NotebookStudioView-B7_n3UEV.js+0 −1 removedfrontend/dist/ui_assets/NotebookStudioView-CosAKX3U.js+1 −0 addedfrontend/dist/ui_assets/NoteEditorModal-DpUf50rx.js+1 −1 renamedfrontend/dist/ui_assets/NoteGroupModal-Bdyyng9v.js+1 −1 renamedfrontend/dist/ui_assets/Operations-DuewB_Gn.js+1 −0 addedfrontend/dist/ui_assets/Operations-F5-H9xxo.js+0 −1 removedfrontend/dist/ui_assets/PageViewLayout-CieE8QU1.js+1 −1 renamedfrontend/dist/ui_assets/PasswordResetLinkModal-qsfIxSCP.js+1 −1 renamedfrontend/dist/ui_assets/PersonalitiesManagement-ClW_-8nv.js+1 −1 renamedfrontend/dist/ui_assets/PersonalitiesSettings-DAybC-OI.js+1 −0 addedfrontend/dist/ui_assets/PersonalitiesSettings-DiBR3F_S.js+0 −1 removedfrontend/dist/ui_assets/PersonalityEditorModal-2urTgh6O.js+0 −1 removedfrontend/dist/ui_assets/PersonalityEditorModal-ozUIlcAl.js+1 −0 addedfrontend/dist/ui_assets/pieDiagram-ADFJNKIX-oKIfs4M-.js+1 −1 renamedfrontend/dist/ui_assets/ProfileView-DgiJHJFL.js+1 −1 renamedfrontend/dist/ui_assets/PromptsManagement-CY9ZXVgb.js+1 −0 addedfrontend/dist/ui_assets/PromptsManagement-re3_zMdm.js+0 −1 removedfrontend/dist/ui_assets/PromptsSettings-Bgz2cVNJ.js+1 −1 renamedfrontend/dist/ui_assets/quadrantDiagram-LMRXKWRM-BGON0pUG.js+1 −1 renamedfrontend/dist/ui_assets/RAGBindingsSettings-D2gAIzMz.js+1 −1 renamedfrontend/dist/ui_assets/RAGSettings-BRxvOZxT.js+1 −1 renamedfrontend/dist/ui_assets/RegisterModal-Xog8H63b.js+1 −1 renamedfrontend/dist/ui_assets/RenameDiscussionModal-yWhWlqnQ.js+1 −1 renamedfrontend/dist/ui_assets/requirementDiagram-4UW4RH46-C9rwHPeF.js+1 −1 renamedfrontend/dist/ui_assets/ResetPasswordModal-DeQkBsE0.js+1 −1 renamedfrontend/dist/ui_assets/ResetPasswordView-Bs9r2MRh.js+1 −1 renamedfrontend/dist/ui_assets/RssManagement-CaYHdbI_.js+0 −1 removedfrontend/dist/ui_assets/RssManagement-CsufZ0IX.js+1 −0 addedfrontend/dist/ui_assets/sankeyDiagram-GR3RE2ED-CbHcr0jw.js+1 −1 renamedfrontend/dist/ui_assets/SCIMSettings-D9M8_97U.js+1 −1 renamedfrontend/dist/ui_assets/ScrapeUrlModal-CMMx77zH.js+1 −1 renamedfrontend/dist/ui_assets/sequenceDiagram-C3RYC4MD-BwstvSnu.js+1 −1 renamedfrontend/dist/ui_assets/ServerSettings-D-7p8IjP.js+1 −1 renamedfrontend/dist/ui_assets/ServiceRegistrationModal-C5ZwPp2T.js+1 −1 renamedfrontend/dist/ui_assets/ServicesManagement-BUuK-wGk.js+0 −1 removedfrontend/dist/ui_assets/ServicesManagement-CqcZnhZ7.js+1 −0 addedfrontend/dist/ui_assets/SettingsView-DukiFMGD.js+2 −0 addedfrontend/dist/ui_assets/SettingsView-GSpq5kRq.js+0 −2 removedfrontend/dist/ui_assets/ShareDataStoreModal-BkUxG7NH.js+1 −1 renamedfrontend/dist/ui_assets/ShareDiscussionModal-D53e4kmK.js+0 −2 removedfrontend/dist/ui_assets/ShareDiscussionModal-DCJmMM91.js+2 −0 addedfrontend/dist/ui_assets/SharePersonalityModal-DHAQycFI.js+1 −1 renamedfrontend/dist/ui_assets/SourceViewerModal-Du3ld6Dl.js+1 −1 renamedfrontend/dist/ui_assets/SSOClientSettings-Cklwpe8n.js+1 −1 renamedfrontend/dist/ui_assets/SsoLoginView-Cp-s4NI4.js+1 −1 renamedfrontend/dist/ui_assets/stateDiagram-KXAO66HF-CLCDF_Ui.js+1 −1 renamedfrontend/dist/ui_assets/stateDiagram-v2-UMBNRL4Z-1Ph1qvJE.js+1 −0 addedfrontend/dist/ui_assets/stateDiagram-v2-UMBNRL4Z-D3qrizDn.js+0 −1 removedfrontend/dist/ui_assets/STTBindingsSettings-D3phWugB.js+2 −2 renamedfrontend/dist/ui_assets/STTSettings-BwGykcqA.js+1 −1 renamedfrontend/dist/ui_assets/SystemLoad-Bab_oTt9.js+1 −0 addedfrontend/dist/ui_assets/SystemLoad-CTDoErfD.js+0 −1 removedfrontend/dist/ui_assets/SystemLogModal-B9v2hBll.js+2 −2 renamedfrontend/dist/ui_assets/TaskManager-Bmb27H1b.js+1 −1 renamedfrontend/dist/ui_assets/TasksManagerModal-C3Onn-Dw.js+0 −2 removedfrontend/dist/ui_assets/TasksManagerModal-ChkL7K2o.js+2 −0 addedfrontend/dist/ui_assets/TimelapseView-B3g07mKs.js+1 −0 addedfrontend/dist/ui_assets/TimelapseView-BloXaunR.js+0 −1 removedfrontend/dist/ui_assets/timeline-definition-XQNQX7LJ-BZn2WRkL.js+1 −1 renamedfrontend/dist/ui_assets/treemap-75Q7IDZK-XN-GQZ7k.js+1 −1 renamedfrontend/dist/ui_assets/TTIBindingsSettings-DTVj6wK_.js+2 −2 renamedfrontend/dist/ui_assets/TTISettings-DYKSqjPv.js+1 −1 renamedfrontend/dist/ui_assets/TTSBindingsSettings-Bw5bjwPk.js+2 −2 renamedfrontend/dist/ui_assets/TTSSettings-BDYzAQcc.js+1 −1 renamedfrontend/dist/ui_assets/UserContextSettings-IXu-47Jt.js+1 −1 renamedfrontend/dist/ui_assets/UserTable-BO4B_pv9.js+1 −1 renamedfrontend/dist/ui_assets/VoicesStudioView-nlENrORy.js+2 −2 renamedfrontend/dist/ui_assets/WelcomeSettings-Qrmfotzl.js+1 −0 addedfrontend/dist/ui_assets/WelcomeSettings-TcRzfaVX.js+0 −1 removedfrontend/dist/ui_assets/WhatsNextModal-CRai4z0H.js+1 −0 addedfrontend/dist/ui_assets/WhatsNextModal-CzsAXZEk.css+1 −0 addedfrontend/dist/ui_assets/WhatsNextModal-D1E6o42N.js+0 −1 removedfrontend/dist/ui_assets/WhatsNextModal-DVCb0YjR.css+0 −1 removedfrontend/dist/ui_assets/WysiwygEditor-DXZt4x7X.js+1 −1 renamedfrontend/dist/ui_assets/xychartDiagram-6GGTOJPD-B7dSiSBO.js+1 −1 renamedfrontend/webui/src/App.vue+8 −0 modifiedfrontend/webui/src/components/datastores/DataStoreGraphManager.vue+10 −2 modifiedfrontend/webui/src/components/layout/DiscussionList.vue+2 −3 modifiedfrontend/webui/src/components/modals/PersonalityEditorModal.vue+103 −12 modifiedfrontend/webui/src/components/modals/WhatsNextModal.vue+128 −45 modifiedfrontend/webui/src/components/settings/PersonalitiesSettings.vue+20 −3 modifiedfrontend/webui/src/router/index.js+0 −1 modifiedfrontend/webui/src/stores/auth.js+56 −2 modifiedfrontend/webui/src/stores/data.js+51 −3 modifiedfrontend/webui/src/views/DataStoresView.vue+17 −2 modifiedrequirements.txt+0 −1 modified
Vulnerability mechanics
Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
4News mentions
0No linked articles in our index yet.