|
1 | 1 | import {
|
2 | 2 | parseLinearGradient,
|
| 3 | + reconstructLinearGradient, |
3 | 4 | type ParsedGradient,
|
4 | 5 | } from "@webstudio-is/css-data";
|
5 | 6 | import { GradientControl } from "./gradient-control";
|
6 |
| -import { toValue } from "@webstudio-is/css-engine"; |
| 7 | +import { Flex, Text } from "@webstudio-is/design-system"; |
| 8 | +import { useState } from "react"; |
7 | 9 |
|
8 | 10 | export default {
|
9 | 11 | title: "Library/GradientControl",
|
10 | 12 | };
|
11 | 13 |
|
12 | 14 | export const GradientWithoutAngle = () => {
|
| 15 | + const gradientString = "linear-gradient(#e66465 0%, #9198e5 100%)"; |
| 16 | + const [gradient, setGradient] = useState<string>(gradientString); |
| 17 | + |
13 | 18 | return (
|
14 |
| - <GradientControl |
15 |
| - gradient={ |
16 |
| - parseLinearGradient( |
17 |
| - "linear-gradient(#e66465 0%, #9198e5 100%)" |
18 |
| - ) as ParsedGradient |
19 |
| - } |
20 |
| - onChange={() => {}} |
21 |
| - /> |
| 19 | + <Flex direction="column" gap="4"> |
| 20 | + <GradientControl |
| 21 | + gradient={parseLinearGradient(gradientString) as ParsedGradient} |
| 22 | + onChange={(value) => { |
| 23 | + setGradient(reconstructLinearGradient(value)); |
| 24 | + }} |
| 25 | + /> |
| 26 | + <Text>{gradient}</Text> |
| 27 | + </Flex> |
22 | 28 | );
|
23 | 29 | };
|
24 | 30 |
|
25 |
| -// The GradientControl is to just modify the stop values or add new ones. |
26 |
| -// It always shows the angle as 90deg, unless the stops can't be showin in a rectangle. |
27 |
| -// So, the gradient shouldn't modify even if the stop values are changed at the end, |
28 |
| -export const GradientWithAngle = () => { |
| 31 | +export const GradientWithAngleAndHints = () => { |
| 32 | + const gradientString = |
| 33 | + "linear-gradient(145deg, #ff00fa 0%, #00f497 34% 34%, #ffa800 56% 56%, #00eaff 100%)"; |
| 34 | + const [gradient, setGradient] = useState<string>(gradientString); |
| 35 | + |
29 | 36 | return (
|
30 |
| - <GradientControl |
31 |
| - gradient={ |
32 |
| - parseLinearGradient( |
33 |
| - "linear-gradient(145deg, #ff00fa 0%, #00f497 34% 34%, #ffa800 56% 56%, #00eaff 100%)" |
34 |
| - ) as ParsedGradient |
35 |
| - } |
36 |
| - onChange={(value) => { |
37 |
| - if (toValue(value.angle) !== "145deg") { |
38 |
| - throw new Error( |
39 |
| - `Gradient control modified the angle that is passed. \nReceived ${JSON.stringify(value.angle, null, 2)}` |
40 |
| - ); |
41 |
| - } |
42 |
| - }} |
43 |
| - /> |
| 37 | + <Flex direction="column" gap="4"> |
| 38 | + <GradientControl |
| 39 | + gradient={parseLinearGradient(gradientString) as ParsedGradient} |
| 40 | + onChange={(value) => { |
| 41 | + setGradient(reconstructLinearGradient(value)); |
| 42 | + }} |
| 43 | + /> |
| 44 | + <Text>{gradient}</Text> |
| 45 | + </Flex> |
44 | 46 | );
|
45 | 47 | };
|
46 | 48 |
|
47 | 49 | export const GradientWithSideOrCorner = () => {
|
| 50 | + const gradientString = "linear-gradient(to left top, blue 0%, red 100%)"; |
| 51 | + |
| 52 | + const [gradient, setGradient] = useState<string>(gradientString); |
| 53 | + |
48 | 54 | return (
|
49 |
| - <GradientControl |
50 |
| - gradient={ |
51 |
| - parseLinearGradient( |
52 |
| - "linear-gradient(to left top, blue 0%, red 100%)" |
53 |
| - ) as ParsedGradient |
54 |
| - } |
55 |
| - onChange={(value) => { |
56 |
| - if (toValue(value.sideOrCorner) !== "to left top") { |
57 |
| - throw new Error( |
58 |
| - `Gradient control modified the side-or-corner value that is passed. \nReceived ${JSON.stringify(value.sideOrCorner, null, 2)}` |
59 |
| - ); |
60 |
| - } |
61 |
| - }} |
62 |
| - /> |
| 55 | + <Flex direction="column" gap="4"> |
| 56 | + <GradientControl |
| 57 | + gradient={parseLinearGradient(gradientString) as ParsedGradient} |
| 58 | + onChange={(value) => { |
| 59 | + setGradient(reconstructLinearGradient(value)); |
| 60 | + }} |
| 61 | + /> |
| 62 | + <Text>{gradient}</Text> |
| 63 | + </Flex> |
63 | 64 | );
|
64 | 65 | };
|
0 commit comments