import path from 'path'; import { parse } from '@babel/parser'; import traverseBabel from '@babel/traverse'; import * as t from '@babel/types'; import fs from 'fs'; import { validateFilePath, parseFileToAST, findJSXElementAtPosition, generateCode, generateSourceWithMap, VITE_PROJECT_ROOT } from '../utils/ast-utils.js'; const EDITABLE_HTML_TAGS = ["a", "Button", "button", "p", "span", "h1", "h2", "h3", "h4", "h5", "h6", "label", "Label", "img"]; function parseEditId(editId) { const parts = editId.split(':'); if (parts.length < 3) { return null; } const column = parseInt(parts.at(-1), 10); const line = parseInt(parts.at(-2), 10); const filePath = parts.slice(0, -2).join(':'); if (!filePath || isNaN(line) || isNaN(column)) { return null; } return { filePath, line, column }; } function checkTagNameEditable(openingElementNode, editableTagsList) { if (!openingElementNode || !openingElementNode.name) return false; const nameNode = openingElementNode.name; // Check 1: Direct name (for

,