Skip to content

Commit

Permalink
Adds enableAnimations prop
Browse files Browse the repository at this point in the history
  • Loading branch information
TheSonOfThomp committed Apr 5, 2024
1 parent ca6801a commit b449747
Show file tree
Hide file tree
Showing 16 changed files with 139 additions and 40 deletions.
3 changes: 2 additions & 1 deletion packages/skeleton-loader/src/CardSkeleton/CardSkeleton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { CardSkeletonProps } from '.';

export function CardSkeleton({
darkMode: darkModeProp,
enableAnimations,
className,
...rest
}: CardSkeletonProps) {
Expand All @@ -22,7 +23,7 @@ export function CardSkeleton({
className={cx(rootStyles, className)}
aria-busy
>
<ParagraphSkeleton withHeader />
<ParagraphSkeleton withHeader enableAnimations={enableAnimations} />
</Card>
);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { DarkModeProps, HTMLElementProps } from '@leafygreen-ui/lib';

import { SharedSkeletonProps } from '../Skeleton/Skeleton.types';

export interface CardSkeletonProps
extends HTMLElementProps<'div'>,
extends SharedSkeletonProps,
HTMLElementProps<'div'>,
DarkModeProps {}
19 changes: 16 additions & 3 deletions packages/skeleton-loader/src/CodeSkeleton/CodeSkeleton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,29 @@ import { CodeSkeletonProps } from '.';

export function CodeSkeleton({
darkMode: darkModeProp,
enableAnimations,
className,
...rest
}: CodeSkeletonProps) {
const { darkMode } = useDarkMode(darkModeProp);
return (
<LeafyGreenProvider darkMode={darkMode}>
<div {...rest} className={cx(rootStyles, className)} aria-busy>
<Skeleton size="small" className={lineStyles} />
<Skeleton size="small" className={lineStyles} />
<Skeleton size="small" className={lineStyles} />
<Skeleton
enableAnimations={enableAnimations}
size="small"
className={lineStyles}
/>
<Skeleton
enableAnimations={enableAnimations}
size="small"
className={lineStyles}
/>
<Skeleton
enableAnimations={enableAnimations}
size="small"
className={lineStyles}
/>
</div>
</LeafyGreenProvider>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { DarkModeProps, HTMLElementProps } from '@leafygreen-ui/lib';

import { SharedSkeletonProps } from '../Skeleton/Skeleton.types';

export interface CodeSkeletonProps
extends DarkModeProps,
extends SharedSkeletonProps,
DarkModeProps,
HTMLElementProps<'div'> {}
17 changes: 12 additions & 5 deletions packages/skeleton-loader/src/FormSkeleton/FormSkeleton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,25 @@ import { FormSkeletonProps } from '.';

export function FormSkeleton({
darkMode: darkModeProp,
enableAnimations,
className,
...rest
}: FormSkeletonProps) {
const { darkMode } = useDarkMode(darkModeProp);
return (
<LeafyGreenProvider darkMode={darkMode}>
<div className={cx(baseStyles, className)} {...rest} aria-busy>
<Skeleton className={fullWidthStyles} />
<Skeleton />
<Skeleton />
<Skeleton className={fullWidthStyles} />
<Skeleton />
<Skeleton
className={fullWidthStyles}
enableAnimations={enableAnimations}
/>
<Skeleton enableAnimations={enableAnimations} />
<Skeleton enableAnimations={enableAnimations} />
<Skeleton
className={fullWidthStyles}
enableAnimations={enableAnimations}
/>
<Skeleton enableAnimations={enableAnimations} />
</div>
</LeafyGreenProvider>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { DarkModeProps, HTMLElementProps } from '@leafygreen-ui/lib';

import { SharedSkeletonProps } from '../Skeleton/Skeleton.types';

export interface FormSkeletonProps
extends DarkModeProps,
extends SharedSkeletonProps,
DarkModeProps,
HTMLElementProps<'div'> {}
17 changes: 12 additions & 5 deletions packages/skeleton-loader/src/ListSkeleton/ListSkeleton.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import React from 'react';
import range from 'lodash/range';

import LeafyGreenProvider from '@leafygreen-ui/leafygreen-provider';
import { Skeleton } from '@leafygreen-ui/skeleton-loader';
import LeafyGreenProvider, {
useDarkMode,
} from '@leafygreen-ui/leafygreen-provider';

import { Skeleton } from '../Skeleton';

import {
getSkeletonListItemStyles,
Expand All @@ -11,17 +14,21 @@ import {
import { ListSkeletonProps } from './ListSkeleton.types';

export function ListSkeleton({
darkMode: darkModeProp,
enableAnimations,
count = 5,
bulletsOnly,
darkMode,
...rest
}: ListSkeletonProps) {
const { darkMode } = useDarkMode(darkModeProp);

return (
<LeafyGreenProvider darkMode={darkMode}>
<ul
className={skeletonListWrapperStyles}
data-testid="lg-skeleton-list"
aria-busy="true"
aria-busy
data-animate={enableAnimations}
{...rest}
>
{range(count).map(i => (
Expand All @@ -31,7 +38,7 @@ export function ListSkeleton({
className={getSkeletonListItemStyles(i, bulletsOnly)}
data-testid="lg-skeleton-list_item"
>
<Skeleton size="small" />
<Skeleton enableAnimations={enableAnimations} size="small" />
</li>
))}
</ul>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { DarkModeProps, HTMLElementProps } from '@leafygreen-ui/lib';

import { SharedSkeletonProps } from '../Skeleton/Skeleton.types';

export interface ListSkeletonProps
extends DarkModeProps,
extends SharedSkeletonProps,
DarkModeProps,
HTMLElementProps<'ul'> {
count?: number;
bulletsOnly?: boolean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ import {
import { ParagraphSkeletonProps } from '.';

export function ParagraphSkeleton({
withHeader = false,
darkMode: darkModeProp,
enableAnimations,
withHeader = false,
className,
...rest
}: ParagraphSkeletonProps) {
Expand All @@ -27,13 +28,26 @@ export function ParagraphSkeleton({
<div {...rest} className={cx(rootStyles, className)} aria-busy>
{withHeader && (
<Skeleton
enableAnimations={enableAnimations}
className={headerStyles}
data-testid="lg-paragraph-skeleton-header"
/>
)}
<Skeleton size="small" className={lineStyles} />
<Skeleton size="small" className={lineStyles} />
<Skeleton size="small" className={lastLineStyles} />
<Skeleton
enableAnimations={enableAnimations}
size="small"
className={lineStyles}
/>
<Skeleton
enableAnimations={enableAnimations}
size="small"
className={lineStyles}
/>
<Skeleton
enableAnimations={enableAnimations}
size="small"
className={lastLineStyles}
/>
</div>
</LeafyGreenProvider>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { DarkModeProps, HTMLElementProps } from '@leafygreen-ui/lib';

import { SharedSkeletonProps } from '../Skeleton/Skeleton.types';

export interface ParagraphSkeletonProps
extends DarkModeProps,
extends SharedSkeletonProps,
DarkModeProps,
HTMLElementProps<'div'> {
/**
* Determines whether the header skeleton should be rendered
Expand Down
35 changes: 25 additions & 10 deletions packages/skeleton-loader/src/Skeleton/Skeleton.styles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,42 @@ import { spacing } from '@leafygreen-ui/tokens';

import { Size } from './Skeleton.types';

export const rootStyles = css`
interface SkeletonStyleArgs {
enableAnimations: boolean;
}
export const getSkeletonBaseStyles = ({
enableAnimations,
}: SkeletonStyleArgs) => css`
width: 100%;
border-radius: 6px;
animation: bgslide 1.5s infinite linear;
border-radius: ${spacing[150]}px;
background-position: 50vw 0;
@keyframes bgslide {
to {
background-position: 100vw 0;
${enableAnimations &&
css`
animation: SkeletonShimmer 1.5s infinite linear;
@keyframes SkeletonShimmer {
to {
background-position: 100vw 0;
}
}
}
`}
`;

export const rootStyles = css`
width: 100%;
border-radius: 6px;
`;

export const sizeStyles: Record<Size, string> = {
[Size.Small]: css`
height: ${spacing[3]}px;
height: ${spacing[400]}px;
`,
[Size.Default]: css`
height: ${spacing[5]}px;
height: ${spacing[800]}px;
`,
[Size.Large]: css`
height: ${spacing[5] + spacing[3]}px;
height: ${spacing[1200]}px;
`,
};

Expand Down
9 changes: 7 additions & 2 deletions packages/skeleton-loader/src/Skeleton/Skeleton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,16 @@ import React from 'react';
import { cx } from '@leafygreen-ui/emotion';
import { useDarkMode } from '@leafygreen-ui/leafygreen-provider';

import { rootStyles, sizeStyles, themeStyles } from './Skeleton.styles';
import {
getSkeletonBaseStyles,
sizeStyles,
themeStyles,
} from './Skeleton.styles';
import { Size } from './Skeleton.types';
import { SkeletonProps } from '.';

export function Skeleton({
enableAnimations = true,
size = Size.Default,
darkMode,
className,
Expand All @@ -17,7 +22,7 @@ export function Skeleton({
return (
<div
className={cx(
rootStyles,
getSkeletonBaseStyles({ enableAnimations }),
sizeStyles[size],
themeStyles[theme],
className,
Expand Down
14 changes: 13 additions & 1 deletion packages/skeleton-loader/src/Skeleton/Skeleton.types.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,18 @@
import { DarkModeProps, HTMLElementProps } from '@leafygreen-ui/lib';

export interface SkeletonProps extends DarkModeProps, HTMLElementProps<'div'> {
export interface SharedSkeletonProps {
/**
* Defines whether the loading "shimmer" animation renders
*
* @default true
*/
enableAnimations?: boolean;
}

export interface SkeletonProps
extends SharedSkeletonProps,
DarkModeProps,
HTMLElementProps<'div'> {
/**
* Determines the height of the skeleton
* @default "default"
Expand Down
9 changes: 7 additions & 2 deletions packages/skeleton-loader/src/SkeletonLoader.story.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { css } from '@leafygreen-ui/emotion';
import { spacing } from '@leafygreen-ui/tokens';
import { Body, InlineCode } from '@leafygreen-ui/typography';

import { SharedSkeletonProps } from './Skeleton/Skeleton.types';
import {
CardSkeleton,
CodeSkeleton,
Expand All @@ -20,6 +21,10 @@ export default {
title: 'Components/SkeletonLoader',
argTypes: {
darkMode: storybookArgTypes.darkMode,
enableAnimations: { control: 'boolean' },
},
args: {
enableAnimations: true,
},
parameters: {
default: 'LiveExample',
Expand Down Expand Up @@ -56,11 +61,11 @@ const skeletonComponents = {
TableSkeleton,
};

export const LiveExample: StoryFn<any> = () => (
export const LiveExample: StoryFn<any> = (args: SharedSkeletonProps) => (
<div className={storyRootStyles}>
{Object.entries(skeletonComponents).map(([name, SkeletonVariant]) => (
<div key={name} className={displayOptionContainerStyles}>
<SkeletonVariant />
<SkeletonVariant {...args} />
<Body className={labelStyles} weight="medium">
<InlineCode>{name}</InlineCode>
</Body>
Expand Down
4 changes: 3 additions & 1 deletion packages/skeleton-loader/src/TableSkeleton/TableSkeleton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { TableSkeletonProps } from '.';
export function TableSkeleton({
darkMode: darkModeProp,
baseFontSize: baseFontSizeProp = BaseFontSize.Body1,
enableAnimations,
numRows = 5,
numCols = 4,
columnLabels,
Expand All @@ -45,7 +46,7 @@ export function TableSkeleton({
{columnLabels[i]}
</Body>
) : (
<Skeleton size="small" />
<Skeleton enableAnimations={enableAnimations} size="small" />
)}
</th>
))}
Expand All @@ -57,6 +58,7 @@ export function TableSkeleton({
{[...Array(numCols)].map((_, j) => (
<td key={j} className={cellStyles}>
<Skeleton
enableAnimations={enableAnimations}
size="small"
className={cx({ [firstRowStyles]: i === 0 })}
/>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import { DarkModeProps, HTMLElementProps } from '@leafygreen-ui/lib';
import { BaseFontSize } from '@leafygreen-ui/tokens';

import { SharedSkeletonProps } from '../Skeleton/Skeleton.types';

export interface TableSkeletonProps
extends DarkModeProps,
extends SharedSkeletonProps,
DarkModeProps,
HTMLElementProps<'table'> {
/**
* Base font size
Expand Down

0 comments on commit b449747

Please sign in to comment.