From d0624e1838f7ac264bca8fbb3d99b407bf692c2f Mon Sep 17 00:00:00 2001 From: Pluto Date: Sat, 5 Sep 2026 14:13:57 +0530 Subject: [PATCH 01/19] feat: update layers panel style to cover id/class/content with tagname --- src/nls/root/strings.js | 1 - src/styles/Extn-LayersPanel.less | 130 +++++++++++++++++++------------ 2 files changed, 79 insertions(+), 52 deletions(-) diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js index b2634fb508..e549740e2e 100644 --- a/src/nls/root/strings.js +++ b/src/nls/root/strings.js @@ -830,7 +830,6 @@ define({ "LIVE_PREVIEW_LAYERS_HIGHLIGHT_ON_HOVER": "Highlight on Hover in Preview", "LIVE_PREVIEW_LAYERS_MOVE_UP": "Move Up", "LIVE_PREVIEW_LAYERS_MOVE_DOWN": "Move Down", - "LIVE_PREVIEW_LAYERS_DRAG_TO_MOVE": "Drag to move", "LIVE_PREVIEW_LAYERS_ADD_ATTRIBUTE": "Add Attribute", "LIVE_PREVIEW_LAYERS_REMOVE_ATTRIBUTE": "Remove Attribute", "LIVE_PREVIEW_LAYERS_PROPERTIES": "Properties", diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index b209b3668d..417e453a0f 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -28,6 +28,8 @@ @layers-input-bg: rgba(255, 255, 255, 0.04); @layers-input-bg-focus: rgba(255, 255, 255, 0.06); @layers-row-height: 26px; +@layers-label-min-width: 72px; +@layers-tools-width: 74px; @layers-indent: 14px; @layers-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace; @layers-prop-name: #9cdcfe; @@ -418,6 +420,7 @@ } .layers-node { + position: relative; display: flex; align-items: center; height: @layers-row-height; @@ -493,79 +496,64 @@ } } - .layers-node-tag { - min-width: 0; - overflow: hidden; - text-overflow: ellipsis; - color: @project-panel-text-1; + .layers-tree .layers-node-label { + flex: 1 1 auto; + min-width: @layers-label-min-width; + contain: inline-size; } .layers-node-actions { display: none; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + pointer-events: none; + } + + .layers-node-tools { + display: flex; align-items: center; gap: 1px; position: sticky; right: 0; + width: fit-content; + height: 100%; margin-left: auto; - padding-left: 6px; - flex: none; + padding: 0 6px; + box-sizing: border-box; + pointer-events: auto; background: @layers-row-bg; } .layers-node:hover .layers-node-actions, .layers-node.layers-actions-open .layers-node-actions, .layers-node-actions:focus-within { - display: flex; + display: block; } - .layers-node:hover .layers-node-actions { - background: @layers-row-hover-bg; + .layers-node:hover .layers-node-label, + .layers-node.layers-actions-open .layers-node-label, + .layers-node:focus-within .layers-node-label { + padding-right: @layers-tools-width; } - .layers-node.layers-selected .layers-node-actions { - background: @layers-row-select-bg; + .layers-tree.layers-kbd-nav .layers-node:hover:not(.layers-actions-open) .layers-node-label { + padding-right: 0; } - .layers-node.layers-cursor .layers-node-actions { + .layers-node:hover .layers-node-tools, + .layers-node.layers-cursor .layers-node-tools { background: @layers-row-hover-bg; } - .layers-node-action { - .layers-icon-button(); - - &.layers-disabled { - opacity: 0.3; - cursor: default; - pointer-events: none; - } - } - - .layers-node-grip { - display: flex; - align-items: center; - justify-content: center; - width: 16px; - height: 20px; - flex: none; - color: @project-panel-text-2; - cursor: grab; - - svg { - width: 13px; - height: 13px; - display: block; - } - - &:hover { - color: @project-panel-text-1; - } + .layers-node.layers-selected .layers-node-tools { + background: @layers-row-select-bg; } - .layers-node-text { - color: @project-panel-text-2; - font-style: italic; - overflow: hidden; - text-overflow: ellipsis; + .layers-node-action { + .layers-icon-button(); } .layers-drop-line { @@ -814,6 +802,40 @@ } } +.layers-node-label { + display: flex; + align-items: baseline; + min-width: 0; + overflow: hidden; +} + +.layers-node-name, +.layers-node-text { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; +} + +.layers-node-name { + color: @project-panel-text-1; +} + +.layers-node-tag { + flex: none; + margin-left: 5px; + color: @project-panel-text-2; + + &:first-child { + margin-left: 0; + color: @project-panel-text-1; + } +} + +.layers-node-text { + color: @project-panel-text-2; + font-style: italic; +} + body.layers-resizing { cursor: row-resize; user-select: none; @@ -844,10 +866,6 @@ body.layers-resizing { body.layers-dnd { cursor: grabbing; user-select: none; - - .layers-node-grip { - cursor: grabbing; - } } body.layers-dnd-invalid { @@ -860,6 +878,7 @@ body.layers-dnd-invalid { display: flex; align-items: center; gap: 5px; + max-width: 260px; padding: 2px 8px 2px 6px; border: 1px solid rgba(107, 158, 255, 0.5); border-radius: 4px; @@ -875,6 +894,15 @@ body.layers-dnd-invalid { height: 14px; display: block; } + + .layers-node-name, + .layers-node-tag:first-child { + color: inherit; + } + + .layers-node-tag { + color: #a0a0a0; + } } @keyframes layers-flash-row { From 38a5038803e01b679da6e745c2530eb2699003e6 Mon Sep 17 00:00:00 2001 From: Pluto Date: Sat, 5 Sep 2026 14:41:09 +0530 Subject: [PATCH 02/19] refactor: highlight body tag differently in layers panel --- src/styles/Extn-LayersPanel.less | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index 417e453a0f..ff76d07e1e 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -496,6 +496,15 @@ } } + .layers-node.layers-root-node .layers-node-label { + margin-left: -2px; + } + + .layers-node.layers-root-node .layers-node-tag { + font-weight: 500; + color: @project-panel-text-2; + } + .layers-tree .layers-node-label { flex: 1 1 auto; min-width: @layers-label-min-width; From b486a695bcc647cc0fd03363b3e976f0136774ae Mon Sep 17 00:00:00 2001 From: Pluto Date: Sat, 5 Sep 2026 15:25:42 +0530 Subject: [PATCH 03/19] feat: add scroll to element string for layers panel --- src/nls/root/strings.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js index e549740e2e..7fd870909f 100644 --- a/src/nls/root/strings.js +++ b/src/nls/root/strings.js @@ -828,6 +828,7 @@ define({ "LIVE_PREVIEW_LAYERS_SETTINGS": "Settings", "LIVE_PREVIEW_LAYERS_SHOW_TEXT_NODES": "Show Text Nodes", "LIVE_PREVIEW_LAYERS_HIGHLIGHT_ON_HOVER": "Highlight on Hover in Preview", + "LIVE_PREVIEW_LAYERS_SCROLL_ON_HOVER": "Scroll to Element on Hover", "LIVE_PREVIEW_LAYERS_MOVE_UP": "Move Up", "LIVE_PREVIEW_LAYERS_MOVE_DOWN": "Move Down", "LIVE_PREVIEW_LAYERS_ADD_ATTRIBUTE": "Add Attribute", From 2888b99453123266a9fdd5280930c2fe9c0c40c2 Mon Sep 17 00:00:00 2001 From: Pluto Date: Sat, 5 Sep 2026 17:26:34 +0530 Subject: [PATCH 04/19] feat: add support for editing js rendered elements --- .../BrowserScripts/RemoteFunctions.js | 125 +++++++++++++++++- .../protocol/LiveDevProtocol.js | 12 +- src/nls/root/strings.js | 7 + src/styles/Extn-LayersPanel.less | 29 ++++ 4 files changed, 168 insertions(+), 5 deletions(-) diff --git a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js index df084c80c0..d14a09c913 100644 --- a/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js +++ b/src/LiveDevelopment/BrowserScripts/RemoteFunctions.js @@ -12,6 +12,7 @@ function RemoteFunctions(config = {}) { // to distinguish between phoenix internal vs user created elements PHCODE_INTERNAL_ATTR: "data-phcode-internal-c15r5a9", DATA_BRACKETS_ID_ATTR: "data-brackets-id", // data attribute used to track elements for live preview operations + LP_REF_ATTR: "data-phcode-lp-ref", // identity of a script-added element, stamped only when it is selected HIGHLIGHT_CLASSNAME: "__brackets-ld-highlight" // CSS class name used for highlighting elements in live preview }; @@ -41,6 +42,12 @@ function RemoteFunctions(config = {}) { // this will store the element that was clicked previously (before the new click) // we need this so that we can remove click styling from the previous element when a new element is clicked let previouslySelectedElement = null; + let _sourcelessObserver = null; + let _sourcelessCheckTimer = null; + let _sourcelessPath = null; + let _sourcelessTag = null; + let _sourcelessClass = null; + const SOURCELESS_RECOVER_DELAY_MS = 60; let _selectedFromEditor = false; // the selected element the `phcode-no-lp-edit` opt-out is lifted for, see _isEditOptedOut let _editOptOutOverride = null; @@ -176,6 +183,40 @@ function RemoteFunctions(config = {}) { return isElementInspectable(element, onlyHighlight) && element.hasAttribute(GLOBALS.DATA_BRACKETS_ID_ATTR); } + // no data-brackets-id means a script added the element, so there is no HTML source for it + function isSourceless(element) { + return !!element && !element.hasAttribute(GLOBALS.DATA_BRACKETS_ID_ATTR); + } + + let _lpRefCounter = 0; + const LP_REF_PREFIX = "j"; + const RE_NUMERIC_ID = /^\d+$/; + + function getElementRef(element) { + if (!element || element.nodeType !== Node.ELEMENT_NODE) { + return null; + } + const tagId = element.getAttribute(GLOBALS.DATA_BRACKETS_ID_ATTR); + if (tagId) { + return tagId; + } + let ref = element.getAttribute(GLOBALS.LP_REF_ATTR); + if (!ref) { + ref = LP_REF_PREFIX + (++_lpRefCounter); + element.setAttribute(GLOBALS.LP_REF_ATTR, ref); + } + return ref; + } + + function getElementByRef(ref) { + if (ref === null || ref === undefined || ref === "") { + return null; + } + const text = String(ref); + const attr = RE_NUMERIC_ID.test(text) ? GLOBALS.DATA_BRACKETS_ID_ATTR : GLOBALS.LP_REF_ATTR; + return window.document.querySelector("[" + attr + '="' + text + '"]'); + } + /** * this function calc the screen offset of an element * @@ -205,6 +246,9 @@ function RemoteFunctions(config = {}) { getAllToolHandlers: getAllToolHandlers, isElementEditable: isElementEditable, isElementInspectable: isElementInspectable, + isSourceless: isSourceless, + getElementRef: getElementRef, + getElementByRef: getElementByRef, isElementVisible: isElementVisible, screenOffset: screenOffset, selectElement: selectElement, @@ -754,6 +798,78 @@ function RemoteFunctions(config = {}) { previouslySelectedElement = element; _selectedFromEditor = fromEditor || false; window.__current_ph_lp_selected = element; + if (isSourceless(element)) { + _watchSourcelessSelection(element); + } + } + + function _elementIndexPath(element) { + const path = []; + let el = element; + while (el && el !== window.document.body) { + const parent = el.parentElement; + if (!parent) { + return null; + } + path.unshift(Array.prototype.indexOf.call(parent.children, el)); + el = parent; + } + return el === window.document.body ? path : null; + } + + function _elementAtIndexPath(path) { + let el = window.document.body; + for (let i = 0; i < path.length && el; i++) { + el = el.children[path[i]]; + } + return el || null; + } + + // a re-render replaces a script-added node, so re-select the same tag in the same place or dismiss + function _watchSourcelessSelection(element) { + _unwatchSourcelessSelection(); + _sourcelessPath = _elementIndexPath(element); + if (!_sourcelessPath) { + return; + } + _sourcelessTag = element.tagName; + _sourcelessClass = typeof element.className === "string" ? element.className : ""; + _sourcelessObserver = new MutationObserver(function () { + if (_sourcelessCheckTimer || !previouslySelectedElement || previouslySelectedElement.isConnected) { + return; + } + _sourcelessCheckTimer = setTimeout(_recoverSourcelessSelection, SOURCELESS_RECOVER_DELAY_MS); + }); + _sourcelessObserver.observe(window.document.body, { childList: true, subtree: true }); + } + + function _unwatchSourcelessSelection() { + if (_sourcelessObserver) { + _sourcelessObserver.disconnect(); + _sourcelessObserver = null; + } + if (_sourcelessCheckTimer) { + clearTimeout(_sourcelessCheckTimer); + _sourcelessCheckTimer = null; + } + _sourcelessPath = null; + } + + function _recoverSourcelessSelection() { + _sourcelessCheckTimer = null; + const old = previouslySelectedElement; + if (!old || old.isConnected || !_sourcelessPath) { + return; + } + const fresh = _elementAtIndexPath(_sourcelessPath); + const className = fresh && typeof fresh.className === "string" ? fresh.className : ""; + if (fresh && fresh.tagName === _sourcelessTag && className === _sourcelessClass && + isSourceless(fresh) && isElementInspectable(fresh, true) && isElementVisible(fresh)) { + const fromEditor = _selectedFromEditor; + selectElement(fresh, fromEditor); + } else { + dismissUIAndCleanupState(); + } } function disableHoverListeners() { @@ -849,12 +965,14 @@ function RemoteFunctions(config = {}) { * @param {HTMLElement} element */ function sendSelectionToEditor(element) { - if (!element.hasAttribute(GLOBALS.DATA_BRACKETS_ID_ATTR) || - config.syncSourceAndPreview === false) { + if (config.syncSourceAndPreview === false) { return; } + // sent without a tagId too, so a css file in the editor can still jump to the rule + const tagId = element.getAttribute(GLOBALS.DATA_BRACKETS_ID_ATTR); MessageBroker.send({ - "tagId": element.getAttribute(GLOBALS.DATA_BRACKETS_ID_ATTR), + "tagId": tagId || null, + "sourceless": !tagId, "nodeID": element.id, "nodeClassList": element.classList, "nodeName": element.nodeName, @@ -1542,6 +1660,7 @@ function RemoteFunctions(config = {}) { previouslySelectedElement = null; window.__current_ph_lp_selected = null; } + _unwatchSourcelessSelection(); _editOptOutOverride = null; // Reset hover tracking so the same-element skip doesn't suppress diff --git a/src/LiveDevelopment/MultiBrowserImpl/protocol/LiveDevProtocol.js b/src/LiveDevelopment/MultiBrowserImpl/protocol/LiveDevProtocol.js index 036eafb3a3..85ff6e3920 100644 --- a/src/LiveDevelopment/MultiBrowserImpl/protocol/LiveDevProtocol.js +++ b/src/LiveDevelopment/MultiBrowserImpl/protocol/LiveDevProtocol.js @@ -292,6 +292,13 @@ define(function (require, exports, module) { } return; } + // a script-added element has no place in the html, only a css file can show it + if (!tagId) { + if (activeEditor && (liveDoc.isRelated(activeEditorPath) || _isLessOrSCSS(activeEditor))) { + _searchAndCursorIfCSS(activeEditor, allSelectors, nodeName); + } + return; + } const allOpenFileCount = MainViewManager.getWorkingSetSize(MainViewManager.ALL_PANES); function selectInHTMLEditor(fullHtmlEditor) { const positionResult = HTMLInstrumentation.getPositionFromTagId(fullHtmlEditor, parseInt(tagId, 10)); @@ -385,7 +392,7 @@ define(function (require, exports, module) { } } else if (msg.keyForward) { _forwardKeyboardShortcutFromIframe(msg); - } else if (msg.clicked && msg.tagId) { + } else if (msg.clicked && (msg.tagId || msg.sourceless)) { // While previewing an html file, and if css related file is active in the editor, then clicking on the // live preview, here we set the cursor position in the css file. but this will also trigger a css // highlight as the cursor changes which jumps the live preview selection. @@ -402,7 +409,8 @@ define(function (require, exports, module) { } _keepFocusUntil = 0; editMode && liveDoc && liveDoc.disableHighlightOnCursorActivity(false); - liveDoc && liveDoc.updateHighlight(); + // the caret did not move for a script-added element, re-highlighting would drop its selection + liveDoc && !msg.sourceless && liveDoc.updateHighlight(); } else { // enrich received message with clientId msg.clientId = clientId; diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js index 7fd870909f..c0d5a08799 100644 --- a/src/nls/root/strings.js +++ b/src/nls/root/strings.js @@ -187,6 +187,11 @@ define({ "LIVE_DEV_SETTINGS_SHOW_STARTER_BAR_PREFERENCE": "Show the starter bar when the live preview page is empty. Defaults to 'true'", "LIVE_DEV_SETTINGS_STYLES_BAR_POSITION_PREFERENCE": "Which edge the live preview styles bar docks to, 'top' or 'bottom'. Defaults to 'bottom'", "LIVE_DEV_TOOLBOX_SELECT_PARENT": "Select Parent", + "LIVE_DEV_TOOLBOX_SELECT_SOURCE_PARENT": "Select Parent in Source", + "LIVE_DEV_TOOLBOX_FIND_IN_CODE": "Find in Code", + "LIVE_DEV_SCRIPT_GENERATED_BADGE": "Script generated", + "LIVE_DEV_SCRIPT_GENERATED_TOOLTIP": "Added by a script, so it is not in the HTML source. Its CSS rules can still be edited.", + "LIVE_DEV_STYLER_SCRIPT_ELEMENT_NOTICE": "Script-generated element: edits are saved to its CSS rules", "LIVE_DEV_TOOLBOX_EDIT_TEXT": "Edit Text", "LIVE_DEV_TOOLBOX_DOUBLE_CLICK_HINT": "Double-click", "LIVE_DEV_TOOLBOX_EDIT_ELEMENT_PROPS": "Edit Element Properties", @@ -841,6 +846,8 @@ define({ "LIVE_PREVIEW_LAYERS_OPEN_SOURCE": "Open in editor", "LIVE_PREVIEW_LAYERS_RULE_INACTIVE": "Not active in the current state", "LIVE_PREVIEW_LAYERS_EDIT_STYLE": "Edit in Styles Bar", + "LIVE_PREVIEW_LAYERS_SHOW_SCRIPT_NODES": "Show Script-Generated Elements", + "LIVE_PREVIEW_LAYERS_SCRIPT_GENERATED": "Generated by script, not in the source file", "LIVE_DEV_DETACHED_REPLACED_WITH_DEVTOOLS": "Live Preview was canceled because the browser's developer tools were opened", "LIVE_DEV_DETACHED_TARGET_CLOSED": "Live Preview was canceled because the page was closed in the browser", diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index ff76d07e1e..cd0f25440b 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -500,6 +500,35 @@ margin-left: -2px; } + .layers-node.layers-script-node .layers-node-icon, + .layers-node.layers-script-node .layers-node-name, + .layers-node.layers-script-node .layers-node-tag { + opacity: 0.72; + } + + .layers-node-badge { + display: inline-flex; + align-items: center; + flex: none; + margin-left: 5px; + color: @project-panel-text-2; + opacity: 0.8; + + svg { + width: 11px; + height: 11px; + display: block; + } + } + + .layers-props-note { + padding: 4px 5px 6px; + color: @project-panel-text-2; + font-style: italic; + line-height: 1.4; + white-space: normal; + } + .layers-node.layers-root-node .layers-node-tag { font-weight: 500; color: @project-panel-text-2; From 5f5dab5107f11b30bbad8f3f1610767c4957f84a Mon Sep 17 00:00:00 2001 From: Pluto Date: Sat, 5 Sep 2026 20:38:09 +0530 Subject: [PATCH 05/19] feat: remove source code search option --- src/nls/root/strings.js | 2 -- src/styles/Extn-LayersPanel.less | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js index c0d5a08799..cc7611c24a 100644 --- a/src/nls/root/strings.js +++ b/src/nls/root/strings.js @@ -187,8 +187,6 @@ define({ "LIVE_DEV_SETTINGS_SHOW_STARTER_BAR_PREFERENCE": "Show the starter bar when the live preview page is empty. Defaults to 'true'", "LIVE_DEV_SETTINGS_STYLES_BAR_POSITION_PREFERENCE": "Which edge the live preview styles bar docks to, 'top' or 'bottom'. Defaults to 'bottom'", "LIVE_DEV_TOOLBOX_SELECT_PARENT": "Select Parent", - "LIVE_DEV_TOOLBOX_SELECT_SOURCE_PARENT": "Select Parent in Source", - "LIVE_DEV_TOOLBOX_FIND_IN_CODE": "Find in Code", "LIVE_DEV_SCRIPT_GENERATED_BADGE": "Script generated", "LIVE_DEV_SCRIPT_GENERATED_TOOLTIP": "Added by a script, so it is not in the HTML source. Its CSS rules can still be edited.", "LIVE_DEV_STYLER_SCRIPT_ELEMENT_NOTICE": "Script-generated element: edits are saved to its CSS rules", diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index cd0f25440b..b0720683f3 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -503,7 +503,7 @@ .layers-node.layers-script-node .layers-node-icon, .layers-node.layers-script-node .layers-node-name, .layers-node.layers-script-node .layers-node-tag { - opacity: 0.72; + opacity: 0.5; } .layers-node-badge { From 1bead74c25d39215fb56614b421979870ed01913 Mon Sep 17 00:00:00 2001 From: Pluto Date: Sat, 5 Sep 2026 21:05:38 +0530 Subject: [PATCH 06/19] feat: add better script generated box styles --- src/nls/root/strings.js | 1 - src/styles/Extn-LayersPanel.less | 30 ++++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js index cc7611c24a..6ea83d3a9a 100644 --- a/src/nls/root/strings.js +++ b/src/nls/root/strings.js @@ -187,7 +187,6 @@ define({ "LIVE_DEV_SETTINGS_SHOW_STARTER_BAR_PREFERENCE": "Show the starter bar when the live preview page is empty. Defaults to 'true'", "LIVE_DEV_SETTINGS_STYLES_BAR_POSITION_PREFERENCE": "Which edge the live preview styles bar docks to, 'top' or 'bottom'. Defaults to 'bottom'", "LIVE_DEV_TOOLBOX_SELECT_PARENT": "Select Parent", - "LIVE_DEV_SCRIPT_GENERATED_BADGE": "Script generated", "LIVE_DEV_SCRIPT_GENERATED_TOOLTIP": "Added by a script, so it is not in the HTML source. Its CSS rules can still be edited.", "LIVE_DEV_STYLER_SCRIPT_ELEMENT_NOTICE": "Script-generated element: edits are saved to its CSS rules", "LIVE_DEV_TOOLBOX_EDIT_TEXT": "Edit Text", diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index b0720683f3..333f79f3d7 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -522,6 +522,9 @@ } .layers-props-note { + display: flex; + align-items: flex-start; + gap: 5px; padding: 4px 5px 6px; color: @project-panel-text-2; font-style: italic; @@ -529,6 +532,18 @@ white-space: normal; } + .layers-props-note-icon { + display: flex; + flex: none; + margin-top: 1px; + + svg { + width: 13px; + height: 13px; + display: block; + } + } + .layers-node.layers-root-node .layers-node-tag { font-weight: 500; color: @project-panel-text-2; @@ -673,6 +688,21 @@ } } + .layers-prop-static { + flex: 1; + min-width: 0; + padding: 0 5px; + color: @project-panel-text-2; + font-family: @layers-mono; + font-size: @sidebar-xs-font-size; + line-height: 22px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + cursor: default; + user-select: none; + } + .layers-attrs { margin-top: 6px; } From ac0f32052689d6aa1a32fe7cf1ccd65f33c220d1 Mon Sep 17 00:00:00 2001 From: Pluto Date: Sat, 5 Sep 2026 21:49:18 +0530 Subject: [PATCH 07/19] feat: add styles for layers panel inline style editing --- src/nls/root/strings.js | 2 + src/styles/Extn-LayersPanel.less | 78 ++++++++++++++++++++++++++++---- 2 files changed, 71 insertions(+), 9 deletions(-) diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js index 6ea83d3a9a..d5de7aae40 100644 --- a/src/nls/root/strings.js +++ b/src/nls/root/strings.js @@ -843,6 +843,8 @@ define({ "LIVE_PREVIEW_LAYERS_OPEN_SOURCE": "Open in editor", "LIVE_PREVIEW_LAYERS_RULE_INACTIVE": "Not active in the current state", "LIVE_PREVIEW_LAYERS_EDIT_STYLE": "Edit in Styles Bar", + "LIVE_PREVIEW_LAYERS_ADD_DECLARATION": "Add Declaration", + "LIVE_PREVIEW_LAYERS_REMOVE_DECLARATION": "Remove Declaration", "LIVE_PREVIEW_LAYERS_SHOW_SCRIPT_NODES": "Show Script-Generated Elements", "LIVE_PREVIEW_LAYERS_SCRIPT_GENERATED": "Generated by script, not in the source file", diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index 333f79f3d7..899efd3efb 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -769,12 +769,12 @@ .layers-decl { display: flex; align-items: baseline; - gap: 4px; min-height: 20px; - padding-left: 8px; + padding: 0 4px 0 8px; font-family: @layers-mono; font-size: @sidebar-xs-font-size; - user-select: text; + line-height: 18px; + user-select: none; &:hover { background: @layers-hover-bg; @@ -792,15 +792,72 @@ } .layers-decl-value { - flex: 1; + flex: 0 1 auto; min-width: 0; color: @layers-prop-value; word-break: break-all; } + .layers-decl-field, + .layers-decl-input { + margin: 0 -2px; + + &.layers-decl-value { + margin-left: 3px; + } + } + + .layers-decl-field { + padding: 0 2px; + border-radius: 3px; + cursor: text; + + &:hover { + background: @layers-input-bg-focus; + box-shadow: inset 0 0 0 1px @layers-border; + } + } + + .layers-decl-input { + box-sizing: border-box; + height: 18px; + min-width: 0; + padding: 0 2px; + border: 1px solid @layers-accent; + border-radius: 3px; + outline: none; + box-shadow: none; + background: @layers-input-bg-focus; + font: inherit; + line-height: 16px; + text-decoration: none; + + &::placeholder { + color: @project-panel-text-2; + opacity: 0.6; + } + + &.layers-decl-value { + flex: 1; + } + } + + .layers-decl.layers-editing:hover { + background: transparent; + } + + .layers-decl-actions { + display: flex; + align-items: center; + gap: 1px; + flex: none; + align-self: center; + margin-left: auto; + padding-left: 6px; + } + .layers-decl.layers-overridden { - .layers-decl-name, - .layers-decl-value { + .layers-decl-field { text-decoration: line-through; color: @project-panel-text-2; } @@ -811,18 +868,21 @@ align-self: center; } - .layers-decl .layers-icon-btn { + .layers-decl .layers-icon-btn, + .layers-rule-add { opacity: 0; } .layers-decl:hover .layers-icon-btn, - .layers-decl .layers-icon-btn:focus { + .layers-decl .layers-icon-btn:focus, + .layers-rule:hover .layers-rule-add, + .layers-rule-add:focus { opacity: 1; } .layers-rule { margin-bottom: 6px; - padding-bottom: 6px; + padding-bottom: 8px; border-bottom: 1px solid @layers-border; &:last-child { From 8e66e7d05a3bba6420033be908e4106a2f4232eb Mon Sep 17 00:00:00 2001 From: Pluto Date: Sat, 5 Sep 2026 21:58:36 +0530 Subject: [PATCH 08/19] feat: add styles for layers panel code hints --- src/styles/Extn-LayersPanel.less | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index 899efd3efb..581c5c18b9 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -969,6 +969,59 @@ body.layers-resizing { user-select: none; } +.layers-hints { + position: fixed; + z-index: 1000; + box-sizing: border-box; + max-height: 220px; + padding: 3px; + overflow-y: auto; + border: 1px solid rgba(255, 255, 255, 0.12); + border-radius: 6px; + background: #2f2f2f; + box-shadow: 0 6px 18px rgba(0, 0, 0, 0.4); + font-family: @layers-mono; + font-size: @sidebar-xs-font-size; + line-height: 18px; +} + +.layers-hint { + display: flex; + align-items: center; + gap: 6px; + padding: 1px 6px; + border-radius: 3px; + color: #e0e0e0; + white-space: nowrap; + cursor: pointer; + + &:hover { + background: @layers-hover-bg; + } + + &.layers-hint-selected { + background: @layers-accent-soft; + } + + strong { + font-weight: 600; + color: @layers-accent; + } +} + +.layers-hint-label { + overflow: hidden; + text-overflow: ellipsis; +} + +.layers-hint-swatch { + flex: none; + width: 10px; + height: 10px; + border: 1px solid rgba(255, 255, 255, 0.25); + border-radius: 2px; +} + .dropdownbutton-popup.layers-menu-popup { max-height: 80vh; } From 5ac409453bc03b46e1cb82eb67abd137030d3201 Mon Sep 17 00:00:00 2001 From: Pluto Date: Sat, 5 Sep 2026 22:16:35 +0530 Subject: [PATCH 09/19] feat: unify layers panel field input styles --- src/nls/root/strings.js | 1 + src/styles/Extn-LayersPanel.less | 114 ++++++++++++++----------------- 2 files changed, 51 insertions(+), 64 deletions(-) diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js index d5de7aae40..500c05f51c 100644 --- a/src/nls/root/strings.js +++ b/src/nls/root/strings.js @@ -845,6 +845,7 @@ define({ "LIVE_PREVIEW_LAYERS_EDIT_STYLE": "Edit in Styles Bar", "LIVE_PREVIEW_LAYERS_ADD_DECLARATION": "Add Declaration", "LIVE_PREVIEW_LAYERS_REMOVE_DECLARATION": "Remove Declaration", + "LIVE_PREVIEW_LAYERS_EDIT_DECLARATION": "Edit Declaration", "LIVE_PREVIEW_LAYERS_SHOW_SCRIPT_NODES": "Show Script-Generated Elements", "LIVE_PREVIEW_LAYERS_SCRIPT_GENERATED": "Generated by script, not in the source file", diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index 581c5c18b9..0a81b0ae02 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -67,6 +67,38 @@ } } +.layers-field-input() { + box-sizing: border-box; + height: 22px; + padding: 0 6px; + margin: 0; + border: 1px solid transparent; + border-radius: 4px; + outline: none; + box-shadow: none; + background: transparent; + color: @project-panel-text-1; + font-family: @layers-mono; + font-size: @sidebar-xs-font-size; + line-height: 20px; + + &::placeholder { + color: @project-panel-text-2; + opacity: 0.6; + } + + &:hover:not([readonly]) { + border-color: @layers-border; + background: @layers-input-bg; + } + + &:focus { + border-color: @layers-accent; + background: @layers-input-bg-focus; + box-shadow: 0 0 0 2px @layers-accent-soft; + } +} + .layers-tab-container { display: flex; flex-direction: column; @@ -651,34 +683,12 @@ } .layers-prop-input[type="text"] { + .layers-field-input(); flex: 1; min-width: 0; - height: 22px; - padding: 0 5px; - margin: 0; - border: 1px solid transparent; - border-radius: 4px; - outline: none; - box-shadow: none; - background: transparent; - color: @project-panel-text-1; - font-family: @layers-mono; - font-size: @sidebar-xs-font-size; text-overflow: ellipsis; - &::placeholder { - color: @project-panel-text-2; - opacity: 0.6; - } - - &:hover:not([readonly]) { - border-color: @layers-border; - background: @layers-input-bg; - } - &:focus { - border-color: @layers-accent; - background: @layers-input-bg-focus; text-overflow: clip; } @@ -768,12 +778,12 @@ .layers-decl { display: flex; - align-items: baseline; - min-height: 20px; + align-items: center; + min-height: 26px; padding: 0 4px 0 8px; font-family: @layers-mono; font-size: @sidebar-xs-font-size; - line-height: 18px; + line-height: 22px; user-select: none; &:hover { @@ -794,51 +804,28 @@ .layers-decl-value { flex: 0 1 auto; min-width: 0; + margin-left: 5px; color: @layers-prop-value; word-break: break-all; } - .layers-decl-field, - .layers-decl-input { - margin: 0 -2px; - - &.layers-decl-value { - margin-left: 3px; - } - } - - .layers-decl-field { - padding: 0 2px; - border-radius: 3px; - cursor: text; - - &:hover { - background: @layers-input-bg-focus; - box-shadow: inset 0 0 0 1px @layers-border; - } - } - .layers-decl-input { - box-sizing: border-box; - height: 18px; - min-width: 0; - padding: 0 2px; - border: 1px solid @layers-accent; - border-radius: 3px; - outline: none; - box-shadow: none; - background: @layers-input-bg-focus; - font: inherit; - line-height: 16px; + .layers-field-input(); + flex: 0 1 auto; + min-width: 3ch; + max-width: 100%; + padding: 0 4px; + border-color: @layers-border; + background: @layers-input-bg; text-decoration: none; - &::placeholder { - color: @project-panel-text-2; - opacity: 0.6; + &.layers-decl-name { + color: @layers-prop-name; } &.layers-decl-value { - flex: 1; + margin: 0 3px 0 5px; + color: @layers-prop-value; } } @@ -849,11 +836,10 @@ .layers-decl-actions { display: flex; align-items: center; - gap: 1px; + gap: 2px; flex: none; - align-self: center; margin-left: auto; - padding-left: 6px; + padding-left: 8px; } .layers-decl.layers-overridden { From c4a5adce4fab9ecdfde079399170a08f9fbacc11 Mon Sep 17 00:00:00 2001 From: Pluto Date: Sat, 5 Sep 2026 22:24:16 +0530 Subject: [PATCH 10/19] fix: match layers panel field focus style to the search box --- src/styles/Extn-LayersPanel.less | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index 0a81b0ae02..ae6fcdaa67 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -73,7 +73,7 @@ padding: 0 6px; margin: 0; border: 1px solid transparent; - border-radius: 4px; + border-radius: 6px; outline: none; box-shadow: none; background: transparent; @@ -95,7 +95,6 @@ &:focus { border-color: @layers-accent; background: @layers-input-bg-focus; - box-shadow: 0 0 0 2px @layers-accent-soft; } } @@ -809,7 +808,7 @@ word-break: break-all; } - .layers-decl-input { + .layers-decl-input[type="text"] { .layers-field-input(); flex: 0 1 auto; min-width: 3ch; From 5f98e77aced2252a5808ba61e4f5a9755af2eea9 Mon Sep 17 00:00:00 2001 From: Pluto Date: Sat, 5 Sep 2026 23:03:17 +0530 Subject: [PATCH 11/19] fix: semi colons overflowing in styles section --- src/styles/Extn-LayersPanel.less | 59 ++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index ae6fcdaa67..a7ca5d83a9 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -73,7 +73,7 @@ padding: 0 6px; margin: 0; border: 1px solid transparent; - border-radius: 6px; + border-radius: 4px; outline: none; box-shadow: none; background: transparent; @@ -81,20 +81,26 @@ font-family: @layers-mono; font-size: @sidebar-xs-font-size; line-height: 20px; + transition: none; &::placeholder { color: @project-panel-text-2; opacity: 0.6; } + &::selection { + background: fade(@layers-accent, 28%); + } + &:hover:not([readonly]) { border-color: @layers-border; background: @layers-input-bg; } - &:focus { + &:focus:not([readonly]) { border-color: @layers-accent; background: @layers-input-bg-focus; + box-shadow: none; } } @@ -681,7 +687,7 @@ } } - .layers-prop-input[type="text"] { + input.layers-prop-input[type="text"] { .layers-field-input(); flex: 1; min-width: 0; @@ -776,8 +782,12 @@ } .layers-decl { + position: relative; display: flex; align-items: center; + box-sizing: border-box; + min-width: 100%; + width: max-content; min-height: 26px; padding: 0 4px 0 8px; font-family: @layers-mono; @@ -801,18 +811,15 @@ } .layers-decl-value { - flex: 0 1 auto; - min-width: 0; + flex: none; margin-left: 5px; color: @layers-prop-value; - word-break: break-all; } - .layers-decl-input[type="text"] { + input.layers-decl-input[type="text"] { .layers-field-input(); - flex: 0 1 auto; + flex: none; min-width: 3ch; - max-width: 100%; padding: 0 4px; border-color: @layers-border; background: @layers-input-bg; @@ -833,12 +840,35 @@ } .layers-decl-actions { + display: none; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + pointer-events: none; + } + + .layers-decl-tools { display: flex; align-items: center; gap: 2px; - flex: none; + position: sticky; + right: 0; + height: 100%; margin-left: auto; - padding-left: 8px; + padding: 0 4px 0 8px; + pointer-events: auto; + background: @layers-row-hover-bg; + } + + .layers-decl:hover .layers-decl-actions, + .layers-decl-actions:focus-within { + display: flex; + } + + .layers-decl.layers-editing .layers-decl-actions { + display: none; } .layers-decl.layers-overridden { @@ -853,13 +883,10 @@ align-self: center; } - .layers-decl .layers-icon-btn, .layers-rule-add { opacity: 0; } - .layers-decl:hover .layers-icon-btn, - .layers-decl .layers-icon-btn:focus, .layers-rule:hover .layers-rule-add, .layers-rule-add:focus { opacity: 1; @@ -874,10 +901,6 @@ margin-bottom: 0; border-bottom: none; } - - &.layers-inactive { - opacity: 0.6; - } } .layers-rule-header { From 911eeb6f14a9e46ac1283279ef049ad8d0f5250c Mon Sep 17 00:00:00 2001 From: Pluto Date: Sun, 6 Sep 2026 16:56:45 +0530 Subject: [PATCH 12/19] feat: allow text node highlighting support --- src/styles/Extn-LayersPanel.less | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index a7ca5d83a9..ad931f4fdd 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -485,6 +485,10 @@ box-shadow: inset 2px 0 0 fade(@layers-accent, 35%); } + &.layers-text-active { + background: @layers-accent-soft; + } + &.layers-moving { position: relative; z-index: 1; @@ -972,6 +976,10 @@ font-style: italic; } +.layers-node.layers-text-active .layers-node-text { + color: @project-panel-text-1; +} + body.layers-resizing { cursor: row-resize; user-select: none; From f4ba30fd5f8dac8daf4508864103e8acc2a9f320 Mon Sep 17 00:00:00 2001 From: Pluto Date: Sun, 6 Sep 2026 17:35:43 +0530 Subject: [PATCH 13/19] feat: not show tagnames in the layers panel --- src/nls/root/strings.js | 1 + src/styles/Extn-LayersPanel.less | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js index 500c05f51c..8e3db4d9ab 100644 --- a/src/nls/root/strings.js +++ b/src/nls/root/strings.js @@ -848,6 +848,7 @@ define({ "LIVE_PREVIEW_LAYERS_EDIT_DECLARATION": "Edit Declaration", "LIVE_PREVIEW_LAYERS_SHOW_SCRIPT_NODES": "Show Script-Generated Elements", "LIVE_PREVIEW_LAYERS_SCRIPT_GENERATED": "Generated by script, not in the source file", + "LIVE_PREVIEW_LAYERS_TAG_TOOLTIP": "Show Tag Name Tooltip", "LIVE_DEV_DETACHED_REPLACED_WITH_DEVTOOLS": "Live Preview was canceled because the browser's developer tools were opened", "LIVE_DEV_DETACHED_TARGET_CLOSED": "Live Preview was canceled because the page was closed in the browser", diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index ad931f4fdd..728b7d7fe8 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -965,12 +965,31 @@ margin-left: 5px; color: @project-panel-text-2; + &:not(:first-child) { + display: none; + } + &:first-child { margin-left: 0; color: @project-panel-text-1; } } +.layers-tag-tip { + position: fixed; + z-index: 1000; + padding: 2px 6px; + border: 1px solid rgba(255, 255, 255, 0.12); + border-radius: 4px; + background: #2f2f2f; + color: @project-panel-text-1; + font-family: @layers-mono; + font-size: 11px; + line-height: 15px; + white-space: nowrap; + pointer-events: none; +} + .layers-node-text { color: @project-panel-text-2; font-style: italic; From b4aa92f7671fa0eeadc493b309425528239bb06c Mon Sep 17 00:00:00 2001 From: Pluto Date: Sun, 6 Sep 2026 20:37:59 +0530 Subject: [PATCH 14/19] feat: italicize the text content in layers panel --- src/styles/Extn-LayersPanel.less | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index 728b7d7fe8..738ad016df 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -960,6 +960,10 @@ color: @project-panel-text-1; } +.layers-node-name.layers-node-prose { + font-style: italic; +} + .layers-node-tag { flex: none; margin-left: 5px; From fd93dbc407211bdb12158fa0d969d3033213263b Mon Sep 17 00:00:00 2001 From: Pluto Date: Sun, 6 Sep 2026 22:06:41 +0530 Subject: [PATCH 15/19] fix: don't clip text node labels on hover --- src/styles/Extn-LayersPanel.less | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index 738ad016df..780556920b 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -627,9 +627,9 @@ display: block; } - .layers-node:hover .layers-node-label, + .layers-node:hover:not(.layers-no-tools) .layers-node-label, .layers-node.layers-actions-open .layers-node-label, - .layers-node:focus-within .layers-node-label { + .layers-node:focus-within:not(.layers-no-tools) .layers-node-label { padding-right: @layers-tools-width; } From 639a0725c2a439669f40993ff683a82ecb7e22f3 Mon Sep 17 00:00:00 2001 From: Pluto Date: Sun, 6 Sep 2026 22:08:33 +0530 Subject: [PATCH 16/19] feat: collapse panel sections on double click or chevron click --- src/styles/Extn-LayersPanel.less | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index 780556920b..89ed7f2b88 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -241,7 +241,7 @@ padding: 0 6px 0 2px; flex-shrink: 0; box-sizing: border-box; - cursor: pointer; + cursor: default; user-select: none; font-size: @sidebar-xs-font-size; font-weight: 700; @@ -261,13 +261,20 @@ width: 18px; height: 18px; flex: none; + border-radius: 4px; color: @project-panel-text-2; + cursor: pointer; svg { width: 18px; height: 18px; transition: transform 120ms ease; } + + &:hover { + background: @layers-hover-bg; + color: @project-panel-text-1; + } } .layers-collapsed > .layers-section-header .layers-chevron svg { From 5daeca4536547eebc2dd435deb7e96889a7323c0 Mon Sep 17 00:00:00 2001 From: Pluto Date: Sun, 6 Sep 2026 22:10:54 +0530 Subject: [PATCH 17/19] fix: center the script generated badge icon --- src/styles/Extn-LayersPanel.less | 1 + 1 file changed, 1 insertion(+) diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index 89ed7f2b88..9620194663 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -557,6 +557,7 @@ .layers-node-badge { display: inline-flex; align-items: center; + align-self: center; flex: none; margin-left: 5px; color: @project-panel-text-2; From b442da394ec538e4e43d079bf7df36c14a3bdba4 Mon Sep 17 00:00:00 2001 From: Pluto Date: Sun, 6 Sep 2026 22:11:41 +0530 Subject: [PATCH 18/19] feat: add gap between the elements header buttons --- src/styles/Extn-LayersPanel.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/styles/Extn-LayersPanel.less b/src/styles/Extn-LayersPanel.less index 9620194663..ef16cc5497 100644 --- a/src/styles/Extn-LayersPanel.less +++ b/src/styles/Extn-LayersPanel.less @@ -290,7 +290,7 @@ .layers-section-actions { display: flex; align-items: center; - gap: 2px; + gap: 4px; margin-left: auto; flex-shrink: 0; opacity: 0; From b6bf5f37af599e91f49cc68bb83bec17c13a6f4d Mon Sep 17 00:00:00 2001 From: Pluto Date: Sun, 6 Sep 2026 22:47:19 +0530 Subject: [PATCH 19/19] build: update pro deps --- tracking-repos.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tracking-repos.json b/tracking-repos.json index 9caac13dca..9698081a94 100644 --- a/tracking-repos.json +++ b/tracking-repos.json @@ -1,5 +1,5 @@ { "phoenixPro": { - "commitID": "aa248bfb0bbff0a2d24f4f107c019b0f451b26fc" + "commitID": "58084dc226fc826ea6b93ee6ef8f8b36c5f1b193" } }