Changed $effect() logic to Svelte 5 $derived.by()

This commit is contained in:
wires 2026-05-11 23:57:08 -04:00
parent f4578a46e5
commit 4712d80d4d
5 changed files with 35 additions and 50 deletions

View file

@ -1,6 +1,5 @@
<!-- @component `FeaturePhoto` [Read the docs.](https://reuters-graphics.github.io/graphics-components/?path=/docs/components-multimedia-featurephoto--docs) --> <!-- @component `FeaturePhoto` [Read the docs.](https://reuters-graphics.github.io/graphics-components/?path=/docs/components-multimedia-featurephoto--docs) -->
<script lang="ts"> <script lang="ts">
import { onMount } from 'svelte';
import type { ContainerWidth } from '../@types/global'; import type { ContainerWidth } from '../@types/global';
import { getResponsiveSizes } from '../../utils/propValidators'; import { getResponsiveSizes } from '../../utils/propValidators';
@ -82,33 +81,6 @@
left = 0, left = 0,
right = 0, right = 0,
}: Props = $props(); }: Props = $props();
let intersecting = $state(false);
let container: HTMLElement;
const intersectable = typeof IntersectionObserver !== 'undefined';
onMount(() => {
if (!lazy) return;
if (intersectable) {
const rootMargin = `${bottom}px ${left}px ${top}px ${right}px`;
const observer = new IntersectionObserver(
(entries) => {
intersecting = entries[0].isIntersecting;
if (intersecting) {
observer.unobserve(container);
}
},
{
rootMargin,
}
);
observer.observe(container);
return () => observer.unobserve(container);
}
});
</script> </script>
<Block {width} class="photo fmy-6 {cls}" {id}> <Block {width} class="photo fmy-6 {cls}" {id}>
@ -133,10 +105,6 @@
</Block> </Block>
<style lang="scss"> <style lang="scss">
.placeholder {
background-color: #ccc;
}
div.alt-warning { div.alt-warning {
background-color: red; background-color: red;
color: white; color: white;

View file

@ -68,23 +68,18 @@
}: Props = $props(); }: Props = $props();
// Set the headline text size class based on the `hedSize` prop // Set the headline text size class based on the `hedSize` prop
let hedClass = $state('text-3xl'); let hedClass = $derived.by(() => {
$effect(() => {
switch (hedSize) { switch (hedSize) {
case 'biggest': case 'biggest':
hedClass = 'text-6xl'; return 'text-6xl';
break;
case 'bigger': case 'bigger':
hedClass = 'text-5xl'; return 'text-5xl';
break;
case 'big': case 'big':
hedClass = 'text-4xl'; return 'text-4xl';
break;
case 'small': case 'small':
hedClass = 'text-2xl'; return 'text-2xl';
break;
default: default:
hedClass = 'text-3xl'; return 'text-3xl';
} }
}); });
</script> </script>

View file

@ -67,9 +67,7 @@
}); });
</script> </script>
<Article <Article>
columnWidths="normal"
>
<ScrollerBase <ScrollerBase
bind:count bind:count
@ -172,8 +170,4 @@
position: relative; position: relative;
} }
.step-background-container {
max-width: var(--normal-column-width, 660px);
}
</style> </style>

View file

@ -1,8 +1,11 @@
--- ---
import Layout from '../layouts/Layout.astro'; import Layout from '../layouts/Layout.astro';
import Squash from './Squash.svelte'; import Squash from './Squash.svelte';
import Article from '@components/Article/Article.svelte'; import Article from '@components/Article/Article.svelte';
import BodyText from '@components/BodyText/BodyText.svelte'; import BodyText from '@components/BodyText/BodyText.svelte';
import Headline from '@components/Headline/Headline.svelte';
import graphicOne from '../assets/Photo-3468.jpg'; import graphicOne from '../assets/Photo-3468.jpg';
import graphicTwo from '../assets/Photo-3471.jpg'; import graphicTwo from '../assets/Photo-3471.jpg';
import graphicThree from '../assets/Photo-3515.jpg'; import graphicThree from '../assets/Photo-3515.jpg';
@ -27,6 +30,9 @@ const graphics = await Promise.all([
--- ---
<Layout> <Layout>
<Headline
hed={'Unfriendly skies'}
/>
<Article> <Article>
<BodyText text="Cras eu consectetur justo, eu luctus felis. Suspendisse lectus enim, bibendum vitae euismod et, condimentum quis tortor. Donec sit amet orci nibh. Vivamus facilisis nunc quis nunc feugiat placerat. Nunc ut augue vitae metus fermentum venenatis vel at dui. Nulla aliquet nibh porttitor odio imperdiet, in ullamcorper augue bibendum. Cras ornare nunc ut sollicitudin egestas. Suspendisse neque ipsum, faucibus eu hendrerit porttitor, tincidunt a tortor. Aliquam at facilisis diam, a ullamcorper lacus. Suspendisse pharetra faucibus venenatis. Donec efficitur condimentum neque ut vehicula." /> <BodyText text="Cras eu consectetur justo, eu luctus felis. Suspendisse lectus enim, bibendum vitae euismod et, condimentum quis tortor. Donec sit amet orci nibh. Vivamus facilisis nunc quis nunc feugiat placerat. Nunc ut augue vitae metus fermentum venenatis vel at dui. Nulla aliquet nibh porttitor odio imperdiet, in ullamcorper augue bibendum. Cras ornare nunc ut sollicitudin egestas. Suspendisse neque ipsum, faucibus eu hendrerit porttitor, tincidunt a tortor. Aliquam at facilisis diam, a ullamcorper lacus. Suspendisse pharetra faucibus venenatis. Donec efficitur condimentum neque ut vehicula." />
<Squash client:only="svelte" {graphics} backgroundWidth="normal" /> <Squash client:only="svelte" {graphics} backgroundWidth="normal" />

22
src/pages/test.astro Normal file
View file

@ -0,0 +1,22 @@
---
import Layout from '../layouts/Layout.astro';
import Article from '@components/Article/Article.svelte';
import BodyText from '@components/BodyText/BodyText.svelte';
import Headline from '@components/Headline/Headline.svelte';
---
<Layout>
<Headline
hed={'Unfriendly skies'}
/>
<Article>
<BodyText text="Cras eu consectetur justo, eu luctus felis. Suspendisse lectus enim, bibendum vitae euismod et, condimentum quis tortor. Donec sit amet orci nibh. Vivamus facilisis nunc quis nunc feugiat placerat. Nunc ut augue vitae metus fermentum venenatis vel at dui. Nulla aliquet nibh porttitor odio imperdiet, in ullamcorper augue bibendum. Cras ornare nunc ut sollicitudin egestas. Suspendisse neque ipsum, faucibus eu hendrerit porttitor, tincidunt a tortor. Aliquam at facilisis diam, a ullamcorper lacus. Suspendisse pharetra faucibus venenatis. Donec efficitur condimentum neque ut vehicula." />
<BodyText text="Sed feugiat, lacus id elementum tristique, urna elit consectetur mauris, in commodo ipsum neque sed turpis. Ut elit ex, pharetra laoreet leo vitae, rhoncus condimentum ligula. Morbi et sagittis tellus. Proin sed felis euismod ipsum lacinia feugiat. Donec finibus pretium dignissim. Integer ornare egestas scelerisque. Donec purus elit, viverra vitae felis at, volutpat sollicitudin tellus. Vivamus fermentum dictum dapibus. Phasellus non ligula ac augue efficitur ultrices sit amet at quam. Fusce dapibus luctus ex, non semper massa commodo eget." />
</Article>
</Layout>