windmill-components 1.665.1 → 1.677.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 (252) hide show
  1. package/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +2 -0
  2. package/dist/sharedUtils/base.d.ts +1 -0
  3. package/dist/sharedUtils/cloud.d.ts +1 -0
  4. package/dist/sharedUtils/common.d.ts +111 -0
  5. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +5 -0
  6. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +5 -0
  7. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +5 -0
  8. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +13 -0
  9. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +11 -0
  10. package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +95 -0
  11. package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +6 -0
  12. package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +7 -0
  13. package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +33 -0
  14. package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +10 -0
  15. package/dist/sharedUtils/components/apps/editor/component/components.d.ts +5371 -0
  16. package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +3 -0
  17. package/dist/sharedUtils/components/apps/editor/component/index.d.ts +3 -0
  18. package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +7 -0
  19. package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +3 -0
  20. package/dist/sharedUtils/components/apps/gridUtils.d.ts +14 -0
  21. package/dist/sharedUtils/components/apps/inputType.d.ts +178 -0
  22. package/dist/sharedUtils/components/apps/rx.d.ts +29 -0
  23. package/dist/sharedUtils/components/apps/sharedTypes.d.ts +21 -0
  24. package/dist/sharedUtils/components/apps/types.d.ts +274 -0
  25. package/dist/sharedUtils/components/assets/lib.d.ts +25 -0
  26. package/dist/sharedUtils/components/common/alert/model.d.ts +2 -0
  27. package/dist/sharedUtils/components/common/badge/model.d.ts +8 -0
  28. package/dist/sharedUtils/components/common/button/model.d.ts +45 -0
  29. package/dist/sharedUtils/components/common/fileInput/model.d.ts +1 -0
  30. package/dist/sharedUtils/components/common/index.d.ts +24 -0
  31. package/dist/sharedUtils/components/common/skeleton/model.d.ts +21 -0
  32. package/dist/sharedUtils/components/dbTypes.d.ts +14 -0
  33. package/dist/sharedUtils/components/diff_drawer.d.ts +26 -0
  34. package/dist/sharedUtils/components/ducklake.d.ts +1 -0
  35. package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +7 -0
  36. package/dist/sharedUtils/components/icons/index.d.ts +101 -0
  37. package/dist/sharedUtils/components/random_positive_adjetive.d.ts +1 -0
  38. package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +10 -0
  39. package/dist/sharedUtils/components/raw_apps/utils.d.ts +15 -0
  40. package/dist/sharedUtils/components/triggers/email/utils.d.ts +4 -0
  41. package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +2 -0
  42. package/dist/sharedUtils/components/triggers/http/utils.d.ts +11 -0
  43. package/dist/sharedUtils/components/triggers/kafka/utils.d.ts +2 -0
  44. package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +2 -0
  45. package/dist/sharedUtils/components/triggers/nats/utils.d.ts +2 -0
  46. package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +8 -0
  47. package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +2 -0
  48. package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +32 -0
  49. package/dist/sharedUtils/components/triggers/utils.d.ts +80 -0
  50. package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +2 -0
  51. package/dist/sharedUtils/components/triggers.d.ts +20 -0
  52. package/dist/sharedUtils/gen/core/ApiError.d.ts +10 -0
  53. package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +13 -0
  54. package/dist/sharedUtils/gen/core/ApiResult.d.ts +7 -0
  55. package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +26 -0
  56. package/dist/sharedUtils/gen/core/OpenAPI.d.ts +27 -0
  57. package/dist/sharedUtils/gen/core/request.d.ts +29 -0
  58. package/dist/sharedUtils/gen/index.d.ts +6 -0
  59. package/dist/sharedUtils/gen/schemas.gen.d.ts +7036 -0
  60. package/dist/sharedUtils/gen/services.gen.d.ts +6047 -0
  61. package/dist/sharedUtils/gen/types.gen.d.ts +21881 -0
  62. package/dist/sharedUtils/history.svelte.d.ts +9 -0
  63. package/dist/sharedUtils/hub.d.ts +49 -0
  64. package/dist/sharedUtils/jsr.json +6 -0
  65. package/dist/sharedUtils/lib.d.ts +5 -0
  66. package/dist/sharedUtils/lib.es.js +1588 -0
  67. package/dist/sharedUtils/package.json +12 -0
  68. package/dist/sharedUtils/schema.d.ts +3 -0
  69. package/dist/sharedUtils/stores.d.ts +97 -0
  70. package/dist/sharedUtils/svelte5Utils.svelte.d.ts +80 -0
  71. package/dist/sharedUtils/toast.d.ts +8 -0
  72. package/dist/sharedUtils/utils.d.ts +265 -0
  73. package/package/components/AddUser.svelte +67 -34
  74. package/package/components/AppConnectInner.svelte +9 -1
  75. package/package/components/ArgInfo.svelte +9 -1
  76. package/package/components/ArgInput.svelte +21 -1
  77. package/package/components/CompareWorkspaces.svelte +11 -2
  78. package/package/components/DedicatedWorkersSelector.svelte +262 -247
  79. package/package/components/DefaultTagsInner.svelte +40 -2
  80. package/package/components/DeployWorkspace.svelte +13 -0
  81. package/package/components/DiffEditor.svelte +44 -1
  82. package/package/components/EditableSchemaForm.svelte +5 -2
  83. package/package/components/EditableSchemaForm.svelte.d.ts +1 -0
  84. package/package/components/Editor.svelte +5 -1
  85. package/package/components/EditorBar.svelte +12 -3
  86. package/package/components/FilterSearchbar.svelte +26 -2
  87. package/package/components/FlowBuilder.svelte +6 -3
  88. package/package/components/FlowGraphDiffViewer.svelte +16 -17
  89. package/package/components/FlowGraphViewer.svelte +20 -6
  90. package/package/components/FlowGraphViewer.svelte.d.ts +2 -0
  91. package/package/components/FlowGraphViewerStep.svelte +14 -32
  92. package/package/components/FlowMetadata.svelte +4 -1
  93. package/package/components/FlowPreviewContent.svelte +2 -0
  94. package/package/components/FlowStatusWaitingForEvents.svelte +25 -4
  95. package/package/components/HighlightCode.svelte +3 -0
  96. package/package/components/InstanceSetting.svelte +9 -25
  97. package/package/components/InstanceSettings.svelte +16 -0
  98. package/package/components/LabelsInput.svelte +149 -0
  99. package/package/components/LabelsInput.svelte.d.ts +8 -0
  100. package/package/components/Login.svelte +6 -1
  101. package/package/components/ObjectStoreConfigSettings.svelte +273 -1
  102. package/package/components/OktaSetting.svelte +6 -5
  103. package/package/components/Password.svelte +74 -20
  104. package/package/components/Password.svelte.d.ts +1 -0
  105. package/package/components/PasswordArgInput.svelte +2 -2
  106. package/package/components/PasswordArgInput.svelte.d.ts +1 -0
  107. package/package/components/Path.svelte +8 -10
  108. package/package/components/PathNameAutocomplete.svelte +308 -0
  109. package/package/components/PathNameAutocomplete.svelte.d.ts +27 -0
  110. package/package/components/PowerShellCommonParams.svelte +84 -0
  111. package/package/components/PowerShellCommonParams.svelte.d.ts +6 -0
  112. package/package/components/Range.svelte +8 -3
  113. package/package/components/ResourceEditor.svelte +6 -2
  114. package/package/components/RunForm.svelte +71 -7
  115. package/package/components/RunForm.svelte.d.ts +2 -1
  116. package/package/components/ScriptBuilder.svelte +7 -3
  117. package/package/components/ScriptEditor.svelte +221 -187
  118. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  119. package/package/components/ScriptSchema.svelte +1 -1
  120. package/package/components/StringTypeNarrowing.svelte +1 -1
  121. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  122. package/package/components/SummaryPathDisplay.svelte +32 -10
  123. package/package/components/SummaryPathDisplay.svelte.d.ts +2 -1
  124. package/package/components/VariableEditor.svelte +9 -2
  125. package/package/components/WorkerGroup.svelte +47 -2
  126. package/package/components/apps/editor/DeploymentHistory.svelte +112 -13
  127. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +135 -35
  128. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +3 -1
  129. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +11 -35
  130. package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.d.ts +10 -0
  131. package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.js +14 -0
  132. package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.test.d.ts +1 -0
  133. package/package/components/apps/editor/settingsPanel/mainInput/runnableSelectorUtils.test.js +34 -0
  134. package/package/components/assets/AssetButtons.svelte +21 -25
  135. package/package/components/assets/AssetsUsageDrawer.svelte +7 -9
  136. package/package/components/common/fileUpload/FileUpload.svelte +6 -2
  137. package/package/components/common/languageIcons/LanguageIcon.svelte +3 -0
  138. package/package/components/common/table/AppRow.svelte +18 -0
  139. package/package/components/common/table/FlowRow.svelte +18 -0
  140. package/package/components/common/table/ScriptRow.svelte +18 -0
  141. package/package/components/copilot/chat/AIChatManager.svelte.js +3 -3
  142. package/package/components/copilot/chat/flow/openFlow.json +1 -1
  143. package/package/components/copilot/chat/flow/openFlowZod.js +3 -3
  144. package/package/components/custom_ui.d.ts +2 -0
  145. package/package/components/details/DetailPageHeader.svelte +2 -2
  146. package/package/components/details/DetailPageHeader.svelte.d.ts +2 -1
  147. package/package/components/flows/agentToolUtils.d.ts +5 -0
  148. package/package/components/flows/agentToolUtils.js +49 -0
  149. package/package/components/flows/agentToolUtils.test.d.ts +1 -0
  150. package/package/components/flows/agentToolUtils.test.js +55 -0
  151. package/package/components/flows/content/FlowInput.svelte +2 -0
  152. package/package/components/flows/content/FlowInputsQuick.svelte +1 -1
  153. package/package/components/flows/content/FlowLoop.svelte +5 -12
  154. package/package/components/flows/content/FlowModuleScript.svelte +5 -3
  155. package/package/components/flows/content/FlowPathViewer.svelte +2 -2
  156. package/package/components/flows/content/FlowPathViewer.svelte.d.ts +1 -0
  157. package/package/components/flows/content/FlowSettings.svelte +2 -0
  158. package/package/components/flows/content/FlowWhileLoop.svelte +5 -12
  159. package/package/components/flows/flowInfers.js +8 -3
  160. package/package/components/flows/map/FlowModuleSchemaMap.svelte +49 -9
  161. package/package/components/flows/pickers/PickHubScriptQuick.svelte +5 -3
  162. package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -1
  163. package/package/components/flows/scheduleUtils.js +2 -1
  164. package/package/components/graph/FlowGraphV2.svelte +13 -1
  165. package/package/components/graph/WacDiagram.svelte +96 -0
  166. package/package/components/graph/WacDiagram.svelte.d.ts +7 -0
  167. package/package/components/graph/noteEditor.svelte.d.ts +1 -1
  168. package/package/components/graph/noteEditor.svelte.js +12 -1
  169. package/package/components/graph/noteUtils.svelte.d.ts +1 -1
  170. package/package/components/graph/noteUtils.svelte.js +9 -2
  171. package/package/components/graph/renderers/edges/WacEdge.svelte +41 -0
  172. package/package/components/graph/renderers/edges/WacEdge.svelte.d.ts +4 -0
  173. package/package/components/graph/renderers/nodes/WacControlNode.svelte +51 -0
  174. package/package/components/graph/renderers/nodes/WacControlNode.svelte.d.ts +9 -0
  175. package/package/components/graph/renderers/nodes/WacStepNode.svelte +35 -0
  176. package/package/components/graph/renderers/nodes/WacStepNode.svelte.d.ts +9 -0
  177. package/package/components/graph/wacDagLayout.d.ts +10 -0
  178. package/package/components/graph/wacDagLayout.js +120 -0
  179. package/package/components/graph/wacToFlow.js +1 -1
  180. package/package/components/home/ItemsList.svelte +28 -4
  181. package/package/components/icons/RIcon.svelte +32 -0
  182. package/package/components/icons/RIcon.svelte.d.ts +7 -0
  183. package/package/components/instanceSettings/DbHealth.svelte +723 -0
  184. package/package/components/instanceSettings/DbHealth.svelte.d.ts +3 -0
  185. package/package/components/instanceSettings/SecretBackendConfig.svelte +343 -304
  186. package/package/components/instanceSettings/SmtpSettings.svelte +8 -0
  187. package/package/components/instanceSettings.js +14 -5
  188. package/package/components/mcp/McpScopeSelector.svelte +82 -16
  189. package/package/components/moveRenameManager.d.ts +1 -0
  190. package/package/components/moveRenameManager.js +7 -4
  191. package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +14 -1
  192. package/package/components/raw_apps/rawAppPolicy.js +3 -2
  193. package/package/components/raw_apps/utils.test.d.ts +1 -0
  194. package/package/components/raw_apps/utils.test.js +38 -0
  195. package/package/components/resources/resourcesFilter.d.ts +15 -2
  196. package/package/components/resources/resourcesFilter.js +11 -2
  197. package/package/components/runs/JobDetailFieldConfig.js +5 -3
  198. package/package/components/runs/JobDetailHeader.svelte +5 -2
  199. package/package/components/runs/JobRunsPreview.svelte +1 -0
  200. package/package/components/runs/RunBadges.svelte +7 -4
  201. package/package/components/runs/RunRow.svelte +7 -7
  202. package/package/components/schedules/schedulesFilter.d.ts +15 -2
  203. package/package/components/schedules/schedulesFilter.js +11 -2
  204. package/package/components/schema/EditableSchemaWrapper.svelte +6 -8
  205. package/package/components/schema/PropertyEditor.svelte +22 -1
  206. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -0
  207. package/package/components/schema/editable_schema_wrapper.d.ts +1 -0
  208. package/package/components/secretArgUtils.d.ts +7 -0
  209. package/package/components/secretArgUtils.js +45 -0
  210. package/package/components/settings/WorkspaceUserSettings.svelte +359 -286
  211. package/package/components/sidebar/OperatorMenu.svelte +215 -197
  212. package/package/components/triggers/CaptureWrapper.svelte +1 -1
  213. package/package/components/triggers/TriggerFilters.svelte +17 -5
  214. package/package/components/triggers/TriggerFilters.svelte.d.ts +2 -1
  215. package/package/components/triggers/kafka/KafkaCapture.svelte +6 -2
  216. package/package/components/triggers/kafka/KafkaCapture.svelte.d.ts +1 -1
  217. package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +5 -1
  218. package/package/components/triggers/kafka/utils.js +1 -0
  219. package/package/components/triggers/schedules/ScheduleEditorInner.svelte +6 -0
  220. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +87 -1
  221. package/package/components/triggers/websocket/utils.js +2 -0
  222. package/package/components/variables/variablesFilter.d.ts +15 -2
  223. package/package/components/variables/variablesFilter.js +11 -2
  224. package/package/components/worker_group.js +1 -0
  225. package/package/components/workspaceSettings/DucklakeSettings.svelte +33 -41
  226. package/package/consts.d.ts +1 -0
  227. package/package/consts.js +1 -0
  228. package/package/editorLangUtils.d.ts +1 -1
  229. package/package/editorLangUtils.js +2 -0
  230. package/package/gen/core/OpenAPI.js +1 -1
  231. package/package/gen/schemas.gen.d.ts +94 -294
  232. package/package/gen/schemas.gen.js +94 -294
  233. package/package/gen/services.gen.d.ts +5 -121
  234. package/package/gen/services.gen.js +5 -237
  235. package/package/gen/types.gen.d.ts +91 -715
  236. package/package/hubPaths.json +6 -3
  237. package/package/infer.d.ts +55 -0
  238. package/package/infer.js +131 -0
  239. package/package/infer.svelte.js +2 -0
  240. package/package/mcpEndpointTools.js +213 -22
  241. package/package/script_helpers.d.ts +3 -0
  242. package/package/script_helpers.js +26 -0
  243. package/package/scripts.d.ts +2 -1
  244. package/package/scripts.js +15 -3
  245. package/package/stores.d.ts +2 -0
  246. package/package/system_prompts/prompts.d.ts +6 -5
  247. package/package/system_prompts/prompts.js +188 -29
  248. package/package/user.js +5 -1
  249. package/package/utils.js +21 -0
  250. package/package/utils_deployable.d.ts +7 -0
  251. package/package/utils_workspace_deploy.js +36 -8
  252. package/package.json +6 -5
@@ -1,7 +1,8 @@
1
1
  <script lang="ts">import { Home, Menu as MenuIcon, Play, Settings, LogOut, Moon, Sun, Code2, LayoutDashboard, Building, Calendar, ServerCog, GraduationCap, Table2 } from 'lucide-svelte';
2
2
  import { base } from '../../base';
3
3
  import MultiplayerMenu from './MultiplayerMenu.svelte';
4
- import { clearWorkspaceFromStorage, enterpriseLicense, superadmin, userWorkspaces, workspaceStore, tutorialsToDo, skippedAll } from '../../stores';
4
+ import { Plus } from 'lucide-svelte';
5
+ import { clearWorkspaceFromStorage, enterpriseLicense, superadmin, usedTriggerKinds, userWorkspaces, workspaceStore, tutorialsToDo, skippedAll } from '../../stores';
5
6
  import { twMerge } from 'tailwind-merge';
6
7
  import { USER_SETTINGS_HASH } from './settings';
7
8
  import { logout } from '../../logoutKit';
@@ -10,8 +11,9 @@ import BarsStaggered from '../icons/BarsStaggered.svelte';
10
11
  import { Menu, Menubar, MenuItem } from '../meltComponents';
11
12
  import MenuButton, { sidebarClasses } from './MenuButton.svelte';
12
13
  import MenuLink from './MenuLink.svelte';
13
- import ResizeTransitionWrapper from '../common/ResizeTransitionWrapper.svelte';
14
14
  let darkMode = $state(false);
15
+ let showExtraTriggers = $state(false);
16
+ let menubarEl = $state();
15
17
  let { isCollapsed = false, favoriteLinks = [] } = $props();
16
18
  let mainMenuLinks = $derived([
17
19
  { label: 'Home', id: 'home', href: `${base}/`, icon: Home },
@@ -70,232 +72,248 @@ let secondMenuLinks = $derived([
70
72
  label: 'Workers',
71
73
  id: 'workers',
72
74
  href: `${base}/workers`
75
+ },
76
+ {
77
+ label: 'Audit logs',
78
+ id: 'audit_logs',
79
+ href: `${base}/audit_logs`
73
80
  }
74
81
  ].filter(filterLink));
75
- let secondMenuTriggerLinks = $derived([
76
- {
77
- label: 'Custom HTTP routes',
78
- id: 'triggers',
79
- href: `${base}/routes`
80
- },
82
+ let allTriggerLinks = $derived([
83
+ { label: 'Custom HTTP routes', id: 'triggers', href: `${base}/routes`, kind: 'http' },
81
84
  {
82
85
  label: 'Websocket triggers',
83
86
  id: 'triggers',
84
- href: `${base}/websocket_triggers`
87
+ href: `${base}/websocket_triggers`,
88
+ kind: 'ws'
85
89
  },
86
90
  {
87
91
  label: 'Postgres triggers',
88
92
  id: 'triggers',
89
- href: `${base}/postgres_triggers`
90
- },
91
- {
92
- label: 'Kafka triggers',
93
- id: 'triggers',
94
- href: `${base}/kafka_triggers`
95
- },
96
- {
97
- label: 'NATS triggers',
98
- id: 'triggers',
99
- href: `${base}/nats_triggers`
100
- },
101
- {
102
- label: 'SQS triggers',
103
- id: 'triggers',
104
- href: `${base}/sqs_triggers`
93
+ href: `${base}/postgres_triggers`,
94
+ kind: 'postgres'
105
95
  },
96
+ { label: 'Kafka triggers', id: 'triggers', href: `${base}/kafka_triggers`, kind: 'kafka' },
97
+ { label: 'NATS triggers', id: 'triggers', href: `${base}/nats_triggers`, kind: 'nats' },
98
+ { label: 'SQS triggers', id: 'triggers', href: `${base}/sqs_triggers`, kind: 'sqs' },
106
99
  {
107
100
  label: 'GCP Pub/Sub triggers',
108
101
  id: 'triggers',
109
- href: `${base}/gcp_triggers`
110
- },
111
- {
112
- label: 'MQTT triggers',
113
- id: 'triggers',
114
- href: `${base}/mqtt_triggers`
102
+ href: `${base}/gcp_triggers`,
103
+ kind: 'gcp'
115
104
  },
116
- {
117
- label: 'Email triggers',
118
- id: 'triggers',
119
- href: `${base}/email_triggers`
120
- },
121
- {
122
- label: 'Audit logs',
123
- id: 'audit_logs',
124
- href: `${base}/audit_logs`
125
- }
105
+ { label: 'MQTT triggers', id: 'triggers', href: `${base}/mqtt_triggers`, kind: 'mqtt' },
106
+ { label: 'Email triggers', id: 'triggers', href: `${base}/email_triggers`, kind: 'email' }
126
107
  ].filter(filterLink));
127
- let showMore = $state(false);
108
+ let secondMenuTriggerLinks = $derived(allTriggerLinks.filter((link) => $usedTriggerKinds.includes(link.kind)));
109
+ let extraTriggerLinks = $derived(allTriggerLinks.filter((link) => !$usedTriggerKinds.includes(link.kind)));
128
110
  </script>
129
111
 
130
- <Menubar>
131
- {#snippet children({ createMenu })}
132
- <Menu {createMenu} usePointerDownOutside on:close={() => (showMore = false)}>
133
- {#snippet triggr({ trigger })}
134
- <MenuButton
135
- class="!text-xs"
136
- icon={MenuIcon}
137
- {isCollapsed}
138
- lightMode
139
- label={undefined}
140
- {trigger}
141
- />
142
- {/snippet}
143
- {#snippet children({ item })}
144
- <div class="w-full max-w-full">
145
- {#each favoriteLinks ?? [] as favorite (favorite.href)}
146
- <MenuItem
147
- href={favorite.href}
148
- {item}
149
- class={twMerge(
150
- 'w-full inline-flex flex-row px-2 py-2 hover:bg-surface-hover',
151
- 'data-[highlighted]:bg-surface-hover'
152
- )}
153
- >
154
- <span class="center-center">
155
- {#if favorite.kind == 'script'}
156
- <Code2 size={16} />
157
- {:else if favorite.kind == 'flow'}
158
- <BarsStaggered size={16} />
159
- {:else if favorite.kind == 'app' || favorite.kind == 'raw_app'}
160
- <LayoutDashboard size={16} />
161
- {:else if favorite.kind == 'asset'}
162
- <Table2 size={16} />
163
- {/if}
164
- </span>
165
- <span class="text-primary ml-2 grow min-w-0 text-xs truncate">
166
- {favorite.label}
167
- </span>
168
- </MenuItem>
112
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
113
+ <div
114
+ bind:this={menubarEl}
115
+ onmouseenter={() => {
116
+ const btn = menubarEl?.querySelector('[data-melt-menubar-trigger]')
117
+ if (btn instanceof HTMLElement) btn.click()
118
+ }}
119
+ >
120
+ <Menubar>
121
+ {#snippet children({ createMenu })}
122
+ <Menu {createMenu} usePointerDownOutside on:close={() => (showExtraTriggers = false)}>
123
+ {#snippet triggr({ trigger })}
124
+ <MenuButton
125
+ class="!text-xs bg-surface !pl-3.5 !pr-2 !w-auto"
126
+ icon={MenuIcon}
127
+ isCollapsed={false}
128
+ lightMode
129
+ label={undefined}
130
+ {trigger}
131
+ />
132
+ {/snippet}
133
+ {#snippet children({ item })}
134
+ <div class="w-full max-w-full">
135
+ {#each favoriteLinks ?? [] as favorite (favorite.href)}
136
+ <MenuItem
137
+ href={favorite.href}
138
+ {item}
139
+ class={twMerge(
140
+ 'w-full inline-flex flex-row px-2 py-2 hover:bg-surface-hover',
141
+ 'data-[highlighted]:bg-surface-hover'
142
+ )}
143
+ >
144
+ <span class="center-center">
145
+ {#if favorite.kind == 'script'}
146
+ <Code2 size={16} />
147
+ {:else if favorite.kind == 'flow'}
148
+ <BarsStaggered size={16} />
149
+ {:else if favorite.kind == 'app' || favorite.kind == 'raw_app'}
150
+ <LayoutDashboard size={16} />
151
+ {:else if favorite.kind == 'asset'}
152
+ <Table2 size={16} />
153
+ {/if}
154
+ </span>
155
+ <span class="text-primary ml-2 grow min-w-0 text-xs truncate">
156
+ {favorite.label}
157
+ </span>
158
+ </MenuItem>
159
+ {/each}
160
+ </div>
161
+
162
+ {#each mainMenuLinks as menuLink (menuLink.href ?? menuLink.label)}
163
+ <MenuLink class="!text-xs" {...menuLink} {isCollapsed} {item} lightMode />
169
164
  {/each}
170
- </div>
171
165
 
172
- {#each mainMenuLinks as menuLink (menuLink.href ?? menuLink.label)}
173
- <MenuLink class="!text-xs" {...menuLink} {isCollapsed} {item} lightMode />
174
- {/each}
166
+ <div class="divide-y" role="none">
167
+ <div role="none">
168
+ <MenuItem
169
+ href={USER_SETTINGS_HASH}
170
+ class={twMerge(
171
+ 'flex flex-row gap-3.5 items-center px-2 py-2',
172
+ sidebarClasses.text,
173
+ sidebarClasses.hoverBg
174
+ )}
175
+ lightMode
176
+ {item}
177
+ >
178
+ <Settings size={14} />
179
+ Account settings
180
+ </MenuItem>
181
+ </div>
175
182
 
176
- <div class="divide-y" role="none">
177
- <div role="none">
178
- <MenuItem
179
- href={USER_SETTINGS_HASH}
180
- class={twMerge(
181
- 'flex flex-row gap-3.5 items-center px-2 py-2',
182
- sidebarClasses.text,
183
- sidebarClasses.hoverBg
184
- )}
185
- lightMode
186
- {item}
187
- >
188
- <Settings size={14} />
189
- Account settings
190
- </MenuItem>
191
- </div>
183
+ <div role="none">
184
+ <MenuItem
185
+ onClick={() => {
186
+ if (!document.documentElement.classList.contains('dark')) {
187
+ document.documentElement.classList.add('dark')
188
+ window.localStorage.setItem('dark-mode', 'dark')
189
+ } else {
190
+ document.documentElement.classList.remove('dark')
191
+ window.localStorage.setItem('dark-mode', 'light')
192
+ }
193
+ }}
194
+ lightMode
195
+ class={twMerge(
196
+ 'w-full flex gap-3.5 px-2 py-2',
197
+ sidebarClasses.hoverBg,
198
+ sidebarClasses.text
199
+ )}
200
+ {item}
201
+ >
202
+ {#if darkMode}
203
+ <Sun size={14} />
204
+ {:else}
205
+ <Moon size={14} />
206
+ {/if}
207
+ Switch theme
208
+ </MenuItem>
209
+ <MenuItem
210
+ href="{base}/user/workspaces"
211
+ onClick={() => clearWorkspaceFromStorage()}
212
+ lightMode
213
+ class={twMerge(
214
+ 'flex gap-3.5 px-2 py-2',
215
+ sidebarClasses.hoverBg,
216
+ sidebarClasses.text
217
+ )}
218
+ {item}
219
+ >
220
+ <Building size={14} />
221
+ All workspaces
222
+ </MenuItem>
192
223
 
193
- <div role="none">
194
- <MenuItem
195
- onClick={() => {
196
- if (!document.documentElement.classList.contains('dark')) {
197
- document.documentElement.classList.add('dark')
198
- window.localStorage.setItem('dark-mode', 'dark')
199
- } else {
200
- document.documentElement.classList.remove('dark')
201
- window.localStorage.setItem('dark-mode', 'light')
202
- }
203
- }}
204
- lightMode
205
- class={twMerge(
206
- 'w-full flex gap-3.5 px-2 py-2',
207
- sidebarClasses.hoverBg,
208
- sidebarClasses.text
209
- )}
210
- {item}
211
- >
212
- {#if darkMode}
213
- <Sun size={14} />
214
- {:else}
215
- <Moon size={14} />
224
+ {#if $superadmin}
225
+ <MenuItem
226
+ href="#superadmin-settings"
227
+ class={twMerge(
228
+ 'flex flex-row gap-3.5 items-center px-2 py-2 ',
229
+ 'text-secondary text-xs',
230
+ 'hover:bg-surface-hover hover:text-primary cursor-pointer',
231
+ 'data-[highlighted]:bg-surface-hover data-[highlighted]:text-primary'
232
+ )}
233
+ {item}
234
+ >
235
+ <ServerCog size={14} />
236
+ Instance settings
237
+ </MenuItem>
216
238
  {/if}
217
- Switch theme
218
- </MenuItem>
219
- <MenuItem
220
- href="{base}/user/workspaces"
221
- onClick={() => clearWorkspaceFromStorage()}
222
- lightMode
223
- class={twMerge('flex gap-3.5 px-2 py-2', sidebarClasses.hoverBg, sidebarClasses.text)}
224
- {item}
225
- >
226
- <Building size={14} />
227
- All workspaces
228
- </MenuItem>
229
239
 
230
- {#if $superadmin}
231
240
  <MenuItem
232
- href="#superadmin-settings"
241
+ onClick={() => logout()}
233
242
  class={twMerge(
234
- 'flex flex-row gap-3.5 items-center px-2 py-2 ',
235
- 'text-secondary text-xs',
236
- 'hover:bg-surface-hover hover:text-primary cursor-pointer',
243
+ 'flex flex-row gap-3.5 items-center px-2 py-2 w-full',
244
+ 'text-primary text-xs',
245
+ 'hover:bg-surface-hover cursor-pointer',
237
246
  'data-[highlighted]:bg-surface-hover data-[highlighted]:text-primary'
238
247
  )}
239
248
  {item}
240
249
  >
241
- <ServerCog size={14} />
242
- Instance settings
250
+ <LogOut size={14} />
251
+ Sign out
243
252
  </MenuItem>
244
- {/if}
245
-
246
- <MenuItem
247
- onClick={() => logout()}
248
- class={twMerge(
249
- 'flex flex-row gap-3.5 items-center px-2 py-2 w-full',
250
- 'text-primary text-xs',
251
- 'hover:bg-surface-hover cursor-pointer',
252
- 'data-[highlighted]:bg-surface-hover data-[highlighted]:text-primary'
253
- )}
254
- {item}
255
- >
256
- <LogOut size={14} />
257
- Sign out
258
- </MenuItem>
259
- </div>
260
- <div onmouseleave={() => (showMore = false)} role="none">
261
- {#if secondMenuLinks.length}
262
- <ResizeTransitionWrapper vertical innerClass="w-full">
263
- {#if !showMore}
264
- <div onmouseenter={() => (showMore = true)} role="none">
265
- <MenuItem {item}>
266
- <div class="px-2 py-2 text-primary text-2xs">More...</div>
267
- </MenuItem>
268
- </div>
269
- {:else}
270
- {#snippet renderSecondMenuLinks(menuLinks: SecondMenuLink[])}
271
- {#each menuLinks as menuLink (menuLink.href ?? menuLink.label)}
272
- <MenuItem
273
- href={menuLink.href}
274
- class={twMerge(
275
- 'flex flex-row gap-3.5 items-center px-2 py-2 text-secondary text-2xs hover:bg-surface-hover hover:text-primary cursor-pointer',
276
- 'data-[highlighted]:bg-surface-hover data-[highlighted]:text-primary'
277
- )}
278
- {item}
253
+ </div>
254
+ <div role="none">
255
+ {#snippet renderSecondMenuLinks(menuLinks: SecondMenuLink[])}
256
+ {#each menuLinks as menuLink (menuLink.href ?? menuLink.label)}
257
+ <MenuItem
258
+ href={menuLink.href}
259
+ class={twMerge(
260
+ 'flex flex-row gap-3.5 items-center px-2 py-2 text-secondary text-2xs hover:bg-surface-hover hover:text-primary cursor-pointer',
261
+ 'data-[highlighted]:bg-surface-hover data-[highlighted]:text-primary'
262
+ )}
263
+ {item}
264
+ >
265
+ {menuLink.label}
266
+ </MenuItem>
267
+ {/each}
268
+ {/snippet}
269
+ {#if secondMenuLinks.length || secondMenuTriggerLinks.length || extraTriggerLinks.length}
270
+ <div class="divide-y">
271
+ {#if secondMenuLinks.length}<div
272
+ >{@render renderSecondMenuLinks(secondMenuLinks)}</div
273
+ >{/if}
274
+ {#if secondMenuTriggerLinks.length}<div
275
+ >{@render renderSecondMenuLinks(secondMenuTriggerLinks)}</div
276
+ >{/if}
277
+ {#if extraTriggerLinks.length}<div>
278
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
279
+ <div
280
+ class="flex flex-row gap-3.5 items-center px-2 py-2 w-full text-secondary text-2xs hover:bg-surface-hover hover:text-primary cursor-pointer"
281
+ role="button"
282
+ tabindex="0"
283
+ onclick={(e) => {
284
+ e.stopPropagation()
285
+ showExtraTriggers = !showExtraTriggers
286
+ }}
279
287
  >
280
- {menuLink.label}
281
- </MenuItem>
282
- {/each}
283
- {/snippet}
284
- <div class="divide-y">
285
- <div>{@render renderSecondMenuLinks(secondMenuLinks)}</div>
286
- <div>{@render renderSecondMenuLinks(secondMenuTriggerLinks)}</div>
287
- </div>
288
- {/if}
289
- </ResizeTransitionWrapper>
290
- {/if}
291
- {#if $enterpriseLicense}
292
- <MultiplayerMenu />
293
- {/if}
288
+ <Plus size={12} />
289
+ <span class="text-2xs">More triggers</span>
290
+ </div>
291
+ {#if showExtraTriggers}
292
+ {#each extraTriggerLinks as menuLink (menuLink.href)}
293
+ <MenuItem
294
+ href={menuLink.href}
295
+ class={twMerge(
296
+ 'flex flex-row gap-3.5 items-center px-2 py-2 pl-6 text-tertiary text-2xs hover:bg-surface-hover hover:text-primary cursor-pointer',
297
+ 'data-[highlighted]:bg-surface-hover data-[highlighted]:text-primary'
298
+ )}
299
+ {item}
300
+ >
301
+ {menuLink.label}
302
+ </MenuItem>
303
+ {/each}
304
+ {/if}
305
+ </div>{/if}
306
+ </div>
307
+ {/if}
308
+ {#if $enterpriseLicense}
309
+ <MultiplayerMenu />
310
+ {/if}
311
+ </div>
294
312
  </div>
295
- </div>
296
- {/snippet}
297
- </Menu>
298
- {/snippet}
299
- </Menubar>
313
+ {/snippet}
314
+ </Menu>
315
+ {/snippet}
316
+ </Menubar>
317
+ </div>
300
318
 
301
319
  <DarkModeObserver bind:darkMode />
@@ -217,7 +217,7 @@ $effect(() => {
217
217
  {hasPreprocessor}
218
218
  {isFlow}
219
219
  {captureLoading}
220
- {triggerDeployed}
220
+ groupId={args?.group_id}
221
221
  on:applyArgs
222
222
  on:updateSchema
223
223
  on:addPreprocessor
@@ -1,16 +1,29 @@
1
1
  <script lang="ts">import { Button } from '../common';
2
2
  import Section from '../Section.svelte';
3
+ import Select from '../select/Select.svelte';
3
4
  import { Plus, X } from 'lucide-svelte';
4
5
  import { fade } from 'svelte/transition';
5
6
  import JsonEditor from '../JsonEditor.svelte';
6
- let { filters = $bindable([]), disabled = false } = $props();
7
+ let { filters = $bindable([]), filterLogic = $bindable(), disabled = false } = $props();
8
+ const filterLogicItems = [
9
+ { label: 'all criteria (AND)', value: 'and' },
10
+ { label: 'any criterion (OR)', value: 'or' }
11
+ ];
12
+ let description = $derived(filterLogic === 'or'
13
+ ? 'Filters will limit the execution of the trigger to only messages that match any criterion.'
14
+ : 'Filters will limit the execution of the trigger to only messages that match all criteria.');
7
15
  </script>
8
16
 
9
17
  <Section label="Filters">
10
18
  <p class="text-xs mb-1 text-primary">
11
- Filters will limit the execution of the trigger to only messages that match all criteria.<br />
19
+ {description}<br />
12
20
  The JSON filter checks if the value at the key is equal or a superset of the filter value.
13
21
  </p>
22
+ {#if filters.length > 0}
23
+ <div class="mt-2 mb-1 max-w-xs">
24
+ <Select items={filterLogicItems} bind:value={filterLogic} {disabled} size="sm" />
25
+ </div>
26
+ {/if}
14
27
  <div class="flex flex-col gap-4 mt-1">
15
28
  {#each filters as v, i (i)}
16
29
  <div class="flex w-full gap-2 items-center">
@@ -19,11 +32,10 @@ let { filters = $bindable([]), disabled = false } = $props();
19
32
  <div class="text-secondary text-sm mb-2">Key</div>
20
33
  <input type="text" bind:value={v.key} {disabled} />
21
34
  </label>
22
- <!-- svelte-ignore a11y_label_has_associated_control -->
23
- <label class="flex flex-col w-full">
35
+ <div class="flex flex-col w-full">
24
36
  <div class="text-secondary text-sm mb-2">Value</div>
25
37
  <JsonEditor bind:value={v.value} code={JSON.stringify(v.value)} {disabled} />
26
- </label>
38
+ </div>
27
39
  {#if v.key}
28
40
  {@const isObject = v.value !== null && typeof v.value === 'object'}
29
41
  <div class="text-xs text-tertiary font-mono mt-2 p-2 bg-surface-secondary rounded">
@@ -3,8 +3,9 @@ interface Props {
3
3
  key: string;
4
4
  value: any;
5
5
  }[];
6
+ filterLogic: 'and' | 'or';
6
7
  disabled?: boolean;
7
8
  }
8
- declare const TriggerFilters: import("svelte").Component<Props, {}, "filters">;
9
+ declare const TriggerFilters: import("svelte").Component<Props, {}, "filters" | "filterLogic">;
9
10
  type TriggerFilters = ReturnType<typeof TriggerFilters>;
10
11
  export default TriggerFilters;
@@ -1,6 +1,8 @@
1
1
  <script lang="ts">import { fade } from 'svelte/transition';
2
+ import { Url } from '../../common';
2
3
  import CaptureSection from '../CaptureSection.svelte';
3
- let { captureInfo = undefined, isValid = undefined, hasPreprocessor = false, isFlow = false, captureLoading = false, triggerDeployed = false } = $props();
4
+ let { captureInfo = undefined, isValid = undefined, hasPreprocessor = false, isFlow = false, captureLoading = false, groupId = undefined } = $props();
5
+ let captureGroupId = $derived(groupId ? `${groupId}_wm_capture` : undefined);
4
6
  </script>
5
7
 
6
8
  {#if captureInfo}
@@ -16,7 +18,6 @@ let { captureInfo = undefined, isValid = undefined, hasPreprocessor = false, isF
16
18
  on:testWithArgs
17
19
  {hasPreprocessor}
18
20
  {isFlow}
19
- displayAlert={triggerDeployed}
20
21
  >
21
22
  {#snippet description()}
22
23
  {#if captureInfo.active}
@@ -35,5 +36,8 @@ let { captureInfo = undefined, isValid = undefined, hasPreprocessor = false, isF
35
36
  </p>
36
37
  {/if}
37
38
  {/snippet}
39
+ {#if captureGroupId}
40
+ <Url label="Test group ID" url={captureGroupId} />
41
+ {/if}
38
42
  </CaptureSection>
39
43
  {/if}
@@ -5,7 +5,7 @@ interface Props {
5
5
  hasPreprocessor?: boolean;
6
6
  isFlow?: boolean;
7
7
  captureLoading?: boolean;
8
- triggerDeployed?: boolean;
8
+ groupId?: string;
9
9
  }
10
10
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
11
11
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
@@ -61,6 +61,7 @@ let error_handler_path = $state();
61
61
  let error_handler_args = $state({});
62
62
  let retry = $state();
63
63
  let filters = $state([]);
64
+ let filterLogic = $state('and');
64
65
  let suspendedJobsModal = $state(null);
65
66
  let originalConfig = $state(undefined);
66
67
  let resetConfirmOpen = $state(false);
@@ -137,6 +138,7 @@ export async function openNew(nis_flow, fixedScriptPath_, nDefaultValues) {
137
138
  error_handler_args = nDefaultValues?.error_handler_args ?? {};
138
139
  retry = nDefaultValues?.retry ?? undefined;
139
140
  filters = nDefaultValues?.filters ?? [];
141
+ filterLogic = 'and';
140
142
  errorHandlerSelected = getHandlerType(error_handler_path ?? '');
141
143
  mode = nDefaultValues?.mode ?? 'enabled';
142
144
  originalConfig = undefined;
@@ -166,6 +168,7 @@ function loadTriggerConfig(cfg) {
166
168
  error_handler_args = cfg?.error_handler_args ?? {};
167
169
  retry = cfg?.retry;
168
170
  filters = cfg?.filters ?? [];
171
+ filterLogic = cfg?.filter_logic ?? 'and';
169
172
  errorHandlerSelected = getHandlerType(error_handler_path ?? '');
170
173
  permissionedAs = cfg?.permissioned_as;
171
174
  selectedPermissionedAs = undefined;
@@ -193,6 +196,7 @@ function getSaveCfg() {
193
196
  group_id: kafkaCfg.group_id,
194
197
  topics: kafkaCfg.topics,
195
198
  filters,
199
+ filter_logic: filterLogic,
196
200
  auto_offset_reset: autoOffsetReset,
197
201
  auto_commit: autoCommit,
198
202
  mode,
@@ -510,7 +514,7 @@ $effect(() => {
510
514
  </Label>
511
515
  {/if}
512
516
 
513
- <TriggerFilters bind:filters disabled={!can_write} />
517
+ <TriggerFilters bind:filters bind:filterLogic disabled={!can_write} />
514
518
 
515
519
  <div class="min-h-96">
516
520
  <Tabs bind:selected={optionTabSelected}>
@@ -17,6 +17,7 @@ export async function saveKafkaTriggerFromCfg(initialPath, cfg, edit, workspace,
17
17
  group_id: cfg.group_id,
18
18
  topics: cfg.topics,
19
19
  filters: cfg.filters ?? [],
20
+ filter_logic: cfg.filter_logic ?? 'and',
20
21
  auto_offset_reset: cfg.auto_offset_reset ?? 'latest',
21
22
  auto_commit: cfg.auto_commit ?? true,
22
23
  ...errorHandlerAndRetries,