windmill-components 1.352.9 → 1.362.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/assets/app.css +8 -45
- package/package/components/ApiConnectForm.svelte +1 -0
- package/package/components/ArgInput.svelte +5 -1
- package/package/components/ChangeInstanceUsername.svelte +20 -12
- package/package/components/ContentSearchInner.svelte +359 -0
- package/package/components/{ContentSearch.svelte.d.ts → ContentSearchInner.svelte.d.ts} +9 -5
- package/package/components/CustomPopover.svelte +73 -0
- package/package/components/CustomPopover.svelte.d.ts +29 -0
- package/package/components/DateTimeInput.svelte +29 -3
- package/package/components/DateTimeInput.svelte.d.ts +4 -0
- package/package/components/Dev.svelte +8 -3
- package/package/components/DurationMs.svelte +2 -2
- package/package/components/FlowBuilder.svelte +122 -24
- package/package/components/FlowBuilder.svelte.d.ts +1 -0
- package/package/components/FlowGraphViewerStep.svelte +2 -2
- package/package/components/FlowJobResult.svelte +5 -3
- package/package/components/FlowStatusViewer.svelte +4 -3
- package/package/components/FlowStatusViewerInner.svelte +265 -160
- package/package/components/FlowStatusViewerInner.svelte.d.ts +15 -2
- package/package/components/HighlightTheme.svelte +75 -77
- package/package/components/InputTransformForm.svelte +2 -0
- package/package/components/JobArgs.svelte +59 -44
- package/package/components/JobArgs.svelte.d.ts +2 -0
- package/package/components/LightweightArgInput.svelte +27 -2
- package/package/components/Path.svelte +3 -8
- package/package/components/Popover.svelte +1 -1
- package/package/components/ResourceEditor.svelte +3 -2
- package/package/components/ResourceEditorDrawer.svelte +4 -1
- package/package/components/ResourcePicker.svelte +1 -0
- package/package/components/RunChart.svelte +6 -3
- package/package/components/RunChart.svelte.d.ts +1 -0
- package/package/components/RunForm.svelte +24 -23
- package/package/components/RunForm.svelte.d.ts +0 -2
- package/package/components/SavedInputs.svelte +50 -39
- package/package/components/ScheduleEditorInner.svelte +26 -4
- package/package/components/ScriptBuilder.svelte +47 -22
- package/package/components/ScriptBuilder.svelte.d.ts +1 -0
- package/package/components/SearchItems.svelte +5 -4
- package/package/components/Summary.svelte +74 -0
- package/package/components/Summary.svelte.d.ts +16 -0
- package/package/components/apps/components/display/AppMarkdown.svelte +3 -2
- package/package/components/apps/components/display/AppMenu.svelte +2 -2
- package/package/components/apps/components/display/AppNavbar.svelte +94 -0
- package/package/components/apps/components/display/AppNavbar.svelte.d.ts +24 -0
- package/package/components/apps/components/display/AppNavbarItem.svelte +146 -0
- package/package/components/apps/components/display/AppNavbarItem.svelte.d.ts +27 -0
- package/package/components/apps/components/display/ResolveNavbarItemPath.svelte +21 -0
- package/package/components/apps/components/display/ResolveNavbarItemPath.svelte.d.ts +20 -0
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +16 -0
- package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +12 -16
- package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte.d.ts +1 -0
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +5 -0
- package/package/components/apps/components/display/table/AppAggridTable.svelte +28 -6
- package/package/components/apps/components/display/table/AppAggridTableActions.svelte +68 -43
- package/package/components/apps/components/inputs/AppDateSelect.svelte +284 -0
- package/package/components/apps/components/inputs/AppDateSelect.svelte.d.ts +21 -0
- package/package/components/apps/components/inputs/AppDateTimeInput.svelte +2 -0
- package/package/components/apps/components/inputs/AppFileInput.svelte +22 -27
- package/package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -0
- package/package/components/apps/components/inputs/AppTextInput.svelte +1 -1
- package/package/components/apps/components/layout/AppDecisionTree.svelte +32 -30
- package/package/components/apps/components/layout/AppModal.svelte +17 -6
- package/package/components/apps/editor/AppDeploymentHistory.svelte +2 -3
- package/package/components/apps/editor/AppDeploymentHistory.svelte.d.ts +3 -2
- package/package/components/apps/editor/AppEditor.svelte +9 -2
- package/package/components/apps/editor/AppEditorHeader.svelte +7 -10
- package/package/components/apps/editor/AppPreview.svelte +12 -3
- package/package/components/apps/editor/AppPreview.svelte.d.ts +2 -0
- package/package/components/apps/editor/DecisionTreeDebug.svelte +92 -68
- package/package/components/apps/editor/DeploymentHistory.svelte +0 -2
- package/package/components/apps/editor/appUtils.d.ts +1 -0
- package/package/components/apps/editor/appUtils.js +17 -0
- package/package/components/apps/editor/component/Component.svelte +23 -0
- package/package/components/apps/editor/component/components.d.ts +205 -3
- package/package/components/apps/editor/component/components.js +160 -1
- package/package/components/apps/editor/component/default-codes.js +13 -13
- package/package/components/apps/editor/component/sets.js +4 -2
- package/package/components/apps/editor/componentsPanel/ComponentList.svelte +12 -12
- package/package/components/apps/editor/componentsPanel/cssUtils.js +39 -3
- package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +6 -0
- package/package/components/apps/editor/contextPanel/ComponentOutput.svelte +2 -2
- package/package/components/apps/editor/contextPanel/ContextPanel.svelte +6 -0
- package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +11 -0
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +4 -0
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +21 -8
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +64 -20
- package/package/components/apps/editor/settingsPanel/ContextVariables.svelte +48 -15
- package/package/components/apps/editor/settingsPanel/ContextVariables.svelte.d.ts +1 -0
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +25 -5
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +2 -1
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte.d.ts +1 -0
- package/package/components/apps/editor/settingsPanel/DocLink.svelte +33 -0
- package/package/components/apps/editor/settingsPanel/DocLink.svelte.d.ts +19 -0
- package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +192 -0
- package/package/components/apps/editor/settingsPanel/GridNavbar.svelte.d.ts +18 -0
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +2 -2
- package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte +17 -0
- package/package/components/apps/editor/settingsPanel/RefreshDatabaseStudioTable.svelte.d.ts +16 -0
- package/package/components/apps/editor/settingsPanel/TableActions.svelte +81 -38
- package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +12 -5
- package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +11 -12
- package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +4 -2
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +4 -1
- package/package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +7 -1
- package/package/components/apps/inputType.d.ts +2 -2
- package/package/components/apps/svelte-select/lib/Select.svelte +2 -3
- package/package/components/apps/types.d.ts +3 -0
- package/package/components/auditLogs/AuditLogsTable.svelte +2 -2
- package/package/components/common/CloseButton.svelte +10 -10
- package/package/components/common/CloseButton.svelte.d.ts +6 -14
- package/package/components/common/calendarPicker/CalendarPicker.svelte +5 -0
- package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +2 -0
- package/package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +7 -1
- package/package/components/common/fileInput/FileInput.svelte +2 -0
- package/package/components/common/fileInput/FileInput.svelte.d.ts +1 -0
- package/package/components/common/popup/Popup.svelte +4 -3
- package/package/components/common/popup/Popup.svelte.d.ts +1 -0
- package/package/components/common/table/AppRow.svelte +3 -10
- package/package/components/common/table/FlowRow.svelte +12 -1
- package/package/components/copilot/IteratorGen.svelte +1 -1
- package/package/components/copilot/PredicateGen.svelte +1 -1
- package/package/components/copilot/StepInputGen.svelte +8 -3
- package/package/components/copilot/StepInputsGen.svelte +5 -2
- package/package/components/details/WebhooksPanel.svelte +32 -1
- package/package/components/details/WebhooksPanel.svelte.d.ts +2 -11
- package/package/components/flows/FlowHistory.svelte +208 -0
- package/package/components/flows/FlowHistory.svelte.d.ts +21 -0
- package/package/components/flows/content/FlowBranchesAllWrapper.svelte +1 -1
- package/package/components/flows/content/FlowBranchesOneWrapper.svelte +1 -1
- package/package/components/flows/content/FlowEditorPanel.svelte +1 -1
- package/package/components/flows/content/FlowLoop.svelte +23 -26
- package/package/components/flows/content/FlowModuleComponent.svelte +2 -18
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +10 -4
- package/package/components/flows/content/FlowModuleHeader.svelte +3 -4
- package/package/components/flows/content/FlowModuleScript.svelte +1 -1
- package/package/components/flows/content/FlowModuleSleep.svelte +1 -0
- package/package/components/flows/content/FlowModuleSuspend.svelte +1 -1
- package/package/components/flows/content/SuspendDrawer.svelte +7 -7
- package/package/components/flows/flowStateUtils.js +2 -1
- package/package/components/flows/flowStore.js +1 -1
- package/package/components/flows/header/FlowImportExportMenu.svelte +3 -16
- package/package/components/flows/header/FlowImportExportMenu.svelte.d.ts +4 -1
- package/package/components/flows/map/FlowJobsMenu.svelte +69 -0
- package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +22 -0
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +7 -4
- package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
- package/package/components/flows/map/MapItem.svelte +20 -0
- package/package/components/flows/map/MapItem.svelte.d.ts +9 -0
- package/package/components/flows/map/VirtualItem.svelte +4 -2
- package/package/components/flows/map/VirtualItem.svelte.d.ts +1 -0
- package/package/components/flows/previousResults.d.ts +9 -0
- package/package/components/flows/previousResults.js +42 -8
- package/package/components/flows/propPicker/PropPickerWrapper.svelte +2 -0
- package/package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +1 -0
- package/package/components/flows/types.d.ts +1 -1
- package/package/components/graph/FlowGraph.svelte +80 -42
- package/package/components/graph/FlowGraph.svelte.d.ts +1 -0
- package/package/components/graph/model.d.ts +6 -1
- package/package/components/graph/svelvet/container/controllers/middleware.js +4 -4
- package/package/components/graph/svelvet/container/views/GraphView.svelte +2 -0
- package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +24 -25
- package/package/components/graph/util.d.ts +1 -1
- package/package/components/graph/util.js +1 -2
- package/package/components/home/ItemsList.svelte +22 -19
- package/package/components/jobs/JobPreview.svelte +11 -2
- package/package/components/propertyPicker/PropPicker.svelte +30 -0
- package/package/components/propertyPicker/PropPickerResult.svelte +14 -1
- package/package/components/propertyPicker/PropPickerResult.svelte.d.ts +1 -0
- package/package/components/runs/JobLoader.svelte +21 -8
- package/package/components/runs/JobLoader.svelte.d.ts +2 -0
- package/package/components/runs/JobPreview.svelte +5 -1
- package/package/components/runs/RunRow.svelte +12 -8
- package/package/components/runs/RunsFilter.svelte +2 -4
- package/package/components/runs/RunsFilter.svelte.d.ts +0 -1
- package/package/components/runs/RunsTable.svelte +63 -29
- package/package/components/runs/RunsTable.svelte.d.ts +1 -0
- package/package/components/schema/EditableSchemaWrapper.svelte +9 -1
- package/package/components/schema/PropertyEditor.svelte +1 -1
- package/package/components/search/GlobalSearchModal.svelte +559 -0
- package/package/components/search/GlobalSearchModal.svelte.d.ts +17 -0
- package/package/components/search/QuickMenuItem.svelte +76 -0
- package/package/components/search/QuickMenuItem.svelte.d.ts +27 -0
- package/package/components/sidebar/MenuButton.svelte +11 -0
- package/package/components/sidebar/MenuButton.svelte.d.ts +4 -0
- package/package/components/sidebar/changelogs.js +35 -0
- package/package/components/wizards/AppPicker.svelte +68 -0
- package/package/components/wizards/AppPicker.svelte.d.ts +17 -0
- package/package/components/wizards/NavbarWizard.svelte +131 -0
- package/package/components/wizards/NavbarWizard.svelte.d.ts +19 -0
- package/package/defaults.d.ts +1 -1
- package/package/defaults.js +1 -1
- package/package/es6.d.ts.txt +370 -1
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +42 -3
- package/package/gen/schemas.gen.js +42 -3
- package/package/gen/services.gen.d.ts +80 -5
- package/package/gen/services.gen.js +149 -8
- package/package/gen/types.gen.d.ts +265 -11
- package/package/inferArgSig.js +4 -0
- package/package/script_helpers.d.ts +3 -3
- package/package/script_helpers.js +46 -22
- package/package/stores.d.ts +1 -1
- package/package/stores.js +1 -1
- package/package/utils.d.ts +7 -23
- package/package/utils.js +54 -33
- package/package/windmill_fetch.d.ts.txt +6 -6
- package/package.json +3 -11
- package/package/components/ContentSearch.svelte +0 -355
|
@@ -9,6 +9,7 @@ export let maxIsNow = false;
|
|
|
9
9
|
export let minTimeSet = undefined;
|
|
10
10
|
export let maxTimeSet = undefined;
|
|
11
11
|
export let selectedIds = [];
|
|
12
|
+
export let canSelect = true;
|
|
12
13
|
const dispatch = createEventDispatcher();
|
|
13
14
|
const SUCCESS_COLOR = '#4ade80';
|
|
14
15
|
// const SUCCESS_COLOR_TRANSPARENT = '#c9b638'
|
|
@@ -103,7 +104,7 @@ function mergeColors(color1, color2, slider) {
|
|
|
103
104
|
return rgbToHex(blendedRgb);
|
|
104
105
|
}
|
|
105
106
|
function highlightSelectedPoints(ids) {
|
|
106
|
-
if (ids.length === 0) {
|
|
107
|
+
if (!canSelect || ids.length === 0) {
|
|
107
108
|
data.datasets[0].backgroundColor = FAIL_COLOR;
|
|
108
109
|
data.datasets[1].backgroundColor = SUCCESS_COLOR;
|
|
109
110
|
}
|
|
@@ -181,8 +182,10 @@ $: scatterOptions = {
|
|
|
181
182
|
}
|
|
182
183
|
},
|
|
183
184
|
onClick: (e, u) => {
|
|
184
|
-
|
|
185
|
-
|
|
185
|
+
if (canSelect) {
|
|
186
|
+
const ids = u.map((j) => data.datasets[j.datasetIndex].data[j.index].id);
|
|
187
|
+
selectedIds = ids;
|
|
188
|
+
}
|
|
186
189
|
},
|
|
187
190
|
scales: {
|
|
188
191
|
x: {
|
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
<script>import { defaultIfEmptyString, emptyString, truncateHash } from '../utils';
|
|
2
|
-
import CliHelpBox from './CliHelpBox.svelte';
|
|
1
|
+
<script>import { computeSharableHash as computeSharableHash, defaultIfEmptyString, emptyString, truncateHash } from '../utils';
|
|
3
2
|
import { Badge, Button } from './common';
|
|
4
3
|
import SchemaForm from './SchemaForm.svelte';
|
|
5
4
|
import SharedBadge from './SharedBadge.svelte';
|
|
6
|
-
import CollapseLink from './CollapseLink.svelte';
|
|
7
|
-
import { SCRIPT_VIEW_SHOW_RUN_FROM_CLI } from '../consts';
|
|
8
5
|
import TimeAgo from './TimeAgo.svelte';
|
|
9
|
-
import ClipboardPanel from './details/ClipboardPanel.svelte';
|
|
10
6
|
import Popup from './common/popup/Popup.svelte';
|
|
11
7
|
import { autoPlacement } from '@floating-ui/core';
|
|
12
8
|
import { Calendar, CornerDownLeft } from 'lucide-svelte';
|
|
13
9
|
import RunFormAdvancedPopup from './RunFormAdvancedPopup.svelte';
|
|
10
|
+
import { page } from '$app/stores';
|
|
11
|
+
import { replaceState } from '$app/navigation';
|
|
14
12
|
export let runnable;
|
|
15
13
|
export let runAction;
|
|
16
14
|
export let buttonText = 'Run';
|
|
@@ -20,8 +18,6 @@ export let autofocus = false;
|
|
|
20
18
|
export let topButton = false;
|
|
21
19
|
export let loading = false;
|
|
22
20
|
export let noVariablePicker = false;
|
|
23
|
-
export let viewCliRun = false;
|
|
24
|
-
export let isFlow;
|
|
25
21
|
export let viewKeybinding = false;
|
|
26
22
|
export let scheduledForStr;
|
|
27
23
|
export let invisible_to_owner;
|
|
@@ -37,7 +33,26 @@ export function run() {
|
|
|
37
33
|
runAction(scheduledForStr, args, invisible_to_owner, overrideTag);
|
|
38
34
|
}
|
|
39
35
|
export let isValid = true;
|
|
40
|
-
$:
|
|
36
|
+
$: onArgsChange(args);
|
|
37
|
+
let debounced = undefined;
|
|
38
|
+
function onArgsChange(args) {
|
|
39
|
+
try {
|
|
40
|
+
debounced && clearTimeout(debounced);
|
|
41
|
+
debounced = setTimeout(() => {
|
|
42
|
+
const nurl = new URL(window.location.href);
|
|
43
|
+
nurl.hash = computeSharableHash(args);
|
|
44
|
+
try {
|
|
45
|
+
replaceState(nurl.toString(), $page.state);
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
console.error(e);
|
|
49
|
+
}
|
|
50
|
+
}, 200);
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
console.error('Impossible to set hash in args', e);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
41
56
|
</script>
|
|
42
57
|
|
|
43
58
|
<div class="max-w-3xl">
|
|
@@ -56,7 +71,7 @@ $: cliCommand = `wmill ${isFlow ? 'flow' : 'script'} run ${runnable?.path} -d '$
|
|
|
56
71
|
<div class="flex items-center gap-2">
|
|
57
72
|
<span class="text-sm text-tertiary">
|
|
58
73
|
{#if runnable}
|
|
59
|
-
Edited <TimeAgo withDate date={runnable.created_at || ''} /> by {runnable.created_by ||
|
|
74
|
+
Edited <TimeAgo withDate agoOnlyIfRecent date={runnable.created_at || ''} /> by {runnable.created_by ||
|
|
60
75
|
'unknown'}
|
|
61
76
|
{/if}
|
|
62
77
|
</span>
|
|
@@ -180,18 +195,4 @@ $: cliCommand = `wmill ${isFlow ? 'flow' : 'script'} run ${runnable?.path} -d '$
|
|
|
180
195
|
{buttonText}
|
|
181
196
|
</Button>
|
|
182
197
|
{/if}
|
|
183
|
-
|
|
184
|
-
{#if viewCliRun}
|
|
185
|
-
<div>
|
|
186
|
-
<div class="mt-4" />
|
|
187
|
-
{#if SCRIPT_VIEW_SHOW_RUN_FROM_CLI}
|
|
188
|
-
<CollapseLink small text="Run it from CLI">
|
|
189
|
-
<div class="mt-2" />
|
|
190
|
-
<ClipboardPanel content={cliCommand} />
|
|
191
|
-
<CliHelpBox />
|
|
192
|
-
</CollapseLink>
|
|
193
|
-
{/if}
|
|
194
|
-
<div class="mb-20" />
|
|
195
|
-
</div>
|
|
196
|
-
{/if}
|
|
197
198
|
</div>
|
|
@@ -23,8 +23,6 @@ declare const __propDef: {
|
|
|
23
23
|
topButton?: boolean | undefined;
|
|
24
24
|
loading?: boolean | undefined;
|
|
25
25
|
noVariablePicker?: boolean | undefined;
|
|
26
|
-
viewCliRun?: boolean | undefined;
|
|
27
|
-
isFlow: boolean;
|
|
28
26
|
viewKeybinding?: boolean | undefined;
|
|
29
27
|
scheduledForStr: string | undefined;
|
|
30
28
|
invisible_to_owner: boolean | undefined;
|
|
@@ -34,13 +34,23 @@ $: runnableType = scriptHash
|
|
|
34
34
|
: flowPath
|
|
35
35
|
? 'FlowPath'
|
|
36
36
|
: undefined;
|
|
37
|
+
let hasAlreadyFailed = false;
|
|
37
38
|
async function loadInputHistory() {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
try {
|
|
40
|
+
previousInputs = await InputService.getInputHistory({
|
|
41
|
+
workspace: $workspaceStore,
|
|
42
|
+
runnableId,
|
|
43
|
+
runnableType,
|
|
44
|
+
perPage: 10
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
console.error(e);
|
|
49
|
+
if (hasAlreadyFailed)
|
|
50
|
+
return;
|
|
51
|
+
hasAlreadyFailed = true;
|
|
52
|
+
sendUserToast(`Failed to load input history: ${e}`, true);
|
|
53
|
+
}
|
|
44
54
|
}
|
|
45
55
|
async function loadSavedInputs() {
|
|
46
56
|
savedInputs = await InputService.listInputs({
|
|
@@ -113,28 +123,25 @@ async function deleteInput(input) {
|
|
|
113
123
|
}
|
|
114
124
|
}
|
|
115
125
|
$: {
|
|
116
|
-
if ($workspaceStore &&
|
|
117
|
-
console.log('loading inputs');
|
|
126
|
+
if ($workspaceStore && (scriptHash || scriptPath || flowPath)) {
|
|
118
127
|
loadInputHistory();
|
|
119
128
|
loadSavedInputs();
|
|
120
129
|
}
|
|
121
130
|
}
|
|
131
|
+
let previewArgs = undefined;
|
|
122
132
|
function selectArgs(selected_args) {
|
|
123
|
-
|
|
133
|
+
previewArgs = selected_args;
|
|
124
134
|
}
|
|
125
|
-
async function loadLargeArgs(id) {
|
|
135
|
+
async function loadLargeArgs(id, input, allowLarge) {
|
|
126
136
|
if (!id)
|
|
127
137
|
return;
|
|
128
|
-
|
|
138
|
+
return await InputService.getArgsFromHistoryOrSavedInput({
|
|
129
139
|
jobOrInputId: id,
|
|
130
|
-
workspace: $workspaceStore
|
|
140
|
+
workspace: $workspaceStore,
|
|
141
|
+
input,
|
|
142
|
+
allowLarge
|
|
131
143
|
});
|
|
132
144
|
}
|
|
133
|
-
let hasLargeArgs = false;
|
|
134
|
-
$: hasLargeArgs =
|
|
135
|
-
typeof selectedInput?.args === 'string' && selectedInput?.args === 'WINDMILL_TOO_BIG';
|
|
136
|
-
let largeArgs = undefined;
|
|
137
|
-
$: hasLargeArgs && loadLargeArgs(selectedInput?.id);
|
|
138
145
|
</script>
|
|
139
146
|
|
|
140
147
|
<JobLoader
|
|
@@ -153,6 +160,7 @@ $: hasLargeArgs && loadLargeArgs(selectedInput?.id);
|
|
|
153
160
|
syncQueuedRunsCount={false}
|
|
154
161
|
refreshRate={10000}
|
|
155
162
|
computeMinAndMax={undefined}
|
|
163
|
+
perPage={5}
|
|
156
164
|
/>
|
|
157
165
|
|
|
158
166
|
<div class="min-w-[300px] h-full">
|
|
@@ -179,17 +187,17 @@ $: hasLargeArgs && loadLargeArgs(selectedInput?.id);
|
|
|
179
187
|
{/if}
|
|
180
188
|
</div>
|
|
181
189
|
|
|
182
|
-
<div class="w-full flex flex-col gap-
|
|
190
|
+
<div class="w-full flex flex-col gap-1 h-full overflow-y-auto p">
|
|
183
191
|
{#if savedInputs === undefined}
|
|
184
192
|
<Skeleton layout={[[8]]} />
|
|
185
193
|
{:else if savedInputs.length > 0}
|
|
186
194
|
{#each savedInputs as i}
|
|
187
195
|
<button
|
|
188
196
|
class={classNames(
|
|
189
|
-
`w-full flex items-center group justify-between gap-4 py-
|
|
197
|
+
`w-full flex items-center text-sm group justify-between gap-4 py-1.5 px-4 text-left border rounded-sm hover:bg-surface-hover transition-all`,
|
|
190
198
|
selectedInput === i ? 'border-blue-500 bg-blue-50 dark:bg-blue-900' : ''
|
|
191
199
|
)}
|
|
192
|
-
on:click={() => {
|
|
200
|
+
on:click={async () => {
|
|
193
201
|
if (!i.isEditing) {
|
|
194
202
|
if (selectedInput === i) {
|
|
195
203
|
selectedInput = null
|
|
@@ -197,6 +205,7 @@ $: hasLargeArgs && loadLargeArgs(selectedInput?.id);
|
|
|
197
205
|
selectedInput = i
|
|
198
206
|
}
|
|
199
207
|
}
|
|
208
|
+
selectArgs(await loadLargeArgs(i.id, true, false))
|
|
200
209
|
}}
|
|
201
210
|
>
|
|
202
211
|
<div class="w-full h-full items-center justify-between flex gap-1 min-w-0">
|
|
@@ -280,8 +289,8 @@ $: hasLargeArgs && loadLargeArgs(selectedInput?.id);
|
|
|
280
289
|
<span class="text-sm font-semibold">Previous runs</span>
|
|
281
290
|
|
|
282
291
|
<div class="w-full flex flex-col gap-1 p-0 h-full overflow-y-auto">
|
|
283
|
-
{#if loading}
|
|
284
|
-
<
|
|
292
|
+
{#if loading && (jobs == undefined || jobs?.length == 0)}
|
|
293
|
+
<div class="text-left text-tertiary text-xs">Loading current runs...</div>
|
|
285
294
|
{:else if jobs.length > 0}
|
|
286
295
|
{#each jobs as i (i.id)}
|
|
287
296
|
<button
|
|
@@ -296,7 +305,7 @@ $: hasLargeArgs && loadLargeArgs(selectedInput?.id);
|
|
|
296
305
|
<div class="">
|
|
297
306
|
<div class="rounded-full w-2 h-2 bg-orange-400 animate-pulse" />
|
|
298
307
|
</div>
|
|
299
|
-
<div class="col-span-2">
|
|
308
|
+
<div class="col-span-2 truncate">
|
|
300
309
|
{i.created_by}
|
|
301
310
|
</div>
|
|
302
311
|
<div
|
|
@@ -317,6 +326,11 @@ $: hasLargeArgs && loadLargeArgs(selectedInput?.id);
|
|
|
317
326
|
</div>
|
|
318
327
|
</button>
|
|
319
328
|
{/each}
|
|
329
|
+
{#if jobs.length == 5}
|
|
330
|
+
<div class="text-left text-tertiary text-xs"
|
|
331
|
+
>... there may be more runs not displayed here as the limit is 5</div
|
|
332
|
+
>
|
|
333
|
+
{/if}
|
|
320
334
|
{:else}
|
|
321
335
|
<div class="text-left text-tertiary text-xs">No running runs</div>
|
|
322
336
|
{/if}
|
|
@@ -332,12 +346,13 @@ $: hasLargeArgs && loadLargeArgs(selectedInput?.id);
|
|
|
332
346
|
`w-full flex items-center justify-between gap-4 py-2 px-4 text-left border rounded-sm hover:bg-surface-hover transition-a`,
|
|
333
347
|
selectedInput === i ? 'border-blue-500 bg-blue-50 dark:bg-blue-900' : ''
|
|
334
348
|
)}
|
|
335
|
-
on:click={() => {
|
|
349
|
+
on:click={async () => {
|
|
336
350
|
if (selectedInput === i) {
|
|
337
351
|
selectedInput = null
|
|
338
352
|
} else {
|
|
339
353
|
selectedInput = i
|
|
340
354
|
}
|
|
355
|
+
selectArgs(await loadLargeArgs(i.id, false, false))
|
|
341
356
|
}}
|
|
342
357
|
>
|
|
343
358
|
<div
|
|
@@ -346,7 +361,7 @@ $: hasLargeArgs && loadLargeArgs(selectedInput?.id);
|
|
|
346
361
|
<div class="">
|
|
347
362
|
<div class="rounded-full w-2 h-2 {i.success ? 'bg-green-400' : 'bg-red-400'}" />
|
|
348
363
|
</div>
|
|
349
|
-
<div class="col-span-2">
|
|
364
|
+
<div class="col-span-2 truncate" title={i.created_by}>
|
|
350
365
|
{i.created_by}
|
|
351
366
|
</div>
|
|
352
367
|
<div
|
|
@@ -382,33 +397,29 @@ $: hasLargeArgs && loadLargeArgs(selectedInput?.id);
|
|
|
382
397
|
<Pane>
|
|
383
398
|
<div class="h-full overflow-hidden min-h-0 flex flex-col justify-between">
|
|
384
399
|
<div class="w-full flex flex-col min-h-0 gap-2 px-2 py-2 grow">
|
|
385
|
-
<div class="text-sm font-semibold">Preview</div>
|
|
386
400
|
<div class="w-full flex flex-col">
|
|
387
401
|
<Button
|
|
388
402
|
color="blue"
|
|
389
403
|
btnClasses="w-full"
|
|
390
404
|
size="sm"
|
|
391
405
|
spacingSize="xl"
|
|
392
|
-
on:click={() =>
|
|
393
|
-
|
|
394
|
-
|
|
406
|
+
on:click={async () => {
|
|
407
|
+
dispatch('selected_args', await loadLargeArgs(selectedInput?.id, undefined, false))
|
|
408
|
+
}}
|
|
409
|
+
disabled={!selectedInput}
|
|
395
410
|
>
|
|
396
411
|
<ArrowLeftIcon class="w-4 h-4 mr-2" />
|
|
397
412
|
Use Input
|
|
398
413
|
</Button>
|
|
399
414
|
</div>
|
|
400
415
|
<div class="w-full min-h-0 grow overflow-auto">
|
|
401
|
-
{#if
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
{:else}
|
|
407
|
-
<Skeleton layout={[[8]]} />
|
|
408
|
-
{/if}
|
|
409
|
-
{:else if Object.keys(selectedInput?.args || {}).length > 0}
|
|
416
|
+
{#if typeof previewArgs == 'string' && previewArgs == 'WINDMILL_TOO_BIG'}
|
|
417
|
+
<div class="text-secondary mt-2">
|
|
418
|
+
Payload too big to preview but can still be loaded</div
|
|
419
|
+
>
|
|
420
|
+
{:else if Object.keys(previewArgs || {}).length > 0}
|
|
410
421
|
<div class=" overflow-auto h-full p-2">
|
|
411
|
-
<ObjectViewer json={
|
|
422
|
+
<ObjectViewer json={previewArgs} />
|
|
412
423
|
</div>
|
|
413
424
|
{:else}
|
|
414
425
|
<div class="text-center text-tertiary">
|
|
@@ -19,12 +19,14 @@ import { List, Loader2, Save } from 'lucide-svelte';
|
|
|
19
19
|
import FlowRetries from './flows/content/FlowRetries.svelte';
|
|
20
20
|
import WorkerTagPicker from './WorkerTagPicker.svelte';
|
|
21
21
|
import Label from './Label.svelte';
|
|
22
|
+
import DateTimeInput from './DateTimeInput.svelte';
|
|
22
23
|
let optionTabSelected = 'error_handler';
|
|
23
24
|
let is_flow = false;
|
|
24
25
|
let initialPath = '';
|
|
25
26
|
let edit = true;
|
|
26
27
|
let schedule = '0 0 12 * *';
|
|
27
28
|
let timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
29
|
+
let paused_until = undefined;
|
|
28
30
|
let itemKind = 'script';
|
|
29
31
|
let errorHandleritemKind = 'script';
|
|
30
32
|
let wsErrorHandlerMuted = false;
|
|
@@ -64,6 +66,8 @@ export async function openNew(nis_flow, initial_script_path) {
|
|
|
64
66
|
runnable = undefined;
|
|
65
67
|
is_flow = nis_flow;
|
|
66
68
|
schedule = '0 0 12 * *';
|
|
69
|
+
paused_until = undefined;
|
|
70
|
+
showPauseUntil = false;
|
|
67
71
|
let defaultErrorHandlerMaybe = undefined;
|
|
68
72
|
let defaultRecoveryHandlerMaybe = undefined;
|
|
69
73
|
if ($workspaceStore) {
|
|
@@ -224,6 +228,8 @@ async function loadSchedule() {
|
|
|
224
228
|
enabled = s.enabled;
|
|
225
229
|
schedule = s.schedule;
|
|
226
230
|
timezone = s.timezone;
|
|
231
|
+
paused_until = s.paused_until;
|
|
232
|
+
showPauseUntil = paused_until !== undefined;
|
|
227
233
|
summary = s.summary ?? '';
|
|
228
234
|
script_path = s.script_path ?? '';
|
|
229
235
|
await loadScript(script_path);
|
|
@@ -306,7 +312,8 @@ async function scheduleScript() {
|
|
|
306
312
|
retry: retry,
|
|
307
313
|
summary: summary != '' ? summary : undefined,
|
|
308
314
|
no_flow_overlap: no_flow_overlap,
|
|
309
|
-
tag: tag
|
|
315
|
+
tag: tag,
|
|
316
|
+
paused_until: paused_until
|
|
310
317
|
}
|
|
311
318
|
});
|
|
312
319
|
sendUserToast(`Schedule ${path} updated`);
|
|
@@ -335,7 +342,8 @@ async function scheduleScript() {
|
|
|
335
342
|
retry: retry,
|
|
336
343
|
summary: summary != '' ? summary : undefined,
|
|
337
344
|
no_flow_overlap: no_flow_overlap,
|
|
338
|
-
tag: tag
|
|
345
|
+
tag: tag,
|
|
346
|
+
paused_until: paused_until
|
|
339
347
|
}
|
|
340
348
|
});
|
|
341
349
|
sendUserToast(`Schedule ${path} created`);
|
|
@@ -362,6 +370,8 @@ $: {
|
|
|
362
370
|
let drawer;
|
|
363
371
|
let pathC;
|
|
364
372
|
let dirtyPath = false;
|
|
373
|
+
let showPauseUntil = false;
|
|
374
|
+
$: !showPauseUntil && (paused_until = undefined);
|
|
365
375
|
</script>
|
|
366
376
|
|
|
367
377
|
<Drawer size="900px" bind:this={drawer}>
|
|
@@ -377,9 +387,9 @@ let dirtyPath = false;
|
|
|
377
387
|
variant="border"
|
|
378
388
|
startIcon={{ icon: List }}
|
|
379
389
|
disabled={!allowSchedule || pathError != '' || emptyString(script_path)}
|
|
380
|
-
href={`/runs/${script_path}`}
|
|
390
|
+
href={`/runs/${script_path}?show_schedules=true&show_future_jobs=true`}
|
|
381
391
|
>
|
|
382
|
-
View
|
|
392
|
+
View runs
|
|
383
393
|
</Button>
|
|
384
394
|
</div>
|
|
385
395
|
<div class="mr-8 center-center -mt-1">
|
|
@@ -479,6 +489,18 @@ let dirtyPath = false;
|
|
|
479
489
|
<Tooltip>Schedules use CRON syntax. Seconds are mandatory.</Tooltip>
|
|
480
490
|
</svelte:fragment>
|
|
481
491
|
<CronInput disabled={!can_write} bind:schedule bind:timezone bind:validCRON />
|
|
492
|
+
<Toggle
|
|
493
|
+
options={{
|
|
494
|
+
right: 'Pause schedule until...',
|
|
495
|
+
rightTooltip:
|
|
496
|
+
'Pausing the schedule will program the next job to run as if the schedule starts at the time the pause is lifted, instead of now.'
|
|
497
|
+
}}
|
|
498
|
+
bind:checked={showPauseUntil}
|
|
499
|
+
size="xs"
|
|
500
|
+
/>
|
|
501
|
+
{#if showPauseUntil}
|
|
502
|
+
<DateTimeInput bind:value={paused_until} />
|
|
503
|
+
{/if}
|
|
482
504
|
</Section>
|
|
483
505
|
<Section label="Runnable">
|
|
484
506
|
{#if !edit}
|
|
@@ -12,7 +12,7 @@ import DrawerContent from './common/drawer/DrawerContent.svelte';
|
|
|
12
12
|
import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
|
|
13
13
|
import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
|
|
14
14
|
import ErrorHandlerToggleButton from './details/ErrorHandlerToggleButton.svelte';
|
|
15
|
-
import { Bug, Calendar, CheckCircle, Code, DiffIcon, Pen, Plus, Rocket, Save, Settings, X } from 'lucide-svelte';
|
|
15
|
+
import { Bug, Calendar, CheckCircle, Code, CornerDownLeft, DiffIcon, Pen, Plus, Rocket, Save, Settings, X } from 'lucide-svelte';
|
|
16
16
|
import { sendUserToast } from '../toast';
|
|
17
17
|
import { isCloudHosted } from '../cloud';
|
|
18
18
|
import Awareness from './Awareness.svelte';
|
|
@@ -29,6 +29,8 @@ import { writable } from 'svelte/store';
|
|
|
29
29
|
import { loadScriptSchedule, defaultScriptLanguages } from '../scripts';
|
|
30
30
|
import DefaultScripts from './DefaultScripts.svelte';
|
|
31
31
|
import { createEventDispatcher } from 'svelte';
|
|
32
|
+
import CustomPopover from './CustomPopover.svelte';
|
|
33
|
+
import Summary from './Summary.svelte';
|
|
32
34
|
export let script;
|
|
33
35
|
export let initialPath = '';
|
|
34
36
|
export let template = 'script';
|
|
@@ -39,6 +41,7 @@ export let diffDrawer = undefined;
|
|
|
39
41
|
export let savedScript = undefined;
|
|
40
42
|
export let searchParams = new URLSearchParams();
|
|
41
43
|
export let disableHistoryChange = false;
|
|
44
|
+
export let replaceStateFn = (url) => window.history.replaceState(null, '', url);
|
|
42
45
|
let metadataOpen = showMeta ||
|
|
43
46
|
(initialPath == '' &&
|
|
44
47
|
searchParams.get('state') == undefined &&
|
|
@@ -110,7 +113,7 @@ $: {
|
|
|
110
113
|
}
|
|
111
114
|
});
|
|
112
115
|
}
|
|
113
|
-
$: !disableHistoryChange &&
|
|
116
|
+
$: !disableHistoryChange && replaceStateFn('#' + encodeState(script));
|
|
114
117
|
if (script.content == '') {
|
|
115
118
|
initContent(script.language, script.kind, template);
|
|
116
119
|
}
|
|
@@ -143,7 +146,7 @@ async function createSchedule(path) {
|
|
|
143
146
|
sendUserToast(`The primary schedule could not be created: ${err}`, true);
|
|
144
147
|
}
|
|
145
148
|
}
|
|
146
|
-
async function editScript(stay) {
|
|
149
|
+
async function editScript(stay, deploymentMsg) {
|
|
147
150
|
loadingSave = true;
|
|
148
151
|
try {
|
|
149
152
|
try {
|
|
@@ -185,7 +188,8 @@ async function editScript(stay) {
|
|
|
185
188
|
timeout: script.timeout,
|
|
186
189
|
concurrency_key: emptyString(script.concurrency_key) ? undefined : script.concurrency_key,
|
|
187
190
|
visible_to_runner_only: script.visible_to_runner_only,
|
|
188
|
-
no_main_func: script.no_main_func
|
|
191
|
+
no_main_func: script.no_main_func,
|
|
192
|
+
deployment_message: deploymentMsg || undefined
|
|
189
193
|
}
|
|
190
194
|
});
|
|
191
195
|
const { enabled, timezone, args, cron, summary } = $scheduleStore;
|
|
@@ -380,6 +384,8 @@ function onKeyDown(event) {
|
|
|
380
384
|
let path = undefined;
|
|
381
385
|
let dirtyPath = false;
|
|
382
386
|
let selectedTab = 'metadata';
|
|
387
|
+
let deploymentMsg = '';
|
|
388
|
+
let msgInput = undefined;
|
|
383
389
|
</script>
|
|
384
390
|
|
|
385
391
|
<svelte:window on:keydown={onKeyDown} />
|
|
@@ -917,7 +923,7 @@ let selectedTab = 'metadata';
|
|
|
917
923
|
<div class="flex flex-col h-screen">
|
|
918
924
|
<div class="flex h-12 items-center px-4">
|
|
919
925
|
<div class="justify-between flex gap-2 lg:gap-8 w-full items-center">
|
|
920
|
-
<div class="flex flex-row gap-2">
|
|
926
|
+
<div class="flex flex-row gap-2 grow max-w-md">
|
|
921
927
|
<div class="center-center">
|
|
922
928
|
<button
|
|
923
929
|
on:click={async () => {
|
|
@@ -927,14 +933,7 @@ let selectedTab = 'metadata';
|
|
|
927
933
|
<LanguageIcon lang={script.language} height={20} />
|
|
928
934
|
</button>
|
|
929
935
|
</div>
|
|
930
|
-
<
|
|
931
|
-
<input
|
|
932
|
-
type="text"
|
|
933
|
-
placeholder="Script summary"
|
|
934
|
-
class="text-sm w-full font-semibold"
|
|
935
|
-
bind:value={script.summary}
|
|
936
|
-
/>
|
|
937
|
-
</div>
|
|
936
|
+
<Summary bind:value={script.summary} />
|
|
938
937
|
</div>
|
|
939
938
|
|
|
940
939
|
<div class="gap-4 flex">
|
|
@@ -1032,15 +1031,41 @@ let selectedTab = 'metadata';
|
|
|
1032
1031
|
>
|
|
1033
1032
|
<span class="hidden lg:flex"> Draft </span>
|
|
1034
1033
|
</Button>
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1034
|
+
|
|
1035
|
+
<CustomPopover appearTimeout={0} focusEl={msgInput}>
|
|
1036
|
+
<Button
|
|
1037
|
+
loading={loadingSave}
|
|
1038
|
+
size="xs"
|
|
1039
|
+
startIcon={{ icon: Save }}
|
|
1040
|
+
on:click={() => editScript(false)}
|
|
1041
|
+
dropdownItems={computeDropdownItems(initialPath)}
|
|
1042
|
+
>
|
|
1043
|
+
Deploy
|
|
1044
|
+
</Button>
|
|
1045
|
+
<svelte:fragment slot="overlay">
|
|
1046
|
+
<div class="flex flex-row gap-2 min-w-72">
|
|
1047
|
+
<input
|
|
1048
|
+
type="text"
|
|
1049
|
+
placeholder="Deployment message"
|
|
1050
|
+
bind:value={deploymentMsg}
|
|
1051
|
+
bind:this={msgInput}
|
|
1052
|
+
on:keydown={(e) => {
|
|
1053
|
+
if (e.key === 'Enter') {
|
|
1054
|
+
editScript(false, deploymentMsg)
|
|
1055
|
+
}
|
|
1056
|
+
}}
|
|
1057
|
+
/>
|
|
1058
|
+
<Button
|
|
1059
|
+
size="xs"
|
|
1060
|
+
on:click={() => editScript(false, deploymentMsg)}
|
|
1061
|
+
endIcon={{ icon: CornerDownLeft }}
|
|
1062
|
+
loading={loadingSave}
|
|
1063
|
+
>
|
|
1064
|
+
Deploy
|
|
1065
|
+
</Button>
|
|
1066
|
+
</div>
|
|
1067
|
+
</svelte:fragment>
|
|
1068
|
+
</CustomPopover>
|
|
1044
1069
|
</div>
|
|
1045
1070
|
</div>
|
|
1046
1071
|
</div>
|
|
@@ -13,6 +13,7 @@ declare const __propDef: {
|
|
|
13
13
|
savedScript?: NewScriptWithDraft | undefined;
|
|
14
14
|
searchParams?: URLSearchParams | undefined;
|
|
15
15
|
disableHistoryChange?: boolean | undefined;
|
|
16
|
+
replaceStateFn?: ((url: string) => void) | undefined;
|
|
16
17
|
setCode?: ((code: string) => void) | undefined;
|
|
17
18
|
};
|
|
18
19
|
events: {
|
|
@@ -8,14 +8,15 @@ let uf = new uFuzzy(opts);
|
|
|
8
8
|
$: plaintextItems = items?.map((item) => f(item)) ?? [];
|
|
9
9
|
$: plaintextItems && filter != undefined && setTimeout(() => filterItems(), 0);
|
|
10
10
|
function filterItems() {
|
|
11
|
-
|
|
11
|
+
let trimmed = filter.trim();
|
|
12
|
+
if (items == undefined || trimmed.length == 0) {
|
|
12
13
|
filteredItems = items;
|
|
13
14
|
return;
|
|
14
15
|
}
|
|
15
16
|
// pre-filter
|
|
16
|
-
let idxs = uf.filter(plaintextItems,
|
|
17
|
-
let info = uf.info(idxs, plaintextItems,
|
|
18
|
-
let order = uf.sort(info, plaintextItems,
|
|
17
|
+
let idxs = uf.filter(plaintextItems, trimmed) ?? [];
|
|
18
|
+
let info = uf.info(idxs, plaintextItems, trimmed);
|
|
19
|
+
let order = uf.sort(info, plaintextItems, trimmed);
|
|
19
20
|
let result = [];
|
|
20
21
|
for (let i = 0; i < order.length; i++) {
|
|
21
22
|
let infoIdx = order[i];
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<script>import { Pen } from 'lucide-svelte';
|
|
2
|
+
export let value;
|
|
3
|
+
function blur(e) {
|
|
4
|
+
e.key === 'Enter' && e?.target?.blur();
|
|
5
|
+
}
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<div class="flex flex-row center-center gap-1 min-w-32 lg:min-w-64 w-full max-w-md">
|
|
9
|
+
<div class="relative w-full">
|
|
10
|
+
<input
|
|
11
|
+
title="Rename"
|
|
12
|
+
type="text"
|
|
13
|
+
placeholder="Untitled"
|
|
14
|
+
class="windmillapp app-title text-sm w-full font-semibold"
|
|
15
|
+
bind:value
|
|
16
|
+
on:keydown={blur}
|
|
17
|
+
/>
|
|
18
|
+
<Pen class="absolute top-2 right-2 pen-icon -z-10 opacity-60" size={14} />
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<style global>
|
|
23
|
+
:global(.app-title) {
|
|
24
|
+
display: block;
|
|
25
|
+
width: 100%;
|
|
26
|
+
border-radius: 0.25rem;
|
|
27
|
+
border-width: 0px;
|
|
28
|
+
padding: 0.25rem;
|
|
29
|
+
padding-left: 0.5rem;
|
|
30
|
+
padding-right: 0.5rem;
|
|
31
|
+
font-size: 0.875rem;
|
|
32
|
+
line-height: 1.25rem;
|
|
33
|
+
font-weight: 600
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
:global(.app-title:hover) {
|
|
37
|
+
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
|
|
38
|
+
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
|
|
39
|
+
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
|
|
40
|
+
--tw-ring-opacity: 1;
|
|
41
|
+
--tw-ring-color: rgb(234 238 244 / var(--tw-ring-opacity));
|
|
42
|
+
--tw-ring-offset-width: 0px
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
:global(.app-title:focus) {
|
|
46
|
+
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
|
|
47
|
+
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
|
|
48
|
+
--tw-ring-opacity: 1;
|
|
49
|
+
--tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity));
|
|
50
|
+
--tw-ring-offset-width: 0px;
|
|
51
|
+
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
:global(.dark) :global(.app-title) {
|
|
55
|
+
--tw-border-opacity: 1;
|
|
56
|
+
border-color: rgb(75 85 99 / var(--tw-border-opacity));
|
|
57
|
+
--tw-bg-opacity: 1;
|
|
58
|
+
background-color: rgb(55 65 81 / var(--tw-bg-opacity));
|
|
59
|
+
--tw-text-opacity: 1;
|
|
60
|
+
color: rgb(var(--color-text-secondary) / var(--tw-text-opacity))
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
:global(.dark) :global(.app-title:focus) {
|
|
64
|
+
--tw-ring-opacity: 1 !important;
|
|
65
|
+
--tw-ring-color: rgb(94 129 172 / var(--tw-ring-opacity)) !important
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
:global(.dark) :global(.app-title:hover) {
|
|
69
|
+
--tw-ring-opacity: 1;
|
|
70
|
+
--tw-ring-color: rgb(54 77 110 / var(--tw-ring-opacity))
|
|
71
|
+
}
|
|
72
|
+
:global(.app-title:focus) + :global(.pen-icon) {
|
|
73
|
+
display: none
|
|
74
|
+
}</style>
|