sunpeak 0.12.3 → 0.12.6

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.
Files changed (76) hide show
  1. package/README.md +3 -3
  2. package/bin/commands/dev.mjs +6 -0
  3. package/package.json +1 -1
  4. package/template/dist/albums/albums.json +1 -1
  5. package/template/dist/carousel/carousel.json +1 -1
  6. package/template/dist/map/map.json +1 -1
  7. package/template/dist/review/review.json +1 -1
  8. package/template/node_modules/.vite/deps/_metadata.json +19 -19
  9. package/template/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  10. package/template/src/styles/app.css +12 -0
  11. package/template/src/styles/globals.css +3 -9
  12. package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_Avatar.js +0 -0
  13. package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_Avatar.js.map +0 -0
  14. package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_Button.js +0 -0
  15. package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_Button.js.map +0 -0
  16. package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_Checkbox.js +0 -0
  17. package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_Checkbox.js.map +0 -0
  18. package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_Icon.js +0 -0
  19. package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_Icon.js.map +0 -0
  20. package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_Input.js +0 -0
  21. package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_Input.js.map +0 -0
  22. package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_SegmentedControl.js +4 -4
  23. package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_SegmentedControl.js.map +0 -0
  24. package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_Select.js +6 -6
  25. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_Select.js.map +0 -0
  26. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_Textarea.js +0 -0
  27. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_components_Textarea.js.map +0 -0
  28. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_theme.js +0 -0
  29. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/@openai_apps-sdk-ui_theme.js.map +0 -0
  30. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-6CR5OFLH.js +0 -0
  31. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-6CR5OFLH.js.map +0 -0
  32. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-EGRHWZRV.js +0 -0
  33. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-EGRHWZRV.js.map +0 -0
  34. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-EXGLAROW.js +0 -0
  35. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-EXGLAROW.js.map +0 -0
  36. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-IFPDCKUT.js +0 -0
  37. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-IFPDCKUT.js.map +0 -0
  38. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-ILHRZGIS.js +0 -0
  39. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-ILHRZGIS.js.map +0 -0
  40. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-JSPMUVNT.js +0 -0
  41. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-JSPMUVNT.js.map +0 -0
  42. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-L2PWLFDO.js +0 -0
  43. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-L2PWLFDO.js.map +0 -0
  44. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-OMOWBQDU.js +0 -0
  45. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-OMOWBQDU.js.map +0 -0
  46. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-R3BTL4CL.js +0 -0
  47. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-R3BTL4CL.js.map +0 -0
  48. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-SPDZ46BB.js +0 -0
  49. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-SPDZ46BB.js.map +0 -0
  50. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-WSHFT23M.js +0 -0
  51. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-WSHFT23M.js.map +0 -0
  52. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-Y7UNCRGH.js +0 -0
  53. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-Y7UNCRGH.js.map +0 -0
  54. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-ZNFXUT4Q.js +0 -0
  55. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/chunk-ZNFXUT4Q.js.map +0 -0
  56. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/clsx.js +0 -0
  57. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/clsx.js.map +0 -0
  58. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/embla-carousel-react.js +0 -0
  59. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/embla-carousel-react.js.map +0 -0
  60. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/embla-carousel-wheel-gestures.js +0 -0
  61. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/embla-carousel-wheel-gestures.js.map +0 -0
  62. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/mapbox-gl.js +0 -0
  63. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/mapbox-gl.js.map +0 -0
  64. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/package.json +0 -0
  65. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/react-dom.js +0 -0
  66. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/react-dom.js.map +0 -0
  67. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/react-dom_client.js +0 -0
  68. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/react-dom_client.js.map +0 -0
  69. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/react.js +0 -0
  70. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/react.js.map +0 -0
  71. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/react_jsx-dev-runtime.js +0 -0
  72. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/react_jsx-dev-runtime.js.map +0 -0
  73. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/react_jsx-runtime.js +0 -0
  74. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/react_jsx-runtime.js.map +0 -0
  75. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/tailwind-merge.js +0 -0
  76. /package/template/node_modules/.vite-mcp/{deps_temp_47c3a576 → deps_temp_48e8c71a}/tailwind-merge.js.map +0 -0
package/README.md CHANGED
@@ -49,13 +49,13 @@ To add sunpeak to an existing project, refer to the [documentation](https://docs
49
49
 
50
50
  sunpeak is an npm package that helps you build ChatGPT Apps (MCP Resources) while keeping your MCP server client-agnostic. sunpeak consists of:
51
51
 
52
- ### The `sunpeak` library (`./src`)
52
+ ### The `sunpeak` library
53
53
 
54
54
  1. Runtime APIs: Strongly typed APIs for interacting with the ChatGPT runtime, **architected to support future platforms** (Gemini, Claude, etc.).
55
55
  2. ChatGPT simulator: React component replicating ChatGPT's runtime to **test Apps locally and automatically**.
56
56
  3. MCP server: Serve Resources with mock data to the real ChatGPT with HMR (**no more cache issues or 5-click manual refreshes**).
57
57
 
58
- ### The `sunpeak` framework (`./template`)
58
+ ### The `sunpeak` framework
59
59
 
60
60
  Next.js for ChatGPT Apps. Using a Review page as an example, sunpeak projects look like:
61
61
 
@@ -78,7 +78,7 @@ my-app/
78
78
  1. Create UIs by creating a `-resource.tsx` component file ([example](#resource-component)) and `-resource.json` MCP metadata file ([example](#resource-mcp-metadata)).
79
79
  2. Create test state (simulations) for local dev, ChatGPT dev, automated testing, and demos by creating a `-simulation.json` file. ([example](#simulation))
80
80
 
81
- ### The `sunpeak` CLI (`./bin`)
81
+ ### The `sunpeak` CLI
82
82
 
83
83
  Commands for managing ChatGPT Apps. Includes a client for the [sunpeak Resource Repository](https://app.sunpeak.ai/). The repository helps you & your CI/CD decouple your App from your client-agnostic MCP server while also providing a hosted runtime to collaborate, demo, and share your ChatGPT Apps.
84
84
 
@@ -182,6 +182,10 @@ export async function dev(projectRoot = process.cwd(), args = []) {
182
182
  console.log(`\nStarting MCP server with ${simulations.length} simulation(s)...`);
183
183
 
184
184
  // Virtual entry module plugin for MCP
185
+ // Import sunpeak styles directly via JS to avoid CSS @import alias issues with Lightning CSS.
186
+ // Then import app.css for user's @source directives and custom styles (no sunpeak import).
187
+ const sunpeakStylePath = isTemplate ? `${parentSrc}/style.css` : 'sunpeak/style.css';
188
+
185
189
  const sunpeakEntryPlugin = () => ({
186
190
  name: 'sunpeak-entry',
187
191
  resolveId(id) {
@@ -202,6 +206,8 @@ export async function dev(projectRoot = process.cwd(), args = []) {
202
206
  return `
203
207
  import { createElement } from 'react';
204
208
  import { createRoot } from 'react-dom/client';
209
+ import '${sunpeakStylePath}';
210
+ import '/src/styles/app.css';
205
211
  import * as ResourceModule from '${srcPath}';
206
212
 
207
213
  const Component = ResourceModule.default || ResourceModule['${componentName}'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sunpeak",
3
- "version": "0.12.3",
3
+ "version": "0.12.6",
4
4
  "description": "The ChatGPT App framework. Quickstart, build, & test your ChatGPT App locally!",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -12,5 +12,5 @@
12
12
  ]
13
13
  }
14
14
  },
15
- "uri": "ui://albums-mkkjnihu"
15
+ "uri": "ui://albums-mklu15cn"
16
16
  }
@@ -12,5 +12,5 @@
12
12
  ]
13
13
  }
14
14
  },
15
- "uri": "ui://carousel-mkkjnihu"
15
+ "uri": "ui://carousel-mklu15cn"
16
16
  }
@@ -18,5 +18,5 @@
18
18
  ]
19
19
  }
20
20
  },
21
- "uri": "ui://map-mkkjnihu"
21
+ "uri": "ui://map-mklu15cn"
22
22
  }
@@ -12,5 +12,5 @@
12
12
  ]
13
13
  }
14
14
  },
15
- "uri": "ui://review-mkkjnihu"
15
+ "uri": "ui://review-mklu15cn"
16
16
  }
@@ -7,115 +7,115 @@
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": "d095fee4",
10
+ "fileHash": "2d3e614d",
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": "1e17fbda",
16
+ "fileHash": "64a9bce9",
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": "e5905a96",
22
+ "fileHash": "1585c8e1",
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": "88837a56",
28
+ "fileHash": "0cac3bfe",
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.8__@types+react@19._10810175a7ab45acace17e46639bb69b/node_modules/@openai/apps-sdk-ui/dist/es/components/Avatar/index.js",
33
33
  "file": "@openai_apps-sdk-ui_components_Avatar.js",
34
- "fileHash": "c237d5bb",
34
+ "fileHash": "ee988656",
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.8__@types+react@19._10810175a7ab45acace17e46639bb69b/node_modules/@openai/apps-sdk-ui/dist/es/components/Button/index.js",
39
39
  "file": "@openai_apps-sdk-ui_components_Button.js",
40
- "fileHash": "948e95c2",
40
+ "fileHash": "3f81f32d",
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": "3b5f4737",
46
+ "fileHash": "d9f17f66",
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.8__@types+react@19._10810175a7ab45acace17e46639bb69b/node_modules/@openai/apps-sdk-ui/dist/es/components/Icon/index.js",
51
51
  "file": "@openai_apps-sdk-ui_components_Icon.js",
52
- "fileHash": "0e905522",
52
+ "fileHash": "a9e12398",
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": "1d6514b2",
58
+ "fileHash": "01701689",
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": "b84fd36d",
64
+ "fileHash": "530135b9",
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": "4e415289",
70
+ "fileHash": "087afc9b",
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": "1dc1716b",
76
+ "fileHash": "8b1a7246",
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": "8110e333",
82
+ "fileHash": "a74f1a27",
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": "84d4f90a",
88
+ "fileHash": "5fbcfbd6",
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": "9bbfcc5f",
94
+ "fileHash": "e3d405a1",
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": "ca8d9d05",
100
+ "fileHash": "8fa2e39c",
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": "e51e5a05",
106
+ "fileHash": "9fe61aee",
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": "a9fd71fd",
112
+ "fileHash": "9b3062b5",
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": "1d97d123",
118
+ "fileHash": "36a64166",
119
119
  "needsInterop": false
120
120
  }
121
121
  },
@@ -1 +1 @@
1
- {"version":"4.0.17","results":[[":src/resources/carousel/carousel-resource.test.tsx",{"duration":263.06405599999994,"failed":false}],[":src/resources/review/review-resource.test.tsx",{"duration":548.430705,"failed":false}],[":src/resources/albums/components/albums.test.tsx",{"duration":320.8849439999999,"failed":false}],[":src/resources/map/components/map-view.test.tsx",{"duration":79.95350200000007,"failed":false}],[":src/resources/map/components/place-inspector.test.tsx",{"duration":441.76726099999996,"failed":false}],[":src/resources/albums/components/fullscreen-viewer.test.tsx",{"duration":295.9413319999999,"failed":false}],[":src/resources/map/components/place-list.test.tsx",{"duration":144.25632099999984,"failed":false}],[":src/resources/map/components/place-card.test.tsx",{"duration":309.59726099999966,"failed":false}],[":src/resources/map/components/place-carousel.test.tsx",{"duration":440.8106090000001,"failed":false}],[":src/resources/albums/components/album-carousel.test.tsx",{"duration":86.08935299999985,"failed":false}],[":src/resources/carousel/components/carousel.test.tsx",{"duration":84.26376400000004,"failed":false}],[":src/resources/map/map-resource.test.tsx",{"duration":292.795488,"failed":false}],[":src/resources/albums/albums-resource.test.tsx",{"duration":270.16239199999995,"failed":false}],[":src/resources/albums/components/film-strip.test.tsx",{"duration":342.9590240000002,"failed":false}],[":src/resources/albums/components/album-card.test.tsx",{"duration":279.50529500000016,"failed":false}],[":src/resources/carousel/components/card.test.tsx",{"duration":93.31263399999989,"failed":false}]]}
1
+ {"version":"4.0.17","results":[[":src/resources/albums/components/albums.test.tsx",{"duration":293.1135629999999,"failed":false}],[":src/resources/carousel/carousel-resource.test.tsx",{"duration":245.7196939999999,"failed":false}],[":src/resources/review/review-resource.test.tsx",{"duration":503.8595849999999,"failed":false}],[":src/resources/map/components/map-view.test.tsx",{"duration":73.40496200000007,"failed":false}],[":src/resources/map/components/place-inspector.test.tsx",{"duration":427.93922999999995,"failed":false}],[":src/resources/albums/components/fullscreen-viewer.test.tsx",{"duration":257.09176100000013,"failed":false}],[":src/resources/map/components/place-list.test.tsx",{"duration":128.982528,"failed":false}],[":src/resources/map/components/place-card.test.tsx",{"duration":310.63125100000025,"failed":false}],[":src/resources/map/components/place-carousel.test.tsx",{"duration":435.226844,"failed":false}],[":src/resources/albums/components/album-carousel.test.tsx",{"duration":89.13493199999994,"failed":false}],[":src/resources/carousel/components/carousel.test.tsx",{"duration":73.44270699999993,"failed":false}],[":src/resources/map/map-resource.test.tsx",{"duration":243.26033099999995,"failed":false}],[":src/resources/albums/albums-resource.test.tsx",{"duration":269.594881,"failed":false}],[":src/resources/albums/components/film-strip.test.tsx",{"duration":377.1749520000003,"failed":false}],[":src/resources/albums/components/album-card.test.tsx",{"duration":278.11962800000015,"failed":false}],[":src/resources/carousel/components/card.test.tsx",{"duration":63.54608200000007,"failed":false}]]}
@@ -0,0 +1,12 @@
1
+ /* User-specific Tailwind configuration and custom styles */
2
+
3
+ /* Scan app-specific source files for Tailwind classes */
4
+ @source "../**/*.{ts,tsx}";
5
+
6
+ /* Required for Tailwind to find class references in Apps SDK UI components. */
7
+ @source "../../node_modules/@openai/apps-sdk-ui";
8
+
9
+ /* Configure dark mode to use data-theme attribute (OpenAI SDK standard) */
10
+ @custom-variant dark (&:where([data-theme="dark"], [data-theme="dark"] *));
11
+
12
+ /* Add your custom styles below */
@@ -1,11 +1,5 @@
1
- /* sunpeak/style.css handles tailwindcss and @openai/apps-sdk-ui/css imports */
1
+ /* Base styles: Tailwind CSS + OpenAI Apps SDK UI */
2
2
  @import "sunpeak/style.css";
3
3
 
4
- /* Scan app-specific source files for Tailwind classes */
5
- @source "../**/*.{ts,tsx}";
6
-
7
- /* Required for Tailwind to find class references in Apps SDK UI components. */
8
- @source "../../node_modules/@openai/apps-sdk-ui";
9
-
10
- /* Configure dark mode to use data-theme attribute (OpenAI SDK standard) */
11
- @custom-variant dark (&:where([data-theme="dark"], [data-theme="dark"] *));
4
+ /* App-specific configuration and custom styles */
5
+ @import "./app.css";
@@ -1,7 +1,3 @@
1
- import {
2
- dist_exports4 as dist_exports
3
- } from "./chunk-L2PWLFDO.js";
4
- import "./chunk-JSPMUVNT.js";
5
1
  import {
6
2
  useResizeObserver
7
3
  } from "./chunk-EXGLAROW.js";
@@ -10,6 +6,10 @@ import {
10
6
  waitForAnimationFrame
11
7
  } from "./chunk-OMOWBQDU.js";
12
8
  import "./chunk-EGRHWZRV.js";
9
+ import {
10
+ dist_exports4 as dist_exports
11
+ } from "./chunk-L2PWLFDO.js";
12
+ import "./chunk-JSPMUVNT.js";
13
13
  import {
14
14
  clsx_default
15
15
  } from "./chunk-WSHFT23M.js";
@@ -1,12 +1,6 @@
1
1
  import {
2
2
  Input
3
3
  } from "./chunk-R3BTL4CL.js";
4
- import {
5
- dist_exports,
6
- dist_exports3 as dist_exports2,
7
- dist_exports5 as dist_exports3
8
- } from "./chunk-L2PWLFDO.js";
9
- import "./chunk-JSPMUVNT.js";
10
4
  import {
11
5
  Button,
12
6
  LoadingIndicator,
@@ -33,6 +27,12 @@ import {
33
27
  waitForAnimationFrame
34
28
  } from "./chunk-OMOWBQDU.js";
35
29
  import "./chunk-EGRHWZRV.js";
30
+ import {
31
+ dist_exports,
32
+ dist_exports3 as dist_exports2,
33
+ dist_exports5 as dist_exports3
34
+ } from "./chunk-L2PWLFDO.js";
35
+ import "./chunk-JSPMUVNT.js";
36
36
  import {
37
37
  clsx_default
38
38
  } from "./chunk-WSHFT23M.js";