diff --git a/Dockerfile b/Dockerfile
index e05f017c0..7aad1b82c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -48,6 +48,7 @@ RUN apt-get update -qq && \
# Install npm dependencies for Vite. Vendored Inertia packages must exist
# before `bun i` because they are referenced via local file dependencies.
COPY package.json bun.lock ./
+COPY patches patches
COPY vendor/inertia vendor/inertia
RUN bun i
diff --git a/Dockerfile.dev b/Dockerfile.dev
index 34df3ea42..78ce68d37 100644
--- a/Dockerfile.dev
+++ b/Dockerfile.dev
@@ -28,6 +28,7 @@ WORKDIR /app
# Install npm dependencies for Vite. Vendored Inertia packages must exist
# before `bun install` because they are referenced via local file dependencies.
COPY package.json bun.lock ./
+COPY patches patches
COPY vendor/inertia vendor/inertia
RUN bun install
diff --git a/app/javascript/pages/Home/SignedIn.svelte b/app/javascript/pages/Home/SignedIn.svelte
index dc51c6e12..4b81d9a52 100644
--- a/app/javascript/pages/Home/SignedIn.svelte
+++ b/app/javascript/pages/Home/SignedIn.svelte
@@ -133,6 +133,36 @@
{/if}
+ {#snippet dashboardContent(reloading: boolean)}
+
+
+ {#if dashboard_stats?.today_stats}
+
+ {/if}
+
+
+ {#if dashboard_stats?.filterable_dashboard_data}
+
+ {/if}
+
+ {#if dashboard_stats?.activity_graph}
+
+ {/if}
+
+ {/snippet}
+
{#snippet fallback()}
@@ -145,36 +175,7 @@
{/snippet}
{#snippet children({ reloading })}
-
-
-
- {#if dashboard_stats?.today_stats}
-
- {/if}
-
-
-
- {#if dashboard_stats?.filterable_dashboard_data}
-
- {/if}
-
-
- {#if dashboard_stats?.activity_graph}
-
- {/if}
-
+ {@render dashboardContent(reloading)}
{/snippet}
diff --git a/app/javascript/pages/Home/signedIn/PieChart.svelte b/app/javascript/pages/Home/signedIn/PieChart.svelte
index f20f71039..954773d77 100644
--- a/app/javascript/pages/Home/signedIn/PieChart.svelte
+++ b/app/javascript/pages/Home/signedIn/PieChart.svelte
@@ -69,6 +69,9 @@
const formatDuration = (value: number | null | undefined) =>
secondsToDisplay(value ?? 0);
+
+ const CHART_WIDTH = 480;
+ const CHART_HEIGHT = 300;
0}
` tag. Useful for bindings. */
+ export let element = undefined;
+@@ -179,8 +184,8 @@
+ * Prefix these with `_` to keep things organized
+ */
+ const _percentRange = writable(percentRange);
+- const _containerWidth = writable(containerWidth);
+- const _containerHeight = writable(containerHeight);
++ const _containerWidth = writable(resolvedContainerWidth);
++ const _containerHeight = writable(resolvedContainerHeight);
+ const _extents = writable(filterObject(extents));
+ const _data = writable(data);
+ const _flatData = writable(flatData || data);
+@@ -221,8 +226,8 @@
+ const _custom = writable(custom);
+
+ $: $_percentRange = percentRange;
+- $: $_containerWidth = containerWidth;
+- $: $_containerHeight = containerHeight;
++ $: $_containerWidth = resolvedContainerWidth;
++ $: $_containerHeight = resolvedContainerHeight;
+ $: $_extents = filterObject(extents);
+ $: $_data = data;
+ $: $_flatData = flatData || data;
+@@ -540,8 +545,8 @@
+ style:bottom={position === 'absolute' ? '0' : null}
+ style:left={position === 'absolute' ? '0' : null}
+ style:pointer-events={pointerEvents === false ? 'none' : null}
+- bind:clientWidth={containerWidth}
+- bind:clientHeight={containerHeight}
++ bind:clientWidth={measuredContainerWidth}
++ bind:clientHeight={measuredContainerHeight}
+ >
+ (() => resolveRenderProps(component, page, key))
+ // Populate the global page store before the initial render so SSR can
+ // resolve Deferred/WhenVisible content against the actual page props.
+ setPage(page)
+
// Reactively update the global page state when local page state changes
$effect.pre(() => {
setPage(page)