"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SessionCreateForm = void 0; const lit_1 = require("lit"); const decorators_js_1 = require("lit/decorators.js"); require("./file-browser.js"); let SessionCreateForm = class SessionCreateForm extends lit_1.LitElement { constructor() { super(...arguments); this.workingDir = '~/'; this.command = 'zsh'; this.disabled = false; this.visible = false; this.isCreating = false; this.showFileBrowser = false; } // Disable shadow DOM to use Tailwind createRenderRoot() { return this; } handleWorkingDirChange(e) { const input = e.target; this.workingDir = input.value; this.dispatchEvent(new CustomEvent('working-dir-change', { detail: this.workingDir })); } handleCommandChange(e) { const input = e.target; this.command = input.value; } handleBrowse() { this.showFileBrowser = true; } handleDirectorySelected(e) { this.workingDir = e.detail; this.showFileBrowser = false; } handleBrowserCancel() { this.showFileBrowser = false; } async handleCreate() { if (!this.workingDir.trim() || !this.command.trim()) { this.dispatchEvent(new CustomEvent('error', { detail: 'Please fill in both working directory and command' })); return; } this.isCreating = true; const sessionData = { command: this.parseCommand(this.command.trim()), workingDir: this.workingDir.trim() }; try { const response = await fetch('/api/sessions', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(sessionData) }); if (response.ok) { const result = await response.json(); this.command = ''; // Clear command on success this.dispatchEvent(new CustomEvent('session-created', { detail: result })); } else { const error = await response.json(); this.dispatchEvent(new CustomEvent('error', { detail: `Failed to create session: ${error.error}` })); } } catch (error) { console.error('Error creating session:', error); this.dispatchEvent(new CustomEvent('error', { detail: 'Failed to create session' })); } finally { this.isCreating = false; } } parseCommand(commandStr) { // Simple command parsing - split by spaces but respect quotes const args = []; let current = ''; let inQuotes = false; let quoteChar = ''; for (let i = 0; i < commandStr.length; i++) { const char = commandStr[i]; if ((char === '"' || char === "'") && !inQuotes) { inQuotes = true; quoteChar = char; } else if (char === quoteChar && inQuotes) { inQuotes = false; quoteChar = ''; } else if (char === ' ' && !inQuotes) { if (current) { args.push(current); current = ''; } } else { current += char; } } if (current) { args.push(current); } return args; } handleCancel() { this.dispatchEvent(new CustomEvent('cancel')); } render() { if (!this.visible) { return (0, lit_1.html) ``; } return (0, lit_1.html) `