From 62c5c9556dc3e252e91e622c1bec6ff033026d6d Mon Sep 17 00:00:00 2001 From: Pluto Date: Thu, 25 Sep 2025 11:46:54 +0530 Subject: [PATCH 01/42] refactor: move loading more styles inside the _style function for consistency --- .../BrowserScripts/RemoteFunctions.js | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js index 26a43dbef..034839778 100644 --- a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js +++ b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js @@ -2066,6 +2066,20 @@ function RemoteFunctions(config = {}) { font-size: 14px !important; } + .phoenix-loading-more { + display: flex !important; + align-items: center !important; + justify-content: center !important; + min-width: 120px !important; + height: 116px !important; + margin-left: 2px !important; + background: rgba(255,255,255,0.03) !important; + border-radius: 8px !important; + color: #e8eaf0 !important; + font-size: 12px !important; + border: 1px dashed rgba(255,255,255,0.1) !important; + } + .phoenix-ribbon-header { display: flex !important; width: 100% !important; @@ -2537,19 +2551,6 @@ function RemoteFunctions(config = {}) { // when loading more images we need to show the message at the end of the image ribbon const loadingIndicator = window.document.createElement('div'); loadingIndicator.className = 'phoenix-loading-more'; - loadingIndicator.style.cssText = ` - display: flex !important; - align-items: center !important; - justify-content: center !important; - min-width: 120px !important; - height: 116px !important; - margin-left: 2px !important; - background: rgba(255,255,255,0.03) !important; - border-radius: 8px !important; - color: #e8eaf0 !important; - font-size: 12px !important; - border: 1px dashed rgba(255,255,255,0.1) !important; - `; loadingIndicator.textContent = 'Loading...'; rowElement.appendChild(loadingIndicator); }, From 9f353d1391de4544d09535bbaf6ba75bd83ac29b Mon Sep 17 00:00:00 2001 From: Pluto Date: Thu, 25 Sep 2025 13:37:14 +0530 Subject: [PATCH 02/42] feat: localize all the strings used in image ribbon gallery --- src/LiveDevelopment/BrowserScripts/RemoteFunctions.js | 10 +++++----- src/LiveDevelopment/main.js | 7 ++++++- src/nls/root/strings.js | 5 +++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js index 034839778..b5e2bf148 100644 --- a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js +++ b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js @@ -2288,7 +2288,7 @@ function RemoteFunctions(config = {}) {
From 36b1420fa8810086d84eca5b765b8c24ef025463 Mon Sep 17 00:00:00 2001 From: Pluto Date: Sun, 19 Oct 2025 19:13:15 +0530 Subject: [PATCH 34/42] refactor: reduce border radius of the image gallery header buttons --- src/LiveDevelopment/BrowserScripts/RemoteFunctions.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js index c5fb62a42..fb59fc1c5 100644 --- a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js +++ b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js @@ -2442,7 +2442,7 @@ function RemoteFunctions(config = {}) { background-color: transparent !important; border: 1px solid transparent !important; color: #a0a0a0 !important; - border-radius: 6px !important; + border-radius: 4px !important; cursor: pointer !important; padding: 3px 6px !important; display: flex !important; @@ -2459,7 +2459,7 @@ function RemoteFunctions(config = {}) { background-color: transparent !important; border: 1px solid transparent !important; color: #a0a0a0 !important; - border-radius: 6px !important; + border-radius: 4px !important; cursor: pointer !important; margin-right: 2px !important; padding: 3px 6px !important; @@ -2477,7 +2477,7 @@ function RemoteFunctions(config = {}) { background-color: transparent !important; border: 1px solid transparent !important; color: #a0a0a0 !important; - border-radius: 6px !important; + border-radius: 4px !important; cursor: pointer !important; padding: 3px 6px !important; display: flex !important; From 28fd20baa32d4bd8fd0bb606d0fff2b00b6160a9 Mon Sep 17 00:00:00 2001 From: Pluto Date: Sun, 19 Oct 2025 19:53:14 +0530 Subject: [PATCH 35/42] refactor: make image gallery search bar styles consistent to Phoenix UI --- src/LiveDevelopment/BrowserScripts/RemoteFunctions.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js index fb59fc1c5..a7580cef6 100644 --- a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js +++ b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js @@ -1355,13 +1355,13 @@ function RemoteFunctions(config = {}) { `, folderSettings: ` - + `, close: ` - + ` @@ -2419,6 +2419,7 @@ function RemoteFunctions(config = {}) { .phoenix-ribbon-search-btn { background: transparent !important; border: 1px solid transparent !important; + border-left: 1px solid gray !important; color: #a0a0a0 !important; cursor: pointer !important; padding: 2px 6px !important; @@ -3896,7 +3897,7 @@ function RemoteFunctions(config = {}) { // but the element stays at position which will lead to drift between the element & boxes function _dismissBoxesForFixedElements() { // first we try more options box, because its position is generally fixed even in overlapping cases - if (_nodeMoreOptionsBox && _nodeMoreOptionsBox.element) { + if (_nodeMoreOptionsBox && _nodeMoreOptionsBox.element && _nodeMoreOptionsBox._shadow) { const moreOptionsBoxElement = _nodeMoreOptionsBox._shadow.querySelector('.phoenix-more-options-box'); if(moreOptionsBoxElement) { @@ -3919,7 +3920,7 @@ function RemoteFunctions(config = {}) { } } } - } else if (_nodeInfoBox && _nodeInfoBox.element) { + } else if (_nodeInfoBox && _nodeInfoBox.element && _nodeInfoBox._shadow) { // if more options box didn't exist, we check with info box (logic is same) const infoBoxElement = _nodeInfoBox._shadow.querySelector('.phoenix-node-info-box'); if (infoBoxElement) { @@ -3954,7 +3955,7 @@ function RemoteFunctions(config = {}) { // now when live preview is scrolled the element remains at a fixed position but the AI box will drift away // so we reposition it when its a fixed element function _repositionAIBox() { - if (!_aiPromptBox || !_aiPromptBox.element) { return; } + if (!_aiPromptBox || !_aiPromptBox.element || !_aiPromptBox._shadow) { return; } const aiBox = _aiPromptBox._shadow.querySelector('.phoenix-ai-prompt-box'); if (!aiBox) { return; } From f9829081794fd6dea991ba5c2735db5f5a16c34d Mon Sep 17 00:00:00 2001 From: Pluto Date: Sun, 19 Oct 2025 21:57:20 +0530 Subject: [PATCH 36/42] refactor: match live preview AI box styling with phoenix styling convention --- .../BrowserScripts/RemoteFunctions.js | 79 ++++++++++++------- 1 file changed, 52 insertions(+), 27 deletions(-) diff --git a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js index a7580cef6..d452ed787 100644 --- a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js +++ b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js @@ -1364,6 +1364,12 @@ function RemoteFunctions(config = {}) { + `, + + paperPlane: ` + + + ` }; @@ -1900,9 +1906,9 @@ function RemoteFunctions(config = {}) { .phoenix-ai-prompt-box { position: absolute !important; - background: white !important; + background: #3C3F41 !important; border: 1px solid #4285F4 !important; - border-radius: 8px !important; + border-radius: 4px !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15) !important; font-family: Arial, sans-serif !important; z-index: 2147483647 !important; @@ -1919,55 +1925,56 @@ function RemoteFunctions(config = {}) { width: 100% !important; height: ${boxHeight}px !important; border: none !important; - border-radius: 8px !important; + border-radius: 4px 4px 0 0 !important; padding: 12px 40px 12px 16px !important; font-size: 14px !important; font-family: Arial, sans-serif !important; resize: none !important; outline: none !important; box-sizing: border-box !important; - background: #f9f9f9 !important; + background: transparent !important; + color: #c5c5c5 !important; + transition: background 0.2s ease !important; } .phoenix-ai-prompt-textarea:focus { - background: white !important; + background: rgba(255, 255, 255, 0.03) !important; } .phoenix-ai-prompt-textarea::placeholder { - color: #999 !important; + color: #a0a0a0 !important; + opacity: 0.7 !important; } .phoenix-ai-prompt-send-button { - width: 28px !important; - height: 28px !important; - border: none !important; - border-radius: 50% !important; - background: #4285F4 !important; - color: white !important; + background-color: transparent !important; + border: 1px solid transparent !important; + color: #a0a0a0 !important; + border-radius: 4px !important; cursor: pointer !important; + padding: 3px 6px !important; display: flex !important; align-items: center !important; justify-content: center !important; font-size: 14px !important; - transition: background-color 0.2s !important; - line-height: 0.5 !important; + transition: all 0.2s ease !important; } .phoenix-ai-prompt-send-button:hover:not(:disabled) { - background: #4285F4 !important; + border: 1px solid rgba(0, 0, 0, 0.24) !important; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12) !important; } .phoenix-ai-prompt-send-button:disabled { - background: #dadce0 !important; - color: #9aa0a6 !important; + opacity: 0.5 !important; cursor: not-allowed !important; } .phoenix-ai-bottom-controls { - border-top: 1px solid #e0e0e0 !important; + border-top: 1px solid rgba(255,255,255,0.14) !important; padding: 8px 16px !important; - background: #f9f9f9 !important; - border-radius: 0 0 8px 8px !important; + background: transparent !important; + border-radius: 0 0 4px 4px !important; display: flex !important; align-items: center !important; justify-content: space-between !important; @@ -1975,16 +1982,30 @@ function RemoteFunctions(config = {}) { .phoenix-ai-model-select { padding: 4px 8px !important; - border: 1px solid #ddd !important; + border: 1px solid transparent !important; border-radius: 4px !important; font-size: 12px !important; - background: white !important; + background: transparent !important; + color: #a0a0a0 !important; outline: none !important; cursor: pointer !important; + transition: all 0.2s ease !important; + } + + .phoenix-ai-model-select:hover { + border: 1px solid rgba(0, 0, 0, 0.24) !important; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12) !important; } .phoenix-ai-model-select:focus { - border-color: #4285F4 !important; + border: 1px solid rgba(0, 0, 0, 0.24) !important; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12) !important; + } + + .phoenix-ai-model-select option { + background: #000 !important; + color: #fff !important; + padding: 4px 8px !important; } `; @@ -2003,7 +2024,7 @@ function RemoteFunctions(config = {}) { @@ -2377,7 +2398,6 @@ function RemoteFunctions(config = {}) { align-items: stretch !important; border-radius: 6px !important; margin-left: 8px !important; - padding: 2px 2px 2px 4px !important; border: 1px solid rgba(255,255,255,0.14) !important; } @@ -2395,10 +2415,15 @@ function RemoteFunctions(config = {}) { background: transparent !important; border: none !important; outline: none !important; - color: #a0a0a0 !important; + color: #c5c5c5 !important; width: 150px !important; - padding: 2px 6px !important; + padding: 4px 8px !important; border-radius: 4px 0 0 4px !important; + transition: background 0.2s ease !important; + } + + .phoenix-ribbon-search input:focus { + background: rgba(255, 255, 255, 0.03) !important; } .phoenix-ribbon-search input::placeholder { From 0aa3d64990f27e1f6be16aef21b7549e4566d5d7 Mon Sep 17 00:00:00 2001 From: Pluto Date: Mon, 20 Oct 2025 11:29:49 +0530 Subject: [PATCH 37/42] fix: element backgroud color not getting properly cleared --- src/LiveDevelopment/BrowserScripts/RemoteFunctions.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js index d452ed787..f0ff986f7 100644 --- a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js +++ b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js @@ -3545,10 +3545,11 @@ function RemoteFunctions(config = {}) { body.removeChild(highlights[i]); } - if (this.trigger) { - for (i = 0; i < this.elements.length; i++) { + for (i = 0; i < this.elements.length; i++) { + if (this.trigger) { _trigger(this.elements[i], "highlight", 0); } + clearElementBackground(this.elements[i]); } this.elements = []; From e672064f5ebce45deeab942d719c8441bd596ce8 Mon Sep 17 00:00:00 2001 From: Pluto Date: Tue, 21 Oct 2025 17:40:22 +0530 Subject: [PATCH 38/42] feat: show root folders when empty query is entered inside the folder location dialog --- src/LiveDevelopment/LivePreviewEdit.js | 46 +++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/src/LiveDevelopment/LivePreviewEdit.js b/src/LiveDevelopment/LivePreviewEdit.js index 11e95418e..7d88cfca7 100644 --- a/src/LiveDevelopment/LivePreviewEdit.js +++ b/src/LiveDevelopment/LivePreviewEdit.js @@ -808,6 +808,36 @@ define(function (require, exports, module) { // these folders are generally very large, and we don't scan them otherwise it might freeze the UI const EXCLUDED_FOLDERS = ['node_modules', 'bower_components', '.git', '.npm', '.yarn']; + /** + * this function scans all the root directories + * root directories means those directories that are directly inside the project folder + * we need this to show when the query is empty + * + * @param {Directory} directory - project root directory + * @param {Array} folderList - array to store discovered root folder paths + * @return {Promise} Resolves when root scan is complete + */ + function _scanRootDirectoriesOnly(directory, folderList) { + return new Promise((resolve) => { + directory.getContents((err, contents) => { + if (err) { + resolve(); + return; + } + + const directories = contents.filter(entry => entry.isDirectory); + + directories.forEach(dir => { + // ignore all the excluded folders + if (EXCLUDED_FOLDERS.includes(dir.name)) { return; } + // add root folder name with trailing slash + folderList.push(dir.name + '/'); + }); + resolve(); + }); + }); + } + /** * this function scans all the directories recursively * and then add the relative paths of the directories to the folderList array @@ -902,15 +932,20 @@ define(function (require, exports, module) { * * @param {string} query - The search query from the input field * @param {Array} folderList - List of all available folder paths + * @param {Array} rootFolders - list of root-level folder paths * @param {StringMatch.StringMatcher} stringMatcher - StringMatcher instance for fuzzy matching * @param {JQuery} $suggestions - jQuery element for the suggestions container * @param {JQuery} $input - jQuery element for the input field */ - function _updateFolderSuggestions(query, folderList, stringMatcher, $suggestions, $input) { + function _updateFolderSuggestions(query, folderList, rootFolders, stringMatcher, $suggestions, $input) { if (!query || query.trim() === '') { + // when input is empty we show the root folders + _renderFolderSuggestions(rootFolders.slice(0, 15), $suggestions, $input); return; } + if (!stringMatcher) { return; } + // filter folders using fuzzy matching const matches = folderList .map(folder => { @@ -1034,16 +1069,19 @@ define(function (require, exports, module) { const $rememberCheckbox = $dlg.find("#remember-folder-checkbox"); let folderList = []; + let rootFolders = []; let stringMatcher = null; - // Scan project directories and setup event handlers - _scanDirectories(projectRoot, '', folderList).then(() => { + _scanRootDirectoriesOnly(projectRoot, rootFolders).then(() => { stringMatcher = new StringMatch.StringMatcher({ segmentedSearch: true }); + _renderFolderSuggestions(rootFolders.slice(0, 15), $suggestions, $input); }); + _scanDirectories(projectRoot, '', folderList); + // input event handler $input.on('input', function() { - _updateFolderSuggestions($input.val(), folderList, stringMatcher, $suggestions, $input); + _updateFolderSuggestions($input.val(), folderList, rootFolders, stringMatcher, $suggestions, $input); }); _registerFolderDialogInputHandlers($input, $suggestions, $dlg); // focus the input box From aaf8268cb64829dc978f8f802941c730b0c6649e Mon Sep 17 00:00:00 2001 From: Pluto Date: Tue, 21 Oct 2025 17:48:33 +0530 Subject: [PATCH 39/42] fix: scroll suggestions list to top when query changes --- src/LiveDevelopment/LivePreviewEdit.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/LiveDevelopment/LivePreviewEdit.js b/src/LiveDevelopment/LivePreviewEdit.js index 7d88cfca7..58912257d 100644 --- a/src/LiveDevelopment/LivePreviewEdit.js +++ b/src/LiveDevelopment/LivePreviewEdit.js @@ -918,6 +918,7 @@ define(function (require, exports, module) { html += ''; $suggestions.html(html); + $suggestions.scrollTop(0); // always need to scroll to top when query changes // when a suggestion is clicked we add the folder path in the input box $suggestions.find('.folder-suggestion-item').on('click', function() { From 162a09b7a01bd2a495e95ada740158f13f3ed78b Mon Sep 17 00:00:00 2001 From: Pluto Date: Tue, 21 Oct 2025 18:05:52 +0530 Subject: [PATCH 40/42] feat: exclude folders that are redundant (starting with .) --- src/LiveDevelopment/LivePreviewEdit.js | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/LiveDevelopment/LivePreviewEdit.js b/src/LiveDevelopment/LivePreviewEdit.js index 58912257d..eb8751ac4 100644 --- a/src/LiveDevelopment/LivePreviewEdit.js +++ b/src/LiveDevelopment/LivePreviewEdit.js @@ -805,8 +805,21 @@ define(function (require, exports, module) { }); } - // these folders are generally very large, and we don't scan them otherwise it might freeze the UI - const EXCLUDED_FOLDERS = ['node_modules', 'bower_components', '.git', '.npm', '.yarn']; + /** + * This function is to determine whether we need to exclude a folder from the suggestions list + * so we exclude all the folders that start with . 'dot' as this are generally irrelevant dirs + * secondly, we also exclude large dirs like node modules as they might freeze the UI if we scan them + * @param {String} folderName - the folder name to check if we need to exclude it or not + * @returns {Boolean} - true if we should exclude otherwise false + */ + function _isExcludedFolder(folderName) { + if (folderName.startsWith('.')) { return true; } + + const UNNECESSARY_FOLDERS = ['node_modules', 'bower_components']; + if (UNNECESSARY_FOLDERS.includes(folderName)) { return true; } + + return false; + } /** * this function scans all the root directories @@ -828,8 +841,7 @@ define(function (require, exports, module) { const directories = contents.filter(entry => entry.isDirectory); directories.forEach(dir => { - // ignore all the excluded folders - if (EXCLUDED_FOLDERS.includes(dir.name)) { return; } + if (_isExcludedFolder(dir.name)) { return; } // add root folder name with trailing slash folderList.push(dir.name + '/'); }); @@ -859,10 +871,7 @@ define(function (require, exports, module) { const scanPromises = []; directories.forEach(dir => { - // if its an excluded folder we ignore it - if (EXCLUDED_FOLDERS.includes(dir.name)) { - return; - } + if (_isExcludedFolder(dir.name)) { return; } const dirRelativePath = relativePath ? `${relativePath}${dir.name}/` : `${dir.name}/`; folderList.push(dirRelativePath); From 570f93dd272c4a488db3456daa7a41c56b59d84a Mon Sep 17 00:00:00 2001 From: Pluto Date: Wed, 22 Oct 2025 13:49:00 +0530 Subject: [PATCH 41/42] feat: show drilled down results inside a folder when query ends with trailing slash --- src/LiveDevelopment/LivePreviewEdit.js | 35 +++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/LiveDevelopment/LivePreviewEdit.js b/src/LiveDevelopment/LivePreviewEdit.js index eb8751ac4..860abf049 100644 --- a/src/LiveDevelopment/LivePreviewEdit.js +++ b/src/LiveDevelopment/LivePreviewEdit.js @@ -885,6 +885,23 @@ define(function (require, exports, module) { }); } + /** + * this function is responsible to get the subdirectories inside a directory + * we need this because we need to show the drilled down folders... + * @param {String} parentPath - Parent folder path (e.g., "images/") + * @param {Array} folderList - Complete list of all folder paths + * @return {Array} Array of direct subfolders only + */ + function _getSubfolders(parentPath, folderList) { + return folderList.filter(folder => { + if (!folder.startsWith(parentPath)) { return false; } + + const relativePath = folder.substring(parentPath.length); + const pathWithoutTrailingSlash = relativePath.replace(/\/$/, ''); + return !pathWithoutTrailingSlash.includes('/'); + }); + } + /** * Renders folder suggestions as a dropdown in the UI with fuzzy match highlighting * @@ -932,8 +949,7 @@ define(function (require, exports, module) { // when a suggestion is clicked we add the folder path in the input box $suggestions.find('.folder-suggestion-item').on('click', function() { const folderPath = $(this).data('path'); - $input.val(folderPath); - $suggestions.empty(); + $input.val(folderPath).trigger('input'); }); } @@ -954,6 +970,18 @@ define(function (require, exports, module) { return; } + // if the query ends with a / + // we then show the drilled down list of dirs inside that parent directory + if (query.endsWith('/')) { + const subfolders = _getSubfolders(query, folderList); + const formattedSubfolders = subfolders.map(folder => { + return stringMatcher.match(folder, query) || { label: folder, stringRanges: [{ text: folder, matched: false }] }; + }); + + _renderFolderSuggestions(formattedSubfolders.slice(0, 15), $suggestions, $input); + return; + } + if (!stringMatcher) { return; } // filter folders using fuzzy matching @@ -1048,8 +1076,7 @@ define(function (require, exports, module) { // if there's a selected suggestion, use it if ($selected.length > 0) { const folderPath = $selected.data('path'); - $input.val(folderPath); - $suggestions.empty(); + $input.val(folderPath).trigger('input'); } else { // no suggestions, trigger OK button click $dlg.find('[data-button-id="ok"]').click(); From c0eb2c1efd1923c4c685ee2038f9e653c8dfde05 Mon Sep 17 00:00:00 2001 From: Pluto Date: Wed, 22 Oct 2025 13:57:50 +0530 Subject: [PATCH 42/42] refactor: hide the AI button from the more options box --- src/LiveDevelopment/BrowserScripts/RemoteFunctions.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js index f0ff986f7..f4bb2aa50 100644 --- a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js +++ b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js @@ -1446,10 +1446,11 @@ function RemoteFunctions(config = {}) { let content = `
`; - // not sure if we need to hide/show the AI icon, right now showing always - content += ` - ${ICONS.ai} - `; + // @abose @devansh + // hiding it for now as AI is not yet ready + // content += ` + // ${ICONS.ai} + // `; // Only include select parent option if element supports it if (showSelectParentOption) {