Skip to content

Commit a10f15d

Browse files
authored
Merge pull request #29 from odedglas/add-radial-gradient-picker
2 parents 81e5720 + 542f793 commit a10f15d

File tree

39 files changed

+580
-247
lines changed

39 files changed

+580
-247
lines changed

.eslintrc.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,14 @@ module.exports = {
1616
'ecmaVersion': 2018,
1717
'sourceType': 'module'
1818
},
19+
'settings': {
20+
'react': {
21+
'version': '16.8.0'
22+
},
23+
},
1924
'rules': {
2025
'indent': [
21-
'error',
26+
'off',
2227
'tab'
2328
],
2429
'quotes': [

.storybook/main.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ const baseStorybookConfig = {
1010
},
1111
addons: [
1212
'@storybook/addon-essentials',
13-
'@storybook/addon-links'
13+
'@storybook/addon-links',
14+
'@storybook/preset-scss'
1415
]
1516
};
1617

README.md

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -66,31 +66,6 @@ const App = () => {
6666
| `opacity`| `Number` | `1` | `No` | The stop color opacity.
6767
| `active`| `Boolean` | `` | `No` | Rather the current color is active (selected) or not.
6868

69-
## Angle Picke Usage
70-
<img width="200" alt="gradient_preview" src="/assets/ap.png"> <br/>
71-
72-
```js
73-
import React, { useState } from 'react';
74-
import { AnglePicker } from 'react-linear-gradient-picker';
75-
import 'react-linear-gradient-picker/dist/index.css';
76-
77-
const App = () => {
78-
const [angle, setAngle] = useState(25);
79-
80-
return (
81-
<AnglePicker angle={angle} setAngle={setAngle}/>
82-
);
83-
};
84-
```
85-
86-
### Accepted props
87-
88-
| Name | Type | Default Value | Required? | Description
89-
|-|-|-|-|-
90-
| `angle` | `Number` | `undefined` | Yes | The controlled angle.
91-
| `setAngle` | `Function` | `undefined` | Yes | The set angle method to be trigger after an angle was changes.
92-
| `size` | `Number` | `48` | No | Determines the size of the angle picker
93-
| `snap` | `Number` | `5` | No | Determines the angle change snapping, Can be removed with setting as 0
9469

9570
## Gradient Picker Popover Usage
9671
<img width="200" alt="gradient_popover_preview" src="/assets/gpp.jpg"> <br/>
@@ -136,7 +111,6 @@ const App = () => {
136111
setOpen,
137112
angle,
138113
setAngle,
139-
showAnglePicker: true,
140114
width: 220,
141115
maxStops: 3,
142116
paletteHeight: 32,
@@ -158,8 +132,35 @@ export default App;
158132
| `trigger` | `React Component` | `defaultTrigger` | No | The popover trigger component, Will use default implementation if empty.
159133
| `open` | `Boolean` | `false` | Yes | Controls the popover open state
160134
| `setOpen` | `Function` | `undefined` | Yes | The setOpen method to be called upon open changes
161-
| `showAnglePicker` | `Boolean` | `false` | No | Will add to gradient picker the angle picker component at the bottom
135+
| `showGradientTypePicker` | `Boolean` | `true` | No | Rather to show the `gradientType` picker control.
136+
| `showAnglePicker` | `Boolean` | `true` | No | Rather to show the `anglePicker` picker control.
162137
| `angle` | `Number` | `undefined` | No | The angle picker angle value
163138
| `setAngle` | `Function` | `undefined` | No | Then angle picker setAngle method to be called upon angle changes
164139

165-
* This component accepts all of GradientPicker pros.
140+
* This component accepts all of `<GradientPicker/>` pros.
141+
142+
## Angle Picker Usage
143+
<img width="200" alt="gradient_preview" src="/assets/ap.png"> <br/>
144+
145+
```js
146+
import React, { useState } from 'react';
147+
import { AnglePicker } from 'react-linear-gradient-picker';
148+
import 'react-linear-gradient-picker/dist/index.css';
149+
150+
const App = () => {
151+
const [angle, setAngle] = useState(25);
152+
153+
return (
154+
<AnglePicker angle={angle} setAngle={setAngle}/>
155+
);
156+
};
157+
```
158+
159+
### Accepted props
160+
161+
| Name | Type | Default Value | Required? | Description
162+
|-|-|-|-|-
163+
| `angle` | `Number` | `undefined` | Yes | The controlled angle.
164+
| `setAngle` | `Function` | `undefined` | Yes | The set angle method to be trigger after an angle was changes.
165+
| `size` | `Number` | `48` | No | Determines the size of the angle picker
166+
| `snap` | `Number` | `5` | No | Determines the angle change snapping, Can be removed with setting as 0

package.json

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-linear-gradient-picker",
3-
"version": "2.0.6",
3+
"version": "3.0.0",
44
"description": "React linear gradient picker",
55
"main": "dist/index.js",
66
"scripts": {
@@ -32,9 +32,10 @@
3232
"@babel/preset-react": "^7.17.0",
3333
"@storybook/addon-essentials": "^6.4.0",
3434
"@storybook/addon-links": "^6.4.0",
35-
"@storybook/manager-webpack5": "^6.4.0",
3635
"@storybook/builder-webpack5": "^6.4.0",
3736
"@storybook/cli": "^6.4.0",
37+
"@storybook/manager-webpack5": "^6.4.0",
38+
"@storybook/preset-scss": "^1.0.3",
3839
"@storybook/react": "^6.4.0",
3940
"@storybook/storybook-deployer": "^2.8.1",
4041
"babel-loader": "^8.2.5",
@@ -45,20 +46,17 @@
4546
"eslint-plugin-react": "^7.30.0",
4647
"eslint-plugin-react-hooks": "^4.5.0",
4748
"mini-css-extract-plugin": "^2.6.0",
48-
"sass": "^1.52.1",
4949
"prop-types": "^15.7.2",
5050
"rc-color-picker": "^1.1.5",
5151
"react": "^16.9.0",
5252
"react-color": "^2.12.0",
5353
"react-dom": "^16.9.0",
54-
"sass-loader": "^8.0.0",
54+
"sass": "^1.52.1",
55+
"sass-loader": "^8.0.2",
5556
"style-loader": "^1.0.0",
5657
"svg-url-loader": "^3.0.2",
5758
"terser-webpack-plugin": "^5.3.1",
5859
"webpack": "^5.72.1",
5960
"webpack-cli": "^4.9.2"
60-
},
61-
"dependencies": {
62-
"linear-gradient-parser": "^1.1.8"
6361
}
6462
}

src/components/AnglePicker/index.css

Lines changed: 0 additions & 34 deletions
This file was deleted.

src/components/AnglePicker/index.js

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,14 @@ import {
77
snapAngle,
88
pointDegrees
99
} from '../../lib';
10-
import './index.css';
11-
12-
const AnglePicker = ({ angle, setAngle, size = 48, snap = 5 }) => {
10+
import './index.scss';
11+
12+
const AnglePicker = ({
13+
angle,
14+
setAngle,
15+
size = 24,
16+
snap = 5
17+
}) => {
1318
const pickerRef = useRef();
1419
const sizeStyle = { height: size, width: size };
1520

@@ -21,7 +26,6 @@ const AnglePicker = ({ angle, setAngle, size = 48, snap = 5 }) => {
2126
const angle = useSnap ? snapAngle(clamped, snap) : clamped;
2227

2328
setAngle(angle);
24-
return angle;
2529
};
2630

2731
const [drag] = useDragging({
@@ -36,11 +40,18 @@ const AnglePicker = ({ angle, setAngle, size = 48, snap = 5 }) => {
3640
});
3741

3842
return (
39-
<div className="ap" ref={pickerRef} onMouseDown={drag} onTouchStart={drag} style={sizeStyle}>
40-
<span className="apc" style={{ transform: `rotate(${angle}deg)`, height: size }}>
41-
<i className="aph"/>
42-
</span>
43-
</div>
43+
<>
44+
<div className="ap" ref={pickerRef} onMouseDown={drag} onTouchStart={drag} style={sizeStyle}>
45+
<span className="apc" style={{ transform: `rotate(${angle}deg)`, height: size }}>
46+
<i className="aph"/>
47+
</span>
48+
</div>
49+
<div className="ai">
50+
<span onClick={() => setAngle(angle - 1)}>&#8722;</span>
51+
<input value={`${angle}°`} disabled/>
52+
<span onClick={() => setAngle(angle + 1)}>&#43;</span>
53+
</div>
54+
</>
4455
);
4556
};
4657

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
.controls-wrapper {
2+
.ap {
3+
flex: none;
4+
box-sizing: border-box;
5+
background-color: #fff;
6+
border: 1px solid #4374AD;
7+
border-radius: 50%;
8+
display: inline-block;
9+
position: relative;
10+
cursor: pointer;
11+
margin-top: -2px;
12+
13+
.apc {
14+
width: 6px;
15+
position: absolute;
16+
left: 0;
17+
right: 0;
18+
top: 0;
19+
bottom: 0;
20+
margin: auto;
21+
}
22+
23+
.aph {
24+
width: 6px;
25+
height: 6px;
26+
background-color: #4374AD;
27+
display: inline-block;
28+
border-radius: 50%;
29+
position: absolute;
30+
left: 0;
31+
right: 0;
32+
top: 4px;
33+
margin: auto;
34+
cursor: pointer;
35+
}
36+
}
37+
38+
.ai {
39+
background: #f2f2f2;
40+
display: flex;
41+
flex: 1;
42+
margin: 0 12px;
43+
justify-content: space-around;
44+
align-items: center;
45+
46+
input {
47+
border: none;
48+
text-align: center;
49+
width: 48px;
50+
color: #0C0C09;
51+
background: inherit;
52+
}
53+
54+
span {
55+
padding: 5px;
56+
color: black;
57+
cursor: pointer;
58+
user-select: none;
59+
font-size: 14px;
60+
}
61+
}
62+
}

src/components/ColorPicker/index.css

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/components/ColorPicker/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from 'react';
22
import PropTypes from 'prop-types';
33
import { COLORS } from './constants';
4-
import './index.css';
4+
import './index.scss';
55

66
const ColorPicker = ({ onSelect }) => (
77
<div className="cp">
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
.cp {
2+
div {
3+
box-sizing: border-box;
4+
cursor: pointer;
5+
display: inline-block;
6+
height: 16px;
7+
width: 16px;
8+
9+
&:hover {
10+
border: 1px solid #fff;
11+
}
12+
}
13+
}

0 commit comments

Comments
 (0)