@arbor-education/design-system.components 0.25.3 → 0.25.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gather/skills/write-stories/README.md +1 -1
- package/.gather/skills/write-stories/SKILL.md +1 -1
- package/.gather/skills/write-stories/meta.md +1 -1
- package/CHANGELOG.md +16 -0
- package/component-library.md +26 -1
- package/dist/components/breadcrumbs/BreadcrumbCopyButton.d.ts +3 -0
- package/dist/components/breadcrumbs/BreadcrumbCopyButton.d.ts.map +1 -0
- package/dist/components/breadcrumbs/BreadcrumbCopyButton.js +13 -0
- package/dist/components/breadcrumbs/BreadcrumbCopyButton.js.map +1 -0
- package/dist/components/breadcrumbs/BreadcrumbDropdown.d.ts +3 -0
- package/dist/components/breadcrumbs/BreadcrumbDropdown.d.ts.map +1 -0
- package/dist/components/breadcrumbs/BreadcrumbDropdown.js +8 -0
- package/dist/components/breadcrumbs/BreadcrumbDropdown.js.map +1 -0
- package/dist/components/breadcrumbs/BreadcrumbEllipsis.d.ts +3 -0
- package/dist/components/breadcrumbs/BreadcrumbEllipsis.d.ts.map +1 -0
- package/dist/components/breadcrumbs/BreadcrumbEllipsis.js +7 -0
- package/dist/components/breadcrumbs/BreadcrumbEllipsis.js.map +1 -0
- package/dist/components/breadcrumbs/BreadcrumbItemSeparator.d.ts +2 -0
- package/dist/components/breadcrumbs/BreadcrumbItemSeparator.d.ts.map +1 -0
- package/dist/components/breadcrumbs/BreadcrumbItemSeparator.js +5 -0
- package/dist/components/breadcrumbs/BreadcrumbItemSeparator.js.map +1 -0
- package/dist/components/breadcrumbs/BreadcrumbLink.d.ts +6 -0
- package/dist/components/breadcrumbs/BreadcrumbLink.d.ts.map +1 -0
- package/dist/components/breadcrumbs/BreadcrumbLink.js +9 -0
- package/dist/components/breadcrumbs/BreadcrumbLink.js.map +1 -0
- package/dist/components/breadcrumbs/Breadcrumbs.d.ts +21 -0
- package/dist/components/breadcrumbs/Breadcrumbs.d.ts.map +1 -0
- package/dist/components/breadcrumbs/Breadcrumbs.js +51 -0
- package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -0
- package/dist/components/breadcrumbs/Breadcrumbs.stories.d.ts +81 -0
- package/dist/components/breadcrumbs/Breadcrumbs.stories.d.ts.map +1 -0
- package/dist/components/breadcrumbs/Breadcrumbs.stories.js +681 -0
- package/dist/components/breadcrumbs/Breadcrumbs.stories.js.map +1 -0
- package/dist/components/breadcrumbs/Breadcrumbs.test.d.ts +2 -0
- package/dist/components/breadcrumbs/Breadcrumbs.test.d.ts.map +1 -0
- package/dist/components/breadcrumbs/Breadcrumbs.test.js +160 -0
- package/dist/components/breadcrumbs/Breadcrumbs.test.js.map +1 -0
- package/dist/components/breadcrumbs/types.d.ts +27 -0
- package/dist/components/breadcrumbs/types.d.ts.map +1 -0
- package/dist/components/breadcrumbs/types.js +2 -0
- package/dist/components/breadcrumbs/types.js.map +1 -0
- package/dist/components/fileUpload/FileUpload.d.ts +21 -0
- package/dist/components/fileUpload/FileUpload.d.ts.map +1 -0
- package/dist/components/fileUpload/FileUpload.js +23 -0
- package/dist/components/fileUpload/FileUpload.js.map +1 -0
- package/dist/components/fileUpload/FileUpload.stories.d.ts +71 -0
- package/dist/components/fileUpload/FileUpload.stories.d.ts.map +1 -0
- package/dist/components/fileUpload/FileUpload.stories.js +736 -0
- package/dist/components/fileUpload/FileUpload.stories.js.map +1 -0
- package/dist/components/fileUpload/FileUpload.test.d.ts +2 -0
- package/dist/components/fileUpload/FileUpload.test.d.ts.map +1 -0
- package/dist/components/fileUpload/FileUpload.test.js +99 -0
- package/dist/components/fileUpload/FileUpload.test.js.map +1 -0
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.js +1 -1
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.js.map +1 -1
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.d.ts.map +1 -1
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.js +14 -15
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.js.map +1 -1
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.test.js +11 -0
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.test.js.map +1 -1
- package/dist/components/icon/allowedIcons.d.ts +1 -0
- package/dist/components/icon/allowedIcons.d.ts.map +1 -1
- package/dist/components/icon/allowedIcons.js +2 -1
- package/dist/components/icon/allowedIcons.js.map +1 -1
- package/dist/components/skeleton/Skeleton.d.ts +10 -0
- package/dist/components/skeleton/Skeleton.d.ts.map +1 -0
- package/dist/components/skeleton/Skeleton.js +9 -0
- package/dist/components/skeleton/Skeleton.js.map +1 -0
- package/dist/components/skeleton/Skeleton.stories.d.ts +99 -0
- package/dist/components/skeleton/Skeleton.stories.d.ts.map +1 -0
- package/dist/components/skeleton/Skeleton.stories.js +539 -0
- package/dist/components/skeleton/Skeleton.stories.js.map +1 -0
- package/dist/components/skeleton/Skeleton.test.d.ts +2 -0
- package/dist/components/skeleton/Skeleton.test.d.ts.map +1 -0
- package/dist/components/skeleton/Skeleton.test.js +49 -0
- package/dist/components/skeleton/Skeleton.test.js.map +1 -0
- package/dist/index.css +225 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
- package/src/components/breadcrumbs/BreadcrumbCopyButton.tsx +27 -0
- package/src/components/breadcrumbs/BreadcrumbDropdown.tsx +27 -0
- package/src/components/breadcrumbs/BreadcrumbEllipsis.tsx +16 -0
- package/src/components/breadcrumbs/BreadcrumbItemSeparator.tsx +3 -0
- package/src/components/breadcrumbs/BreadcrumbLink.tsx +29 -0
- package/src/components/breadcrumbs/Breadcrumbs.stories.tsx +870 -0
- package/src/components/breadcrumbs/Breadcrumbs.test.tsx +185 -0
- package/src/components/breadcrumbs/Breadcrumbs.tsx +92 -0
- package/src/components/breadcrumbs/breadcrumbs.scss +158 -0
- package/src/components/breadcrumbs/types.ts +31 -0
- package/src/components/button/button.scss +2 -0
- package/src/components/dropdown/dropdown.scss +1 -0
- package/src/components/fileUpload/FileUpload.stories.tsx +920 -0
- package/src/components/fileUpload/FileUpload.test.tsx +172 -0
- package/src/components/fileUpload/FileUpload.tsx +144 -0
- package/src/components/fileUpload/fileUpload.scss +74 -0
- package/src/components/formField/inputs/selectDropdown/SelectDropdown.stories.tsx +15 -16
- package/src/components/formField/inputs/selectDropdown/SelectDropdown.test.tsx +19 -0
- package/src/components/formField/inputs/selectDropdown/SelectDropdown.tsx +1 -1
- package/src/components/icon/allowedIcons.tsx +2 -0
- package/src/components/progress/progress.scss +1 -0
- package/src/components/skeleton/Skeleton.stories.tsx +748 -0
- package/src/components/skeleton/Skeleton.test.tsx +55 -0
- package/src/components/skeleton/Skeleton.tsx +36 -0
- package/src/components/skeleton/skeleton.scss +23 -0
- package/src/index.scss +3 -0
- package/src/index.ts +3 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { render, screen } from '@testing-library/react';
|
|
2
|
+
import '@testing-library/jest-dom/vitest';
|
|
3
|
+
import { describe, expect, test } from 'vitest';
|
|
4
|
+
import { Skeleton } from './Skeleton.js';
|
|
5
|
+
|
|
6
|
+
describe('Skeleton', () => {
|
|
7
|
+
test('renders a skeleton placeholder by default', () => {
|
|
8
|
+
const { container } = render(<Skeleton />);
|
|
9
|
+
const el = container.firstChild as HTMLElement;
|
|
10
|
+
expect(el.tagName).toBe('SPAN');
|
|
11
|
+
expect(el).toHaveClass('ds-skeleton');
|
|
12
|
+
expect(el).toHaveAttribute('aria-hidden', 'true');
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test('renders children inside aria-hidden container while loading', () => {
|
|
16
|
+
const { container } = render(<Skeleton loading={true}>Loaded content</Skeleton>);
|
|
17
|
+
const skeleton = container.querySelector('.ds-skeleton') as HTMLElement;
|
|
18
|
+
expect(skeleton).toHaveAttribute('aria-hidden', 'true');
|
|
19
|
+
expect(skeleton).toHaveTextContent('Loaded content');
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test('renders children when not loading', () => {
|
|
23
|
+
render(<Skeleton loading={false}>Loaded content</Skeleton>);
|
|
24
|
+
expect(screen.getByText('Loaded content')).toBeInTheDocument();
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test('does not render skeleton element when not loading', () => {
|
|
28
|
+
const { container } = render(<Skeleton loading={false}>Loaded content</Skeleton>);
|
|
29
|
+
expect(container.querySelector('.ds-skeleton')).not.toBeInTheDocument();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test('applies width and height as inline styles', () => {
|
|
33
|
+
const { container } = render(<Skeleton width="200px" height="16px" />);
|
|
34
|
+
const el = container.firstChild as HTMLElement;
|
|
35
|
+
expect(el).toHaveStyle({ width: '200px', height: '16px' });
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('merges additional style with width and height', () => {
|
|
39
|
+
const { container } = render(<Skeleton width="100px" height="100px" style={{ borderRadius: '50%' }} />);
|
|
40
|
+
const el = container.firstChild as HTMLElement;
|
|
41
|
+
expect(el).toHaveStyle({ width: '100px', height: '100px', borderRadius: '50%' });
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
test('applies additional className', () => {
|
|
45
|
+
const { container } = render(<Skeleton className="custom-class" />);
|
|
46
|
+
const el = container.firstChild as HTMLElement;
|
|
47
|
+
expect(el).toHaveClass('ds-skeleton', 'custom-class');
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test('passes through additional HTML attributes', () => {
|
|
51
|
+
const { container } = render(<Skeleton data-testid="my-skeleton" />);
|
|
52
|
+
const el = container.firstChild as HTMLElement;
|
|
53
|
+
expect(el).toHaveAttribute('data-testid', 'my-skeleton');
|
|
54
|
+
});
|
|
55
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import classNames from 'classnames';
|
|
2
|
+
|
|
3
|
+
export type SkeletonProps = React.HTMLAttributes<HTMLSpanElement> & {
|
|
4
|
+
loading?: boolean;
|
|
5
|
+
width?: string | number;
|
|
6
|
+
height?: string | number;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export const Skeleton = ({
|
|
10
|
+
loading = true,
|
|
11
|
+
width,
|
|
12
|
+
height,
|
|
13
|
+
className,
|
|
14
|
+
style,
|
|
15
|
+
children,
|
|
16
|
+
...props
|
|
17
|
+
}: SkeletonProps): React.JSX.Element => {
|
|
18
|
+
if (!loading) {
|
|
19
|
+
return <>{children}</>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<span
|
|
24
|
+
{...props}
|
|
25
|
+
aria-hidden="true"
|
|
26
|
+
className={classNames('ds-skeleton', className)}
|
|
27
|
+
style={{ width, height, ...style }}
|
|
28
|
+
>
|
|
29
|
+
{children}
|
|
30
|
+
</span>
|
|
31
|
+
);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export namespace Skeleton {
|
|
35
|
+
export type Props = SkeletonProps;
|
|
36
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
@keyframes ds-skeleton-shimmer {
|
|
2
|
+
from {
|
|
3
|
+
background-color: var(--color-grey-100);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
to {
|
|
7
|
+
background-color: var(--color-grey-200);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.ds-skeleton {
|
|
12
|
+
display: inline-block;
|
|
13
|
+
border-radius: var(--border-radius-xsmall);
|
|
14
|
+
background-color: var(--color-grey-200);
|
|
15
|
+
animation: 1s infinite alternate-reverse ds-skeleton-shimmer;
|
|
16
|
+
color: transparent;
|
|
17
|
+
pointer-events: none;
|
|
18
|
+
user-select: none;
|
|
19
|
+
|
|
20
|
+
> * {
|
|
21
|
+
visibility: hidden;
|
|
22
|
+
}
|
|
23
|
+
}
|
package/src/index.scss
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
@use "../node_modules/react-day-picker/src/style.css";
|
|
2
2
|
@use "./tokens.scss";
|
|
3
3
|
@use "./global.scss";
|
|
4
|
+
@use "components/breadcrumbs/breadcrumbs.scss";
|
|
4
5
|
@use "components/button/button.scss";
|
|
5
6
|
@use "components/icon/icon.scss";
|
|
6
7
|
@use "components/iconText/iconText.scss";
|
|
@@ -57,6 +58,8 @@
|
|
|
57
58
|
@use "components/dataViewCard/dataViewCard.scss";
|
|
58
59
|
@use "components/treeRow/treeRow.scss";
|
|
59
60
|
@use "components/sidebarNav/sidebarNav.scss";
|
|
61
|
+
@use "components/fileUpload/fileUpload.scss";
|
|
62
|
+
@use "components/skeleton/skeleton.scss";
|
|
60
63
|
|
|
61
64
|
// stylelint-disable-next-line at-rule-disallowed-list -- plain CSS import (font face), exempt from Sass @import deprecation
|
|
62
65
|
@import "https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap";
|
package/src/index.ts
CHANGED
|
@@ -3,6 +3,7 @@ export { Avatar } from 'Components/avatar/Avatar';
|
|
|
3
3
|
export { AvatarGroup } from 'Components/avatarGroup/AvatarGroup';
|
|
4
4
|
export { Badge } from 'Components/badge/Badge';
|
|
5
5
|
export { Banner } from 'Components/banner/Banner';
|
|
6
|
+
export { Breadcrumbs } from 'Components/breadcrumbs/Breadcrumbs';
|
|
6
7
|
export { Button } from 'Components/button/Button';
|
|
7
8
|
export { Card, type CardProps } from 'Components/card/Card';
|
|
8
9
|
export { Combobox } from 'Components/combobox/Combobox';
|
|
@@ -30,6 +31,7 @@ export { NumberInput } from 'Components/formField/inputs/number/NumberInput';
|
|
|
30
31
|
export { RadioButtonGroup } from 'Components/formField/inputs/radio/RadioButtonGroup';
|
|
31
32
|
export { RadioButtonInput } from 'Components/formField/inputs/radio/RadioButtonInput';
|
|
32
33
|
export { SelectDropdown } from 'Components/formField/inputs/selectDropdown/SelectDropdown';
|
|
34
|
+
export { Skeleton } from 'Components/skeleton/Skeleton';
|
|
33
35
|
export { TextInput } from 'Components/formField/inputs/text/TextInput';
|
|
34
36
|
export { TextArea } from 'Components/formField/inputs/textArea/TextArea';
|
|
35
37
|
export { TimeInput } from 'Components/formField/inputs/time/TimeInput';
|
|
@@ -86,3 +88,4 @@ export { PopupParentContext } from 'Utils/popupParent/PopupParentContext';
|
|
|
86
88
|
export { SlideoverUtils } from 'Utils/SlideoverUtils';
|
|
87
89
|
export { ArborLogo, type ArborLogoProps } from 'Components/arborLogo/ArborLogo';
|
|
88
90
|
export { DataViewCard, type DataViewCardProps } from 'Components/dataViewCard/DataViewCard';
|
|
91
|
+
export { FileUpload, type FileUploadProps } from 'Components/fileUpload/FileUpload';
|