diff --git a/frontend/src/lib/components/AppConnectDrawer.svelte b/frontend/src/lib/components/AppConnectDrawer.svelte index fa7393bcfc..44aacc4bab 100644 --- a/frontend/src/lib/components/AppConnectDrawer.svelte +++ b/frontend/src/lib/components/AppConnectDrawer.svelte @@ -1,4 +1,6 @@ @@ -46,7 +53,7 @@ > drawer?.closeDrawer()} tooltip="Resources represent connections to third party systems. Learn more on how to integrate external APIs." documentationLink="https://www.windmill.dev/docs/integrations/integrations_on_windmill" > @@ -57,7 +64,7 @@ bind:isGoogleSignin bind:disabled bind:manual - on:close={drawer?.closeDrawer} + on:close={() => drawer?.closeDrawer()} on:refresh express={expressOAuthSetup} /> @@ -67,7 +74,7 @@ {})}>Back {/if} {#if isGoogleSignin} - + + import { run } from 'svelte/legacy'; + import IconedResourceType from './IconedResourceType.svelte' import Toggle from './Toggle.svelte' - export let value: any + interface Props { + value: any; + } - $: enabled = value != undefined + let { value = $bindable() }: Props = $props(); - let org = '' - $: changeOrg(org) + let org = $state('') + function changeOrg(org) { if (value) { @@ -28,10 +32,14 @@ } } } + let enabled = $derived(value != undefined) + run(() => { + changeOrg(org) + }); - + + import { run } from 'svelte/legacy'; + import IconedResourceType from './IconedResourceType.svelte' import Toggle from './Toggle.svelte' - export let value: any + interface Props { + value: any; + } - $: enabled = value != undefined + let { value = $bindable() }: Props = $props(); - let org = '' - $: changeOrg(org) + let org = $state('') + function changeOrg(org) { if (value) { @@ -28,10 +32,14 @@ } } } + let enabled = $derived(value != undefined) + run(() => { + changeOrg(org) + }); - + + import { run } from 'svelte/legacy'; + import { ExternalLink } from 'lucide-svelte' import OauthScopes from './OauthScopes.svelte' - export let connect_config: { + interface Props { + connect_config?: { scopes: string[] auth_url: string token_url: string req_body_auth: boolean extra_params: { tenant_id: string } extra_params_callback: Record - } = { + }; + } + + let { connect_config = $bindable({ scopes: ['offline_access'], auth_url: '', token_url: '', req_body_auth: true, extra_params: { tenant_id: '' }, extra_params_callback: {} - } + }) }: Props = $props(); - $: if (!connect_config) { - connect_config = { - scopes: ['offline_access'], - auth_url: '', - token_url: '', - req_body_auth: true, - extra_params: { tenant_id: '' }, - extra_params_callback: {} + run(() => { + if (!connect_config) { + connect_config = { + scopes: ['offline_access'], + auth_url: '', + token_url: '', + req_body_auth: true, + extra_params: { tenant_id: '' }, + extra_params_callback: {} + } } - } + }); - $: if (connect_config.extra_params.tenant_id) { - connect_config.auth_url = `https://login.microsoftonline.com/${connect_config.extra_params.tenant_id}/oauth2/v2.0/authorize` - connect_config.token_url = `https://login.microsoftonline.com/${connect_config.extra_params.tenant_id}/oauth2/v2.0/token` - } + run(() => { + if (connect_config.extra_params.tenant_id) { + connect_config.auth_url = `https://login.microsoftonline.com/${connect_config.extra_params.tenant_id}/oauth2/v2.0/authorize` + connect_config.token_url = `https://login.microsoftonline.com/${connect_config.extra_params.tenant_id}/oauth2/v2.0/token` + } + }); diff --git a/frontend/src/lib/components/Badge.svelte b/frontend/src/lib/components/Badge.svelte index 11042b4f1e..8dcad8ef8e 100644 --- a/frontend/src/lib/components/Badge.svelte +++ b/frontend/src/lib/components/Badge.svelte @@ -1,12 +1,22 @@ - + {@render children?.()} {#if tooltip && tooltip != ''} {tooltip} {/if} diff --git a/frontend/src/lib/components/CenteredModal.svelte b/frontend/src/lib/components/CenteredModal.svelte index 94dc9dd550..58ae97ad77 100644 --- a/frontend/src/lib/components/CenteredModal.svelte +++ b/frontend/src/lib/components/CenteredModal.svelte @@ -4,10 +4,21 @@ import WindmillIcon from './icons/WindmillIcon.svelte' import LoginPageHeader from './LoginPageHeader.svelte' - export let subtitle: string | undefined = undefined - export let title = 'Windmill' - export let disableLogo = false - export let large = false + interface Props { + subtitle?: string | undefined; + title?: string; + disableLogo?: boolean; + large?: boolean; + children?: import('svelte').Snippet; + } + + let { + subtitle = undefined, + title = 'Windmill', + disableLogo = false, + large = false, + children + }: Props = $props(); setLicense() @@ -38,7 +49,7 @@ {/if} - + {@render children?.()} diff --git a/frontend/src/lib/components/CenteredPage.svelte b/frontend/src/lib/components/CenteredPage.svelte index b6b85933d6..f9bedf2a54 100644 --- a/frontend/src/lib/components/CenteredPage.svelte +++ b/frontend/src/lib/components/CenteredPage.svelte @@ -1,9 +1,15 @@ - - - + + {@render children?.()} diff --git a/frontend/src/lib/components/ChangeInstanceUsernameInner.svelte b/frontend/src/lib/components/ChangeInstanceUsernameInner.svelte index 8b4d41eea1..1aa8559e7e 100644 --- a/frontend/src/lib/components/ChangeInstanceUsernameInner.svelte +++ b/frontend/src/lib/components/ChangeInstanceUsernameInner.svelte @@ -5,12 +5,21 @@ import Alert from './common/alert/Alert.svelte' import { createEventDispatcher } from 'svelte' - export let email: string - export let username: string - export let isConflict = false - export let noPadding = false + interface Props { + email: string; + username: string; + isConflict?: boolean; + noPadding?: boolean; + } - let loading = false + let { + email, + username = $bindable(), + isConflict = false, + noPadding = false + }: Props = $props(); + + let loading = $state(false) let usernameInfo: | { @@ -20,7 +29,7 @@ username: string }[] } - | undefined = undefined + | undefined = $state(undefined) function handleKeyUp(event: KeyboardEvent) { const key = event.key @@ -83,7 +92,7 @@ diff --git a/frontend/src/lib/components/CollapseLink.svelte b/frontend/src/lib/components/CollapseLink.svelte index a723eea703..ea409e7065 100644 --- a/frontend/src/lib/components/CollapseLink.svelte +++ b/frontend/src/lib/components/CollapseLink.svelte @@ -4,12 +4,24 @@ import { twMerge } from 'tailwind-merge' import { ChevronDown } from 'lucide-svelte' - export let open = false - export let text: string - export let small = false + interface Props { + open?: boolean + text: string + small?: boolean + children?: import('svelte').Snippet + class?: string + } + + let { + open = $bindable(false), + text, + small = false, + children, + class: className = '' + }: Props = $props() - + {#if open} - + {@render children?.()} {/if} diff --git a/frontend/src/lib/components/ConfirmButton.svelte b/frontend/src/lib/components/ConfirmButton.svelte index e0c3a8d974..0d35b8f9fb 100644 --- a/frontend/src/lib/components/ConfirmButton.svelte +++ b/frontend/src/lib/components/ConfirmButton.svelte @@ -3,8 +3,13 @@ import { Check, X } from 'lucide-svelte' import { createEventDispatcher } from 'svelte' - export let confirmation: string = 'Are you sure?' - let firstClick = false + interface Props { + confirmation?: string; + children?: import('svelte').Snippet; + } + + let { confirmation = 'Are you sure?', children }: Props = $props(); + let firstClick = $state(false) const dispatch = createEventDispatcher() @@ -13,7 +18,7 @@ { firstClick = true - }}>{@render children?.()} {:else} {confirmation} diff --git a/frontend/src/lib/components/ConnectionSection.svelte b/frontend/src/lib/components/ConnectionSection.svelte index 8f42e08f05..0a28921cf9 100644 --- a/frontend/src/lib/components/ConnectionSection.svelte +++ b/frontend/src/lib/components/ConnectionSection.svelte @@ -15,21 +15,39 @@ team_name: string } - export let platform: 'slack' | 'teams' - export let teamName: string | undefined - export let display_name: string | undefined - export let scriptPath: string - export let initialPath: string - export let onDisconnect: () => Promise - export let onSelect: () => Promise - export let connectHref: string | undefined - export let createScriptHref: string - export let createFlowHref: string - export let documentationLink: string - export let onLoadSettings: () => void - export let itemKind: 'flow' | 'script' = 'script' + interface Props { + platform: 'slack' | 'teams'; + teamName: string | undefined; + display_name: string | undefined; + scriptPath: string; + initialPath: string; + onDisconnect: () => Promise; + onSelect: () => Promise; + connectHref: string | undefined; + createScriptHref: string; + createFlowHref: string; + documentationLink: string; + onLoadSettings: () => void; + itemKind?: 'flow' | 'script'; + } - let selectedTeam: TeamItem | undefined = undefined + let { + platform, + teamName, + display_name, + scriptPath = $bindable(), + initialPath, + onDisconnect, + onSelect, + connectHref, + createScriptHref, + createFlowHref, + documentationLink, + onLoadSettings, + itemKind = $bindable('script') + }: Props = $props(); + + let selectedTeam: TeamItem | undefined = $state(undefined) async function connectTeams() { if (!selectedTeam) return diff --git a/frontend/src/lib/components/ContextualVariableEditor.svelte b/frontend/src/lib/components/ContextualVariableEditor.svelte index b859e08691..43277787ba 100644 --- a/frontend/src/lib/components/ContextualVariableEditor.svelte +++ b/frontend/src/lib/components/ContextualVariableEditor.svelte @@ -13,25 +13,25 @@ const dispatch = createEventDispatcher() - let edit: boolean = false - let name: string = '' - let value: string = '' + let edit: boolean = $state(false) + let name: string = $state('') + let value: string = $state('') export function initNew(): void { edit = false name = '' value = '' - drawer.openDrawer() + drawer?.openDrawer() } export function editVariable(editName: string, editValue: string): void { edit = true name = editName value = editValue - drawer.openDrawer() + drawer?.openDrawer() } - let drawer: Drawer + let drawer: Drawer | undefined = $state() async function updateVariable(): Promise { await WorkspaceService.setEnvironmentVariable({ @@ -48,7 +48,7 @@ ) dispatch('update') - drawer.closeDrawer() + drawer?.closeDrawer() setTimeout(() => { dispatch('update') }, 5000) @@ -58,7 +58,7 @@ {#if !edit} diff --git a/frontend/src/lib/components/CronInput.svelte b/frontend/src/lib/components/CronInput.svelte index b7febcdaca..87b9b183e1 100644 --- a/frontend/src/lib/components/CronInput.svelte +++ b/frontend/src/lib/components/CronInput.svelte @@ -219,7 +219,7 @@ {#if !disabled} {@render cronBuilder()} - + {/if} diff --git a/frontend/src/lib/components/CustomOauth.svelte b/frontend/src/lib/components/CustomOauth.svelte index 5ae21602df..0cca13b465 100644 --- a/frontend/src/lib/components/CustomOauth.svelte +++ b/frontend/src/lib/components/CustomOauth.svelte @@ -1,28 +1,32 @@ @@ -41,12 +45,12 @@ bind:value={connect_config.token_url} /> - + Scopes - + Extra Query Args for Authorize Request - + Extra Query Args for Token request Not needed in most cases - + Payload @@ -51,12 +55,12 @@ bind:value={login_config.userinfo_url} /> - + Scopes - + Extra Query Args for Authorize Request - + Extra Query Args for Token request Not needed in most cases - + Payload - - - + {#snippet buttonReplacement()} + + + + {/snippet} {/if} diff --git a/frontend/src/lib/components/DateInput.svelte b/frontend/src/lib/components/DateInput.svelte index c39e6149e3..6e311d0f54 100644 --- a/frontend/src/lib/components/DateInput.svelte +++ b/frontend/src/lib/components/DateInput.svelte @@ -1,19 +1,33 @@ - - + + { + onchange={() => { if (date) { updateValue(date) } diff --git a/frontend/src/lib/components/DefaultScripts.svelte b/frontend/src/lib/components/DefaultScripts.svelte index 40a8420278..b693ad2222 100644 --- a/frontend/src/lib/components/DefaultScripts.svelte +++ b/frontend/src/lib/components/DefaultScripts.svelte @@ -6,11 +6,15 @@ import DrawerContent from './common/drawer/DrawerContent.svelte' import DefaultScriptsInner from './DefaultScriptsInner.svelte' - let drawer: Drawer - export let placement: 'left' | 'right' = 'left' + let drawer: Drawer | undefined = $state() - export let size: 'xs3' | 'xs2' = 'xs2' - export let noText = false + interface Props { + placement?: 'left' | 'right' + size?: 'xs3' | 'xs2' + noText?: boolean + } + + let { placement = 'left', size = 'xs2', noText = false }: Props = $props() {#if $userStore?.is_admin || $userStore?.is_super_admin} diff --git a/frontend/src/lib/components/DefaultScriptsInner.svelte b/frontend/src/lib/components/DefaultScriptsInner.svelte index 6d4979aae1..1a451d8264 100644 --- a/frontend/src/lib/components/DefaultScriptsInner.svelte +++ b/frontend/src/lib/components/DefaultScriptsInner.svelte @@ -6,8 +6,11 @@ import { defaultScriptLanguages } from '$lib/scripts' import Alert from './common/alert/Alert.svelte' - export let small = false - $: langs = computeLangs($defaultScripts) + interface Props { + small?: boolean; + } + + let { small = false }: Props = $props(); function computeLangs(defaultScripts: WorkspaceDefaultScripts | undefined): Script['language'][] { const allLangs = Object.keys(defaultScriptLanguages) as Script['language'][] @@ -30,6 +33,7 @@ requestBody: $defaultScripts }) } + let langs = $derived(computeLangs($defaultScripts)) @@ -47,7 +51,7 @@ {#if i > 0} changePosition(i ?? 0, true)} + onclick={() => changePosition(i ?? 0, true)} class={small ? 'mr-2 text-secondary text-sm' : 'text-lg mr-2'} title="Move up" > @@ -56,7 +60,7 @@ {/if} {#if i < langs.length - 1} changePosition(i ?? 0, false)} + onclick={() => changePosition(i ?? 0, false)} class={small ? 'mr-2 text-secondary text-sm' : 'text-lg mr-2'} title="Move down">↓ diff --git a/frontend/src/lib/components/DefaultTagsInner.svelte b/frontend/src/lib/components/DefaultTagsInner.svelte index 610da15112..a5575c30f0 100644 --- a/frontend/src/lib/components/DefaultTagsInner.svelte +++ b/frontend/src/lib/components/DefaultTagsInner.svelte @@ -10,12 +10,16 @@ import MultiSelect from './select/MultiSelect.svelte' import { safeSelectItems } from './select/utils.svelte' - let defaultTags: string[] | undefined = undefined - export let defaultTagPerWorkspace: boolean | undefined = undefined - export let defaultTagWorkspaces: string[] = [] - let limitToWorkspaces = false + let defaultTags: string[] | undefined = $state(undefined) + interface Props { + defaultTagPerWorkspace?: boolean | undefined; + defaultTagWorkspaces?: string[]; + } - let workspaces: string[] = [] + let { defaultTagPerWorkspace = $bindable(undefined), defaultTagWorkspaces = $bindable([]) }: Props = $props(); + let limitToWorkspaces = $state(false) + + let workspaces: string[] = $state([]) async function loadWorkspaces() { workspaces = (await WorkspaceService.listWorkspacesAsSuperAdmin()).map((m) => m.id) } diff --git a/frontend/src/lib/components/DeployToSetting.svelte b/frontend/src/lib/components/DeployToSetting.svelte index 7add91c982..ed41f81d0a 100644 --- a/frontend/src/lib/components/DeployToSetting.svelte +++ b/frontend/src/lib/components/DeployToSetting.svelte @@ -9,9 +9,9 @@ import Toggle from './Toggle.svelte' import { emptyString } from '$lib/utils' - $: deployableWorkspaces = $usersWorkspaceStore?.workspaces - .map((w) => w.id) - .filter((w) => w != $workspaceStore) + let deployableWorkspaces = $derived( + $usersWorkspaceStore?.workspaces.map((w) => w.id).filter((w) => w != $workspaceStore) + ) type DeployUITypeMap = { scripts: boolean @@ -34,14 +34,21 @@ triggers: true } - export let workspaceToDeployTo: string | undefined - export let deployUiSettings: { - include_path: string[] - include_type: DeployUITypeMap - } = { - include_path: [], - include_type: all_ok + interface Props { + workspaceToDeployTo: string | undefined + deployUiSettings?: { + include_path: string[] + include_type: DeployUITypeMap + } } + + let { + workspaceToDeployTo = $bindable(), + deployUiSettings = $bindable({ + include_path: [], + include_type: all_ok + }) + }: Props = $props() function deployUITypeMapToArray( typesMap: DeployUITypeMap, expectedValue: boolean @@ -91,7 +98,7 @@ { + onchange={async (e) => { await WorkspaceService.editDeployTo({ workspace: $workspaceStore ?? '', requestBody: { deploy_to: workspaceToDeployTo == '' ? undefined : workspaceToDeployTo } @@ -125,14 +132,14 @@ anything including slashes. - {#each deployUiSettings.include_path ?? [] as regexpPath, idx} + {#each deployUiSettings.include_path ?? [] as _, idx} - + { + onclick={() => { deployUiSettings.include_path.splice(idx, 1) deployUiSettings.include_path = [...deployUiSettings.include_path] }} diff --git a/frontend/src/lib/components/DeployWorkspaceDrawer.svelte b/frontend/src/lib/components/DeployWorkspaceDrawer.svelte index 6a83d96393..7ff58809e5 100644 --- a/frontend/src/lib/components/DeployWorkspaceDrawer.svelte +++ b/frontend/src/lib/components/DeployWorkspaceDrawer.svelte @@ -4,12 +4,12 @@ import DeployWorkspace from './DeployWorkspace.svelte' import { type AdditionalInformation, type Kind } from '$lib/utils_deployable' - let initialPath: string | undefined = undefined - let kind: Kind | undefined = undefined - let drawer: Drawer | undefined = undefined - let workspaceToDeployTo: string | undefined = undefined - let deployWorkspace: DeployWorkspace | undefined = undefined - let additionalInformation: AdditionalInformation | undefined = undefined + let initialPath: string | undefined = $state(undefined) + let kind: Kind | undefined = $state(undefined) + let drawer: Drawer | undefined = $state(undefined) + let workspaceToDeployTo: string | undefined = $state(undefined) + let deployWorkspace: DeployWorkspace | undefined = $state(undefined) + let additionalInformation: AdditionalInformation | undefined = $state(undefined) export async function openDrawer( initialPath_l: string, diff --git a/frontend/src/lib/components/Description.svelte b/frontend/src/lib/components/Description.svelte index fb0e361eb9..29347345c1 100644 --- a/frontend/src/lib/components/Description.svelte +++ b/frontend/src/lib/components/Description.svelte @@ -1,3 +1,4 @@ + diff --git a/frontend/src/lib/components/ExecutionDuration.svelte b/frontend/src/lib/components/ExecutionDuration.svelte index 9044adff36..0b96607bfe 100644 --- a/frontend/src/lib/components/ExecutionDuration.svelte +++ b/frontend/src/lib/components/ExecutionDuration.svelte @@ -1,32 +1,40 @@ diff --git a/frontend/src/lib/components/FieldHeader.svelte b/frontend/src/lib/components/FieldHeader.svelte index 87119c8e75..8b56bdfd79 100644 --- a/frontend/src/lib/components/FieldHeader.svelte +++ b/frontend/src/lib/components/FieldHeader.svelte @@ -5,19 +5,37 @@ import Tooltip from './meltComponents/Tooltip.svelte' import { InfoIcon } from 'lucide-svelte' - export let label: string - export let format: string = '' - export let contentEncoding = '' - export let type: string | undefined = undefined - export let disabled: boolean = false - export let required = false - export let displayType: boolean = true - export let labelClass: string = '' - export let prettify = false - export let simpleTooltip: string | undefined = undefined - export let lightHeader = false - export let SimpleTooltipIcon = InfoIcon - export let simpleTooltipIconClass = '' + interface Props { + label: string; + format?: string; + contentEncoding?: string; + type?: string | undefined; + disabled?: boolean; + required?: boolean; + displayType?: boolean; + labelClass?: string; + prettify?: boolean; + simpleTooltip?: string | undefined; + lightHeader?: boolean; + SimpleTooltipIcon?: any; + simpleTooltipIconClass?: string; + } + + let { + label, + format = '', + contentEncoding = '', + type = undefined, + disabled = false, + required = false, + displayType = true, + labelClass = '', + prettify = false, + simpleTooltip = undefined, + lightHeader = false, + SimpleTooltipIcon = InfoIcon, + simpleTooltipIconClass = '' + }: Props = $props(); @@ -54,9 +72,11 @@ {#if !emptyString(simpleTooltip)} - - {simpleTooltip} - + {#snippet text()} + + {simpleTooltip} + + {/snippet} {/if} diff --git a/frontend/src/lib/components/FlowGraphViewer.svelte b/frontend/src/lib/components/FlowGraphViewer.svelte index 5297ed3584..f305cb34e7 100644 --- a/frontend/src/lib/components/FlowGraphViewer.svelte +++ b/frontend/src/lib/components/FlowGraphViewer.svelte @@ -9,21 +9,34 @@ import { dfs } from './flows/dfs' import { workspaceStore } from '$lib/stores' - export let flow: { + + interface Props { + flow: { summary: string description?: string value: FlowValue schema?: any path?: string + }; + overflowAuto?: boolean; + noSide?: boolean; + download?: boolean; + noGraph?: boolean; + triggerNode?: boolean; + stepDetail?: FlowModule | string | undefined; + workspace?: string | undefined; } - export let overflowAuto = false - export let noSide = false - export let download = false - export let noGraph = false - export let triggerNode = false - export let stepDetail: FlowModule | string | undefined = undefined - export let workspace: string | undefined = $workspaceStore + let { + flow, + overflowAuto = false, + noSide = false, + download = false, + noGraph = false, + triggerNode = false, + stepDetail = $bindable(undefined), + workspace = $workspaceStore + }: Props = $props(); const dispatch = createEventDispatcher() diff --git a/frontend/src/lib/components/FlowGraphViewerStep.svelte b/frontend/src/lib/components/FlowGraphViewerStep.svelte index 6fcb5c902c..46c7679723 100644 --- a/frontend/src/lib/components/FlowGraphViewerStep.svelte +++ b/frontend/src/lib/components/FlowGraphViewerStep.svelte @@ -18,16 +18,19 @@ import { Copy } from 'lucide-svelte' import HighlightTheme from './HighlightTheme.svelte' - export let schema: any | undefined = undefined + interface Props { + schema?: any | undefined + stepDetail?: FlowModule | string | undefined + } - export let stepDetail: FlowModule | string | undefined = undefined - let codeViewer: Drawer + let { schema = undefined, stepDetail = undefined }: Props = $props() + let codeViewer: Drawer | undefined = $state() - + codeViewer?.closeDrawer()}> {#if stepDetail && typeof stepDetail != 'string'} {#if stepDetail.value.type == 'script'} @@ -170,7 +173,12 @@ Code - + codeViewer?.openDrawer()} + > Expand @@ -205,7 +213,12 @@ Code - + codeViewer?.openDrawer()} + > Expand diff --git a/frontend/src/lib/components/FlowInputViewer.svelte b/frontend/src/lib/components/FlowInputViewer.svelte index 94c25ffcc4..62aef2dd37 100644 --- a/frontend/src/lib/components/FlowInputViewer.svelte +++ b/frontend/src/lib/components/FlowInputViewer.svelte @@ -3,7 +3,11 @@ import FieldHeader from './FieldHeader.svelte' - export let schema: Schema | { [key: string]: unknown } | undefined + interface Props { + schema: Schema | { [key: string]: unknown } | undefined; + } + + let { schema }: Props = $props(); diff --git a/frontend/src/lib/components/FlowPlugConnect.svelte b/frontend/src/lib/components/FlowPlugConnect.svelte index 10b00e7301..6640a7e137 100644 --- a/frontend/src/lib/components/FlowPlugConnect.svelte +++ b/frontend/src/lib/components/FlowPlugConnect.svelte @@ -4,9 +4,13 @@ import AnimatedButton from './common/button/AnimatedButton.svelte' import { twMerge } from 'tailwind-merge' - export let connecting: boolean - export let id: undefined | string = undefined - export let wrapperClasses = '' + interface Props { + connecting: boolean; + id?: undefined | string; + wrapperClasses?: string; + } + + let { connecting, id = undefined, wrapperClasses = '' }: Props = $props(); diff --git a/frontend/src/lib/components/FlowStatusWaitingForEvents.svelte b/frontend/src/lib/components/FlowStatusWaitingForEvents.svelte index 0ea5ad4d6b..4f1667dbdb 100644 --- a/frontend/src/lib/components/FlowStatusWaitingForEvents.svelte +++ b/frontend/src/lib/components/FlowStatusWaitingForEvents.svelte @@ -1,4 +1,6 @@ diff --git a/frontend/src/lib/components/FolderEditor.svelte b/frontend/src/lib/components/FolderEditor.svelte index a2023240cf..9ab5ec7293 100644 --- a/frontend/src/lib/components/FolderEditor.svelte +++ b/frontend/src/lib/components/FolderEditor.svelte @@ -267,7 +267,8 @@ {#if perms} - + + user/group diff --git a/frontend/src/lib/components/FolderUsageInfo.svelte b/frontend/src/lib/components/FolderUsageInfo.svelte index ab3241083a..cc706da9ed 100644 --- a/frontend/src/lib/components/FolderUsageInfo.svelte +++ b/frontend/src/lib/components/FolderUsageInfo.svelte @@ -1,19 +1,27 @@ {#if tabular} diff --git a/frontend/src/lib/components/GfmMarkdown.svelte b/frontend/src/lib/components/GfmMarkdown.svelte index 7392de5484..9dfe144bd3 100644 --- a/frontend/src/lib/components/GfmMarkdown.svelte +++ b/frontend/src/lib/components/GfmMarkdown.svelte @@ -3,7 +3,11 @@ import { gfmPlugin } from 'svelte-exmarkdown/gfm' import rehypeRaw from 'rehype-raw' import { rehypeGithubAlerts } from 'rehype-github-alerts' - export let md: string + interface Props { + md: string; + } + + let { md }: Props = $props(); const plugins: Plugin[] = [ gfmPlugin(), { rehypePlugin: [rehypeRaw] }, diff --git a/frontend/src/lib/components/GraphqlSchemaViewer.svelte b/frontend/src/lib/components/GraphqlSchemaViewer.svelte index 3f85839772..7e022798ca 100644 --- a/frontend/src/lib/components/GraphqlSchemaViewer.svelte +++ b/frontend/src/lib/components/GraphqlSchemaViewer.svelte @@ -1,3 +1,4 @@ + {#if entries.length} diff --git a/frontend/src/lib/components/InstanceGroupEditor.svelte b/frontend/src/lib/components/InstanceGroupEditor.svelte index cf2a3ded0a..a518ef9bd5 100644 --- a/frontend/src/lib/components/InstanceGroupEditor.svelte +++ b/frontend/src/lib/components/InstanceGroupEditor.svelte @@ -1,4 +1,6 @@ @@ -85,17 +91,19 @@ {#if members} - + + user - - {#each members as { member_email }} - {member_email} - - { + {#snippet body()} + + {#each members as { member_email }} + {member_email} + + { await GroupService.removeUserFromInstanceGroup({ name, requestBody: { email: member_email } @@ -104,10 +112,11 @@ sendUserToast('User removed') loadInstanceGroup() }}>remove - - {/each} - + > + + {/each} + + {/snippet} {:else} diff --git a/frontend/src/lib/components/InstanceNameEditor.svelte b/frontend/src/lib/components/InstanceNameEditor.svelte index 502396022f..fae89b33f9 100644 --- a/frontend/src/lib/components/InstanceNameEditor.svelte +++ b/frontend/src/lib/components/InstanceNameEditor.svelte @@ -1,4 +1,7 @@ - + Focus trap diff --git a/frontend/src/lib/components/KanidmSetting.svelte b/frontend/src/lib/components/KanidmSetting.svelte index c15ab6e022..9a651958e3 100644 --- a/frontend/src/lib/components/KanidmSetting.svelte +++ b/frontend/src/lib/components/KanidmSetting.svelte @@ -1,22 +1,20 @@ - + + import { run } from 'svelte/legacy'; + import IconedResourceType from './IconedResourceType.svelte' import Toggle from './Toggle.svelte' - export let value: any + interface Props { + value: any; + } - $: enabled = value != undefined + let { value = $bindable() }: Props = $props(); - let org = '' - $: changeOrg(org) + let org = $state('') + function changeOrg(org) { if (value) { @@ -28,10 +32,14 @@ } } } + let enabled = $derived(value != undefined) + run(() => { + changeOrg(org) + }); - + - export let id: string + import { run } from 'svelte/legacy'; - $: id && console.log('updateJobId') + interface Props { + id: string; + } + + let { id }: Props = $props(); + + run(() => { + id && console.log('updateJobId') + }); diff --git a/frontend/src/lib/components/LogSnippetViewer.svelte b/frontend/src/lib/components/LogSnippetViewer.svelte index 1781351573..97828cd3f2 100644 --- a/frontend/src/lib/components/LogSnippetViewer.svelte +++ b/frontend/src/lib/components/LogSnippetViewer.svelte @@ -1,8 +1,15 @@ - + { + onClick?.() + bubble('click') + }} + class="font-light !m-0 !p-0" +> {@html html} diff --git a/frontend/src/lib/components/ManualPopover.svelte b/frontend/src/lib/components/ManualPopover.svelte index ddeadf79cc..8182cfcf9b 100644 --- a/frontend/src/lib/components/ManualPopover.svelte +++ b/frontend/src/lib/components/ManualPopover.svelte @@ -1,3 +1,4 @@ + diff --git a/frontend/src/lib/components/MemoryFootprintViewer.svelte b/frontend/src/lib/components/MemoryFootprintViewer.svelte index afcdfb82a4..df3ecdb0f4 100644 --- a/frontend/src/lib/components/MemoryFootprintViewer.svelte +++ b/frontend/src/lib/components/MemoryFootprintViewer.svelte @@ -1,4 +1,6 @@ diff --git a/frontend/src/lib/components/ModuleStatus.svelte b/frontend/src/lib/components/ModuleStatus.svelte index 645097b3d0..09417ec023 100644 --- a/frontend/src/lib/components/ModuleStatus.svelte +++ b/frontend/src/lib/components/ModuleStatus.svelte @@ -5,9 +5,13 @@ import { displayDate } from '$lib/utils' import { Hourglass } from 'lucide-svelte' - export let type: FlowStatusModule['type'] - export let scheduled_for: Date | undefined - export let skipped: boolean = false + interface Props { + type: FlowStatusModule['type']; + scheduled_for: Date | undefined; + skipped?: boolean; + } + + let { type, scheduled_for, skipped = false }: Props = $props(); {#if type == 'WaitingForEvents'} diff --git a/frontend/src/lib/components/MoveDrawer.svelte b/frontend/src/lib/components/MoveDrawer.svelte index 2979987629..8014969403 100644 --- a/frontend/src/lib/components/MoveDrawer.svelte +++ b/frontend/src/lib/components/MoveDrawer.svelte @@ -11,14 +11,14 @@ type Kind = 'script' | 'resource' | 'schedule' | 'variable' | 'flow' | 'app' | 'raw_app' - let kind: Kind - let initialPath: string = '' - let path: string | undefined = undefined - let summary: undefined | string = undefined + let kind: Kind = $state('script') + let initialPath: string = $state('') + let path: string | undefined = $state(undefined) + let summary: undefined | string = $state(undefined) - let drawer: Drawer + let drawer: Drawer | undefined = $state() - let own = false + let own = $state(false) export async function openDrawer( initialPath_l: string, summary_l: string | undefined, @@ -29,7 +29,7 @@ initialPath = initialPath_l summary = summary_l loadOwner() - drawer.openDrawer() + drawer?.openDrawer() } function loadOwner() { @@ -94,7 +94,7 @@ }) } dispatch('update', path) - drawer.closeDrawer() + drawer?.closeDrawer() } diff --git a/frontend/src/lib/components/OAuthSetting.svelte b/frontend/src/lib/components/OAuthSetting.svelte index 5d25c26ead..87a320319b 100644 --- a/frontend/src/lib/components/OAuthSetting.svelte +++ b/frontend/src/lib/components/OAuthSetting.svelte @@ -1,4 +1,6 @@ - + { + onkeyup={(e) => { if (domain == '') { value['allowed_domains'] = value['allowed_domains']?.filter( (d) => d != domain @@ -126,7 +139,7 @@ /> { + onclick={() => { value['allowed_domains'] = value['allowed_domains']?.filter((d) => d != domain) if (value['allowed_domains'].length == 0) { value['allowed_domains'] = undefined @@ -140,7 +153,7 @@ { + onclick={() => { value['allowed_domains'] = [...(value['allowed_domains'] ?? []), 'mydomain.com'] }}>+ Add domain diff --git a/frontend/src/lib/components/OauthExtraParams.svelte b/frontend/src/lib/components/OauthExtraParams.svelte index 71aa4e1e79..e19d55e7f0 100644 --- a/frontend/src/lib/components/OauthExtraParams.svelte +++ b/frontend/src/lib/components/OauthExtraParams.svelte @@ -2,9 +2,13 @@ import { Button } from './common' import { Minus, Plus } from 'lucide-svelte' - export let extra_params: Record = {} + interface Props { + extra_params?: Record; + } - let extra_params_vec: [string, string][] = Object.entries(extra_params) + let { extra_params = $bindable({}) }: Props = $props(); + + let extra_params_vec: [string, string][] = $state(Object.entries(extra_params)) function sync() { extra_params = Object.fromEntries(extra_params_vec) @@ -13,8 +17,8 @@ {#each extra_params_vec as o} - - + + {#if scopes && Array.isArray(scopes)} - {#each scopes as v} + {#each scopes as v, i} - + + import { run } from 'svelte/legacy'; + import { Database, Loader2 } from 'lucide-svelte' import Toggle from './Toggle.svelte' import { Button, Tab, Tabs } from './common' @@ -42,13 +44,18 @@ serviceAccountKey: Record } - export let bucket_config: S3Config | AzureConfig | AwsOidcConfig | GcsConfig | undefined = - undefined + interface Props { + bucket_config?: S3Config | AzureConfig | AwsOidcConfig | GcsConfig | undefined; + } - $: bucket_config?.type == 'S3' && - bucket_config.allow_http == undefined && - (bucket_config.allow_http = true) - let loading = false + let { bucket_config = $bindable(undefined) }: Props = $props(); + + run(() => { + bucket_config?.type == 'S3' && + bucket_config.allow_http == undefined && + (bucket_config.allow_http = true) + }); + let loading = $state(false) async function testConnection() { loading = true diff --git a/frontend/src/lib/components/PageHeader.svelte b/frontend/src/lib/components/PageHeader.svelte index 336428a976..2d461f7427 100644 --- a/frontend/src/lib/components/PageHeader.svelte +++ b/frontend/src/lib/components/PageHeader.svelte @@ -1,10 +1,21 @@ @@ -30,9 +41,9 @@ {/if} - {#if $$slots.default} + {#if children} - + {@render children?.()} {/if} diff --git a/frontend/src/lib/components/ParqetCsvTableRenderer.svelte b/frontend/src/lib/components/ParquetCsvTableRenderer.svelte similarity index 90% rename from frontend/src/lib/components/ParqetCsvTableRenderer.svelte rename to frontend/src/lib/components/ParquetCsvTableRenderer.svelte index 07a8c267a9..262be32363 100644 --- a/frontend/src/lib/components/ParqetCsvTableRenderer.svelte +++ b/frontend/src/lib/components/ParquetCsvTableRenderer.svelte @@ -1,4 +1,6 @@ @@ -182,7 +189,7 @@ Separator - mountGrid()}> + mountGrid()}> , ; \t diff --git a/frontend/src/lib/components/PersistentScriptDrawer.svelte b/frontend/src/lib/components/PersistentScriptDrawer.svelte index aa5c869f31..a681e2ed4a 100644 --- a/frontend/src/lib/components/PersistentScriptDrawer.svelte +++ b/frontend/src/lib/components/PersistentScriptDrawer.svelte @@ -10,19 +10,19 @@ import { Hourglass, Loader2, Play, RefreshCw } from 'lucide-svelte' let dispatch = createEventDispatcher() - let drawer: Drawer + let drawer: Drawer | undefined = $state() - let script: Script - let loadQueuedJobs = true - let queuedJobsLoading = false + let script: Script | undefined = $state() + let loadQueuedJobs = $state(true) + let queuedJobsLoading = $state(false) let queuedJobs: { status: 'running' | 'queued' jobId: string scheduledFor: string scriptHash: string - }[] = [] + }[] = $state([]) - let cancellingInProgress = false + let cancellingInProgress = $state(false) async function continuouslyLoadQueuedJobs() { while (loadQueuedJobs) { @@ -40,7 +40,7 @@ let qjs = await JobService.listQueue({ workspace: $workspaceStore ?? '', orderDesc: false, - scriptPathExact: script.path + scriptPathExact: script?.path }) let loadingQueuedJobs: { status: 'running' | 'queued' @@ -71,12 +71,12 @@ cancellingInProgress = true await JobService.cancelPersistentQueuedJobs({ workspace: $workspaceStore ?? '', - path: script.path, + path: script?.path ?? '', requestBody: { reason: undefined } }) - sendUserToast(`All jobs cancelled for ${script.path}`) + sendUserToast(`All jobs cancelled for ${script?.path}`) cancellingInProgress = false } @@ -88,12 +88,12 @@ script = persistentScript! loadQueuedJobs = true continuouslyLoadQueuedJobs() - drawer.openDrawer?.() + drawer?.openDrawer?.() } async function exit() { loadQueuedJobs = false - drawer.closeDrawer?.() + drawer?.closeDrawer?.() } onDestroy(() => { @@ -117,51 +117,56 @@ > - Queued jobs for {script.path} + Queued jobs for {script?.path} + Script Hash Job ID Status Scheduled For - - {#each queuedJobs as { jobId, status, scriptHash, scheduledFor }} - - - - {scriptHash} - - - - {jobId.substring(24)} - - - {#if status === 'running'} - - - - {:else} - - - - {/if} - - {scheduledFor} - - {/each} - + {#snippet body()} + + {#each queuedJobs as { jobId, status, scriptHash, scheduledFor }} + + + + {scriptHash} + + + + {jobId.substring(24)} + + + {#if status === 'running'} + + + + {:else} + + + + {/if} + + {scheduledFor} + + {/each} + + {/snippet} {#snippet actions()} diff --git a/frontend/src/lib/components/QueueMetricsDrawer.svelte b/frontend/src/lib/components/QueueMetricsDrawer.svelte index dd4ad426fa..fc1ac36a84 100644 --- a/frontend/src/lib/components/QueueMetricsDrawer.svelte +++ b/frontend/src/lib/components/QueueMetricsDrawer.svelte @@ -1,4 +1,7 @@ diff --git a/frontend/src/lib/components/RadioButton.svelte b/frontend/src/lib/components/RadioButton.svelte index efa9a62b40..c7e5dc8dce 100644 --- a/frontend/src/lib/components/RadioButton.svelte +++ b/frontend/src/lib/components/RadioButton.svelte @@ -1,13 +1,24 @@ @@ -28,7 +39,7 @@ class="sr-only" bind:group={value} aria-labelledby="memory-option-0-label" - on:click={() => dispatch('change', val)} + onclick={() => dispatch('change', val)} /> {#if typeof label !== 'string'} diff --git a/frontend/src/lib/components/Range.svelte b/frontend/src/lib/components/Range.svelte index 0e92ac72de..72129aada2 100644 --- a/frontend/src/lib/components/Range.svelte +++ b/frontend/src/lib/components/Range.svelte @@ -1,29 +1,47 @@ - + {#if max <= min} Impossible to display range: {`max (${max}) <= min (${min})`} @@ -68,7 +73,7 @@ } else { resourceEditor?.createResource() } - drawer.closeDrawer() + drawer?.closeDrawer() }} disabled={!canSave} > diff --git a/frontend/src/lib/components/RunButton.svelte b/frontend/src/lib/components/RunButton.svelte index 58d1dfb314..834a08f944 100644 --- a/frontend/src/lib/components/RunButton.svelte +++ b/frontend/src/lib/components/RunButton.svelte @@ -2,10 +2,19 @@ import { Button } from '$lib/components/common' import { CornerDownLeft, Loader2 } from 'lucide-svelte' - export let isLoading - export let hideShortcut = false - export let onRun: () => Promise - export let onCancel: () => Promise + interface Props { + isLoading: any; + hideShortcut?: boolean; + onRun: () => Promise; + onCancel: () => Promise; + } + + let { + isLoading, + hideShortcut = false, + onRun, + onCancel + }: Props = $props(); {#if !isLoading} diff --git a/frontend/src/lib/components/RunFormAdvancedPopup.svelte b/frontend/src/lib/components/RunFormAdvancedPopup.svelte index b96cd2b652..6351201622 100644 --- a/frontend/src/lib/components/RunFormAdvancedPopup.svelte +++ b/frontend/src/lib/components/RunFormAdvancedPopup.svelte @@ -8,7 +8,9 @@ import { WorkerService } from '$lib/gen' import DateTimeInput from './DateTimeInput.svelte' - export let runnable: + + interface Props { + runnable: | { summary?: string description?: string @@ -21,11 +23,18 @@ created_by?: string extra_perms?: Record } - | undefined + | undefined; + scheduledForStr: string | undefined; + invisible_to_owner: boolean | undefined; + overrideTag: string | undefined; + } - export let scheduledForStr: string | undefined - export let invisible_to_owner: boolean | undefined - export let overrideTag: string | undefined + let { + runnable, + scheduledForStr = $bindable(), + invisible_to_owner = $bindable(), + overrideTag = $bindable() + }: Props = $props(); loadWorkerGroups() async function loadWorkerGroups() { diff --git a/frontend/src/lib/components/S3ObjectPicker.svelte b/frontend/src/lib/components/S3ObjectPicker.svelte index 6a9d1c9a86..087b3a6f55 100644 --- a/frontend/src/lib/components/S3ObjectPicker.svelte +++ b/frontend/src/lib/components/S3ObjectPicker.svelte @@ -11,15 +11,19 @@ import S3FilePicker from './S3FilePicker.svelte' import FileUpload from './common/fileUpload/FileUpload.svelte' - export let value: any - export let editor: SimpleEditor | undefined = undefined + interface Props { + value: any + editor?: SimpleEditor | undefined + } + + let { value = $bindable(), editor = $bindable(undefined) }: Props = $props() const dispatch = createEventDispatcher() - let s3FilePicker: S3FilePicker - let s3FileUploadRawMode: false + let s3FilePicker: S3FilePicker | undefined = $state() + let s3FileUploadRawMode: false | undefined = $state() let el: HTMLTextAreaElement | undefined = undefined - let rawValue: string | undefined = undefined + let rawValue: string | undefined = $state(undefined) function evalValueToRaw() { rawValue = JSON.stringify(value, null, 2) diff --git a/frontend/src/lib/components/SaveInputsButton.svelte b/frontend/src/lib/components/SaveInputsButton.svelte index a8e179e586..c32bb42dd2 100644 --- a/frontend/src/lib/components/SaveInputsButton.svelte +++ b/frontend/src/lib/components/SaveInputsButton.svelte @@ -10,14 +10,25 @@ const dispatch = createEventDispatcher() - export let runnableId: string | undefined - export let runnableType: RunnableType | undefined - export let args: object - export let disabled: boolean = false - export let small: boolean | undefined = undefined - export let showTooltip: boolean | undefined = undefined + interface Props { + runnableId: string | undefined; + runnableType: RunnableType | undefined; + args: object; + disabled?: boolean; + small?: boolean | undefined; + showTooltip?: boolean | undefined; + } - let savingInputs = false + let { + runnableId, + runnableType, + args, + disabled = false, + small = undefined, + showTooltip = undefined + }: Props = $props(); + + let savingInputs = $state(false) async function saveInput(args: object) { savingInputs = true diff --git a/frontend/src/lib/components/SavedInputsPickerViewer.svelte b/frontend/src/lib/components/SavedInputsPickerViewer.svelte index 150e2b9b97..919965b5cf 100644 --- a/frontend/src/lib/components/SavedInputsPickerViewer.svelte +++ b/frontend/src/lib/components/SavedInputsPickerViewer.svelte @@ -1,4 +1,7 @@ - - - - - - {#if payloadData === 'WINDMILL_TOO_BIG'} - - {#if limitPayloadSize} - Payload too big to be used - {:else} - Payload too big to preview but can still be loaded - {/if} - - {:else} - { + {#snippet trigger({ isOpen })} + + + + {/snippet} + {#snippet content()} + + + {#if payloadData === 'WINDMILL_TOO_BIG'} + + {#if limitPayloadSize} + Payload too big to be used + {:else} + Payload too big to preview but can still be loaded + {/if} + + {:else} + { copyToClipboard(JSON.stringify(payloadData)) }} - on:keydown - > - {#if !objectViewerLoaded && payloadTooBigForPreview} - - - Loading data... - - {/if} + onkeydown={bubble('keydown')} + > + {#if !objectViewerLoaded && payloadTooBigForPreview} + + + Loading data... + + {/if} - {#if popoverFullyOpened || !payloadTooBigForPreview} - - (objectViewerLoaded = true)} + {#if popoverFullyOpened || !payloadTooBigForPreview} + + (objectViewerLoaded = true)} + /> + + {/if} + + + - {/if} - - - - - {/if} - - + {/if} + + + {/snippet} diff --git a/frontend/src/lib/components/SchemaEditorProperty.svelte b/frontend/src/lib/components/SchemaEditorProperty.svelte index 611e178981..fa12138c0d 100644 --- a/frontend/src/lib/components/SchemaEditorProperty.svelte +++ b/frontend/src/lib/components/SchemaEditorProperty.svelte @@ -2,7 +2,11 @@ import type { SchemaProperty } from '$lib/common' import Badge from './common/badge/Badge.svelte' - export let property: SchemaProperty + interface Props { + property: SchemaProperty; + } + + let { property }: Props = $props(); diff --git a/frontend/src/lib/components/SchemaFormWithArgPicker.svelte b/frontend/src/lib/components/SchemaFormWithArgPicker.svelte index 4764a26e74..7ddc4146be 100644 --- a/frontend/src/lib/components/SchemaFormWithArgPicker.svelte +++ b/frontend/src/lib/components/SchemaFormWithArgPicker.svelte @@ -1,4 +1,6 @@ @@ -100,7 +120,7 @@ - + {@render children?.()} @@ -109,11 +129,13 @@ {#if selectedTab === 'history'} - - - historicInputs?.refresh()} /> - - + {#snippet action()} + + + historicInputs?.refresh()} /> + + + {/snippet} {:else if selectedTab === 'captures'} - - - - - + {#snippet action()} + + + + + + {/snippet} - + + name type description diff --git a/frontend/src/lib/components/ScriptBuilder.svelte b/frontend/src/lib/components/ScriptBuilder.svelte index c597a6cd03..20c195f8d0 100644 --- a/frontend/src/lib/components/ScriptBuilder.svelte +++ b/frontend/src/lib/components/ScriptBuilder.svelte @@ -1,3 +1,5 @@ + - - + + {@render children?.()} {#if !isAtBottom && isScrollable} { + onClick={() => { let logLineNumber = document.line_number[0] let logFile = document.file_name[0] let host = document.host[0] diff --git a/frontend/src/lib/components/ShareModal.svelte b/frontend/src/lib/components/ShareModal.svelte index e5ad54f88b..fcbe166992 100644 --- a/frontend/src/lib/components/ShareModal.svelte +++ b/frontend/src/lib/components/ShareModal.svelte @@ -155,7 +155,8 @@ {#if acls?.length > 0} - + + owner diff --git a/frontend/src/lib/components/Slider.svelte b/frontend/src/lib/components/Slider.svelte index c2ca0abbdd..e3269cde09 100644 --- a/frontend/src/lib/components/Slider.svelte +++ b/frontend/src/lib/components/Slider.svelte @@ -5,10 +5,21 @@ import Tooltip from './Tooltip.svelte' import { twMerge } from 'tailwind-merge' - export let text: string - export let tooltip: string | undefined = undefined - export let view = false - export let size: 'xs' | 'sm' | 'md' | 'lg' = 'md' + interface Props { + text: string; + tooltip?: string | undefined; + view?: boolean; + size?: 'xs' | 'sm' | 'md' | 'lg'; + children?: import('svelte').Snippet; + } + + let { + text, + tooltip = undefined, + view = $bindable(false), + size = 'md', + children + }: Props = $props(); {#if view} - + {@render children?.()} {/if} diff --git a/frontend/src/lib/components/Star.svelte b/frontend/src/lib/components/Star.svelte index b4ac4c61ab..2d0ab33d99 100644 --- a/frontend/src/lib/components/Star.svelte +++ b/frontend/src/lib/components/Star.svelte @@ -1,16 +1,22 @@ (buttonHover = true)} - on:mouseleave={() => (buttonHover = false)} + onclick={preventDefault(onClick)} + onmouseenter={() => (buttonHover = true)} + onmouseleave={() => (buttonHover = false)} class="p-2" > {#if starred} diff --git a/frontend/src/lib/components/Summary.svelte b/frontend/src/lib/components/Summary.svelte index 42d0b48ba5..1b4c3f2c2e 100644 --- a/frontend/src/lib/components/Summary.svelte +++ b/frontend/src/lib/components/Summary.svelte @@ -2,8 +2,12 @@ import { Pen } from 'lucide-svelte' import TextInput from './text_input/TextInput.svelte' - export let value: string - export let disabled = false + interface Props { + value: string; + disabled?: boolean; + } + + let { value = $bindable(), disabled = false }: Props = $props(); function blur(e: KeyboardEvent) { e.key === 'Enter' && (e?.target as any)?.blur() diff --git a/frontend/src/lib/components/SupabaseConnect.svelte b/frontend/src/lib/components/SupabaseConnect.svelte index d16960ffbc..e44399ee84 100644 --- a/frontend/src/lib/components/SupabaseConnect.svelte +++ b/frontend/src/lib/components/SupabaseConnect.svelte @@ -1,4 +1,6 @@ @@ -120,7 +124,7 @@ {#each databases as database} { + onclick={() => { selectedDatabase = database step = 'resource' diff --git a/frontend/src/lib/components/SuperadminSettingsInner.svelte b/frontend/src/lib/components/SuperadminSettingsInner.svelte index ab4707c9ec..04f363ab37 100644 --- a/frontend/src/lib/components/SuperadminSettingsInner.svelte +++ b/frontend/src/lib/components/SuperadminSettingsInner.svelte @@ -6,7 +6,7 @@ import { sendUserToast } from '$lib/toast' import { base } from '$lib/base' import SearchItems from './SearchItems.svelte' - import { page } from '$app/stores' + import { page } from '$app/state' import { goto as gotoUrl } from '$app/navigation' import Version from './Version.svelte' import Uptodate from './Uptodate.svelte' @@ -31,9 +31,9 @@ let { closeDrawer } = $props() function removeHash() { - const index = $page.url.href.lastIndexOf('#') + const index = page.url.href.lastIndexOf('#') if (index === -1) return - const hashRemoved = $page.url.href.slice(0, index) + const hashRemoved = page.url.href.slice(0, index) gotoUrl(hashRemoved) } @@ -209,7 +209,8 @@ - + + email auth name diff --git a/frontend/src/lib/components/TableCustom.svelte b/frontend/src/lib/components/TableCustom.svelte index e40a2c9706..0a4a7aefb4 100644 --- a/frontend/src/lib/components/TableCustom.svelte +++ b/frontend/src/lib/components/TableCustom.svelte @@ -1,3 +1,4 @@ + diff --git a/frontend/src/lib/components/TestConnection.svelte b/frontend/src/lib/components/TestConnection.svelte index 3f49c92c21..f45dc0879b 100644 --- a/frontend/src/lib/components/TestConnection.svelte +++ b/frontend/src/lib/components/TestConnection.svelte @@ -7,10 +7,19 @@ import { workspaceStore } from '$lib/stores' import { tryEvery } from '$lib/utils' - export let workspaceOverride: string | undefined = undefined - export let resourceType: string | undefined - export let args: Record | any = {} - export let buttonTextOverride: string | undefined = undefined + interface Props { + workspaceOverride?: string | undefined; + resourceType: string | undefined; + args?: Record | any; + buttonTextOverride?: string | undefined; + } + + let { + workspaceOverride = undefined, + resourceType, + args = {}, + buttonTextOverride = undefined + }: Props = $props(); const scripts: { [key: string]: { @@ -166,7 +175,7 @@ export async function main(bucket: any) { } } - let loading = false + let loading = $state(false) async function testConnection() { if (!resourceType) return loading = true diff --git a/frontend/src/lib/components/TimeAgo.svelte b/frontend/src/lib/components/TimeAgo.svelte index a11e4ac240..64b0868f2e 100644 --- a/frontend/src/lib/components/TimeAgo.svelte +++ b/frontend/src/lib/components/TimeAgo.svelte @@ -1,18 +1,28 @@ {#if computedTimeAgo && (!agoOnlyIfRecent || isRecent)} diff --git a/frontend/src/lib/components/TooltipInner.svelte b/frontend/src/lib/components/TooltipInner.svelte index b8c435f167..19a72e3a5b 100644 --- a/frontend/src/lib/components/TooltipInner.svelte +++ b/frontend/src/lib/components/TooltipInner.svelte @@ -2,8 +2,13 @@ import Markdown from 'svelte-exmarkdown' import { ExternalLink } from 'lucide-svelte' import { gfmPlugin } from 'svelte-exmarkdown/gfm' - export let documentationLink: string | undefined = undefined - export let markdownTooltip: string | undefined = undefined + interface Props { + documentationLink?: string | undefined; + markdownTooltip?: string | undefined; + children?: import('svelte').Snippet; + } + + let { documentationLink = undefined, markdownTooltip = undefined, children }: Props = $props(); const plugins = [gfmPlugin()] @@ -15,7 +20,7 @@ {:else} - + {@render children?.()} {/if} {#if documentationLink} diff --git a/frontend/src/lib/components/Uptodate.svelte b/frontend/src/lib/components/Uptodate.svelte index 8dc5f00eee..56119732df 100644 --- a/frontend/src/lib/components/Uptodate.svelte +++ b/frontend/src/lib/components/Uptodate.svelte @@ -3,7 +3,7 @@ import { isCloudHosted } from '$lib/cloud' import Tooltip from './Tooltip.svelte' - let uptodate: string | undefined = undefined + let uptodate: string | undefined = $state(undefined) async function loadVersion() { try { diff --git a/frontend/src/lib/components/Urlize.svelte b/frontend/src/lib/components/Urlize.svelte index 060ec9f141..d682a39ca9 100644 --- a/frontend/src/lib/components/Urlize.svelte +++ b/frontend/src/lib/components/Urlize.svelte @@ -1,8 +1,12 @@ {@html parsed} diff --git a/frontend/src/lib/components/Version.svelte b/frontend/src/lib/components/Version.svelte index 9406bed01f..aa0b58624d 100644 --- a/frontend/src/lib/components/Version.svelte +++ b/frontend/src/lib/components/Version.svelte @@ -1,7 +1,7 @@ {#if flow_status} diff --git a/frontend/src/lib/components/ZitadelSetting.svelte b/frontend/src/lib/components/ZitadelSetting.svelte index 16e15a6070..ace0bd2e85 100644 --- a/frontend/src/lib/components/ZitadelSetting.svelte +++ b/frontend/src/lib/components/ZitadelSetting.svelte @@ -1,14 +1,18 @@ - + { + onkeydown={(e) => { if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') { onConfirm() } diff --git a/frontend/src/lib/components/apps/editor/AppExportButton.svelte b/frontend/src/lib/components/apps/editor/AppExportButton.svelte index 0bc4cf4b10..bda3dcb51a 100644 --- a/frontend/src/lib/components/apps/editor/AppExportButton.svelte +++ b/frontend/src/lib/components/apps/editor/AppExportButton.svelte @@ -14,11 +14,11 @@ import Tab from '$lib/components/common/tabs/Tab.svelte' import HighlightTheme from '$lib/components/HighlightTheme.svelte' - let jsonViewerDrawer: Drawer + let jsonViewerDrawer: Drawer | undefined = $state() - let app: any | undefined = undefined + let app: any | undefined = $state(undefined) - let rawType: 'json' | 'yaml' = 'yaml' + let rawType: 'json' | 'yaml' = $state('yaml') export function open(app_l: any) { app = app_l @@ -29,7 +29,7 @@ - jsonViewerDrawer.toggleDrawer()}> + jsonViewerDrawer?.toggleDrawer()}> diff --git a/frontend/src/lib/components/apps/editor/AppInputs.svelte b/frontend/src/lib/components/apps/editor/AppInputs.svelte index ed9591903c..4876cb5a86 100644 --- a/frontend/src/lib/components/apps/editor/AppInputs.svelte +++ b/frontend/src/lib/components/apps/editor/AppInputs.svelte @@ -9,7 +9,7 @@ const { app } = getContext('AppViewerContext') - let resourceOnly: boolean = true + let resourceOnly: boolean = $state(true) diff --git a/frontend/src/lib/components/apps/editor/AppJsonEditor.svelte b/frontend/src/lib/components/apps/editor/AppJsonEditor.svelte index 7572c8c0fe..5a955a8ce6 100644 --- a/frontend/src/lib/components/apps/editor/AppJsonEditor.svelte +++ b/frontend/src/lib/components/apps/editor/AppJsonEditor.svelte @@ -10,12 +10,12 @@ import { createEventDispatcher } from 'svelte' import { Globe, Loader2, Save } from 'lucide-svelte' - let jsonViewerDrawer: Drawer + let jsonViewerDrawer: Drawer | undefined = $state() - let code: string = '' + let code: string = $state('') let path: string = '' - let useDraft: boolean = false - let loading = true + let useDraft: boolean = $state(false) + let loading = $state(true) const dispatch = createEventDispatcher() let app: any | undefined = undefined @@ -73,7 +73,7 @@ - jsonViewerDrawer.toggleDrawer()}> + jsonViewerDrawer?.toggleDrawer()}> {#if useDraft} +Draft diff --git a/frontend/src/lib/components/apps/editor/RecomputeAllComponents.svelte b/frontend/src/lib/components/apps/editor/RecomputeAllComponents.svelte index 881e9de0a9..7c9932553e 100644 --- a/frontend/src/lib/components/apps/editor/RecomputeAllComponents.svelte +++ b/frontend/src/lib/components/apps/editor/RecomputeAllComponents.svelte @@ -1,4 +1,6 @@ (b.order ?? 0) - (a.order ?? 0) + a.name.localeCompare(b.name)) - let search = '' + let search = $state('') @@ -98,12 +98,15 @@ } }} > - - - - {name} - - + {#snippet titleSlot()} + {@const SvelteComponent = icon} + + + + {name} + + + {/snippet} {#if description} {description} {/if} diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentsList.svelte b/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentsList.svelte index 7460c30de9..7d2b84b264 100644 --- a/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentsList.svelte +++ b/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentsList.svelte @@ -15,9 +15,9 @@ let customcomponents: Array<{ name: string path: string - }> = [] + }> = $state([]) - let loading: boolean = false + let loading: boolean = $state(false) async function getCustomComponents() { loading = true @@ -44,7 +44,7 @@ } }, name: nameField, - js: await files[0].text() + js: await files?.[0].text() } } }) @@ -61,10 +61,10 @@ nameField = '' } - let nameField: string = '' - let reactVersion: string = '18.2.0' - let files: FileList - let useReact = true + let nameField: string = $state('') + let reactVersion: string = $state('18.2.0') + let files: FileList | undefined = $state() + let useReact = $state(true) getCustomComponents() diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/QuickStyleMenu.svelte b/frontend/src/lib/components/apps/editor/componentsPanel/QuickStyleMenu.svelte index cf5bda33c7..6630391b04 100644 --- a/frontend/src/lib/components/apps/editor/componentsPanel/QuickStyleMenu.svelte +++ b/frontend/src/lib/components/apps/editor/componentsPanel/QuickStyleMenu.svelte @@ -211,11 +211,13 @@ {isOpen[prefix] ? '!bg-surface-secondary hover:!bg-surface-hover' : ''}" > - - - {group} - - + {#snippet titleSlot()} + + + {group} + + + {/snippet} {#each property[group] as p} {@const { diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/ThemeList.svelte b/frontend/src/lib/components/apps/editor/componentsPanel/ThemeList.svelte index abeb1bed53..5296ebe3a6 100644 --- a/frontend/src/lib/components/apps/editor/componentsPanel/ThemeList.svelte +++ b/frontend/src/lib/components/apps/editor/componentsPanel/ThemeList.svelte @@ -19,14 +19,14 @@ const { previewTheme, app } = getContext('AppViewerContext') let cssString: string | undefined = $app?.theme?.type === 'inlined' ? $app.theme.css : undefined - $: type = $app?.theme?.type + let type = $derived($app?.theme?.type) let themes: Array<{ name: string path: string - }> = [] + }> = $state([]) - let loading: boolean = false + let loading: boolean = $state(false) async function getThemes() { loading = true @@ -62,8 +62,8 @@ } } - let nameField: string = '' - let previewThemePath: string | undefined = undefined + let nameField: string = $state('') + let previewThemePath: string | undefined = $state(undefined) onMount(() => { getThemes() diff --git a/frontend/src/lib/components/apps/editor/contextPanel/DebugPanel.svelte b/frontend/src/lib/components/apps/editor/contextPanel/DebugPanel.svelte index c0094fba48..c97b4b791e 100644 --- a/frontend/src/lib/components/apps/editor/contextPanel/DebugPanel.svelte +++ b/frontend/src/lib/components/apps/editor/contextPanel/DebugPanel.svelte @@ -12,12 +12,12 @@ const { app, initialized } = getContext('AppViewerContext') - $: unintitializedComponents = allItems($app.grid, $app.subgrids) + let unintitializedComponents = $derived(allItems($app.grid, $app.subgrids) .map((x) => x.id) .filter((x) => !$initialized.initializedComponents?.includes(x)) - .sort() + .sort()) - $: subgridsErrors = Object.keys($app.subgrids ?? {}) + let subgridsErrors = $derived(Object.keys($app.subgrids ?? {}) .map((x) => { const parentId = x.split('-')[0] const parent = findGridItem($app, parentId) @@ -39,7 +39,7 @@ } } }) - .filter(Boolean) + .filter(Boolean)) diff --git a/frontend/src/lib/components/apps/editor/settingsPanel/StylePanel.svelte b/frontend/src/lib/components/apps/editor/settingsPanel/StylePanel.svelte index 2bcb0c4114..e99c44a8c4 100644 --- a/frontend/src/lib/components/apps/editor/settingsPanel/StylePanel.svelte +++ b/frontend/src/lib/components/apps/editor/settingsPanel/StylePanel.svelte @@ -1,4 +1,6 @@ {#key color} {#if ended} - + {@render children?.()} {:else} - export let notificationCount = 0 - export let notificationLimit: number | undefined = undefined + interface Props { + notificationCount?: number; + notificationLimit?: number | undefined; + } + + let { notificationCount = 0, notificationLimit = undefined }: Props = $props(); {#if notificationCount > 0} diff --git a/frontend/src/lib/components/common/breadcrumb/Breadcrumb.svelte b/frontend/src/lib/components/common/breadcrumb/Breadcrumb.svelte index 17e7a60132..076ae7439d 100644 --- a/frontend/src/lib/components/common/breadcrumb/Breadcrumb.svelte +++ b/frontend/src/lib/components/common/breadcrumb/Breadcrumb.svelte @@ -2,9 +2,19 @@ import { createEventDispatcher } from 'svelte' import Button from '../button/Button.svelte' - export let items: string[] - export let selectedIndex: number - export let disabled: boolean = false + interface Props { + items: string[]; + selectedIndex: number; + disabled?: boolean; + separator?: import('svelte').Snippet; + } + + let { + items, + selectedIndex, + disabled = false, + separator + }: Props = $props(); const dispatch = createEventDispatcher() @@ -12,7 +22,7 @@ {#each items as item, index} {#if index > 0} - + {@render separator?.()} {/if} import AnimatedButtonInner from './AnimatedButtonInner.svelte' - export let marginWidth = '2px' - export let animationDuration = '2s' - export let baseRadius = '4px' - export let animate = true - export let wrapperClasses = '' - export let ringColor = 'transparent' - export let darkMode = false + interface Props { + marginWidth?: string; + animationDuration?: string; + baseRadius?: string; + animate?: boolean; + wrapperClasses?: string; + ringColor?: string; + darkMode?: boolean; + children?: import('svelte').Snippet; + } + + let { + marginWidth = '2px', + animationDuration = '2s', + baseRadius = '4px', + animate = true, + wrapperClasses = '', + ringColor = 'transparent', + darkMode = false, + children + }: Props = $props(); {#if animate} @@ -19,10 +33,10 @@ {ringColor} {darkMode} > - + {@render children?.()} {:else} - + {@render children?.()} {/if} diff --git a/frontend/src/lib/components/common/button/AnimatedButtonInner.svelte b/frontend/src/lib/components/common/button/AnimatedButtonInner.svelte index 7396b5314b..9ba46928a0 100644 --- a/frontend/src/lib/components/common/button/AnimatedButtonInner.svelte +++ b/frontend/src/lib/components/common/button/AnimatedButtonInner.svelte @@ -1,27 +1,41 @@ @@ -33,7 +47,7 @@ bind:clientWidth bind:clientHeight > - + {@render children?.()}
{@html html} diff --git a/frontend/src/lib/components/ManualPopover.svelte b/frontend/src/lib/components/ManualPopover.svelte index ddeadf79cc..8182cfcf9b 100644 --- a/frontend/src/lib/components/ManualPopover.svelte +++ b/frontend/src/lib/components/ManualPopover.svelte @@ -1,3 +1,4 @@ + diff --git a/frontend/src/lib/components/MemoryFootprintViewer.svelte b/frontend/src/lib/components/MemoryFootprintViewer.svelte index afcdfb82a4..df3ecdb0f4 100644 --- a/frontend/src/lib/components/MemoryFootprintViewer.svelte +++ b/frontend/src/lib/components/MemoryFootprintViewer.svelte @@ -1,4 +1,6 @@ diff --git a/frontend/src/lib/components/ModuleStatus.svelte b/frontend/src/lib/components/ModuleStatus.svelte index 645097b3d0..09417ec023 100644 --- a/frontend/src/lib/components/ModuleStatus.svelte +++ b/frontend/src/lib/components/ModuleStatus.svelte @@ -5,9 +5,13 @@ import { displayDate } from '$lib/utils' import { Hourglass } from 'lucide-svelte' - export let type: FlowStatusModule['type'] - export let scheduled_for: Date | undefined - export let skipped: boolean = false + interface Props { + type: FlowStatusModule['type']; + scheduled_for: Date | undefined; + skipped?: boolean; + } + + let { type, scheduled_for, skipped = false }: Props = $props(); {#if type == 'WaitingForEvents'} diff --git a/frontend/src/lib/components/MoveDrawer.svelte b/frontend/src/lib/components/MoveDrawer.svelte index 2979987629..8014969403 100644 --- a/frontend/src/lib/components/MoveDrawer.svelte +++ b/frontend/src/lib/components/MoveDrawer.svelte @@ -11,14 +11,14 @@ type Kind = 'script' | 'resource' | 'schedule' | 'variable' | 'flow' | 'app' | 'raw_app' - let kind: Kind - let initialPath: string = '' - let path: string | undefined = undefined - let summary: undefined | string = undefined + let kind: Kind = $state('script') + let initialPath: string = $state('') + let path: string | undefined = $state(undefined) + let summary: undefined | string = $state(undefined) - let drawer: Drawer + let drawer: Drawer | undefined = $state() - let own = false + let own = $state(false) export async function openDrawer( initialPath_l: string, summary_l: string | undefined, @@ -29,7 +29,7 @@ initialPath = initialPath_l summary = summary_l loadOwner() - drawer.openDrawer() + drawer?.openDrawer() } function loadOwner() { @@ -94,7 +94,7 @@ }) } dispatch('update', path) - drawer.closeDrawer() + drawer?.closeDrawer() } diff --git a/frontend/src/lib/components/OAuthSetting.svelte b/frontend/src/lib/components/OAuthSetting.svelte index 5d25c26ead..87a320319b 100644 --- a/frontend/src/lib/components/OAuthSetting.svelte +++ b/frontend/src/lib/components/OAuthSetting.svelte @@ -1,4 +1,6 @@ - + { + onkeyup={(e) => { if (domain == '') { value['allowed_domains'] = value['allowed_domains']?.filter( (d) => d != domain @@ -126,7 +139,7 @@ /> { + onclick={() => { value['allowed_domains'] = value['allowed_domains']?.filter((d) => d != domain) if (value['allowed_domains'].length == 0) { value['allowed_domains'] = undefined @@ -140,7 +153,7 @@ { + onclick={() => { value['allowed_domains'] = [...(value['allowed_domains'] ?? []), 'mydomain.com'] }}>+ Add domain diff --git a/frontend/src/lib/components/OauthExtraParams.svelte b/frontend/src/lib/components/OauthExtraParams.svelte index 71aa4e1e79..e19d55e7f0 100644 --- a/frontend/src/lib/components/OauthExtraParams.svelte +++ b/frontend/src/lib/components/OauthExtraParams.svelte @@ -2,9 +2,13 @@ import { Button } from './common' import { Minus, Plus } from 'lucide-svelte' - export let extra_params: Record = {} + interface Props { + extra_params?: Record; + } - let extra_params_vec: [string, string][] = Object.entries(extra_params) + let { extra_params = $bindable({}) }: Props = $props(); + + let extra_params_vec: [string, string][] = $state(Object.entries(extra_params)) function sync() { extra_params = Object.fromEntries(extra_params_vec) @@ -13,8 +17,8 @@ {#each extra_params_vec as o} - - + + {#if scopes && Array.isArray(scopes)} - {#each scopes as v} + {#each scopes as v, i} - + + import { run } from 'svelte/legacy'; + import { Database, Loader2 } from 'lucide-svelte' import Toggle from './Toggle.svelte' import { Button, Tab, Tabs } from './common' @@ -42,13 +44,18 @@ serviceAccountKey: Record } - export let bucket_config: S3Config | AzureConfig | AwsOidcConfig | GcsConfig | undefined = - undefined + interface Props { + bucket_config?: S3Config | AzureConfig | AwsOidcConfig | GcsConfig | undefined; + } - $: bucket_config?.type == 'S3' && - bucket_config.allow_http == undefined && - (bucket_config.allow_http = true) - let loading = false + let { bucket_config = $bindable(undefined) }: Props = $props(); + + run(() => { + bucket_config?.type == 'S3' && + bucket_config.allow_http == undefined && + (bucket_config.allow_http = true) + }); + let loading = $state(false) async function testConnection() { loading = true diff --git a/frontend/src/lib/components/PageHeader.svelte b/frontend/src/lib/components/PageHeader.svelte index 336428a976..2d461f7427 100644 --- a/frontend/src/lib/components/PageHeader.svelte +++ b/frontend/src/lib/components/PageHeader.svelte @@ -1,10 +1,21 @@ @@ -30,9 +41,9 @@ {/if} - {#if $$slots.default} + {#if children} - + {@render children?.()} {/if} diff --git a/frontend/src/lib/components/ParqetCsvTableRenderer.svelte b/frontend/src/lib/components/ParquetCsvTableRenderer.svelte similarity index 90% rename from frontend/src/lib/components/ParqetCsvTableRenderer.svelte rename to frontend/src/lib/components/ParquetCsvTableRenderer.svelte index 07a8c267a9..262be32363 100644 --- a/frontend/src/lib/components/ParqetCsvTableRenderer.svelte +++ b/frontend/src/lib/components/ParquetCsvTableRenderer.svelte @@ -1,4 +1,6 @@ @@ -182,7 +189,7 @@ Separator - mountGrid()}> + mountGrid()}> , ; \t diff --git a/frontend/src/lib/components/PersistentScriptDrawer.svelte b/frontend/src/lib/components/PersistentScriptDrawer.svelte index aa5c869f31..a681e2ed4a 100644 --- a/frontend/src/lib/components/PersistentScriptDrawer.svelte +++ b/frontend/src/lib/components/PersistentScriptDrawer.svelte @@ -10,19 +10,19 @@ import { Hourglass, Loader2, Play, RefreshCw } from 'lucide-svelte' let dispatch = createEventDispatcher() - let drawer: Drawer + let drawer: Drawer | undefined = $state() - let script: Script - let loadQueuedJobs = true - let queuedJobsLoading = false + let script: Script | undefined = $state() + let loadQueuedJobs = $state(true) + let queuedJobsLoading = $state(false) let queuedJobs: { status: 'running' | 'queued' jobId: string scheduledFor: string scriptHash: string - }[] = [] + }[] = $state([]) - let cancellingInProgress = false + let cancellingInProgress = $state(false) async function continuouslyLoadQueuedJobs() { while (loadQueuedJobs) { @@ -40,7 +40,7 @@ let qjs = await JobService.listQueue({ workspace: $workspaceStore ?? '', orderDesc: false, - scriptPathExact: script.path + scriptPathExact: script?.path }) let loadingQueuedJobs: { status: 'running' | 'queued' @@ -71,12 +71,12 @@ cancellingInProgress = true await JobService.cancelPersistentQueuedJobs({ workspace: $workspaceStore ?? '', - path: script.path, + path: script?.path ?? '', requestBody: { reason: undefined } }) - sendUserToast(`All jobs cancelled for ${script.path}`) + sendUserToast(`All jobs cancelled for ${script?.path}`) cancellingInProgress = false } @@ -88,12 +88,12 @@ script = persistentScript! loadQueuedJobs = true continuouslyLoadQueuedJobs() - drawer.openDrawer?.() + drawer?.openDrawer?.() } async function exit() { loadQueuedJobs = false - drawer.closeDrawer?.() + drawer?.closeDrawer?.() } onDestroy(() => { @@ -117,51 +117,56 @@ > - Queued jobs for {script.path} + Queued jobs for {script?.path} + Script Hash Job ID Status Scheduled For - - {#each queuedJobs as { jobId, status, scriptHash, scheduledFor }} - - - - {scriptHash} - - - - {jobId.substring(24)} - - - {#if status === 'running'} - - - - {:else} - - - - {/if} - - {scheduledFor} - - {/each} - + {#snippet body()} + + {#each queuedJobs as { jobId, status, scriptHash, scheduledFor }} + + + + {scriptHash} + + + + {jobId.substring(24)} + + + {#if status === 'running'} + + + + {:else} + + + + {/if} + + {scheduledFor} + + {/each} + + {/snippet} {#snippet actions()} diff --git a/frontend/src/lib/components/QueueMetricsDrawer.svelte b/frontend/src/lib/components/QueueMetricsDrawer.svelte index dd4ad426fa..fc1ac36a84 100644 --- a/frontend/src/lib/components/QueueMetricsDrawer.svelte +++ b/frontend/src/lib/components/QueueMetricsDrawer.svelte @@ -1,4 +1,7 @@ diff --git a/frontend/src/lib/components/RadioButton.svelte b/frontend/src/lib/components/RadioButton.svelte index efa9a62b40..c7e5dc8dce 100644 --- a/frontend/src/lib/components/RadioButton.svelte +++ b/frontend/src/lib/components/RadioButton.svelte @@ -1,13 +1,24 @@ @@ -28,7 +39,7 @@ class="sr-only" bind:group={value} aria-labelledby="memory-option-0-label" - on:click={() => dispatch('change', val)} + onclick={() => dispatch('change', val)} /> {#if typeof label !== 'string'} diff --git a/frontend/src/lib/components/Range.svelte b/frontend/src/lib/components/Range.svelte index 0e92ac72de..72129aada2 100644 --- a/frontend/src/lib/components/Range.svelte +++ b/frontend/src/lib/components/Range.svelte @@ -1,29 +1,47 @@ - + {#if max <= min} Impossible to display range: {`max (${max}) <= min (${min})`} @@ -68,7 +73,7 @@ } else { resourceEditor?.createResource() } - drawer.closeDrawer() + drawer?.closeDrawer() }} disabled={!canSave} > diff --git a/frontend/src/lib/components/RunButton.svelte b/frontend/src/lib/components/RunButton.svelte index 58d1dfb314..834a08f944 100644 --- a/frontend/src/lib/components/RunButton.svelte +++ b/frontend/src/lib/components/RunButton.svelte @@ -2,10 +2,19 @@ import { Button } from '$lib/components/common' import { CornerDownLeft, Loader2 } from 'lucide-svelte' - export let isLoading - export let hideShortcut = false - export let onRun: () => Promise - export let onCancel: () => Promise + interface Props { + isLoading: any; + hideShortcut?: boolean; + onRun: () => Promise; + onCancel: () => Promise; + } + + let { + isLoading, + hideShortcut = false, + onRun, + onCancel + }: Props = $props(); {#if !isLoading} diff --git a/frontend/src/lib/components/RunFormAdvancedPopup.svelte b/frontend/src/lib/components/RunFormAdvancedPopup.svelte index b96cd2b652..6351201622 100644 --- a/frontend/src/lib/components/RunFormAdvancedPopup.svelte +++ b/frontend/src/lib/components/RunFormAdvancedPopup.svelte @@ -8,7 +8,9 @@ import { WorkerService } from '$lib/gen' import DateTimeInput from './DateTimeInput.svelte' - export let runnable: + + interface Props { + runnable: | { summary?: string description?: string @@ -21,11 +23,18 @@ created_by?: string extra_perms?: Record } - | undefined + | undefined; + scheduledForStr: string | undefined; + invisible_to_owner: boolean | undefined; + overrideTag: string | undefined; + } - export let scheduledForStr: string | undefined - export let invisible_to_owner: boolean | undefined - export let overrideTag: string | undefined + let { + runnable, + scheduledForStr = $bindable(), + invisible_to_owner = $bindable(), + overrideTag = $bindable() + }: Props = $props(); loadWorkerGroups() async function loadWorkerGroups() { diff --git a/frontend/src/lib/components/S3ObjectPicker.svelte b/frontend/src/lib/components/S3ObjectPicker.svelte index 6a9d1c9a86..087b3a6f55 100644 --- a/frontend/src/lib/components/S3ObjectPicker.svelte +++ b/frontend/src/lib/components/S3ObjectPicker.svelte @@ -11,15 +11,19 @@ import S3FilePicker from './S3FilePicker.svelte' import FileUpload from './common/fileUpload/FileUpload.svelte' - export let value: any - export let editor: SimpleEditor | undefined = undefined + interface Props { + value: any + editor?: SimpleEditor | undefined + } + + let { value = $bindable(), editor = $bindable(undefined) }: Props = $props() const dispatch = createEventDispatcher() - let s3FilePicker: S3FilePicker - let s3FileUploadRawMode: false + let s3FilePicker: S3FilePicker | undefined = $state() + let s3FileUploadRawMode: false | undefined = $state() let el: HTMLTextAreaElement | undefined = undefined - let rawValue: string | undefined = undefined + let rawValue: string | undefined = $state(undefined) function evalValueToRaw() { rawValue = JSON.stringify(value, null, 2) diff --git a/frontend/src/lib/components/SaveInputsButton.svelte b/frontend/src/lib/components/SaveInputsButton.svelte index a8e179e586..c32bb42dd2 100644 --- a/frontend/src/lib/components/SaveInputsButton.svelte +++ b/frontend/src/lib/components/SaveInputsButton.svelte @@ -10,14 +10,25 @@ const dispatch = createEventDispatcher() - export let runnableId: string | undefined - export let runnableType: RunnableType | undefined - export let args: object - export let disabled: boolean = false - export let small: boolean | undefined = undefined - export let showTooltip: boolean | undefined = undefined + interface Props { + runnableId: string | undefined; + runnableType: RunnableType | undefined; + args: object; + disabled?: boolean; + small?: boolean | undefined; + showTooltip?: boolean | undefined; + } - let savingInputs = false + let { + runnableId, + runnableType, + args, + disabled = false, + small = undefined, + showTooltip = undefined + }: Props = $props(); + + let savingInputs = $state(false) async function saveInput(args: object) { savingInputs = true diff --git a/frontend/src/lib/components/SavedInputsPickerViewer.svelte b/frontend/src/lib/components/SavedInputsPickerViewer.svelte index 150e2b9b97..919965b5cf 100644 --- a/frontend/src/lib/components/SavedInputsPickerViewer.svelte +++ b/frontend/src/lib/components/SavedInputsPickerViewer.svelte @@ -1,4 +1,7 @@ - - - - - - {#if payloadData === 'WINDMILL_TOO_BIG'} - - {#if limitPayloadSize} - Payload too big to be used - {:else} - Payload too big to preview but can still be loaded - {/if} - - {:else} - { + {#snippet trigger({ isOpen })} + + + + {/snippet} + {#snippet content()} + + + {#if payloadData === 'WINDMILL_TOO_BIG'} + + {#if limitPayloadSize} + Payload too big to be used + {:else} + Payload too big to preview but can still be loaded + {/if} + + {:else} + { copyToClipboard(JSON.stringify(payloadData)) }} - on:keydown - > - {#if !objectViewerLoaded && payloadTooBigForPreview} - - - Loading data... - - {/if} + onkeydown={bubble('keydown')} + > + {#if !objectViewerLoaded && payloadTooBigForPreview} + + + Loading data... + + {/if} - {#if popoverFullyOpened || !payloadTooBigForPreview} - - (objectViewerLoaded = true)} + {#if popoverFullyOpened || !payloadTooBigForPreview} + + (objectViewerLoaded = true)} + /> + + {/if} + + + - {/if} - - - - - {/if} - - + {/if} + + + {/snippet} diff --git a/frontend/src/lib/components/SchemaEditorProperty.svelte b/frontend/src/lib/components/SchemaEditorProperty.svelte index 611e178981..fa12138c0d 100644 --- a/frontend/src/lib/components/SchemaEditorProperty.svelte +++ b/frontend/src/lib/components/SchemaEditorProperty.svelte @@ -2,7 +2,11 @@ import type { SchemaProperty } from '$lib/common' import Badge from './common/badge/Badge.svelte' - export let property: SchemaProperty + interface Props { + property: SchemaProperty; + } + + let { property }: Props = $props(); diff --git a/frontend/src/lib/components/SchemaFormWithArgPicker.svelte b/frontend/src/lib/components/SchemaFormWithArgPicker.svelte index 4764a26e74..7ddc4146be 100644 --- a/frontend/src/lib/components/SchemaFormWithArgPicker.svelte +++ b/frontend/src/lib/components/SchemaFormWithArgPicker.svelte @@ -1,4 +1,6 @@ @@ -100,7 +120,7 @@ - + {@render children?.()} @@ -109,11 +129,13 @@ {#if selectedTab === 'history'} - - - historicInputs?.refresh()} /> - - + {#snippet action()} + + + historicInputs?.refresh()} /> + + + {/snippet} {:else if selectedTab === 'captures'} - - - - - + {#snippet action()} + + + + + + {/snippet} - + + name type description diff --git a/frontend/src/lib/components/ScriptBuilder.svelte b/frontend/src/lib/components/ScriptBuilder.svelte index c597a6cd03..20c195f8d0 100644 --- a/frontend/src/lib/components/ScriptBuilder.svelte +++ b/frontend/src/lib/components/ScriptBuilder.svelte @@ -1,3 +1,5 @@ + - - + + {@render children?.()} {#if !isAtBottom && isScrollable} { + onClick={() => { let logLineNumber = document.line_number[0] let logFile = document.file_name[0] let host = document.host[0] diff --git a/frontend/src/lib/components/ShareModal.svelte b/frontend/src/lib/components/ShareModal.svelte index e5ad54f88b..fcbe166992 100644 --- a/frontend/src/lib/components/ShareModal.svelte +++ b/frontend/src/lib/components/ShareModal.svelte @@ -155,7 +155,8 @@ {#if acls?.length > 0} - + + owner diff --git a/frontend/src/lib/components/Slider.svelte b/frontend/src/lib/components/Slider.svelte index c2ca0abbdd..e3269cde09 100644 --- a/frontend/src/lib/components/Slider.svelte +++ b/frontend/src/lib/components/Slider.svelte @@ -5,10 +5,21 @@ import Tooltip from './Tooltip.svelte' import { twMerge } from 'tailwind-merge' - export let text: string - export let tooltip: string | undefined = undefined - export let view = false - export let size: 'xs' | 'sm' | 'md' | 'lg' = 'md' + interface Props { + text: string; + tooltip?: string | undefined; + view?: boolean; + size?: 'xs' | 'sm' | 'md' | 'lg'; + children?: import('svelte').Snippet; + } + + let { + text, + tooltip = undefined, + view = $bindable(false), + size = 'md', + children + }: Props = $props(); {#if view} - + {@render children?.()} {/if} diff --git a/frontend/src/lib/components/Star.svelte b/frontend/src/lib/components/Star.svelte index b4ac4c61ab..2d0ab33d99 100644 --- a/frontend/src/lib/components/Star.svelte +++ b/frontend/src/lib/components/Star.svelte @@ -1,16 +1,22 @@ (buttonHover = true)} - on:mouseleave={() => (buttonHover = false)} + onclick={preventDefault(onClick)} + onmouseenter={() => (buttonHover = true)} + onmouseleave={() => (buttonHover = false)} class="p-2" > {#if starred} diff --git a/frontend/src/lib/components/Summary.svelte b/frontend/src/lib/components/Summary.svelte index 42d0b48ba5..1b4c3f2c2e 100644 --- a/frontend/src/lib/components/Summary.svelte +++ b/frontend/src/lib/components/Summary.svelte @@ -2,8 +2,12 @@ import { Pen } from 'lucide-svelte' import TextInput from './text_input/TextInput.svelte' - export let value: string - export let disabled = false + interface Props { + value: string; + disabled?: boolean; + } + + let { value = $bindable(), disabled = false }: Props = $props(); function blur(e: KeyboardEvent) { e.key === 'Enter' && (e?.target as any)?.blur() diff --git a/frontend/src/lib/components/SupabaseConnect.svelte b/frontend/src/lib/components/SupabaseConnect.svelte index d16960ffbc..e44399ee84 100644 --- a/frontend/src/lib/components/SupabaseConnect.svelte +++ b/frontend/src/lib/components/SupabaseConnect.svelte @@ -1,4 +1,6 @@ @@ -120,7 +124,7 @@ {#each databases as database} { + onclick={() => { selectedDatabase = database step = 'resource' diff --git a/frontend/src/lib/components/SuperadminSettingsInner.svelte b/frontend/src/lib/components/SuperadminSettingsInner.svelte index ab4707c9ec..04f363ab37 100644 --- a/frontend/src/lib/components/SuperadminSettingsInner.svelte +++ b/frontend/src/lib/components/SuperadminSettingsInner.svelte @@ -6,7 +6,7 @@ import { sendUserToast } from '$lib/toast' import { base } from '$lib/base' import SearchItems from './SearchItems.svelte' - import { page } from '$app/stores' + import { page } from '$app/state' import { goto as gotoUrl } from '$app/navigation' import Version from './Version.svelte' import Uptodate from './Uptodate.svelte' @@ -31,9 +31,9 @@ let { closeDrawer } = $props() function removeHash() { - const index = $page.url.href.lastIndexOf('#') + const index = page.url.href.lastIndexOf('#') if (index === -1) return - const hashRemoved = $page.url.href.slice(0, index) + const hashRemoved = page.url.href.slice(0, index) gotoUrl(hashRemoved) } @@ -209,7 +209,8 @@ - + + email auth name diff --git a/frontend/src/lib/components/TableCustom.svelte b/frontend/src/lib/components/TableCustom.svelte index e40a2c9706..0a4a7aefb4 100644 --- a/frontend/src/lib/components/TableCustom.svelte +++ b/frontend/src/lib/components/TableCustom.svelte @@ -1,3 +1,4 @@ + diff --git a/frontend/src/lib/components/TestConnection.svelte b/frontend/src/lib/components/TestConnection.svelte index 3f49c92c21..f45dc0879b 100644 --- a/frontend/src/lib/components/TestConnection.svelte +++ b/frontend/src/lib/components/TestConnection.svelte @@ -7,10 +7,19 @@ import { workspaceStore } from '$lib/stores' import { tryEvery } from '$lib/utils' - export let workspaceOverride: string | undefined = undefined - export let resourceType: string | undefined - export let args: Record | any = {} - export let buttonTextOverride: string | undefined = undefined + interface Props { + workspaceOverride?: string | undefined; + resourceType: string | undefined; + args?: Record | any; + buttonTextOverride?: string | undefined; + } + + let { + workspaceOverride = undefined, + resourceType, + args = {}, + buttonTextOverride = undefined + }: Props = $props(); const scripts: { [key: string]: { @@ -166,7 +175,7 @@ export async function main(bucket: any) { } } - let loading = false + let loading = $state(false) async function testConnection() { if (!resourceType) return loading = true diff --git a/frontend/src/lib/components/TimeAgo.svelte b/frontend/src/lib/components/TimeAgo.svelte index a11e4ac240..64b0868f2e 100644 --- a/frontend/src/lib/components/TimeAgo.svelte +++ b/frontend/src/lib/components/TimeAgo.svelte @@ -1,18 +1,28 @@ {#if computedTimeAgo && (!agoOnlyIfRecent || isRecent)} diff --git a/frontend/src/lib/components/TooltipInner.svelte b/frontend/src/lib/components/TooltipInner.svelte index b8c435f167..19a72e3a5b 100644 --- a/frontend/src/lib/components/TooltipInner.svelte +++ b/frontend/src/lib/components/TooltipInner.svelte @@ -2,8 +2,13 @@ import Markdown from 'svelte-exmarkdown' import { ExternalLink } from 'lucide-svelte' import { gfmPlugin } from 'svelte-exmarkdown/gfm' - export let documentationLink: string | undefined = undefined - export let markdownTooltip: string | undefined = undefined + interface Props { + documentationLink?: string | undefined; + markdownTooltip?: string | undefined; + children?: import('svelte').Snippet; + } + + let { documentationLink = undefined, markdownTooltip = undefined, children }: Props = $props(); const plugins = [gfmPlugin()] @@ -15,7 +20,7 @@ {:else} - + {@render children?.()} {/if} {#if documentationLink} diff --git a/frontend/src/lib/components/Uptodate.svelte b/frontend/src/lib/components/Uptodate.svelte index 8dc5f00eee..56119732df 100644 --- a/frontend/src/lib/components/Uptodate.svelte +++ b/frontend/src/lib/components/Uptodate.svelte @@ -3,7 +3,7 @@ import { isCloudHosted } from '$lib/cloud' import Tooltip from './Tooltip.svelte' - let uptodate: string | undefined = undefined + let uptodate: string | undefined = $state(undefined) async function loadVersion() { try { diff --git a/frontend/src/lib/components/Urlize.svelte b/frontend/src/lib/components/Urlize.svelte index 060ec9f141..d682a39ca9 100644 --- a/frontend/src/lib/components/Urlize.svelte +++ b/frontend/src/lib/components/Urlize.svelte @@ -1,8 +1,12 @@ {@html parsed} diff --git a/frontend/src/lib/components/Version.svelte b/frontend/src/lib/components/Version.svelte index 9406bed01f..aa0b58624d 100644 --- a/frontend/src/lib/components/Version.svelte +++ b/frontend/src/lib/components/Version.svelte @@ -1,7 +1,7 @@ {#if flow_status} diff --git a/frontend/src/lib/components/ZitadelSetting.svelte b/frontend/src/lib/components/ZitadelSetting.svelte index 16e15a6070..ace0bd2e85 100644 --- a/frontend/src/lib/components/ZitadelSetting.svelte +++ b/frontend/src/lib/components/ZitadelSetting.svelte @@ -1,14 +1,18 @@ - + { + onkeydown={(e) => { if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') { onConfirm() } diff --git a/frontend/src/lib/components/apps/editor/AppExportButton.svelte b/frontend/src/lib/components/apps/editor/AppExportButton.svelte index 0bc4cf4b10..bda3dcb51a 100644 --- a/frontend/src/lib/components/apps/editor/AppExportButton.svelte +++ b/frontend/src/lib/components/apps/editor/AppExportButton.svelte @@ -14,11 +14,11 @@ import Tab from '$lib/components/common/tabs/Tab.svelte' import HighlightTheme from '$lib/components/HighlightTheme.svelte' - let jsonViewerDrawer: Drawer + let jsonViewerDrawer: Drawer | undefined = $state() - let app: any | undefined = undefined + let app: any | undefined = $state(undefined) - let rawType: 'json' | 'yaml' = 'yaml' + let rawType: 'json' | 'yaml' = $state('yaml') export function open(app_l: any) { app = app_l @@ -29,7 +29,7 @@ - jsonViewerDrawer.toggleDrawer()}> + jsonViewerDrawer?.toggleDrawer()}> diff --git a/frontend/src/lib/components/apps/editor/AppInputs.svelte b/frontend/src/lib/components/apps/editor/AppInputs.svelte index ed9591903c..4876cb5a86 100644 --- a/frontend/src/lib/components/apps/editor/AppInputs.svelte +++ b/frontend/src/lib/components/apps/editor/AppInputs.svelte @@ -9,7 +9,7 @@ const { app } = getContext('AppViewerContext') - let resourceOnly: boolean = true + let resourceOnly: boolean = $state(true) diff --git a/frontend/src/lib/components/apps/editor/AppJsonEditor.svelte b/frontend/src/lib/components/apps/editor/AppJsonEditor.svelte index 7572c8c0fe..5a955a8ce6 100644 --- a/frontend/src/lib/components/apps/editor/AppJsonEditor.svelte +++ b/frontend/src/lib/components/apps/editor/AppJsonEditor.svelte @@ -10,12 +10,12 @@ import { createEventDispatcher } from 'svelte' import { Globe, Loader2, Save } from 'lucide-svelte' - let jsonViewerDrawer: Drawer + let jsonViewerDrawer: Drawer | undefined = $state() - let code: string = '' + let code: string = $state('') let path: string = '' - let useDraft: boolean = false - let loading = true + let useDraft: boolean = $state(false) + let loading = $state(true) const dispatch = createEventDispatcher() let app: any | undefined = undefined @@ -73,7 +73,7 @@ - jsonViewerDrawer.toggleDrawer()}> + jsonViewerDrawer?.toggleDrawer()}> {#if useDraft} +Draft diff --git a/frontend/src/lib/components/apps/editor/RecomputeAllComponents.svelte b/frontend/src/lib/components/apps/editor/RecomputeAllComponents.svelte index 881e9de0a9..7c9932553e 100644 --- a/frontend/src/lib/components/apps/editor/RecomputeAllComponents.svelte +++ b/frontend/src/lib/components/apps/editor/RecomputeAllComponents.svelte @@ -1,4 +1,6 @@ (b.order ?? 0) - (a.order ?? 0) + a.name.localeCompare(b.name)) - let search = '' + let search = $state('') @@ -98,12 +98,15 @@ } }} > - - - - {name} - - + {#snippet titleSlot()} + {@const SvelteComponent = icon} + + + + {name} + + + {/snippet} {#if description} {description} {/if} diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentsList.svelte b/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentsList.svelte index 7460c30de9..7d2b84b264 100644 --- a/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentsList.svelte +++ b/frontend/src/lib/components/apps/editor/componentsPanel/CustomComponentsList.svelte @@ -15,9 +15,9 @@ let customcomponents: Array<{ name: string path: string - }> = [] + }> = $state([]) - let loading: boolean = false + let loading: boolean = $state(false) async function getCustomComponents() { loading = true @@ -44,7 +44,7 @@ } }, name: nameField, - js: await files[0].text() + js: await files?.[0].text() } } }) @@ -61,10 +61,10 @@ nameField = '' } - let nameField: string = '' - let reactVersion: string = '18.2.0' - let files: FileList - let useReact = true + let nameField: string = $state('') + let reactVersion: string = $state('18.2.0') + let files: FileList | undefined = $state() + let useReact = $state(true) getCustomComponents() diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/QuickStyleMenu.svelte b/frontend/src/lib/components/apps/editor/componentsPanel/QuickStyleMenu.svelte index cf5bda33c7..6630391b04 100644 --- a/frontend/src/lib/components/apps/editor/componentsPanel/QuickStyleMenu.svelte +++ b/frontend/src/lib/components/apps/editor/componentsPanel/QuickStyleMenu.svelte @@ -211,11 +211,13 @@ {isOpen[prefix] ? '!bg-surface-secondary hover:!bg-surface-hover' : ''}" > - - - {group} - - + {#snippet titleSlot()} + + + {group} + + + {/snippet} {#each property[group] as p} {@const { diff --git a/frontend/src/lib/components/apps/editor/componentsPanel/ThemeList.svelte b/frontend/src/lib/components/apps/editor/componentsPanel/ThemeList.svelte index abeb1bed53..5296ebe3a6 100644 --- a/frontend/src/lib/components/apps/editor/componentsPanel/ThemeList.svelte +++ b/frontend/src/lib/components/apps/editor/componentsPanel/ThemeList.svelte @@ -19,14 +19,14 @@ const { previewTheme, app } = getContext('AppViewerContext') let cssString: string | undefined = $app?.theme?.type === 'inlined' ? $app.theme.css : undefined - $: type = $app?.theme?.type + let type = $derived($app?.theme?.type) let themes: Array<{ name: string path: string - }> = [] + }> = $state([]) - let loading: boolean = false + let loading: boolean = $state(false) async function getThemes() { loading = true @@ -62,8 +62,8 @@ } } - let nameField: string = '' - let previewThemePath: string | undefined = undefined + let nameField: string = $state('') + let previewThemePath: string | undefined = $state(undefined) onMount(() => { getThemes() diff --git a/frontend/src/lib/components/apps/editor/contextPanel/DebugPanel.svelte b/frontend/src/lib/components/apps/editor/contextPanel/DebugPanel.svelte index c0094fba48..c97b4b791e 100644 --- a/frontend/src/lib/components/apps/editor/contextPanel/DebugPanel.svelte +++ b/frontend/src/lib/components/apps/editor/contextPanel/DebugPanel.svelte @@ -12,12 +12,12 @@ const { app, initialized } = getContext('AppViewerContext') - $: unintitializedComponents = allItems($app.grid, $app.subgrids) + let unintitializedComponents = $derived(allItems($app.grid, $app.subgrids) .map((x) => x.id) .filter((x) => !$initialized.initializedComponents?.includes(x)) - .sort() + .sort()) - $: subgridsErrors = Object.keys($app.subgrids ?? {}) + let subgridsErrors = $derived(Object.keys($app.subgrids ?? {}) .map((x) => { const parentId = x.split('-')[0] const parent = findGridItem($app, parentId) @@ -39,7 +39,7 @@ } } }) - .filter(Boolean) + .filter(Boolean)) diff --git a/frontend/src/lib/components/apps/editor/settingsPanel/StylePanel.svelte b/frontend/src/lib/components/apps/editor/settingsPanel/StylePanel.svelte index 2bcb0c4114..e99c44a8c4 100644 --- a/frontend/src/lib/components/apps/editor/settingsPanel/StylePanel.svelte +++ b/frontend/src/lib/components/apps/editor/settingsPanel/StylePanel.svelte @@ -1,4 +1,6 @@ {#key color} {#if ended} - + {@render children?.()} {:else} - export let notificationCount = 0 - export let notificationLimit: number | undefined = undefined + interface Props { + notificationCount?: number; + notificationLimit?: number | undefined; + } + + let { notificationCount = 0, notificationLimit = undefined }: Props = $props(); {#if notificationCount > 0} diff --git a/frontend/src/lib/components/common/breadcrumb/Breadcrumb.svelte b/frontend/src/lib/components/common/breadcrumb/Breadcrumb.svelte index 17e7a60132..076ae7439d 100644 --- a/frontend/src/lib/components/common/breadcrumb/Breadcrumb.svelte +++ b/frontend/src/lib/components/common/breadcrumb/Breadcrumb.svelte @@ -2,9 +2,19 @@ import { createEventDispatcher } from 'svelte' import Button from '../button/Button.svelte' - export let items: string[] - export let selectedIndex: number - export let disabled: boolean = false + interface Props { + items: string[]; + selectedIndex: number; + disabled?: boolean; + separator?: import('svelte').Snippet; + } + + let { + items, + selectedIndex, + disabled = false, + separator + }: Props = $props(); const dispatch = createEventDispatcher() @@ -12,7 +22,7 @@ {#each items as item, index} {#if index > 0} - + {@render separator?.()} {/if} import AnimatedButtonInner from './AnimatedButtonInner.svelte' - export let marginWidth = '2px' - export let animationDuration = '2s' - export let baseRadius = '4px' - export let animate = true - export let wrapperClasses = '' - export let ringColor = 'transparent' - export let darkMode = false + interface Props { + marginWidth?: string; + animationDuration?: string; + baseRadius?: string; + animate?: boolean; + wrapperClasses?: string; + ringColor?: string; + darkMode?: boolean; + children?: import('svelte').Snippet; + } + + let { + marginWidth = '2px', + animationDuration = '2s', + baseRadius = '4px', + animate = true, + wrapperClasses = '', + ringColor = 'transparent', + darkMode = false, + children + }: Props = $props(); {#if animate} @@ -19,10 +33,10 @@ {ringColor} {darkMode} > - + {@render children?.()} {:else} - + {@render children?.()} {/if} diff --git a/frontend/src/lib/components/common/button/AnimatedButtonInner.svelte b/frontend/src/lib/components/common/button/AnimatedButtonInner.svelte index 7396b5314b..9ba46928a0 100644 --- a/frontend/src/lib/components/common/button/AnimatedButtonInner.svelte +++ b/frontend/src/lib/components/common/button/AnimatedButtonInner.svelte @@ -1,27 +1,41 @@ @@ -33,7 +47,7 @@ bind:clientWidth bind:clientHeight > - + {@render children?.()}
{#if typeof label !== 'string'} diff --git a/frontend/src/lib/components/Range.svelte b/frontend/src/lib/components/Range.svelte index 0e92ac72de..72129aada2 100644 --- a/frontend/src/lib/components/Range.svelte +++ b/frontend/src/lib/components/Range.svelte @@ -1,29 +1,47 @@