windmill-components 1.613.5 → 1.623.2

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 (254) hide show
  1. package/package/cancelable-promise-utils.js +4 -2
  2. package/package/components/ApiConnectForm.svelte +6 -0
  3. package/package/components/AppConnectDrawer.svelte +1 -0
  4. package/package/components/AppConnectInner.svelte +1 -0
  5. package/package/components/AuthSettings.svelte +3 -1
  6. package/package/components/BedrockCredentialsCheck.svelte +241 -0
  7. package/package/components/BedrockCredentialsCheck.svelte.d.ts +3 -0
  8. package/package/components/CenteredPage.svelte +2 -1
  9. package/package/components/CenteredPage.svelte.d.ts +1 -0
  10. package/package/components/CompareWorkspaces.svelte +74 -16
  11. package/package/components/DBManager.svelte +35 -31
  12. package/package/components/DBManager.svelte.d.ts +13 -3
  13. package/package/components/DBManagerContent.svelte +23 -62
  14. package/package/components/DBManagerContent.svelte.d.ts +37 -3
  15. package/package/components/DBManagerDrawer.svelte +7 -9
  16. package/package/components/DBTable.svelte +1 -1
  17. package/package/components/DBTable.svelte.d.ts +3 -1
  18. package/package/components/DBTableEditor.svelte +66 -49
  19. package/package/components/DBTableEditor.svelte.d.ts +1 -1
  20. package/package/components/DateInput.svelte +29 -35
  21. package/package/components/DateInput.svelte.d.ts +10 -11
  22. package/package/components/DedicatedWorkersSelector.svelte +569 -0
  23. package/package/components/DedicatedWorkersSelector.svelte.d.ts +8 -0
  24. package/package/components/DeployWorkspace.svelte +106 -29
  25. package/package/components/DropdownV2.svelte +2 -1
  26. package/package/components/DropdownV2.svelte.d.ts +1 -0
  27. package/package/components/Editor.svelte +1 -10
  28. package/package/components/FlowGraphViewer.svelte +5 -2
  29. package/package/components/FlowGraphViewer.svelte.d.ts +2 -0
  30. package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
  31. package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
  32. package/package/components/FlowStatusViewerInner.svelte +6 -3
  33. package/package/components/ForkWorkspaceBanner.svelte +16 -0
  34. package/package/components/InfiniteList.svelte +27 -20
  35. package/package/components/InfiniteList.svelte.d.ts +2 -0
  36. package/package/components/JobLoader.svelte.d.ts +1 -1
  37. package/package/components/Login.svelte +6 -0
  38. package/package/components/NextcloudSetting.svelte +1 -1
  39. package/package/components/OAuthSetting.svelte +12 -23
  40. package/package/components/PocketIdSetting.svelte +82 -0
  41. package/package/components/PocketIdSetting.svelte.d.ts +6 -0
  42. package/package/components/ResourceEditor.svelte +4 -4
  43. package/package/components/ResourcePicker.svelte +1 -0
  44. package/package/components/RunForm.svelte +9 -17
  45. package/package/components/RunForm.svelte.d.ts +0 -1
  46. package/package/components/RunsPage.svelte +34 -0
  47. package/package/components/SavedInputsPicker.svelte +1 -1
  48. package/package/components/SavedInputsV2.svelte +35 -36
  49. package/package/components/Section.svelte +1 -1
  50. package/package/components/Star.svelte +8 -12
  51. package/package/components/Star.svelte.d.ts +6 -19
  52. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  53. package/package/components/TimeAgo.svelte +49 -7
  54. package/package/components/TimeAgo.svelte.d.ts +1 -0
  55. package/package/components/Toast.svelte +5 -1
  56. package/package/components/WorkerGroup.svelte +35 -20
  57. package/package/components/WorkerGroup.svelte.d.ts +1 -0
  58. package/package/components/apps/components/display/InsertRowDrawerButton.svelte +1 -1
  59. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +2 -1
  60. package/package/components/apps/components/display/dbtable/dbFeatures.d.ts +9 -0
  61. package/package/components/apps/components/display/dbtable/dbFeatures.js +32 -0
  62. package/package/components/apps/components/display/dbtable/metadata.d.ts +3 -3
  63. package/package/components/apps/components/display/dbtable/metadata.js +120 -130
  64. package/package/components/apps/components/display/dbtable/queries/alterTable.js +13 -5
  65. package/package/components/apps/components/display/dbtable/queries/alterTable.test.js +1 -1
  66. package/package/components/apps/components/display/dbtable/queries/createTable.js +2 -0
  67. package/package/components/apps/components/display/dbtable/queries/relationalKeys.d.ts +1 -3
  68. package/package/components/apps/components/display/dbtable/queries/relationalKeys.js +41 -42
  69. package/package/components/apps/components/display/dbtable/tableEditor.js +18 -0
  70. package/package/components/apps/components/display/dbtable/utils.d.ts +1 -8
  71. package/package/components/apps/components/display/dbtable/utils.js +27 -34
  72. package/package/components/apps/components/display/table/AppAggridTable.svelte +8 -0
  73. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +9 -9
  74. package/package/components/apps/components/display/table/AppAggridTableActions.svelte.d.ts +1 -1
  75. package/package/components/apps/components/inputs/AppMultiSelectV2.svelte +2 -4
  76. package/package/components/assets/AssetsDropdownButton.svelte +1 -1
  77. package/package/components/assets/AssetsUsageDrawer.svelte +98 -27
  78. package/package/components/assets/AssetsUsageDrawer.svelte.d.ts +5 -6
  79. package/package/components/assets/lib.d.ts +3 -2
  80. package/package/components/assets/lib.js +3 -1
  81. package/package/components/common/CloseButton.svelte +2 -1
  82. package/package/components/common/CloseButton.svelte.d.ts +1 -0
  83. package/package/components/common/badge/CountBadge.svelte +4 -3
  84. package/package/components/common/badge/CountBadge.svelte.d.ts +1 -0
  85. package/package/components/common/button/Button.svelte +1 -1
  86. package/package/components/common/confirmationModal/ConfirmationModal.svelte +2 -1
  87. package/package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +1 -0
  88. package/package/components/common/drawer/Drawer.svelte +4 -1
  89. package/package/components/common/drawer/DrawerContent.svelte +6 -3
  90. package/package/components/common/drawer/DrawerContent.svelte.d.ts +1 -0
  91. package/package/components/common/modal/Modal2.svelte +1 -0
  92. package/package/components/common/table/AppRow.svelte +4 -1
  93. package/package/components/common/table/FlowRow.svelte +4 -1
  94. package/package/components/common/table/RawAppRow.svelte +4 -1
  95. package/package/components/common/table/Row.svelte +11 -21
  96. package/package/components/common/table/Row.svelte.d.ts +4 -20
  97. package/package/components/common/table/RowIcon.svelte +6 -2
  98. package/package/components/common/table/RowIcon.svelte.d.ts +1 -1
  99. package/package/components/common/table/ScriptRow.svelte +4 -1
  100. package/package/components/copilot/autocomplete/Autocompletor.d.ts +1 -1
  101. package/package/components/copilot/autocomplete/Autocompletor.js +4 -4
  102. package/package/components/copilot/autocomplete/request.js +13 -9
  103. package/package/components/copilot/chat/script/core.js +5 -4
  104. package/package/components/copilot/lib.js +2 -9
  105. package/package/components/copilot/utils.d.ts +5 -0
  106. package/package/components/copilot/utils.js +8 -0
  107. package/package/components/dbOps.d.ts +1 -1
  108. package/package/components/dbOps.js +2 -2
  109. package/package/components/details/DetailPageHeader.svelte +21 -7
  110. package/package/components/details/DetailPageHeader.svelte.d.ts +2 -1
  111. package/package/components/details/DetailPageLayout.svelte +10 -1
  112. package/package/components/details/DetailPageLayout.svelte.d.ts +1 -0
  113. package/package/components/flows/conversations/FlowConversationsSidebar.svelte +79 -77
  114. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
  115. package/package/components/graph/FlowGraphV2.svelte +7 -1
  116. package/package/components/graph/renderers/triggers/TriggersBadge.svelte +41 -24
  117. package/package/components/home/ItemsList.svelte +2 -1
  118. package/package/components/home/treeViewUtils.js +1 -1
  119. package/package/components/icons/NextcloudIcon.svelte +3 -2
  120. package/package/components/icons/NextcloudIcon.svelte.d.ts +2 -0
  121. package/package/components/icons/PocketIdIcon.svelte +9 -0
  122. package/package/components/icons/PocketIdIcon.svelte.d.ts +9 -0
  123. package/package/components/icons/index.js +3 -1
  124. package/package/components/instanceSettings.d.ts +1 -1
  125. package/package/components/instanceSettings.js +1 -0
  126. package/package/components/raw_apps/RawAppDataTableDrawer.svelte +1 -3
  127. package/package/components/raw_apps/datatableUtils.svelte.js +1 -1
  128. package/package/components/schema/EditableSchemaWrapper.svelte +2 -2
  129. package/package/components/select/MultiSelect.svelte +1 -1
  130. package/package/components/select/SelectDropdown.svelte +15 -3
  131. package/package/components/settings/ChangeWorkspaceId.svelte +8 -7
  132. package/package/components/settings/CreateToken.svelte +3 -3
  133. package/package/components/settings/WorkspaceUserSettings.svelte +6 -5
  134. package/package/components/sidebar/MenuButton.svelte +13 -5
  135. package/package/components/sidebar/MultiplayerMenu.svelte +2 -2
  136. package/package/components/sidebar/SidebarContent.svelte +32 -4
  137. package/package/components/sidebar/UserMenu.svelte +2 -2
  138. package/package/components/table/DataTable.svelte +6 -2
  139. package/package/components/table/DataTable.svelte.d.ts +1 -0
  140. package/package/components/triggers/AddTriggersButton.svelte +17 -4
  141. package/package/components/triggers/TriggersEditor.svelte +4 -0
  142. package/package/components/triggers/TriggersWrapper.svelte +14 -0
  143. package/package/components/triggers/native/NativeTriggerEditor.svelte +379 -0
  144. package/package/components/triggers/native/NativeTriggerEditor.svelte.d.ts +26 -0
  145. package/package/components/triggers/native/NativeTriggerTable.svelte +155 -0
  146. package/package/components/triggers/native/NativeTriggerTable.svelte.d.ts +16 -0
  147. package/package/components/triggers/native/NativeTriggersPanel.svelte +40 -0
  148. package/package/components/triggers/native/NativeTriggersPanel.svelte.d.ts +15 -0
  149. package/package/components/triggers/native/services/nextcloud/NextcloudTriggerForm.svelte +104 -0
  150. package/package/components/triggers/native/services/nextcloud/NextcloudTriggerForm.svelte.d.ts +18 -0
  151. package/package/components/triggers/native/utils.d.ts +74 -0
  152. package/package/components/triggers/native/utils.js +152 -0
  153. package/package/components/triggers/triggers.svelte.d.ts +2 -1
  154. package/package/components/triggers/triggers.svelte.js +36 -8
  155. package/package/components/triggers/utils.js +18 -5
  156. package/package/components/triggers.d.ts +1 -1
  157. package/package/components/workspaceSettings/AISettings.svelte +2 -1
  158. package/package/components/workspaceSettings/CustomInstanceDbSelect.svelte +1 -0
  159. package/package/components/workspaceSettings/CustomInstanceDbWizardModal.svelte +3 -1
  160. package/package/components/workspaceSettings/DataTableSettings.svelte +2 -1
  161. package/package/components/workspaceSettings/DucklakeSettings.svelte +8 -3
  162. package/package/components/workspaceSettings/OAuthClientConfig.svelte +180 -0
  163. package/package/components/workspaceSettings/OAuthClientConfig.svelte.d.ts +14 -0
  164. package/package/components/workspaceSettings/StorageSettings.svelte +7 -2
  165. package/package/components/workspaceSettings/WorkspaceIntegrations.svelte +302 -0
  166. package/package/components/workspaceSettings/WorkspaceIntegrations.svelte.d.ts +3 -0
  167. package/package/consts.js +0 -2
  168. package/package/gen/core/OpenAPI.js +1 -1
  169. package/package/gen/schemas.gen.d.ts +384 -3
  170. package/package/gen/schemas.gen.js +390 -3
  171. package/package/gen/services.gen.d.ts +200 -13
  172. package/package/gen/services.gen.js +383 -24
  173. package/package/gen/types.gen.d.ts +884 -94
  174. package/package/hub.js +2 -2
  175. package/package/hubPaths.json +1 -1
  176. package/package/refreshUser.d.ts +5 -1
  177. package/package/refreshUser.js +20 -30
  178. package/package/storeUtils.js +2 -0
  179. package/package/svelte5Utils.svelte.d.ts +61 -0
  180. package/package/svelte5Utils.svelte.js +170 -0
  181. package/package/utils.js +3 -0
  182. package/package.json +4 -6
  183. package/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +0 -2
  184. package/dist/sharedUtils/base.d.ts +0 -1
  185. package/dist/sharedUtils/cloud.d.ts +0 -1
  186. package/dist/sharedUtils/common.d.ts +0 -111
  187. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +0 -5
  188. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +0 -5
  189. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +0 -5
  190. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +0 -13
  191. package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +0 -11
  192. package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +0 -95
  193. package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +0 -6
  194. package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +0 -7
  195. package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +0 -33
  196. package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +0 -10
  197. package/dist/sharedUtils/components/apps/editor/component/components.d.ts +0 -5371
  198. package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +0 -3
  199. package/dist/sharedUtils/components/apps/editor/component/index.d.ts +0 -3
  200. package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +0 -7
  201. package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +0 -3
  202. package/dist/sharedUtils/components/apps/gridUtils.d.ts +0 -14
  203. package/dist/sharedUtils/components/apps/inputType.d.ts +0 -178
  204. package/dist/sharedUtils/components/apps/rx.d.ts +0 -29
  205. package/dist/sharedUtils/components/apps/sharedTypes.d.ts +0 -21
  206. package/dist/sharedUtils/components/apps/types.d.ts +0 -274
  207. package/dist/sharedUtils/components/assets/lib.d.ts +0 -25
  208. package/dist/sharedUtils/components/common/alert/model.d.ts +0 -2
  209. package/dist/sharedUtils/components/common/badge/model.d.ts +0 -8
  210. package/dist/sharedUtils/components/common/button/model.d.ts +0 -45
  211. package/dist/sharedUtils/components/common/fileInput/model.d.ts +0 -1
  212. package/dist/sharedUtils/components/common/index.d.ts +0 -24
  213. package/dist/sharedUtils/components/common/skeleton/model.d.ts +0 -21
  214. package/dist/sharedUtils/components/dbTypes.d.ts +0 -14
  215. package/dist/sharedUtils/components/diff_drawer.d.ts +0 -26
  216. package/dist/sharedUtils/components/ducklake.d.ts +0 -1
  217. package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +0 -7
  218. package/dist/sharedUtils/components/icons/index.d.ts +0 -101
  219. package/dist/sharedUtils/components/random_positive_adjetive.d.ts +0 -1
  220. package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +0 -10
  221. package/dist/sharedUtils/components/raw_apps/utils.d.ts +0 -15
  222. package/dist/sharedUtils/components/triggers/email/utils.d.ts +0 -4
  223. package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +0 -2
  224. package/dist/sharedUtils/components/triggers/http/utils.d.ts +0 -11
  225. package/dist/sharedUtils/components/triggers/kafka/utils.d.ts +0 -2
  226. package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +0 -2
  227. package/dist/sharedUtils/components/triggers/nats/utils.d.ts +0 -2
  228. package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +0 -8
  229. package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +0 -2
  230. package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +0 -32
  231. package/dist/sharedUtils/components/triggers/utils.d.ts +0 -80
  232. package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +0 -2
  233. package/dist/sharedUtils/components/triggers.d.ts +0 -20
  234. package/dist/sharedUtils/gen/core/ApiError.d.ts +0 -10
  235. package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +0 -13
  236. package/dist/sharedUtils/gen/core/ApiResult.d.ts +0 -7
  237. package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +0 -26
  238. package/dist/sharedUtils/gen/core/OpenAPI.d.ts +0 -27
  239. package/dist/sharedUtils/gen/core/request.d.ts +0 -29
  240. package/dist/sharedUtils/gen/index.d.ts +0 -6
  241. package/dist/sharedUtils/gen/schemas.gen.d.ts +0 -7036
  242. package/dist/sharedUtils/gen/services.gen.d.ts +0 -6047
  243. package/dist/sharedUtils/gen/types.gen.d.ts +0 -21881
  244. package/dist/sharedUtils/history.svelte.d.ts +0 -9
  245. package/dist/sharedUtils/hub.d.ts +0 -49
  246. package/dist/sharedUtils/jsr.json +0 -6
  247. package/dist/sharedUtils/lib.d.ts +0 -5
  248. package/dist/sharedUtils/lib.es.js +0 -1588
  249. package/dist/sharedUtils/package.json +0 -12
  250. package/dist/sharedUtils/schema.d.ts +0 -3
  251. package/dist/sharedUtils/stores.d.ts +0 -97
  252. package/dist/sharedUtils/svelte5Utils.svelte.d.ts +0 -80
  253. package/dist/sharedUtils/toast.d.ts +0 -8
  254. package/dist/sharedUtils/utils.d.ts +0 -265
@@ -75,7 +75,6 @@ const selectedId = $derived(selectionManager.getSelectedId());
75
75
  const noteEditorContext = getNoteEditorContext();
76
76
  // Function to calculate extra gap needed for notes below the lowest flow nodes
77
77
  function calculateNoteGap(notes) {
78
- console.log('calculateNoteGap', notes);
79
78
  if (!notes || notes.length === 0) {
80
79
  return 0;
81
80
  }
@@ -404,6 +403,9 @@ async function updateStores() {
404
403
  ...graph.edges
405
404
  ];
406
405
  await tick();
406
+ updateHeight();
407
+ }
408
+ function updateHeight() {
407
409
  if (nodes.length === 0) {
408
410
  height = minHeight;
409
411
  }
@@ -413,6 +415,10 @@ async function updateStores() {
413
415
  height = Math.max(maxBottom - minY, minHeight);
414
416
  }
415
417
  }
418
+ $effect(() => {
419
+ minHeight;
420
+ untrack(() => updateHeight());
421
+ });
416
422
  const nodeTypes = {
417
423
  input2: InputNode,
418
424
  module: ModuleNode,
@@ -11,28 +11,38 @@ import { twMerge } from 'tailwind-merge';
11
11
  import SchedulePollIcon from '../../../icons/SchedulePollIcon.svelte';
12
12
  import TriggerLabel from '../../../triggers/TriggerLabel.svelte';
13
13
  import CountBadge from '../../../common/badge/CountBadge.svelte';
14
+ import NextcloudIcon from '../../../icons/NextcloudIcon.svelte';
14
15
  const { triggersState, triggersCount } = getContext('TriggerContext');
15
16
  let { selected, showOnlyWithCount,
16
17
  // @ts-ignore - This is an output-only prop used with bind:
17
18
  numberOfTriggers = $bindable(0), small = true, vertical = false, limit, showDraft = true, onSelect } = $props();
18
19
  let menuOpen = $state(false);
19
- const triggerTypeConfig = {
20
- webhook: { icon: Webhook, countKey: 'webhook_count' },
21
- schedule: { icon: Calendar, countKey: 'schedule_count' },
22
- http: { icon: Route, countKey: 'http_routes_count' },
23
- websocket: { icon: Unplug, countKey: 'websocket_count' },
24
- postgres: { icon: Database, countKey: 'postgres_count' },
25
- kafka: { icon: KafkaIcon, countKey: 'kafka_count', disabled: !$enterpriseLicense },
26
- default_email: { icon: Mail, countKey: 'default_email_count' },
27
- email: { icon: Mail, countKey: 'email_count' },
28
- nats: { icon: NatsIcon, countKey: 'nats_count', disabled: !$enterpriseLicense },
29
- mqtt: { icon: MqttIcon, countKey: 'mqtt_count', disabled: !$enterpriseLicense },
30
- sqs: { icon: AwsIcon, countKey: 'sqs_count', disabled: !$enterpriseLicense },
31
- gcp: { icon: GoogleCloudIcon, countKey: 'gcp_count', disabled: !$enterpriseLicense },
32
- poll: { icon: SchedulePollIcon },
33
- cli: { icon: Terminal }
34
- };
35
- const allTypes = [
20
+ let availableNativeServices = $state([]);
21
+ let triggerTypeConfig = $derived(() => {
22
+ const baseConfig = {
23
+ webhook: { icon: Webhook, countKey: 'webhook_count' },
24
+ schedule: { icon: Calendar, countKey: 'schedule_count' },
25
+ http: { icon: Route, countKey: 'http_routes_count' },
26
+ websocket: { icon: Unplug, countKey: 'websocket_count' },
27
+ postgres: { icon: Database, countKey: 'postgres_count' },
28
+ kafka: { icon: KafkaIcon, countKey: 'kafka_count', disabled: !$enterpriseLicense },
29
+ default_email: { icon: Mail, countKey: 'default_email_count' },
30
+ email: { icon: Mail, countKey: 'email_count' },
31
+ nats: { icon: NatsIcon, countKey: 'nats_count', disabled: !$enterpriseLicense },
32
+ mqtt: { icon: MqttIcon, countKey: 'mqtt_count', disabled: !$enterpriseLicense },
33
+ sqs: { icon: AwsIcon, countKey: 'sqs_count', disabled: !$enterpriseLicense },
34
+ gcp: { icon: GoogleCloudIcon, countKey: 'gcp_count', disabled: !$enterpriseLicense },
35
+ poll: { icon: SchedulePollIcon },
36
+ cli: { icon: Terminal },
37
+ nextcloud: { icon: NextcloudIcon, countKey: 'nextcloud_count' }
38
+ };
39
+ // Add native trigger services that are available
40
+ for (const { service, icon } of availableNativeServices) {
41
+ baseConfig[service] = { icon };
42
+ }
43
+ return baseConfig;
44
+ });
45
+ let allTypes = $derived([
36
46
  'webhook',
37
47
  'schedule',
38
48
  'http',
@@ -46,8 +56,9 @@ const allTypes = [
46
56
  'gcp',
47
57
  'email',
48
58
  'poll',
49
- 'cli'
50
- ];
59
+ 'cli',
60
+ 'nextcloud'
61
+ ]);
51
62
  function camelCaseToWords(s) {
52
63
  const result = s.replace(/([A-Z])/g, ' $1');
53
64
  return result.charAt(0).toUpperCase() + result.slice(1).toLowerCase();
@@ -77,10 +88,10 @@ let allTriggerTypes = $derived.by(() => {
77
88
  const types = !noTriggers ? Object.keys(triggersGrouped) : allTypes;
78
89
  //filter out types if showOnlyTriggersWithCount is true and there are no triggers for that type
79
90
  return types.filter((type) => (!showOnlyTriggersWithCount ||
80
- ((triggerTypeConfig[type].countKey &&
81
- ($triggersCount?.[triggerTypeConfig[type].countKey] ?? 0)) ||
91
+ ((triggerTypeConfig()[type]?.countKey &&
92
+ ($triggersCount?.[triggerTypeConfig()[type].countKey] ?? 0)) ||
82
93
  0) > 0) &&
83
- !triggerTypeConfig[type].disabled);
94
+ !triggerTypeConfig()[type]?.disabled);
84
95
  });
85
96
  let triggersToDisplay = $derived(limit ? allTriggerTypes.slice(0, limit) : allTriggerTypes);
86
97
  let extraTriggers = $derived(limit && allTriggerTypes.length > limit
@@ -187,7 +198,10 @@ $effect(() => {
187
198
  </Menubar>
188
199
 
189
200
  {#snippet triggerButton({ type, isSelected, meltElement = undefined, singleItem = false })}
190
- {@const { icon: SvelteComponent, countKey } = triggerTypeConfig[type]}
201
+ {@const { icon: SvelteComponent, countKey } = triggerTypeConfig()[type] || {
202
+ icon: Database,
203
+ countKey: undefined
204
+ }}
191
205
 
192
206
  <MeltButton
193
207
  aiId={`trigger-button-${type}`}
@@ -228,7 +242,10 @@ $effect(() => {
228
242
  {/snippet}
229
243
 
230
244
  {#snippet simpleTriggerItem({ item, type })}
231
- {@const { icon: SvelteComponent, countKey } = triggerTypeConfig[type]}
245
+ {@const { icon: SvelteComponent, countKey } = triggerTypeConfig()[type] || {
246
+ icon: Database,
247
+ countKey: undefined
248
+ }}
232
249
  <MenuItem {item} class={itemClass}>
233
250
  <div class="flex flex-row items-center gap-2">
234
251
  <SvelteComponent size={14} />
@@ -305,7 +305,8 @@ $effect(() => {
305
305
  <TextInput
306
306
  inputProps={{
307
307
  autofocus: true,
308
- placeholder: HOME_SEARCH_PLACEHOLDER
308
+ placeholder: HOME_SEARCH_PLACEHOLDER,
309
+ id: 'home-search-input'
309
310
  }}
310
311
  size="md"
311
312
  bind:value={filter}
@@ -46,7 +46,7 @@ export function groupItems(items) {
46
46
  if ('folderName' in a && 'username' in b) {
47
47
  return 1;
48
48
  }
49
- return (a['username'] ?? a['folderName']).localeCompare(b['username'] ?? b['folderName']);
49
+ return (a['username'] ?? a['folderName'] ?? '').localeCompare(b['username'] ?? b['folderName']);
50
50
  });
51
51
  sortGroup(root);
52
52
  return root;
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">"use strict";
2
- let { size = undefined, height: heightProp = 24, width: widthProp = 24 } = $props();
2
+ let { size = undefined, height: heightProp = 24, width: widthProp = 24, color = undefined, class: clazz = '' } = $props();
3
3
  const { width, height } = $derived(size ? { width: size, height: size } : { width: widthProp, height: heightProp });
4
4
  </script>
5
5
 
@@ -9,7 +9,8 @@ const { width, height } = $derived(size ? { width: size, height: size } : { widt
9
9
  {width}
10
10
  {height}
11
11
  xmlns="http://www.w3.org/2000/svg"
12
- style="fill:currentcolor;"
12
+ class={clazz}
13
+ fill={color ?? 'currentColor'}
13
14
  >
14
15
  <path
15
16
  d="M12.018 6.537c-2.5 0-4.6 1.712-5.241 4.015-.56-1.232-1.793-2.105-3.225-2.105A3.569 3.569 0 0 0 0 12a3.569 3.569 0 0 0 3.552 3.553c1.432 0 2.664-.874 3.224-2.106.641 2.304 2.742 4.016 5.242 4.016 2.487 0 4.576-1.693 5.231-3.977.569 1.21 1.783 2.067 3.198 2.067A3.568 3.568 0 0 0 24 12a3.569 3.569 0 0 0-3.553-3.553c-1.416 0-2.63.858-3.199 2.067-.654-2.284-2.743-3.978-5.23-3.977zm0 2.085c1.878 0 3.378 1.5 3.378 3.378 0 1.878-1.5 3.378-3.378 3.378A3.362 3.362 0 0 1 8.641 12c0-1.878 1.5-3.378 3.377-3.378zm-8.466 1.91c.822 0 1.467.645 1.467 1.468s-.644 1.467-1.467 1.468A1.452 1.452 0 0 1 2.085 12c0-.823.644-1.467 1.467-1.467zm16.895 0c.823 0 1.468.645 1.468 1.468s-.645 1.468-1.468 1.468A1.452 1.452 0 0 1 18.98 12c0-.823.644-1.467 1.467-1.467z"
@@ -2,6 +2,8 @@ interface Props {
2
2
  size?: number;
3
3
  height?: number;
4
4
  width?: number;
5
+ color?: string | undefined;
6
+ class?: string;
5
7
  }
6
8
  declare const NextcloudIcon: import("svelte").Component<Props, {}, "">;
7
9
  type NextcloudIcon = ReturnType<typeof NextcloudIcon>;
@@ -0,0 +1,9 @@
1
+ <script lang="ts">"use strict";
2
+ let { size = undefined, height: heightProp = 24, width: widthProp = 24, class: clazz = '' } = $props();
3
+ const { width, height } = $derived(size ? { width: size, height: size } : { width: widthProp, height: heightProp });
4
+ </script>
5
+
6
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" {width} {height} class={clazz}>
7
+ <circle cx="256" cy="256" r="256" fill="#fff"/>
8
+ <path d="M268.6 102.4c64.4 0 116.8 52.4 116.8 116.7 0 25.3-8 49.4-23 69.6-14.8 19.9-35 34.3-58.4 41.7l-6.5 2-15.5-76.2 4.3-2c14-6.7 23-21.1 23-36.6 0-22.4-18.2-40.6-40.6-40.6S228 195.2 228 217.6c0 15.5 9 29.8 23 36.6l4.2 2-25 153.4h-69.5V102.4z" fill="#191919"/>
9
+ </svg>
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ size?: number;
3
+ height?: number;
4
+ width?: number;
5
+ class?: string;
6
+ }
7
+ declare const PocketIdIcon: import("svelte").Component<Props, {}, "">;
8
+ type PocketIdIcon = ReturnType<typeof PocketIdIcon>;
9
+ export default PocketIdIcon;
@@ -103,6 +103,7 @@ import ApifyIcon from './ApifyIcon.svelte';
103
103
  import McpIcon from './McpIcon.svelte';
104
104
  import SageIcon from './SageIcon.svelte';
105
105
  import ZohoIcon from './ZohoIcon.svelte';
106
+ import PocketIdIcon from './PocketIdIcon.svelte';
106
107
  export const APP_TO_ICON_COMPONENT = {
107
108
  postgresql: PostgresIcon,
108
109
  mysql: Mysql,
@@ -210,6 +211,7 @@ export const APP_TO_ICON_COMPONENT = {
210
211
  mqtt: MqttIcon,
211
212
  apify: ApifyIcon,
212
213
  mcp: McpIcon,
213
- zoho: ZohoIcon
214
+ zoho: ZohoIcon,
215
+ pocketid: PocketIdIcon
214
216
  }; // to generate correct svelte package types
215
217
  export { AirtableIcon, DbIcon, DiscordIcon, GcalIcon, GCloudIcon, GdriveIcon, GithubIcon, GitlabIcon, GmailIcon, GSheetsIcon, HttpIcon, Mail, MastodonIcon, MatrixIcon, Mysql, PostgresIcon, S3Icon, Slack, TogglIcon, WindmillIcon, WindmillIcon2, SchedulePollIcon, MailchimpIcon, SendgridIcon, LinkedinIcon, HubspotIcon, TelegramIcon, StripeIcon, DatadogIcon, FunkwhaleIcon, GdocsIcon, FaunadbIcon, ClickhouseIcon, OpenaiIcon, AwsIcon, BcryptIcon, GoogleIcon, HackernewsIcon, MongodbIcon, RedditIcon, SupabaseIcon, WebdavIcon, ZammadIcon, NextcloudIcon, SendflakeIcon, SurrealdbIcon, ActivitypubIcon, AwsEcrIcon, CalcomIcon, ClickupIcon, CloudflareIcon, FirebaseIcon, GoogleFormsIcon, JiraIcon, NotionIcon, PineconeIcon, RssIcon, ShopifyIcon, TypeformIcon, BigQueryIcon, OracleDBIcon, GraphqlIcon, NocoDbIcon, AzureIcon, MicrosoftIcon, OktaIcon, Auth0Icon, AuthentikIcon, AutheliaIcon, KanidmIcon, AsanaIcon, BitbucketIcon, DynatraceIcon, EdgeDbIcon, GitIcon, ZendeskIcon, TwilioIcon, TrelloIcon, ResendIcon, PushoverIcon, QuickbooksIcon, MsTeamsIcon, MailgunIcon, IpinfoIcon, GoogleCloudIcon, CaCertificate, CurrencyApiIcon, VismaIcon, JumpCloudIcon, KeycloakIcon, ZitadelIcon, XeroIcon, KafkaIcon, NatsIcon, MqttIcon, ApifyIcon, McpIcon, ZohoIcon };
@@ -1,5 +1,5 @@
1
1
  import type { ButtonType } from './common/button/model';
2
- export declare const OTEL_TRACING_PROXY_LANGUAGES: readonly ["python3", "deno", "bun", "go", "bash", "rust", "csharp", "nu", "ruby"];
2
+ export declare const OTEL_TRACING_PROXY_LANGUAGES: readonly ["nativets", "python3", "deno", "bun", "go", "bash", "rust", "csharp", "nu", "ruby"];
3
3
  export interface Setting {
4
4
  label: string;
5
5
  description?: string;
@@ -1,5 +1,6 @@
1
1
  // Languages that support HTTP request tracing via OTEL proxy
2
2
  export const OTEL_TRACING_PROXY_LANGUAGES = [
3
+ 'nativets',
3
4
  'python3',
4
5
  'deno',
5
6
  'bun',
@@ -14,7 +14,6 @@ let selectedDatatable = $state(undefined);
14
14
  // For DB manager
15
15
  let dbManagerContent = $state();
16
16
  let hasReplResult = $state(false);
17
- let isRefreshing = $state(false);
18
17
  let windowWidth = $state(window.innerWidth);
19
18
  let expand = $state(false);
20
19
  // Multi-select mode: selected tables
@@ -136,7 +135,6 @@ const canAdd = $derived(selectedDatatable && selectedTables.length > 0);
136
135
  bind:this={dbManagerContent}
137
136
  input={dbInput}
138
137
  bind:hasReplResult
139
- bind:isRefreshing
140
138
  bind:selectedSchemaKey
141
139
  bind:selectedTableKey
142
140
  multiSelectMode={true}
@@ -184,7 +182,7 @@ const canAdd = $derived(selectedDatatable && selectedTables.length > 0);
184
182
  </Button>
185
183
 
186
184
  <Button
187
- loading={isRefreshing}
185
+ loading={dbManagerContent?.isLoading() ?? false}
188
186
  on:click={() => dbManagerContent?.refresh()}
189
187
  startIcon={{ icon: RefreshCcw }}
190
188
  size="xs"
@@ -36,7 +36,7 @@ export function createSchemasResource(getDatatable) {
36
36
  let dbSchema = schemas[resourcePath];
37
37
  if (!dbSchema) {
38
38
  try {
39
- await getDbSchemas('postgresql', resourcePath, workspace, schemas, (msg) => console.error('Schema error:', msg));
39
+ schemas[resourcePath] = await getDbSchemas('postgresql', resourcePath, workspace, (msg) => console.error('Schema error:', msg));
40
40
  dbSchema = get(dbSchemas)[resourcePath];
41
41
  }
42
42
  catch (e) {
@@ -111,9 +111,9 @@ let suggestedFileExtensions = $state([
111
111
  {#if resourceIsTextFile}
112
112
  <label
113
113
  for="format-extension"
114
- class="text-base font-medium whitespace-nowrap flex items-center gap-4"
114
+ class="text-xs font-semibold text-emphasis whitespace-nowrap flex items-center gap-4"
115
115
  >
116
- File extension :
116
+ File extension:
117
117
  <Select
118
118
  autofocus
119
119
  items={safeSelectItems(suggestedFileExtensions)}
@@ -90,7 +90,7 @@ export function getFilteredInputText() {
90
90
  {#if allowClear && !hideMainClearBtn && !!value?.length}
91
91
  <CloseButton
92
92
  noBg
93
- class="mr-1 remove-all bg-transparent text-hint"
93
+ class="ml-2 remove-all bg-transparent text-hint"
94
94
  small
95
95
  on:close={(e) => (clearValue(), e.stopPropagation())}
96
96
  />
@@ -3,6 +3,8 @@ import ConditionalPortal from '../common/drawer/ConditionalPortal.svelte';
3
3
  import { untrack } from 'svelte';
4
4
  import { twMerge } from 'tailwind-merge';
5
5
  import { PlusIcon } from 'lucide-svelte';
6
+ import { useReducedMotion } from '../../svelte5Utils.svelte';
7
+ import { watch } from 'runed';
6
8
  let { processedItems: _processedItems, value, filterText, listAutoWidth = true, disabled, disablePortal = false, open, noItemsMsg = 'No items found', class: className = '', ulClass = '', itemLabelWrapperClasses = '', itemButtonWrapperClasses = '', header, getInputRect, onSelectValue, startSnippet, endSnippet, bottomSnippet } = $props();
7
9
  let processedItems = $derived(!filterText
8
10
  ? _processedItems
@@ -10,6 +12,7 @@ let processedItems = $derived(!filterText
10
12
  let listEl = $state();
11
13
  let dropdownPos = $state(computeDropdownPos());
12
14
  let keyArrowPos = $state();
15
+ let reducedMotion = useReducedMotion();
13
16
  function computeDropdownPos() {
14
17
  if (!getInputRect || !listEl)
15
18
  return { width: 0, height: 0, x: 0, y: 0, isBelow: true };
@@ -47,13 +50,20 @@ $effect(() => {
47
50
  // Also CSS transitions are smoother because they do not rely on JS / animation frames
48
51
  let uiState = $state({ domExists: open, visible: open, timeout: null });
49
52
  let initial = true;
50
- $effect(() => {
51
- let isOpen = open && !disabled;
53
+ watch(() => open && !disabled, (isOpen) => {
52
54
  untrack(() => {
53
55
  if (initial) {
54
56
  initial = false;
55
57
  return;
56
58
  }
59
+ if (reducedMotion.val) {
60
+ uiState = {
61
+ domExists: open && !disabled,
62
+ visible: open && !disabled,
63
+ timeout: null
64
+ };
65
+ return;
66
+ }
57
67
  if (uiState.timeout)
58
68
  clearTimeout(uiState.timeout);
59
69
  uiState = {
@@ -102,6 +112,7 @@ $effect(() => {
102
112
  {#if uiState.domExists}
103
113
  <div
104
114
  class={twMerge(
115
+ open ? 'select-dropdown-open' : 'select-dropdown-closed',
105
116
  disablePortal ? 'absolute z-[5002]' : 'fixed z-[10000]',
106
117
  'text-primary text-sm select-none',
107
118
  dropdownPos.isBelow ? '' : 'flex flex-col justify-end',
@@ -114,7 +125,8 @@ $effect(() => {
114
125
  >
115
126
  <div
116
127
  class={twMerge(
117
- 'overflow-clip rounded-md drop-shadow-base transition-height',
128
+ 'overflow-clip rounded-md drop-shadow-base',
129
+ !reducedMotion.val ? 'transition-height' : '',
118
130
  dropdownPos.isBelow ? '' : 'flex flex-col justify-end'
119
131
  )}
120
132
  style="height: {uiState.visible ? dropdownPos.height : 0}px;"
@@ -38,7 +38,7 @@ async function renameWorkspace() {
38
38
  }
39
39
  });
40
40
  open = false;
41
- sendUserToast(`Renamed workspace to ${newName}. Reloading...`);
41
+ sendUserToast(`Moved workspace to ${newName}. Old workspace archived. Reloading...`);
42
42
  await new Promise((resolve) => setTimeout(resolve, 1000));
43
43
  window.location.href = '/workspace_settings?tab=general&workspace=' + newId;
44
44
  }
@@ -76,12 +76,13 @@ export let open = false;
76
76
 
77
77
  <Modal bind:open title="Change workspace ID">
78
78
  <div class="flex flex-col gap-4">
79
- <Alert type="info" title="Changing the workspace ID may take a few minutes to complete">
80
- Once finished, please update your webhook calls and adjust your CLI sync configuration
81
- accordingly.
82
- </Alert>
83
- <Alert type="warning" title="Running jobs and queued flow steps will not be migrated.">
84
- Make sure that all your jobs are completed before changing the workspace ID.
79
+ <Alert type="warning" title="What happens">
80
+ <ul class="list-disc list-inside text-xs mt-1 space-y-1">
81
+ <li>All content (scripts, flows, apps, resources, etc.) moves to the new ID</li>
82
+ <li>Old workspace is archived with completed jobs, logs, and audit history</li>
83
+ <li>Running jobs will be canceled</li>
84
+ </ul>
85
+ <p class="text-xs mt-2">Remember to update webhook URLs and CLI sync config afterward.</p>
85
86
  </Alert>
86
87
  <p class="text-secondary text-xs"
87
88
  >Current ID <br /> <span class="text-emphasis">{$workspaceStore ?? ''}</span></p
@@ -16,7 +16,7 @@ import TextInput from '../text_input/TextInput.svelte';
16
16
  import Select from '../select/Select.svelte';
17
17
  import { mcpEndpointTools } from '../../mcpEndpointTools';
18
18
  import InfoIcon from 'lucide-svelte/icons/info';
19
- let { showMcpMode = false, defaultNewTokenWorkspace, scopes, onTokenCreated, newTokenLabel = $bindable(undefined) } = $props();
19
+ let { showMcpMode = false, defaultNewTokenWorkspace, scopes, onTokenCreated, newTokenLabel = $bindable(undefined), displayCreateToken = true } = $props();
20
20
  // MCP clients do not allow names longer than 60 characters, here we use 55 because final tool name server side will add ~5 characters
21
21
  const MAX_PATH_LENGTH = 55;
22
22
  let newToken = $state(undefined);
@@ -628,11 +628,11 @@ function clearAllEndpoints() {
628
628
  </div>
629
629
  </div>
630
630
 
631
- {#if newToken}
631
+ {#if newToken && displayCreateToken}
632
632
  <TokenDisplay token={newToken} />
633
633
  {/if}
634
634
 
635
- {#if newMcpToken}
635
+ {#if newMcpToken && displayCreateToken}
636
636
  <TokenDisplay token={newMcpToken} mcpUrl={`${mcpBaseUrl}${newMcpToken}`} />
637
637
  {/if}
638
638
  </div>
@@ -72,11 +72,12 @@ function canConvertToGroup(user) {
72
72
  }
73
73
  async function loadSettings() {
74
74
  const settings = await WorkspaceService.getSettings({ workspace: $workspaceStore });
75
- auto_invite_domain = settings.auto_invite_domain;
76
- operatorOnly = settings.auto_invite_operator;
77
- autoAdd = settings.auto_add;
78
- autoAddInstanceGroups = settings.auto_add_instance_groups || [];
79
- autoAddInstanceGroupsRoles = settings.auto_add_instance_groups_roles || {};
75
+ const autoInvite = settings.auto_invite;
76
+ auto_invite_domain = autoInvite?.enabled ? (autoInvite?.domain ?? '*') : undefined;
77
+ operatorOnly = autoInvite?.operator ?? false;
78
+ autoAdd = autoInvite?.mode === 'add';
79
+ autoAddInstanceGroups = autoInvite?.instance_groups || [];
80
+ autoAddInstanceGroupsRoles = autoInvite?.instance_groups_roles || {};
80
81
  }
81
82
  let getUsagePromise = undefined;
82
83
  let usage = $state(undefined);
@@ -60,16 +60,24 @@ const Element = href ? 'a' : 'button';
60
60
  >
61
61
  {#if icon}
62
62
  {@const SvelteComponent = icon}
63
- <div
64
- style="background-color: {color}"
65
- class={twMerge('rounded-full center-center', color ? 'p-1 -ml-1' : '')}
66
- >
63
+ {#if color}
64
+ <svg width="26" height="26" viewBox="0 0 26 26" class="flex-shrink-0 -ml-[5px]">
65
+ <circle cx="13" cy="13" r="13" fill={color} />
66
+ <foreignObject x="5" y="5" width="16" height="16">
67
+ <SvelteComponent
68
+ size={16}
69
+ class={twMerge(sidebarClasses.text, 'transition-colors', iconClasses)}
70
+ {...iconProps}
71
+ />
72
+ </foreignObject>
73
+ </svg>
74
+ {:else}
67
75
  <SvelteComponent
68
76
  size={16}
69
77
  class={twMerge('flex-shrink-0', sidebarClasses.text, 'transition-colors', iconClasses)}
70
78
  {...iconProps}
71
79
  />
72
- </div>
80
+ {/if}
73
81
  {/if}
74
82
 
75
83
  <div class="flex flex-col text-left grow min-w-0">
@@ -89,12 +89,12 @@ function showActivity(url) {
89
89
  title={user}
90
90
  >
91
91
  <span class="text-sm font-medium leading-none text-white"
92
- >{user.substring(0, 2).toLocaleUpperCase()}</span
92
+ >{user?.substring(0, 2).toLocaleUpperCase()}</span
93
93
  >
94
94
  </span>
95
95
  <div class="flex flex-col">
96
96
  <span class="text-xs text-primary truncate">{user}</span>
97
- <span class="text-2xs text-secondary truncate">{showActivity(url)}</span>
97
+ <span class="text-2xs text-secondary truncate">{showActivity(url ?? '')}</span>
98
98
  </div>
99
99
  </div>
100
100
  {/each}
@@ -2,7 +2,7 @@
2
2
  import { superadmin, usedTriggerKinds, userStore, workspaceStore, isCriticalAlertsUIOpen, enterpriseLicense, devopsRole, tutorialsToDo, skippedAll } from '../../stores';
3
3
  import { syncTutorialsTodos } from '../../tutorialUtils';
4
4
  import { SIDEBAR_SHOW_SCHEDULES } from '../../consts';
5
- import { BookOpen, HardHat, Boxes, Calendar, DollarSign, Eye, Logs, FolderCog, FolderOpen, Github, GraduationCap, HelpCircle, Home, LogOut, Newspaper, Play, Route, ServerCog, Settings, UserCog, Plus, Unplug, AlertCircle, Database, Pyramid, Trash2, MailIcon } from 'lucide-svelte';
5
+ import { BookOpen, ServerCog, Boxes, Calendar, DollarSign, Eye, Logs, FolderCog, FolderOpen, Github, GraduationCap, HelpCircle, Home, LogOut, Newspaper, Play, Route, Settings, UserCog, Plus, Unplug, AlertCircle, Database, Pyramid, Trash2, MailIcon } from 'lucide-svelte';
6
6
  import UserMenu from './UserMenu.svelte';
7
7
  import DiscordIcon from '../icons/brands/Discord.svelte';
8
8
  import { WorkspaceService } from '../../gen';
@@ -20,6 +20,7 @@ import KafkaIcon from '../icons/KafkaIcon.svelte';
20
20
  import NatsIcon from '../icons/NatsIcon.svelte';
21
21
  import MqttIcon from '../icons/MqttIcon.svelte';
22
22
  import AwsIcon from '../icons/AwsIcon.svelte';
23
+ import { getAvailableNativeTriggerServices, getServiceConfig, getServiceIcon } from '../triggers/native/utils';
23
24
  import { Menubar, Menu, MenuSingleItem, MenuItem, MeltButton } from '../meltComponents';
24
25
  import MenuButton from './MenuButton.svelte';
25
26
  import GoogleCloudIcon from '../icons/GoogleCloudIcon.svelte';
@@ -38,6 +39,23 @@ async function deleteFork() {
38
39
  let hasNewChangelogs = $state(false);
39
40
  let recentChangelogs = $state([]);
40
41
  let lastOpened = localStorage.getItem('changelogsLastOpened');
42
+ let availableNativeServices = $state([]);
43
+ async function loadAvailableNativeTriggers() {
44
+ try {
45
+ const services = await getAvailableNativeTriggerServices($workspaceStore);
46
+ const serviceData = await Promise.all(services.map(async (service) => ({
47
+ service,
48
+ icon: await getServiceIcon(service),
49
+ config: getServiceConfig(service)
50
+ })));
51
+ availableNativeServices = serviceData;
52
+ }
53
+ catch (err) {
54
+ console.error('Failed to load available native trigger services:', err);
55
+ availableNativeServices = [];
56
+ }
57
+ }
58
+ loadAvailableNativeTriggers();
41
59
  onMount(async () => {
42
60
  if (lastOpened) {
43
61
  // @ts-ignore
@@ -255,6 +273,16 @@ let defaultExtraTriggerLinks = $derived([
255
273
  aiDescription: 'Button to navigate to Email triggers'
256
274
  }
257
275
  ]);
276
+ let nativeTriggerLinks = $derived(availableNativeServices.map(({ service, icon, config }) => ({
277
+ label: config?.serviceDisplayName || service,
278
+ href: `/native_triggers/${service}`,
279
+ icon: icon,
280
+ disabled: $userStore?.operator,
281
+ kind: service,
282
+ aiId: `sidebar-menu-link-${service}`,
283
+ aiDescription: `Button to navigate to ${config?.serviceDisplayName || service} triggers`
284
+ })));
285
+ let allTriggerLinks = $derived([...defaultExtraTriggerLinks, ...nativeTriggerLinks]);
258
286
  let triggerMenuLinks = $derived([
259
287
  {
260
288
  label: 'Schedules',
@@ -264,9 +292,9 @@ let triggerMenuLinks = $derived([
264
292
  aiId: 'sidebar-menu-link-schedules',
265
293
  aiDescription: 'Button to navigate to schedules'
266
294
  },
267
- ...defaultExtraTriggerLinks.filter((link) => $usedTriggerKinds.includes(link.kind) || $page.url.pathname.includes(link.href))
295
+ ...allTriggerLinks.filter((link) => $usedTriggerKinds.includes(link.kind) || $page.url.pathname.includes(link.href))
268
296
  ]);
269
- let extraTriggerLinks = $derived(defaultExtraTriggerLinks.filter((link) => {
297
+ let extraTriggerLinks = $derived(allTriggerLinks.filter((link) => {
270
298
  return !$page.url.pathname.includes(link.href) && !$usedTriggerKinds.includes(link.kind);
271
299
  }));
272
300
  let secondaryMenuLinks = $derived([
@@ -345,7 +373,7 @@ let secondaryMenuLinks = $derived([
345
373
  {
346
374
  label: 'Workers',
347
375
  href: `${base}/workers`,
348
- icon: HardHat,
376
+ icon: ServerCog,
349
377
  disabled: $userStore?.operator,
350
378
  aiId: 'sidebar-menu-link-workers',
351
379
  aiDescription: 'Button to navigate to workers'
@@ -4,7 +4,7 @@ import { userStore, usageStore, workspaceUsageStore, isPremiumStore, workspaceSt
4
4
  import { USER_SETTINGS_HASH } from './settings';
5
5
  import { isCloudHosted } from '../../cloud';
6
6
  import { twMerge } from 'tailwind-merge';
7
- import { Crown, HardHat, LogOut, Moon, Settings, Sun, User } from 'lucide-svelte';
7
+ import { Crown, ServerCog, LogOut, Moon, Settings, Sun, User } from 'lucide-svelte';
8
8
  import DarkModeObserver from '../DarkModeObserver.svelte';
9
9
  import MenuButton from './MenuButton.svelte';
10
10
  import { Menu, MenuItem } from '../meltComponents';
@@ -35,7 +35,7 @@ const itemClass = twMerge('text-secondary text-left font-normal text-xs ', 'flex
35
35
  {#if $userStore?.is_admin}
36
36
  Admin of this workspace <Crown size={14} />
37
37
  {:else if $userStore?.operator}
38
- Operator in this workspace <HardHat size={14} />
38
+ Operator in this workspace <ServerCog size={14} />
39
39
  {/if}
40
40
  </span>
41
41
  </div>
@@ -10,7 +10,7 @@ let footerHeight = $state(0);
10
10
  let tableHeight = $state(0);
11
11
  const dispatch = createEventDispatcher();
12
12
  let tableContainer = $state();
13
- let { paginated = false, currentPage = $bindable(1), showNext = true, showPrev = true, loadMore = 0, shouldLoadMore = false, rounded = true, size = 'md', perPage = $bindable(undefined), shouldHidePagination = false, noBorder = false, rowCount = undefined, hasMore = true, contentHeight = $bindable(0), tableFixed = false, infiniteScroll = undefined, neverShowLoader = false, loading = false, loadingMore = false, containerClass = '', children, emptyMessage } = $props();
13
+ let { paginated = false, currentPage = $bindable(1), showNext = true, showPrev = true, loadMore = 0, shouldLoadMore = false, rounded = true, size = 'md', perPage = $bindable(undefined), shouldHidePagination = false, noBorder = false, rowCount = undefined, hasMore = true, contentHeight = $bindable(0), tableFixed = false, infiniteScroll = undefined, neverShowLoader = false, loading = false, loadingMore = false, containerClass = '', children, emptyMessage, preventXOverflow = false } = $props();
14
14
  setContext('datatable', {
15
15
  size
16
16
  });
@@ -69,7 +69,11 @@ $effect(() => {
69
69
  bind:clientHeight={tableHeight}
70
70
  >
71
71
  <List justify="between" gap="none" hFull={true}>
72
- <div class="w-full overflow-auto h-fit" bind:this={tableContainer} onscroll={handleScroll}>
72
+ <div
73
+ class={twMerge('w-full overflow-auto h-fit', preventXOverflow ? 'overflow-x-hidden' : '')}
74
+ bind:this={tableContainer}
75
+ onscroll={handleScroll}
76
+ >
73
77
  <table class={tableFixed ? 'table-fixed w-full' : 'min-w-full'}>
74
78
  {@render children?.()}
75
79
  </table>
@@ -22,6 +22,7 @@ interface Props {
22
22
  loading?: boolean;
23
23
  loadingMore?: boolean;
24
24
  containerClass?: string;
25
+ preventXOverflow?: boolean;
25
26
  children?: import('svelte').Snippet;
26
27
  emptyMessage?: import('svelte').Snippet;
27
28
  }