@gxp-dev/tools 2.0.33 → 2.0.34
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/bin/lib/cli.js +6 -0
- package/bin/lib/commands/init.js +13 -0
- package/bin/lib/utils/files.js +22 -4
- package/browser-extensions/firefox/manifest.json +13 -4
- package/package.json +1 -1
- package/template/default-styling.css +1 -0
- package/template/src/Plugin.vue +76 -14
- package/template/theme-layouts/AdditionalStyling.css +93 -0
package/bin/lib/cli.js
CHANGED
package/bin/lib/commands/init.js
CHANGED
|
@@ -528,6 +528,12 @@ async function initCommand(argv) {
|
|
|
528
528
|
|
|
529
529
|
// New project - require a name
|
|
530
530
|
if (!argv.name) {
|
|
531
|
+
// In non-interactive mode, name is required
|
|
532
|
+
if (argv.yes) {
|
|
533
|
+
console.error("❌ Project name is required when using --yes flag!");
|
|
534
|
+
console.error(" Usage: gxdev init <project-name> --yes");
|
|
535
|
+
process.exit(1);
|
|
536
|
+
}
|
|
531
537
|
console.log("");
|
|
532
538
|
console.log("🚀 GxP Plugin Creator");
|
|
533
539
|
console.log("─".repeat(40));
|
|
@@ -579,6 +585,13 @@ async function initCommand(argv) {
|
|
|
579
585
|
return;
|
|
580
586
|
}
|
|
581
587
|
|
|
588
|
+
// If --yes flag provided, skip interactive configuration
|
|
589
|
+
if (argv.yes) {
|
|
590
|
+
updateAppManifest(projectPath, projectName, initialDescription);
|
|
591
|
+
printFinalInstructions(projectPath, projectName, false);
|
|
592
|
+
return;
|
|
593
|
+
}
|
|
594
|
+
|
|
582
595
|
// Run interactive configuration
|
|
583
596
|
await runInteractiveConfig(projectPath, projectName);
|
|
584
597
|
}
|
package/bin/lib/utils/files.js
CHANGED
|
@@ -124,32 +124,50 @@ function updateExistingProject(projectPath) {
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
try {
|
|
127
|
+
// Backup existing vite.config.js if present
|
|
128
|
+
const viteConfigPath = path.join(projectPath, "vite.config.js");
|
|
129
|
+
if (fs.existsSync(viteConfigPath)) {
|
|
130
|
+
const backupPath = path.join(projectPath, "vite.config.js.backup");
|
|
131
|
+
fs.renameSync(viteConfigPath, backupPath);
|
|
132
|
+
console.log(" → Renamed vite.config.js to vite.config.js.backup");
|
|
133
|
+
}
|
|
134
|
+
|
|
127
135
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
|
128
136
|
let updated = false;
|
|
129
137
|
|
|
130
|
-
// Check and add
|
|
138
|
+
// Check and add/update dependencies
|
|
131
139
|
if (!packageJson.dependencies) {
|
|
132
140
|
packageJson.dependencies = {};
|
|
133
141
|
}
|
|
134
142
|
|
|
135
143
|
for (const [dep, version] of Object.entries(REQUIRED_DEPENDENCIES)) {
|
|
136
|
-
|
|
144
|
+
const existingVersion = packageJson.dependencies[dep];
|
|
145
|
+
if (!existingVersion) {
|
|
137
146
|
packageJson.dependencies[dep] = version;
|
|
138
147
|
console.log(` + Adding dependency: ${dep}@${version}`);
|
|
139
148
|
updated = true;
|
|
149
|
+
} else if (existingVersion !== version) {
|
|
150
|
+
packageJson.dependencies[dep] = version;
|
|
151
|
+
console.log(` ↑ Updating dependency: ${dep} (${existingVersion} → ${version})`);
|
|
152
|
+
updated = true;
|
|
140
153
|
}
|
|
141
154
|
}
|
|
142
155
|
|
|
143
|
-
// Check and add
|
|
156
|
+
// Check and add/update dev dependencies
|
|
144
157
|
if (!packageJson.devDependencies) {
|
|
145
158
|
packageJson.devDependencies = {};
|
|
146
159
|
}
|
|
147
160
|
|
|
148
161
|
for (const [dep, version] of Object.entries(REQUIRED_DEV_DEPENDENCIES)) {
|
|
149
|
-
|
|
162
|
+
const existingVersion = packageJson.devDependencies[dep];
|
|
163
|
+
if (!existingVersion) {
|
|
150
164
|
packageJson.devDependencies[dep] = version;
|
|
151
165
|
console.log(` + Adding devDependency: ${dep}@${version}`);
|
|
152
166
|
updated = true;
|
|
167
|
+
} else if (existingVersion !== version) {
|
|
168
|
+
packageJson.devDependencies[dep] = version;
|
|
169
|
+
console.log(` ↑ Updating devDependency: ${dep} (${existingVersion} → ${version})`);
|
|
170
|
+
updated = true;
|
|
153
171
|
}
|
|
154
172
|
}
|
|
155
173
|
|
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": 2,
|
|
3
3
|
"name": "GxP Developer Toolkit",
|
|
4
|
-
"version": "1.2",
|
|
4
|
+
"version": "1.2.0",
|
|
5
5
|
"description": "JavaScript proxy and component inspector for GxP plugin development",
|
|
6
|
+
"homepage_url": "https://github.com/gramercytech/gx-devtools",
|
|
7
|
+
"developer": {
|
|
8
|
+
"name": "Gramercy Tech",
|
|
9
|
+
"url": "https://gramercytech.com"
|
|
10
|
+
},
|
|
6
11
|
|
|
7
12
|
"browser_specific_settings": {
|
|
8
13
|
"gecko": {
|
|
9
|
-
"id": "gxp-toolkit@gx-devtools.dev"
|
|
14
|
+
"id": "gxp-toolkit@gx-devtools.dev",
|
|
15
|
+
"strict_min_version": "109.0",
|
|
16
|
+
"data_collection_permissions": {
|
|
17
|
+
"required": ["none"]
|
|
18
|
+
}
|
|
10
19
|
}
|
|
11
20
|
},
|
|
12
21
|
|
|
@@ -46,7 +55,7 @@
|
|
|
46
55
|
"default_icon": {
|
|
47
56
|
"16": "icons/gx_off_16.png",
|
|
48
57
|
"32": "icons/gx_off_32.png",
|
|
49
|
-
"
|
|
58
|
+
"64": "icons/gx_off_64.png",
|
|
50
59
|
"128": "icons/gx_off_128.png"
|
|
51
60
|
}
|
|
52
61
|
},
|
|
@@ -54,7 +63,7 @@
|
|
|
54
63
|
"icons": {
|
|
55
64
|
"16": "icons/gx_off_16.png",
|
|
56
65
|
"32": "icons/gx_off_32.png",
|
|
57
|
-
"48": "icons/
|
|
66
|
+
"48": "icons/gx_off_64.png",
|
|
58
67
|
"128": "icons/gx_off_128.png"
|
|
59
68
|
},
|
|
60
69
|
|
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/* This file used to pre-populate the the additional styling editor in the GxP app */
|
package/template/src/Plugin.vue
CHANGED
|
@@ -5,28 +5,16 @@
|
|
|
5
5
|
/>
|
|
6
6
|
</template>
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
#app {
|
|
10
|
-
font-family: Avenir, Helvetica, Arial, sans-serif;
|
|
11
|
-
-webkit-font-smoothing: antialiased;
|
|
12
|
-
-moz-osx-font-smoothing: grayscale;
|
|
13
|
-
}
|
|
14
|
-
</style>
|
|
8
|
+
|
|
15
9
|
|
|
16
10
|
<script setup>
|
|
17
11
|
import { ref, shallowRef } from "vue";
|
|
18
12
|
import DemoPage from "@/DemoPage.vue";
|
|
19
|
-
import {
|
|
20
|
-
GxPageStart,
|
|
21
|
-
GxPageFinal,
|
|
22
|
-
GxPageLoading
|
|
23
|
-
} from "@gramercytech/gx-componentkit";
|
|
24
13
|
|
|
25
14
|
// Initialize the GxP store
|
|
26
15
|
// This import is externalized to window.useGxpStore during build for platform compatibility
|
|
27
16
|
import { useGxpStore } from "@/stores/gxpPortalConfigStore";
|
|
28
17
|
|
|
29
|
-
|
|
30
18
|
|
|
31
19
|
const gxpStore = useGxpStore();
|
|
32
20
|
gxpStore.sockets?.primary.listenForStateChange((event) => {
|
|
@@ -35,4 +23,78 @@
|
|
|
35
23
|
|
|
36
24
|
|
|
37
25
|
|
|
38
|
-
</script>
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<style>
|
|
29
|
+
#app {
|
|
30
|
+
font-family: Avenir, Helvetica, Arial, sans-serif;
|
|
31
|
+
-webkit-font-smoothing: antialiased;
|
|
32
|
+
-moz-osx-font-smoothing: grayscale;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* Primary Color */
|
|
36
|
+
.primary {
|
|
37
|
+
color: var(--primary, #000000);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* Page Styles */
|
|
41
|
+
.page {
|
|
42
|
+
background-color: var(--page_background_color, #000466);
|
|
43
|
+
color: var(--page_text_color, #FFFFFF);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* Input Field Styles */
|
|
47
|
+
.input-field {
|
|
48
|
+
background-color: var(--input_field_background_color, #03054a);
|
|
49
|
+
color: var(--input_field_text_color, #FFFFFF);
|
|
50
|
+
border-color: var(--input_field_border_color, #888C92);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* Primary Button Styles */
|
|
54
|
+
.primary-button {
|
|
55
|
+
background-color: var(--primary_button_background_color, #FFFFFF);
|
|
56
|
+
color: var(--primary_button_text_color, #000596);
|
|
57
|
+
border-color: var(--primary_button_border_color, #FFFFFF);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* Secondary Button Styles */
|
|
61
|
+
.secondary-button {
|
|
62
|
+
background-color: var(--secondary_button_background_color, #000466);
|
|
63
|
+
color: var(--secondary_button_text_color, #FFFFFF);
|
|
64
|
+
border-color: var(--secondary_button_border_color, #FFFFFF);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Tertiary Button Styles */
|
|
68
|
+
.tertiary-button {
|
|
69
|
+
background-color: var(--tertiary_button_background_color, #FFFFFF00);
|
|
70
|
+
color: var(--tertiary_button_text_color, #FFFFFF);
|
|
71
|
+
border-color: var(--tertiary_button_border_color, #FFFFFF00);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* Spinner Styles */
|
|
75
|
+
.spinner {
|
|
76
|
+
background-color: var(--spinner_background_color, #03054A);
|
|
77
|
+
color: var(--spinner_color, #FFFFFF);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* Modal Styles */
|
|
81
|
+
.modal {
|
|
82
|
+
background-color: var(--modal_background_color, #FFFFFF);
|
|
83
|
+
color: var(--modal_text_color, #222222);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* Modal Primary Button Styles */
|
|
87
|
+
.modal-primary-button {
|
|
88
|
+
background-color: var(--modal_primary_button_background_color, #000596);
|
|
89
|
+
color: var(--modal_primary_button_text_color, #FFFFFF);
|
|
90
|
+
border-color: var(--modal_primary_button_border_color, #000596);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/* Modal Secondary Button Styles */
|
|
94
|
+
.modal-secondary-button {
|
|
95
|
+
background-color: var(--modal_secondary_button_background_color, #FFFFFF);
|
|
96
|
+
color: var(--modal_secondary_button_text_color, #000596);
|
|
97
|
+
border-color: var(--modal_secondary_button_border_color, #000596);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
</style>
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/* Theme CSS Variables */
|
|
2
|
+
:root {
|
|
3
|
+
--primary: #000000;
|
|
4
|
+
--page_background_color: #000466;
|
|
5
|
+
--page_text_color: #FFFFFF;
|
|
6
|
+
--input_field_background_color: #03054a;
|
|
7
|
+
--input_field_text_color: #FFFFFF;
|
|
8
|
+
--input_field_border_color: #888C92;
|
|
9
|
+
--primary_button_background_color: #FFFFFF;
|
|
10
|
+
--primary_button_text_color: #000596;
|
|
11
|
+
--primary_button_border_color: #FFFFFF;
|
|
12
|
+
--secondary_button_background_color: #000466;
|
|
13
|
+
--secondary_button_text_color: #FFFFFF;
|
|
14
|
+
--secondary_button_border_color: #FFFFFF;
|
|
15
|
+
--tertiary_button_background_color: #FFFFFF00;
|
|
16
|
+
--tertiary_button_text_color: #FFFFFF;
|
|
17
|
+
--tertiary_button_border_color: #FFFFFF00;
|
|
18
|
+
--spinner_background_color: #03054A;
|
|
19
|
+
--spinner_color: #FFFFFF;
|
|
20
|
+
--modal_background_color: #FFFFFF;
|
|
21
|
+
--modal_text_color: #222222;
|
|
22
|
+
--modal_primary_button_background_color: #000596;
|
|
23
|
+
--modal_primary_button_text_color: #FFFFFF;
|
|
24
|
+
--modal_primary_button_border_color: #000596;
|
|
25
|
+
--modal_secondary_button_background_color: #FFFFFF;
|
|
26
|
+
--modal_secondary_button_text_color: #000596;
|
|
27
|
+
--modal_secondary_button_border_color: #000596;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* Primary Color */
|
|
31
|
+
.primary {
|
|
32
|
+
color: var(--primary, #000000);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* Page Styles */
|
|
36
|
+
.page {
|
|
37
|
+
background-color: var(--page_background_color, #000466);
|
|
38
|
+
color: var(--page_text_color, #FFFFFF);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Input Field Styles */
|
|
42
|
+
.input-field {
|
|
43
|
+
background-color: var(--input_field_background_color, #03054a);
|
|
44
|
+
color: var(--input_field_text_color, #FFFFFF);
|
|
45
|
+
border-color: var(--input_field_border_color, #888C92);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* Primary Button Styles */
|
|
49
|
+
.primary-button {
|
|
50
|
+
background-color: var(--primary_button_background_color, #FFFFFF);
|
|
51
|
+
color: var(--primary_button_text_color, #000596);
|
|
52
|
+
border-color: var(--primary_button_border_color, #FFFFFF);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* Secondary Button Styles */
|
|
56
|
+
.secondary-button {
|
|
57
|
+
background-color: var(--secondary_button_background_color, #000466);
|
|
58
|
+
color: var(--secondary_button_text_color, #FFFFFF);
|
|
59
|
+
border-color: var(--secondary_button_border_color, #FFFFFF);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* Tertiary Button Styles */
|
|
63
|
+
.tertiary-button {
|
|
64
|
+
background-color: var(--tertiary_button_background_color, #FFFFFF00);
|
|
65
|
+
color: var(--tertiary_button_text_color, #FFFFFF);
|
|
66
|
+
border-color: var(--tertiary_button_border_color, #FFFFFF00);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* Spinner Styles */
|
|
70
|
+
.spinner {
|
|
71
|
+
background-color: var(--spinner_background_color, #03054A);
|
|
72
|
+
color: var(--spinner_color, #FFFFFF);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* Modal Styles */
|
|
76
|
+
.modal {
|
|
77
|
+
background-color: var(--modal_background_color, #FFFFFF);
|
|
78
|
+
color: var(--modal_text_color, #222222);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* Modal Primary Button Styles */
|
|
82
|
+
.modal-primary-button {
|
|
83
|
+
background-color: var(--modal_primary_button_background_color, #000596);
|
|
84
|
+
color: var(--modal_primary_button_text_color, #FFFFFF);
|
|
85
|
+
border-color: var(--modal_primary_button_border_color, #000596);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* Modal Secondary Button Styles */
|
|
89
|
+
.modal-secondary-button {
|
|
90
|
+
background-color: var(--modal_secondary_button_background_color, #FFFFFF);
|
|
91
|
+
color: var(--modal_secondary_button_text_color, #000596);
|
|
92
|
+
border-color: var(--modal_secondary_button_border_color, #000596);
|
|
93
|
+
}
|