diff --git a/src/lib/components/advanced-visibility-guard.svelte b/src/lib/components/advanced-visibility-guard.svelte deleted file mode 100644 index d227952754..0000000000 --- a/src/lib/components/advanced-visibility-guard.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - -{#if $supportsAdvancedVisibility} - -{:else} - -{/if} diff --git a/src/lib/components/batch-operations/header.svelte b/src/lib/components/batch-operations/header.svelte index 2b74341774..56d12edd61 100644 --- a/src/lib/components/batch-operations/header.svelte +++ b/src/lib/components/batch-operations/header.svelte @@ -8,7 +8,11 @@ import { autoRefresh } from '$lib/stores/batch-operations'; import type { BatchOperation, BatchOperationState } from '$lib/types/batch'; - export let operation: BatchOperation; + interface Props { + operation: BatchOperation; + } + + let { operation }: Props = $props(); const dispatch = createEventDispatcher<{ toggleAutoRefresh: { checked: boolean }; diff --git a/src/lib/components/data-encoder-status.svelte b/src/lib/components/data-encoder-status.svelte index 0c9140cfe6..a73f195292 100644 --- a/src/lib/components/data-encoder-status.svelte +++ b/src/lib/components/data-encoder-status.svelte @@ -13,13 +13,9 @@ } }; - let variant: 'primary' | 'ghost' = 'ghost'; - - const updateVariant = (open: boolean) => { - variant = open ? 'primary' : 'ghost'; - }; - - $: updateVariant($viewDataEncoderSettings); + const variant = $derived<'primary' | 'ghost'>( + $viewDataEncoderSettings ? 'primary' : 'ghost', + );
diff --git a/src/lib/components/feature-guard.svelte b/src/lib/components/feature-guard.svelte deleted file mode 100644 index 9534e84b6e..0000000000 --- a/src/lib/components/feature-guard.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - -{#if enabled} - -{:else} - -{/if} diff --git a/src/lib/components/import/event-history-file-import.svelte b/src/lib/components/import/event-history-file-import.svelte index f2cf708e60..6b7139a4b2 100644 --- a/src/lib/components/import/event-history-file-import.svelte +++ b/src/lib/components/import/event-history-file-import.svelte @@ -13,8 +13,9 @@ import { parseWithBigInt } from '$lib/utilities/parse-with-big-int'; import { routeForEventHistoryImport } from '$lib/utilities/route-for'; - let rawEvents: HistoryEvent[] | { events: HistoryEvent[] }; - let fileLoaded = false; + let rawEvents: HistoryEvent[] | { events: HistoryEvent[] } | undefined = + $state(undefined); + let fileLoaded = $state(false); const onFileSelect = async (e: Event) => { const target = e.target as HTMLInputElement; @@ -70,7 +71,7 @@ class="import-input block border border-slate-200 p-2" type="file" accept=".json" - on:change={onFileSelect} + onchange={onFileSelect} /> - import { page } from '$app/stores'; - - export let isCloud = false; - - -{#if isCloud || $page.data?.settings?.runtimeEnvironment?.isCloud} - -{:else} - -{/if} diff --git a/src/lib/components/is-legacy-cloud-guard.svelte b/src/lib/components/is-legacy-cloud-guard.svelte deleted file mode 100644 index 6df766fad2..0000000000 --- a/src/lib/components/is-legacy-cloud-guard.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -{#if isCloud && isLegacyCloud} - -{:else} - -{/if} diff --git a/src/lib/components/is-oss-guard.svelte b/src/lib/components/is-oss-guard.svelte index 32545d38ae..ae60dca167 100644 --- a/src/lib/components/is-oss-guard.svelte +++ b/src/lib/components/is-oss-guard.svelte @@ -1,11 +1,17 @@ -{#if isCloud || $page.data?.settings?.runtimeEnvironment?.isCloud} - +{#if isCloud || page.data?.settings?.runtimeEnvironment?.isCloud} + {@render children?.()} {:else} - + {@render fallback?.()} {/if} diff --git a/src/lib/components/is-temporal-server-version-guard.svelte b/src/lib/components/is-temporal-server-version-guard.svelte index 8a29e9493d..73ed6b7777 100644 --- a/src/lib/components/is-temporal-server-version-guard.svelte +++ b/src/lib/components/is-temporal-server-version-guard.svelte @@ -1,13 +1,23 @@ {#if $isCloud || minimumVersionRequired(minimumVersion, $temporalVersion)} - + {@render children?.()} {:else} - + {@render fallback?.()} {/if} diff --git a/src/lib/components/lines-and-dots/event-sort-filter.svelte b/src/lib/components/lines-and-dots/event-sort-filter.svelte index a3c52f3ab8..15ebc9572a 100644 --- a/src/lib/components/lines-and-dots/event-sort-filter.svelte +++ b/src/lib/components/lines-and-dots/event-sort-filter.svelte @@ -1,9 +1,9 @@ - diff --git a/src/lib/components/lines-and-dots/svg/timeline-graph.svelte b/src/lib/components/lines-and-dots/svg/timeline-graph.svelte index 0048821884..dd2d181325 100644 --- a/src/lib/components/lines-and-dots/svg/timeline-graph.svelte +++ b/src/lib/components/lines-and-dots/svg/timeline-graph.svelte @@ -17,38 +17,64 @@ import TimelineGraphRow from './timeline-graph-row.svelte'; import WorkflowRow from './workflow-row.svelte'; - export let x = 0; - export let y = 0; - export let workflow: WorkflowExecution; - export let groups: EventGroups; - export let viewportHeight: number | undefined; - export let readOnly = false; - export let error: boolean = false; + interface Props { + x?: number; + y?: number; + workflow: WorkflowExecution; + groups: EventGroups; + viewportHeight: number | undefined; + readOnly?: boolean; + error?: boolean; + } + + let { + x = 0, + y = 0, + workflow, + groups, + viewportHeight, + readOnly = false, + error = false, + }: Props = $props(); const { height, gutter, radius } = TimelineConfig; - let canvasWidth = 0; - let scrollY = 0; + let canvasWidth = $state(0); + let scrollY = $state(0); + + const expandedGroupHeight = $derived(readOnly ? 0 : $activeGroupHeight); + const filteredGroups = $derived( + getFailedOrPendingGroups(groups, $eventStatusFilter), + ); + const firstStartTime = $derived.by(() => { + const firstEventTime = $fullEventHistory[0]?.eventTime; - $: expandedGroupHeight = readOnly ? 0 : $activeGroupHeight; - $: filteredGroups = getFailedOrPendingGroups(groups, $eventStatusFilter); - $: firstStartTime = - $fullEventHistory[0]?.eventTime < workflow.executionTime - ? $fullEventHistory[0]?.eventTime + if (!firstEventTime) { + return workflow.executionTime; + } + + return firstEventTime < workflow.executionTime + ? firstEventTime : workflow.executionTime; - $: startTime = - (!isWorkflowDelayed(workflow) && firstStartTime) || workflow.startTime; - $: timelineHeight = - Math.max(height * (filteredGroups.length + 2), 120) + expandedGroupHeight; - $: canvasHeight = timelineHeight + 120; + }); + + const startTime = $derived( + (!isWorkflowDelayed(workflow) && firstStartTime) || workflow.startTime, + ); + const timelineHeight = $derived( + Math.max(height * (filteredGroups.length + 2), 120) + expandedGroupHeight, + ); + const canvasHeight = $derived(timelineHeight + 120); - const handleScroll = (e) => { - scrollY = e?.target?.scrollTop; + const handleScroll = (e: Event) => { + scrollY = (e?.target as HTMLElement)?.scrollTop; }; - $: groupIndexMap = new Map(filteredGroups.map((g, i) => [g.id, i])); + const groupIndexMap = $derived( + new Map(filteredGroups.map((g, i) => [g.id, i])), + ); - $: activeGroupsHeightAboveGroup = (groupIndex: number) => { + const activeGroupsHeightAboveGroup = (groupIndex: number) => { const hasActiveAbove = $activeGroups?.some((id) => { const activeIndex = groupIndexMap.get(id); return activeIndex !== undefined && activeIndex < groupIndex; @@ -62,7 +88,7 @@ class="relative h-auto overflow-auto border border-t-0 border-subtle bg-primary" bind:clientWidth={canvasWidth} style={viewportHeight ? `max-height: ${viewportHeight}px;` : ''} - on:scroll={handleScroll} + onscroll={handleScroll} > {#each filteredGroups as group, index (group.id)} diff --git a/src/lib/components/search-attribute-filter/close-filter-button.svelte b/src/lib/components/search-attribute-filter/close-filter-button.svelte index 93b68eabd0..c44fdb399d 100644 --- a/src/lib/components/search-attribute-filter/close-filter-button.svelte +++ b/src/lib/components/search-attribute-filter/close-filter-button.svelte @@ -1,3 +1,5 @@ + + diff --git a/src/lib/components/search-attribute-filter/filter-list.svelte b/src/lib/components/search-attribute-filter/filter-list.svelte index 284ec6f261..f33392d9bb 100644 --- a/src/lib/components/search-attribute-filter/filter-list.svelte +++ b/src/lib/components/search-attribute-filter/filter-list.svelte @@ -3,7 +3,7 @@ import { getContext } from 'svelte'; - import { page } from '$app/stores'; + import { page } from '$app/state'; import Timestamp from '$lib/components/timestamp.svelte'; import WorkflowStatus from '$lib/components/workflow-status.svelte'; @@ -24,7 +24,11 @@ import { FILTER_CONTEXT, type FilterContext } from './index.svelte'; - export let filters: SearchAttributeFilter[]; + interface Props { + filters: SearchAttributeFilter[]; + } + + let { filters = $bindable() }: Props = $props(); const { filter, activeQueryIndex } = getContext(FILTER_CONTEXT); @@ -32,7 +36,7 @@ const removeQuery = (index: number) => { filters.splice(index, 1); filters = filters; - updateQueryParamsFromFilter($page.url, filters); + updateQueryParamsFromFilter(page.url, filters); if (index === filters.length) { const previousQuery = filters[filters.length - 1]; @@ -49,10 +53,10 @@ } }; - let totalFiltersInView = 5; + let totalFiltersInView = $state(5); - $: visibleFilters = filters.slice(0, totalFiltersInView); - $: hasMoreFilters = totalFiltersInView < filters.length; + const visibleFilters = $derived(filters.slice(0, totalFiltersInView)); + const hasMoreFilters = $derived(totalFiltersInView < filters.length); const viewMoreFilters = () => { if (hasMoreFilters) { diff --git a/src/lib/components/search-attribute-filter/number-filter.svelte b/src/lib/components/search-attribute-filter/number-filter.svelte index 6069162038..0cb51cd652 100644 --- a/src/lib/components/search-attribute-filter/number-filter.svelte +++ b/src/lib/components/search-attribute-filter/number-filter.svelte @@ -11,8 +11,7 @@ getContext(FILTER_CONTEXT); const min = 0; - $: ({ value } = $filter); - $: _value = value ? Number(value) : null; + let _value = $derived($filter.value ? Number($filter.value) : null); const handleKeydown = (e: KeyboardEvent) => { $focusedElementId = ''; diff --git a/src/lib/components/search-attribute-filter/search-attribute-menu.svelte b/src/lib/components/search-attribute-filter/search-attribute-menu.svelte index 9383c5476c..5e6a05042a 100644 --- a/src/lib/components/search-attribute-filter/search-attribute-menu.svelte +++ b/src/lib/components/search-attribute-filter/search-attribute-menu.svelte @@ -1,7 +1,7 @@ = MAX_QUERY_LENGTH} + disabled={$activeQueryIndex !== null || query.length >= MAX_QUERY_LENGTH} onclick={() => (searchAttributeValue = '')} class="text-nowrap" > diff --git a/src/lib/components/search-attribute-filter/status-filter.svelte b/src/lib/components/search-attribute-filter/status-filter.svelte index aacffdc753..f69f0aabd0 100644 --- a/src/lib/components/search-attribute-filter/status-filter.svelte +++ b/src/lib/components/search-attribute-filter/status-filter.svelte @@ -3,7 +3,7 @@ import { getContext } from 'svelte'; - import { page } from '$app/stores'; + import { page } from '$app/state'; import WorkflowStatus from '$lib/components/workflow-status.svelte'; import Checkbox from '$lib/holocene/checkbox.svelte'; @@ -22,16 +22,22 @@ import { FILTER_CONTEXT, type FilterContext } from './index.svelte'; - export let filters: SearchAttributeFilter[]; + interface Props { + filters: SearchAttributeFilter[]; + } + + let { filters = $bindable() }: Props = $props(); const { filter, resetFilter } = getContext(FILTER_CONTEXT); const open = writable(true); - $: _filters = [...filters]; - $: statusFilters = _filters.filter((filter) => isStatusFilter(filter)); + let _filters: SearchAttributeFilter[] = $derived([...filters]); + const statusFilters = $derived( + _filters.filter((filter) => isStatusFilter(filter)), + ); function apply() { filters = _filters; - updateQueryParamsFromFilter($page.url, filters); + updateQueryParamsFromFilter(page.url, filters); } function mapStatusToFilter(value: string) { diff --git a/src/lib/components/search-attribute-filter/text-filter.svelte b/src/lib/components/search-attribute-filter/text-filter.svelte index 6b555c7283..f830e53223 100644 --- a/src/lib/components/search-attribute-filter/text-filter.svelte +++ b/src/lib/components/search-attribute-filter/text-filter.svelte @@ -11,8 +11,7 @@ const { filter, handleSubmit } = getContext(FILTER_CONTEXT); - $: ({ value } = $filter); - $: _value = value; + let _value = $derived($filter.value); function handleKeydown(e: KeyboardEvent) { if (e.key === 'Enter' && _value !== '') { @@ -22,13 +21,13 @@ } } - $: options = [ + const options = $derived([ { value: '=', label: translate('common.equal-to') }, { value: '!=', label: translate('common.not-equal-to') }, ...($prefixSearchEnabled && $filter.type === SEARCH_ATTRIBUTE_TYPE.KEYWORD ? [{ value: 'STARTS_WITH', label: translate('common.starts-with') }] : []), - ]; + ]); diff --git a/src/lib/components/standalone-activities/activities-summary-filter-bar/filter-bar.svelte b/src/lib/components/standalone-activities/activities-summary-filter-bar/filter-bar.svelte index bc964c9fc1..7bf93f7d2c 100644 --- a/src/lib/components/standalone-activities/activities-summary-filter-bar/filter-bar.svelte +++ b/src/lib/components/standalone-activities/activities-summary-filter-bar/filter-bar.svelte @@ -1,3 +1,5 @@ + + @@ -65,7 +71,7 @@ Available Columns (not in view) - {#each $availableColumns as { label }} + {#each $availableColumns as { label } (label)} addColumn(label, namespace, table)} @@ -86,7 +92,7 @@ {translate('events.custom-search-attributes')} (not in view) - {#each $availableCustomColumns as { label }} + {#each $availableCustomColumns as { label } (label)} addColumn(label, namespace, table)} diff --git a/src/lib/components/workflow/dropdown-filter/conditional.svelte b/src/lib/components/workflow/dropdown-filter/conditional.svelte index baffba2ed8..1e2f31ecc3 100644 --- a/src/lib/components/workflow/dropdown-filter/conditional.svelte +++ b/src/lib/components/workflow/dropdown-filter/conditional.svelte @@ -1,14 +1,18 @@
-