Skip to content

Commit 0609498

Browse files
Initial.
1 parent 6d84cdd commit 0609498

15 files changed

+282
-43
lines changed

.storybook/webpack.config.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,20 @@ module.exports = {
88
use: ['style-loader', 'css-loader', 'less-loader'],
99
include: path.resolve(__dirname, '../'),
1010
},
11+
{
12+
test: /\.svg$/,
13+
use: [
14+
{
15+
loader: "babel-loader"
16+
},
17+
{
18+
loader: "react-svg-loader",
19+
options: {
20+
jsx: true // true outputs JSX tags
21+
}
22+
}
23+
]
24+
}
1125
],
1226
},
1327
};

README.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,59 @@ Optional array of controls to be rendered in the carousel container. Each contro
224224
component constructor, and will be passed callback props `nextSlide`, `prevSlide` and `goToSlide` for controlling
225225
navigation, and `numSlides`, `selectedIndex` and `infinite` for rendering the state of the carousel.
226226

227+
#### isVertical
228+
```
229+
PropTypes.bool
230+
```
231+
232+
Defaults to `false`. Setting `isVertical` to `true` will render vertical carousal.
233+
234+
#### verticalArrowPadding
235+
```
236+
PropTypes.number
237+
```
238+
239+
Defaults to `0`. This prop can used to customize the positioning of vertical arrows in case of a vertical carousal.
240+
241+
#### upArrowImage
242+
```
243+
PropTypes.node
244+
```
245+
246+
This prop can used to pass a custom `.svg` image to replace the default up arrow.
247+
248+
#### downArrowImage
249+
```
250+
PropTypes.node
251+
```
252+
253+
This prop can used to pass a custom `.svg` image to replace the default down arrow.
254+
255+
#### leftArrowImage
256+
```
257+
PropTypes.node
258+
```
259+
260+
This prop can used to pass a custom `.svg` image to replace the default left arrow.
261+
262+
#### rightArrowImage
263+
```
264+
PropTypes.node
265+
```
266+
267+
This prop can used to pass a custom `.svg` image to replace the default right arrow.
268+
269+
```
270+
// Example for custom svg image :
271+
import UpImage from '../../test/images/test-up-arrow.svg';
272+
import DownImage from '../../test/images/test-down-arrow.svg';
273+
274+
<Carousel height='450px' width='450px' cellPadding={ 5 } infinite={ false } arrows={ true }
275+
dots={ false } isVertical={ true } upArrowImage={<UpImage/>} downArrowImage={<DownImage/>} >
276+
{ imgElements }
277+
</Carousel>;
278+
```
279+
227280
Tests:
228281
----------------
229282

package-lock.json

Lines changed: 100 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
"postcss-cli": "^8.3.0",
7070
"react": "^16.9.0",
7171
"react-dom": "^16.9.0",
72+
"react-svg-loader": "^3.0.3",
7273
"rimraf": "^3.0.2",
7374
"setup-env": "^1.2.3",
7475
"sinon": "^9.2.0",

src/carousel.less

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,13 @@
1717
}
1818

1919
.carousel-arrow-default {
20-
border: 3px solid !important;
21-
border-radius: 50%;
22-
color: rgba(255, 255, 255, 0.9);
2320
height: 32px;
2421
width: 32px;
2522
font-weight: 900;
26-
background: rgba(0, 0, 0, 0.15);
23+
background: none;
2724
}
2825

2926
.carousel-arrow {
30-
position: absolute;
3127
z-index: 1;
3228
bottom: 23px;
3329
padding: 0;
@@ -40,7 +36,6 @@
4036

4137
&:before {
4238
font-size: 19px;
43-
display: block;
4439
margin-top: -2px;
4540
}
4641

@@ -52,28 +47,12 @@
5247

5348
.carousel-left-arrow {
5449
left: 23px;
50+
padding-top: 10px;
5551
}
5652

5753
.carousel-right-arrow {
5854
right: 23px;
59-
}
60-
61-
.carousel-left-arrow {
62-
&.carousel-arrow-default {
63-
&:before {
64-
content: '<';
65-
padding-right: 2px;
66-
}
67-
}
68-
}
69-
70-
.carousel-right-arrow {
71-
&.carousel-arrow-default {
72-
&:before {
73-
content: '>';
74-
padding-left: 2px;
75-
}
76-
}
55+
padding-top: 10px;
7756
}
7857

7958
.carousel-track {
@@ -88,7 +67,6 @@
8867
transition: opacity 0.5s ease-in-out;
8968

9069
& > * {
91-
display: block;
9270
white-space: normal;
9371
}
9472
&.carousel-slide-loading {

src/controls/arrow.js

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import React, { Component } from 'react';
22
import PropTypes from 'prop-types';
3+
import DefaultUpArrow from '../images/arrow-up.svg';
4+
import DefaultDownArrow from '../images/arrow-down.svg';
5+
import DefaultLeftArrow from '../images/arrow-left.svg';
6+
import DefaultRightArrow from '../images/arrow-right.svg';
37

48
/**
59
* Renders an arrow component used to transition from right-to-left or left-to-right through the carousel slides.
@@ -13,15 +17,19 @@ export default class Arrow extends Component {
1317
infinite: PropTypes.bool.isRequired,
1418
prevSlide: PropTypes.func.isRequired,
1519
nextSlide: PropTypes.func.isRequired,
16-
direction: PropTypes.oneOf(['left', 'right']).isRequired,
20+
direction: PropTypes.oneOf(['left', 'right', 'top', 'bottom']).isRequired,
1721
arrows: PropTypes.oneOfType([
1822
PropTypes.bool,
1923
PropTypes.shape({
2024
left: PropTypes.node.isRequired,
2125
right: PropTypes.node.isRequired,
2226
className: PropTypes.string
2327
})
24-
])
28+
]),
29+
upArrowImage: PropTypes.node,
30+
downArrowImage: PropTypes.node,
31+
leftArrowImage: PropTypes.node,
32+
rightArrowImage: PropTypes.node,
2533
};
2634
}
2735

@@ -31,11 +39,11 @@ export default class Arrow extends Component {
3139
hasNext() {
3240
const { direction, infinite, numSlides, selectedIndex } = this.props;
3341

34-
return infinite || (direction === 'left' ? selectedIndex > 0 : selectedIndex < numSlides - 1);
42+
return infinite || (['top', 'left'].includes(direction) ? selectedIndex > 0 : selectedIndex < numSlides - 1);
3543
}
3644

3745
render() {
38-
const { prevSlide, nextSlide, direction, arrows } = this.props;
46+
const { prevSlide, nextSlide, direction, arrows, upArrowImage, downArrowImage, leftArrowImage, rightArrowImage } = this.props;
3947
let arrowComponent = null;
4048
let buttonClass = 'carousel-arrow-default';
4149

@@ -48,9 +56,13 @@ export default class Arrow extends Component {
4856
<button
4957
type='button'
5058
disabled={ !this.hasNext() }
51-
onClick={ direction === 'left' ? prevSlide : nextSlide }
59+
onClick={ ['top', 'left'].includes(direction) ? prevSlide : nextSlide }
5260
className={ `carousel-arrow carousel-${direction}-arrow ${buttonClass}` }>
5361
{ arrowComponent }
62+
{ direction === 'top' && (upArrowImage || <DefaultUpArrow/>)}
63+
{ direction === 'bottom' && (downArrowImage || <DefaultDownArrow/>)}
64+
{ direction === 'left' && (leftArrowImage || <DefaultLeftArrow/>)}
65+
{ direction === 'right' && (rightArrowImage || <DefaultRightArrow/>)}
5466
</button>
5567
);
5668
}

src/images/arrow-down.svg

Lines changed: 1 addition & 0 deletions
Loading

src/images/arrow-left.svg

Lines changed: 1 addition & 0 deletions
Loading

src/images/arrow-right.svg

Lines changed: 1 addition & 0 deletions
Loading

src/images/arrow-up.svg

Lines changed: 1 addition & 0 deletions
Loading

0 commit comments

Comments
 (0)