@bitrise/bitkit 9.40.2-alpha-react18.1 → 9.41.0-alpha-chakra.1

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bitrise/bitkit",
3
3
  "description": "Bitrise React component library",
4
- "version": "9.40.2-alpha-react18.1",
4
+ "version": "9.41.0-alpha-chakra.1",
5
5
  "repository": "git@github.com:bitrise-io/bitkit.git",
6
6
  "main": "src/index.ts",
7
7
  "license": "UNLICENSED",
@@ -33,28 +33,30 @@
33
33
  "framer-motion": "./node_modules/framer-motion/dist/cjs"
34
34
  },
35
35
  "dependencies": {
36
- "@chakra-ui/react": "^2.2.1",
37
- "@emotion/react": "^11.9.3",
38
- "@emotion/styled": "^11.9.3",
36
+ "@chakra-ui/react": "^1.8.8",
37
+ "@emotion/react": "^11.9.0",
38
+ "@emotion/styled": "^11.8.1",
39
39
  "@juggle/resize-observer": "^3.3.1",
40
40
  "@popperjs/core": "^2.11.5",
41
+ "@types/react-transition-group": "^4.4.4",
41
42
  "classnames": "^2.3.1",
42
43
  "clipboard": "^2.0.11",
43
- "framer-motion": "^6.3.15",
44
+ "framer-motion": "^6.3.4",
44
45
  "luxon": "^2.4.0",
45
- "react": "^18.2.0",
46
- "react-dom": "^18.2.0",
47
- "react-popper": "^2.3.0"
46
+ "react": "^17.0.2",
47
+ "react-dom": "^17.0.2",
48
+ "react-popper": "^2.3.0",
49
+ "react-transition-group": "^4.4.2"
48
50
  },
49
51
  "peerDependencies": {
50
- "react": "^18.2.0",
51
- "react-dom": "^18.2.0"
52
+ "react": "^17.0.2",
53
+ "react-dom": "^17.0.2"
52
54
  },
53
55
  "devDependencies": {
54
- "@babel/core": "^7.18.5",
55
- "@babel/parser": "^7.18.5",
56
- "@bitrise/eslint-plugin": "^2.2.0",
57
- "@chakra-ui/cli": "^2.1.0",
56
+ "@babel/core": "^7.18.2",
57
+ "@babel/parser": "^7.18.2",
58
+ "@bitrise/eslint-plugin": "2.2.0",
59
+ "@chakra-ui/cli": "^1.9.0",
58
60
  "@commitlint/cli": "^16.3.0",
59
61
  "@commitlint/config-conventional": "^16.2.4",
60
62
  "@google-cloud/storage": "^5.19.4",
@@ -82,30 +84,31 @@
82
84
  "@types/lodash.shuffle": "^4.2.7",
83
85
  "@types/luxon": "^2.3.2",
84
86
  "@types/prismjs": "^1.26.0",
85
- "@types/react": "18.0.14",
86
- "@types/react-dom": "^18.0.5",
87
+ "@types/react": "17.0.44",
88
+ "@types/react-dom": "^17.0.16",
87
89
  "@types/react-router": "^5.1.18",
88
90
  "@types/react-router-dom": "^5.3.3",
91
+ "@types/react-transition-group": "^4.4.4",
89
92
  "@types/vfile-message": "^2.0.0",
90
- "@typescript-eslint/eslint-plugin": "^5.29.0",
91
- "@typescript-eslint/parser": "^5.29.0",
93
+ "@typescript-eslint/eslint-plugin": "^5.26.0",
94
+ "@typescript-eslint/parser": "^5.26.0",
92
95
  "@wojtekmaj/enzyme-adapter-react-17": "^0.6.7",
93
96
  "axios": "^0.27.2",
94
97
  "babel-eslint": "^10.0.1",
95
98
  "babel-loader": "^8.2.5",
96
99
  "babel-plugin-polyfill-corejs2": "^0.3.1",
97
- "concurrently": "^7.2.2",
100
+ "concurrently": "^7.2.1",
98
101
  "enzyme": "^3.11.0",
99
102
  "enzyme-to-json": "^3.6.2",
100
- "esbuild": "^0.14.47",
101
- "eslint": "^8.18.0",
103
+ "esbuild": "^0.14.43",
104
+ "eslint": "^8.16.0",
102
105
  "eslint-plugin-import": "^2.26.0",
103
- "eslint-plugin-jest": "^26.5.3",
104
- "eslint-plugin-jsx-a11y": "^6.6.0",
105
- "eslint-plugin-prettier": "^4.1.0",
106
- "eslint-plugin-react": "^7.30.1",
107
- "eslint-plugin-react-hooks": "^4.6.0",
108
- "eslint-plugin-storybook": "^0.5.13",
106
+ "eslint-plugin-jest": "^26.4.5",
107
+ "eslint-plugin-jsx-a11y": "^6.5.1",
108
+ "eslint-plugin-prettier": "^4.0.0",
109
+ "eslint-plugin-react": "^7.30.0",
110
+ "eslint-plugin-react-hooks": "^4.5.0",
111
+ "eslint-plugin-storybook": "^0.5.12",
109
112
  "eslint-plugin-testing-library": "^5.5.1",
110
113
  "fscreen": "^1.2.0",
111
114
  "glob": "^8.0.3",
@@ -116,21 +119,21 @@
116
119
  "lodash.sample": "^4.2.1",
117
120
  "lodash.shuffle": "^4.2.0",
118
121
  "node-watch": "^0.7.3",
119
- "prettier": "^2.7.1",
122
+ "prettier": "^2.6.2",
120
123
  "prismjs": "^1.28.0",
121
- "react": "^18.2.0",
122
- "react-docgen": "5.4.2",
123
- "react-dom": "^18.2.0",
124
+ "react": "^17.0.2",
125
+ "react-docgen": "5.4.0",
126
+ "react-dom": "^17.0.2",
124
127
  "react-router": "^5.3.1",
125
128
  "react-router-dom": "^5.3.1",
126
129
  "recast": "^0.21.1",
127
- "semantic-release": "^19.0.3",
130
+ "semantic-release": "^19.0.2",
128
131
  "superstatic": "^8.0.0",
129
132
  "ts-jest": "^27.1.5",
130
- "ts-node": "^10.8.1",
133
+ "ts-node": "^10.8.0",
131
134
  "tsconfig-paths-webpack-plugin": "^3.5.2",
132
- "typescript": "^4.7.4",
133
- "webpack": "^5.73.0"
135
+ "typescript": "^4.6.4",
136
+ "webpack": "^5.72.1"
134
137
  },
135
138
  "files": [
136
139
  "src",
@@ -153,7 +156,7 @@
153
156
  },
154
157
  "resolutions": {
155
158
  "**/ast-types": "npm:@gkz/ast-types",
156
- "ts-node": "^10.8.1",
159
+ "ts-node": "^10.8.0",
157
160
  "@types/react": "17.0.40"
158
161
  }
159
162
  }
@@ -0,0 +1,30 @@
1
+ import { ComponentStory, ComponentMeta } from '@storybook/react';
2
+ import Breadcrumb from './Breadcrumb';
3
+ import BreadcrumbLink from './BreadcrumbLink';
4
+
5
+ export default {
6
+ title: 'Components/Breadcrumb',
7
+ component: Breadcrumb,
8
+ subcomponents: { BreadcrumbLink },
9
+ } as ComponentMeta<typeof Breadcrumb>;
10
+
11
+ const Template: ComponentStory<typeof Breadcrumb> = (props) => (
12
+ <Breadcrumb {...props}>
13
+ <BreadcrumbLink
14
+ avatarSrc="https://bitrise-public-content-production.s3.amazonaws.com/org-icons/default_avatar-02.png"
15
+ href="#"
16
+ >
17
+ Bitrise #Core
18
+ </BreadcrumbLink>
19
+ <BreadcrumbLink avatarName="Bitkit" href="#">
20
+ bitkit
21
+ </BreadcrumbLink>
22
+ <BreadcrumbLink isCurrentPage>settings</BreadcrumbLink>
23
+ </Breadcrumb>
24
+ );
25
+
26
+ export const WithProps = Template.bind({});
27
+ WithProps.args = {
28
+ hasSeparatorAfterLast: false,
29
+ hasSeparatorBeforeFirst: false,
30
+ };
@@ -0,0 +1,25 @@
1
+ import type { SystemStyleObject } from '@chakra-ui/theme-tools';
2
+
3
+ const BreadcrumbTheme: SystemStyleObject = {
4
+ baseStyle: {
5
+ container: {
6
+ '> ol': {
7
+ display: 'flex',
8
+ alignItems: 'center',
9
+ },
10
+ },
11
+ link: {
12
+ display: 'flex',
13
+ alignItems: 'center',
14
+ gap: '8',
15
+ '[aria-current]': {
16
+ color: 'red',
17
+ },
18
+ },
19
+ separator: {
20
+ display: 'flex',
21
+ },
22
+ },
23
+ };
24
+
25
+ export default BreadcrumbTheme;
@@ -0,0 +1,54 @@
1
+ import { Children } from 'react';
2
+ import {
3
+ Breadcrumb as ChakraBreadcrumb,
4
+ BreadcrumbProps as ChakraBreadcrumbProps,
5
+ BreadcrumbItem,
6
+ BreadcrumbSeparator,
7
+ forwardRef,
8
+ } from '@chakra-ui/react';
9
+ import Icon, { TypeIconName } from '../Icon/Icon';
10
+
11
+ export interface BreadcrumbProps extends ChakraBreadcrumbProps {
12
+ hasSeparatorAfterLast?: boolean;
13
+ hasSeparatorBeforeFirst?: boolean;
14
+ separatorIconName?: TypeIconName;
15
+ }
16
+
17
+ /**
18
+ * Breadcrumbs is a navigation pattern that helps users understand the hierarchy of a website.
19
+ */
20
+ const Breadcrumb = forwardRef<BreadcrumbProps, 'nav'>((props, ref) => {
21
+ const {
22
+ children,
23
+ hasSeparatorAfterLast,
24
+ hasSeparatorBeforeFirst,
25
+ separatorIconName = 'ChevronRight',
26
+ ...rest
27
+ } = props;
28
+ const childrenCount = Children.count(children);
29
+ const items = Children.map(children, (child, index) => {
30
+ return (
31
+ <BreadcrumbItem>
32
+ {hasSeparatorBeforeFirst && index === 0 && <BreadcrumbSeparator />}
33
+ {child}
34
+ {hasSeparatorAfterLast && index === childrenCount - 1 && <BreadcrumbSeparator />}
35
+ </BreadcrumbItem>
36
+ );
37
+ });
38
+
39
+ const properties = {
40
+ separator: <Icon name={separatorIconName} textColor="neutral.70" size="16" />,
41
+ ...rest,
42
+ };
43
+ return (
44
+ <ChakraBreadcrumb {...properties} ref={ref}>
45
+ {items}
46
+ </ChakraBreadcrumb>
47
+ );
48
+ });
49
+
50
+ Breadcrumb.defaultProps = {
51
+ separatorIconName: 'ChevronRight',
52
+ };
53
+
54
+ export default Breadcrumb;
@@ -0,0 +1,30 @@
1
+ import {
2
+ BreadcrumbLink as ChakraBreadcrumbLink,
3
+ BreadcrumbLinkProps as ChakraBreadcrumbLinkProps,
4
+ forwardRef,
5
+ } from '@chakra-ui/react';
6
+ import Avatar from '../Avatar/Avatar';
7
+
8
+ export interface BreadcrumbLinkProps extends ChakraBreadcrumbLinkProps {
9
+ avatarName?: string;
10
+ avatarSrc?: string;
11
+ }
12
+
13
+ const Breadcrumb = forwardRef<BreadcrumbLinkProps, 'a'>((props, ref) => {
14
+ const { avatarName, avatarSrc, children, isCurrentPage, ...rest } = props;
15
+ const properties: ChakraBreadcrumbLinkProps = {
16
+ color: isCurrentPage ? 'neutral.40' : 'inherit',
17
+ isCurrentPage,
18
+ ...rest,
19
+ };
20
+ return (
21
+ <ChakraBreadcrumbLink {...properties} color={isCurrentPage ? 'neutral.40' : 'inherit'} ref={ref}>
22
+ {(avatarName || avatarSrc) && (
23
+ <Avatar name={avatarName || children?.toString()} src={avatarSrc} borderRadius="4" />
24
+ )}
25
+ {children}
26
+ </ChakraBreadcrumbLink>
27
+ );
28
+ });
29
+
30
+ export default Breadcrumb;
@@ -7,7 +7,7 @@ export default {
7
7
  } as ComponentMeta<typeof ButtonGroup>;
8
8
 
9
9
  const Template: ComponentStory<typeof ButtonGroup> = (props) => (
10
- <ButtonGroup {...props} width="900px" flexDirection="row">
10
+ <ButtonGroup {...props} width="900px" flexDirection="column">
11
11
  <Button>Button 1</Button>
12
12
  <Button>Button 2</Button>
13
13
  <Button>Button 3</Button>
@@ -10,7 +10,7 @@ const EmptyStateTheme: ComponentStyleConfig = {
10
10
  justifyContent: 'center',
11
11
  paddingX: '16',
12
12
  paddingY: {
13
- base: '32',
13
+ mobile: '32',
14
14
  desktop: '48',
15
15
  },
16
16
  backgroundColor: 'neutral.95',
@@ -2,6 +2,6 @@ import { Menu as ChakraMenu, MenuProps as ChakraMenuProps } from '@chakra-ui/rea
2
2
 
3
3
  export type MenuProps = ChakraMenuProps;
4
4
 
5
- const Menu = (props: MenuProps) => <ChakraMenu {...props} />;
5
+ const Menu = (props: MenuProps) => <ChakraMenu matchWidth {...props} />;
6
6
 
7
7
  export default Menu;
@@ -1,5 +1,6 @@
1
+ import { FC } from 'react';
1
2
  import { PopoverTrigger as ChakraPopoverTrigger } from '@chakra-ui/react';
2
3
 
3
- const PopoverTrigger = (props: { children: React.ReactNode }) => <ChakraPopoverTrigger {...props} />;
4
+ const PopoverTrigger: FC = (props) => <ChakraPopoverTrigger {...props} />;
4
5
 
5
6
  export default PopoverTrigger;
@@ -1,13 +1,7 @@
1
- export const BREAKPOINTS = {
2
- MOBILE: 'base',
3
- DESKTOP: 'desktop',
4
- WIDE: 'wide',
5
- };
6
-
7
1
  const breakpoints = {
8
- [BREAKPOINTS.MOBILE]: '0rem',
9
- [BREAKPOINTS.DESKTOP]: '53rem', // 848px
10
- [BREAKPOINTS.WIDE]: '101rem', // 1616px
2
+ mobile: '0rem',
3
+ desktop: '53rem', // 848px
4
+ wide: '101rem', // 1616px
11
5
  };
12
6
 
13
7
  export default breakpoints;
@@ -0,0 +1,116 @@
1
+ .Appear {
2
+ animation-timing-function: var(--transition-timing-function);
3
+ }
4
+
5
+ .Appear--fast {
6
+ transition-duration: var(--transition-duration--fast);
7
+ animation-duration: var(--transition-duration--fast);
8
+ }
9
+
10
+ .Appear--base {
11
+ transition-duration: var(--transition-duration--base);
12
+ animation-duration: var(--transition-duration--base);
13
+ }
14
+
15
+ .Appear--slow {
16
+ transition-duration: var(--transition-duration--slow);
17
+ animation-duration: var(--transition-duration--slow);
18
+ }
19
+
20
+ .Appear--Fade {
21
+ opacity: 0;
22
+ transition-property: opacity;
23
+ }
24
+
25
+ .Appear--Fade-appear-active,
26
+ .Appear--Fade-appear-done,
27
+ .Appear--Fade-enter-active,
28
+ .Appear--Fade-enter-done,
29
+ .Appear--Fade-exit {
30
+ opacity: 1;
31
+ }
32
+
33
+ .Appear--Fade-appear,
34
+ .Appear--Fade-enter,
35
+ .Appear--Fade-exit-active,
36
+ .Appear--Fade-exit-done {
37
+ opacity: 0;
38
+ }
39
+
40
+ .Appear--FadeSlideDown,
41
+ .Appear--FadeSlideUp {
42
+ opacity: 0;
43
+ transition-property: transform, opacity;
44
+ }
45
+
46
+ .Appear--FadeSlideUp { transform: translateY(var(--size--x4)); }
47
+ .Appear--FadeSlideDown { transform: translateY(calc(var(--size--x4) * -1)); }
48
+
49
+ .Appear--FadeSlideDown-appear-active,
50
+ .Appear--FadeSlideDown-appear-done,
51
+ .Appear--FadeSlideDown-enter-active,
52
+ .Appear--FadeSlideDown-enter-done,
53
+ .Appear--FadeSlideDown-exit,
54
+ .Appear--FadeSlideUp-appear-active,
55
+ .Appear--FadeSlideUp-appear-done,
56
+ .Appear--FadeSlideUp-enter-active,
57
+ .Appear--FadeSlideUp-enter-done,
58
+ .Appear--FadeSlideUp-exit {
59
+ transform: translateY(0);
60
+ opacity: 1;
61
+ }
62
+
63
+ .Appear--FadeSlideDown-appear,
64
+ .Appear--FadeSlideDown-enter,
65
+ .Appear--FadeSlideDown-exit-active,
66
+ .Appear--FadeSlideDown-exit-done {
67
+ transform: translateY(calc(var(--size--x4) * -1));
68
+ opacity: 0;
69
+ }
70
+
71
+ .Appear--FadeSlideUp-appear,
72
+ .Appear--FadeSlideUp-enter,
73
+ .Appear--FadeSlideUp-exit-active,
74
+ .Appear--FadeSlideUp-exit-done {
75
+ transform: translateY(var(--size--x4));
76
+ opacity: 0;
77
+ }
78
+
79
+ .Appear--FadeSlideRight,
80
+ .Appear--FadeSlideLeft {
81
+ opacity: 0;
82
+ transition-property: transform, opacity;
83
+ }
84
+
85
+ .Appear--FadeSlideRight { transform: translateX(calc(var(--size--x4) * -1)); }
86
+ .Appear--FadeSlideLeft { transform: translateX(var(--size--x4)); }
87
+
88
+ .Appear--FadeSlideRight-appear-active,
89
+ .Appear--FadeSlideRight-appear-done,
90
+ .Appear--FadeSlideRight-enter-active,
91
+ .Appear--FadeSlideRight-enter-done,
92
+ .Appear--FadeSlideRight-exit,
93
+ .Appear--FadeSlideLeft-appear-active,
94
+ .Appear--FadeSlideLeft-appear-done,
95
+ .Appear--FadeSlideLeft-enter-active,
96
+ .Appear--FadeSlideLeft-enter-done,
97
+ .Appear--FadeSlideLeft-exit {
98
+ transform: translateX(0);
99
+ opacity: 1;
100
+ }
101
+
102
+ .Appear--FadeSlideRight-appear,
103
+ .Appear--FadeSlideRight-enter,
104
+ .Appear--FadeSlideRight-exit-active,
105
+ .Appear--FadeSlideRight-exit-done {
106
+ transform: translateX(calc(var(--size--x4) * -1));
107
+ opacity: 0;
108
+ }
109
+
110
+ .Appear--FadeSlideLeft-appear,
111
+ .Appear--FadeSlideLeft-enter,
112
+ .Appear--FadeSlideLeft-exit-active,
113
+ .Appear--FadeSlideLeft-exit-done {
114
+ transform: translateX(var(--size--x4));
115
+ opacity: 0;
116
+ }
@@ -0,0 +1,74 @@
1
+ import * as React from 'react';
2
+ import { CSSTransition } from 'react-transition-group';
3
+ import classnames from 'classnames';
4
+ import { transitionDurationFast, transitionDurationBase, transitionDurationSlow } from '../variables';
5
+ import Base, { Props as BaseProps } from '../Base/Base';
6
+ import './Appear.css';
7
+
8
+ const isClient = typeof window !== 'undefined';
9
+
10
+ const durations = {
11
+ fast: transitionDurationFast,
12
+ base: transitionDurationBase,
13
+ slow: transitionDurationSlow,
14
+ };
15
+
16
+ export type TypeAppearAnimationName = 'Fade' | 'FadeSlideUp' | 'FadeSlideRight' | 'FadeSlideDown' | 'FadeSlideLeft';
17
+
18
+ export interface Props extends BaseProps {
19
+ /** Type of enter and exit animation */
20
+ animation: TypeAppearAnimationName;
21
+ className?: string;
22
+ /** Entrance delay time */
23
+ delay?: number;
24
+ /** Entrance duration */
25
+ duration?: 'slow' | 'base' | 'fast';
26
+ style?: React.CSSProperties;
27
+ /** Flag if the element is visible or not */
28
+ visible?: boolean;
29
+ }
30
+
31
+ /** Enter and exit components into view with a bit of bedazzle */
32
+ const Appear: React.FunctionComponent<Props> = (props: Props) => {
33
+ const { animation, className, delay, duration = 'fast', style, visible, ...rest } = props;
34
+
35
+ const classes = classnames(className, 'Appear', `Appear--${animation}`, `Appear--${duration}`, {
36
+ [`Appear--${animation}-appear`]: !isClient && visible,
37
+ });
38
+
39
+ const transition = {
40
+ appear: `Appear--${animation}-appear`,
41
+ appearActive: `Appear--${animation}-appear-active`,
42
+ enter: `Appear--${animation}-enter`,
43
+ enterActive: `Appear--${animation}-enter-active`,
44
+ enterDone: `Appear--${animation}-enter-done`,
45
+ exit: `Appear--${animation}-exit`,
46
+ exitActive: `Appear--${animation}-exit-active`,
47
+ exitDone: `Appear--${animation}-exit-done`,
48
+ };
49
+
50
+ const newStyle = {
51
+ ...style,
52
+ animationDelay: `${delay}ms`,
53
+ transitionDelay: `${delay}ms`,
54
+ };
55
+
56
+ return (
57
+ <CSSTransition
58
+ appear={isClient && visible}
59
+ classNames={transition}
60
+ in={isClient && visible}
61
+ timeout={durations[duration]}
62
+ >
63
+ <Base {...rest} className={classes} style={newStyle} />
64
+ </CSSTransition>
65
+ );
66
+ };
67
+
68
+ Appear.defaultProps = {
69
+ delay: 0,
70
+ duration: 'fast',
71
+ visible: true,
72
+ };
73
+
74
+ export default Appear;
@@ -2,12 +2,26 @@
2
2
  .Placement {
3
3
  position: absolute;
4
4
  z-index: var(--z-index-Placement--below-modal);
5
+ pointer-events: none;
6
+ }
7
+
8
+ .Placement--animate {
9
+ transition-property: transform;
10
+ transition-duration: var(--transition-duration--fast);
11
+ transition-timing-function: var(--transition-timing-function);
5
12
  }
6
13
 
7
14
  .Placement--above-modal {
8
15
  z-index: var(--z-index-Placement--above-modal);
9
16
  }
10
17
 
18
+ .Placement__content {
19
+ opacity: 0;
20
+ transition-property: transform, opacity;
21
+ transition-duration: var(--transition-duration--fast);
22
+ transition-timing-function: var(--transition-timing-function);
23
+ }
24
+
11
25
  .Placement--top .Placement__content { transform: translateY(calc(var(--size--x4) * -1)); }
12
26
  .Placement--bottom .Placement__content { transform: translateY(var(--size--x4)); }
13
27
 
@@ -3,8 +3,10 @@ import * as React from 'react';
3
3
  import { createPortal } from 'react-dom';
4
4
  import { Placement as TypePlacement, VirtualElement } from '@popperjs/core';
5
5
  import { Popper, PopperProps } from 'react-popper';
6
+ import { CSSTransition } from 'react-transition-group';
6
7
  import classnames from 'classnames';
7
8
  import { useEventListener } from '../hooks';
9
+ import { transitionDurationFast } from '../variables';
8
10
  import Base, { Props as BaseProps } from '../Base/Base';
9
11
  import { PlacementArrowPropsContext } from './PlacementArrowPropsContext';
10
12
  import { PlacementManagerContext } from './PlacementManagerContext';
@@ -12,6 +14,18 @@ import './Placement.css';
12
14
 
13
15
  const { useEffect, useRef, useState } = React;
14
16
 
17
+ const transitionClasses = {
18
+ appear: 'Placement__content-appear',
19
+ appearActive: 'Placement__content-appear-active',
20
+ appearDone: 'Placement__content-appear-done',
21
+ enter: 'Placement__content-enter',
22
+ enterActive: 'Placement__content-enter-active',
23
+ enterDone: 'Placement__content-enter-done',
24
+ exit: 'Placement__content-exit',
25
+ exitActive: 'Placement__content-exit-active',
26
+ exitDone: 'Placement__content-exit-done',
27
+ };
28
+
15
29
  export interface Props extends BaseProps {
16
30
  animatePosition?: boolean;
17
31
  children: (props: { update: () => void; width?: number }) => React.ReactNode;
@@ -40,6 +54,7 @@ const PlacementPopper: React.FunctionComponent<Props> = (props: Props) => {
40
54
  referenceElement,
41
55
  sameWidth,
42
56
  visible,
57
+ timeout = transitionDurationFast,
43
58
  ...rest
44
59
  } = props;
45
60
 
@@ -142,7 +157,7 @@ const PlacementPopper: React.FunctionComponent<Props> = (props: Props) => {
142
157
  ref={ref}
143
158
  style={style}
144
159
  >
145
- {visible && (
160
+ <CSSTransition appear={visible} classNames={transitionClasses} in={visible} timeout={timeout}>
146
161
  <div className="Placement__content">
147
162
  <Base {...rest} backgroundColor={backgroundColor} className="Placement__shadow">
148
163
  <PlacementManagerContext.Consumer>
@@ -155,7 +170,7 @@ const PlacementPopper: React.FunctionComponent<Props> = (props: Props) => {
155
170
  </PlacementManagerContext.Consumer>
156
171
  </Base>
157
172
  </div>
158
- )}
173
+ </CSSTransition>
159
174
  </div>
160
175
  </PlacementArrowPropsContext.Provider>
161
176
  );
package/src/index.ts CHANGED
@@ -132,3 +132,9 @@ export { default as RadioGroup } from './Components/Form/Radio/RadioGroup';
132
132
 
133
133
  export type { ImageProps } from './Components/Image/Image';
134
134
  export { default as Image } from './Components/Image/Image';
135
+
136
+ export type { BreadcrumbProps } from './Components/Breadcrumb/Breadcrumb';
137
+ export { default as Breadcrumb } from './Components/Breadcrumb/Breadcrumb';
138
+
139
+ export type { BreadcrumbLinkProps } from './Components/Breadcrumb/BreadcrumbLink';
140
+ export { default as BreadcrumbLink } from './Components/Breadcrumb/BreadcrumbLink';
package/src/old.ts CHANGED
@@ -15,6 +15,10 @@ export { default as AddonBeamLink } from './Old/AddonBeam/AddonBeamLink';
15
15
  export type { Props as AddonFooterProps } from './Old/AddonFooter/AddonFooter';
16
16
  export { default as AddonFooter } from './Old/AddonFooter/AddonFooter';
17
17
 
18
+ export type { Props as AppearProps } from './Old/Appear/Appear';
19
+ export type { TypeAppearAnimationName } from './Old/Appear/Appear';
20
+ export { default as Appear } from './Old/Appear/Appear';
21
+
18
22
  export type { Props as AppLayoutProps } from './Old/AppLayout/AppLayout';
19
23
  export { default as AppLayout } from './Old/AppLayout/AppLayout';
20
24
 
package/src/theme.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import Avatar from './Components/Avatar/Avatar.theme';
2
2
  import Badge from './Components/Badge/Badge.theme';
3
+ import Breadcrumb from './Components/Breadcrumb/Breadcrumb.theme';
3
4
  import Button from './Components/Button/Button.theme';
4
5
  import Card from './Components/Card/Card.theme';
5
6
  import Checkbox from './Components/Form/Checkbox/Checkbox.theme';
@@ -65,6 +66,7 @@ const theme = {
65
66
  components: {
66
67
  Avatar,
67
68
  Badge,
69
+ Breadcrumb,
68
70
  Button,
69
71
  Card,
70
72
  Checkbox,