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
@@ -0,0 +1,76 @@
1
+ <script>export let height = '24px';
2
+ export let width = '24px';
3
+ </script>
4
+
5
+ <svg {width} {height} viewBox="0 0 467 467" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
6
+ <g id="zitadel-logo-solo-darkdesign" transform="matrix(0.564847,0,0,0.659318,-1282.85,0)">
7
+ <rect x="2271.15" y="0" width="826.773" height="708.241" style="fill:none;"/>
8
+ <g transform="matrix(4.96737,-1.14029,1.331,4.25561,-5923.46,-2258.26)">
9
+ <path d="M1493.5,1056.38L1493.5,1037L1496.5,1037L1496.5,1061.62L1426.02,1020.38L1496.5,979.392L1496.5,1004L1493.5,1004L1493.5,984.608L1431.98,1020.39L1493.5,1056.38Z" style="fill:white;"/>
10
+ </g>
11
+ <g transform="matrix(31.0036,0,0,15.0393,-397275,-666.457)">
12
+ <g transform="matrix(-0.0429306,-0.282967,0.160219,-0.0758207,12884.5,137.392)">
13
+ <path d="M212.517,110L200.392,110L190,92L179.608,110L167.483,110L190,71L212.517,110Z" style="fill:url(#_Linear1);"/>
14
+ </g>
15
+ <g transform="matrix(0.160219,0.0758207,-0.0429306,0.282967,12878.9,10.8747)">
16
+ <path d="M212.517,110L200.392,110L190,92L179.608,110L167.483,110L190,71L212.517,110Z" style="fill:url(#_Linear2);"/>
17
+ </g>
18
+ <g transform="matrix(-0.117289,0.207146,-0.117289,-0.207146,12943.8,65.7)">
19
+ <path d="M212.517,110L200.392,110L190,92L179.608,110L167.483,110L190,71L212.517,110Z" style="fill:url(#_Linear3);"/>
20
+ </g>
21
+ <g transform="matrix(-0.160219,-0.0758207,0.0429306,-0.282967,12917.4,132.195)">
22
+ <path d="M139.622,117L149,142L130.244,142L139.622,117Z" style="fill:url(#_Linear4);"/>
23
+ </g>
24
+ <g transform="matrix(-0.117289,0.207146,0.117289,0.207146,12897.8,5.87512)">
25
+ <path d="M139.622,117L149,142L130.244,142L139.622,117Z" style="fill:url(#_Linear5);"/>
26
+ </g>
27
+ <g transform="matrix(-0.0429306,-0.282967,-0.160219,0.0758207,12936.8,97.6441)">
28
+ <path d="M139.622,117L149,142L130.244,142L139.622,117Z" style="fill:url(#_Linear6);"/>
29
+ </g>
30
+ </g>
31
+ <g transform="matrix(4.96737,-1.14029,1.331,4.25561,-5928.43,-2257.12)">
32
+ <circle cx="1496" cy="1004" r="7" style="fill:white;"/>
33
+ </g>
34
+ <g transform="matrix(4.96737,-1.14029,1.331,4.25561,-5884.5,-2116.69)">
35
+ <circle cx="1496" cy="1004" r="7" style="fill:white;"/>
36
+ </g>
37
+ <g transform="matrix(4.96737,-1.14029,1.331,4.25561,-5855.22,-2023.06)">
38
+ <circle cx="1496" cy="1004" r="7" style="fill:white;"/>
39
+ </g>
40
+ <g transform="matrix(4.96737,-1.14029,1.331,4.25561,-6234.47,-2112.14)">
41
+ <circle cx="1496" cy="1004" r="7" style="fill:white;"/>
42
+ </g>
43
+ <g transform="matrix(4.96737,-1.14029,1.331,4.25561,-5957.71,-2350.75)">
44
+ <circle cx="1496" cy="1004" r="7" style="fill:white;"/>
45
+ </g>
46
+ <g transform="matrix(4.96737,-1.14029,1.16463,3.72366,-5477.99,-831.33)">
47
+ <path d="M1499.26,757.787C1499.26,757.787 1497.37,756.489 1497,755.2C1496.71,754.182 1496.57,750.662 1496.54,750C1496.41,747.303 1499.21,745.644 1499.21,745.644L1490.01,745.835C1490.01,745.835 1493.15,745.713 1493.46,750C1493.51,750.661 1493.23,753.476 1493,755.2C1492.91,756.447 1491.2,757.668 1491.2,757.668L1499.26,757.787Z" style="fill:white;"/>
48
+ </g>
49
+ <g transform="matrix(4.96737,-1.14029,1.16463,3.72366,-5404.79,-597.271)">
50
+ <path d="M1495,760L1495,744" style="fill:none;"/>
51
+ </g>
52
+ <g transform="matrix(4.96737,-1.14029,1.16463,3.72366,-5404.79,-597.271)">
53
+ <path d="M1498.27,757.077C1498.27,757.077 1496.71,756.46 1496.65,754.8C1496.65,753.658 1496.64,753.281 1496.65,752.016C1496.62,751.334 1496.59,750.608 1496.65,749.949C1496.78,746.836 1498.5,746.156 1498.5,746.156L1491.46,745.931C1491.46,745.931 1493.37,746.719 1493.65,749.83C1493.71,750.489 1493.69,751.528 1493.65,752.209C1493.64,753.331 1493.64,753.413 1493.65,754.518C1493.68,756.334 1492.58,756.827 1492.58,756.827L1498.27,757.077Z" style="fill:white;"/>
54
+ </g>
55
+ <g transform="matrix(4.96737,-1.14029,1.16463,3.72366,-5770.62,-677.495)">
56
+ <path d="M1496.17,759.473L1555.54,720.014" style="fill:none;"/>
57
+ </g>
58
+ <g transform="matrix(4.96737,-1.14029,1.16463,3.72366,-5770.62,-677.495)">
59
+ <path d="M1500.86,762.056C1500.86,762.056 1499.86,760.4 1503.09,757.456C1504.91,755.797 1507.33,754.151 1509.98,752.255C1514.82,748.79 1520.68,744.94 1526.52,741.049C1531.45,737.766 1536.38,734.479 1540.82,731.68C1544.52,729.349 1547.85,727.296 1550.54,725.8C1551.07,725.506 1551.6,725.329 1552.05,725.029C1554.73,723.257 1556.85,724.968 1556.85,724.968L1552.23,716.282C1552.23,716.282 1551.99,719.454 1550,720.997C1549.57,721.333 1549.15,721.741 1548.67,722.12C1546.2,724.053 1542.99,726.344 1539.39,728.867C1535.06,731.898 1530.13,735.166 1525.19,738.438C1519.35,742.314 1513.52,746.234 1508.49,749.329C1505.74,751.023 1503.28,752.577 1501.13,753.598C1497.99,755.086 1495.28,753.617 1495.28,753.617L1500.86,762.056Z" style="fill:white;"/>
60
+ </g>
61
+ <g transform="matrix(4.96737,-1.14029,-1.16463,-3.72366,-3997,4993.28)">
62
+ <path d="M1496.17,759.473L1555.54,720.014" style="fill:none;"/>
63
+ </g>
64
+ <g transform="matrix(4.96737,-1.14029,-1.16463,-3.72366,-3997,4993.28)">
65
+ <path d="M1496.1,754.362C1496.1,754.362 1497.2,755.607 1501.13,753.598C1503.25,752.509 1505.74,751.023 1508.49,749.329C1513.52,746.234 1519.35,742.314 1525.19,738.438C1530.13,735.166 1534.94,731.832 1539.27,728.802C1542.87,726.279 1549.36,722.059 1549.81,721.75C1552.75,719.73 1552.18,718.196 1552.18,718.196L1555.28,724.152C1555.28,724.152 1553.77,722.905 1551.37,724.681C1550.93,725.006 1544.52,729.349 1540.82,731.68C1536.38,734.479 1531.45,737.766 1526.52,741.049C1520.68,744.94 1514.82,748.79 1509.98,752.255C1507.33,754.151 1504.89,755.771 1503.09,757.456C1499.47,760.841 1501.26,763.283 1501.26,763.283L1496.1,754.362Z" style="fill:white;"/>
66
+ </g>
67
+ </g>
68
+ <defs>
69
+ <linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-41.5984,155.247,-155.247,-41.5984,201.516,76.8392)"><stop offset="0" style="stop-color:rgb(255,143,0);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(254,0,255);stop-opacity:1"/></linearGradient>
70
+ <linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(155.247,-41.5984,41.5984,155.247,110.08,195.509)"><stop offset="0" style="stop-color:rgb(255,143,0);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(254,0,255);stop-opacity:1"/></linearGradient>
71
+ <linearGradient id="_Linear3" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-113.649,-113.649,113.649,-113.649,258.31,215.618)"><stop offset="0" style="stop-color:rgb(255,143,0);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(254,0,255);stop-opacity:1"/></linearGradient>
72
+ <linearGradient id="_Linear4" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-155.247,41.5984,-41.5984,-155.247,220.914,144.546)"><stop offset="0" style="stop-color:rgb(255,143,0);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(254,0,255);stop-opacity:1"/></linearGradient>
73
+ <linearGradient id="_Linear5" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-113.649,113.649,113.649,113.649,206.837,124.661)"><stop offset="0" style="stop-color:rgb(255,143,0);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(254,0,255);stop-opacity:1"/></linearGradient>
74
+ <linearGradient id="_Linear6" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-41.5984,-155.247,-155.247,41.5984,152.054,262.8)"><stop offset="0" style="stop-color:rgb(255,143,0);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(254,0,255);stop-opacity:1"/></linearGradient>
75
+ </defs>
76
+ </svg>
@@ -0,0 +1,17 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ height?: string | undefined;
5
+ width?: string | undefined;
6
+ };
7
+ events: {
8
+ [evt: string]: CustomEvent<any>;
9
+ };
10
+ slots: {};
11
+ };
12
+ export type ZitadelIconProps = typeof __propDef.props;
13
+ export type ZitadelIconEvents = typeof __propDef.events;
14
+ export type ZitadelIconSlots = typeof __propDef.slots;
15
+ export default class ZitadelIcon extends SvelteComponent<ZitadelIconProps, ZitadelIconEvents, ZitadelIconSlots> {
16
+ }
17
+ export {};
@@ -87,6 +87,9 @@ import GoogleCloudIcon from './GoogleCloudIcon.svelte';
87
87
  import CaCertificate from './CACertificate.svelte';
88
88
  import CurrencyApiIcon from './CurrencyApiIcon.svelte';
89
89
  import VismaIcon from './VismaIcon.svelte';
90
+ import JumpCloudIcon from './JumpCloudIcon.svelte';
91
+ import KeycloakIcon from './KeycloakIcon.svelte';
92
+ import ZitadelIcon from './ZitadelIcon.svelte';
90
93
  export declare const APP_TO_ICON_COMPONENT: {
91
94
  readonly postgresql: typeof PostgresIcon;
92
95
  readonly mysql: typeof Mysql;
@@ -181,5 +184,8 @@ export declare const APP_TO_ICON_COMPONENT: {
181
184
  readonly cacertificate: typeof CaCertificate;
182
185
  readonly currencyapi: typeof CurrencyApiIcon;
183
186
  readonly visma: typeof VismaIcon;
187
+ readonly jumpcloud: typeof JumpCloudIcon;
188
+ readonly keycloak: typeof KeycloakIcon;
189
+ readonly zitadel: typeof ZitadelIcon;
184
190
  };
185
- export { AirtableIcon, DbIcon, DiscordIcon, GcalIcon, GCloudIcon, GdriveIcon, GithubIcon, GitlabIcon, GmailIcon, GSheetsIcon, HttpIcon, Mail, MastodonIcon, MatrixIcon, Mysql, PostgresIcon, S3Icon, Slack, TogglIcon, WindmillIcon, 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, GraphqlIcon, NocoDbIcon, AzureIcon, MicrosoftIcon, OktaIcon, AuthentikIcon, AutheliaIcon, KanidmIcon, AsanaIcon, BitbucketIcon, DynatraceIcon, EdgeDbIcon, GitIcon, ZendeskIcon, TwilioIcon, TrelloIcon, ResendIcon, PushoverIcon, QuickbooksIcon, MsTeamsIcon, MailgunIcon, IpinfoIcon, GoogleCloudIcon, CaCertificate, CurrencyApiIcon };
191
+ export { AirtableIcon, DbIcon, DiscordIcon, GcalIcon, GCloudIcon, GdriveIcon, GithubIcon, GitlabIcon, GmailIcon, GSheetsIcon, HttpIcon, Mail, MastodonIcon, MatrixIcon, Mysql, PostgresIcon, S3Icon, Slack, TogglIcon, WindmillIcon, 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, GraphqlIcon, NocoDbIcon, AzureIcon, MicrosoftIcon, OktaIcon, AuthentikIcon, AutheliaIcon, KanidmIcon, AsanaIcon, BitbucketIcon, DynatraceIcon, EdgeDbIcon, GitIcon, ZendeskIcon, TwilioIcon, TrelloIcon, ResendIcon, PushoverIcon, QuickbooksIcon, MsTeamsIcon, MailgunIcon, IpinfoIcon, GoogleCloudIcon, CaCertificate, CurrencyApiIcon, VismaIcon, JumpCloudIcon, KeycloakIcon, ZitadelIcon };
@@ -87,6 +87,9 @@ import GoogleCloudIcon from './GoogleCloudIcon.svelte';
87
87
  import CaCertificate from './CACertificate.svelte';
88
88
  import CurrencyApiIcon from './CurrencyApiIcon.svelte';
89
89
  import VismaIcon from './VismaIcon.svelte';
90
+ import JumpCloudIcon from './JumpCloudIcon.svelte';
91
+ import KeycloakIcon from './KeycloakIcon.svelte';
92
+ import ZitadelIcon from './ZitadelIcon.svelte';
90
93
  export const APP_TO_ICON_COMPONENT = {
91
94
  postgresql: PostgresIcon,
92
95
  mysql: Mysql,
@@ -180,6 +183,9 @@ export const APP_TO_ICON_COMPONENT = {
180
183
  gcp_service_account: GoogleCloudIcon,
181
184
  cacertificate: CaCertificate,
182
185
  currencyapi: CurrencyApiIcon,
183
- visma: VismaIcon
186
+ visma: VismaIcon,
187
+ jumpcloud: JumpCloudIcon,
188
+ keycloak: KeycloakIcon,
189
+ zitadel: ZitadelIcon
184
190
  };
185
- export { AirtableIcon, DbIcon, DiscordIcon, GcalIcon, GCloudIcon, GdriveIcon, GithubIcon, GitlabIcon, GmailIcon, GSheetsIcon, HttpIcon, Mail, MastodonIcon, MatrixIcon, Mysql, PostgresIcon, S3Icon, Slack, TogglIcon, WindmillIcon, 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, GraphqlIcon, NocoDbIcon, AzureIcon, MicrosoftIcon, OktaIcon, AuthentikIcon, AutheliaIcon, KanidmIcon, AsanaIcon, BitbucketIcon, DynatraceIcon, EdgeDbIcon, GitIcon, ZendeskIcon, TwilioIcon, TrelloIcon, ResendIcon, PushoverIcon, QuickbooksIcon, MsTeamsIcon, MailgunIcon, IpinfoIcon, GoogleCloudIcon, CaCertificate, CurrencyApiIcon };
191
+ export { AirtableIcon, DbIcon, DiscordIcon, GcalIcon, GCloudIcon, GdriveIcon, GithubIcon, GitlabIcon, GmailIcon, GSheetsIcon, HttpIcon, Mail, MastodonIcon, MatrixIcon, Mysql, PostgresIcon, S3Icon, Slack, TogglIcon, WindmillIcon, 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, GraphqlIcon, NocoDbIcon, AzureIcon, MicrosoftIcon, OktaIcon, AuthentikIcon, AutheliaIcon, KanidmIcon, AsanaIcon, BitbucketIcon, DynatraceIcon, EdgeDbIcon, GitIcon, ZendeskIcon, TwilioIcon, TrelloIcon, ResendIcon, PushoverIcon, QuickbooksIcon, MsTeamsIcon, MailgunIcon, IpinfoIcon, GoogleCloudIcon, CaCertificate, CurrencyApiIcon, VismaIcon, JumpCloudIcon, KeycloakIcon, ZitadelIcon };
@@ -6,7 +6,7 @@ export interface Setting {
6
6
  ee_only?: string;
7
7
  tooltip?: string;
8
8
  key: string;
9
- fieldType: 'text' | 'number' | 'boolean' | 'password' | 'select' | 'textarea' | 'seconds' | 'email' | 'license_key' | 'object_store_config' | 'critical_error_channels';
9
+ fieldType: 'text' | 'number' | 'boolean' | 'password' | 'select' | 'textarea' | 'seconds' | 'email' | 'license_key' | 'object_store_config' | 'critical_error_channels' | 'slack_connect';
10
10
  storage: SettingStorage;
11
11
  isValid?: (value: any) => boolean;
12
12
  error?: string;
@@ -1,7 +1,7 @@
1
1
  export const settings = {
2
2
  Core: [
3
3
  {
4
- label: 'Base Url',
4
+ label: 'Base url',
5
5
  description: 'Public base url of the instance',
6
6
  key: 'base_url',
7
7
  fieldType: 'text',
@@ -24,7 +24,7 @@ export const settings = {
24
24
  placeholder: 'mail.windmill.com'
25
25
  },
26
26
  {
27
- label: 'Request Size Limit In MB',
27
+ label: 'Request size limit in MB',
28
28
  description: 'Maximum size of HTTP requests in MB.',
29
29
  cloudonly: true,
30
30
  key: 'request_size_limit_mb',
@@ -41,7 +41,7 @@ export const settings = {
41
41
  cloudonly: false
42
42
  },
43
43
  {
44
- label: 'Max Timeout for sync endpoints',
44
+ label: 'Max timeout for sync endpoints',
45
45
  key: 'timeout_wait_result',
46
46
  cloudonly: true,
47
47
  fieldType: 'seconds',
@@ -49,8 +49,8 @@ export const settings = {
49
49
  storage: 'config'
50
50
  },
51
51
  {
52
- label: 'License Key',
53
- description: 'License Key required to use the EE (switch image for windmill-ee)',
52
+ label: 'License key',
53
+ description: 'License key required to use the EE (switch image for windmill-ee)',
54
54
  key: 'license_key',
55
55
  fieldType: 'license_key',
56
56
  placeholder: 'only needed to prepare upgrade to EE',
@@ -65,7 +65,7 @@ export const settings = {
65
65
  ee_only: 'This is only relevant for EE'
66
66
  },
67
67
  {
68
- label: 'Retention Period in secs',
68
+ label: 'Retention period in secs',
69
69
  key: 'retention_period_secs',
70
70
  description: 'How long to keep the jobs data in the database (max 30 days on CE)',
71
71
  fieldType: 'seconds',
@@ -76,14 +76,14 @@ export const settings = {
76
76
  },
77
77
  {
78
78
  label: 'Expose metrics',
79
- description: 'Expose prometheus metrics for workers and servers on port 8001 at /metrics',
79
+ description: 'Expose Prometheus metrics for workers and servers on port 8001 at /metrics',
80
80
  key: 'expose_metrics',
81
81
  fieldType: 'boolean',
82
82
  storage: 'setting',
83
83
  ee_only: ''
84
84
  },
85
85
  {
86
- label: 'S3/Azure for Python/Go Cache & Large Logs',
86
+ label: 'S3/Azure for Python/Go cache & large logs',
87
87
  description: 'Bucket to store large logs and global cache for Python and Go.',
88
88
  key: 'object_store_cache_config',
89
89
  fieldType: 'object_store_config',
@@ -91,8 +91,8 @@ export const settings = {
91
91
  ee_only: ''
92
92
  },
93
93
  {
94
- label: 'Critical Alert Channels',
95
- description: 'Channels to send critical alerts to. SMTP must be configured for the email channel.',
94
+ label: 'Critical alert channels',
95
+ description: 'Channels to send critical alerts to. SMTP must be configured for the email channel. A Slack workspace must be connected to the instance for the Slack channel.',
96
96
  key: 'critical_error_channels',
97
97
  fieldType: 'critical_error_channels',
98
98
  storage: 'setting',
@@ -107,8 +107,8 @@ export const settings = {
107
107
  ee_only: ''
108
108
  },
109
109
  {
110
- label: 'Private hub base url',
111
- description: 'Base url of your private hub instance, without trailing slash',
110
+ label: 'Private Hub base url',
111
+ description: 'Base url of your private Hub instance, without trailing slash',
112
112
  placeholder: 'https://hub.company.com',
113
113
  key: 'hub_base_url',
114
114
  fieldType: 'text',
@@ -197,9 +197,18 @@ export const settings = {
197
197
  storage: 'config'
198
198
  }
199
199
  ],
200
+ Slack: [
201
+ {
202
+ label: 'Slack',
203
+ key: 'slack',
204
+ fieldType: 'slack_connect',
205
+ storage: 'setting',
206
+ ee_only: ''
207
+ }
208
+ ],
200
209
  'SCIM/SAML': [
201
210
  {
202
- label: 'SCIM Token',
211
+ label: 'SCIM token',
203
212
  description: 'Token used to authenticate requests from the IdP',
204
213
  key: 'scim_token',
205
214
  fieldType: 'text',
@@ -219,14 +228,14 @@ export const settings = {
219
228
  ],
220
229
  Debug: [
221
230
  {
222
- label: 'Keep Job Directories',
231
+ label: 'Keep job directories',
223
232
  key: 'keep_job_dir',
224
233
  fieldType: 'boolean',
225
234
  tooltip: 'Keep Job directories after execution at /tmp/windmill/<worker>/<job_id>',
226
235
  storage: 'setting'
227
236
  },
228
237
  {
229
- label: 'Expose Debug Metrics',
238
+ label: 'Expose debug metrics',
230
239
  key: 'expose_debug_metrics',
231
240
  fieldType: 'boolean',
232
241
  tooltip: 'Expose additional metrics (require metrics to be enabled)',
@@ -105,7 +105,19 @@ function computeJobKinds(jobKindsCat) {
105
105
  }
106
106
  }
107
107
  let loadingFetch = false;
108
- async function fetchJobs(startedBefore, startedAfter, startedAfterCompletedJobs) {
108
+ export async function loadExtraJobs() {
109
+ if (jobs && jobs.length > 0) {
110
+ const lastJob = jobs[jobs.length - 1];
111
+ // const minCreated = lastJob?.created_at
112
+ const minCreated = new Date(new Date(lastJob.created_at).getTime() - 1).toISOString();
113
+ let olderJobs = await fetchJobs(undefined, minTs, undefined, minCreated);
114
+ jobs = jobs.concat(olderJobs);
115
+ computeCompletedJobs();
116
+ return olderJobs?.length < 1000;
117
+ }
118
+ return false;
119
+ }
120
+ async function fetchJobs(startedBefore, startedAfter, startedAfterCompletedJobs, createdBefore) {
109
121
  loadingFetch = true;
110
122
  try {
111
123
  let scriptPathStart = folder === null || folder === '' ? undefined : `f/${folder}/`;
@@ -117,6 +129,7 @@ async function fetchJobs(startedBefore, startedAfter, startedAfterCompletedJobs)
117
129
  createdOrStartedAfterCompletedJobs: startedAfterCompletedJobs,
118
130
  schedulePath,
119
131
  scriptPathExact,
132
+ createdBefore,
120
133
  createdBy: user === null || user === '' ? undefined : user,
121
134
  scriptPathStart: scriptPathStart,
122
135
  jobKinds,
@@ -128,9 +141,7 @@ async function fetchJobs(startedBefore, startedAfter, startedAfterCompletedJobs)
128
141
  : undefined,
129
142
  isSkipped: isSkipped ? undefined : false,
130
143
  // isFlowStep: jobKindsCat != 'all' ? false : undefined,
131
- hasNullParent: scriptPathExact != undefined || scriptPathStart != undefined || jobKindsCat != 'all'
132
- ? true
133
- : undefined,
144
+ hasNullParent: jobKindsCat != 'all' ? true : undefined,
134
145
  label: label === null || label === '' ? undefined : label,
135
146
  tag: tag === null || tag === '' ? undefined : tag,
136
147
  isNotSchedule: showSchedules == false ? true : undefined,
@@ -229,7 +240,7 @@ async function loadJobsIntern(shouldGetCount) {
229
240
  // lookback won't be needed anymore (just filter ended_at > minTs instead
230
241
  const extendedMinTs = subtractDaysFromDateString(minTs, lookback);
231
242
  if (concurrencyKey == null || concurrencyKey === '') {
232
- let newJobs = await fetchJobs(maxTs, undefined, extendedMinTs);
243
+ let newJobs = await fetchJobs(maxTs, undefined, extendedMinTs, undefined);
233
244
  extendedJobs = { jobs: newJobs, obscured_jobs: [] };
234
245
  // Filter on minTs here and not in the backend
235
246
  // to get enough data for the concurrency graph
@@ -328,7 +339,7 @@ async function syncer() {
328
339
  loading = true;
329
340
  let newJobs;
330
341
  if (concurrencyKey == null || concurrencyKey === '') {
331
- newJobs = await fetchJobs(maxTs, minTs ?? ts, undefined);
342
+ newJobs = await fetchJobs(maxTs, minTs ?? ts, undefined, undefined);
332
343
  }
333
344
  else {
334
345
  // Obscured jobs have no ids, so we have to do the full request
@@ -39,6 +39,7 @@ declare const __propDef: {
39
39
  } | undefined) | undefined;
40
40
  lookback?: number | undefined;
41
41
  perPage?: number | undefined;
42
+ loadExtraJobs?: (() => Promise<boolean>) | undefined;
42
43
  loadJobs?: ((nMinTs: string | undefined, nMaxTs: string | undefined, reset: boolean, shouldGetCount?: boolean) => Promise<void>) | undefined;
43
44
  };
44
45
  events: {
@@ -50,6 +51,7 @@ export type JobLoaderProps = typeof __propDef.props;
50
51
  export type JobLoaderEvents = typeof __propDef.events;
51
52
  export type JobLoaderSlots = typeof __propDef.slots;
52
53
  export default class JobLoader extends SvelteComponent<JobLoaderProps, JobLoaderEvents, JobLoaderSlots> {
54
+ get loadExtraJobs(): () => Promise<boolean>;
53
55
  get loadJobs(): (nMinTs: string | undefined, nMaxTs: string | undefined, reset: boolean, shouldGetCount?: boolean | undefined) => Promise<void>;
54
56
  }
55
57
  export {};
@@ -193,14 +193,14 @@ function isJobCancelable(j) {
193
193
  {/if}
194
194
  </div>
195
195
  {#if containsLabel}
196
- <div class="w-3/12 flex justify-start">
196
+ <div class="w-3/12 flex justify-start px-0.5">
197
197
  {#if job && job?.['labels']}
198
198
  <div class="flex flex-row items-center gap-1 overflow-x-auto">
199
199
  {#if Array.isArray(job?.['labels'])}
200
200
  {#each job?.['labels'] as label}
201
201
  <Button
202
202
  variant="border"
203
- size="xs2"
203
+ size="xs3"
204
204
  btnClasses={twMerge(
205
205
  activeLabel == label ? 'bg-blue-50 dark:bg-blue-900/50' : '',
206
206
  '!text-2xs !font-normal truncate max-w-28'
@@ -209,9 +209,9 @@ function isJobCancelable(j) {
209
209
  on:click={() => {
210
210
  dispatch('filterByLabel', label)
211
211
  }}
212
+ endIcon={{ icon: ListFilter }}
212
213
  >
213
214
  {label}
214
- <ListFilter size={10} />
215
215
  </Button>
216
216
  {/each}
217
217
  {/if}
@@ -229,7 +229,7 @@ function isJobCancelable(j) {
229
229
  btnClasses="font-normal"
230
230
  on:click={() => scheduleEditor?.openEdit(job.schedule_path ?? '', job.job_kind == 'flow')}
231
231
  >
232
- <div class="truncate text-ellipsis text-left">
232
+ <div class="truncate text-ellipsis text-left" title={job.schedule_path}>
233
233
  {truncateRev(job.schedule_path, 20)}
234
234
  </div>
235
235
  </Button>
@@ -245,15 +245,15 @@ function isJobCancelable(j) {
245
245
  </div>
246
246
  {:else}
247
247
  <div class="flex flex-row gap-1 items-center">
248
- <div class="text-xs">
249
- {job.created_by}
248
+ <div class="text-xs truncate text-ellipsis text-left" title={job.created_by}>
249
+ {truncateRev(job.created_by ?? '', 20)}
250
250
  </div>
251
251
  {#if !isExternal}
252
252
  <Button
253
253
  size="xs2"
254
254
  color="light"
255
255
  on:click={() => {
256
- dispatch('filterByUser', job.created_by)
256
+ dispatch('filterByUser', job.created_by ?? '')
257
257
  }}
258
258
  >
259
259
  <ListFilter size={10} />
@@ -249,6 +249,7 @@ let tagTimeout = undefined;
249
249
  ></span
250
250
  >
251
251
 
252
+ <!-- svelte-ignore a11y-autofocus -->
252
253
  <input
253
254
  autofocus
254
255
  type="text"
@@ -290,6 +291,7 @@ let tagTimeout = undefined;
290
291
  </Tooltip></span
291
292
  >
292
293
 
294
+ <!-- svelte-ignore a11y-autofocus -->
293
295
  <input
294
296
  autofocus
295
297
  type="text"
@@ -323,6 +325,7 @@ let tagTimeout = undefined;
323
325
  {/if}
324
326
  <span class="text-xs absolute -top-4"> Tag </span>
325
327
 
328
+ <!-- svelte-ignore a11y-autofocus -->
326
329
  <input
327
330
  autofocus
328
331
  type="text"
@@ -356,6 +359,7 @@ let tagTimeout = undefined;
356
359
  {/if}
357
360
  <span class="text-xs absolute -top-4"> Schedule Path </span>
358
361
 
362
+ <!-- svelte-ignore a11y-autofocus -->
359
363
  <input
360
364
  autofocus
361
365
  type="text"
@@ -470,7 +474,7 @@ let tagTimeout = undefined;
470
474
  <CloseButton on:close={() => close(null)} />
471
475
  </svelte:fragment>
472
476
 
473
- <div class="w-80 flex flex-col gap-4">
477
+ <div class="w-102 flex flex-col gap-4">
474
478
  {#if mobile}
475
479
  <Label label="Filter by">
476
480
  <ToggleButtonGroup
@@ -603,6 +607,7 @@ let tagTimeout = undefined;
603
607
  </button>
604
608
  {/if}
605
609
 
610
+ <!-- svelte-ignore a11y-autofocus -->
606
611
  <input
607
612
  autofocus
608
613
  type="text"
@@ -637,6 +642,7 @@ let tagTimeout = undefined;
637
642
  </button>
638
643
  {/if}
639
644
 
645
+ <!-- svelte-ignore a11y-autofocus -->
640
646
  <input
641
647
  autofocus
642
648
  type="text"
@@ -671,6 +677,7 @@ let tagTimeout = undefined;
671
677
  </button>
672
678
  {/if}
673
679
 
680
+ <!-- svelte-ignore a11y-autofocus -->
674
681
  <input
675
682
  autofocus
676
683
  type="text"
@@ -16,6 +16,7 @@ export let selectedIds = [];
16
16
  export let selectedWorkspace = undefined;
17
17
  export let activeLabel = null;
18
18
  // const loadMoreQuantity: number = 100
19
+ export let lastFetchWentToEnd = false;
19
20
  function getTime(job) {
20
21
  return job['started_at'] ?? job['scheduled_for'] ?? job['created_at'];
21
22
  }
@@ -123,9 +124,12 @@ function selectAll() {
123
124
  let cancelableJobCount = 0;
124
125
  $: isSelectingJobsToCancel && (allSelected = selectedIds.length === cancelableJobCount);
125
126
  $: isSelectingJobsToCancel && (cancelableJobCount = jobs?.filter(isJobCancelable).length ?? 0);
126
- function jobCountString(jobCount) {
127
+ function jobCountString(jobCount, lastFetchWentToEnd) {
128
+ if (jobCount === undefined) {
129
+ return '';
130
+ }
127
131
  const jc = jobCount;
128
- const isTruncated = jc >= 1000;
132
+ const isTruncated = jc >= 1000 && !lastFetchWentToEnd;
129
133
  return `${jc}${isTruncated ? '+' : ''} job${jc != 1 ? 's' : ''}`;
130
134
  }
131
135
  function computeHeight() {
@@ -166,14 +170,14 @@ const dispatch = createEventDispatcher();
166
170
  {#if showExternalJobs && externalJobs.length > 0}
167
171
  <div class="w-1/12 text-2xs">
168
172
  <div class="flex flex-row">
169
- {jobs && jobCountString(jobs.length + externalJobs.length)}<Tooltip
170
- >{externalJobs.length} jobs obscured</Tooltip
171
- >
173
+ {jobs
174
+ ? jobCountString(jobs.length + externalJobs.length, lastFetchWentToEnd)
175
+ : ''}<Tooltip>{externalJobs.length} jobs obscured</Tooltip>
172
176
  </div>
173
177
  </div>
174
178
  {:else if $workspaceStore !== 'admins' && omittedObscuredJobs}
175
179
  <div class="w-1/12 text-2xs flex flex-row">
176
- {jobs && jobCountString(jobs.length)}
180
+ {jobs ? jobCountString(jobs.length, lastFetchWentToEnd) : ''}
177
181
  <Popover>
178
182
  <AlertTriangle size={16} class="ml-0.5 text-yellow-500" />
179
183
  <svelte:fragment slot="text">
@@ -183,9 +187,11 @@ const dispatch = createEventDispatcher();
183
187
  </Popover>
184
188
  </div>
185
189
  {:else}
186
- <div class="w-1/12 text-2xs">{jobs && jobCountString(jobs.length)}</div>
190
+ <div class="w-1/12 text-2xs"
191
+ >{jobs ? jobCountString(jobs.length, lastFetchWentToEnd) : ''}</div
192
+ >
187
193
  {/if}
188
- <div class="w-4/12 text-xs font-semibold">Timestamp</div>
194
+ <div class="w-4/12 text-xs font-semibold" />
189
195
  <div class="w-4/12 text-xs font-semibold">Path</div>
190
196
  {#if containsLabel}
191
197
  <div class="w-3/12 text-xs font-semibold">Label</div>
@@ -262,6 +268,22 @@ const dispatch = createEventDispatcher();
262
268
  </div>
263
269
  {/if}
264
270
  </div>
271
+ <div slot="footer"
272
+ >{#if !lastFetchWentToEnd && jobs && jobs.length >= 1000}
273
+ <button
274
+ class="text-xs text-blue-600 text-center w-full pb-2"
275
+ on:click={() => {
276
+ dispatch('loadExtra')
277
+ }}>Load next 1000 jobs</button
278
+ >
279
+ {/if}</div
280
+ >
265
281
  </VirtualList>
266
282
  {/if}
267
283
  </div>
284
+
285
+ <style>
286
+ :global(.virtual-list-wrapper:hover::-webkit-scrollbar) {
287
+ width: 8px !important;
288
+ height: 8px !important;
289
+ }</style>
@@ -10,6 +10,7 @@ declare const __propDef: {
10
10
  selectedIds?: string[] | undefined;
11
11
  selectedWorkspace?: string | undefined;
12
12
  activeLabel?: string | null | undefined;
13
+ lastFetchWentToEnd?: boolean | undefined;
13
14
  };
14
15
  events: {
15
16
  focus: FocusEvent;
@@ -20,6 +21,7 @@ declare const __propDef: {
20
21
  filterByConcurrencyKey: CustomEvent<any>;
21
22
  filterBySchedule: CustomEvent<any>;
22
23
  select: CustomEvent<any>;
24
+ loadExtra: CustomEvent<any>;
23
25
  } & {
24
26
  [evt: string]: CustomEvent<any>;
25
27
  };
@@ -202,9 +202,4 @@ function updateSchema() {
202
202
  input::-webkit-inner-spin-button {
203
203
  -webkit-appearance: none !important;
204
204
  margin: 0;
205
- }
206
-
207
- /* Firefox */
208
- input[type='number'] {
209
- -moz-appearance: textfield !important;
210
205
  }</style>
@@ -290,7 +290,7 @@ $: showInvites = invites?.length > 0 || (auto_invite_domain != undefined && !aut
290
290
  {#if filteredUsers}
291
291
  {#each filteredUsers.slice(0, nbDisplayed) as { email, username, is_admin, operator, disabled } (email)}
292
292
  <tr class="!hover:bg-surface-hover">
293
- <Cell first>{truncate(email, 20)}</Cell>
293
+ <Cell first><a href="mailto:{email}">{truncate(email, 20)}</a></Cell>
294
294
  <Cell>{truncate(username, 30)}</Cell>
295
295
  <Cell
296
296
  >{#if usage?.[email] != undefined}{usage?.[email]}{:else}<Loader2
@@ -1,6 +1,7 @@
1
1
  <script>import { classNames } from '../../utils';
2
2
  import { navigating, page } from '$app/stores';
3
3
  import Popover from '../Popover.svelte';
4
+ import { base } from '$app/paths';
4
5
  export let label;
5
6
  export let href;
6
7
  export let icon = undefined;
@@ -9,7 +10,7 @@ export let disabled = false;
9
10
  export let lightMode = false;
10
11
  let isSelected = false;
11
12
  navigating.subscribe(() => {
12
- if (href === '/') {
13
+ if (href === `${base}/`) {
13
14
  isSelected = $page.url.pathname === href;
14
15
  }
15
16
  else {
@@ -26,10 +26,13 @@ async function toggleSwitchWorkspace(id) {
26
26
  const isOnEditPage = editPages.some((editPage) => $page.route.id?.includes(editPage) ?? false);
27
27
  if (!isOnEditPage) {
28
28
  switchWorkspace(id);
29
+ if ($page.url.searchParams.get('workspace')) {
30
+ $page.url.searchParams.set('workspace', id);
31
+ }
29
32
  }
30
33
  else {
31
- await goto('/');
32
34
  switchWorkspace(id);
35
+ await goto('/');
33
36
  }
34
37
  }
35
38
  </script>