sunpeak 0.10.7 → 0.12.1
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 +117 -20
- package/bin/commands/build.mjs +1 -11
- package/bin/commands/deploy.mjs +7 -1
- package/bin/commands/dev.mjs +175 -12
- package/bin/commands/new.mjs +211 -0
- package/bin/commands/pull.mjs +1 -1
- package/bin/commands/push.mjs +36 -13
- package/bin/lib/patterns.mjs +25 -0
- package/bin/sunpeak.js +15 -232
- package/dist/chatgpt/index.cjs +1 -1
- package/dist/chatgpt/index.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/dist/mcp/entry.cjs +1 -1
- package/dist/mcp/entry.js +1 -1
- package/dist/mcp/favicon.d.ts +2 -0
- package/dist/mcp/index.cjs +3 -1
- package/dist/mcp/index.cjs.map +1 -1
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.js +3 -1
- package/dist/{server-BLKltt88.js → server-BI9Y531R.js} +31 -3
- package/dist/{server-BLKltt88.js.map → server-BI9Y531R.js.map} +1 -1
- package/dist/{server-D_oRdZjX.cjs → server-CcLDAGBE.cjs} +31 -3
- package/dist/{server-D_oRdZjX.cjs.map → server-CcLDAGBE.cjs.map} +1 -1
- package/dist/{simulator-url-B6DZi3vV.cjs → simulator-url-CYMOGoB1.cjs} +5 -5
- package/dist/{simulator-url-B6DZi3vV.cjs.map → simulator-url-CYMOGoB1.cjs.map} +1 -1
- package/dist/{simulator-url-izFV6mji.js → simulator-url-DG79-dU3.js} +4 -4
- package/dist/{simulator-url-izFV6mji.js.map → simulator-url-DG79-dU3.js.map} +1 -1
- package/package.json +1 -1
- package/template/.sunpeak/dev.tsx +4 -4
- package/template/README.md +25 -27
- package/template/_gitignore +4 -0
- 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/index.html +0 -1
- package/template/node_modules/.vite/deps/_metadata.json +22 -22
- package/template/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Avatar.js +96 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Avatar.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Button.js +625 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Button.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Checkbox.js +33 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Checkbox.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Icon.js +1498 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Icon.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Input.js +13 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Input.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_SegmentedControl.js +103 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_SegmentedControl.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Select.js +3680 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Select.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Textarea.js +95 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Textarea.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_theme.js +45 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_theme.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-2UDYPUBJ.js +15201 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-2UDYPUBJ.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-6QVG4F2X.js +93 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-6QVG4F2X.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-BUOVMFCD.js +1004 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-BUOVMFCD.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-CNYJBM5F.js +21 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-CNYJBM5F.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-EGRHWZRV.js +1 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-EGRHWZRV.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-ILHRZGIS.js +46 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-ILHRZGIS.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JAGHY6H6.js +231 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JAGHY6H6.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JGVISENQ.js +292 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JGVISENQ.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-P5LK4A7U.js +112 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-P5LK4A7U.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-QPJAV452.js +13 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-QPJAV452.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-RYYR2YMB.js +111 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-RYYR2YMB.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-UM3ZGDFR.js +4480 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-UM3ZGDFR.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-XZTIOEPG.js +280 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-XZTIOEPG.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/clsx.js +10 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/clsx.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-react.js +1712 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-react.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-wheel-gestures.js +589 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-wheel-gestures.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/mapbox-gl.js +32835 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/mapbox-gl.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/package.json +3 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom.js +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom_client.js +20217 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom_client.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react.js +6 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-dev-runtime.js +278 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-dev-runtime.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-runtime.js +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-runtime.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/tailwind-merge.js +3095 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/tailwind-merge.js.map +7 -0
- package/template/package.json +0 -1
- package/template/vitest.config.ts +1 -1
- package/bin/commands/mcp.mjs +0 -244
- package/template/public/favicon.ico +0 -0
- package/template/src/resources/albums/albums-show-simulation.json +0 -131
- package/template/src/resources/carousel/carousel-show-simulation.json +0 -68
- package/template/src/resources/map/map-show-simulation.json +0 -123
- package/template/src/resources/review/review-diff-simulation.json +0 -80
- package/template/src/resources/review/review-post-simulation.json +0 -56
- package/template/src/resources/review/review-purchase-simulation.json +0 -88
- /package/template/{src/test → tests}/setup.ts +0 -0
- /package/template/{dist → tests/simulations}/albums/albums-show-simulation.json +0 -0
- /package/template/{dist → tests/simulations}/carousel/carousel-show-simulation.json +0 -0
- /package/template/{dist → tests/simulations}/map/map-show-simulation.json +0 -0
- /package/template/{dist → tests/simulations}/review/review-diff-simulation.json +0 -0
- /package/template/{dist → tests/simulations}/review/review-post-simulation.json +0 -0
- /package/template/{dist → tests/simulations}/review/review-purchase-simulation.json +0 -0
package/package.json
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* This file bootstraps the ChatGPT simulator for development
|
|
5
5
|
*
|
|
6
6
|
* Auto-discovers simulations and resources by file naming convention:
|
|
7
|
-
* -
|
|
8
|
-
* - resources/{resource}/{resource}-resource.json
|
|
9
|
-
* - resources/{resource}/{Resource}Resource component (PascalCase)
|
|
7
|
+
* - tests/simulations/{resource}/{resource}-{scenario}-simulation.json
|
|
8
|
+
* - src/resources/{resource}/{resource}-resource.json
|
|
9
|
+
* - src/resources/{resource}/{Resource}Resource component (PascalCase)
|
|
10
10
|
*/
|
|
11
11
|
import { StrictMode } from 'react';
|
|
12
12
|
import { createRoot } from 'react-dom/client';
|
|
@@ -16,7 +16,7 @@ import '../src/styles/globals.css';
|
|
|
16
16
|
|
|
17
17
|
// Build simulations from discovered files
|
|
18
18
|
const simulations = buildDevSimulations({
|
|
19
|
-
simulationModules: import.meta.glob('../
|
|
19
|
+
simulationModules: import.meta.glob('../tests/simulations/*/*-simulation.json', { eager: true }),
|
|
20
20
|
resourceModules: import.meta.glob('../src/resources/*/*-resource.json', { eager: true }),
|
|
21
21
|
resourceComponents: resourceComponents as Record<string, React.ComponentType>,
|
|
22
22
|
});
|
package/template/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# sunpeak-app
|
|
2
2
|
|
|
3
|
-
A ChatGPT App
|
|
3
|
+
A ChatGPT App built with [sunpeak](https://github.com/Sunpeak-AI/sunpeak).
|
|
4
4
|
|
|
5
5
|
For an initial overview of your new app and a detailed API reference, refer to the [documentation](https://docs.sunpeak.ai/template/project-structure).
|
|
6
6
|
|
|
@@ -19,9 +19,8 @@ That's it! Edit the resource files in [./src/resources/](./src/resources/) to bu
|
|
|
19
19
|
# Core commands:
|
|
20
20
|
pnpm test # Run tests with Vitest.
|
|
21
21
|
pnpm test:e2e # Run end-to-end tests with Playwright.
|
|
22
|
-
sunpeak dev # Start
|
|
22
|
+
sunpeak dev # Start dev server + MCP endpoint.
|
|
23
23
|
sunpeak build # Build all resources for production.
|
|
24
|
-
sunpeak mcp # Start MCP server for ChatGPT testing with mock data.
|
|
25
24
|
|
|
26
25
|
# sunpeak repository (think ECR for ChatGPT Apps):
|
|
27
26
|
sunpeak login # Authenticate with the sunpeak repository.
|
|
@@ -33,23 +32,28 @@ The template includes a minimal test setup with Vitest. You can add additional t
|
|
|
33
32
|
|
|
34
33
|
## Project Structure
|
|
35
34
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
35
|
+
Using a Review page as an example, sunpeak projects look like:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
my-app/
|
|
39
|
+
├── src/resources/
|
|
40
|
+
│ └── review/
|
|
41
|
+
│ ├── review-resource.tsx # Review UI component.
|
|
42
|
+
│ └── review-resource.json # Review UI MCP metadata.
|
|
43
|
+
├── tests/simulations/
|
|
44
|
+
│ └── review/
|
|
45
|
+
│ ├── review-{scenario1}-simulation.json # Mock state for testing.
|
|
46
|
+
│ └── review-{scenario2}-simulation.json # Mock state for testing.
|
|
47
|
+
└── package.json
|
|
48
|
+
```
|
|
45
49
|
|
|
46
50
|
## Testing in ChatGPT
|
|
47
51
|
|
|
48
|
-
Test your app directly in ChatGPT using the built-in MCP
|
|
52
|
+
Test your app directly in ChatGPT using the built-in MCP endpoint (starts automatically with `sunpeak dev`):
|
|
49
53
|
|
|
50
54
|
```bash
|
|
51
|
-
# Start the
|
|
52
|
-
sunpeak
|
|
55
|
+
# Start the dev server + MCP endpoint.
|
|
56
|
+
sunpeak dev
|
|
53
57
|
|
|
54
58
|
# In another terminal, run a tunnel. For example:
|
|
55
59
|
ngrok http 6766
|
|
@@ -59,8 +63,6 @@ You can then connect to the tunnel forwarding URL at the `/mcp` path from ChatGP
|
|
|
59
63
|
|
|
60
64
|
Once your app is connected, send the name of the app and a tool, like `/sunpeak show review`, to ChatGPT.
|
|
61
65
|
|
|
62
|
-
When you make changes to the UI, refresh your app in ChatGPT after the MCP server has finished rebuilding your app: `User > Settings > Apps & Connectors > My App > Refresh`
|
|
63
|
-
|
|
64
66
|
## Build & Deploy
|
|
65
67
|
|
|
66
68
|
Build your app for production:
|
|
@@ -74,15 +76,11 @@ This creates optimized builds in `dist/`, organized by resource:
|
|
|
74
76
|
```bash
|
|
75
77
|
dist/
|
|
76
78
|
├── albums/
|
|
77
|
-
│ ├── albums.js
|
|
78
|
-
│
|
|
79
|
-
│ └── albums-show-simulation.json # Resource mock data for testing.
|
|
79
|
+
│ ├── albums.js # Built resource component.
|
|
80
|
+
│ └── albums.json # Resource metadata.
|
|
80
81
|
├── review/
|
|
81
82
|
│ ├── review.js
|
|
82
|
-
│
|
|
83
|
-
│ ├── review-diff-simulation.json
|
|
84
|
-
│ ├── review-post-simulation.json
|
|
85
|
-
│ └── review-purchase-simulation.json
|
|
83
|
+
│ └── review.json
|
|
86
84
|
└── ...
|
|
87
85
|
```
|
|
88
86
|
|
|
@@ -90,7 +88,6 @@ Each resource folder contains:
|
|
|
90
88
|
|
|
91
89
|
- **`.js` file**: Self-contained bundle with CSS inlined
|
|
92
90
|
- **`.json` file**: Resource metadata with unique `uri` for cache-busting
|
|
93
|
-
- **`*-simulation.json` files**: All affiliated simulation files for the resource. These are not needed for the production runtime, but are used in the sunpeak repository for testing.
|
|
94
91
|
|
|
95
92
|
Host these files and reference them as resources in your production MCP server.
|
|
96
93
|
Use the sunpeak resource repository for built-in resource hosting.
|
|
@@ -104,11 +101,12 @@ src/resources/NAME/
|
|
|
104
101
|
├── NAME-resource.tsx # React component (required)
|
|
105
102
|
├── NAME-resource.json # Resource metadata (required)
|
|
106
103
|
├── NAME-resource.test.tsx # Unit tests (optional)
|
|
107
|
-
├── NAME-SCENARIO-simulation.json # Simulation data (optional)
|
|
108
104
|
└── components/ # UI components (optional)
|
|
109
105
|
```
|
|
110
106
|
|
|
111
|
-
Only the resource files (`.tsx` and `.json`) are required to generate a production build and ship a UI.
|
|
107
|
+
Only the resource files (`.tsx` and `.json`) are required to generate a production build and ship a UI.
|
|
108
|
+
|
|
109
|
+
Create the simulation file(s) in `tests/simulations/` if you want to preview your resource in `sunpeak dev`.
|
|
112
110
|
|
|
113
111
|
## Resources
|
|
114
112
|
|
package/template/_gitignore
CHANGED
package/template/index.html
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Sunpeak - ChatGPT App framework</title>
|
|
7
|
-
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
|
8
7
|
<!-- Establish CSS layer order BEFORE any JS-injected CSS modules -->
|
|
9
8
|
<style>@layer properties, theme, base, components, utilities;</style>
|
|
10
9
|
</head>
|
|
@@ -1,121 +1,121 @@
|
|
|
1
1
|
{
|
|
2
|
-
"hash": "
|
|
3
|
-
"configHash": "
|
|
2
|
+
"hash": "4a7f9e31",
|
|
3
|
+
"configHash": "b26b5701",
|
|
4
4
|
"lockfileHash": "9d20b726",
|
|
5
|
-
"browserHash": "
|
|
5
|
+
"browserHash": "0def6af7",
|
|
6
6
|
"optimized": {
|
|
7
7
|
"react": {
|
|
8
8
|
"src": "../../../../node_modules/.pnpm/react@19.2.3/node_modules/react/index.js",
|
|
9
9
|
"file": "react.js",
|
|
10
|
-
"fileHash": "
|
|
10
|
+
"fileHash": "f00482ce",
|
|
11
11
|
"needsInterop": true
|
|
12
12
|
},
|
|
13
13
|
"react-dom": {
|
|
14
14
|
"src": "../../../../node_modules/.pnpm/react-dom@19.2.3_react@19.2.3/node_modules/react-dom/index.js",
|
|
15
15
|
"file": "react-dom.js",
|
|
16
|
-
"fileHash": "
|
|
16
|
+
"fileHash": "1569e6b6",
|
|
17
17
|
"needsInterop": true
|
|
18
18
|
},
|
|
19
19
|
"react/jsx-dev-runtime": {
|
|
20
20
|
"src": "../../../../node_modules/.pnpm/react@19.2.3/node_modules/react/jsx-dev-runtime.js",
|
|
21
21
|
"file": "react_jsx-dev-runtime.js",
|
|
22
|
-
"fileHash": "
|
|
22
|
+
"fileHash": "0115028c",
|
|
23
23
|
"needsInterop": true
|
|
24
24
|
},
|
|
25
25
|
"react/jsx-runtime": {
|
|
26
26
|
"src": "../../../../node_modules/.pnpm/react@19.2.3/node_modules/react/jsx-runtime.js",
|
|
27
27
|
"file": "react_jsx-runtime.js",
|
|
28
|
-
"fileHash": "
|
|
28
|
+
"fileHash": "feb11853",
|
|
29
29
|
"needsInterop": true
|
|
30
30
|
},
|
|
31
31
|
"@openai/apps-sdk-ui/components/Avatar": {
|
|
32
32
|
"src": "../../../../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.7__@types+react@19._90324f97b7190ccfdbe40a9e8bef3385/node_modules/@openai/apps-sdk-ui/dist/es/components/Avatar/index.js",
|
|
33
33
|
"file": "@openai_apps-sdk-ui_components_Avatar.js",
|
|
34
|
-
"fileHash": "
|
|
34
|
+
"fileHash": "7bda9dc6",
|
|
35
35
|
"needsInterop": false
|
|
36
36
|
},
|
|
37
37
|
"@openai/apps-sdk-ui/components/Button": {
|
|
38
38
|
"src": "../../../../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.7__@types+react@19._90324f97b7190ccfdbe40a9e8bef3385/node_modules/@openai/apps-sdk-ui/dist/es/components/Button/index.js",
|
|
39
39
|
"file": "@openai_apps-sdk-ui_components_Button.js",
|
|
40
|
-
"fileHash": "
|
|
40
|
+
"fileHash": "ed76f323",
|
|
41
41
|
"needsInterop": false
|
|
42
42
|
},
|
|
43
43
|
"@openai/apps-sdk-ui/components/Checkbox": {
|
|
44
44
|
"src": "../../../../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.8__@types+react@19._10810175a7ab45acace17e46639bb69b/node_modules/@openai/apps-sdk-ui/dist/es/components/Checkbox/index.js",
|
|
45
45
|
"file": "@openai_apps-sdk-ui_components_Checkbox.js",
|
|
46
|
-
"fileHash": "
|
|
46
|
+
"fileHash": "ab0a037f",
|
|
47
47
|
"needsInterop": false
|
|
48
48
|
},
|
|
49
49
|
"@openai/apps-sdk-ui/components/Icon": {
|
|
50
50
|
"src": "../../../../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.7__@types+react@19._90324f97b7190ccfdbe40a9e8bef3385/node_modules/@openai/apps-sdk-ui/dist/es/components/Icon/index.js",
|
|
51
51
|
"file": "@openai_apps-sdk-ui_components_Icon.js",
|
|
52
|
-
"fileHash": "
|
|
52
|
+
"fileHash": "b6eb2e05",
|
|
53
53
|
"needsInterop": false
|
|
54
54
|
},
|
|
55
55
|
"@openai/apps-sdk-ui/components/Input": {
|
|
56
56
|
"src": "../../../../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.8__@types+react@19._10810175a7ab45acace17e46639bb69b/node_modules/@openai/apps-sdk-ui/dist/es/components/Input/index.js",
|
|
57
57
|
"file": "@openai_apps-sdk-ui_components_Input.js",
|
|
58
|
-
"fileHash": "
|
|
58
|
+
"fileHash": "5d518848",
|
|
59
59
|
"needsInterop": false
|
|
60
60
|
},
|
|
61
61
|
"@openai/apps-sdk-ui/components/SegmentedControl": {
|
|
62
62
|
"src": "../../../../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.8__@types+react@19._10810175a7ab45acace17e46639bb69b/node_modules/@openai/apps-sdk-ui/dist/es/components/SegmentedControl/index.js",
|
|
63
63
|
"file": "@openai_apps-sdk-ui_components_SegmentedControl.js",
|
|
64
|
-
"fileHash": "
|
|
64
|
+
"fileHash": "2ee50bba",
|
|
65
65
|
"needsInterop": false
|
|
66
66
|
},
|
|
67
67
|
"@openai/apps-sdk-ui/components/Select": {
|
|
68
68
|
"src": "../../../../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.8__@types+react@19._10810175a7ab45acace17e46639bb69b/node_modules/@openai/apps-sdk-ui/dist/es/components/Select/index.js",
|
|
69
69
|
"file": "@openai_apps-sdk-ui_components_Select.js",
|
|
70
|
-
"fileHash": "
|
|
70
|
+
"fileHash": "22a1dcf3",
|
|
71
71
|
"needsInterop": false
|
|
72
72
|
},
|
|
73
73
|
"@openai/apps-sdk-ui/components/Textarea": {
|
|
74
74
|
"src": "../../../../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.8__@types+react@19._10810175a7ab45acace17e46639bb69b/node_modules/@openai/apps-sdk-ui/dist/es/components/Textarea/index.js",
|
|
75
75
|
"file": "@openai_apps-sdk-ui_components_Textarea.js",
|
|
76
|
-
"fileHash": "
|
|
76
|
+
"fileHash": "aa2d33e1",
|
|
77
77
|
"needsInterop": false
|
|
78
78
|
},
|
|
79
79
|
"@openai/apps-sdk-ui/theme": {
|
|
80
80
|
"src": "../../../../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.8__@types+react@19._10810175a7ab45acace17e46639bb69b/node_modules/@openai/apps-sdk-ui/dist/es/lib/theme.js",
|
|
81
81
|
"file": "@openai_apps-sdk-ui_theme.js",
|
|
82
|
-
"fileHash": "
|
|
82
|
+
"fileHash": "5781d4bb",
|
|
83
83
|
"needsInterop": false
|
|
84
84
|
},
|
|
85
85
|
"clsx": {
|
|
86
86
|
"src": "../../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs",
|
|
87
87
|
"file": "clsx.js",
|
|
88
|
-
"fileHash": "
|
|
88
|
+
"fileHash": "c87a7748",
|
|
89
89
|
"needsInterop": false
|
|
90
90
|
},
|
|
91
91
|
"embla-carousel-react": {
|
|
92
92
|
"src": "../../../../node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.3/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js",
|
|
93
93
|
"file": "embla-carousel-react.js",
|
|
94
|
-
"fileHash": "
|
|
94
|
+
"fileHash": "54c2792d",
|
|
95
95
|
"needsInterop": false
|
|
96
96
|
},
|
|
97
97
|
"embla-carousel-wheel-gestures": {
|
|
98
98
|
"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",
|
|
99
99
|
"file": "embla-carousel-wheel-gestures.js",
|
|
100
|
-
"fileHash": "
|
|
100
|
+
"fileHash": "fa9d042d",
|
|
101
101
|
"needsInterop": false
|
|
102
102
|
},
|
|
103
103
|
"mapbox-gl": {
|
|
104
104
|
"src": "../../../../node_modules/.pnpm/mapbox-gl@3.17.0/node_modules/mapbox-gl/dist/mapbox-gl.js",
|
|
105
105
|
"file": "mapbox-gl.js",
|
|
106
|
-
"fileHash": "
|
|
106
|
+
"fileHash": "e9ae0a8d",
|
|
107
107
|
"needsInterop": true
|
|
108
108
|
},
|
|
109
109
|
"react-dom/client": {
|
|
110
110
|
"src": "../../../../node_modules/.pnpm/react-dom@19.2.3_react@19.2.3/node_modules/react-dom/client.js",
|
|
111
111
|
"file": "react-dom_client.js",
|
|
112
|
-
"fileHash": "
|
|
112
|
+
"fileHash": "517db7cd",
|
|
113
113
|
"needsInterop": true
|
|
114
114
|
},
|
|
115
115
|
"tailwind-merge": {
|
|
116
116
|
"src": "../../../../node_modules/.pnpm/tailwind-merge@3.4.0/node_modules/tailwind-merge/dist/bundle-mjs.mjs",
|
|
117
117
|
"file": "tailwind-merge.js",
|
|
118
|
-
"fileHash": "
|
|
118
|
+
"fileHash": "9c4aa4b1",
|
|
119
119
|
"needsInterop": false
|
|
120
120
|
}
|
|
121
121
|
},
|
package/template/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"4.0.16","results":[[":src/resources/
|
|
1
|
+
{"version":"4.0.16","results":[[":src/resources/review/review-resource.test.tsx",{"duration":549.1222579999999,"failed":false}],[":src/resources/albums/components/albums.test.tsx",{"duration":350.93041600000015,"failed":false}],[":src/resources/carousel/carousel-resource.test.tsx",{"duration":251.43985999999995,"failed":false}],[":src/resources/map/components/map-view.test.tsx",{"duration":87.90785099999994,"failed":false}],[":src/resources/map/components/place-inspector.test.tsx",{"duration":476.03139400000055,"failed":false}],[":src/resources/albums/components/fullscreen-viewer.test.tsx",{"duration":285.097933,"failed":false}],[":src/resources/map/components/place-list.test.tsx",{"duration":136.47718200000008,"failed":false}],[":src/resources/map/components/place-card.test.tsx",{"duration":380.20156,"failed":false}],[":src/resources/map/components/place-carousel.test.tsx",{"duration":452.68627800000013,"failed":false}],[":src/resources/albums/components/album-carousel.test.tsx",{"duration":101.4541720000002,"failed":false}],[":src/resources/carousel/components/carousel.test.tsx",{"duration":77.42705000000001,"failed":false}],[":src/resources/map/map-resource.test.tsx",{"duration":281.73994100000004,"failed":false}],[":src/resources/albums/albums-resource.test.tsx",{"duration":265.21104400000013,"failed":false}],[":src/resources/albums/components/film-strip.test.tsx",{"duration":430.75007900000014,"failed":false}],[":src/resources/albums/components/album-card.test.tsx",{"duration":305.5718360000001,"failed":false}],[":src/resources/carousel/components/card.test.tsx",{"duration":76.69553300000007,"failed":false}]]}
|
package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Avatar.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import {
|
|
2
|
+
toCssVariables
|
|
3
|
+
} from "./chunk-RYYR2YMB.js";
|
|
4
|
+
import {
|
|
5
|
+
clsx_default
|
|
6
|
+
} from "./chunk-CNYJBM5F.js";
|
|
7
|
+
import {
|
|
8
|
+
require_jsx_runtime
|
|
9
|
+
} from "./chunk-JGVISENQ.js";
|
|
10
|
+
import {
|
|
11
|
+
require_react
|
|
12
|
+
} from "./chunk-BUOVMFCD.js";
|
|
13
|
+
import {
|
|
14
|
+
__toESM
|
|
15
|
+
} from "./chunk-ILHRZGIS.js";
|
|
16
|
+
|
|
17
|
+
// ../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.7__@types+react@19._90324f97b7190ccfdbe40a9e8bef3385/node_modules/@openai/apps-sdk-ui/dist/es/components/Avatar/Avatar.js
|
|
18
|
+
var import_jsx_runtime = __toESM(require_jsx_runtime());
|
|
19
|
+
var import_react = __toESM(require_react());
|
|
20
|
+
var import_react2 = __toESM(require_react());
|
|
21
|
+
import s from "/home/runner/work/sunpeak/sunpeak/node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.7__@types+react@19._90324f97b7190ccfdbe40a9e8bef3385/node_modules/@openai/apps-sdk-ui/dist/es/components/Avatar/Avatar.module.css";
|
|
22
|
+
var Avatar = (props) => {
|
|
23
|
+
const validImageUrl = validateImageUrl(props.imageUrl);
|
|
24
|
+
return (0, import_react.createElement)(AvatarInner, { ...props, imageUrl: validImageUrl, key: validImageUrl });
|
|
25
|
+
};
|
|
26
|
+
var AvatarInner = (props) => {
|
|
27
|
+
const {
|
|
28
|
+
className,
|
|
29
|
+
size,
|
|
30
|
+
overflowCount,
|
|
31
|
+
name,
|
|
32
|
+
color = "secondary",
|
|
33
|
+
variant = "soft",
|
|
34
|
+
imageUrl,
|
|
35
|
+
Icon,
|
|
36
|
+
// asChild support
|
|
37
|
+
...restProps
|
|
38
|
+
} = props;
|
|
39
|
+
const [imageStatus, setImageStatus] = (0, import_react2.useState)();
|
|
40
|
+
const isInteractive = !!(restProps.onPointerDown || restProps.onClick);
|
|
41
|
+
const TagName = isInteractive ? "button" : "span";
|
|
42
|
+
return (0, import_jsx_runtime.jsx)(TagName, { className: clsx_default(s.Avatar, className), style: toCssVariables({
|
|
43
|
+
"avatar-size": size
|
|
44
|
+
}), role: isInteractive ? void 0 : "presentation", "data-color": color, "data-variant": variant, type: isInteractive ? "button" : void 0, ...restProps, children: (() => {
|
|
45
|
+
if (imageUrl && imageStatus !== "error") {
|
|
46
|
+
return (0, import_jsx_runtime.jsx)(AvatarImage, { status: imageStatus, url: imageUrl, onError: () => setImageStatus("error"), onLoad: () => setImageStatus("loaded") });
|
|
47
|
+
}
|
|
48
|
+
if (Icon) {
|
|
49
|
+
return (0, import_jsx_runtime.jsx)(Icon, { className: s.AvatarIcon });
|
|
50
|
+
}
|
|
51
|
+
return overflowCount ? (0, import_jsx_runtime.jsx)(AvatarOverflowCount, { count: overflowCount }) : (0, import_jsx_runtime.jsx)(AvatarInitial, { name });
|
|
52
|
+
})() });
|
|
53
|
+
};
|
|
54
|
+
var validateImageUrl = (imageUrl) => {
|
|
55
|
+
if (!imageUrl) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (imageUrl.includes("gravatar.com") && imageUrl.includes("cdn.auth0.com")) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
return imageUrl;
|
|
62
|
+
};
|
|
63
|
+
var AvatarImage = ({ url, status, onLoad, onError }) => {
|
|
64
|
+
return (0, import_jsx_runtime.jsx)("span", { className: s.AvatarImageContainer, children: (0, import_jsx_runtime.jsx)("img", { src: url, className: s.AvatarImage, "data-loaded": status === "loaded" ? "" : void 0, onLoad, onError, alt: "", role: "presentation" }) });
|
|
65
|
+
};
|
|
66
|
+
var AvatarInitial = ({ name = "" }) => {
|
|
67
|
+
const firstInitial = (0, import_react2.useMemo)(() => name.charAt(0).toUpperCase(), [name]);
|
|
68
|
+
return (0, import_jsx_runtime.jsx)("span", { className: s.AvatarInitial, children: firstInitial });
|
|
69
|
+
};
|
|
70
|
+
var AvatarOverflowCount = ({ count }) => {
|
|
71
|
+
const formattedCount = (0, import_react2.useMemo)(() => {
|
|
72
|
+
return new Intl.NumberFormat("en", {
|
|
73
|
+
notation: "compact",
|
|
74
|
+
compactDisplay: "short",
|
|
75
|
+
maximumFractionDigits: 0
|
|
76
|
+
}).format(count).toLocaleLowerCase();
|
|
77
|
+
}, [count]);
|
|
78
|
+
return (0, import_jsx_runtime.jsxs)("span", { className: s.AvatarOverflowCount, "data-letter-count": formattedCount.length, children: [(0, import_jsx_runtime.jsx)("span", { className: s.AvatarOverflowCountSymbol, children: "+" }), formattedCount] });
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// ../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.7__@types+react@19._90324f97b7190ccfdbe40a9e8bef3385/node_modules/@openai/apps-sdk-ui/dist/es/components/Avatar/AvatarGroup.js
|
|
82
|
+
var import_jsx_runtime2 = __toESM(require_jsx_runtime());
|
|
83
|
+
var import_react3 = __toESM(require_react());
|
|
84
|
+
import s2 from "/home/runner/work/sunpeak/sunpeak/node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.7__@types+react@19._90324f97b7190ccfdbe40a9e8bef3385/node_modules/@openai/apps-sdk-ui/dist/es/components/Avatar/AvatarGroup.module.css";
|
|
85
|
+
var AvatarGroup = ({ className, stack = "start", size, children }) => {
|
|
86
|
+
const childrenArray = import_react3.Children.toArray(children);
|
|
87
|
+
const maybeReversedChildren = stack === "start" ? childrenArray.slice().reverse() : childrenArray;
|
|
88
|
+
return (0, import_jsx_runtime2.jsx)("div", { className: clsx_default(s2.Group, className), "data-stack": stack, style: toCssVariables({
|
|
89
|
+
"avatar-size": size
|
|
90
|
+
}), children: maybeReversedChildren.map((child) => (0, import_react3.isValidElement)(child) ? (0, import_react3.cloneElement)(child) : child) });
|
|
91
|
+
};
|
|
92
|
+
export {
|
|
93
|
+
Avatar,
|
|
94
|
+
AvatarGroup
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=@openai_apps-sdk-ui_components_Avatar.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.7__@types+react@19._90324f97b7190ccfdbe40a9e8bef3385/node_modules/@openai/apps-sdk-ui/src/components/Avatar/Avatar.tsx", "../../../../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.7__@types+react@19._90324f97b7190ccfdbe40a9e8bef3385/node_modules/@openai/apps-sdk-ui/src/components/Avatar/AvatarGroup.tsx"],
|
|
4
|
+
"sourcesContent": ["\"use client\"\n\nimport clsx from \"clsx\"\nimport { useMemo, useState } from \"react\"\nimport { toCssVariables } from \"../../lib/helpers\"\nimport { type SemanticColors, type Variants } from \"../../types\"\nimport s from \"./Avatar.module.css\"\n\ntype ImageStatus = undefined | \"error\" | \"loaded\"\n\nexport type AvatarProps = {\n /** Class name applied to the avatar */\n className?: string\n /** Size of the avatar's width & height, in pixels. */\n size?: number\n /** Display a formatted count of overflow objects. */\n overflowCount?: number\n /** Name used to display initials from */\n name?: string\n /**\n * Color used for the avatar\n * @default secondary\n */\n color?: SemanticColors<\"primary\" | \"secondary\" | \"success\" | \"info\" | \"discovery\" | \"danger\">\n /**\n * Style variant of the avatar\n * @default soft\n */\n variant?: Variants<\"soft\" | \"solid\">\n /** URL of the image to display as the avatar */\n imageUrl?: string\n /** Icon to render in the avatar circle */\n Icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>\n /** Optional click handler, which also enables semantic interactions */\n onClick?: () => void\n /** Optional pointer handler, which also enables semantic interactions */\n onPointerDown?: () => void\n}\n\nexport const Avatar = (props: AvatarProps) => {\n // Validate the image url before sending to the component\n const validImageUrl = validateImageUrl(props.imageUrl)\n\n // Keying off of imageUrl allows us to refresh imageStatus automatically through React rendering\n return <AvatarInner {...props} imageUrl={validImageUrl} key={validImageUrl} />\n}\n\nexport const AvatarInner = (props: AvatarProps) => {\n const {\n className,\n size,\n overflowCount,\n name,\n color = \"secondary\",\n variant = \"soft\",\n imageUrl,\n Icon,\n // asChild support\n ...restProps\n } = props\n const [imageStatus, setImageStatus] = useState<ImageStatus>()\n const isInteractive = !!(restProps.onPointerDown || restProps.onClick)\n const TagName = isInteractive ? \"button\" : \"span\"\n\n return (\n <TagName\n className={clsx(s.Avatar, className)}\n style={toCssVariables({\n \"avatar-size\": size,\n })}\n role={isInteractive ? undefined : \"presentation\"}\n data-color={color}\n data-variant={variant}\n type={isInteractive ? \"button\" : undefined}\n {...restProps}\n >\n {(() => {\n if (imageUrl && imageStatus !== \"error\") {\n return (\n <AvatarImage\n status={imageStatus}\n url={imageUrl}\n onError={() => setImageStatus(\"error\")}\n onLoad={() => setImageStatus(\"loaded\")}\n />\n )\n }\n if (Icon) {\n return <Icon className={s.AvatarIcon} />\n }\n return overflowCount ? (\n <AvatarOverflowCount count={overflowCount} />\n ) : (\n <AvatarInitial name={name} />\n )\n })()}\n </TagName>\n )\n}\n\nconst validateImageUrl = (imageUrl?: string): string | undefined => {\n if (!imageUrl) {\n return\n }\n\n // Avoid specific pattern of images from gravatar.com, which use a pair of initials, instead of a single initial.\n if (imageUrl.includes(\"gravatar.com\") && imageUrl.includes(\"cdn.auth0.com\")) {\n return\n }\n\n return imageUrl\n}\n\nconst AvatarImage = ({\n url,\n status,\n onLoad,\n onError,\n}: {\n url: string\n status: ImageStatus\n onLoad: () => void\n onError: () => void\n}) => {\n return (\n <span className={s.AvatarImageContainer}>\n <img\n src={url}\n className={s.AvatarImage}\n data-loaded={status === \"loaded\" ? \"\" : undefined}\n onLoad={onLoad}\n onError={onError}\n alt=\"\"\n role=\"presentation\"\n />\n </span>\n )\n}\n\nconst AvatarInitial = ({ name = \"\" }: { name?: string }) => {\n const firstInitial = useMemo(() => name.charAt(0).toUpperCase(), [name])\n\n return <span className={s.AvatarInitial}>{firstInitial}</span>\n}\n\nconst AvatarOverflowCount = ({ count }: { count: number }) => {\n const formattedCount = useMemo<string>(() => {\n return new Intl.NumberFormat(\"en\", {\n notation: \"compact\",\n compactDisplay: \"short\",\n maximumFractionDigits: 0,\n })\n .format(count)\n .toLocaleLowerCase()\n }, [count])\n\n return (\n <span className={s.AvatarOverflowCount} data-letter-count={formattedCount.length}>\n <span className={s.AvatarOverflowCountSymbol}>+</span>\n {formattedCount}\n </span>\n )\n}\n", "import clsx from \"clsx\"\nimport { Children, cloneElement, isValidElement, type ReactNode } from \"react\"\nimport { toCssVariables } from \"../../lib/helpers\"\nimport s from \"./AvatarGroup.module.css\"\n\nexport type AvatarGroupProps = {\n /** Class name passed to the group container */\n className?: string\n /**\n * Determines stacking layer order\n * @default start\n */\n stack?: \"start\" | \"end\"\n /** Size all avatars in the group, in pixels. */\n size?: number\n children: ReactNode\n}\n\nexport const AvatarGroup = ({ className, stack = \"start\", size, children }: AvatarGroupProps) => {\n const childrenArray = Children.toArray(children)\n // Conditionally reverse the array depending on desired stacking priority\n const maybeReversedChildren = stack === \"start\" ? childrenArray.slice().reverse() : childrenArray\n\n return (\n <div\n className={clsx(s.Group, className)}\n data-stack={stack}\n style={toCssVariables({\n \"avatar-size\": size,\n })}\n >\n {maybeReversedChildren.map((child) => (isValidElement(child) ? cloneElement(child) : child))}\n </div>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_react", "_createElement", "_jsx", "_jsxs", "import_react", "s", "_jsx"]
|
|
7
|
+
}
|