windmill-components 1.389.3 → 1.394.4

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 (162) hide show
  1. package/package/assets/app.css +4 -3
  2. package/package/components/AppConnectInner.svelte +18 -10
  3. package/package/components/ArgInfo.svelte +1 -1
  4. package/package/components/ArgInput.svelte +22 -2
  5. package/package/components/AutheliaSetting.svelte +1 -0
  6. package/package/components/AuthentikSetting.svelte +1 -0
  7. package/package/components/BoundedInputNumber +0 -0
  8. package/package/components/CliHelpBox.svelte +2 -2
  9. package/package/components/DateInput.svelte +1 -0
  10. package/package/components/DisplayResult.svelte +39 -31
  11. package/package/components/Editor.svelte +0 -21
  12. package/package/components/ErrorOrRecoveryHandler.svelte +7 -1
  13. package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +1 -1
  14. package/package/components/FlowBuilder.svelte +2 -2
  15. package/package/components/FlowGraphViewerStep.svelte +22 -0
  16. package/package/components/FlowJobResult.svelte +1 -0
  17. package/package/components/FlowMetadata.svelte +3 -2
  18. package/package/components/FlowStatusViewer.svelte +2 -0
  19. package/package/components/FlowStatusViewer.svelte.d.ts +2 -0
  20. package/package/components/FlowStatusViewerInner.svelte +10 -5
  21. package/package/components/FlowStatusViewerInner.svelte.d.ts +1 -0
  22. package/package/components/FolderEditor.svelte +1 -1
  23. package/package/components/IdEditorInput.svelte +82 -0
  24. package/package/components/IdEditorInput.svelte.d.ts +26 -0
  25. package/package/components/InputTransformForm.svelte +10 -10
  26. package/package/components/InputTransformForm.svelte.d.ts +4 -1
  27. package/package/components/InputTransformSchemaForm.svelte.d.ts +3 -1
  28. package/package/components/InstanceSettings.svelte +73 -12
  29. package/package/components/ItemPicker.svelte +1 -0
  30. package/package/components/KanidmSetting.svelte +1 -0
  31. package/package/components/KeycloakSetting.svelte +1 -0
  32. package/package/components/LightweightArgInput.svelte +2 -0
  33. package/package/components/LogViewer.svelte +206 -0
  34. package/package/components/ModulePreview.svelte.d.ts +3 -1
  35. package/package/components/ModulePreviewForm.svelte +2 -2
  36. package/package/components/ModulePreviewForm.svelte.d.ts +4 -1
  37. package/package/components/OAuthSetting.svelte +11 -10
  38. package/package/components/ObjectStoreConfigSettings.svelte +6 -6
  39. package/package/components/OktaSetting.svelte +1 -0
  40. package/package/components/Password.svelte +30 -35
  41. package/package/components/RunChart.svelte +16 -0
  42. package/package/components/RunChart.svelte.d.ts +2 -0
  43. package/package/components/SavedInputs.svelte +4 -4
  44. package/package/components/ScheduleEditorInner.svelte +145 -2
  45. package/package/components/SchemaForm.svelte +1 -2
  46. package/package/components/ScriptBuilder.svelte +1 -0
  47. package/package/components/TestConnection.svelte +24 -6
  48. package/package/components/TestJobLoader.svelte +2 -0
  49. package/package/components/ZitadelSetting.svelte +1 -0
  50. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +0 -1
  51. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +1 -2
  52. package/package/components/apps/components/display/table/AppAggridInfiniteTableEe.svelte +0 -2
  53. package/package/components/apps/components/display/table/AppAggridInfiniteTableEe.svelte.d.ts +1 -2
  54. package/package/components/apps/components/display/table/AppAggridTable.svelte +6 -2
  55. package/package/components/apps/components/inputs/AppSelect.svelte +19 -18
  56. package/package/components/apps/editor/AppEditor.svelte +1 -1
  57. package/package/components/apps/editor/AppPreview.svelte +3 -6
  58. package/package/components/apps/editor/AppReportsDrawer.svelte +17 -5
  59. package/package/components/apps/editor/DeploymentHistory.svelte +1 -0
  60. package/package/components/apps/editor/component/Component.svelte +0 -2
  61. package/package/components/apps/editor/componentsPanel/themeUtils.js +18 -7
  62. package/package/components/apps/editor/contextPanel/SubGridOutput.svelte +1 -0
  63. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +13 -67
  64. package/package/components/apps/editor/contextPanel/components/IdEditor.svelte.d.ts +1 -2
  65. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +0 -1
  66. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +0 -1
  67. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte.d.ts +0 -1
  68. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +1 -1
  69. package/package/components/apps/editor/settingsPanel/decisionTree/InsertDecisionTreeNode.svelte +2 -2
  70. package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +1 -0
  71. package/package/components/apps/svelte-select/lib/Select.svelte +1 -0
  72. package/package/components/build_workers.js +23 -18
  73. package/package/components/common/button/Button.svelte +3 -4
  74. package/package/components/common/button/model.d.ts +1 -1
  75. package/package/components/common/button/model.js +6 -0
  76. package/package/components/common/clearableInput/ClearableInput.svelte +1 -0
  77. package/package/components/common/menu/MenuItem.svelte +1 -0
  78. package/package/components/common/modal/AlwaysMountedModal.svelte +1 -0
  79. package/package/components/common/stepper/Stepper.svelte +1 -0
  80. package/package/components/copilot/StepInputsGen.svelte +2 -2
  81. package/package/components/copilot/StepInputsGen.svelte.d.ts +3 -1
  82. package/package/components/copilot/lib.js +2 -2
  83. package/package/components/copilot/prompts/edit.yaml +3 -0
  84. package/package/components/copilot/prompts/editPrompt.js +3 -3
  85. package/package/components/copilot/prompts/fix.yaml +3 -0
  86. package/package/components/copilot/prompts/fixPrompt.js +3 -3
  87. package/package/components/details/ClipboardPanel.svelte +1 -0
  88. package/package/components/flows/content/DynamicInputHelpBox.svelte +4 -1
  89. package/package/components/flows/content/FlowConstants.svelte +3 -3
  90. package/package/components/flows/content/FlowEditorPanel.svelte +1 -1
  91. package/package/components/flows/content/FlowModuleComponent.svelte +2 -2
  92. package/package/components/flows/content/FlowModuleHeader.svelte +5 -45
  93. package/package/components/flows/content/FlowModuleWorkerTagSelect.svelte +47 -0
  94. package/package/components/flows/content/FlowModuleWorkerTagSelect.svelte.d.ts +16 -0
  95. package/package/components/flows/content/FlowSettings.svelte +1 -0
  96. package/package/components/flows/flowModuleNextId.js +1 -1
  97. package/package/components/flows/flowState.d.ts +1 -1
  98. package/package/components/flows/flowStateUtils.d.ts +1 -1
  99. package/package/components/flows/flowStateUtils.js +1 -1
  100. package/package/components/flows/flowStore.d.ts +1 -0
  101. package/package/components/flows/flowStore.js +5 -0
  102. package/package/components/flows/map/FlowJobsMenu.svelte +0 -1
  103. package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +0 -1
  104. package/package/components/flows/map/FlowModuleSchemaItem.svelte +103 -19
  105. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  106. package/package/components/flows/map/FlowModuleSchemaMap.svelte +31 -1
  107. package/package/components/flows/map/InsertModuleButton.svelte +5 -5
  108. package/package/components/flows/map/InsertTriggerButton.svelte +2 -2
  109. package/package/components/flows/map/MapItem.svelte +4 -0
  110. package/package/components/flows/map/MapItem.svelte.d.ts +1 -0
  111. package/package/components/flows/map/VirtualItem.svelte +15 -7
  112. package/package/components/flows/map/VirtualItem.svelte.d.ts +2 -1
  113. package/package/components/flows/previousResults.js +1 -1
  114. package/package/components/flows/utils.d.ts +3 -3
  115. package/package/components/flows/utils.js +2 -2
  116. package/package/components/graph/FlowGraphV2.svelte +4 -0
  117. package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
  118. package/package/components/graph/graphBuilder.d.ts +1 -0
  119. package/package/components/graph/graphBuilder.js +2 -4
  120. package/package/components/graph/renderers/edges/BaseEdge.svelte +2 -2
  121. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -1
  122. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +3 -3
  123. package/package/components/graph/renderers/nodes/BranchOneStart.svelte.d.ts +1 -0
  124. package/package/components/graph/renderers/nodes/InputNode.svelte +2 -2
  125. package/package/components/graph/renderers/nodes/ModuleNode.svelte +6 -2
  126. package/package/components/graph/util.d.ts +1 -1
  127. package/package/components/graph/util.js +7 -2
  128. package/package/components/icons/AzureIcon.svelte +1 -1
  129. package/package/components/icons/FunkwhaleIcon.svelte +1 -19
  130. package/package/components/icons/JumpCloudIcon.svelte +12 -0
  131. package/package/components/icons/JumpCloudIcon.svelte.d.ts +17 -0
  132. package/package/components/icons/KeycloakIcon.svelte +20 -0
  133. package/package/components/icons/KeycloakIcon.svelte.d.ts +17 -0
  134. package/package/components/icons/MailchimpIcon.svelte +1 -1
  135. package/package/components/icons/ZitadelIcon.svelte +76 -0
  136. package/package/components/icons/ZitadelIcon.svelte.d.ts +17 -0
  137. package/package/components/icons/index.d.ts +7 -1
  138. package/package/components/icons/index.js +8 -2
  139. package/package/components/instanceSettings.d.ts +1 -1
  140. package/package/components/instanceSettings.js +24 -15
  141. package/package/components/runs/JobLoader.svelte +17 -6
  142. package/package/components/runs/JobLoader.svelte.d.ts +2 -0
  143. package/package/components/runs/RunRow.svelte +7 -7
  144. package/package/components/runs/RunsFilter.svelte +8 -1
  145. package/package/components/runs/RunsTable.svelte +30 -8
  146. package/package/components/runs/RunsTable.svelte.d.ts +2 -0
  147. package/package/components/schema/PropertyEditor.svelte +0 -5
  148. package/package/components/settings/WorkspaceUserSettings.svelte +1 -1
  149. package/package/components/sidebar/MenuLink.svelte +2 -1
  150. package/package/components/sidebar/WorkspaceMenu.svelte +4 -1
  151. package/package/components/sidebar/changelogs.js +30 -0
  152. package/package/components/tutorials/FlowBuilderTutorialsForLoop.svelte +2 -2
  153. package/package/gen/core/OpenAPI.js +1 -1
  154. package/package/gen/schemas.gen.d.ts +21 -0
  155. package/package/gen/schemas.gen.js +21 -0
  156. package/package/gen/services.gen.d.ts +11 -12
  157. package/package/gen/services.gen.js +19 -24
  158. package/package/gen/types.gen.d.ts +62 -37
  159. package/package/hub.d.ts +1 -0
  160. package/package/hubPaths.json +11 -8
  161. package/package.json +4 -4
  162. package/package/windmill_fetch.d.ts.txt +0 -16966
@@ -5,7 +5,7 @@ export const EDIT_PROMPT = {
5
5
  "prompt": "Here's my python3 code: \n```python\n{code}\n```\n<contextual_information>\nYou have to write a function in python called \"main\". Specify the parameter types. Do not call the main function. You should generally return the result.\nThe \"main\" function cannot be async. If you need to use async code, you can use the asyncio library.\nYou can take as parameters resources which are dictionaries containing credentials or configuration information. For Windmill to correctly detect the resources to be passed, the resource type name has to be exactly as specified in the following list:\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nYou need to define the type of the resources that are needed before the main function, but only include them if they are actually needed to achieve the function purpose.\nThe resource type name has to be exactly as specified (has to be IN LOEWRCASE). If the type name conflicts with any imported methods, you have to rename the imported method with the conflicting name.\n<contextual_information>\nMy instructions: {description}"
6
6
  },
7
7
  "deno": {
8
- "prompt": "Here's my TypeScript code in a deno running environment:\n```typescript\n{code}\n```\n<contextual_information>\nWe have to export a \"main\" function like this: \"export async function main(...)\" and specify the parameter types but do not call it. You should generally return the result.\nIf needed, the standard fetch method is available globally, do not import it.\nYou can take as parameters resources which are dictionaries containing credentials or configuration information. Name the resource parameters like this: \"{resource_type}Resource\". \nThe resource type name has to be exactly as specified.\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nOnly define the type for resources that are actually needed to achieve the function purpose. If the type name conflicts with the imported object, rename the imported object NOT THE TYPE.\n</contextual_information>\nMy instructions: {description}"
8
+ "prompt": "Here's my TypeScript code in a deno running environment:\n```typescript\n{code}\n```\n<contextual_information>\nWe have to export a \"main\" function like this: \"export async function main(...)\" and specify the parameter types but do not call it. You should generally return the result.\nIf needed, the standard fetch method is available globally, do not import it.\nYou can take as parameters resources which are dictionaries containing credentials or configuration information. Name the resource parameters like this: \"{resource_type}Resource\". \nThe resource type name has to be exactly as specified.\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nOnly define the type for resources that are actually needed to achieve the function purpose. If the type name conflicts with the imported object, rename the imported object NOT THE TYPE.\nNaming conventions are guidelines, but follow the user's naming choices in the existing code.\n</contextual_information>\nMy instructions: {description}"
9
9
  },
10
10
  "go": {
11
11
  "prompt": "Here's my go code: \n```go\n{code}\n```\n<contextual_information>\nWe have to export a \"main\" function. Import the packages you need. The return type of the function has to be ({return_type}, error). The file package has to be \"inner\"\n</contextual_information>\nMy instructions: {description}"
@@ -35,10 +35,10 @@ export const EDIT_PROMPT = {
35
35
  "prompt": "Here's my powershell code: \n```powershell\n{code}\n```\n<contextual_information>\nArguments can be obtained by calling the param function on the first line like that: `param($ParamName1, $ParamName2 = \"default value\", [{type}]$ParamName3, ...)`\n</contextual_information>\nMy instructions: {description}"
36
36
  },
37
37
  "nativets": {
38
- "prompt": "Here's my TypeScript code: \n```typescript\n{code}\n```\n<contextual_information>\nWe have to export a \"main\" function like this: \"export async function main(...)\" and specify the parameter types but do not call it. You should generally return the result.\nYou can take as parameters resources which are dictionaries containing credentials or configuration information. Name the resource parameters like this: \"{resource_type}Resource\".\nThe following resource types are available:\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nOnly define the type for resources that are actually needed to achieve the function purpose. The resource type name has to be exactly as specified. If the type name conflicts with the imported object, rename the imported object NOT THE TYPE.\n</contextual_information>\nMy instructions: {description}"
38
+ "prompt": "Here's my TypeScript code: \n```typescript\n{code}\n```\n<contextual_information>\nWe have to export a \"main\" function like this: \"export async function main(...)\" and specify the parameter types but do not call it. You should generally return the result.\nYou can take as parameters resources which are dictionaries containing credentials or configuration information. Name the resource parameters like this: \"{resource_type}Resource\".\nThe following resource types are available:\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nOnly define the type for resources that are actually needed to achieve the function purpose. The resource type name has to be exactly as specified. If the type name conflicts with the imported object, rename the imported object NOT THE TYPE.\nNaming conventions are guidelines, but follow the user's naming choices in the existing code.\n</contextual_information>\nMy instructions: {description}"
39
39
  },
40
40
  "bun": {
41
- "prompt": "Here's my TypeScript code: \n```typescript\n{code}\n```\n<contextual_information>\nWe have to export a \"main\" function like this: \"export async function main(...)\" and specify the parameter types but do not call it. You should generally return the result.\nIf needed, the standard fetch method is available globally, do not import it.\nYou can take as parameters resources which are dictionaries containing credentials or configuration information. Name the resource parameters like this: \"{resource_type}Resource\". \nThe following resource types are available:\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nOnly define the type for resources that are actually needed to achieve the function purpose. The resource type name has to be exactly as specified. If the type name conflicts with the imported object, rename the imported object NOT THE TYPE.\n</contextual_information>\nMy instructions: {description}"
41
+ "prompt": "Here's my TypeScript code: \n```typescript\n{code}\n```\n<contextual_information>\nWe have to export a \"main\" function like this: \"export async function main(...)\" and specify the parameter types but do not call it. You should generally return the result.\nIf needed, the standard fetch method is available globally, do not import it.\nYou can take as parameters resources which are dictionaries containing credentials or configuration information. Name the resource parameters like this: \"{resource_type}Resource\". \nThe following resource types are available:\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nOnly define the type for resources that are actually needed to achieve the function purpose. The resource type name has to be exactly as specified. If the type name conflicts with the imported object, rename the imported object NOT THE TYPE.\nNaming conventions are guidelines, but follow the user's naming choices in the existing code.\n</contextual_information>\nMy instructions: {description}"
42
42
  },
43
43
  "php": {
44
44
  "prompt": "Here's my php code: \n```php\n{code}\n```\n<contextual_information>\nYou have to write a function in php called \"main\". Specify the parameter types. Do not call the main function. You should generally return the result. The script must start with `<?php`.\nYou can take as parameters resources which are classes containing credentials or configuration information. For Windmill to correctly detect the resources to be passed, the resource type name has to be exactly as specified in the following list:\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nYou need to define the type of the resources that are needed before the main function, but only include them if they are actually needed to achieve the function purpose.\nBefore defining each type, check if the class already exists using class_exists.\nThe resource type name has to be exactly as specified.\nIf you need to import libraries, you need to specify them as comments in the following manner before the main function:\n```\n// require:\n// mylibrary/mylibrary\n// myotherlibrary/myotherlibrary@optionalversion\n```\nNo need to require autoload, it is already done.\n<contextual_information>\nMy instructions: {description}"
@@ -45,6 +45,7 @@ prompts:
45
45
  {resourceTypes}
46
46
  </resourceTypes>
47
47
  Only define the type for resources that are actually needed to achieve the function purpose. The resource type name has to be exactly as specified. If the type name conflicts with the imported object, rename the imported object NOT THE TYPE.
48
+ Naming conventions are guidelines, but follow the user's naming choices in the existing code.
48
49
  </contextual_information>
49
50
  I get the following error: {error}
50
51
  Fix my code.
@@ -161,6 +162,7 @@ prompts:
161
162
  {resourceTypes}
162
163
  </resourceTypes>
163
164
  Only define the type for resources that are actually needed to achieve the function purpose. The resource type name has to be exactly as specified. If the type name conflicts with the imported object, rename the imported object NOT THE TYPE.
165
+ Naming conventions are guidelines, but follow the user's naming choices in the existing code.
164
166
  </contextual_information>
165
167
  I get the following error: {error}
166
168
  Fix my code.
@@ -179,6 +181,7 @@ prompts:
179
181
  {resourceTypes}
180
182
  </resourceTypes>
181
183
  Only define the type for resources that are actually needed to achieve the function purpose. The resource type name has to be exactly as specified. If the type name conflicts with the imported object, rename the imported object NOT THE TYPE.
184
+ Naming conventions are guidelines, but follow the user's naming choices in the existing code.
182
185
  </contextual_information>
183
186
  I get the following error: {error}
184
187
  Fix my code.
@@ -5,7 +5,7 @@ export const FIX_PROMPT = {
5
5
  "prompt": "Here's my python3 code: \n```python\n{code}\n```\n<contextual_information>\nYou have to write a function in python called \"main\". Specify the parameter types. Do not call the main function. You should generally return the result.\nThe \"main\" function cannot be async. If you need to use async code, you can use the asyncio library.\nYou can take as parameters resources which are dictionaries containing credentials or configuration information. For Windmill to correctly detect the resources to be passed, the resource type name has to be exactly as specified in the following list:\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nYou need to define the type of the resources that are needed before the main function, but only include them if they are actually needed to achieve the function purpose.\nThe resource type name has to be exactly as specified (has to be IN LOEWRCASE). If the type name conflicts with any imported methods, you have to rename the imported method with the conflicting name.\n<contextual_information>\nI get the following error: {error}\nFix my code."
6
6
  },
7
7
  "deno": {
8
- "prompt": "Here's my TypeScript code in a deno running environment:\n```typescript\n{code}\n```\n<contextual_information>\nWe have to export a \"main\" function like this: \"export async function main(...)\" and specify the parameter types but do not call it. You should generally return the result.\nIf needed, the standard fetch method is available globally, do not import it.\nYou can take as parameters resources which are dictionaries containing credentials or configuration information. Name the resource parameters like this: \"{resource_type}Resource\".\nThe following resource types are available:\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nOnly define the type for resources that are actually needed to achieve the function purpose. The resource type name has to be exactly as specified. If the type name conflicts with the imported object, rename the imported object NOT THE TYPE.\n</contextual_information>\nI get the following error: {error}\nFix my code."
8
+ "prompt": "Here's my TypeScript code in a deno running environment:\n```typescript\n{code}\n```\n<contextual_information>\nWe have to export a \"main\" function like this: \"export async function main(...)\" and specify the parameter types but do not call it. You should generally return the result.\nIf needed, the standard fetch method is available globally, do not import it.\nYou can take as parameters resources which are dictionaries containing credentials or configuration information. Name the resource parameters like this: \"{resource_type}Resource\".\nThe following resource types are available:\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nOnly define the type for resources that are actually needed to achieve the function purpose. The resource type name has to be exactly as specified. If the type name conflicts with the imported object, rename the imported object NOT THE TYPE.\nNaming conventions are guidelines, but follow the user's naming choices in the existing code.\n</contextual_information>\nI get the following error: {error}\nFix my code."
9
9
  },
10
10
  "go": {
11
11
  "prompt": "Here's my go code: \n```go\n{code}\n```\n<contextual_information>\nWe have to export a \"main\" function. Import the packages you need. The return type of the function has to be ({return_type}, error). The file package has to be \"inner\"\n</contextual_information>\nI get the following error: {error}\nFix my code."
@@ -35,10 +35,10 @@ export const FIX_PROMPT = {
35
35
  "prompt": "Here's my powershell code: \n```powershell\n{code}\n```\n<contextual_information>\nArguments can be obtained by calling the param function on the first line like that: `param($ParamName1, $ParamName2 = \"default value\", [{type}]$ParamName3, ...)`\n</contextual_information>\nI get the following error: {error}\nFix my code."
36
36
  },
37
37
  "nativets": {
38
- "prompt": "Here's my TypeScript code: \n```typescript\n{code}\n```\n<contextual_information>\nWe have to export a \"main\" function like this: \"export async function main(...)\" and specify the parameter types but do not call it. You should generally return the result.\nYou can take as parameters resources which are dictionaries containing credentials or configuration information. Name the resource parameters like this: \"{resource_type}Resource\". \nThe following resource types are available:\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nOnly define the type for resources that are actually needed to achieve the function purpose. The resource type name has to be exactly as specified. If the type name conflicts with the imported object, rename the imported object NOT THE TYPE.\n</contextual_information>\nI get the following error: {error}\nFix my code."
38
+ "prompt": "Here's my TypeScript code: \n```typescript\n{code}\n```\n<contextual_information>\nWe have to export a \"main\" function like this: \"export async function main(...)\" and specify the parameter types but do not call it. You should generally return the result.\nYou can take as parameters resources which are dictionaries containing credentials or configuration information. Name the resource parameters like this: \"{resource_type}Resource\". \nThe following resource types are available:\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nOnly define the type for resources that are actually needed to achieve the function purpose. The resource type name has to be exactly as specified. If the type name conflicts with the imported object, rename the imported object NOT THE TYPE.\nNaming conventions are guidelines, but follow the user's naming choices in the existing code.\n</contextual_information>\nI get the following error: {error}\nFix my code."
39
39
  },
40
40
  "bun": {
41
- "prompt": "Here's my TypeScript code: \n```typescript\n{code}\n```\n<contextual_information>\nWe have to export a \"main\" function like this: \"export async function main(...)\" and specify the parameter types but do not call it. You should generally return the result.\nIf needed, the standard fetch method is available globally, do not import it.\nYou can take as parameters resources which are dictionaries containing credentials or configuration information. Name the resource parameters like this: \"{resource_type}Resource\".\nThe following resource types are available:\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nOnly define the type for resources that are actually needed to achieve the function purpose. The resource type name has to be exactly as specified. If the type name conflicts with the imported object, rename the imported object NOT THE TYPE.\n</contextual_information>\nI get the following error: {error}\nFix my code."
41
+ "prompt": "Here's my TypeScript code: \n```typescript\n{code}\n```\n<contextual_information>\nWe have to export a \"main\" function like this: \"export async function main(...)\" and specify the parameter types but do not call it. You should generally return the result.\nIf needed, the standard fetch method is available globally, do not import it.\nYou can take as parameters resources which are dictionaries containing credentials or configuration information. Name the resource parameters like this: \"{resource_type}Resource\".\nThe following resource types are available:\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nOnly define the type for resources that are actually needed to achieve the function purpose. The resource type name has to be exactly as specified. If the type name conflicts with the imported object, rename the imported object NOT THE TYPE.\nNaming conventions are guidelines, but follow the user's naming choices in the existing code.\n</contextual_information>\nI get the following error: {error}\nFix my code."
42
42
  },
43
43
  "php": {
44
44
  "prompt": "Here's my php code: \n```php\n{code}\n```\n<contextual_information>\nYou have to write a function in php called \"main\". Specify the parameter types. Do not call the main function. You should generally return the result. The script must start with `<?php`.\nYou can take as parameters resources which are classes containing credentials or configuration information. For Windmill to correctly detect the resources to be passed, the resource type name has to be exactly as specified in the following list:\n<resourceTypes>\n{resourceTypes}\n</resourceTypes>\nYou need to define the type of the resources that are needed before the main function, but only include them if they are actually needed to achieve the function purpose.\nBefore defining each type, check if the class already exists using class_exists.\nThe resource type name has to be exactly as specified.\nIf you need to import libraries, you need to specify them as comments in the following manner before the main function:\n```\n// require:\n// mylibrary/mylibrary\n// myotherlibrary/myotherlibrary@optionalversion\n```\nNo need to require autoload, it is already done.\n<contextual_information>\nI get the following error: {error}\nFix my code."
@@ -9,6 +9,7 @@ export let title = undefined;
9
9
  {/if}
10
10
 
11
11
  <!-- svelte-ignore a11y-click-events-have-key-events -->
12
+ <!-- svelte-ignore a11y-no-static-element-interactions -->
12
13
  <div
13
14
  class="px-2 py-1 border flex items-center cursor-pointer bg-surface-secondary text-primary justify-between rounded-md"
14
15
  on:click={(e) => {
@@ -26,7 +26,10 @@ $: opened = false;
26
26
  >
27
27
  Single JavaScript expression. The following functions and objects are available:
28
28
  <ul class="ml-4">
29
- <li><b>{'results.<id>'}</b>: the result of step at id 'id'</li>
29
+ <li
30
+ ><b>{'results.<id>'}</b>: the result of step at id 'id' (use <b>{'results?.<id>'}</b> if id may
31
+ not exist because branch was not chosen)</li
32
+ >
30
33
  <li><b>flow_input</b>: the object containing the flow input arguments</li>
31
34
  <li><b>params</b>: the object containing the current step static values</li>
32
35
  <li>
@@ -19,8 +19,8 @@ $: resources = Object.fromEntries(scriptModules
19
19
  let schema = $flowStateStore[m.id]?.schema;
20
20
  let val = undefined;
21
21
  const [k, inputTransform] = x;
22
- const v = schema.properties[k];
23
- if (v.format?.includes('resource') &&
22
+ const v = schema?.properties[k];
23
+ if (v?.format?.includes('resource') &&
24
24
  inputTransform.type === 'static' &&
25
25
  (inputTransform.value === '' ||
26
26
  inputTransform.value === undefined ||
@@ -41,7 +41,7 @@ $: steps = scriptModules
41
41
  Object.entries(v.input_transforms)
42
42
  .filter((x) => {
43
43
  const shouldDisplay = hideOptional
44
- ? $flowStateStore[m.id]?.schema.required?.includes(x[0])
44
+ ? $flowStateStore[m.id]?.schema?.required?.includes(x[0])
45
45
  : true;
46
46
  return x[1].type == 'static' && shouldDisplay;
47
47
  })
@@ -28,7 +28,7 @@ async function initWarnings() {
28
28
  $flowInputsStore = {};
29
29
  }
30
30
  $flowInputsStore[module?.id] = {
31
- flowStepWarnings: await initFlowStepWarnings(module.value, $flowStateStore?.[module?.id]?.schema ?? {}, dfs($flowStore.value.modules, (fm) => fm.id))
31
+ flowStepWarnings: await initFlowStepWarnings(module.value, $flowStateStore?.[module?.id]?.schema, dfs($flowStore.value.modules, (fm) => fm.id))
32
32
  };
33
33
  }
34
34
  }
@@ -150,7 +150,7 @@ function onSelectedIdChange() {
150
150
  }
151
151
  let debouncedWarning = debounce((argName) => {
152
152
  if ($flowInputsStore) {
153
- computeFlowStepWarning(argName, flowModule.value, $flowInputsStore[flowModule.id].flowStepWarnings ?? {}, $flowStateStore[$selectedId]?.schema ?? {}, dfs($flowStore?.value?.modules ?? [], (fm) => fm.id) ?? []).then((flowStepWarnings) => {
153
+ computeFlowStepWarning(argName, flowModule.value, $flowInputsStore[flowModule.id].flowStepWarnings ?? {}, $flowStateStore[$selectedId]?.schema, dfs($flowStore?.value?.modules ?? [], (fm) => fm.id) ?? []).then((flowStepWarnings) => {
154
154
  $flowInputsStore[flowModule.id].flowStepWarnings = flowStepWarnings;
155
155
  });
156
156
  }
@@ -204,7 +204,6 @@ function setFlowInput(argName) {
204
204
  flowModule,
205
205
  $selectedId,
206
206
  $flowStateStore[flowModule.id].schema,
207
- $flowStore,
208
207
  $pathStore
209
208
  )
210
209
  flowModule = module
@@ -450,6 +449,7 @@ function setFlowInput(argName) {
450
449
  using `$args[name_of_arg]`</Tooltip
451
450
  >
452
451
  </svelte:fragment>
452
+ <!-- svelte-ignore a11y-autofocus -->
453
453
  <input
454
454
  type="text"
455
455
  autofocus
@@ -1,21 +1,15 @@
1
1
  <script>import Button from '../../common/button/Button.svelte';
2
- import { WorkerService } from '../../../gen';
2
+ import {} from '../../../gen';
3
3
  import { createEventDispatcher, getContext } from 'svelte';
4
4
  import { Bed, Database, Gauge, GitFork, Pen, PhoneIncoming, Repeat, Save, Square, Voicemail } from 'lucide-svelte';
5
5
  import Popover from '../../Popover.svelte';
6
6
  import { sendUserToast } from '../../../utils';
7
- import { workerTags } from '../../../stores';
8
7
  import { getLatestHashForScript } from '../../../scripts';
8
+ import FlowModuleWorkerTagSelect from './FlowModuleWorkerTagSelect.svelte';
9
9
  export let module;
10
- const { scriptEditorDrawer, flowStore, selectedId } = getContext('FlowEditorContext');
10
+ const { scriptEditorDrawer } = getContext('FlowEditorContext');
11
11
  const dispatch = createEventDispatcher();
12
12
  let customUi = getContext('customUi');
13
- loadWorkerGroups();
14
- async function loadWorkerGroups() {
15
- if (!$workerTags) {
16
- $workerTags = await WorkerService.getCustomTags();
17
- }
18
- }
19
13
  $: moduleRetry = module.retry?.constant || module.retry?.exponential;
20
14
  </script>
21
15
 
@@ -114,6 +108,7 @@ $: moduleRetry = module.retry?.constant || module.retry?.exponential;
114
108
  Edit {#if module.value.hash != undefined} (locked hash){/if}
115
109
  </Button>
116
110
  {/if}
111
+ <FlowModuleWorkerTagSelect bind:tag={module.value.tag_override} />
117
112
  {#if customUi?.scriptFork != false}
118
113
  <Button
119
114
  size="xs"
@@ -128,42 +123,7 @@ $: moduleRetry = module.retry?.constant || module.retry?.exponential;
128
123
  {/if}
129
124
  <div class="px-0.5" />
130
125
  {#if module.value.type === 'rawscript'}
131
- {#if $workerTags}
132
- {#if $workerTags?.length > 0}
133
- <div class="w-40">
134
- {#if $flowStore.tag == undefined}
135
- <select
136
- placeholder="Tag"
137
- bind:value={module.value.tag}
138
- on:change={(e) => {
139
- if (module.value.type === 'rawscript') {
140
- if (module.value.tag == '') {
141
- module.value.tag = undefined
142
- }
143
- }
144
- }}
145
- >
146
- {#if module.value.tag}
147
- <option value="">reset to default</option>
148
- {:else}
149
- <option value="" disabled selected>Tag</option>
150
- {/if}
151
- {#each $workerTags ?? [] as tag (tag)}
152
- <option value={tag}>{tag}</option>
153
- {/each}
154
- </select>
155
- {:else}
156
- <button
157
- title="Worker Group is defined at the flow level"
158
- class="w-full text-left items-center font-normal p-1 border text-xs rounded"
159
- on:click={() => ($selectedId = 'settings-worker-group')}
160
- >
161
- Flow's WG: {$flowStore.tag}
162
- </button>
163
- {/if}
164
- </div>
165
- {/if}
166
- {/if}
126
+ <FlowModuleWorkerTagSelect bind:tag={module.value.tag} />
167
127
  <Button
168
128
  size="xs"
169
129
  color="light"
@@ -0,0 +1,47 @@
1
+ <script>import { getContext } from 'svelte';
2
+ import { workerTags } from '../../../stores';
3
+ import { WorkerService } from '../../../gen';
4
+ export let tag;
5
+ const { flowStore, selectedId } = getContext('FlowEditorContext');
6
+ loadWorkerGroups();
7
+ async function loadWorkerGroups() {
8
+ if (!$workerTags) {
9
+ $workerTags = await WorkerService.getCustomTags();
10
+ }
11
+ }
12
+ </script>
13
+
14
+ {#if $workerTags}
15
+ {#if $workerTags?.length > 0}
16
+ <div class="w-40">
17
+ {#if $flowStore.tag == undefined}
18
+ <select
19
+ placeholder="Tag"
20
+ bind:value={tag}
21
+ on:change={(e) => {
22
+ if (tag == '') {
23
+ tag = undefined
24
+ }
25
+ }}
26
+ >
27
+ {#if tag}
28
+ <option value="">reset to default</option>
29
+ {:else}
30
+ <option value="" disabled selected>Tag</option>
31
+ {/if}
32
+ {#each $workerTags ?? [] as tag (tag)}
33
+ <option value={tag}>{tag}</option>
34
+ {/each}
35
+ </select>
36
+ {:else}
37
+ <button
38
+ title="Worker Group is defined at the flow level"
39
+ class="w-full text-left items-center font-normal p-1 border text-xs rounded"
40
+ on:click={() => ($selectedId = 'settings-worker-group')}
41
+ >
42
+ Flow's WG: {$flowStore.tag}
43
+ </button>
44
+ {/if}
45
+ </div>
46
+ {/if}
47
+ {/if}
@@ -0,0 +1,16 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ tag: string | undefined;
5
+ };
6
+ events: {
7
+ [evt: string]: CustomEvent<any>;
8
+ };
9
+ slots: {};
10
+ };
11
+ export type FlowModuleWorkerTagSelectProps = typeof __propDef.props;
12
+ export type FlowModuleWorkerTagSelectEvents = typeof __propDef.events;
13
+ export type FlowModuleWorkerTagSelectSlots = typeof __propDef.slots;
14
+ export default class FlowModuleWorkerTagSelect extends SvelteComponent<FlowModuleWorkerTagSelectProps, FlowModuleWorkerTagSelectEvents, FlowModuleWorkerTagSelectSlots> {
15
+ }
16
+ export {};
@@ -37,6 +37,7 @@ let dirtyPath = false;
37
37
  <div class="h-full overflow-hidden">
38
38
  <FlowCard {noEditor} title="Settings">
39
39
  <div class="h-full flex-1">
40
+ <!-- svelte-ignore a11y-autofocus -->
40
41
  <Tabs bind:selected={$selectedId}>
41
42
  <Tab value="settings-metadata">Metadata</Tab>
42
43
  {#if !noEditor && customUi?.settingsTabs?.schedule != false}
@@ -4,7 +4,7 @@ import { charsToNumber, numberToChars } from './idUtils';
4
4
  export function nextId(flowState, fullFlow) {
5
5
  const allIds = dfs(fullFlow.value.modules, (fm) => fm.id);
6
6
  const max = allIds.concat(Object.keys(flowState)).reduce((acc, key) => {
7
- if (key === 'failure' || key.includes('branch') || key.includes('loop')) {
7
+ if (key.length >= 4) {
8
8
  return acc;
9
9
  }
10
10
  else {
@@ -3,7 +3,7 @@ import type { Schema } from '../../common';
3
3
  import type { Flow } from '../../gen';
4
4
  import type { Writable } from 'svelte/store';
5
5
  export type FlowModuleState = {
6
- schema: Schema;
6
+ schema?: Schema;
7
7
  previewResult?: any;
8
8
  previewArgs?: any;
9
9
  };
@@ -20,7 +20,7 @@ export declare function fork(flowModule: FlowModule): Promise<[FlowModule & {
20
20
  value: RawScript;
21
21
  }, FlowModuleState]>;
22
22
  export declare function emptyModule(flowState: FlowState, fullFlow: OpenFlow, flow?: boolean): FlowModule;
23
- export declare function createScriptFromInlineScript(flowModule: FlowModule, suffix: string, schema: Schema, flow: OpenFlow, flowPath: string): Promise<[FlowModule & {
23
+ export declare function createScriptFromInlineScript(flowModule: FlowModule, suffix: string, schema: Schema | undefined, flowPath: string): Promise<[FlowModule & {
24
24
  value: PathScript;
25
25
  }, FlowModuleState]>;
26
26
  export declare function deleteFlowStateById(id: string, flowStateStore: Writable<FlowState>): void;
@@ -142,7 +142,7 @@ export function emptyModule(flowState, fullFlow, flow) {
142
142
  value: { type: 'identity', flow }
143
143
  };
144
144
  }
145
- export async function createScriptFromInlineScript(flowModule, suffix, schema, flow, flowPath) {
145
+ export async function createScriptFromInlineScript(flowModule, suffix, schema, flowPath) {
146
146
  const user = get(userStore);
147
147
  if (flowModule.value.type != 'rawscript') {
148
148
  throw new Error("Can't create script from non-inline script");
@@ -6,3 +6,4 @@ export type FlowMode = 'push' | 'pull';
6
6
  export declare const importFlowStore: Writable<Flow | undefined>;
7
7
  export declare function initFlow(flow: Flow, flowStore: Writable<Flow>, flowStateStore: Writable<FlowState>): Promise<void>;
8
8
  export declare function copyFirstStepSchema(flowState: FlowState, flowStore: Writable<OpenFlow>): Promise<void>;
9
+ export declare function replaceId(expr: string, id: string, newId: string): string;
@@ -23,3 +23,8 @@ export async function copyFirstStepSchema(flowState, flowStore) {
23
23
  return flow;
24
24
  });
25
25
  }
26
+ export function replaceId(expr, id, newId) {
27
+ return expr
28
+ .replaceAll(`results.${id}`, `results.${newId}`)
29
+ .replaceAll(`results?.${id}`, `results?.${newId}`);
30
+ }
@@ -3,7 +3,6 @@ import { createEventDispatcher } from 'svelte';
3
3
  import { ListFilter } from 'lucide-svelte';
4
4
  import { MenuItem } from '@rgossiaux/svelte-headlessui';
5
5
  const dispatch = createEventDispatcher();
6
- export let open = undefined;
7
6
  export let index;
8
7
  export let flowJobs;
9
8
  export let flowJobsSuccess;
@@ -1,7 +1,6 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
- open?: boolean | undefined;
5
4
  index: number;
6
5
  flowJobs: string[] | undefined;
7
6
  flowJobsSuccess: (boolean | undefined)[] | undefined;
@@ -1,10 +1,17 @@
1
1
  <script>import Badge from '../../common/badge/Badge.svelte';
2
2
  import Popover from '../../Popover.svelte';
3
3
  import { classNames } from '../../../utils';
4
- import { AlertTriangle, Bed, Database, Gauge, Move, PhoneIncoming, Repeat, Square, Voicemail, X } from 'lucide-svelte';
4
+ import { AlertTriangle, Bed, Database, Gauge, Move, Pencil, PhoneIncoming, Repeat, Square, Voicemail, X } from 'lucide-svelte';
5
5
  import { createEventDispatcher, getContext } from 'svelte';
6
6
  import { fade } from 'svelte/transition';
7
+ import { get } from 'svelte/store';
7
8
  import { twMerge } from 'tailwind-merge';
9
+ import IdEditorInput from '../../IdEditorInput.svelte';
10
+ import { dfs } from '../dfs';
11
+ import { Drawer } from '../../common';
12
+ import DrawerContent from '../../common/drawer/DrawerContent.svelte';
13
+ import { getDependeeAndDependentComponents } from '../flowExplorer';
14
+ import { replaceId } from '../flowStore';
8
15
  export let selected = false;
9
16
  export let deletable = false;
10
17
  export let retry = false;
@@ -22,20 +29,84 @@ export let concurrency = false;
22
29
  export let retries = undefined;
23
30
  export let warningMessage = undefined;
24
31
  const { flowInputsStore } = getContext('FlowGraphContext');
32
+ const flowEditorContext = getContext('FlowEditorContext');
25
33
  const dispatch = createEventDispatcher();
26
34
  const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotContext') || {};
35
+ let editId = false;
36
+ let newId = id ?? '';
37
+ let hover = false;
27
38
  </script>
28
39
 
40
+ {#if deletable && id && editId}
41
+ {@const flowStore = flowEditorContext?.flowStore ? get(flowEditorContext?.flowStore) : undefined}
42
+ {@const getDeps = getDependeeAndDependentComponents(
43
+ id,
44
+ flowStore?.value.modules ?? [],
45
+ flowStore?.value.failure_module
46
+ )}
47
+ <Drawer bind:open={editId}>
48
+ <DrawerContent title="Edit Step Id {id}" on:close={() => (editId = false)}>
49
+ <div>
50
+ <IdEditorInput
51
+ buttonText="Edit Id "
52
+ btnClasses="!ml-1"
53
+ label=""
54
+ initialId={id}
55
+ acceptUnderScores
56
+ reservedIds={dfs(flowStore?.value.modules ?? [], (x) => x.id)}
57
+ bind:value={newId}
58
+ on:save={(e) => {
59
+ dispatch('changeId', { id, newId: e.detail, deps: getDeps?.dependents ?? {} })
60
+ editId = false
61
+ }}
62
+ on:close={() => {
63
+ editId = false
64
+ }}
65
+ />
66
+ <div class="mt-8">
67
+ <h3>Step Inputs Replacements</h3>
68
+ <div class="text-2xs text-tertiary pt-0.5">
69
+ Replace all occurrences of `results.<span class="font-bold">{id}</span>` with{' '}
70
+ results.<span class="font-bold">{newId}</span> in the step inputs of all steps that depend
71
+ on it.
72
+ </div>
73
+ <div class="pt-8 flex flex-col gap-y-4">
74
+ {#if Object.keys(getDeps?.dependents ?? {})?.length > 0}
75
+ {#each Object.entries(getDeps?.dependents ?? {}) as dependents}
76
+ <div>
77
+ <h4>{dependents[0]}</h4>
78
+ <div>
79
+ {#each dependents?.[1] as d}
80
+ <div>
81
+ <span class="font-mono text-sm">{d}</span> &rightarrow;
82
+ <span class="font-mono text-sm">{replaceId(d, id, newId)}</span>
83
+ </div>
84
+ {/each}
85
+ </div>
86
+ </div>
87
+ {/each}
88
+ {:else}
89
+ <div class="text-2xs text-tertiary"> No dependents </div>
90
+ {/if}
91
+ </div>
92
+ </div>
93
+ </div>
94
+ </DrawerContent>
95
+ </Drawer>
96
+ {/if}
97
+
29
98
  <!-- svelte-ignore a11y-click-events-have-key-events -->
30
99
  <!-- svelte-ignore a11y-no-static-element-interactions -->
31
100
  <div
32
101
  class={classNames(
33
102
  'w-full module flex rounded-sm cursor-pointer',
34
- selected ? 'outline outline-offset-1 outline-2 outline-gray-600 dark:outline-gray-400' : '',
103
+ selected ? 'outline outline-offset-0 outline-2 outline-slate-500 dark:outline-gray-400' : '',
35
104
  'flex relative',
36
105
  $copilotCurrentStepStore === id ? 'z-[901]' : ''
37
106
  )}
38
107
  style="width: 275px; height: 34px; background-color: {bgColor};"
108
+ on:mouseenter={() => (hover = true)}
109
+ on:mouseleave={() => (hover = false)}
39
110
  on:click
40
111
  >
41
112
  <div class="absolute text-sm right-12 -bottom-3 flex flex-row gap-1 z-10">
@@ -46,7 +117,7 @@ const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotCon
46
117
  class="center-center rounded border bg-surface border-gray-400 text-secondary px-1 py-0.5"
47
118
  >
48
119
  {#if retries}<span class="text-red-400 mr-2">{retries}</span>{/if}
49
- <Repeat size={14} />
120
+ <Repeat size={12} />
50
121
  </div>
51
122
  <svelte:fragment slot="text">Retries</svelte:fragment>
52
123
  </Popover>
@@ -58,7 +129,7 @@ const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotCon
58
129
  transition:fade|local={{ duration: 200 }}
59
130
  class="center-center rounded border bg-surface border-gray-400 text-secondary px-1 py-0.5"
60
131
  >
61
- <Gauge size={14} />
132
+ <Gauge size={12} />
62
133
  </div>
63
134
  <svelte:fragment slot="text">Concurrency Limits</svelte:fragment>
64
135
  </Popover>
@@ -69,7 +140,7 @@ const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotCon
69
140
  transition:fade|local={{ duration: 200 }}
70
141
  class="center-center rounded border bg-surface border-gray-400 text-secondary px-1 py-0.5"
71
142
  >
72
- <Database size={14} />
143
+ <Database size={12} />
73
144
  </div>
74
145
  <svelte:fragment slot="text">Cached</svelte:fragment>
75
146
  </Popover>
@@ -80,7 +151,7 @@ const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotCon
80
151
  transition:fade|local={{ duration: 200 }}
81
152
  class="center-center bg-surface rounded border border-gray-400 text-secondary px-1 py-0.5"
82
153
  >
83
- <Square size={14} />
154
+ <Square size={12} />
84
155
  </div>
85
156
  <svelte:fragment slot="text">Early stop/break</svelte:fragment>
86
157
  </Popover>
@@ -91,7 +162,7 @@ const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotCon
91
162
  transition:fade|local={{ duration: 200 }}
92
163
  class="center-center bg-surface rounded border border-gray-400 text-secondary px-1 py-0.5"
93
164
  >
94
- <PhoneIncoming size={14} />
165
+ <PhoneIncoming size={12} />
95
166
  </div>
96
167
  <svelte:fragment slot="text">Suspend</svelte:fragment>
97
168
  </Popover>
@@ -102,7 +173,7 @@ const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotCon
102
173
  transition:fade|local={{ duration: 200 }}
103
174
  class="center-center bg-surface rounded border border-gray-400 text-secondary px-1 py-0.5"
104
175
  >
105
- <Bed size={14} />
176
+ <Bed size={12} />
106
177
  </div>
107
178
  <svelte:fragment slot="text">Sleep</svelte:fragment>
108
179
  </Popover>
@@ -113,7 +184,7 @@ const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotCon
113
184
  transition:fade|local={{ duration: 200 }}
114
185
  class="center-center bg-surface rounded border border-gray-400 text-secondary px-1 py-0.5"
115
186
  >
116
- <Voicemail size={14} />
187
+ <Voicemail size={12} />
117
188
  </div>
118
189
  <svelte:fragment slot="text">Mocked</svelte:fragment>
119
190
  </Popover>
@@ -122,36 +193,49 @@ const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotCon
122
193
 
123
194
  <div
124
195
  class="flex gap-1 justify-between items-center w-full overflow-hidden rounded-sm
125
- border border-gray-400 dark:border-gray-600 p-2 text-2xs module text-primary"
196
+ p-2 text-2xs module text-primary"
126
197
  >
127
198
  {#if $$slots.icon}
128
199
  <slot name="icon" />
129
200
  {/if}
130
201
  <div class="truncate" class:font-bold={bold}>{label}</div>
131
- <div class="flex items-center space-x-2">
202
+ <div class="flex items-center relative">
132
203
  {#if id}
133
204
  <Badge color="indigo">{id}</Badge>
205
+
206
+ {#if deletable}
207
+ <button
208
+ class="absolute -left-[20px] z-10 h-[20px] rounded-l rounded-t rounded-s w-[20px] trash center-center text-secondary bg-surface duration-150 hover:bg-blue-400 {editId
209
+ ? '!bg-blue-400'
210
+ : ''} hover:text-white
211
+ hover:border-blue-700 hover:!visible {hover ? '' : '!hidden'}"
212
+ on:click|preventDefault|stopPropagation={(event) => (editId = !editId)}
213
+ title="Edit Id"><Pencil size={14} /></button
214
+ >
215
+ {/if}
134
216
  {/if}
135
217
  </div>
136
218
  </div>
137
219
  {#if deletable}
138
220
  <button
139
- class="absolute -top-[10px] -right-[10px] rounded-full h-[20px] w-[20px] trash center-center text-primary
140
- border-[1.5px] border-gray-700 bg-surface duration-150 hover:bg-red-400 hover:text-white
141
- hover:border-red-700 {selected ? '' : '!hidden'}"
221
+ class="absolute -top-[10px] -right-[10px] rounded-full h-[20px] w-[20px] trash center-center text-secondary
222
+ outline-[1px] outline dark:outline-gray-500 outline-gray-300 bg-surface duration-150 hover:bg-red-400 hover:text-white
223
+ {hover || selected ? '' : '!hidden'}"
224
+ title="Delete"
142
225
  on:click|preventDefault|stopPropagation={(event) =>
143
226
  dispatch('delete', { event, id, type: modType })}
144
227
  >
145
- <X class="mx-[3px]" size={14} strokeWidth={2} />
228
+ <X class="mx-[3px]" size={12} strokeWidth={2} />
146
229
  </button>
147
230
 
148
231
  <button
149
- class="absolute -top-[10px] right-[35px] rounded-full h-[20px] w-[20px] trash center-center text-primary
150
- border-[1.5px] border-gray-700 bg-surface duration-150 hover:bg-blue-400 hover:text-white
151
- hover:border-blue-700 {selected ? '' : '!hidden'}"
232
+ class="absolute -top-[10px] right-[60px] rounded-full h-[20px] w-[20px] trash center-center text-secondary
233
+ outline-[1px] outline dark:outline-gray-500 outline-gray-300 bg-surface duration-150 hover:bg-blue-400 hover:text-white
234
+ {hover ? '' : '!hidden'}"
152
235
  on:click|preventDefault|stopPropagation={(event) => dispatch('move')}
236
+ title="Move"
153
237
  >
154
- <Move class="mx-[3px]" size={14} strokeWidth={2} />
238
+ <Move class="mx-[3px]" size={12} strokeWidth={2} />
155
239
  </button>
156
240
 
157
241
  {#if (id && Object.values($flowInputsStore?.[id]?.flowStepWarnings || {}).length > 0) || Boolean(warningMessage)}
@@ -20,6 +20,7 @@ declare const __propDef: {
20
20
  };
21
21
  events: {
22
22
  click: MouseEvent;
23
+ changeId: CustomEvent<any>;
23
24
  delete: CustomEvent<any>;
24
25
  move: CustomEvent<any>;
25
26
  } & {