@sproutsocial/racine 10.0.1-dependencies.0 → 10.0.2-menuCSS.0
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/__flow__/Avatar/index.test.js +5 -0
- package/__flow__/Badge/index.test.js +5 -0
- package/__flow__/Button/index.stories.js +67 -51
- package/__flow__/CharacterCounter/index.test.js +8 -0
- package/__flow__/ChartLegend/index.test.js +37 -0
- package/__flow__/EmptyState/index.test.js +3 -1
- package/__flow__/Link/index.test.js +10 -0
- package/__flow__/Listbox/index.test.js +0 -18
- package/__flow__/Loader/index.test.js +14 -0
- package/__flow__/Menu/__snapshots__/index.test.js.snap +3 -272
- package/__flow__/Menu/index.test.js +0 -4
- package/__flow__/Menu/styles.js +10 -2
- package/__flow__/Modal/index.test.js +19 -0
- package/__flow__/Text/index.test.js +39 -0
- package/commonjs/Menu/styles.js +1 -1
- package/lib/Menu/styles.js +2 -2
- package/package.json +15 -18
- package/__flow__/Listbox/__snapshots__/index.test.js.snap +0 -1316
|
@@ -14,4 +14,9 @@ describe("Avatar", () => {
|
|
|
14
14
|
const { container } = render(<Avatar name="Test User" />);
|
|
15
15
|
expect(container.textContent).toEqual("TU");
|
|
16
16
|
});
|
|
17
|
+
|
|
18
|
+
it("should set the correct font size", () => {
|
|
19
|
+
const { getByText } = render(<Avatar name="Test User" />);
|
|
20
|
+
expect(getByText("TU")).toHaveStyleRule("font-size", "16px");
|
|
21
|
+
});
|
|
17
22
|
});
|
|
@@ -10,6 +10,11 @@ describe("Racine Badge", () => {
|
|
|
10
10
|
expect(getByDataQaLabel({ "badge-type": "primary" })).toBeTruthy();
|
|
11
11
|
});
|
|
12
12
|
|
|
13
|
+
it("should render with correct size styling", () => {
|
|
14
|
+
const { getByText } = render(<Badge text="Test" size="small" />);
|
|
15
|
+
expect(getByText("Test")).toHaveStyleRule("padding", "4px 8px");
|
|
16
|
+
});
|
|
17
|
+
|
|
13
18
|
it("should render with secondary type", () => {
|
|
14
19
|
const { getByText, getByDataQaLabel } = render(
|
|
15
20
|
<Badge text="Test" type="secondary" />
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import { boolean, text, number } from "@storybook/addon-knobs";
|
|
2
3
|
import Button from "./index";
|
|
3
4
|
import Icon from "../Icon";
|
|
4
5
|
import Box from "../Box";
|
|
@@ -7,140 +8,155 @@ export default {
|
|
|
7
8
|
title: "Button",
|
|
8
9
|
};
|
|
9
10
|
|
|
10
|
-
export const defaultStory = (
|
|
11
|
-
<Button
|
|
11
|
+
export const defaultStory = () => (
|
|
12
|
+
<Button
|
|
13
|
+
appearance={text("appearance", "default")}
|
|
14
|
+
onClick={() => alert("Testing...")}
|
|
15
|
+
>
|
|
12
16
|
Default
|
|
13
17
|
</Button>
|
|
14
18
|
);
|
|
15
19
|
|
|
16
|
-
defaultStory.args = { appearance: "default" };
|
|
17
|
-
|
|
18
20
|
defaultStory.story = {
|
|
19
21
|
name: "Default",
|
|
20
22
|
};
|
|
21
23
|
|
|
22
|
-
export const primary = (
|
|
23
|
-
<Button
|
|
24
|
+
export const primary = () => (
|
|
25
|
+
<Button
|
|
26
|
+
appearance={text("appearance", "primary")}
|
|
27
|
+
onClick={() => alert("Testing...")}
|
|
28
|
+
>
|
|
24
29
|
Primary Button
|
|
25
30
|
</Button>
|
|
26
31
|
);
|
|
27
32
|
|
|
28
|
-
primary.args = { appearance: "primary" };
|
|
29
|
-
|
|
30
33
|
primary.story = {
|
|
31
34
|
name: "Primary",
|
|
32
35
|
};
|
|
33
36
|
|
|
34
|
-
export const secondary = (
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
export const secondary = () => (
|
|
38
|
+
<Button appearance={text("appearance", "secondary")}>Secondary Button</Button>
|
|
39
|
+
);
|
|
37
40
|
|
|
38
41
|
secondary.story = {
|
|
39
42
|
name: "Secondary",
|
|
40
43
|
};
|
|
41
44
|
|
|
42
|
-
export const destructive = (
|
|
43
|
-
<Button {
|
|
45
|
+
export const destructive = () => (
|
|
46
|
+
<Button appearance={text("appearance", "destructive")}>
|
|
47
|
+
Destructive Button
|
|
48
|
+
</Button>
|
|
44
49
|
);
|
|
45
50
|
|
|
46
|
-
destructive.args = { appearance: "destructive" };
|
|
47
51
|
destructive.story = {
|
|
48
52
|
name: "Destructive",
|
|
49
53
|
};
|
|
50
54
|
|
|
51
|
-
export const placeholder = (
|
|
52
|
-
<Button {
|
|
55
|
+
export const placeholder = () => (
|
|
56
|
+
<Button appearance={text("appearance", "placeholder")}>
|
|
57
|
+
Placeholder Button
|
|
58
|
+
</Button>
|
|
53
59
|
);
|
|
54
60
|
|
|
55
|
-
placeholder.args = { appearance: "placeholder" };
|
|
56
61
|
placeholder.story = {
|
|
57
62
|
name: "Placeholder",
|
|
58
63
|
};
|
|
59
64
|
|
|
60
|
-
export const largeButton = (
|
|
61
|
-
|
|
65
|
+
export const largeButton = () => (
|
|
66
|
+
<Button
|
|
67
|
+
appearance={text("appearance", "primary")}
|
|
68
|
+
size={text("size", "large")}
|
|
69
|
+
>
|
|
70
|
+
Large Button
|
|
71
|
+
</Button>
|
|
72
|
+
);
|
|
62
73
|
|
|
63
74
|
largeButton.story = {
|
|
64
75
|
name: "Large button",
|
|
65
76
|
};
|
|
66
77
|
|
|
67
|
-
export const pillButton = (
|
|
78
|
+
export const pillButton = () => (
|
|
68
79
|
<Box bg="container.background.base" p={400}>
|
|
69
|
-
<Button {
|
|
80
|
+
<Button appearance={text("shape", "pill")}>
|
|
70
81
|
<Icon name="reply" mr={350} />
|
|
71
82
|
Pill Button
|
|
72
83
|
</Button>
|
|
73
84
|
</Box>
|
|
74
85
|
);
|
|
75
|
-
|
|
86
|
+
|
|
76
87
|
pillButton.story = {
|
|
77
88
|
name: "Pill button",
|
|
78
89
|
};
|
|
79
90
|
|
|
80
|
-
export const pillIconOnlyButton = (
|
|
91
|
+
export const pillIconOnlyButton = () => (
|
|
81
92
|
<Box bg="container.background.base" p={400}>
|
|
82
|
-
<Button {
|
|
93
|
+
<Button appearance={text("shape", "pill")} ariaLabel="This is a label">
|
|
83
94
|
<Icon name="circle-check-outline" />
|
|
84
95
|
</Button>
|
|
85
96
|
</Box>
|
|
86
97
|
);
|
|
87
98
|
|
|
88
|
-
pillIconOnlyButton.args = { appearance: "pill" };
|
|
89
99
|
pillIconOnlyButton.story = {
|
|
90
100
|
name: "Pill icon only button",
|
|
91
101
|
};
|
|
92
102
|
|
|
93
|
-
export const activeButton = (
|
|
103
|
+
export const activeButton = () => (
|
|
104
|
+
<Button
|
|
105
|
+
appearance={text("appearance", "secondary")}
|
|
106
|
+
active={boolean("active", true)}
|
|
107
|
+
>
|
|
108
|
+
Active Button
|
|
109
|
+
</Button>
|
|
110
|
+
);
|
|
94
111
|
|
|
95
|
-
activeButton.args = { appearance: "secondary", active: true };
|
|
96
112
|
activeButton.story = {
|
|
97
113
|
name: "Active button",
|
|
98
114
|
};
|
|
99
115
|
|
|
100
|
-
export const buttonAsALink = (
|
|
101
|
-
<Button
|
|
116
|
+
export const buttonAsALink = () => (
|
|
117
|
+
<Button
|
|
118
|
+
href={text("href", "http://sproutsocial.style")}
|
|
119
|
+
external={boolean("external", true)}
|
|
120
|
+
appearance={text("appearance", "primary")}
|
|
121
|
+
>
|
|
122
|
+
Button using anchor element
|
|
123
|
+
</Button>
|
|
102
124
|
);
|
|
103
|
-
|
|
104
|
-
appearance: "primary",
|
|
105
|
-
external: true,
|
|
106
|
-
href: "http://sproutsocial.style",
|
|
107
|
-
};
|
|
125
|
+
|
|
108
126
|
buttonAsALink.story = {
|
|
109
127
|
name: "Button as a link",
|
|
110
128
|
};
|
|
111
129
|
|
|
112
|
-
export const disabledButton = (
|
|
113
|
-
<Button
|
|
130
|
+
export const disabledButton = () => (
|
|
131
|
+
<Button
|
|
132
|
+
appearance={text("appearance", "primary")}
|
|
133
|
+
disabled={text("disabled", "true")}
|
|
134
|
+
>
|
|
135
|
+
This Button is disabled
|
|
136
|
+
</Button>
|
|
114
137
|
);
|
|
115
|
-
|
|
116
|
-
appearance: "primary",
|
|
117
|
-
disabled: true,
|
|
118
|
-
};
|
|
138
|
+
|
|
119
139
|
disabledButton.story = {
|
|
120
140
|
name: "Disabled button",
|
|
121
141
|
};
|
|
122
142
|
|
|
123
|
-
export const fullWidthButton = (
|
|
124
|
-
<Button {
|
|
143
|
+
export const fullWidthButton = () => (
|
|
144
|
+
<Button appearance={text("appearance", "primary")} width={number("width", 1)}>
|
|
145
|
+
Full-Width Button
|
|
146
|
+
</Button>
|
|
125
147
|
);
|
|
126
|
-
|
|
127
|
-
appearance: "primary",
|
|
128
|
-
width: 1,
|
|
129
|
-
};
|
|
148
|
+
|
|
130
149
|
fullWidthButton.story = {
|
|
131
150
|
name: "Full width button",
|
|
132
151
|
};
|
|
133
152
|
|
|
134
|
-
export const withIcon = (
|
|
135
|
-
<Button {
|
|
153
|
+
export const withIcon = () => (
|
|
154
|
+
<Button appearance={text("appearance", "secondary")}>
|
|
136
155
|
<Icon name="twitter" mr={350} />
|
|
137
156
|
Secondary Button
|
|
138
157
|
</Button>
|
|
139
158
|
);
|
|
140
159
|
|
|
141
|
-
withIcon.args = {
|
|
142
|
-
appearance: "secondary",
|
|
143
|
-
};
|
|
144
160
|
withIcon.story = {
|
|
145
161
|
name: "With icon",
|
|
146
162
|
};
|
|
@@ -2,6 +2,7 @@ import React from "react";
|
|
|
2
2
|
import { render } from "../utils/react-testing-library";
|
|
3
3
|
import "jest-styled-components";
|
|
4
4
|
import CharacterCounter from "./";
|
|
5
|
+
import { COLOR_RED_800 } from "@sproutsocial/seeds-color";
|
|
5
6
|
|
|
6
7
|
describe.only("CharacterCounter", () => {
|
|
7
8
|
it("should render properly", () => {
|
|
@@ -12,4 +13,11 @@ describe.only("CharacterCounter", () => {
|
|
|
12
13
|
|
|
13
14
|
expect(getByText(remainingNumber.toString())).toBeTruthy();
|
|
14
15
|
});
|
|
16
|
+
|
|
17
|
+
it("should render properly with overlimit values", () => {
|
|
18
|
+
const { getByText } = render(
|
|
19
|
+
<CharacterCounter currentValue={2} maxValue={1} />
|
|
20
|
+
);
|
|
21
|
+
expect(getByText("-1")).toHaveStyleRule("color", COLOR_RED_800);
|
|
22
|
+
});
|
|
15
23
|
});
|
|
@@ -2,6 +2,7 @@ import React from "react";
|
|
|
2
2
|
import { render } from "../utils/react-testing-library";
|
|
3
3
|
import "jest-styled-components";
|
|
4
4
|
import ChartLegend from "./";
|
|
5
|
+
import { CONTRAST_THEME, COMPARE_THEME } from "../utils/chartColors";
|
|
5
6
|
|
|
6
7
|
describe("ChartLegend", () => {
|
|
7
8
|
let legendLabelsArray = [{ name: "Label One" }, { name: "Label Two" }];
|
|
@@ -14,4 +15,40 @@ describe("ChartLegend", () => {
|
|
|
14
15
|
expect(getByText("Label One")).toBeTruthy();
|
|
15
16
|
expect(getByText("Label Two")).toBeTruthy();
|
|
16
17
|
});
|
|
18
|
+
|
|
19
|
+
it("should render the correct theme", () => {
|
|
20
|
+
const { getAllByDataQaLabel } = render(
|
|
21
|
+
<ChartLegend legendLabels={legendLabelsArray} theme="contrast" />
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
expect(getAllByDataQaLabel({ swatch: "" })[0]).toHaveStyleRule(
|
|
25
|
+
"background-color",
|
|
26
|
+
CONTRAST_THEME[0]
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
expect(getAllByDataQaLabel({ swatch: "" })[1]).toHaveStyleRule(
|
|
30
|
+
"background-color",
|
|
31
|
+
CONTRAST_THEME[1]
|
|
32
|
+
);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it("should display a custom color", () => {
|
|
36
|
+
const newLegendLabelsArray = [
|
|
37
|
+
{ name: "Label One", color: "#000" },
|
|
38
|
+
{ name: "Label Two" },
|
|
39
|
+
];
|
|
40
|
+
const { getAllByDataQaLabel } = render(
|
|
41
|
+
<ChartLegend legendLabels={newLegendLabelsArray} />
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
expect(getAllByDataQaLabel({ swatch: "" })[0]).toHaveStyleRule(
|
|
45
|
+
"background-color",
|
|
46
|
+
"#000"
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
expect(getAllByDataQaLabel({ swatch: "" })[1]).toHaveStyleRule(
|
|
50
|
+
"background-color",
|
|
51
|
+
COMPARE_THEME[1]
|
|
52
|
+
);
|
|
53
|
+
});
|
|
17
54
|
});
|
|
@@ -97,6 +97,7 @@ describe("EmptyState", () => {
|
|
|
97
97
|
);
|
|
98
98
|
const element = getByText("Reload Page");
|
|
99
99
|
expect(element).toBeTruthy();
|
|
100
|
+
expect(element).toHaveStyleRule("color", "#FFFFFF");
|
|
100
101
|
});
|
|
101
102
|
|
|
102
103
|
it("should render a secondary button", async () => {
|
|
@@ -104,7 +105,7 @@ describe("EmptyState", () => {
|
|
|
104
105
|
<EmptyState
|
|
105
106
|
media={
|
|
106
107
|
<Image
|
|
107
|
-
alt="No assets matching your
|
|
108
|
+
alt="No assets matching your
search or filters"
|
|
108
109
|
src="https://cl.ly/db498c7682df/download/analytics.svg"
|
|
109
110
|
m={0}
|
|
110
111
|
/>
|
|
@@ -117,5 +118,6 @@ describe("EmptyState", () => {
|
|
|
117
118
|
);
|
|
118
119
|
const element = getByText("I'll do this later");
|
|
119
120
|
expect(element).toBeTruthy();
|
|
121
|
+
expect(element).toHaveStyleRule("color", "#515e5f");
|
|
120
122
|
});
|
|
121
123
|
});
|
|
@@ -2,6 +2,7 @@ import React from "react";
|
|
|
2
2
|
import "jest-styled-components";
|
|
3
3
|
import { render } from "../utils/react-testing-library";
|
|
4
4
|
import Link from "./";
|
|
5
|
+
import { TYPOGRAPHY_SIZE_600 } from "@sproutsocial/seeds-typography";
|
|
5
6
|
|
|
6
7
|
describe("Racine Link", () => {
|
|
7
8
|
it("should render in an anchor tag", () => {
|
|
@@ -82,6 +83,10 @@ describe("Racine Link", () => {
|
|
|
82
83
|
);
|
|
83
84
|
|
|
84
85
|
expect(getByText("Link as span").tagName).toEqual("SPAN");
|
|
86
|
+
expect(getByText("Link as span")).toHaveStyleRule(
|
|
87
|
+
"font-size",
|
|
88
|
+
TYPOGRAPHY_SIZE_600.fontSize
|
|
89
|
+
);
|
|
85
90
|
});
|
|
86
91
|
|
|
87
92
|
it("Has type attribute as button when rendered as a button element", () => {
|
|
@@ -94,4 +99,9 @@ describe("Racine Link", () => {
|
|
|
94
99
|
expect(getByText("Link").type).toBeFalsy();
|
|
95
100
|
expect(getByText("Link").type).not.toEqual("button");
|
|
96
101
|
});
|
|
102
|
+
|
|
103
|
+
it("Can render with an underline", () => {
|
|
104
|
+
const { getByText } = render(<Link underline>Link</Link>);
|
|
105
|
+
expect(getByText("Link")).toHaveStyleRule("text-decoration", "underline");
|
|
106
|
+
});
|
|
97
107
|
});
|
|
@@ -165,10 +165,6 @@ describe("Listbox", () => {
|
|
|
165
165
|
});
|
|
166
166
|
|
|
167
167
|
describe("AsListbox", () => {
|
|
168
|
-
it("should match snapshot", () => {
|
|
169
|
-
expect(render(<AsListbox />).baseElement).toMatchSnapshot();
|
|
170
|
-
});
|
|
171
|
-
|
|
172
168
|
it("should render items with option role", async () => {
|
|
173
169
|
const { findByText, queryByLabelText, queryByRole } = render(
|
|
174
170
|
<AsListbox />
|
|
@@ -211,10 +207,6 @@ describe("Listbox", () => {
|
|
|
211
207
|
});
|
|
212
208
|
|
|
213
209
|
describe("AsListbox multiselect", () => {
|
|
214
|
-
it("should match snapshot", () => {
|
|
215
|
-
expect(render(<AsListboxMultiselect />).baseElement).toMatchSnapshot();
|
|
216
|
-
});
|
|
217
|
-
|
|
218
210
|
it("should render items with option role", async () => {
|
|
219
211
|
const { queryByLabelText, queryByText, queryByRole } = render(
|
|
220
212
|
<AsListboxMultiselect />
|
|
@@ -244,10 +236,6 @@ describe("Listbox", () => {
|
|
|
244
236
|
});
|
|
245
237
|
|
|
246
238
|
describe("AsListbox with checkboxes", () => {
|
|
247
|
-
it("should match snapshot", () => {
|
|
248
|
-
expect(render(<AsListboxWithCheckboxes />).baseElement).toMatchSnapshot();
|
|
249
|
-
});
|
|
250
|
-
|
|
251
239
|
it("should render items with checkbox role", async () => {
|
|
252
240
|
const { queryByRole } = render(<AsListboxWithCheckboxes />);
|
|
253
241
|
const firstItem = queryByRole(MENU_ITEM_ROLES.CHECKBOX, {
|
|
@@ -267,12 +255,6 @@ describe("Listbox", () => {
|
|
|
267
255
|
});
|
|
268
256
|
|
|
269
257
|
describe("AsListbox with filter input", () => {
|
|
270
|
-
it("should match snapshot", () => {
|
|
271
|
-
expect(
|
|
272
|
-
render(<AsListboxWithFilterInput />).baseElement
|
|
273
|
-
).toMatchSnapshot();
|
|
274
|
-
});
|
|
275
|
-
|
|
276
258
|
it("should allow filtering", async () => {
|
|
277
259
|
const { queryByLabelText, queryAllByRole } = render(
|
|
278
260
|
<AsListboxWithFilterInput />
|
|
@@ -8,4 +8,18 @@ describe("Loader", () => {
|
|
|
8
8
|
const { getByText } = render(<Loader />);
|
|
9
9
|
expect(getByText("Loading")).toBeTruthy();
|
|
10
10
|
});
|
|
11
|
+
|
|
12
|
+
it("should render with small size class", () => {
|
|
13
|
+
const { getByDataQaLabel } = render(<Loader size="small" />);
|
|
14
|
+
expect(getByDataQaLabel({ loader: "" })).toHaveStyleRule("width", "20px");
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it("should render with light theme", () => {
|
|
18
|
+
const { getByDataQaLabel } = render(<Loader color="light" />);
|
|
19
|
+
expect(getByDataQaLabel({ loader: "" })).toHaveStyleRule(
|
|
20
|
+
"border-color",
|
|
21
|
+
"rgba(255,255,255,0.3) rgba(255,255,255,0.3) rgba(255,255,255,0.7) rgba(255,255,255,0.7)",
|
|
22
|
+
{ modifier: ":after" }
|
|
23
|
+
);
|
|
24
|
+
});
|
|
11
25
|
});
|