windmill-components 1.537.1 → 1.542.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.
- package/package/components/AIProviderPicker.svelte +181 -0
- package/package/components/AIProviderPicker.svelte.d.ts +15 -0
- package/package/components/ArgInfo.svelte +2 -2
- package/package/components/ArgInput.svelte +35 -9
- package/package/components/ArgInput.svelte.d.ts +3 -3
- package/package/components/AssignableTagsInner.svelte +89 -3
- package/package/components/ConcurrentJobsChart.svelte +36 -48
- package/package/components/ConcurrentJobsChart.svelte.d.ts +8 -20
- package/package/components/CustomPopover.svelte.d.ts +1 -1
- package/package/components/DropdownSelect.svelte +26 -0
- package/package/components/DropdownSelect.svelte.d.ts +11 -0
- package/package/components/DropdownV2Inner.svelte +1 -1
- package/package/components/{DynSelect.svelte → DynamicInput.svelte} +47 -15
- package/package/components/DynamicInput.svelte.d.ts +11 -0
- package/package/components/EditableSchemaForm.svelte +119 -95
- package/package/components/EditableSchemaForm.svelte.d.ts +4 -4
- package/package/components/Editor.svelte +86 -93
- package/package/components/Editor.svelte.d.ts +4 -3
- package/package/components/EditorBar.svelte +2 -5
- package/package/components/FlowBuilder.svelte +3 -3
- package/package/components/FlowLogRow.svelte +64 -0
- package/package/components/FlowLogRow.svelte.d.ts +15 -0
- package/package/components/FlowLogViewer.svelte +406 -373
- package/package/components/FlowLogViewer.svelte.d.ts +5 -1
- package/package/components/FlowLogViewerWrapper.svelte +44 -1
- package/package/components/FlowLoopIterationPreview.svelte.d.ts +1 -1
- package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
- package/package/components/FlowStatusViewerInner.svelte +34 -3
- package/package/components/FolderPicker.svelte +1 -1
- package/package/components/InputTransformForm.svelte +20 -10
- package/package/components/JobArgs.svelte +1 -1
- package/package/components/JobLoader.svelte.d.ts +1 -1
- package/package/components/JobStatus.svelte +2 -0
- package/package/components/LogSnippetViewer.svelte +3 -3
- package/package/components/LogSnippetViewer.svelte.d.ts +1 -1
- package/package/components/LogViewer.svelte +87 -71
- package/package/components/LogViewer.svelte.d.ts +1 -0
- package/package/components/Path.svelte +7 -1
- package/package/components/Path.svelte.d.ts +1 -1
- package/package/components/PrefixedInput.svelte +120 -0
- package/package/components/PrefixedInput.svelte.d.ts +8 -0
- package/package/components/QueuePosition.svelte +81 -0
- package/package/components/QueuePosition.svelte.d.ts +8 -0
- package/package/components/ResourceNarrowing.svelte +13 -0
- package/package/components/ResourceNarrowing.svelte.d.ts +6 -0
- package/package/components/ResourceTypePicker.svelte +49 -74
- package/package/components/RunChart.svelte +74 -89
- package/package/components/RunChart.svelte.d.ts +10 -22
- package/package/components/S3FilePicker.svelte +1 -1
- package/package/components/SchemaForm.svelte.d.ts +2 -2
- package/package/components/ScriptBuilder.svelte +2 -1
- package/package/components/ScriptEditor.svelte +4 -3
- package/package/components/ScriptEditor.svelte.d.ts +2 -1
- package/package/components/ServiceLogsInner.svelte +1 -1
- package/package/components/ShareModal.svelte.d.ts +1 -1
- package/package/components/SimpleEditor.svelte +4 -67
- package/package/components/StringTypeNarrowing.svelte +5 -10
- package/package/components/TemplateEditor.svelte +2 -16
- package/package/components/TimeAgo.svelte +1 -1
- package/package/components/TimeAgo.svelte.d.ts +1 -0
- package/package/components/Toggle.svelte +2 -1
- package/package/components/Toggle.svelte.d.ts +2 -1
- package/package/components/WorkerRepl.svelte +1 -1
- package/package/components/apps/components/display/AppNavbarItem.svelte +2 -1
- package/package/components/apps/components/display/table/AppAggridTable.svelte +44 -48
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte +101 -19
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte.d.ts +5 -2
- package/package/components/apps/components/display/table/utils.js +36 -5
- package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +10 -5
- package/package/components/apps/editor/AppEditor.svelte +4 -3
- package/package/components/apps/editor/AppEditorHeader.svelte +0 -1
- package/package/components/apps/editor/GridViewer.svelte.d.ts +11 -4
- package/package/components/apps/editor/SettingsPanel.svelte +2 -2
- package/package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +26 -3
- package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -5
- package/package/components/apps/svelte-grid/Grid.svelte.d.ts +30 -11
- package/package/components/assets/JobAssetsViewer.svelte +28 -24
- package/package/components/auditLogs/AuditLogsTable.svelte +2 -6
- package/package/components/chartjs-wrappers/Chart.svelte.d.ts +14 -7
- package/package/components/common/OnChange.svelte.d.ts +11 -4
- package/package/components/common/badge/Badge.svelte +9 -2
- package/package/components/common/badge/Badge.svelte.d.ts +2 -1
- package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -1
- package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +5 -4
- package/package/components/common/drawer/Disposable.svelte +9 -11
- package/package/components/common/drawer/Drawer.svelte +3 -4
- package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
- package/package/components/common/menu/MenuItem.svelte.d.ts +2 -2
- package/package/components/common/modal/Modal.svelte.d.ts +1 -1
- package/package/components/common/tabs/TabContent.svelte +2 -7
- package/package/components/common/tabs/TabContent.svelte.d.ts +5 -27
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +9 -3
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
- package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +8 -4
- package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +1 -0
- package/package/components/copilot/MetadataGen.svelte +1 -1
- package/package/components/copilot/chat/AIChatManager.svelte.js +24 -102
- package/package/components/copilot/chat/AssistantMessage.svelte +0 -4
- package/package/components/copilot/chat/anthropic.d.ts +15 -0
- package/package/components/copilot/chat/anthropic.js +208 -0
- package/package/components/copilot/chat/api/apiTools.d.ts +2 -2
- package/package/components/copilot/chat/api/apiTools.js +10 -7
- package/package/components/copilot/chat/api/core.d.ts +1 -1
- package/package/components/copilot/chat/api/core.js +7 -2
- package/package/components/copilot/chat/ask/core.d.ts +1 -1
- package/package/components/copilot/chat/ask/core.js +7 -2
- package/package/components/copilot/chat/flow/core.d.ts +1 -1
- package/package/components/copilot/chat/flow/core.js +14 -4
- package/package/components/copilot/chat/monaco-adapter.d.ts +6 -5
- package/package/components/copilot/chat/navigator/core.d.ts +1 -1
- package/package/components/copilot/chat/navigator/core.js +7 -2
- package/package/components/copilot/chat/script/CodeDisplay.svelte +10 -111
- package/package/components/copilot/chat/script/core.d.ts +5 -4
- package/package/components/copilot/chat/script/core.js +131 -19
- package/package/components/copilot/chat/shared.d.ts +7 -7
- package/package/components/copilot/lib.d.ts +29 -8
- package/package/components/copilot/lib.js +199 -24
- package/package/components/flows/content/FlowInput.svelte +5 -5
- package/package/components/flows/content/FlowModuleComponent.svelte +5 -2
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +47 -17
- package/package/components/flows/content/FlowModuleSleep.svelte +4 -1
- package/package/components/flows/content/FlowModuleSuspend.svelte +0 -1
- package/package/components/flows/content/FlowModuleTimeout.svelte +50 -10
- package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowRetries.svelte +108 -3
- package/package/components/flows/content/FlowRetries.svelte.d.ts +3 -2
- package/package/components/flows/flowInfers.js +8 -35
- package/package/components/flows/flowStore.d.ts +45 -1
- package/package/components/flows/flowStore.js +1 -1
- package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +61 -54
- package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -1
- package/package/components/flows/map/FlowModuleSchemaItemViewer.svelte +1 -1
- package/package/components/flows/map/InsertModuleButton.svelte +1 -0
- package/package/components/flows/map/InsertModuleInner.svelte +12 -15
- package/package/components/flows/map/InsertModuleInner.svelte.d.ts +10 -9
- package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +1 -1
- package/package/components/git_sync/DetectionFlow.svelte +15 -17
- package/package/components/git_sync/GitSyncContext.svelte.js +1 -1
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +0 -1
- package/package/components/graph/graphBuilder.svelte.d.ts +5 -1
- package/package/components/graph/renderers/edges/BaseEdge.svelte +9 -1
- package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +4 -1
- package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -3
- package/package/components/graph/renderers/nodes/BranchOneStart.svelte +2 -3
- package/package/components/graph/renderers/triggers/TriggerButton.svelte.d.ts +1 -1
- package/package/components/graph/renderers/triggers/TriggersBadge.svelte +3 -1
- package/package/components/graph/renderers/triggers/TriggersWrapper.svelte +34 -24
- package/package/components/graph/renderers/triggers/TriggersWrapper.svelte.d.ts +1 -2
- package/package/components/home/ItemsList.svelte +17 -13
- package/package/components/home/TreeView.svelte +21 -27
- package/package/components/home/TreeView.svelte.d.ts +2 -29
- package/package/components/home/TreeViewRoot.svelte +11 -23
- package/package/components/home/TreeViewRoot.svelte.d.ts +15 -13
- package/package/components/icons/GitIcon.svelte +10 -2
- package/package/components/icons/GitIcon.svelte.d.ts +1 -0
- package/package/components/meltComponents/MeltButton.svelte.d.ts +1 -1
- package/package/components/meltComponents/Popover.svelte +23 -3
- package/package/components/meltComponents/Popover.svelte.d.ts +2 -1
- package/package/components/monacoLanguagesOptions.d.ts +3 -0
- package/package/components/monacoLanguagesOptions.js +109 -0
- package/package/components/propertyPicker/ObjectViewer.svelte +7 -2
- package/package/components/propertyPicker/PropPicker.svelte +1 -1
- package/package/components/propertyPicker/utils.js +14 -7
- package/package/components/runs/JobRunsPreview.svelte +212 -177
- package/package/components/runs/JobsLoader.svelte +2 -2
- package/package/components/runs/JobsLoader.svelte.d.ts +1 -1
- package/package/components/runs/NoWorkerWithTagWarning.svelte +18 -5
- package/package/components/runs/RunBadges.svelte +100 -0
- package/package/components/runs/RunBadges.svelte.d.ts +12 -0
- package/package/components/runs/RunLabels.svelte +86 -0
- package/package/components/runs/RunLabels.svelte.d.ts +10 -0
- package/package/components/runs/RunOption.svelte +20 -0
- package/package/components/runs/RunOption.svelte.d.ts +10 -0
- package/package/components/runs/RunRow.svelte +239 -151
- package/package/components/runs/RunRow.svelte.d.ts +12 -9
- package/package/components/runs/RunsBatchActionsDropdown.svelte +13 -17
- package/package/components/runs/RunsBatchActionsDropdown.svelte.d.ts +5 -18
- package/package/components/runs/RunsFilter.svelte +369 -243
- package/package/components/runs/RunsFilter.svelte.d.ts +2 -0
- package/package/components/runs/RunsQueue.svelte +96 -25
- package/package/components/runs/RunsQueue.svelte.d.ts +7 -21
- package/package/components/runs/RunsTable.svelte +62 -71
- package/package/components/runs/RunsTable.svelte.d.ts +2 -1
- package/package/components/runs/runs-grid.css +95 -0
- package/package/components/schema/EditableSchemaDrawer.svelte +12 -12
- package/package/components/schema/FlowPropertyEditor.svelte +197 -206
- package/package/components/schema/PropertyEditor.svelte +33 -35
- package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -2
- package/package/components/search/GlobalSearchModal.svelte +8 -1
- package/package/components/select/DraggableTags.svelte.d.ts +17 -7
- package/package/components/select/MultiSelect.svelte.d.ts +21 -11
- package/package/components/select/Select.svelte +2 -1
- package/package/components/select/Select.svelte.d.ts +25 -13
- package/package/components/select/SelectDropdown.svelte.d.ts +14 -7
- package/package/components/settings/TokenDisplay.svelte +1 -1
- package/package/components/sidebar/OperatorMenu.svelte +5 -0
- package/package/components/sidebar/SidebarContent.svelte +48 -2
- package/package/components/sidebar/WorkspaceMenu.svelte +116 -17
- package/package/components/toast.js +6 -3
- package/package/components/triggers/AddTriggersButton.svelte +7 -6
- package/package/components/triggers/CaptureWrapper.svelte +19 -3
- package/package/components/triggers/TriggerLabel.svelte +8 -0
- package/package/components/triggers/TriggerTokens.svelte +1 -1
- package/package/components/triggers/TriggersEditor.svelte +9 -5
- package/package/components/triggers/TriggersTable.svelte +2 -2
- package/package/components/triggers/TriggersWrapper.svelte +16 -5
- package/package/components/triggers/TriggersWrapper.svelte.d.ts +3 -19
- package/package/components/{details/EmailTriggerCaptures.svelte → triggers/email/DefaultEmailCapture.svelte} +5 -5
- package/package/components/{details/EmailTriggerCaptures.svelte.d.ts → triggers/email/DefaultEmailCapture.svelte.d.ts} +4 -4
- package/package/components/{details/EmailTriggerConfigSection.svelte → triggers/email/DefaultEmailConfigSection.svelte} +24 -14
- package/package/components/triggers/email/DefaultEmailConfigSection.svelte.d.ts +13 -0
- package/package/components/triggers/email/DefaultEmailPanel.svelte +71 -0
- package/package/components/triggers/email/DefaultEmailPanel.svelte.d.ts +11 -0
- package/package/components/triggers/email/EmailCapture.svelte +39 -0
- package/package/components/triggers/email/EmailCapture.svelte.d.ts +43 -0
- package/package/components/triggers/email/EmailTriggerEditor.svelte +20 -0
- package/package/components/triggers/email/EmailTriggerEditor.svelte.d.ts +11 -0
- package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte +133 -0
- package/package/components/triggers/email/EmailTriggerEditorConfigSection.svelte.d.ts +14 -0
- package/package/components/triggers/email/EmailTriggerEditorInner.svelte +335 -0
- package/package/components/triggers/email/EmailTriggerEditorInner.svelte.d.ts +22 -0
- package/package/components/triggers/email/EmailTriggerPanel.svelte +61 -0
- package/package/components/triggers/email/EmailTriggerPanel.svelte.d.ts +14 -0
- package/package/components/triggers/email/utils.d.ts +4 -0
- package/package/components/triggers/email/utils.js +52 -0
- package/package/components/triggers/http/RouteEditorConfigSection.svelte +1 -1
- package/package/components/triggers/http/utils.js +1 -1
- package/package/components/triggers/triggers.svelte.d.ts +1 -0
- package/package/components/triggers/triggers.svelte.js +24 -2
- package/package/components/triggers/utils.js +19 -5
- package/package/components/triggers.d.ts +1 -1
- package/package/components/triggers.js +2 -0
- package/package/components/wizards/AgGridWizard.svelte +85 -80
- package/package/components/workspaceSettings/AISettings.svelte +74 -22
- package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
- package/package/components/workspaceSettings/CreateWorkspace.svelte +395 -0
- package/package/components/workspaceSettings/CreateWorkspace.svelte.d.ts +6 -0
- package/package/components/workspaceSettings/DucklakeSettings.svelte +3 -1
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +1 -1
- package/package/components/workspaceSettings/StorageSettings.svelte +69 -48
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +142 -3
- package/package/gen/schemas.gen.js +144 -3
- package/package/gen/services.gen.d.ts +129 -1
- package/package/gen/services.gen.js +267 -1
- package/package/gen/types.gen.d.ts +434 -8
- package/package/hubPaths.json +4 -2
- package/package/infer.js +1 -1
- package/package/keyboardChain.d.ts +5 -0
- package/package/keyboardChain.js +40 -0
- package/package/services/JobManager.js +2 -2
- package/package/stores.d.ts +3 -1
- package/package/stores.js +8 -5
- package/package/utils/workspaceHierarchy.d.ts +27 -0
- package/package/utils/workspaceHierarchy.js +101 -0
- package/package/utils.d.ts +6 -3
- package/package/utils.js +30 -15
- package/package/workspace_settings.js +2 -3
- package/package.json +9 -11
- package/package/components/DynSelect.svelte.d.ts +0 -11
- package/package/components/ObjectTypeNarrowing.svelte +0 -18
- package/package/components/ObjectTypeNarrowing.svelte.d.ts +0 -22
- package/package/components/details/DetailPageTriggerPanel.svelte +0 -121
- package/package/components/details/DetailPageTriggerPanel.svelte.d.ts +0 -20
- package/package/components/details/EmailTriggerConfigSection.svelte.d.ts +0 -12
- package/package/components/details/EmailTriggerPanel.svelte +0 -76
- package/package/components/details/EmailTriggerPanel.svelte.d.ts +0 -26
|
@@ -21,6 +21,8 @@ interface Props {
|
|
|
21
21
|
folders?: string[];
|
|
22
22
|
allWorkspaces?: boolean;
|
|
23
23
|
filterBy?: 'path' | 'user' | 'folder' | 'label' | 'concurrencyKey' | 'worker' | 'tag' | 'schedulePath';
|
|
24
|
+
small?: boolean;
|
|
25
|
+
calendarSmall?: boolean;
|
|
24
26
|
}
|
|
25
27
|
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> {
|
|
26
28
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
@@ -1,32 +1,103 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
import Tooltip from '../Tooltip.svelte';
|
|
7
|
-
export let queue_count = undefined;
|
|
8
|
-
export let suspended_count = undefined;
|
|
9
|
-
export let success;
|
|
10
|
-
const dispatch = createEventDispatcher();
|
|
1
|
+
<script lang="ts">import { Button } from '../common';
|
|
2
|
+
import { Bot, Hourglass, ListFilterPlus, X } from 'lucide-svelte';
|
|
3
|
+
import RunOption from './RunOption.svelte';
|
|
4
|
+
import { Popover } from '../meltComponents';
|
|
5
|
+
let { queue_count = undefined, suspended_count = undefined, success, small = false, onJobsWaiting, onJobsSuspended } = $props();
|
|
11
6
|
</script>
|
|
12
7
|
|
|
13
|
-
<div class="flex
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
8
|
+
<div class="flex flex-row gap-4 items-center">
|
|
9
|
+
{#if small}
|
|
10
|
+
<Popover contentClasses="p-4" openOnHover debounceDelay={100}>
|
|
11
|
+
{#snippet trigger()}
|
|
12
|
+
<div class="relative">
|
|
13
|
+
<Bot size={16} />
|
|
14
|
+
{#if queue_count && ($queue_count ?? 0) > 0}
|
|
15
|
+
<div
|
|
16
|
+
class="absolute top-0 right-0 translate-x-1/2 -translate-y-1/2 bg-yellow-500 rounded-full text-white text-xs h-4 min-w-4"
|
|
17
|
+
>
|
|
18
|
+
{queue_count ? ($queue_count ?? 0).toFixed(0) : '...'}
|
|
19
|
+
</div>
|
|
20
|
+
{/if}
|
|
21
|
+
</div>
|
|
22
|
+
{/snippet}
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
{#snippet content()}
|
|
25
|
+
{@render queuedContent()}
|
|
26
|
+
{/snippet}
|
|
27
|
+
</Popover>
|
|
28
|
+
{:else}
|
|
29
|
+
{@render queuedContent()}
|
|
30
|
+
{/if}
|
|
31
|
+
|
|
32
|
+
{#if small}
|
|
33
|
+
<Popover contentClasses="p-4" openOnHover debounceDelay={100}>
|
|
34
|
+
{#snippet trigger()}
|
|
35
|
+
<div class="relative">
|
|
36
|
+
<Hourglass size={16} />
|
|
37
|
+
<div
|
|
38
|
+
class="absolute top-0 right-0 translate-x-1/2 -translate-y-1/2 bg-surface-secondary-inverse rounded-full text-primary-inverse text-xs h-4 min-w-4"
|
|
39
|
+
>
|
|
40
|
+
{suspended_count ? ($suspended_count ?? 0).toFixed(0) : '...'}
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
{/snippet}
|
|
44
|
+
{#snippet content()}
|
|
45
|
+
{@render suspendedContent()}
|
|
46
|
+
{/snippet}
|
|
47
|
+
</Popover>
|
|
48
|
+
{:else}
|
|
49
|
+
{@render suspendedContent()}
|
|
50
|
+
{/if}
|
|
22
51
|
</div>
|
|
23
52
|
|
|
24
|
-
{#
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
53
|
+
{#snippet queuedContent()}
|
|
54
|
+
<RunOption label="Waiting for workers">
|
|
55
|
+
{#snippet tooltip()}
|
|
56
|
+
Jobs waiting for a worker being available to be executed
|
|
57
|
+
{/snippet}
|
|
58
|
+
<div
|
|
59
|
+
class={queue_count && ($queue_count ?? 0) > 0
|
|
60
|
+
? 'bg-yellow-500 text-white rounded-full w-6 h-6 flex center-center'
|
|
61
|
+
: ''}>{queue_count ? ($queue_count ?? 0).toFixed(0) : '...'}</div
|
|
62
|
+
>
|
|
28
63
|
<div class="truncate text-2xs !text-secondary mt-0.5">
|
|
29
|
-
|
|
64
|
+
<Button size="xs2" color="light" on:click={() => onJobsWaiting?.()}>
|
|
65
|
+
{#if success == 'waiting'}
|
|
66
|
+
<div class="flex flex-row items-center gap-1">
|
|
67
|
+
Reset filter
|
|
68
|
+
<X size={12} />
|
|
69
|
+
</div>
|
|
70
|
+
{:else}
|
|
71
|
+
<ListFilterPlus size={14} />
|
|
72
|
+
{/if}
|
|
73
|
+
</Button>
|
|
30
74
|
</div>
|
|
31
|
-
</
|
|
32
|
-
{/
|
|
75
|
+
</RunOption>
|
|
76
|
+
{/snippet}
|
|
77
|
+
|
|
78
|
+
{#snippet suspendedContent()}
|
|
79
|
+
{#if suspended_count && ($suspended_count ?? 0) > 0}
|
|
80
|
+
<RunOption label="Suspended">
|
|
81
|
+
{#snippet tooltip()}
|
|
82
|
+
Jobs waiting for an event or approval before being resumed
|
|
83
|
+
{/snippet}
|
|
84
|
+
<div
|
|
85
|
+
class={suspended_count && ($suspended_count ?? 0) > 0
|
|
86
|
+
? 'bg-surface-secondary-inverse text-primary-inverse rounded-full w-6 h-6 flex center-center'
|
|
87
|
+
: ''}>{suspended_count ? ($suspended_count ?? 0).toFixed(0) : '...'}</div
|
|
88
|
+
>
|
|
89
|
+
<div class="truncate text-2xs !text-secondary">
|
|
90
|
+
<Button size="xs2" color="light" on:click={() => onJobsSuspended?.()}>
|
|
91
|
+
{#if success == 'suspended'}
|
|
92
|
+
<div class="flex flex-row items-center gap-1">
|
|
93
|
+
Reset filter
|
|
94
|
+
<X size={12} />
|
|
95
|
+
</div>
|
|
96
|
+
{:else}
|
|
97
|
+
<ListFilterPlus size={14} />
|
|
98
|
+
{/if}
|
|
99
|
+
</Button>
|
|
100
|
+
</div>
|
|
101
|
+
</RunOption>
|
|
102
|
+
{/if}
|
|
103
|
+
{/snippet}
|
|
@@ -1,26 +1,12 @@
|
|
|
1
1
|
import type { Tweened } from 'svelte/motion';
|
|
2
|
-
interface
|
|
3
|
-
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
4
|
-
$$bindings?: Bindings;
|
|
5
|
-
} & Exports;
|
|
6
|
-
(internal: unknown, props: Props & {
|
|
7
|
-
$$events?: Events;
|
|
8
|
-
$$slots?: Slots;
|
|
9
|
-
}): Exports & {
|
|
10
|
-
$set?: any;
|
|
11
|
-
$on?: any;
|
|
12
|
-
};
|
|
13
|
-
z_$$bindings?: Bindings;
|
|
14
|
-
}
|
|
15
|
-
declare const RunsQueue: $$__sveltets_2_IsomorphicComponent<{
|
|
2
|
+
interface Props {
|
|
16
3
|
queue_count?: Tweened<number> | undefined;
|
|
17
4
|
suspended_count?: Tweened<number> | undefined;
|
|
18
5
|
success: string | undefined;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
type RunsQueue = InstanceType<typeof RunsQueue>;
|
|
6
|
+
small?: boolean;
|
|
7
|
+
onJobsWaiting?: () => void;
|
|
8
|
+
onJobsSuspended?: () => void;
|
|
9
|
+
}
|
|
10
|
+
declare const RunsQueue: import("svelte").Component<Props, {}, "">;
|
|
11
|
+
type RunsQueue = ReturnType<typeof RunsQueue>;
|
|
26
12
|
export default RunsQueue;
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
<script lang="ts">import
|
|
2
|
-
const bubble = createBubbler();
|
|
3
|
-
import RunRow from './RunRow.svelte';
|
|
1
|
+
<script lang="ts">import RunRow from './RunRow.svelte';
|
|
4
2
|
import VirtualList from '@tutorlatin/svelte-tiny-virtual-list';
|
|
5
3
|
import { createEventDispatcher, onMount } from 'svelte';
|
|
6
4
|
import Tooltip from '../Tooltip.svelte';
|
|
7
5
|
import { AlertTriangle } from 'lucide-svelte';
|
|
8
6
|
import Popover from '../Popover.svelte';
|
|
9
7
|
import { workspaceStore } from '../../stores';
|
|
10
|
-
import
|
|
11
|
-
import { isJobSelectable } from '../../utils';
|
|
8
|
+
import './runs-grid.css';
|
|
12
9
|
let { jobs = undefined, externalJobs = [], omittedObscuredJobs, showExternalJobs = false, selectionMode = false, selectedIds = $bindable([]), selectedWorkspace = $bindable(undefined), activeLabel = null, lastFetchWentToEnd = $bindable(false) } = $props();
|
|
13
10
|
function getTime(job) {
|
|
14
11
|
return job['started_at'] ?? job['scheduled_for'] ?? job['created_at'];
|
|
@@ -81,26 +78,6 @@ function infiniteHandler({ detail: { loaded, error, complete } }) {
|
|
|
81
78
|
}
|
|
82
79
|
}
|
|
83
80
|
*/
|
|
84
|
-
let selectableJobCount = $derived.by(() => {
|
|
85
|
-
if (!selectionMode)
|
|
86
|
-
return 0;
|
|
87
|
-
return jobs?.filter(isJobSelectable(selectionMode)).length ?? 0;
|
|
88
|
-
});
|
|
89
|
-
let allSelected = $derived.by(() => {
|
|
90
|
-
return selectionMode && selectedIds.length === selectableJobCount;
|
|
91
|
-
});
|
|
92
|
-
function selectAll() {
|
|
93
|
-
if (!selectionMode)
|
|
94
|
-
return;
|
|
95
|
-
if (allSelected) {
|
|
96
|
-
allSelected = false;
|
|
97
|
-
selectedIds = [];
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
allSelected = true;
|
|
101
|
-
selectedIds = jobs?.filter(isJobSelectable(selectionMode)).map((j) => j.id) ?? [];
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
81
|
function jobCountString(jobCount, lastFetchWentToEnd) {
|
|
105
82
|
if (jobCount === undefined) {
|
|
106
83
|
return '';
|
|
@@ -148,64 +125,66 @@ let stickyIndices = $derived.by(() => {
|
|
|
148
125
|
}
|
|
149
126
|
return nstickyIndices;
|
|
150
127
|
});
|
|
128
|
+
const showTag = $derived(containerWidth > 700);
|
|
151
129
|
</script>
|
|
152
130
|
|
|
153
131
|
<svelte:window onresize={() => computeHeight()} />
|
|
154
132
|
|
|
155
133
|
<div
|
|
156
|
-
class="divide-y min-w-[
|
|
134
|
+
class="divide-y h-full border min-w-[650px]"
|
|
157
135
|
id="runs-table-wrapper"
|
|
158
136
|
bind:clientWidth={containerWidth}
|
|
159
137
|
>
|
|
160
138
|
<div bind:clientHeight={headerHeight}>
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
{#if showExternalJobs && externalJobs.length > 0}
|
|
180
|
-
<div class="w-1/12 text-2xs">
|
|
139
|
+
<div
|
|
140
|
+
class="grid bg-surface-secondary sticky top-0 w-full py-2 pr-4"
|
|
141
|
+
class:grid-runs-table={!containsLabel && !selectionMode && showTag}
|
|
142
|
+
class:grid-runs-table-with-labels={containsLabel && !selectionMode && showTag}
|
|
143
|
+
class:grid-runs-table-selection={!containsLabel && selectionMode && showTag}
|
|
144
|
+
class:grid-runs-table-with-labels-selection={containsLabel && selectionMode && showTag}
|
|
145
|
+
class:grid-runs-table-no-tag={!containsLabel && !selectionMode && !showTag}
|
|
146
|
+
class:grid-runs-table-with-labels-no-tag={containsLabel && !selectionMode && !showTag}
|
|
147
|
+
class:grid-runs-table-selection-no-tag={!containsLabel && selectionMode && !showTag}
|
|
148
|
+
class:grid-runs-table-with-labels-selection-no-tag={containsLabel &&
|
|
149
|
+
selectionMode &&
|
|
150
|
+
!showTag}
|
|
151
|
+
>
|
|
152
|
+
{#if selectionMode}
|
|
153
|
+
<div class="text-xs font-semibold pl-4"></div>
|
|
154
|
+
{/if}
|
|
155
|
+
<div class="text-2xs px-2 flex flex-row items-center gap-2">
|
|
156
|
+
{#if showExternalJobs && externalJobs.length > 0}
|
|
181
157
|
<div class="flex flex-row">
|
|
182
158
|
{jobs
|
|
183
159
|
? jobCountString(jobs.length + externalJobs.length, lastFetchWentToEnd)
|
|
184
160
|
: ''}<Tooltip>{externalJobs.length} jobs obscured</Tooltip>
|
|
185
161
|
</div>
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
162
|
+
{:else if $workspaceStore !== 'admins' && omittedObscuredJobs}
|
|
163
|
+
<div class="flex flex-row">
|
|
164
|
+
{jobs ? jobCountString(jobs.length, lastFetchWentToEnd) : ''}
|
|
165
|
+
<Popover>
|
|
166
|
+
<AlertTriangle size={16} class="ml-0.5 text-yellow-500" />
|
|
167
|
+
{#snippet text()}
|
|
168
|
+
Too specific filtering may have caused the omission of obscured jobs. This is done
|
|
169
|
+
for security reasons. To see obscured jobs, try removing some filters.
|
|
170
|
+
{/snippet}
|
|
171
|
+
</Popover>
|
|
172
|
+
</div>
|
|
173
|
+
{:else}
|
|
189
174
|
{jobs ? jobCountString(jobs.length, lastFetchWentToEnd) : ''}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
{/snippet}
|
|
196
|
-
</Popover>
|
|
197
|
-
</div>
|
|
198
|
-
{:else}
|
|
199
|
-
<div class="w-1/12 text-2xs"
|
|
200
|
-
>{jobs ? jobCountString(jobs.length, lastFetchWentToEnd) : ''}</div
|
|
201
|
-
>
|
|
202
|
-
{/if}
|
|
203
|
-
<div class="w-4/12 text-xs font-semibold"></div>
|
|
204
|
-
<div class="w-4/12 text-xs font-semibold">Path</div>
|
|
175
|
+
{/if}
|
|
176
|
+
</div>
|
|
177
|
+
<div class="text-xs font-semibold">Started</div>
|
|
178
|
+
<div class="text-xs font-semibold">Duration</div>
|
|
179
|
+
<div class="text-xs font-semibold">Path</div>
|
|
205
180
|
{#if containsLabel}
|
|
206
|
-
<div class="
|
|
181
|
+
<div class="text-xs font-semibold">Label</div>
|
|
182
|
+
{/if}
|
|
183
|
+
<div class="text-xs font-semibold">Triggered by</div>
|
|
184
|
+
{#if showTag}
|
|
185
|
+
<div class="text-xs font-semibold">Tag</div>
|
|
207
186
|
{/if}
|
|
208
|
-
<div class="
|
|
187
|
+
<div class=""></div>
|
|
209
188
|
</div>
|
|
210
189
|
</div>
|
|
211
190
|
{#if jobs?.length == 0 && (!showExternalJobs || externalJobs?.length == 0)}
|
|
@@ -222,20 +201,23 @@ let stickyIndices = $derived.by(() => {
|
|
|
222
201
|
scrollToAlignment="center"
|
|
223
202
|
>
|
|
224
203
|
{#snippet header()}{/snippet}
|
|
225
|
-
{#snippet
|
|
204
|
+
{#snippet item({ index, style })}
|
|
226
205
|
<div {style} class="w-full">
|
|
227
206
|
{#if flatJobs}
|
|
228
207
|
{@const jobOrDate = flatJobs[index]}
|
|
229
208
|
|
|
230
209
|
{#if jobOrDate}
|
|
231
210
|
{#if jobOrDate?.type === 'date'}
|
|
232
|
-
<div
|
|
211
|
+
<div
|
|
212
|
+
class="bg-surface-secondary py-2 border-b font-semibold text-xs pl-2 h-[42px] flex items-center"
|
|
213
|
+
>
|
|
233
214
|
{jobOrDate.date}
|
|
234
215
|
</div>
|
|
235
216
|
{:else}
|
|
236
217
|
<div class="flex flex-row items-center h-full w-full">
|
|
237
218
|
<RunRow
|
|
238
219
|
{containsLabel}
|
|
220
|
+
{showTag}
|
|
239
221
|
job={jobOrDate.job}
|
|
240
222
|
selected={jobOrDate.job.id !== '-' && selectedIds.includes(jobOrDate.job.id)}
|
|
241
223
|
{selectionMode}
|
|
@@ -249,9 +231,18 @@ let stickyIndices = $derived.by(() => {
|
|
|
249
231
|
selectedIds = selectedIds
|
|
250
232
|
}
|
|
251
233
|
} else {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
234
|
+
if (
|
|
235
|
+
JSON.stringify(selectedIds) !== JSON.stringify([jobOrDate.job.id]) ||
|
|
236
|
+
selectedWorkspace !== jobOrDate.job.workspace_id
|
|
237
|
+
) {
|
|
238
|
+
selectedWorkspace = jobOrDate.job.workspace_id
|
|
239
|
+
selectedIds = [jobOrDate.job.id]
|
|
240
|
+
dispatch('select')
|
|
241
|
+
} else {
|
|
242
|
+
selectedIds = []
|
|
243
|
+
selectedWorkspace = undefined
|
|
244
|
+
dispatch('select')
|
|
245
|
+
}
|
|
255
246
|
}
|
|
256
247
|
}}
|
|
257
248
|
{activeLabel}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Job } from '../../gen';
|
|
2
2
|
import type { RunsSelectionMode } from './RunsBatchActionsDropdown.svelte';
|
|
3
|
+
import './runs-grid.css';
|
|
3
4
|
interface Props {
|
|
4
5
|
jobs?: Job[] | undefined;
|
|
5
6
|
externalJobs?: Job[];
|
|
@@ -38,6 +39,6 @@ declare const RunsTable: $$__sveltets_2_IsomorphicComponent<Props, {
|
|
|
38
39
|
[evt: string]: CustomEvent<any>;
|
|
39
40
|
}, {}, {
|
|
40
41
|
scrollToRun: (ids: string[]) => void;
|
|
41
|
-
}, "selectedIds" | "
|
|
42
|
+
}, "selectedIds" | "lastFetchWentToEnd" | "selectedWorkspace">;
|
|
42
43
|
type RunsTable = InstanceType<typeof RunsTable>;
|
|
43
44
|
export default RunsTable;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/* Shared CSS Grid Styles for RunsTable and RunRow components */
|
|
2
|
+
|
|
3
|
+
/* Grid layouts with tag column */
|
|
4
|
+
.grid-runs-table {
|
|
5
|
+
grid-template-columns:
|
|
6
|
+
60px /* Status (fixed width) */
|
|
7
|
+
minmax(100px, 0.8fr) /* Started time (~10%) */
|
|
8
|
+
minmax(60px, 0.5fr) /* Duration (~7%) */
|
|
9
|
+
minmax(200px, 2.3fr) /* Path (~33% reduced for wider tag) */
|
|
10
|
+
minmax(150px, 1.8fr) /* Triggered by (~28% reduced for wider tag) */
|
|
11
|
+
minmax(70px, 0.5fr) /* Tag (~7% wider) */
|
|
12
|
+
minmax(40px, 0.3fr); /* Actions (~5%) */
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.grid-runs-table-with-labels {
|
|
16
|
+
grid-template-columns:
|
|
17
|
+
60px /* Status (fixed width) */
|
|
18
|
+
minmax(100px, 0.8fr) /* Started time (~10%) */
|
|
19
|
+
minmax(60px, 0.5fr) /* Duration (~7%) */
|
|
20
|
+
minmax(150px, 1.6fr) /* Path (~25% reduced for labels and wider tag) */
|
|
21
|
+
minmax(120px, 1.3fr) /* Labels (~22% reduced for wider tag) */
|
|
22
|
+
minmax(110px, 1.3fr) /* Triggered by (~22% reduced for wider tag) */
|
|
23
|
+
minmax(70px, 0.5fr) /* Tag (~7% wider) */
|
|
24
|
+
minmax(40px, 0.3fr); /* Actions (~5%) */
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.grid-runs-table-selection {
|
|
28
|
+
grid-template-columns:
|
|
29
|
+
50px /* Selection checkbox (fixed width) */
|
|
30
|
+
80px /* Status (fixed width) */
|
|
31
|
+
minmax(100px, 0.8fr) /* Started time (~10%) */
|
|
32
|
+
minmax(60px, 0.5fr) /* Duration (~7%) */
|
|
33
|
+
minmax(200px, 2.3fr) /* Path (~33% reduced for wider tag) */
|
|
34
|
+
minmax(150px, 1.8fr) /* Triggered by (~28% reduced for wider tag) */
|
|
35
|
+
minmax(70px, 0.5fr) /* Tag (~7% wider) */
|
|
36
|
+
minmax(40px, 0.3fr); /* Actions (~5%) */
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.grid-runs-table-with-labels-selection {
|
|
40
|
+
grid-template-columns:
|
|
41
|
+
50px /* Selection checkbox (fixed width) */
|
|
42
|
+
80px /* Status (fixed width) */
|
|
43
|
+
minmax(100px, 0.8fr) /* Started time (~10%) */
|
|
44
|
+
minmax(60px, 0.5fr) /* Duration (~7%) */
|
|
45
|
+
minmax(150px, 1.6fr) /* Path (~25% reduced for labels and wider tag) */
|
|
46
|
+
minmax(120px, 1.3fr) /* Labels (~22% reduced for wider tag) */
|
|
47
|
+
minmax(110px, 1.3fr) /* Triggered by (~22% reduced for wider tag) */
|
|
48
|
+
minmax(70px, 0.5fr) /* Tag (~7% wider) */
|
|
49
|
+
minmax(40px, 0.3fr); /* Actions (~5%) */
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* Grid layouts without tag column */
|
|
53
|
+
.grid-runs-table-no-tag {
|
|
54
|
+
grid-template-columns:
|
|
55
|
+
60px /* Status (fixed width) */
|
|
56
|
+
minmax(100px, 0.8fr) /* Started time (~10%) */
|
|
57
|
+
minmax(60px, 0.5fr) /* Duration (~7%) */
|
|
58
|
+
minmax(200px, 2.8fr) /* Path (~38% expanded without tag) */
|
|
59
|
+
minmax(150px, 2.2fr) /* Triggered by (~33% expanded without tag) */
|
|
60
|
+
minmax(40px, 0.3fr); /* Actions (~5%) */
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.grid-runs-table-with-labels-no-tag {
|
|
64
|
+
grid-template-columns:
|
|
65
|
+
60px /* Status (fixed width) */
|
|
66
|
+
minmax(100px, 0.8fr) /* Started time (~10%) */
|
|
67
|
+
minmax(60px, 0.5fr) /* Duration (~7%) */
|
|
68
|
+
minmax(150px, 1.8fr) /* Path (~30% expanded without tag) */
|
|
69
|
+
minmax(120px, 1.8fr) /* Labels (~30% expanded without tag) */
|
|
70
|
+
minmax(110px, 1.8fr) /* Triggered by (~30% expanded without tag) */
|
|
71
|
+
minmax(40px, 0.3fr); /* Actions (~5%) */
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.grid-runs-table-selection-no-tag {
|
|
75
|
+
grid-template-columns:
|
|
76
|
+
40px /* Selection checkbox (fixed width) */
|
|
77
|
+
60px /* Status (fixed width) */
|
|
78
|
+
minmax(100px, 0.8fr) /* Started time (~10%) */
|
|
79
|
+
minmax(60px, 0.5fr) /* Duration (~7%) */
|
|
80
|
+
minmax(200px, 2.8fr) /* Path (~38% expanded without tag) */
|
|
81
|
+
minmax(150px, 2.2fr) /* Triggered by (~33% expanded without tag) */
|
|
82
|
+
minmax(40px, 0.3fr); /* Actions (~5%) */
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.grid-runs-table-with-labels-selection-no-tag {
|
|
86
|
+
grid-template-columns:
|
|
87
|
+
50px /* Selection checkbox (fixed width) */
|
|
88
|
+
60px /* Status (fixed width) */
|
|
89
|
+
minmax(100px, 0.8fr) /* Started time (~10%) */
|
|
90
|
+
minmax(60px, 0.5fr) /* Duration (~7%) */
|
|
91
|
+
minmax(150px, 1.8fr) /* Path (~30% expanded without tag) */
|
|
92
|
+
minmax(120px, 1.8fr) /* Labels (~30% expanded without tag) */
|
|
93
|
+
minmax(110px, 1.8fr) /* Triggered by (~30% expanded without tag) */
|
|
94
|
+
minmax(40px, 0.3fr); /* Actions (~5%) */
|
|
95
|
+
}
|
|
@@ -50,7 +50,18 @@ let items = $derived([
|
|
|
50
50
|
const rnd = generateRandomString();
|
|
51
51
|
</script>
|
|
52
52
|
|
|
53
|
-
<div class="flex flex-
|
|
53
|
+
<div class="flex flex-wrap justify-between mb-2 w-full items-center gap-y-2">
|
|
54
|
+
<AddProperty
|
|
55
|
+
on:change={() => {
|
|
56
|
+
if (jsonView) {
|
|
57
|
+
schemaString = JSON.stringify(schema, null, '\t')
|
|
58
|
+
editor?.setCode(schemaString)
|
|
59
|
+
}
|
|
60
|
+
}}
|
|
61
|
+
bind:schema
|
|
62
|
+
bind:this={addPropertyComponent}
|
|
63
|
+
/>
|
|
64
|
+
|
|
54
65
|
<Toggle
|
|
55
66
|
bind:checked={jsonView}
|
|
56
67
|
label="JSON View"
|
|
@@ -68,17 +79,6 @@ const rnd = generateRandomString();
|
|
|
68
79
|
/>
|
|
69
80
|
</div>
|
|
70
81
|
|
|
71
|
-
<AddProperty
|
|
72
|
-
on:change={() => {
|
|
73
|
-
if (jsonView) {
|
|
74
|
-
schemaString = JSON.stringify(schema, null, '\t')
|
|
75
|
-
editor?.setCode(schemaString)
|
|
76
|
-
}
|
|
77
|
-
}}
|
|
78
|
-
bind:schema
|
|
79
|
-
bind:this={addPropertyComponent}
|
|
80
|
-
/>
|
|
81
|
-
|
|
82
82
|
{#if !jsonView}
|
|
83
83
|
{#key rnd}
|
|
84
84
|
<div
|