windmill-components 1.677.0 → 1.687.0

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 (358) hide show
  1. package/package/components/AppConnectInner.svelte +6 -0
  2. package/package/components/CiTestResults.svelte +64 -0
  3. package/package/components/CiTestResults.svelte.d.ts +7 -0
  4. package/package/components/CompareWorkspaces.svelte +626 -418
  5. package/package/components/DBManager.svelte +35 -4
  6. package/package/components/DBManager.svelte.d.ts +2 -0
  7. package/package/components/DBManagerContent.svelte +3 -1
  8. package/package/components/DBManagerContent.svelte.d.ts +3 -0
  9. package/package/components/DBManagerDrawer.svelte +145 -3
  10. package/package/components/DBTableEditor.svelte +14 -4
  11. package/package/components/DatatablePicker.svelte +2 -5
  12. package/package/components/DatatableSchemaDiff.svelte +531 -0
  13. package/package/components/DatatableSchemaDiff.svelte.d.ts +29 -0
  14. package/package/components/DedicatedWorkersSelector.svelte +4 -2
  15. package/package/components/DefaultTagsInner.svelte +42 -2
  16. package/package/components/DeployWorkspaceDrawer.svelte +1 -1
  17. package/package/components/Dev.svelte +20 -3
  18. package/package/components/Editor.svelte +1 -1
  19. package/package/components/EditorBar.svelte +1 -1
  20. package/package/components/EditorBar.svelte.d.ts +1 -1
  21. package/package/components/FlowStatusViewerInner.svelte +269 -220
  22. package/package/components/FlowTimeline.svelte +1 -1
  23. package/package/components/FolderEditor.svelte +189 -4
  24. package/package/components/ForkWorkspaceBanner.svelte +82 -11
  25. package/package/components/GlobalUserOffboardingModal.svelte +293 -0
  26. package/package/components/GlobalUserOffboardingModal.svelte.d.ts +10 -0
  27. package/package/components/InstanceSettings.svelte +22 -3
  28. package/package/components/Login.svelte +22 -10
  29. package/package/components/ModuleTest.svelte +2 -1
  30. package/package/components/NoMainFuncBadge.svelte +1 -1
  31. package/package/components/OffboardItemsBox.svelte +56 -0
  32. package/package/components/OffboardItemsBox.svelte.d.ts +12 -0
  33. package/package/components/OffboardReassignControls.svelte +47 -0
  34. package/package/components/OffboardReassignControls.svelte.d.ts +20 -0
  35. package/package/components/OffboardWorkspaceSection.svelte +110 -0
  36. package/package/components/OffboardWorkspaceSection.svelte.d.ts +24 -0
  37. package/package/components/OnBehalfOfSelector.svelte +21 -3
  38. package/package/components/OnBehalfOfSelector.svelte.d.ts +7 -0
  39. package/package/components/QueueAlerts.svelte +10 -10
  40. package/package/components/ResourcePicker.svelte +2 -2
  41. package/package/components/ScriptBuilder.svelte +52 -11
  42. package/package/components/ScriptEditor.svelte +1 -3
  43. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  44. package/package/components/ShareModal.svelte +236 -98
  45. package/package/components/SuperadminSettingsInner.svelte +362 -315
  46. package/package/components/UserOffboardingModal.svelte +238 -0
  47. package/package/components/UserOffboardingModal.svelte.d.ts +10 -0
  48. package/package/components/WorkspaceDeployLayout.svelte +3 -3
  49. package/package/components/WorkspaceDeployLayout.svelte.d.ts +1 -0
  50. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +4 -2
  51. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +12 -0
  52. package/package/components/assets/AssetsDropdownButton.svelte +1 -1
  53. package/package/components/common/confirmationModal/ConfirmationModal.svelte +1 -1
  54. package/package/components/common/table/AppRow.svelte +3 -3
  55. package/package/components/common/table/FlowRow.svelte +3 -3
  56. package/package/components/common/table/RawAppRow.svelte +4 -4
  57. package/package/components/common/table/Row.svelte +6 -2
  58. package/package/components/common/table/ScriptRow.svelte +11 -3
  59. package/package/components/copilot/chat/AIChatManager.svelte.js +2 -2
  60. package/package/components/copilot/chat/anthropic.d.ts +7 -1
  61. package/package/components/copilot/chat/anthropic.js +5 -2
  62. package/package/components/copilot/chat/app/core.js +129 -1
  63. package/package/components/copilot/chat/app/core.test.js +192 -0
  64. package/package/components/copilot/chat/chatLoop.d.ts +3 -0
  65. package/package/components/copilot/chat/chatLoop.js +13 -5
  66. package/package/components/copilot/chat/flow/FlowAIChat.svelte +55 -76
  67. package/package/components/copilot/chat/flow/core.d.ts +13 -3
  68. package/package/components/copilot/chat/flow/core.js +467 -116
  69. package/package/components/copilot/chat/flow/helperUtils.d.ts +19 -0
  70. package/package/components/copilot/chat/flow/helperUtils.js +68 -0
  71. package/package/components/copilot/chat/flow/helperUtils.test.js +116 -0
  72. package/package/components/copilot/chat/flow/inlineScriptsUtils.d.ts +5 -24
  73. package/package/components/copilot/chat/flow/inlineScriptsUtils.js +30 -55
  74. package/package/components/copilot/chat/flow/utils.test.js +59 -0
  75. package/package/components/copilot/chat/openai-responses.d.ts +7 -1
  76. package/package/components/copilot/chat/openai-responses.js +5 -2
  77. package/package/components/copilot/chat/shared.d.ts +1 -2
  78. package/package/components/copilot/chat/shared.js +94 -52
  79. package/package/components/copilot/chat/tokenUsage.d.ts +23 -0
  80. package/package/components/copilot/chat/tokenUsage.js +42 -0
  81. package/package/components/copilot/lib.d.ts +5 -1
  82. package/package/components/copilot/lib.js +21 -5
  83. package/package/components/deploymentRequest/DeploymentRequestPanel.svelte +337 -0
  84. package/package/components/deploymentRequest/DeploymentRequestPanel.svelte.d.ts +15 -0
  85. package/package/components/details/CopyableCodeBlock.svelte +18 -8
  86. package/package/components/details/CopyableCodeBlock.svelte.d.ts +1 -0
  87. package/package/components/flows/FlowAssetsHandler.svelte +19 -21
  88. package/package/components/flows/agentToolTree.d.ts +17 -0
  89. package/package/components/flows/agentToolTree.js +114 -0
  90. package/package/components/flows/agentToolTree.test.d.ts +1 -0
  91. package/package/components/flows/agentToolTree.test.js +86 -0
  92. package/package/components/flows/agentToolUtils.d.ts +0 -5
  93. package/package/components/flows/agentToolUtils.js +0 -49
  94. package/package/components/flows/content/FlowLoop.svelte +7 -4
  95. package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte +15 -7
  96. package/package/components/flows/content/FlowSettings.svelte +29 -0
  97. package/package/components/flows/dfs.d.ts +6 -2
  98. package/package/components/flows/dfs.js +19 -11
  99. package/package/components/flows/flowDeleteController.d.ts +32 -0
  100. package/package/components/flows/flowDeleteController.js +54 -0
  101. package/package/components/flows/flowDeleteController.test.d.ts +1 -0
  102. package/package/components/flows/flowDeleteController.test.js +121 -0
  103. package/package/components/flows/flowDeleteUtils.d.ts +48 -0
  104. package/package/components/flows/flowDeleteUtils.js +150 -0
  105. package/package/components/flows/flowDeleteUtils.test.d.ts +1 -0
  106. package/package/components/flows/flowDeleteUtils.test.js +131 -0
  107. package/package/components/flows/flowDiff.d.ts +2 -47
  108. package/package/components/flows/flowDiff.js +16 -293
  109. package/package/components/flows/flowDiff.testUtils.d.ts +8 -0
  110. package/package/components/flows/flowDiff.testUtils.js +26 -0
  111. package/package/components/flows/flowDiffManager.svelte.js +20 -75
  112. package/package/components/flows/flowDiffManager.svelte.test.js +103 -2
  113. package/package/components/flows/flowExplorer.d.ts +4 -0
  114. package/package/components/flows/flowExplorer.js +7 -30
  115. package/package/components/flows/flowState.d.ts +1 -0
  116. package/package/components/flows/flowStateUtils.svelte.js +6 -1
  117. package/package/components/flows/flowStore.svelte.d.ts +1 -1
  118. package/package/components/flows/flowTree.d.ts +91 -0
  119. package/package/components/flows/flowTree.js +326 -0
  120. package/package/components/flows/flowTree.test.d.ts +1 -0
  121. package/package/components/flows/flowTree.test.js +236 -0
  122. package/package/components/flows/map/FlowJobsMenu.svelte +36 -30
  123. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -1
  124. package/package/components/flows/map/FlowModuleSchemaMap.svelte +70 -227
  125. package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +0 -2
  126. package/package/components/flows/pickers/PickHubScriptQuick.svelte +2 -2
  127. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -1
  128. package/package/components/flows/previousResults.js +13 -41
  129. package/package/components/flows/previousResults.test.d.ts +1 -0
  130. package/package/components/flows/previousResults.test.js +65 -0
  131. package/package/components/flows/propPicker/OutputPicker.svelte +2 -1
  132. package/package/components/flows/propPicker/OutputPickerInner.svelte +41 -4
  133. package/package/components/flows/propPicker/StepHistory.svelte +9 -1
  134. package/package/components/git_sync/GitSyncContext.svelte.js +11 -5
  135. package/package/components/git_sync/GitSyncRepositoryCard.svelte +2 -29
  136. package/package/components/git_sync/PullWorkspaceModal.svelte +6 -7
  137. package/package/components/graph/FlowGraphV2.svelte +2 -2
  138. package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
  139. package/package/components/graph/groupedModulesProxy.svelte.d.ts +10 -0
  140. package/package/components/graph/groupedModulesProxy.svelte.js +17 -1
  141. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +5 -2
  142. package/package/components/home/HomeConnectDrawer.svelte +125 -0
  143. package/package/components/home/HomeConnectDrawer.svelte.d.ts +5 -0
  144. package/package/components/icons/GithubIcon.svelte +4 -4
  145. package/package/components/icons/GithubIcon.svelte.d.ts +5 -2
  146. package/package/components/instanceSettings/ExternalJwtTokens.svelte +85 -0
  147. package/package/components/instanceSettings/ExternalJwtTokens.svelte.d.ts +12 -0
  148. package/package/components/instanceSettings/GhesAppSettings.svelte +17 -0
  149. package/package/components/instanceSettings/IndexerMemorySettings.svelte +56 -29
  150. package/package/components/instanceSettings/SecretBackendConfig.svelte +9 -2
  151. package/package/components/instanceSettings.d.ts +1 -0
  152. package/package/components/instanceSettings.js +42 -8
  153. package/package/components/offboarding-utils.d.ts +11 -0
  154. package/package/components/offboarding-utils.js +100 -0
  155. package/package/components/raw_apps/RawAppDataTableDrawer.svelte +1 -1
  156. package/package/components/raw_apps/RawAppEditor.svelte +27 -0
  157. package/package/components/raw_apps/RawAppEditorHeader.svelte +6 -1
  158. package/package/components/raw_apps/RawAppEditorHeader.svelte.d.ts +1 -0
  159. package/package/components/raw_apps/RawAppYamlEditor.svelte +81 -0
  160. package/package/components/raw_apps/RawAppYamlEditor.svelte.d.ts +20 -0
  161. package/package/components/raw_apps/datatableUtils.svelte.js +1 -1
  162. package/package/components/runs/runsFilter.d.ts +1 -1
  163. package/package/components/script_builder.d.ts +1 -1
  164. package/package/components/select/Select.svelte +2 -1
  165. package/package/components/select/Select.svelte.d.ts +1 -0
  166. package/package/components/settings/CreateToken.svelte +113 -64
  167. package/package/components/settings/CreateToken.svelte.d.ts +3 -0
  168. package/package/components/settings/WorkspaceUserSettings.svelte +34 -28
  169. package/package/components/sidebar/SidebarContent.svelte +58 -2
  170. package/package/components/sidebar/WorkspaceMenu.svelte +8 -4
  171. package/package/components/triggers/AddTriggersButton.svelte +11 -0
  172. package/package/components/triggers/PermissionedAsLine.svelte +37 -3
  173. package/package/components/triggers/PermissionedAsLine.svelte.d.ts +6 -0
  174. package/package/components/triggers/TriggersEditor.svelte +5 -1
  175. package/package/components/triggers/TriggersWrapper.svelte +10 -0
  176. package/package/components/triggers/email/EmailTriggerEditorInner.svelte +13 -11
  177. package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +13 -11
  178. package/package/components/triggers/http/RouteEditorConfigSection.svelte +15 -7
  179. package/package/components/triggers/http/RouteEditorInner.svelte +14 -14
  180. package/package/components/triggers/http/RoutesGenerator.svelte +6 -1
  181. package/package/components/triggers/http/RoutesPanel.svelte +1 -1
  182. package/package/components/triggers/http/utils.d.ts +1 -1
  183. package/package/components/triggers/http/utils.js +2 -2
  184. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +13 -11
  185. package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte.d.ts +1 -1
  186. package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +13 -11
  187. package/package/components/triggers/native/NativeTriggerEditor.svelte +3 -0
  188. package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte +118 -0
  189. package/package/components/triggers/native/services/github/GitHubTriggerForm.svelte.d.ts +17 -0
  190. package/package/components/triggers/native/utils.js +14 -0
  191. package/package/components/triggers/nats/NatsTriggerEditor.svelte.d.ts +4 -3
  192. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +13 -11
  193. package/package/components/triggers/postgres/PostgresTriggerEditor.svelte.d.ts +4 -3
  194. package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +13 -11
  195. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +13 -11
  196. package/package/components/triggers/sqs/SqsTriggerEditor.svelte.d.ts +4 -3
  197. package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +13 -11
  198. package/package/components/triggers/triggers.svelte.js +1 -0
  199. package/package/components/triggers/utils.js +27 -6
  200. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +13 -11
  201. package/package/components/triggers.d.ts +1 -1
  202. package/package/components/useFolderDefaultPermissionedAs.svelte.d.ts +13 -0
  203. package/package/components/useFolderDefaultPermissionedAs.svelte.js +63 -0
  204. package/package/components/workspaceSettings/CreateWorkspace.svelte +16 -677
  205. package/package/components/workspaceSettings/CreateWorkspaceInner.svelte +604 -0
  206. package/package/components/workspaceSettings/CreateWorkspaceInner.svelte.d.ts +7 -0
  207. package/package/components/workspaceSettings/CustomInstanceDbSelect.svelte +27 -25
  208. package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte +46 -8
  209. package/package/components/workspaceSettings/DataTableSettings.svelte +27 -22
  210. package/package/components/workspaceSettings/DucklakeSettings.svelte +1 -1
  211. package/package/components/workspaceSettings/ForkDatatableSection.svelte +228 -0
  212. package/package/components/workspaceSettings/ForkDatatableSection.svelte.d.ts +28 -0
  213. package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +8 -2
  214. package/package/components/workspaceSettings/RulesetEditor.svelte +27 -2
  215. package/package/components/workspaceSettings/VolumeStorageSettings.svelte +1 -1
  216. package/package/components/workspaceSettings/WorkspaceIntegrations.svelte +17 -1
  217. package/package/consts.d.ts +3 -0
  218. package/package/consts.js +10 -0
  219. package/package/gen/core/OpenAPI.js +1 -1
  220. package/package/gen/schemas.gen.d.ts +1172 -164
  221. package/package/gen/schemas.gen.js +1168 -157
  222. package/package/gen/services.gen.d.ts +511 -6
  223. package/package/gen/services.gen.js +1023 -23
  224. package/package/gen/types.gen.d.ts +2278 -151
  225. package/package/githubApp.js +5 -1
  226. package/package/hubPaths.json +1 -4
  227. package/package/infer.js +13 -1
  228. package/package/infer.svelte.js +10 -1
  229. package/package/monaco_workers/sqlTypePlugin.worker.d.ts +10 -0
  230. package/package/monaco_workers/sqlTypePlugin.worker.js +39 -0
  231. package/package/script_helpers.d.ts +8 -2
  232. package/package/script_helpers.js +14 -0
  233. package/package/stores.d.ts +4 -0
  234. package/package/stores.js +1 -0
  235. package/package/system_prompts/prompts.d.ts +4 -3
  236. package/package/system_prompts/prompts.js +270 -20
  237. package/package/templates/ci_test_bun.ts.template +19 -0
  238. package/package/templates/ci_test_python.py.template +18 -0
  239. package/package/utils_deployable.d.ts +11 -7
  240. package/package/utils_workspace_deploy.d.ts +8 -8
  241. package/package/utils_workspace_deploy.js +86 -420
  242. package/package.json +4 -4
  243. package/package/components/copilot/chat/__tests__/app/appChat.eval.test.js +0 -153
  244. package/package/components/copilot/chat/__tests__/app/appEvalComparison.d.ts +0 -21
  245. package/package/components/copilot/chat/__tests__/app/appEvalComparison.js +0 -136
  246. package/package/components/copilot/chat/__tests__/app/appEvalHelpers.d.ts +0 -15
  247. package/package/components/copilot/chat/__tests__/app/appEvalHelpers.js +0 -107
  248. package/package/components/copilot/chat/__tests__/app/appEvalRunner.d.ts +0 -50
  249. package/package/components/copilot/chat/__tests__/app/appEvalRunner.js +0 -93
  250. package/package/components/copilot/chat/__tests__/app/appFixtureLoader.d.ts +0 -29
  251. package/package/components/copilot/chat/__tests__/app/appFixtureLoader.js +0 -134
  252. package/package/components/copilot/chat/__tests__/app/appResultsWriter.d.ts +0 -30
  253. package/package/components/copilot/chat/__tests__/app/appResultsWriter.js +0 -197
  254. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.d.ts +0 -10
  255. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/main.js +0 -9
  256. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/createFolder/meta.json +0 -4
  257. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.d.ts +0 -6
  258. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/main.js +0 -5
  259. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/deleteItem/meta.json +0 -4
  260. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.d.ts +0 -12
  261. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/main.js +0 -14
  262. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFiles/meta.json +0 -4
  263. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.d.ts +0 -8
  264. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/main.js +0 -25
  265. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/listFolders/meta.json +0 -4
  266. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.d.ts +0 -7
  267. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/main.js +0 -5
  268. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/moveItem/meta.json +0 -4
  269. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.d.ts +0 -8
  270. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/main.js +0 -5
  271. package/package/components/copilot/chat/__tests__/app/initial/file_manager/backend/renameItem/meta.json +0 -4
  272. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.d.ts +0 -10
  273. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Breadcrumb.tsx +0 -26
  274. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.d.ts +0 -10
  275. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileItem.tsx +0 -79
  276. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.d.ts +0 -10
  277. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FileList.tsx +0 -46
  278. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.d.ts +0 -10
  279. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/FolderTree.tsx +0 -56
  280. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.d.ts +0 -6
  281. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/components/Toolbar.tsx +0 -59
  282. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.d.ts +0 -16
  283. package/package/components/copilot/chat/__tests__/app/initial/file_manager/frontend/index.tsx +0 -119
  284. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.d.ts +0 -15
  285. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/main.js +0 -14
  286. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/addToCart/meta.json +0 -4
  287. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.d.ts +0 -14
  288. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/main.js +0 -5
  289. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/calculateTotal/meta.json +0 -4
  290. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.d.ts +0 -6
  291. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/main.js +0 -41
  292. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/getProducts/meta.json +0 -4
  293. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.d.ts +0 -15
  294. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/main.js +0 -3
  295. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/backend/removeFromCart/meta.json +0 -4
  296. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.d.ts +0 -9
  297. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/Cart.tsx +0 -51
  298. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.d.ts +0 -8
  299. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductCard.tsx +0 -27
  300. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.d.ts +0 -8
  301. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/components/ProductList.tsx +0 -18
  302. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.d.ts +0 -12
  303. package/package/components/copilot/chat/__tests__/app/initial/shopping_cart/frontend/index.tsx +0 -81
  304. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.d.ts +0 -3
  305. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/main.js +0 -3
  306. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/decrementCounter/meta.json +0 -4
  307. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.d.ts +0 -3
  308. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/main.js +0 -3
  309. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/backend/incrementCounter/meta.json +0 -4
  310. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.d.ts +0 -2
  311. package/package/components/copilot/chat/__tests__/app/initial/test1_counter_app/frontend/index.tsx +0 -38
  312. package/package/components/copilot/chat/__tests__/app/variants/baseline.d.ts +0 -6
  313. package/package/components/copilot/chat/__tests__/app/variants/baseline.js +0 -10
  314. package/package/components/copilot/chat/__tests__/app/variants/index.d.ts +0 -3
  315. package/package/components/copilot/chat/__tests__/app/variants/index.js +0 -3
  316. package/package/components/copilot/chat/__tests__/app/variants/streamlined.d.ts +0 -6
  317. package/package/components/copilot/chat/__tests__/app/variants/streamlined.js +0 -137
  318. package/package/components/copilot/chat/__tests__/flow/expected/test1.json +0 -134
  319. package/package/components/copilot/chat/__tests__/flow/expected/test2.json +0 -183
  320. package/package/components/copilot/chat/__tests__/flow/expected/test3.json +0 -204
  321. package/package/components/copilot/chat/__tests__/flow/expected/test4.json +0 -175
  322. package/package/components/copilot/chat/__tests__/flow/expected/test5_modify_simple.json +0 -68
  323. package/package/components/copilot/chat/__tests__/flow/expected/test6_modify_medium.json +0 -142
  324. package/package/components/copilot/chat/__tests__/flow/expected/test7_modify_complex.json +0 -136
  325. package/package/components/copilot/chat/__tests__/flow/flowChat.eval.test.js +0 -294
  326. package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.d.ts +0 -17
  327. package/package/components/copilot/chat/__tests__/flow/flowEvalComparison.js +0 -49
  328. package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.d.ts +0 -12
  329. package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.js +0 -79
  330. package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.d.ts +0 -50
  331. package/package/components/copilot/chat/__tests__/flow/flowEvalRunner.js +0 -102
  332. package/package/components/copilot/chat/__tests__/flow/initial/test5_initial.json +0 -53
  333. package/package/components/copilot/chat/__tests__/flow/initial/test6_initial.json +0 -68
  334. package/package/components/copilot/chat/__tests__/flow/initial/test7_initial.json +0 -120
  335. package/package/components/copilot/chat/__tests__/flow/variants/baseline.d.ts +0 -6
  336. package/package/components/copilot/chat/__tests__/flow/variants/baseline.js +0 -10
  337. package/package/components/copilot/chat/__tests__/flow/variants/index.d.ts +0 -3
  338. package/package/components/copilot/chat/__tests__/flow/variants/index.js +0 -3
  339. package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.d.ts +0 -15
  340. package/package/components/copilot/chat/__tests__/flow/variants/minimal-single-tool.js +0 -388
  341. package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.d.ts +0 -45
  342. package/package/components/copilot/chat/__tests__/shared/baseEvalRunner.js +0 -121
  343. package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.d.ts +0 -28
  344. package/package/components/copilot/chat/__tests__/shared/baseLLMEvaluator.js +0 -96
  345. package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.d.ts +0 -32
  346. package/package/components/copilot/chat/__tests__/shared/baseResultsWriter.js +0 -130
  347. package/package/components/copilot/chat/__tests__/shared/baseVariants.d.ts +0 -45
  348. package/package/components/copilot/chat/__tests__/shared/baseVariants.js +0 -57
  349. package/package/components/copilot/chat/__tests__/shared/index.d.ts +0 -10
  350. package/package/components/copilot/chat/__tests__/shared/index.js +0 -5
  351. package/package/components/copilot/chat/__tests__/shared/types.d.ts +0 -105
  352. package/package/components/copilot/chat/__tests__/shared/types.js +0 -9
  353. package/package/components/copilot/chat/flow/utils.d.ts +0 -14
  354. package/package/components/copilot/chat/flow/utils.js +0 -108
  355. package/package/components/flows/agentToolUtils.test.js +0 -55
  356. /package/package/components/copilot/chat/{__tests__/app/appChat.eval.test.d.ts → app/core.test.d.ts} +0 -0
  357. /package/package/components/copilot/chat/{__tests__/flow/flowChat.eval.test.d.ts → flow/helperUtils.test.d.ts} +0 -0
  358. /package/package/components/{flows/agentToolUtils.test.d.ts → copilot/chat/flow/utils.test.d.ts} +0 -0
@@ -1,10 +0,0 @@
1
- import React from 'react';
2
- import type { FileItem } from '../index';
3
- interface FileListProps {
4
- files: FileItem[];
5
- onDelete: (item: FileItem) => void;
6
- onRename: (item: FileItem, newName: string) => void;
7
- onFolderOpen: (folder: FileItem) => void;
8
- }
9
- export declare const FileList: React.FC<FileListProps>;
10
- export {};
@@ -1,46 +0,0 @@
1
- import React from 'react'
2
- import { FileItem as FileItemComponent } from './FileItem'
3
- import type { FileItem } from '../index'
4
-
5
- interface FileListProps {
6
- files: FileItem[]
7
- onDelete: (item: FileItem) => void
8
- onRename: (item: FileItem, newName: string) => void
9
- onFolderOpen: (folder: FileItem) => void
10
- }
11
-
12
- export const FileList: React.FC<FileListProps> = ({ files, onDelete, onRename, onFolderOpen }) => {
13
- if (files.length === 0) {
14
- return (
15
- <div className="text-center text-gray-500 py-8">This folder is empty</div>
16
- )
17
- }
18
-
19
- // Sort: folders first, then files
20
- const sortedFiles = [...files].sort((a, b) => {
21
- if (a.type === 'folder' && b.type !== 'folder') return -1
22
- if (a.type !== 'folder' && b.type === 'folder') return 1
23
- return a.name.localeCompare(b.name)
24
- })
25
-
26
- return (
27
- <div className="bg-white rounded-lg border">
28
- <div className="grid grid-cols-12 gap-4 px-4 py-2 border-b bg-gray-50 font-medium text-sm text-gray-600">
29
- <div className="col-span-6">Name</div>
30
- <div className="col-span-2">Type</div>
31
- <div className="col-span-2">Modified</div>
32
- <div className="col-span-2">Actions</div>
33
- </div>
34
-
35
- {sortedFiles.map((file) => (
36
- <FileItemComponent
37
- key={file.id}
38
- item={file}
39
- onDelete={onDelete}
40
- onRename={onRename}
41
- onFolderOpen={onFolderOpen}
42
- />
43
- ))}
44
- </div>
45
- )
46
- }
@@ -1,10 +0,0 @@
1
- import React from 'react';
2
- import type { Folder } from '../index';
3
- interface FolderTreeProps {
4
- folders: Folder[];
5
- currentFolderId: string | null;
6
- onFolderSelect: (folderId: string | null, folderName: string) => void;
7
- depth?: number;
8
- }
9
- export declare const FolderTree: React.FC<FolderTreeProps>;
10
- export {};
@@ -1,56 +0,0 @@
1
- import React from 'react'
2
- import type { Folder } from '../index'
3
-
4
- interface FolderTreeProps {
5
- folders: Folder[]
6
- currentFolderId: string | null
7
- onFolderSelect: (folderId: string | null, folderName: string) => void
8
- depth?: number
9
- }
10
-
11
- export const FolderTree: React.FC<FolderTreeProps> = ({
12
- folders,
13
- currentFolderId,
14
- onFolderSelect,
15
- depth = 0
16
- }) => {
17
- return (
18
- <div>
19
- {depth === 0 && (
20
- <div
21
- className={`px-4 py-2 cursor-pointer hover:bg-gray-100 ${
22
- currentFolderId === null ? 'bg-blue-100 text-blue-700' : ''
23
- }`}
24
- onClick={() => onFolderSelect(null, 'Root')}
25
- >
26
- <span className="mr-2">📁</span>
27
- Root
28
- </div>
29
- )}
30
-
31
- {folders.map((folder) => (
32
- <div key={folder.id}>
33
- <div
34
- className={`px-4 py-2 cursor-pointer hover:bg-gray-100 ${
35
- currentFolderId === folder.id ? 'bg-blue-100 text-blue-700' : ''
36
- }`}
37
- style={{ paddingLeft: `${(depth + 1) * 16 + 16}px` }}
38
- onClick={() => onFolderSelect(folder.id, folder.name)}
39
- >
40
- <span className="mr-2">📁</span>
41
- {folder.name}
42
- </div>
43
-
44
- {folder.children && folder.children.length > 0 && (
45
- <FolderTree
46
- folders={folder.children}
47
- currentFolderId={currentFolderId}
48
- onFolderSelect={onFolderSelect}
49
- depth={depth + 1}
50
- />
51
- )}
52
- </div>
53
- ))}
54
- </div>
55
- )
56
- }
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- interface ToolbarProps {
3
- onCreateFolder: (name: string) => void;
4
- }
5
- export declare const Toolbar: React.FC<ToolbarProps>;
6
- export {};
@@ -1,59 +0,0 @@
1
- import React, { useState } from 'react'
2
-
3
- interface ToolbarProps {
4
- onCreateFolder: (name: string) => void
5
- }
6
-
7
- export const Toolbar: React.FC<ToolbarProps> = ({ onCreateFolder }) => {
8
- const [isCreating, setIsCreating] = useState(false)
9
- const [folderName, setFolderName] = useState('')
10
-
11
- const handleCreate = () => {
12
- if (folderName.trim()) {
13
- onCreateFolder(folderName.trim())
14
- setFolderName('')
15
- setIsCreating(false)
16
- }
17
- }
18
-
19
- return (
20
- <div className="px-4 py-3 bg-white border-b flex items-center gap-4">
21
- {isCreating ? (
22
- <div className="flex items-center gap-2">
23
- <input
24
- type="text"
25
- value={folderName}
26
- onChange={(e) => setFolderName(e.target.value)}
27
- onKeyDown={(e) => e.key === 'Enter' && handleCreate()}
28
- placeholder="Folder name"
29
- className="border rounded px-3 py-1"
30
- autoFocus
31
- />
32
- <button
33
- onClick={handleCreate}
34
- className="px-3 py-1 bg-blue-500 text-white rounded hover:bg-blue-600"
35
- >
36
- Create
37
- </button>
38
- <button
39
- onClick={() => {
40
- setIsCreating(false)
41
- setFolderName('')
42
- }}
43
- className="px-3 py-1 text-gray-600 hover:text-gray-800"
44
- >
45
- Cancel
46
- </button>
47
- </div>
48
- ) : (
49
- <button
50
- onClick={() => setIsCreating(true)}
51
- className="px-3 py-1 bg-blue-500 text-white rounded hover:bg-blue-600 flex items-center gap-2"
52
- >
53
- <span>+</span>
54
- New Folder
55
- </button>
56
- )}
57
- </div>
58
- )
59
- }
@@ -1,16 +0,0 @@
1
- export interface FileItem {
2
- id: string;
3
- name: string;
4
- type: 'file' | 'folder';
5
- size?: number;
6
- modifiedAt: string;
7
- parentId: string | null;
8
- }
9
- export interface Folder {
10
- id: string;
11
- name: string;
12
- parentId: string | null;
13
- children: Folder[];
14
- }
15
- declare const App: () => any;
16
- export default App;
@@ -1,119 +0,0 @@
1
- import React, { useState, useEffect } from 'react'
2
- import { backend } from 'wmill'
3
- import { FolderTree } from './components/FolderTree'
4
- import { FileList } from './components/FileList'
5
- import { Breadcrumb } from './components/Breadcrumb'
6
- import { Toolbar } from './components/Toolbar'
7
-
8
- export interface FileItem {
9
- id: string
10
- name: string
11
- type: 'file' | 'folder'
12
- size?: number
13
- modifiedAt: string
14
- parentId: string | null
15
- }
16
-
17
- export interface Folder {
18
- id: string
19
- name: string
20
- parentId: string | null
21
- children: Folder[]
22
- }
23
-
24
- const App = () => {
25
- const [folders, setFolders] = useState<Folder[]>([])
26
- const [files, setFiles] = useState<FileItem[]>([])
27
- const [currentFolderId, setCurrentFolderId] = useState<string | null>(null)
28
- const [path, setPath] = useState<{ id: string | null; name: string }[]>([
29
- { id: null, name: 'Root' }
30
- ])
31
- const [loading, setLoading] = useState(true)
32
-
33
- useEffect(() => {
34
- loadFolders()
35
- }, [])
36
-
37
- useEffect(() => {
38
- loadFiles(currentFolderId)
39
- }, [currentFolderId])
40
-
41
- const loadFolders = async () => {
42
- const data = await backend.listFolders()
43
- setFolders(data)
44
- }
45
-
46
- const loadFiles = async (folderId: string | null) => {
47
- setLoading(true)
48
- const data = await backend.listFiles({ folderId })
49
- setFiles(data)
50
- setLoading(false)
51
- }
52
-
53
- const handleFolderSelect = (folderId: string | null, folderName: string) => {
54
- setCurrentFolderId(folderId)
55
-
56
- if (folderId === null) {
57
- setPath([{ id: null, name: 'Root' }])
58
- } else {
59
- // Find if folder is already in path
60
- const existingIndex = path.findIndex((p) => p.id === folderId)
61
- if (existingIndex >= 0) {
62
- setPath(path.slice(0, existingIndex + 1))
63
- } else {
64
- setPath([...path, { id: folderId, name: folderName }])
65
- }
66
- }
67
- }
68
-
69
- const handleCreateFolder = async (name: string) => {
70
- await backend.createFolder({ name, parentId: currentFolderId })
71
- await loadFolders()
72
- await loadFiles(currentFolderId)
73
- }
74
-
75
- const handleDeleteItem = async (item: FileItem) => {
76
- await backend.deleteItem({ id: item.id, type: item.type })
77
- await loadFolders()
78
- await loadFiles(currentFolderId)
79
- }
80
-
81
- const handleRenameItem = async (item: FileItem, newName: string) => {
82
- await backend.renameItem({ id: item.id, type: item.type, newName })
83
- await loadFolders()
84
- await loadFiles(currentFolderId)
85
- }
86
-
87
- return (
88
- <div className="flex h-screen bg-gray-100">
89
- <div className="w-64 bg-white border-r overflow-auto">
90
- <div className="p-4 font-semibold border-b">Folders</div>
91
- <FolderTree
92
- folders={folders}
93
- currentFolderId={currentFolderId}
94
- onFolderSelect={handleFolderSelect}
95
- />
96
- </div>
97
-
98
- <div className="flex-1 flex flex-col">
99
- <Toolbar onCreateFolder={handleCreateFolder} />
100
- <Breadcrumb path={path} onNavigate={handleFolderSelect} />
101
-
102
- <div className="flex-1 p-4 overflow-auto">
103
- {loading ? (
104
- <div className="text-center text-gray-500 py-8">Loading...</div>
105
- ) : (
106
- <FileList
107
- files={files}
108
- onDelete={handleDeleteItem}
109
- onRename={handleRenameItem}
110
- onFolderOpen={(folder) => handleFolderSelect(folder.id, folder.name)}
111
- />
112
- )}
113
- </div>
114
- </div>
115
- </div>
116
- )
117
- }
118
-
119
- export default App
@@ -1,15 +0,0 @@
1
- interface Product {
2
- id: string;
3
- name: string;
4
- price: number;
5
- image: string;
6
- }
7
- interface CartItem {
8
- product: Product;
9
- quantity: number;
10
- }
11
- export declare function main({ cart, product }: {
12
- cart: CartItem[];
13
- product: Product;
14
- }): Promise<CartItem[]>;
15
- export {};
@@ -1,14 +0,0 @@
1
- export async function main({ cart, product }) {
2
- const existingIndex = cart.findIndex((item) => item.product.id === product.id);
3
- if (existingIndex >= 0) {
4
- // Increment quantity if already in cart
5
- const updatedCart = [...cart];
6
- updatedCart[existingIndex] = {
7
- ...updatedCart[existingIndex],
8
- quantity: updatedCart[existingIndex].quantity + 1
9
- };
10
- return updatedCart;
11
- }
12
- // Add new item to cart
13
- return [...cart, { product, quantity: 1 }];
14
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "Add to Cart",
3
- "language": "bun"
4
- }
@@ -1,14 +0,0 @@
1
- interface Product {
2
- id: string;
3
- name: string;
4
- price: number;
5
- image: string;
6
- }
7
- interface CartItem {
8
- product: Product;
9
- quantity: number;
10
- }
11
- export declare function main({ items }: {
12
- items: CartItem[];
13
- }): Promise<number>;
14
- export {};
@@ -1,5 +0,0 @@
1
- export async function main({ items }) {
2
- return items.reduce((total, item) => {
3
- return total + item.product.price * item.quantity;
4
- }, 0);
5
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "Calculate Total",
3
- "language": "bun"
4
- }
@@ -1,6 +0,0 @@
1
- export declare function main(): Promise<{
2
- id: string;
3
- name: string;
4
- price: number;
5
- image: string;
6
- }[]>;
@@ -1,41 +0,0 @@
1
- export async function main() {
2
- // Mock product catalog
3
- return [
4
- {
5
- id: '1',
6
- name: 'Wireless Headphones',
7
- price: 79.99,
8
- image: 'https://picsum.photos/seed/headphones/300/200'
9
- },
10
- {
11
- id: '2',
12
- name: 'Smart Watch',
13
- price: 199.99,
14
- image: 'https://picsum.photos/seed/watch/300/200'
15
- },
16
- {
17
- id: '3',
18
- name: 'Laptop Stand',
19
- price: 49.99,
20
- image: 'https://picsum.photos/seed/stand/300/200'
21
- },
22
- {
23
- id: '4',
24
- name: 'Mechanical Keyboard',
25
- price: 129.99,
26
- image: 'https://picsum.photos/seed/keyboard/300/200'
27
- },
28
- {
29
- id: '5',
30
- name: 'USB-C Hub',
31
- price: 39.99,
32
- image: 'https://picsum.photos/seed/hub/300/200'
33
- },
34
- {
35
- id: '6',
36
- name: 'Webcam HD',
37
- price: 89.99,
38
- image: 'https://picsum.photos/seed/webcam/300/200'
39
- }
40
- ];
41
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "Get Products",
3
- "language": "bun"
4
- }
@@ -1,15 +0,0 @@
1
- interface Product {
2
- id: string;
3
- name: string;
4
- price: number;
5
- image: string;
6
- }
7
- interface CartItem {
8
- product: Product;
9
- quantity: number;
10
- }
11
- export declare function main({ cart, productId }: {
12
- cart: CartItem[];
13
- productId: string;
14
- }): Promise<CartItem[]>;
15
- export {};
@@ -1,3 +0,0 @@
1
- export async function main({ cart, productId }) {
2
- return cart.filter((item) => item.product.id !== productId);
3
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "Remove from Cart",
3
- "language": "bun"
4
- }
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- import type { CartItem } from '../index';
3
- interface CartProps {
4
- items: CartItem[];
5
- total: number;
6
- onRemoveItem: (productId: string) => void;
7
- }
8
- export declare const Cart: React.FC<CartProps>;
9
- export {};
@@ -1,51 +0,0 @@
1
- import React from 'react'
2
- import type { CartItem } from '../index'
3
-
4
- interface CartProps {
5
- items: CartItem[]
6
- total: number
7
- onRemoveItem: (productId: string) => void
8
- }
9
-
10
- export const Cart: React.FC<CartProps> = ({ items, total, onRemoveItem }) => {
11
- return (
12
- <div className="flex flex-col h-full">
13
- <h2 className="text-xl font-bold mb-4">Cart</h2>
14
-
15
- {items.length === 0 ? (
16
- <p className="text-gray-500 text-center py-8">Your cart is empty</p>
17
- ) : (
18
- <>
19
- <div className="flex-1 overflow-auto">
20
- {items.map((item) => (
21
- <div
22
- key={item.product.id}
23
- className="flex items-center justify-between py-3 border-b"
24
- >
25
- <div className="flex-1">
26
- <p className="font-medium">{item.product.name}</p>
27
- <p className="text-sm text-gray-500">
28
- ${item.product.price.toFixed(2)} x {item.quantity}
29
- </p>
30
- </div>
31
- <button
32
- onClick={() => onRemoveItem(item.product.id)}
33
- className="text-red-500 hover:text-red-700 px-2"
34
- >
35
- Remove
36
- </button>
37
- </div>
38
- ))}
39
- </div>
40
-
41
- <div className="border-t pt-4 mt-4">
42
- <div className="flex justify-between text-lg font-bold">
43
- <span>Total:</span>
44
- <span>${total.toFixed(2)}</span>
45
- </div>
46
- </div>
47
- </>
48
- )}
49
- </div>
50
- )
51
- }
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- import type { Product } from '../index';
3
- interface ProductCardProps {
4
- product: Product;
5
- onAddToCart: (product: Product) => void;
6
- }
7
- export declare const ProductCard: React.FC<ProductCardProps>;
8
- export {};
@@ -1,27 +0,0 @@
1
- import React from 'react'
2
- import type { Product } from '../index'
3
-
4
- interface ProductCardProps {
5
- product: Product
6
- onAddToCart: (product: Product) => void
7
- }
8
-
9
- export const ProductCard: React.FC<ProductCardProps> = ({ product, onAddToCart }) => {
10
- return (
11
- <div className="border rounded-lg p-4 bg-white shadow-sm">
12
- <img
13
- src={product.image}
14
- alt={product.name}
15
- className="w-full h-48 object-cover rounded mb-4"
16
- />
17
- <h3 className="font-semibold text-lg">{product.name}</h3>
18
- <p className="text-gray-600 mb-4">${product.price.toFixed(2)}</p>
19
- <button
20
- onClick={() => onAddToCart(product)}
21
- className="w-full py-2 bg-blue-500 text-white rounded hover:bg-blue-600 transition"
22
- >
23
- Add to Cart
24
- </button>
25
- </div>
26
- )
27
- }
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- import type { Product } from '../index';
3
- interface ProductListProps {
4
- products: Product[];
5
- onAddToCart: (product: Product) => void;
6
- }
7
- export declare const ProductList: React.FC<ProductListProps>;
8
- export {};
@@ -1,18 +0,0 @@
1
- import React from 'react'
2
- import { ProductCard } from './ProductCard'
3
- import type { Product } from '../index'
4
-
5
- interface ProductListProps {
6
- products: Product[]
7
- onAddToCart: (product: Product) => void
8
- }
9
-
10
- export const ProductList: React.FC<ProductListProps> = ({ products, onAddToCart }) => {
11
- return (
12
- <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
13
- {products.map((product) => (
14
- <ProductCard key={product.id} product={product} onAddToCart={onAddToCart} />
15
- ))}
16
- </div>
17
- )
18
- }
@@ -1,12 +0,0 @@
1
- export interface Product {
2
- id: string;
3
- name: string;
4
- price: number;
5
- image: string;
6
- }
7
- export interface CartItem {
8
- product: Product;
9
- quantity: number;
10
- }
11
- declare const App: () => any;
12
- export default App;