Skip to content

Commit 20cc30d

Browse files
eirikbackerBarsnes
andauthored
fix(Skeleton): text firefox (#2600)
- Fixes https://designsystemet.slack.com/archives/C05U1MNKYCX/p1728551307551839?thread_ts=1728548967.262829&cid=C05U1MNKYCX --------- Co-authored-by: Tobias Barsnes <tobias.barsnes@digdir.no>
1 parent 0efd598 commit 20cc30d

File tree

4 files changed

+21
-41
lines changed

4 files changed

+21
-41
lines changed

packages/css/skeleton.css

+7
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,16 @@
2121
&[data-variant='text'] {
2222
border-radius: var(--ds-border-radius-full);
2323
box-decoration-break: clone;
24+
color: transparent;
2425
display: inline;
2526
font-size: 0.8em; /* Scale down font to have larger gap between lines */
2627
letter-spacing: 0.1em; /* But scale up letter-spacing to have circa same line-length */
28+
user-select: none; /* Prevent text selection */
29+
30+
&:empty::before {
31+
content: attr(data-text); /* Only fill with fallback text if empty */
32+
word-break: break-word; /* Enable text wrapping */
33+
}
2734
}
2835

2936
/* When having children, let them define size */

packages/react/src/components/loaders/Skeleton/Skeleton.mdx

+1-5
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,6 @@ Du kan bygge opp komponenter og seksjoner av siden din ved å bruke disse som by
2525
Alle varianter av skeleton har `height` og `width` props, som kan brukes til å manuelt sette størrelser. Du kan oppgi størrelsene i `px`, `%`, eller andre enheter som kan settes direkte på style.
2626
For `Skeleton variant="text"` holder det ofte å sette kun `width` til det antallet bokstaver du antar vil oppstå, da høyden automatisk skaleres etter tekstinnholdet.
2727

28-
I de fleste tilfeller er manuell setting av høyde og bredde nok, men du kan også sette andre elementer til å rendres som skeleton, gjennom å bruke propen `asChild`. Dette er hovedsaklig tenkt brukt for typografi komponenter.
29-
30-
<Canvas of={SkeletonStories.As} />
31-
3228
Skeleton vil også tilpasse seg etter `children` som du sender inn til komponenten, men dette vil resultere i en høyde og bredde som matcher summen av samtlige barn.
3329

3430
<Canvas of={SkeletonStories.Children} />
@@ -38,4 +34,4 @@ Skeleton vil også tilpasse seg etter `children` som du sender inn til komponent
3834
`Skeleton variant="text"` skalerer automatisk etter den lokale fontstørrelsen, enten den kommer fra `parent`, `children` , eller fordi typografi-komponenter er satt til Skeletons gjennom `asChild`-propen.
3935
For best mulig resultat anbefaler vi at du bruker flere `Skeleton variant="text"` med `width` til det antallet bokstaver du antar vil oppstå.
4036

41-
<Canvas of={SkeletonStories.TextExample} />
37+
<Canvas of={SkeletonStories.Text} />

packages/react/src/components/loaders/Skeleton/Skeleton.stories.tsx

+11-31
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ export default {
2121

2222
export const Preview: Story = {
2323
args: {
24-
width: '200px',
25-
height: '100px',
24+
width: 200,
25+
height: 100,
2626
},
2727
};
2828

@@ -37,7 +37,9 @@ export const Components: StoryFn<typeof Text> = () => {
3737
>
3838
<Skeleton variant='circle' width='50px' height='50px' />
3939
<Skeleton variant='rectangle' width='100px' height='50px' />
40-
<Skeleton variant='text' width='10' />
40+
<Paragraph>
41+
<Skeleton variant='text' width='10' />
42+
</Paragraph>
4143
</div>
4244
);
4345
};
@@ -46,7 +48,7 @@ export const UsageExample: StoryFn<typeof Skeleton> = () => {
4648
return (
4749
<div
4850
style={{
49-
width: '400px',
51+
maxWidth: 400,
5052
}}
5153
>
5254
<Skeleton height='150px' />
@@ -82,39 +84,17 @@ export const Children: StoryFn<typeof Skeleton> = () => {
8284
);
8385
};
8486

85-
export const As: StoryFn<typeof Skeleton> = () => {
86-
return (
87-
<>
88-
<Heading size='lg'>
89-
<Skeleton variant='text'>Her er en heading</Skeleton>
90-
</Heading>
91-
<Paragraph>
92-
<Skeleton variant='text'>
93-
Her er en paragraf-komponent som blir rendret som en Skeleton
94-
variant="text".
95-
</Skeleton>
96-
</Paragraph>
97-
<Paragraph>
98-
<Skeleton variant='text'>
99-
Se hvordan Skeleton da overskriver stylingen til det enkelte
100-
elementet.
101-
</Skeleton>
102-
</Paragraph>
103-
</>
104-
);
105-
};
106-
107-
export const TextExample: StoryFn<typeof Text> = () => (
87+
export const Text: StoryFn<typeof Skeleton> = () => (
10888
<div style={{ display: 'flex', gap: '20px', maxWidth: 300 }}>
109-
<div>
110-
<Heading size='md'>Heading</Heading>
89+
<div style={{ flex: '1 1 200px' }}>
90+
<Heading size='md'>En tittel</Heading>
11191
<Paragraph size='sm'>
11292
Her er en paragraf som går over flere linjer
11393
</Paragraph>
11494
</div>
115-
<div>
95+
<div style={{ flex: '1 1 200px' }}>
11696
<Heading size='md'>
117-
<Skeleton variant='text'>Heading</Skeleton>
97+
<Skeleton variant='text'>En tittel</Skeleton>
11898
</Heading>
11999
<Paragraph size='sm'>
120100
<Skeleton variant='text' width={40} />

packages/react/src/components/loaders/Skeleton/Skeleton.tsx

+2-5
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ export const Skeleton = forwardRef<HTMLSpanElement, SkeletonProps>(
3131
{
3232
asChild,
3333
className,
34-
children,
3534
height,
3635
style,
3736
variant = 'rectangle',
@@ -42,7 +41,6 @@ export const Skeleton = forwardRef<HTMLSpanElement, SkeletonProps>(
4241
) {
4342
const Component = asChild ? Slot : 'span';
4443
const isText = variant === 'text';
45-
const childrenText = isText && '-'.repeat(Number(width) || 1); // s followed by a &shy; makes the most average character length
4644
const animationRef = useSynchronizedAnimation<HTMLSpanElement>(
4745
'ds-skeleton-opacity-fade',
4846
);
@@ -52,13 +50,12 @@ export const Skeleton = forwardRef<HTMLSpanElement, SkeletonProps>(
5250
<Component
5351
aria-hidden='true'
5452
className={cl('ds-skeleton', className)}
53+
data-text={isText ? '-'.repeat(Number(width) || 1) : undefined}
5554
data-variant={variant}
5655
ref={mergedRefs}
5756
style={isText ? style : { width, height, ...style }}
5857
{...rest}
59-
>
60-
{children || childrenText}
61-
</Component>
58+
/>
6259
);
6360
},
6461
);

0 commit comments

Comments
 (0)