@gxp-dev/tools 2.0.63 → 2.0.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -31
- package/bin/gx-devtools.js +74 -54
- package/bin/lib/cli.js +23 -21
- package/bin/lib/commands/add-dependency.js +366 -325
- package/bin/lib/commands/assets.js +137 -139
- package/bin/lib/commands/build.js +169 -174
- package/bin/lib/commands/datastore.js +181 -183
- package/bin/lib/commands/dev.js +127 -131
- package/bin/lib/commands/extensions.js +147 -149
- package/bin/lib/commands/extract-config.js +73 -67
- package/bin/lib/commands/index.js +12 -12
- package/bin/lib/commands/init.js +342 -240
- package/bin/lib/commands/publish.js +69 -75
- package/bin/lib/commands/socket.js +69 -69
- package/bin/lib/commands/ssl.js +14 -14
- package/bin/lib/constants.js +10 -24
- package/bin/lib/tui/App.tsx +761 -705
- package/bin/lib/tui/components/AIPanel.tsx +191 -171
- package/bin/lib/tui/components/CommandInput.tsx +394 -343
- package/bin/lib/tui/components/GeminiPanel.tsx +175 -151
- package/bin/lib/tui/components/Header.tsx +23 -21
- package/bin/lib/tui/components/LogPanel.tsx +244 -220
- package/bin/lib/tui/components/TabBar.tsx +50 -48
- package/bin/lib/tui/components/WelcomeScreen.tsx +126 -71
- package/bin/lib/tui/index.tsx +37 -39
- package/bin/lib/tui/services/AIService.ts +518 -462
- package/bin/lib/tui/services/ExtensionService.ts +140 -129
- package/bin/lib/tui/services/GeminiService.ts +367 -337
- package/bin/lib/tui/services/ServiceManager.ts +344 -322
- package/bin/lib/tui/services/SocketService.ts +168 -168
- package/bin/lib/tui/services/ViteService.ts +88 -88
- package/bin/lib/tui/services/index.ts +47 -22
- package/bin/lib/utils/ai-scaffold.js +291 -280
- package/bin/lib/utils/extract-config.js +157 -140
- package/bin/lib/utils/files.js +82 -86
- package/bin/lib/utils/index.js +7 -7
- package/bin/lib/utils/paths.js +34 -34
- package/bin/lib/utils/prompts.js +194 -169
- package/bin/lib/utils/ssl.js +79 -81
- package/browser-extensions/README.md +0 -1
- package/browser-extensions/chrome/background.js +244 -237
- package/browser-extensions/chrome/content.js +32 -29
- package/browser-extensions/chrome/devtools.html +7 -7
- package/browser-extensions/chrome/devtools.js +19 -19
- package/browser-extensions/chrome/inspector.js +802 -767
- package/browser-extensions/chrome/manifest.json +71 -63
- package/browser-extensions/chrome/panel.html +674 -636
- package/browser-extensions/chrome/panel.js +722 -712
- package/browser-extensions/chrome/popup.html +586 -543
- package/browser-extensions/chrome/popup.js +282 -244
- package/browser-extensions/chrome/rules.json +1 -1
- package/browser-extensions/chrome/test-chrome.html +216 -136
- package/browser-extensions/chrome/test-mixed-content.html +284 -189
- package/browser-extensions/chrome/test-uri-pattern.html +221 -198
- package/browser-extensions/firefox/README.md +9 -6
- package/browser-extensions/firefox/background.js +221 -218
- package/browser-extensions/firefox/content.js +55 -52
- package/browser-extensions/firefox/debug-errors.html +386 -228
- package/browser-extensions/firefox/debug-https.html +153 -105
- package/browser-extensions/firefox/devtools.html +7 -7
- package/browser-extensions/firefox/devtools.js +23 -20
- package/browser-extensions/firefox/inspector.js +802 -767
- package/browser-extensions/firefox/manifest.json +68 -68
- package/browser-extensions/firefox/panel.html +674 -636
- package/browser-extensions/firefox/panel.js +722 -712
- package/browser-extensions/firefox/popup.html +572 -535
- package/browser-extensions/firefox/popup.js +281 -236
- package/browser-extensions/firefox/test-gramercy.html +170 -125
- package/browser-extensions/firefox/test-imports.html +59 -55
- package/browser-extensions/firefox/test-masking.html +231 -140
- package/browser-extensions/firefox/test-uri-pattern.html +221 -198
- package/dist/tui/App.d.ts +1 -1
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +154 -150
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/components/AIPanel.d.ts.map +1 -1
- package/dist/tui/components/AIPanel.js +42 -35
- package/dist/tui/components/AIPanel.js.map +1 -1
- package/dist/tui/components/CommandInput.d.ts +1 -1
- package/dist/tui/components/CommandInput.d.ts.map +1 -1
- package/dist/tui/components/CommandInput.js +92 -62
- package/dist/tui/components/CommandInput.js.map +1 -1
- package/dist/tui/components/GeminiPanel.d.ts.map +1 -1
- package/dist/tui/components/GeminiPanel.js +37 -30
- package/dist/tui/components/GeminiPanel.js.map +1 -1
- package/dist/tui/components/Header.d.ts.map +1 -1
- package/dist/tui/components/Header.js +1 -1
- package/dist/tui/components/Header.js.map +1 -1
- package/dist/tui/components/LogPanel.d.ts +1 -1
- package/dist/tui/components/LogPanel.d.ts.map +1 -1
- package/dist/tui/components/LogPanel.js +26 -24
- package/dist/tui/components/LogPanel.js.map +1 -1
- package/dist/tui/components/TabBar.d.ts +2 -2
- package/dist/tui/components/TabBar.d.ts.map +1 -1
- package/dist/tui/components/TabBar.js +11 -11
- package/dist/tui/components/TabBar.js.map +1 -1
- package/dist/tui/components/WelcomeScreen.d.ts.map +1 -1
- package/dist/tui/components/WelcomeScreen.js +6 -6
- package/dist/tui/components/WelcomeScreen.js.map +1 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +8 -8
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/services/AIService.d.ts +2 -2
- package/dist/tui/services/AIService.d.ts.map +1 -1
- package/dist/tui/services/AIService.js +165 -125
- package/dist/tui/services/AIService.js.map +1 -1
- package/dist/tui/services/ExtensionService.d.ts +1 -1
- package/dist/tui/services/ExtensionService.d.ts.map +1 -1
- package/dist/tui/services/ExtensionService.js +33 -26
- package/dist/tui/services/ExtensionService.js.map +1 -1
- package/dist/tui/services/GeminiService.d.ts +1 -1
- package/dist/tui/services/GeminiService.d.ts.map +1 -1
- package/dist/tui/services/GeminiService.js +87 -76
- package/dist/tui/services/GeminiService.js.map +1 -1
- package/dist/tui/services/ServiceManager.d.ts +3 -3
- package/dist/tui/services/ServiceManager.d.ts.map +1 -1
- package/dist/tui/services/ServiceManager.js +72 -58
- package/dist/tui/services/ServiceManager.js.map +1 -1
- package/dist/tui/services/SocketService.d.ts.map +1 -1
- package/dist/tui/services/SocketService.js +32 -32
- package/dist/tui/services/SocketService.js.map +1 -1
- package/dist/tui/services/ViteService.d.ts.map +1 -1
- package/dist/tui/services/ViteService.js +26 -28
- package/dist/tui/services/ViteService.js.map +1 -1
- package/dist/tui/services/index.d.ts +6 -6
- package/dist/tui/services/index.d.ts.map +1 -1
- package/dist/tui/services/index.js +6 -6
- package/dist/tui/services/index.js.map +1 -1
- package/mcp/gxp-api-server.js +83 -81
- package/package.json +109 -93
- package/runtime/PortalContainer.vue +258 -234
- package/runtime/dev-tools/DevToolsModal.vue +153 -155
- package/runtime/dev-tools/LayoutSwitcher.vue +144 -140
- package/runtime/dev-tools/MockDataEditor.vue +456 -433
- package/runtime/dev-tools/SocketSimulator.vue +379 -371
- package/runtime/dev-tools/StoreInspector.vue +517 -455
- package/runtime/dev-tools/index.js +5 -5
- package/runtime/fallback-layouts/PrivateLayout.vue +2 -2
- package/runtime/fallback-layouts/PublicLayout.vue +2 -2
- package/runtime/fallback-layouts/SystemLayout.vue +2 -2
- package/runtime/gxpStringsPlugin.js +159 -134
- package/runtime/index.html +17 -19
- package/runtime/main.js +24 -22
- package/runtime/mock-api/auth-middleware.js +15 -15
- package/runtime/mock-api/image-generator.js +46 -46
- package/runtime/mock-api/index.js +55 -55
- package/runtime/mock-api/response-generator.js +116 -105
- package/runtime/mock-api/route-generator.js +107 -84
- package/runtime/mock-api/socket-triggers.js +94 -93
- package/runtime/mock-api/spec-loader.js +79 -80
- package/runtime/package.json +3 -0
- package/runtime/server.js +68 -68
- package/runtime/stores/gxpPortalConfigStore.js +204 -186
- package/runtime/stores/index.js +2 -2
- package/runtime/vite-inspector-plugin.js +858 -707
- package/runtime/vite-source-tracker-plugin.js +132 -113
- package/runtime/vite.config.js +191 -139
- package/scripts/launch-chrome.js +41 -41
- package/scripts/pack-chrome.js +38 -39
- package/socket-events/AiSessionMessageCreated.json +17 -17
- package/socket-events/SocialStreamPostCreated.json +23 -23
- package/socket-events/SocialStreamPostVariantCompleted.json +22 -22
- package/template/.claude/agents/gxp-developer.md +100 -99
- package/template/.claude/settings.json +7 -7
- package/template/AGENTS.md +30 -23
- package/template/GEMINI.md +20 -20
- package/template/README.md +70 -53
- package/template/app-manifest.json +2 -4
- package/template/configuration.json +10 -10
- package/template/default-styling.css +1 -1
- package/template/index.html +18 -20
- package/template/main.js +24 -22
- package/template/src/DemoPage.vue +415 -362
- package/template/src/Plugin.vue +76 -85
- package/template/src/stores/index.js +3 -3
- package/template/src/stores/test-data.json +164 -172
- package/template/theme-layouts/AdditionalStyling.css +50 -50
- package/template/theme-layouts/PrivateLayout.vue +8 -12
- package/template/theme-layouts/PublicLayout.vue +8 -12
- package/template/theme-layouts/SystemLayout.vue +8 -12
- package/template/vite.extend.js +45 -0
- package/template/vite.config.js +0 -409
|
@@ -1,113 +1,161 @@
|
|
|
1
|
-
<!
|
|
1
|
+
<!doctype html>
|
|
2
2
|
<html>
|
|
3
|
-
<head>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
</div>
|
|
29
|
-
|
|
30
|
-
<div class="test-section">
|
|
31
|
-
<h3>Step 3: Console Logs</h3>
|
|
32
|
-
<p>Open DevTools Console to see detailed logs from:</p>
|
|
33
|
-
<ul>
|
|
34
|
-
<li><strong>Background Script:</strong> Look for "[Traffic Proxy]" messages</li>
|
|
35
|
-
<li><strong>Content Script:</strong> Look for "[Traffic Proxy Content]" messages</li>
|
|
36
|
-
</ul>
|
|
37
|
-
<p><strong>Expected test domains:</strong> httpbin.org, api.github.com, cdn.jsdelivr.net</p>
|
|
38
|
-
</div>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Debug HTTPS Traffic Interception</title>
|
|
5
|
+
<style>
|
|
6
|
+
body {
|
|
7
|
+
font-family: Arial, sans-serif;
|
|
8
|
+
padding: 20px;
|
|
9
|
+
}
|
|
10
|
+
.test-section {
|
|
11
|
+
margin: 20px 0;
|
|
12
|
+
padding: 15px;
|
|
13
|
+
border: 1px solid #ccc;
|
|
14
|
+
}
|
|
15
|
+
.log {
|
|
16
|
+
background: #f5f5f5;
|
|
17
|
+
padding: 10px;
|
|
18
|
+
margin: 10px 0;
|
|
19
|
+
}
|
|
20
|
+
button {
|
|
21
|
+
padding: 10px 15px;
|
|
22
|
+
margin: 5px;
|
|
23
|
+
}
|
|
24
|
+
</style>
|
|
25
|
+
</head>
|
|
26
|
+
<body>
|
|
27
|
+
<h1>Debug HTTPS Traffic Interception</h1>
|
|
39
28
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
29
|
+
<div class="test-section">
|
|
30
|
+
<h3>Step 1: Extension Status Check</h3>
|
|
31
|
+
<button onclick="checkExtension()">Check Extension</button>
|
|
32
|
+
<div id="extensionStatus" class="log"></div>
|
|
33
|
+
</div>
|
|
46
34
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
log('extensionStatus', '❌ Browser API not available - extension not loaded properly');
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
try {
|
|
60
|
-
// Try to communicate with background script
|
|
61
|
-
const response = await browser.runtime.sendMessage({ action: 'getState' });
|
|
62
|
-
log('extensionStatus', `✅ Extension responding: Enabled=${response.enabled}, Rules=${response.rules.length}`);
|
|
63
|
-
|
|
64
|
-
if (response.rules.length === 0) {
|
|
65
|
-
log('extensionStatus', '⚠️ No proxy rules configured. Add some rules to test interception.');
|
|
66
|
-
}
|
|
67
|
-
} catch (error) {
|
|
68
|
-
log('extensionStatus', `❌ Failed to communicate with extension: ${error.message}`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
35
|
+
<div class="test-section">
|
|
36
|
+
<h3>Step 2: Test Different Request Types</h3>
|
|
37
|
+
<button onclick="testFetch()">Test Fetch</button>
|
|
38
|
+
<button onclick="testXHR()">Test XHR</button>
|
|
39
|
+
<button onclick="testDynamicImport()">Test Dynamic Import</button>
|
|
40
|
+
<button onclick="testImageLoad()">Test Image Load</button>
|
|
41
|
+
<div id="requestResults" class="log"></div>
|
|
42
|
+
</div>
|
|
71
43
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
44
|
+
<div class="test-section">
|
|
45
|
+
<h3>Step 3: Console Logs</h3>
|
|
46
|
+
<p>Open DevTools Console to see detailed logs from:</p>
|
|
47
|
+
<ul>
|
|
48
|
+
<li>
|
|
49
|
+
<strong>Background Script:</strong> Look for "[Traffic Proxy]"
|
|
50
|
+
messages
|
|
51
|
+
</li>
|
|
52
|
+
<li>
|
|
53
|
+
<strong>Content Script:</strong> Look for "[Traffic Proxy Content]"
|
|
54
|
+
messages
|
|
55
|
+
</li>
|
|
56
|
+
</ul>
|
|
57
|
+
<p>
|
|
58
|
+
<strong>Expected test domains:</strong> httpbin.org, api.github.com,
|
|
59
|
+
cdn.jsdelivr.net
|
|
60
|
+
</p>
|
|
61
|
+
</div>
|
|
81
62
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
xhr.send();
|
|
89
|
-
}
|
|
63
|
+
<script>
|
|
64
|
+
function log(elementId, message) {
|
|
65
|
+
const element = document.getElementById(elementId)
|
|
66
|
+
const timestamp = new Date().toLocaleTimeString()
|
|
67
|
+
element.innerHTML += `<div>${timestamp}: ${message}</div>`
|
|
68
|
+
}
|
|
90
69
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
const module = await import('https://cdn.jsdelivr.net/npm/lodash@4.17.21/isNull.js');
|
|
95
|
-
log('requestResults', `✅ Dynamic import successful`);
|
|
96
|
-
} catch (error) {
|
|
97
|
-
log('requestResults', `❌ Dynamic import failed: ${error.message}`);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
70
|
+
async function checkExtension() {
|
|
71
|
+
const status = document.getElementById("extensionStatus")
|
|
72
|
+
status.innerHTML = ""
|
|
100
73
|
|
|
101
|
-
|
|
102
|
-
log('requestResults', '🧪 Testing image load from httpbin.org...');
|
|
103
|
-
const img = new Image();
|
|
104
|
-
img.onload = () => log('requestResults', `✅ Image load successful`);
|
|
105
|
-
img.onerror = () => log('requestResults', `❌ Image load failed`);
|
|
106
|
-
img.src = 'https://httpbin.org/image/png';
|
|
107
|
-
}
|
|
74
|
+
log("extensionStatus", "🔍 Checking extension status...")
|
|
108
75
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
76
|
+
// Check if browser API is available
|
|
77
|
+
if (typeof browser === "undefined") {
|
|
78
|
+
log(
|
|
79
|
+
"extensionStatus",
|
|
80
|
+
"❌ Browser API not available - extension not loaded properly",
|
|
81
|
+
)
|
|
82
|
+
return
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
try {
|
|
86
|
+
// Try to communicate with background script
|
|
87
|
+
const response = await browser.runtime.sendMessage({
|
|
88
|
+
action: "getState",
|
|
89
|
+
})
|
|
90
|
+
log(
|
|
91
|
+
"extensionStatus",
|
|
92
|
+
`✅ Extension responding: Enabled=${response.enabled}, Rules=${response.rules.length}`,
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
if (response.rules.length === 0) {
|
|
96
|
+
log(
|
|
97
|
+
"extensionStatus",
|
|
98
|
+
"⚠️ No proxy rules configured. Add some rules to test interception.",
|
|
99
|
+
)
|
|
100
|
+
}
|
|
101
|
+
} catch (error) {
|
|
102
|
+
log(
|
|
103
|
+
"extensionStatus",
|
|
104
|
+
`❌ Failed to communicate with extension: ${error.message}`,
|
|
105
|
+
)
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
async function testFetch() {
|
|
110
|
+
log("requestResults", "🧪 Testing fetch to httpbin.org...")
|
|
111
|
+
try {
|
|
112
|
+
const response = await fetch("https://httpbin.org/get?test=fetch")
|
|
113
|
+
log(
|
|
114
|
+
"requestResults",
|
|
115
|
+
`✅ Fetch successful: ${response.status} ${response.statusText}`,
|
|
116
|
+
)
|
|
117
|
+
} catch (error) {
|
|
118
|
+
log("requestResults", `❌ Fetch failed: ${error.message}`)
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
async function testXHR() {
|
|
123
|
+
log("requestResults", "🧪 Testing XHR to api.github.com...")
|
|
124
|
+
const xhr = new XMLHttpRequest()
|
|
125
|
+
xhr.onload = () =>
|
|
126
|
+
log(
|
|
127
|
+
"requestResults",
|
|
128
|
+
`✅ XHR successful: ${xhr.status} ${xhr.statusText}`,
|
|
129
|
+
)
|
|
130
|
+
xhr.onerror = () => log("requestResults", `❌ XHR failed`)
|
|
131
|
+
xhr.open("GET", "https://api.github.com/zen")
|
|
132
|
+
xhr.send()
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
async function testDynamicImport() {
|
|
136
|
+
log(
|
|
137
|
+
"requestResults",
|
|
138
|
+
"🧪 Testing dynamic import from cdn.jsdelivr.net...",
|
|
139
|
+
)
|
|
140
|
+
try {
|
|
141
|
+
const module =
|
|
142
|
+
await import("https://cdn.jsdelivr.net/npm/lodash@4.17.21/isNull.js")
|
|
143
|
+
log("requestResults", `✅ Dynamic import successful`)
|
|
144
|
+
} catch (error) {
|
|
145
|
+
log("requestResults", `❌ Dynamic import failed: ${error.message}`)
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function testImageLoad() {
|
|
150
|
+
log("requestResults", "🧪 Testing image load from httpbin.org...")
|
|
151
|
+
const img = new Image()
|
|
152
|
+
img.onload = () => log("requestResults", `✅ Image load successful`)
|
|
153
|
+
img.onerror = () => log("requestResults", `❌ Image load failed`)
|
|
154
|
+
img.src = "https://httpbin.org/image/png"
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Auto-run extension check on page load
|
|
158
|
+
window.addEventListener("load", checkExtension)
|
|
159
|
+
</script>
|
|
160
|
+
</body>
|
|
161
|
+
</html>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
<!
|
|
1
|
+
<!doctype html>
|
|
2
2
|
<html>
|
|
3
|
-
<head>
|
|
4
|
-
|
|
5
|
-
</head>
|
|
6
|
-
<body>
|
|
7
|
-
|
|
8
|
-
</body>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
</head>
|
|
6
|
+
<body>
|
|
7
|
+
<script src="devtools.js"></script>
|
|
8
|
+
</body>
|
|
9
9
|
</html>
|
|
@@ -1,24 +1,27 @@
|
|
|
1
1
|
// Create the GxP DevTools panel
|
|
2
2
|
// Firefox uses the same API as Chrome for creating panels
|
|
3
|
-
browser.devtools.panels
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
browser.devtools.panels
|
|
4
|
+
.create(
|
|
5
|
+
"GxP Inspector", // Panel title
|
|
6
|
+
"icons/gx_on_32.png", // Icon path (32x32)
|
|
7
|
+
"panel.html", // Panel HTML page
|
|
8
|
+
)
|
|
9
|
+
.then(function (panel) {
|
|
10
|
+
// Panel created callback
|
|
11
|
+
console.log("GxP Inspector panel created")
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
// Optional: Handle panel show/hide events
|
|
14
|
+
panel.onShown.addListener(function (panelWindow) {
|
|
15
|
+
// Panel is now visible
|
|
16
|
+
if (panelWindow.panelShown) {
|
|
17
|
+
panelWindow.panelShown()
|
|
18
|
+
}
|
|
19
|
+
})
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
panel.onHidden.addListener(function () {
|
|
22
|
+
// Panel is now hidden
|
|
23
|
+
})
|
|
24
|
+
})
|
|
25
|
+
.catch(function (error) {
|
|
26
|
+
console.error("Failed to create GxP Inspector panel:", error)
|
|
27
|
+
})
|