sunpeak 0.17.1 → 0.17.3
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/dist/chatgpt/globals.css +0 -85
- package/package.json +3 -3
- package/template/dist/albums/albums.json +1 -1
- package/template/dist/carousel/carousel.json +1 -1
- package/template/dist/map/map.json +1 -1
- package/template/dist/review/review.json +1 -1
- package/template/node_modules/.vite/deps/_metadata.json +3 -3
- package/template/node_modules/.vite-mcp/deps/_metadata.json +19 -19
- package/template/playwright.config.ts +4 -25
package/dist/chatgpt/globals.css
CHANGED
|
@@ -1,88 +1,3 @@
|
|
|
1
|
-
@import "tailwindcss";
|
|
2
|
-
|
|
3
|
-
/* Scan simulator source files for Tailwind classes */
|
|
4
|
-
@source "./**/*.{ts,tsx}";
|
|
5
|
-
|
|
6
|
-
/* Also scan host-specific shell components */
|
|
7
|
-
@source "../chatgpt/**/*.{ts,tsx}";
|
|
8
|
-
@source "../claude/**/*.{ts,tsx}";
|
|
9
|
-
|
|
10
|
-
/* Configure dark mode to use data-theme attribute */
|
|
11
|
-
@custom-variant dark (&:where([data-theme="dark"], [data-theme="dark"] *));
|
|
12
|
-
|
|
13
|
-
/* Sidebar utility — host-overridable via --sim-bg-sidebar */
|
|
14
|
-
@utility bg-sidebar {
|
|
15
|
-
background-color: var(--sim-bg-sidebar, var(--color-background-secondary));
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/* Sidebar form elements — match SDK look */
|
|
19
|
-
.sunpeak-simulator-root select,
|
|
20
|
-
.sunpeak-simulator-root input:not([type="checkbox"]),
|
|
21
|
-
.sunpeak-simulator-root textarea {
|
|
22
|
-
border: 0;
|
|
23
|
-
box-shadow: inset 0 0 0 1px var(--color-border-primary);
|
|
24
|
-
transition: box-shadow 150ms ease, color 150ms ease, background-color 150ms ease;
|
|
25
|
-
}
|
|
26
|
-
.sunpeak-simulator-root select:hover,
|
|
27
|
-
.sunpeak-simulator-root input:not([type="checkbox"]):hover,
|
|
28
|
-
.sunpeak-simulator-root textarea:hover {
|
|
29
|
-
box-shadow: inset 0 0 0 1px var(--color-border-secondary);
|
|
30
|
-
}
|
|
31
|
-
.sunpeak-simulator-root select:focus-visible,
|
|
32
|
-
.sunpeak-simulator-root input:not([type="checkbox"]):focus-visible,
|
|
33
|
-
.sunpeak-simulator-root textarea:focus-visible {
|
|
34
|
-
box-shadow: inset 0 0 0 1px var(--color-border-secondary);
|
|
35
|
-
outline: 2px solid var(--color-ring-primary);
|
|
36
|
-
outline-offset: -1px;
|
|
37
|
-
}
|
|
38
|
-
.sunpeak-simulator-root button:focus-visible {
|
|
39
|
-
outline: 2px solid var(--color-ring-primary);
|
|
40
|
-
outline-offset: -1px;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/* Custom checkbox */
|
|
44
|
-
.sunpeak-simulator-root input[type="checkbox"] {
|
|
45
|
-
appearance: none;
|
|
46
|
-
-webkit-appearance: none;
|
|
47
|
-
width: 16px;
|
|
48
|
-
height: 16px;
|
|
49
|
-
border-radius: 4px;
|
|
50
|
-
border: 1px solid var(--color-border-secondary);
|
|
51
|
-
background-color: transparent;
|
|
52
|
-
background-size: 10px;
|
|
53
|
-
background-position: center;
|
|
54
|
-
background-repeat: no-repeat;
|
|
55
|
-
cursor: pointer;
|
|
56
|
-
flex-shrink: 0;
|
|
57
|
-
transition: border-color 150ms ease, background-color 150ms ease;
|
|
58
|
-
}
|
|
59
|
-
.sunpeak-simulator-root input[type="checkbox"]:hover {
|
|
60
|
-
border-color: var(--color-text-tertiary);
|
|
61
|
-
}
|
|
62
|
-
.sunpeak-simulator-root input[type="checkbox"]:checked {
|
|
63
|
-
border-color: var(--color-background-inverse);
|
|
64
|
-
background-color: var(--color-background-inverse);
|
|
65
|
-
background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M2 5L4.25 7L8 3' stroke='white' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e");
|
|
66
|
-
}
|
|
67
|
-
[data-theme="dark"] .sunpeak-simulator-root input[type="checkbox"]:checked {
|
|
68
|
-
background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M2 5L4.25 7L8 3' stroke='%23111' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e");
|
|
69
|
-
}
|
|
70
|
-
.sunpeak-simulator-root input[type="checkbox"]:focus-visible {
|
|
71
|
-
outline: 2px solid var(--color-ring-primary);
|
|
72
|
-
outline-offset: 2px;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/* Hide native number input spinners */
|
|
76
|
-
.sunpeak-simulator-root input[type="number"]::-webkit-inner-spin-button,
|
|
77
|
-
.sunpeak-simulator-root input[type="number"]::-webkit-outer-spin-button {
|
|
78
|
-
-webkit-appearance: none;
|
|
79
|
-
margin: 0;
|
|
80
|
-
}
|
|
81
|
-
.sunpeak-simulator-root input[type="number"] {
|
|
82
|
-
-moz-appearance: textfield;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/* Bundled component styles */
|
|
86
1
|
/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
|
|
87
2
|
@layer properties {
|
|
88
3
|
@supports (((-webkit-hyphens: none)) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color: rgb(from red r g b)))) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sunpeak",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.3",
|
|
4
4
|
"description": "Local-first MCP Apps framework. Quickstart, build, test, and ship your Claude Connector or ChatGPT App!",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -138,9 +138,11 @@
|
|
|
138
138
|
"@clack/prompts": "^1.1.0",
|
|
139
139
|
"@modelcontextprotocol/ext-apps": "^1.2.2",
|
|
140
140
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
141
|
+
"@vitejs/plugin-react": "^6.0.1",
|
|
141
142
|
"clsx": "^2.1.1",
|
|
142
143
|
"esbuild": "^0.27.4",
|
|
143
144
|
"tailwind-merge": "^3.5.0",
|
|
145
|
+
"vite": "^8.0.1",
|
|
144
146
|
"zod": "^4.3.6"
|
|
145
147
|
},
|
|
146
148
|
"devDependencies": {
|
|
@@ -153,7 +155,6 @@
|
|
|
153
155
|
"@types/react-dom": "^19.2.3",
|
|
154
156
|
"@typescript-eslint/eslint-plugin": "^8.57.1",
|
|
155
157
|
"@typescript-eslint/parser": "^8.57.1",
|
|
156
|
-
"@vitejs/plugin-react": "^6.0.1",
|
|
157
158
|
"eslint": "^9.39.4",
|
|
158
159
|
"eslint-config-prettier": "^10.1.8",
|
|
159
160
|
"eslint-plugin-react": "^7.37.5",
|
|
@@ -166,7 +167,6 @@
|
|
|
166
167
|
"ts-node": "^10.9.2",
|
|
167
168
|
"tsx": "^4.21.0",
|
|
168
169
|
"typescript": "^5.9.3",
|
|
169
|
-
"vite": "^8.0.1",
|
|
170
170
|
"vite-plugin-dts": "^4.5.4",
|
|
171
171
|
"@playwright/test": "^1.52.0",
|
|
172
172
|
"vitest": "^4.1.0"
|
|
@@ -1,103 +1,103 @@
|
|
|
1
1
|
{
|
|
2
|
-
"hash": "
|
|
2
|
+
"hash": "ea2e52c1",
|
|
3
3
|
"configHash": "276d46b2",
|
|
4
|
-
"lockfileHash": "
|
|
5
|
-
"browserHash": "
|
|
4
|
+
"lockfileHash": "a41e63ba",
|
|
5
|
+
"browserHash": "9b1eab7b",
|
|
6
6
|
"optimized": {
|
|
7
7
|
"@modelcontextprotocol/ext-apps": {
|
|
8
8
|
"src": "../../../../../../node_modules/.pnpm/@modelcontextprotocol+ext-apps@1.2.2_@modelcontextprotocol+sdk@1.27.1_zod@4.3.6__react-_e9bf7657371391a829fe8b4e289b253c/node_modules/@modelcontextprotocol/ext-apps/dist/src/app.js",
|
|
9
9
|
"file": "@modelcontextprotocol_ext-apps.js",
|
|
10
|
-
"fileHash": "
|
|
10
|
+
"fileHash": "c55a9218",
|
|
11
11
|
"needsInterop": false
|
|
12
12
|
},
|
|
13
13
|
"@modelcontextprotocol/ext-apps/app-bridge": {
|
|
14
14
|
"src": "../../../../../../node_modules/.pnpm/@modelcontextprotocol+ext-apps@1.2.2_@modelcontextprotocol+sdk@1.27.1_zod@4.3.6__react-_e9bf7657371391a829fe8b4e289b253c/node_modules/@modelcontextprotocol/ext-apps/dist/src/app-bridge.js",
|
|
15
15
|
"file": "@modelcontextprotocol_ext-apps_app-bridge.js",
|
|
16
|
-
"fileHash": "
|
|
16
|
+
"fileHash": "0846f57f",
|
|
17
17
|
"needsInterop": false
|
|
18
18
|
},
|
|
19
19
|
"@modelcontextprotocol/ext-apps/react": {
|
|
20
20
|
"src": "../../../../../../node_modules/.pnpm/@modelcontextprotocol+ext-apps@1.2.2_@modelcontextprotocol+sdk@1.27.1_zod@4.3.6__react-_e9bf7657371391a829fe8b4e289b253c/node_modules/@modelcontextprotocol/ext-apps/dist/src/react/index.js",
|
|
21
21
|
"file": "@modelcontextprotocol_ext-apps_react.js",
|
|
22
|
-
"fileHash": "
|
|
22
|
+
"fileHash": "4117a8f1",
|
|
23
23
|
"needsInterop": false
|
|
24
24
|
},
|
|
25
25
|
"@testing-library/react": {
|
|
26
26
|
"src": "../../../../../../node_modules/.pnpm/@testing-library+react@16.3.2_@testing-library+dom@10.4.1_@types+react-dom@19.2.3_@type_893f466751a7d66081fd06e9edb9241a/node_modules/@testing-library/react/dist/@testing-library/react.esm.js",
|
|
27
27
|
"file": "@testing-library_react.js",
|
|
28
|
-
"fileHash": "
|
|
28
|
+
"fileHash": "7da1596d",
|
|
29
29
|
"needsInterop": false
|
|
30
30
|
},
|
|
31
31
|
"clsx": {
|
|
32
32
|
"src": "../../../../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs",
|
|
33
33
|
"file": "clsx.js",
|
|
34
|
-
"fileHash": "
|
|
34
|
+
"fileHash": "0aaf372b",
|
|
35
35
|
"needsInterop": false
|
|
36
36
|
},
|
|
37
37
|
"embla-carousel-react": {
|
|
38
38
|
"src": "../../../../../../node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.4/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js",
|
|
39
39
|
"file": "embla-carousel-react.js",
|
|
40
|
-
"fileHash": "
|
|
40
|
+
"fileHash": "3c5a7c5c",
|
|
41
41
|
"needsInterop": false
|
|
42
42
|
},
|
|
43
43
|
"embla-carousel-wheel-gestures": {
|
|
44
44
|
"src": "../../../../../../node_modules/.pnpm/embla-carousel-wheel-gestures@8.1.0_embla-carousel@8.6.0/node_modules/embla-carousel-wheel-gestures/dist/embla-carousel-wheel-gestures.esm.js",
|
|
45
45
|
"file": "embla-carousel-wheel-gestures.js",
|
|
46
|
-
"fileHash": "
|
|
46
|
+
"fileHash": "ccbdf054",
|
|
47
47
|
"needsInterop": false
|
|
48
48
|
},
|
|
49
49
|
"mapbox-gl": {
|
|
50
50
|
"src": "../../../../../../node_modules/.pnpm/mapbox-gl@3.20.0/node_modules/mapbox-gl/dist/mapbox-gl.js",
|
|
51
51
|
"file": "mapbox-gl.js",
|
|
52
|
-
"fileHash": "
|
|
52
|
+
"fileHash": "4ffe4afe",
|
|
53
53
|
"needsInterop": true
|
|
54
54
|
},
|
|
55
55
|
"react-dom": {
|
|
56
56
|
"src": "../../../../../../node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/index.js",
|
|
57
57
|
"file": "react-dom.js",
|
|
58
|
-
"fileHash": "
|
|
58
|
+
"fileHash": "4d49f264",
|
|
59
59
|
"needsInterop": true
|
|
60
60
|
},
|
|
61
61
|
"react-dom/client": {
|
|
62
62
|
"src": "../../../../../../node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/client.js",
|
|
63
63
|
"file": "react-dom_client.js",
|
|
64
|
-
"fileHash": "
|
|
64
|
+
"fileHash": "80eaedf6",
|
|
65
65
|
"needsInterop": true
|
|
66
66
|
},
|
|
67
67
|
"react": {
|
|
68
68
|
"src": "../../../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/index.js",
|
|
69
69
|
"file": "react.js",
|
|
70
|
-
"fileHash": "
|
|
70
|
+
"fileHash": "7e139e48",
|
|
71
71
|
"needsInterop": true
|
|
72
72
|
},
|
|
73
73
|
"react/jsx-dev-runtime": {
|
|
74
74
|
"src": "../../../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/jsx-dev-runtime.js",
|
|
75
75
|
"file": "react_jsx-dev-runtime.js",
|
|
76
|
-
"fileHash": "
|
|
76
|
+
"fileHash": "8fe1fa8e",
|
|
77
77
|
"needsInterop": true
|
|
78
78
|
},
|
|
79
79
|
"react/jsx-runtime": {
|
|
80
80
|
"src": "../../../../../../node_modules/.pnpm/react@19.2.4/node_modules/react/jsx-runtime.js",
|
|
81
81
|
"file": "react_jsx-runtime.js",
|
|
82
|
-
"fileHash": "
|
|
82
|
+
"fileHash": "ba719946",
|
|
83
83
|
"needsInterop": true
|
|
84
84
|
},
|
|
85
85
|
"tailwind-merge": {
|
|
86
86
|
"src": "../../../../../../node_modules/.pnpm/tailwind-merge@3.5.0/node_modules/tailwind-merge/dist/bundle-mjs.mjs",
|
|
87
87
|
"file": "tailwind-merge.js",
|
|
88
|
-
"fileHash": "
|
|
88
|
+
"fileHash": "47ba3d6b",
|
|
89
89
|
"needsInterop": false
|
|
90
90
|
},
|
|
91
91
|
"vitest": {
|
|
92
92
|
"src": "../../../../../../node_modules/.pnpm/vitest@4.1.0_@types+node@25.5.0_jsdom@29.0.1_vite@8.0.1_@types+node@25.5.0_esbuild@0.27.4_jiti@2.6.1_tsx@4.21.0_/node_modules/vitest/dist/index.js",
|
|
93
93
|
"file": "vitest.js",
|
|
94
|
-
"fileHash": "
|
|
94
|
+
"fileHash": "258cddf8",
|
|
95
95
|
"needsInterop": false
|
|
96
96
|
},
|
|
97
97
|
"zod": {
|
|
98
98
|
"src": "../../../../../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/index.js",
|
|
99
99
|
"file": "zod.js",
|
|
100
|
-
"fileHash": "
|
|
100
|
+
"fileHash": "d8049871",
|
|
101
101
|
"needsInterop": false
|
|
102
102
|
}
|
|
103
103
|
},
|
|
@@ -1,30 +1,9 @@
|
|
|
1
1
|
import { defineConfig, devices } from '@playwright/test';
|
|
2
|
-
import { execSync } from 'child_process';
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
function getPortSync(preferred: number): number {
|
|
9
|
-
const script = `
|
|
10
|
-
const s = require("net").createServer();
|
|
11
|
-
s.listen(${preferred}, () => {
|
|
12
|
-
process.stdout.write(String(s.address().port));
|
|
13
|
-
s.close();
|
|
14
|
-
});
|
|
15
|
-
s.on("error", () => {
|
|
16
|
-
const f = require("net").createServer();
|
|
17
|
-
f.listen(0, () => {
|
|
18
|
-
process.stdout.write(String(f.address().port));
|
|
19
|
-
f.close();
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
`;
|
|
23
|
-
return Number(execSync(`node -e '${script}'`, { encoding: 'utf-8' }).trim());
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const port = Number(process.env.SUNPEAK_TEST_PORT) || getPortSync(6776);
|
|
27
|
-
const sandboxPort = Number(process.env.SUNPEAK_SANDBOX_PORT) || getPortSync(24680);
|
|
3
|
+
// Use fixed preferred ports. If in use, `reuseExistingServer` (local) reuses
|
|
4
|
+
// the running server. In CI, validate.mjs assigns unique ports via env vars.
|
|
5
|
+
const port = Number(process.env.SUNPEAK_TEST_PORT) || 6776;
|
|
6
|
+
const sandboxPort = Number(process.env.SUNPEAK_SANDBOX_PORT) || 24680;
|
|
28
7
|
|
|
29
8
|
export default defineConfig({
|
|
30
9
|
globalSetup: './tests/e2e/global-setup.ts',
|