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 @@
-