@primer/components 32.0.2-rc.859381a1 → 32.1.1-rc.b4502a34
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/CHANGELOG.md +13 -1
- package/dist/browser.esm.js +9 -2
- package/dist/browser.esm.js.map +1 -1
- package/dist/browser.umd.js +9 -2
- package/dist/browser.umd.js.map +1 -1
- package/docs/content/ActionList2.mdx +23 -3
- package/docs/content/Avatar.mdx +21 -1
- package/docs/content/AvatarStack.mdx +23 -3
- package/docs/content/BranchName.md +24 -4
- package/docs/content/Breadcrumbs.md +22 -1
- package/docs/content/Buttons.md +2 -1
- package/docs/content/Checkbox.md +118 -0
- package/docs/content/CircleBadge.md +1 -0
- package/docs/content/CircleOcticon.md +2 -1
- package/docs/content/CounterLabel.md +1 -1
- package/docs/content/Details.md +2 -1
- package/docs/content/Dialog.md +1 -0
- package/docs/content/Dialog2.mdx +1 -0
- package/docs/content/Dropdown.md +1 -0
- package/docs/content/DropdownMenu.mdx +1 -0
- package/docs/content/FilterList.md +1 -0
- package/docs/content/FilteredSearch.md +1 -0
- package/docs/content/Flash.md +1 -0
- package/docs/content/FormGroup.md +1 -0
- package/docs/content/Header.md +1 -0
- package/docs/content/Heading.md +8 -4
- package/docs/content/Label.md +1 -0
- package/docs/content/LabelGroup.md +1 -0
- package/docs/content/Link.md +1 -0
- package/docs/content/Overlay.mdx +1 -0
- package/docs/content/Pagehead.md +1 -0
- package/docs/content/Pagination.md +1 -0
- package/docs/content/PointerBox.md +1 -0
- package/docs/content/Popover.md +1 -0
- package/docs/content/Portal.mdx +1 -0
- package/docs/content/Position.md +2 -9
- package/docs/content/ProgressBar.mdx +1 -0
- package/docs/content/SelectMenu.md +1 -0
- package/docs/content/SideNav.md +1 -0
- package/docs/content/StateLabel.md +1 -0
- package/docs/content/StyledOcticon.md +1 -1
- package/docs/content/SubNav.md +1 -0
- package/docs/content/TabNav.md +1 -0
- package/docs/content/Text.md +10 -3
- package/docs/content/TextInput.md +9 -1
- package/docs/content/Timeline.md +1 -0
- package/docs/content/Tooltip.md +1 -0
- package/docs/content/Truncate.md +1 -0
- package/docs/content/UnderlineNav.md +1 -0
- package/docs/content/status.mdx +10 -0
- package/docs/src/@primer/gatsby-theme-doctocat/mdx-components.js +9 -0
- package/docs/src/@primer/gatsby-theme-doctocat/nav.yml +4 -0
- package/docs/src/component-statuses.js +74 -0
- package/lib/ActionList/Item.js +3 -3
- package/lib/ActionList2/Item.js +3 -1
- package/lib/ActionList2/List.js +1 -2
- package/lib/ActionList2/Selection.js +3 -1
- package/lib/Autocomplete/Autocomplete.d.ts +1 -0
- package/lib/Autocomplete/AutocompleteInput.d.ts +1 -0
- package/lib/Button/Button.d.ts +1 -0
- package/lib/Button/ButtonClose.d.ts +2 -1
- package/lib/Button/ButtonDanger.d.ts +1 -0
- package/lib/Button/ButtonInvisible.d.ts +1 -0
- package/lib/Button/ButtonOutline.d.ts +1 -0
- package/lib/Button/ButtonPrimary.d.ts +1 -0
- package/lib/Checkbox.d.ts +29 -0
- package/lib/Checkbox.js +64 -0
- package/lib/CircleOcticon.d.ts +1 -0
- package/lib/Dialog.d.ts +3 -2
- package/lib/Dropdown.d.ts +4 -0
- package/lib/DropdownMenu/DropdownButton.d.ts +2 -1
- package/lib/FilterList.d.ts +1 -0
- package/lib/Position.d.ts +4 -4
- package/lib/SelectMenu/SelectMenu.d.ts +10 -4
- package/lib/SelectMenu/SelectMenuItem.d.ts +1 -1
- package/lib/SelectMenu/SelectMenuModal.d.ts +1 -1
- package/lib/TextInputWithTokens.d.ts +1 -0
- package/lib/Token/AvatarToken.d.ts +1 -1
- package/lib/Token/IssueLabelToken.d.ts +1 -1
- package/lib/Token/Token.d.ts +1 -1
- package/lib/__tests__/ActionList2.test.d.ts +1 -0
- package/lib/__tests__/ActionList2.test.js +117 -0
- package/lib/__tests__/Checkbox.test.d.ts +2 -0
- package/lib/__tests__/Checkbox.test.js +189 -0
- package/lib/__tests__/themePreval.test.d.ts +1 -0
- package/lib/__tests__/themePreval.test.js +14 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +8 -0
- package/lib/stories/ActionList2.stories.js +20 -6
- package/lib/stories/Checkbox.stories.js +227 -0
- package/lib/utils/testing.d.ts +1 -0
- package/lib/utils/testing.js +29 -0
- package/lib-esm/ActionList/Item.js +3 -3
- package/lib-esm/ActionList2/Item.js +3 -1
- package/lib-esm/ActionList2/List.js +1 -2
- package/lib-esm/ActionList2/Selection.js +3 -1
- package/lib-esm/Autocomplete/Autocomplete.d.ts +1 -0
- package/lib-esm/Autocomplete/AutocompleteInput.d.ts +1 -0
- package/lib-esm/Button/Button.d.ts +1 -0
- package/lib-esm/Button/ButtonClose.d.ts +2 -1
- package/lib-esm/Button/ButtonDanger.d.ts +1 -0
- package/lib-esm/Button/ButtonInvisible.d.ts +1 -0
- package/lib-esm/Button/ButtonOutline.d.ts +1 -0
- package/lib-esm/Button/ButtonPrimary.d.ts +1 -0
- package/lib-esm/Checkbox.d.ts +29 -0
- package/lib-esm/Checkbox.js +44 -0
- package/lib-esm/CircleOcticon.d.ts +1 -0
- package/lib-esm/Dialog.d.ts +3 -2
- package/lib-esm/Dropdown.d.ts +4 -0
- package/lib-esm/DropdownMenu/DropdownButton.d.ts +2 -1
- package/lib-esm/FilterList.d.ts +1 -0
- package/lib-esm/Position.d.ts +4 -4
- package/lib-esm/SelectMenu/SelectMenu.d.ts +10 -4
- package/lib-esm/SelectMenu/SelectMenuItem.d.ts +1 -1
- package/lib-esm/SelectMenu/SelectMenuModal.d.ts +1 -1
- package/lib-esm/TextInputWithTokens.d.ts +1 -0
- package/lib-esm/Token/AvatarToken.d.ts +1 -1
- package/lib-esm/Token/IssueLabelToken.d.ts +1 -1
- package/lib-esm/Token/Token.d.ts +1 -1
- package/lib-esm/__tests__/ActionList2.test.d.ts +1 -0
- package/lib-esm/__tests__/ActionList2.test.js +105 -2
- package/lib-esm/__tests__/Checkbox.test.d.ts +2 -0
- package/lib-esm/__tests__/Checkbox.test.js +169 -0
- package/lib-esm/__tests__/themePreval.test.d.ts +1 -0
- package/lib-esm/__tests__/themePreval.test.js +7 -0
- package/lib-esm/index.d.ts +2 -0
- package/lib-esm/index.js +1 -0
- package/lib-esm/stories/ActionList2.stories.js +20 -6
- package/lib-esm/stories/Checkbox.stories.js +197 -0
- package/lib-esm/utils/testing.d.ts +1 -0
- package/lib-esm/utils/testing.js +24 -0
- package/package-lock.json +179 -20
- package/package.json +2 -2
- package/src/ActionList/Item.tsx +2 -1
- package/src/ActionList2/Item.tsx +3 -2
- package/src/ActionList2/List.tsx +1 -6
- package/src/ActionList2/Selection.tsx +2 -1
- package/src/Checkbox.tsx +75 -0
- package/src/__tests__/ActionList2.test.tsx +111 -2
- package/src/__tests__/Checkbox.test.tsx +155 -0
- package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +13 -0
- package/src/__tests__/__snapshots__/Checkbox.test.tsx.snap +16 -0
- package/src/__tests__/__snapshots__/themePreval.test.ts.snap +3176 -0
- package/src/__tests__/themePreval.test.ts +8 -0
- package/src/index.ts +3 -0
- package/src/stories/ActionList2.stories.tsx +22 -8
- package/src/stories/Checkbox.stories.tsx +164 -0
- package/src/utils/testing.tsx +22 -0
- package/stats.html +1 -1
- package/docs/content/TextInputTokens.mdx +0 -89
- package/lib/ActionList2/Header.d.ts +0 -26
- package/lib/ActionList2/Header.js +0 -55
- package/lib-esm/ActionList2/Header.d.ts +0 -26
- package/lib-esm/ActionList2/Header.js +0 -44
- package/src/ActionList2/Header.tsx +0 -58
@@ -0,0 +1,197 @@
|
|
1
|
+
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
2
|
+
|
3
|
+
import React, { useLayoutEffect, useRef, useState } from 'react';
|
4
|
+
import styled from 'styled-components';
|
5
|
+
import { BaseStyles, Box, Checkbox, Text, ThemeProvider } from '..';
|
6
|
+
import { action } from '@storybook/addon-actions';
|
7
|
+
import { COMMON, get } from '../constants';
|
8
|
+
export default {
|
9
|
+
title: 'Forms/Checkbox',
|
10
|
+
component: Checkbox,
|
11
|
+
decorators: [Story => {
|
12
|
+
return /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(BaseStyles, null, /*#__PURE__*/React.createElement(Box, {
|
13
|
+
paddingTop: 5
|
14
|
+
}, Story())));
|
15
|
+
}],
|
16
|
+
argTypes: {
|
17
|
+
sx: {
|
18
|
+
table: {
|
19
|
+
disable: true
|
20
|
+
}
|
21
|
+
},
|
22
|
+
disabled: {
|
23
|
+
name: 'Disabled',
|
24
|
+
defaultValue: false,
|
25
|
+
control: {
|
26
|
+
type: 'boolean'
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
30
|
+
};
|
31
|
+
const StyledLabel = styled.label.withConfig({
|
32
|
+
displayName: "Checkboxstories__StyledLabel",
|
33
|
+
componentId: "sdupvr-0"
|
34
|
+
})(["user-select:none;font-weight:600;font-size:14px;line-height:18px;margin-left:16px;", ""], COMMON);
|
35
|
+
const StyledSubLabel = styled(Text).withConfig({
|
36
|
+
displayName: "Checkboxstories__StyledSubLabel",
|
37
|
+
componentId: "sdupvr-1"
|
38
|
+
})(["color:", ";font-size:13px;", ""], get('colors.fg.muted'), COMMON);
|
39
|
+
export const Default = args => {
|
40
|
+
const [isChecked, setChecked] = useState(false);
|
41
|
+
|
42
|
+
const handleChange = event => {
|
43
|
+
setChecked(event.target.checked);
|
44
|
+
action('Change event triggered');
|
45
|
+
};
|
46
|
+
|
47
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Box, {
|
48
|
+
as: "form",
|
49
|
+
sx: {
|
50
|
+
p: 3,
|
51
|
+
display: 'flex',
|
52
|
+
alignItems: 'flex-start'
|
53
|
+
}
|
54
|
+
}, /*#__PURE__*/React.createElement(Checkbox, _extends({
|
55
|
+
id: "controlled-checkbox",
|
56
|
+
onChange: handleChange,
|
57
|
+
checked: isChecked
|
58
|
+
}, args)), /*#__PURE__*/React.createElement(StyledLabel, {
|
59
|
+
htmlFor: "controlled-checkbox"
|
60
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
61
|
+
sx: {
|
62
|
+
display: 'block'
|
63
|
+
}
|
64
|
+
}, "Default checkbox"), /*#__PURE__*/React.createElement(StyledSubLabel, null, "controlled"))), /*#__PURE__*/React.createElement(Box, {
|
65
|
+
as: "form",
|
66
|
+
sx: {
|
67
|
+
p: 3,
|
68
|
+
display: 'flex',
|
69
|
+
alignItems: 'flex-start'
|
70
|
+
}
|
71
|
+
}, /*#__PURE__*/React.createElement(Checkbox, _extends({
|
72
|
+
id: "always-checked-checkbox",
|
73
|
+
checked: true
|
74
|
+
}, args)), /*#__PURE__*/React.createElement(StyledLabel, {
|
75
|
+
htmlFor: "always-checked-checkbox"
|
76
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
77
|
+
sx: {
|
78
|
+
display: 'block'
|
79
|
+
}
|
80
|
+
}, "Always checked"), /*#__PURE__*/React.createElement(StyledSubLabel, null, "checked=\"true\""))), /*#__PURE__*/React.createElement(Box, {
|
81
|
+
as: "form",
|
82
|
+
sx: {
|
83
|
+
p: 3,
|
84
|
+
display: 'flex',
|
85
|
+
alignItems: 'flex-start'
|
86
|
+
}
|
87
|
+
}, /*#__PURE__*/React.createElement(Checkbox, _extends({
|
88
|
+
id: "always-unchecked-checkbox",
|
89
|
+
checked: false
|
90
|
+
}, args)), /*#__PURE__*/React.createElement(StyledLabel, {
|
91
|
+
htmlFor: "always-unchecked-checkbox"
|
92
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
93
|
+
sx: {
|
94
|
+
display: 'block'
|
95
|
+
}
|
96
|
+
}, "Always unchecked"), /*#__PURE__*/React.createElement(StyledSubLabel, null, "checked=\"false\""))), /*#__PURE__*/React.createElement(Box, {
|
97
|
+
as: "form",
|
98
|
+
sx: {
|
99
|
+
p: 3,
|
100
|
+
display: 'flex',
|
101
|
+
alignItems: 'flex-start'
|
102
|
+
}
|
103
|
+
}, /*#__PURE__*/React.createElement(Checkbox, {
|
104
|
+
id: "disabled-checkbox",
|
105
|
+
disabled: true,
|
106
|
+
checked: false
|
107
|
+
}), /*#__PURE__*/React.createElement(StyledLabel, {
|
108
|
+
htmlFor: "disabled-checkbox"
|
109
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
110
|
+
sx: {
|
111
|
+
display: 'block'
|
112
|
+
}
|
113
|
+
}, "Inactive"), /*#__PURE__*/React.createElement(StyledSubLabel, null, "disabled=\"true\""))));
|
114
|
+
};
|
115
|
+
export const Uncontrolled = args => {
|
116
|
+
const checkboxRef = useRef(null);
|
117
|
+
useLayoutEffect(() => {
|
118
|
+
if (checkboxRef.current) {
|
119
|
+
checkboxRef.current.checked = true;
|
120
|
+
}
|
121
|
+
}, []);
|
122
|
+
return /*#__PURE__*/React.createElement(Box, {
|
123
|
+
as: "form",
|
124
|
+
sx: {
|
125
|
+
p: 3,
|
126
|
+
display: 'flex',
|
127
|
+
alignItems: 'flex-start'
|
128
|
+
}
|
129
|
+
}, /*#__PURE__*/React.createElement(Checkbox, _extends({
|
130
|
+
id: "uncontrolled-checkbox",
|
131
|
+
ref: checkboxRef
|
132
|
+
}, args)), /*#__PURE__*/React.createElement(StyledLabel, {
|
133
|
+
htmlFor: "uncontrolled-checkbox"
|
134
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
135
|
+
sx: {
|
136
|
+
display: 'block'
|
137
|
+
}
|
138
|
+
}, "Uncontrolled checkbox"), /*#__PURE__*/React.createElement(StyledSubLabel, null, "Checked by default")));
|
139
|
+
};
|
140
|
+
Uncontrolled.displayName = "Uncontrolled";
|
141
|
+
export const Indeterminate = args => {
|
142
|
+
const [checkboxes, setCheckboxes] = useState([false, false, false, false]);
|
143
|
+
|
144
|
+
const handleChange = (_, index) => {
|
145
|
+
const newCheckboxes = [...checkboxes];
|
146
|
+
newCheckboxes[index] = !checkboxes[index];
|
147
|
+
setCheckboxes(newCheckboxes);
|
148
|
+
};
|
149
|
+
|
150
|
+
const handleIndeterminateChange = () => {
|
151
|
+
if (checkboxes.every(checkbox => checkbox)) {
|
152
|
+
return setCheckboxes(checkboxes.map(() => false));
|
153
|
+
}
|
154
|
+
|
155
|
+
const newCheckboxes = checkboxes.map(() => true);
|
156
|
+
setCheckboxes(newCheckboxes);
|
157
|
+
};
|
158
|
+
|
159
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Box, {
|
160
|
+
as: "form",
|
161
|
+
sx: {
|
162
|
+
p: 3,
|
163
|
+
display: 'flex',
|
164
|
+
alignItems: 'flex-start'
|
165
|
+
}
|
166
|
+
}, /*#__PURE__*/React.createElement(Checkbox, {
|
167
|
+
id: "indeterminate-checkbox",
|
168
|
+
checked: checkboxes.every(Boolean),
|
169
|
+
onChange: handleIndeterminateChange,
|
170
|
+
indeterminate: !checkboxes.every(Boolean)
|
171
|
+
}), /*#__PURE__*/React.createElement(StyledLabel, {
|
172
|
+
htmlFor: "controlled-checkbox"
|
173
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
174
|
+
sx: {
|
175
|
+
display: 'block'
|
176
|
+
}
|
177
|
+
}, "Default checkbox"), /*#__PURE__*/React.createElement(StyledSubLabel, null, "controlled"))), checkboxes.map((field, index) => /*#__PURE__*/React.createElement(Box, {
|
178
|
+
key: `sub-checkbox-${index}`,
|
179
|
+
as: "form",
|
180
|
+
sx: {
|
181
|
+
p: 1,
|
182
|
+
pl: 7,
|
183
|
+
display: 'flex',
|
184
|
+
alignItems: 'flex-start'
|
185
|
+
}
|
186
|
+
}, /*#__PURE__*/React.createElement(Checkbox, _extends({
|
187
|
+
id: `sub-checkbox-${index}`,
|
188
|
+
checked: checkboxes[index],
|
189
|
+
onChange: event => handleChange(event, index)
|
190
|
+
}, args)), /*#__PURE__*/React.createElement(StyledLabel, {
|
191
|
+
htmlFor: `sub-checkbox-${index}`
|
192
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
193
|
+
sx: {
|
194
|
+
display: 'block'
|
195
|
+
}
|
196
|
+
}, "Checkbox ", index + 1)))));
|
197
|
+
};
|
@@ -541,4 +541,5 @@ interface BehavesAsComponent {
|
|
541
541
|
}
|
542
542
|
export declare function behavesAsComponent({ Component, toRender, options }: BehavesAsComponent): void;
|
543
543
|
export declare function checkExports(path: string, exports: Record<any, any>): void;
|
544
|
+
export declare function checkStoriesForAxeViolations(name: string): void;
|
544
545
|
export {};
|
package/lib-esm/utils/testing.js
CHANGED
@@ -3,6 +3,8 @@ import { promisify } from 'util';
|
|
3
3
|
import renderer from 'react-test-renderer';
|
4
4
|
import enzyme from 'enzyme';
|
5
5
|
import Adapter from '@wojtekmaj/enzyme-adapter-react-17';
|
6
|
+
import { cleanup, render as HTMLRender } from '@testing-library/react';
|
7
|
+
import { axe, toHaveNoViolations } from 'jest-axe';
|
6
8
|
import { ThemeProvider } from '..';
|
7
9
|
import { default as defaultTheme } from '../theme';
|
8
10
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
@@ -219,4 +221,26 @@ export function checkExports(path, exports) {
|
|
219
221
|
|
220
222
|
expect(mod).toSetExports(exports);
|
221
223
|
});
|
224
|
+
}
|
225
|
+
expect.extend(toHaveNoViolations);
|
226
|
+
export function checkStoriesForAxeViolations(name) {
|
227
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
228
|
+
const stories = require(`../stories/${name}.stories`); // eslint-disable-next-line @typescript-eslint/no-unused-vars -- _meta
|
229
|
+
|
230
|
+
|
231
|
+
const {
|
232
|
+
default: _meta,
|
233
|
+
...Stories
|
234
|
+
} = stories;
|
235
|
+
Object.values(Stories).map(Story => {
|
236
|
+
if (typeof Story !== 'function') return;
|
237
|
+
it(`story ${Story.storyName} should have no axe violations`, async () => {
|
238
|
+
const {
|
239
|
+
container
|
240
|
+
} = HTMLRender( /*#__PURE__*/React.createElement(Story, null));
|
241
|
+
const results = await axe(container);
|
242
|
+
expect(results).toHaveNoViolations();
|
243
|
+
cleanup();
|
244
|
+
});
|
245
|
+
});
|
222
246
|
}
|
package/package-lock.json
CHANGED
@@ -46091,13 +46091,118 @@
|
|
46091
46091
|
}
|
46092
46092
|
},
|
46093
46093
|
"@types/jest": {
|
46094
|
-
"version": "
|
46095
|
-
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-
|
46096
|
-
"integrity": "sha512-
|
46094
|
+
"version": "27.0.2",
|
46095
|
+
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.2.tgz",
|
46096
|
+
"integrity": "sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==",
|
46097
46097
|
"dev": true,
|
46098
46098
|
"requires": {
|
46099
|
-
"jest-diff": "^
|
46100
|
-
"pretty-format": "^
|
46099
|
+
"jest-diff": "^27.0.0",
|
46100
|
+
"pretty-format": "^27.0.0"
|
46101
|
+
},
|
46102
|
+
"dependencies": {
|
46103
|
+
"@jest/types": {
|
46104
|
+
"version": "27.2.4",
|
46105
|
+
"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.4.tgz",
|
46106
|
+
"integrity": "sha512-IDO2ezTxeMvQAHxzG/ZvEyA47q0aVfzT95rGFl7bZs/Go0aIucvfDbS2rmnoEdXxlLQhcolmoG/wvL/uKx4tKA==",
|
46107
|
+
"dev": true,
|
46108
|
+
"requires": {
|
46109
|
+
"@types/istanbul-lib-coverage": "^2.0.0",
|
46110
|
+
"@types/istanbul-reports": "^3.0.0",
|
46111
|
+
"@types/node": "*",
|
46112
|
+
"@types/yargs": "^16.0.0",
|
46113
|
+
"chalk": "^4.0.0"
|
46114
|
+
}
|
46115
|
+
},
|
46116
|
+
"@types/yargs": {
|
46117
|
+
"version": "16.0.4",
|
46118
|
+
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz",
|
46119
|
+
"integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==",
|
46120
|
+
"dev": true,
|
46121
|
+
"requires": {
|
46122
|
+
"@types/yargs-parser": "*"
|
46123
|
+
}
|
46124
|
+
},
|
46125
|
+
"ansi-regex": {
|
46126
|
+
"version": "5.0.1",
|
46127
|
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
46128
|
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
46129
|
+
"dev": true
|
46130
|
+
},
|
46131
|
+
"ansi-styles": {
|
46132
|
+
"version": "5.2.0",
|
46133
|
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
|
46134
|
+
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
|
46135
|
+
"dev": true
|
46136
|
+
},
|
46137
|
+
"chalk": {
|
46138
|
+
"version": "4.1.2",
|
46139
|
+
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
46140
|
+
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
46141
|
+
"dev": true,
|
46142
|
+
"requires": {
|
46143
|
+
"ansi-styles": "^4.1.0",
|
46144
|
+
"supports-color": "^7.1.0"
|
46145
|
+
},
|
46146
|
+
"dependencies": {
|
46147
|
+
"ansi-styles": {
|
46148
|
+
"version": "4.3.0",
|
46149
|
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
46150
|
+
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
46151
|
+
"dev": true,
|
46152
|
+
"requires": {
|
46153
|
+
"color-convert": "^2.0.1"
|
46154
|
+
}
|
46155
|
+
}
|
46156
|
+
}
|
46157
|
+
},
|
46158
|
+
"color-convert": {
|
46159
|
+
"version": "2.0.1",
|
46160
|
+
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
46161
|
+
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
46162
|
+
"dev": true,
|
46163
|
+
"requires": {
|
46164
|
+
"color-name": "~1.1.4"
|
46165
|
+
}
|
46166
|
+
},
|
46167
|
+
"color-name": {
|
46168
|
+
"version": "1.1.4",
|
46169
|
+
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
46170
|
+
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
46171
|
+
"dev": true
|
46172
|
+
},
|
46173
|
+
"has-flag": {
|
46174
|
+
"version": "4.0.0",
|
46175
|
+
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
46176
|
+
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
46177
|
+
"dev": true
|
46178
|
+
},
|
46179
|
+
"pretty-format": {
|
46180
|
+
"version": "27.2.4",
|
46181
|
+
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.4.tgz",
|
46182
|
+
"integrity": "sha512-NUjw22WJHldzxyps2YjLZkUj6q1HvjqFezkB9Y2cklN8NtVZN/kZEXGZdFw4uny3oENzV5EEMESrkI0YDUH8vg==",
|
46183
|
+
"dev": true,
|
46184
|
+
"requires": {
|
46185
|
+
"@jest/types": "^27.2.4",
|
46186
|
+
"ansi-regex": "^5.0.1",
|
46187
|
+
"ansi-styles": "^5.0.0",
|
46188
|
+
"react-is": "^17.0.1"
|
46189
|
+
}
|
46190
|
+
},
|
46191
|
+
"react-is": {
|
46192
|
+
"version": "17.0.2",
|
46193
|
+
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
|
46194
|
+
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
|
46195
|
+
"dev": true
|
46196
|
+
},
|
46197
|
+
"supports-color": {
|
46198
|
+
"version": "7.2.0",
|
46199
|
+
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
46200
|
+
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
46201
|
+
"dev": true,
|
46202
|
+
"requires": {
|
46203
|
+
"has-flag": "^4.0.0"
|
46204
|
+
}
|
46205
|
+
}
|
46101
46206
|
}
|
46102
46207
|
},
|
46103
46208
|
"@types/jest-axe": {
|
@@ -50719,9 +50824,9 @@
|
|
50719
50824
|
"dev": true
|
50720
50825
|
},
|
50721
50826
|
"diff-sequences": {
|
50722
|
-
"version": "
|
50723
|
-
"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-
|
50724
|
-
"integrity": "sha512-
|
50827
|
+
"version": "27.0.6",
|
50828
|
+
"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz",
|
50829
|
+
"integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==",
|
50725
50830
|
"dev": true
|
50726
50831
|
},
|
50727
50832
|
"diffie-hellman": {
|
@@ -55670,17 +55775,45 @@
|
|
55670
55775
|
}
|
55671
55776
|
},
|
55672
55777
|
"jest-diff": {
|
55673
|
-
"version": "
|
55674
|
-
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-
|
55675
|
-
"integrity": "sha512-
|
55778
|
+
"version": "27.2.4",
|
55779
|
+
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.4.tgz",
|
55780
|
+
"integrity": "sha512-bLAVlDSCR3gqUPGv+4nzVpEXGsHh98HjUL7Vb2hVyyuBDoQmja8eJb0imUABsuxBeUVmf47taJSAd9nDrwWKEg==",
|
55676
55781
|
"dev": true,
|
55677
55782
|
"requires": {
|
55678
55783
|
"chalk": "^4.0.0",
|
55679
|
-
"diff-sequences": "^
|
55680
|
-
"jest-get-type": "^
|
55681
|
-
"pretty-format": "^
|
55784
|
+
"diff-sequences": "^27.0.6",
|
55785
|
+
"jest-get-type": "^27.0.6",
|
55786
|
+
"pretty-format": "^27.2.4"
|
55682
55787
|
},
|
55683
55788
|
"dependencies": {
|
55789
|
+
"@jest/types": {
|
55790
|
+
"version": "27.2.4",
|
55791
|
+
"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.4.tgz",
|
55792
|
+
"integrity": "sha512-IDO2ezTxeMvQAHxzG/ZvEyA47q0aVfzT95rGFl7bZs/Go0aIucvfDbS2rmnoEdXxlLQhcolmoG/wvL/uKx4tKA==",
|
55793
|
+
"dev": true,
|
55794
|
+
"requires": {
|
55795
|
+
"@types/istanbul-lib-coverage": "^2.0.0",
|
55796
|
+
"@types/istanbul-reports": "^3.0.0",
|
55797
|
+
"@types/node": "*",
|
55798
|
+
"@types/yargs": "^16.0.0",
|
55799
|
+
"chalk": "^4.0.0"
|
55800
|
+
}
|
55801
|
+
},
|
55802
|
+
"@types/yargs": {
|
55803
|
+
"version": "16.0.4",
|
55804
|
+
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz",
|
55805
|
+
"integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==",
|
55806
|
+
"dev": true,
|
55807
|
+
"requires": {
|
55808
|
+
"@types/yargs-parser": "*"
|
55809
|
+
}
|
55810
|
+
},
|
55811
|
+
"ansi-regex": {
|
55812
|
+
"version": "5.0.1",
|
55813
|
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
55814
|
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
55815
|
+
"dev": true
|
55816
|
+
},
|
55684
55817
|
"ansi-styles": {
|
55685
55818
|
"version": "4.3.0",
|
55686
55819
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
@@ -55691,9 +55824,9 @@
|
|
55691
55824
|
}
|
55692
55825
|
},
|
55693
55826
|
"chalk": {
|
55694
|
-
"version": "4.1.
|
55695
|
-
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.
|
55696
|
-
"integrity": "sha512-
|
55827
|
+
"version": "4.1.2",
|
55828
|
+
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
55829
|
+
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
55697
55830
|
"dev": true,
|
55698
55831
|
"requires": {
|
55699
55832
|
"ansi-styles": "^4.1.0",
|
@@ -55721,6 +55854,32 @@
|
|
55721
55854
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
55722
55855
|
"dev": true
|
55723
55856
|
},
|
55857
|
+
"pretty-format": {
|
55858
|
+
"version": "27.2.4",
|
55859
|
+
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.4.tgz",
|
55860
|
+
"integrity": "sha512-NUjw22WJHldzxyps2YjLZkUj6q1HvjqFezkB9Y2cklN8NtVZN/kZEXGZdFw4uny3oENzV5EEMESrkI0YDUH8vg==",
|
55861
|
+
"dev": true,
|
55862
|
+
"requires": {
|
55863
|
+
"@jest/types": "^27.2.4",
|
55864
|
+
"ansi-regex": "^5.0.1",
|
55865
|
+
"ansi-styles": "^5.0.0",
|
55866
|
+
"react-is": "^17.0.1"
|
55867
|
+
},
|
55868
|
+
"dependencies": {
|
55869
|
+
"ansi-styles": {
|
55870
|
+
"version": "5.2.0",
|
55871
|
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
|
55872
|
+
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
|
55873
|
+
"dev": true
|
55874
|
+
}
|
55875
|
+
}
|
55876
|
+
},
|
55877
|
+
"react-is": {
|
55878
|
+
"version": "17.0.2",
|
55879
|
+
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
|
55880
|
+
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
|
55881
|
+
"dev": true
|
55882
|
+
},
|
55724
55883
|
"supports-color": {
|
55725
55884
|
"version": "7.2.0",
|
55726
55885
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
@@ -56128,9 +56287,9 @@
|
|
56128
56287
|
}
|
56129
56288
|
},
|
56130
56289
|
"jest-get-type": {
|
56131
|
-
"version": "
|
56132
|
-
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-
|
56133
|
-
"integrity": "sha512-
|
56290
|
+
"version": "27.0.6",
|
56291
|
+
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
|
56292
|
+
"integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
|
56134
56293
|
"dev": true
|
56135
56294
|
},
|
56136
56295
|
"jest-haste-map": {
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@primer/components",
|
3
|
-
"version": "32.
|
3
|
+
"version": "32.1.1-rc.b4502a34",
|
4
4
|
"description": "Primer react components",
|
5
5
|
"main": "lib/index.js",
|
6
6
|
"module": "lib-esm/index.js",
|
@@ -87,7 +87,7 @@
|
|
87
87
|
"@testing-library/user-event": "13.1.9",
|
88
88
|
"@types/chroma-js": "2.1.3",
|
89
89
|
"@types/enzyme": "3.10.9",
|
90
|
-
"@types/jest": "
|
90
|
+
"@types/jest": "27.0.2",
|
91
91
|
"@types/jest-axe": "3.5.3",
|
92
92
|
"@types/lodash.isempty": "4.4.6",
|
93
93
|
"@types/lodash.isobject": "3.0.6",
|
package/src/ActionList/Item.tsx
CHANGED
@@ -275,6 +275,7 @@ const BaseVisualContainer = styled.div<{variant?: ItemProps['variant']; disabled
|
|
275
275
|
display: flex;
|
276
276
|
justify-content: center;
|
277
277
|
align-items: center;
|
278
|
+
flex-shrink: 0;
|
278
279
|
`
|
279
280
|
|
280
281
|
const ColoredVisualContainer = styled(BaseVisualContainer)`
|
@@ -285,7 +286,6 @@ const ColoredVisualContainer = styled(BaseVisualContainer)`
|
|
285
286
|
`
|
286
287
|
|
287
288
|
const LeadingVisualContainer = styled(ColoredVisualContainer)`
|
288
|
-
flex-shrink: 0;
|
289
289
|
display: flex;
|
290
290
|
flex-direction: column;
|
291
291
|
justify-content: center;
|
@@ -317,6 +317,7 @@ const MultiSelectIcon = styled.svg<{selected?: boolean}>`
|
|
317
317
|
rect {
|
318
318
|
fill: ${({selected}) => (selected ? get('colors.accent.fg') : get('colors.canvas.default'))};
|
319
319
|
stroke: ${({selected}) => (selected ? get('colors.accent.fg') : get('colors.border.default'))};
|
320
|
+
shape-rendering: auto; // this is a workaround to override global style in github/github, see primer/react#1666
|
320
321
|
}
|
321
322
|
path {
|
322
323
|
fill: ${get('colors.fg.onEmphasis')};
|
package/src/ActionList2/Item.tsx
CHANGED
@@ -91,7 +91,7 @@ export const Item = React.forwardRef<HTMLLIElement, ItemProps>(
|
|
91
91
|
variant = 'default',
|
92
92
|
disabled = false,
|
93
93
|
selected = undefined,
|
94
|
-
onSelect
|
94
|
+
onSelect,
|
95
95
|
sx: sxProp = {},
|
96
96
|
id,
|
97
97
|
_PrivateItemWrapper,
|
@@ -168,6 +168,7 @@ export const Item = React.forwardRef<HTMLLIElement, ItemProps>(
|
|
168
168
|
|
169
169
|
const clickHandler = React.useCallback(
|
170
170
|
event => {
|
171
|
+
if (typeof onSelect !== 'function') return
|
171
172
|
if (disabled) return
|
172
173
|
if (!event.defaultPrevented) onSelect(event)
|
173
174
|
},
|
@@ -176,8 +177,8 @@ export const Item = React.forwardRef<HTMLLIElement, ItemProps>(
|
|
176
177
|
|
177
178
|
const keyPressHandler = React.useCallback(
|
178
179
|
event => {
|
180
|
+
if (typeof onSelect !== 'function') return
|
179
181
|
if (disabled) return
|
180
|
-
|
181
182
|
if (!event.defaultPrevented && [' ', 'Enter'].includes(event.key)) {
|
182
183
|
onSelect(event)
|
183
184
|
}
|
package/src/ActionList2/List.tsx
CHANGED
@@ -40,12 +40,7 @@ export const List = React.forwardRef<HTMLUListElement, ListProps>(
|
|
40
40
|
}
|
41
41
|
|
42
42
|
return (
|
43
|
-
<ListBox
|
44
|
-
sx={merge(styles, sxProp as SxProp)}
|
45
|
-
aria-multiselectable={selectionVariant === 'multiple' ? true : undefined}
|
46
|
-
{...props}
|
47
|
-
ref={forwardedRef}
|
48
|
-
>
|
43
|
+
<ListBox sx={merge(styles, sxProp as SxProp)} {...props} ref={forwardedRef}>
|
49
44
|
<ListContext.Provider value={{variant, selectionVariant, showDividers}}>{props.children}</ListContext.Provider>
|
50
45
|
</ListBox>
|
51
46
|
)
|
@@ -38,7 +38,8 @@ export const Selection: React.FC<SelectionProps> = ({selected}) => {
|
|
38
38
|
sx={{
|
39
39
|
rect: {
|
40
40
|
fill: selected ? 'accent.fg' : 'canvas.default',
|
41
|
-
stroke: selected ? 'accent.fg' : 'border.default'
|
41
|
+
stroke: selected ? 'accent.fg' : 'border.default',
|
42
|
+
shapeRendering: 'auto' // this is a workaround to override global style in github/github, see primer/react#1666
|
42
43
|
},
|
43
44
|
path: {
|
44
45
|
fill: 'fg.onEmphasis',
|
package/src/Checkbox.tsx
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
import styled from 'styled-components'
|
2
|
+
import {useProvidedRefOrCreate} from './hooks'
|
3
|
+
import React, {InputHTMLAttributes, ReactElement, useLayoutEffect} from 'react'
|
4
|
+
import sx, {SxProp} from './sx'
|
5
|
+
|
6
|
+
export type CheckboxProps = {
|
7
|
+
/**
|
8
|
+
* Apply indeterminate visual appearance to the checkbox
|
9
|
+
*/
|
10
|
+
indeterminate?: boolean
|
11
|
+
/**
|
12
|
+
* Apply inactive visual appearance to the checkbox
|
13
|
+
*/
|
14
|
+
disabled?: boolean
|
15
|
+
/**
|
16
|
+
* Forward a ref to the underlying input element
|
17
|
+
*/
|
18
|
+
ref?: React.RefObject<HTMLInputElement>
|
19
|
+
/**
|
20
|
+
* Indicates whether the checkbox must be checked
|
21
|
+
*/
|
22
|
+
required?: boolean
|
23
|
+
|
24
|
+
/**
|
25
|
+
* Indicates whether the checkbox validation state
|
26
|
+
*/
|
27
|
+
validationStatus?: 'error' | 'success' // TODO: hoist to Validation typings
|
28
|
+
} & InputHTMLAttributes<HTMLInputElement> &
|
29
|
+
SxProp
|
30
|
+
|
31
|
+
const StyledCheckbox = styled.input`
|
32
|
+
cursor: pointer;
|
33
|
+
|
34
|
+
${props => props.disabled && `cursor: not-allowed;`}
|
35
|
+
|
36
|
+
${sx}
|
37
|
+
`
|
38
|
+
|
39
|
+
/**
|
40
|
+
* An accessible, native checkbox component
|
41
|
+
*/
|
42
|
+
const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
|
43
|
+
(
|
44
|
+
{checked, indeterminate, disabled, sx: sxProp, required, validationStatus, ...rest}: CheckboxProps,
|
45
|
+
ref
|
46
|
+
): ReactElement => {
|
47
|
+
const checkboxRef = useProvidedRefOrCreate(ref as React.RefObject<HTMLInputElement>)
|
48
|
+
|
49
|
+
useLayoutEffect(() => {
|
50
|
+
if (checkboxRef.current) {
|
51
|
+
checkboxRef.current.indeterminate = indeterminate || false
|
52
|
+
}
|
53
|
+
}, [indeterminate, checked, checkboxRef])
|
54
|
+
|
55
|
+
return (
|
56
|
+
<StyledCheckbox
|
57
|
+
type="checkbox"
|
58
|
+
disabled={disabled}
|
59
|
+
aria-disabled={disabled ? 'true' : 'false'}
|
60
|
+
ref={ref || checkboxRef}
|
61
|
+
checked={indeterminate ? false : checked}
|
62
|
+
aria-checked={indeterminate ? 'mixed' : checked ? 'true' : 'false'}
|
63
|
+
sx={sxProp}
|
64
|
+
required={required}
|
65
|
+
aria-required={required ? 'true' : 'false'}
|
66
|
+
aria-invalid={validationStatus === 'error' ? 'true' : 'false'}
|
67
|
+
{...rest}
|
68
|
+
/>
|
69
|
+
)
|
70
|
+
}
|
71
|
+
)
|
72
|
+
|
73
|
+
Checkbox.displayName = 'Checkbox'
|
74
|
+
|
75
|
+
export default Checkbox
|