@primer/components 29.1.1-rc.0f976d3a → 30.0.0-rc.48fd5c94

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. package/.eslintrc.json +44 -14
  2. package/CHANGELOG.md +11 -1
  3. package/contributor-docs/CONTRIBUTING.md +2 -2
  4. package/contributor-docs/component-contents-api-patterns.md +5 -4
  5. package/dist/browser.esm.js +130 -130
  6. package/dist/browser.esm.js.map +1 -1
  7. package/dist/browser.umd.js +113 -113
  8. package/dist/browser.umd.js.map +1 -1
  9. package/docs/content/BorderBox.md +1 -1
  10. package/docs/content/Box.md +9 -9
  11. package/docs/content/Breadcrumbs.md +12 -12
  12. package/docs/content/Buttons.md +15 -13
  13. package/docs/content/CircleOcticon.md +1 -1
  14. package/docs/content/CounterLabel.md +5 -3
  15. package/docs/content/Flash.md +6 -4
  16. package/docs/content/Flex.md +6 -6
  17. package/docs/content/FormGroup.md +11 -9
  18. package/docs/content/Grid.md +6 -6
  19. package/docs/content/Label.md +3 -1
  20. package/docs/content/LabelGroup.md +1 -1
  21. package/docs/content/Pagination.md +4 -4
  22. package/docs/content/PointerBox.md +2 -2
  23. package/docs/content/Portal.mdx +13 -8
  24. package/docs/content/Position.md +26 -23
  25. package/docs/content/SelectMenu.md +5 -3
  26. package/docs/content/SideNav.md +5 -5
  27. package/docs/content/StateLabel.md +8 -6
  28. package/docs/content/StyledOcticon.md +4 -2
  29. package/docs/content/Text.md +5 -3
  30. package/docs/content/TextInput.md +5 -3
  31. package/docs/content/Timeline.md +13 -13
  32. package/docs/content/Tooltip.md +1 -1
  33. package/docs/content/Truncate.md +3 -4
  34. package/docs/content/anchoredPosition.mdx +1 -1
  35. package/docs/content/getting-started.md +6 -2
  36. package/docs/content/linting.md +1 -1
  37. package/docs/content/overriding-styles.mdx +15 -13
  38. package/docs/content/primer-theme.md +1 -1
  39. package/docs/content/theming.md +5 -5
  40. package/docs/content/useOnEscapePress.mdx +3 -3
  41. package/docs/content/useOnOutsideClick.mdx +1 -1
  42. package/lib/Breadcrumbs.d.ts +40 -0
  43. package/lib/{Breadcrumb.js → Breadcrumbs.js} +31 -21
  44. package/lib/__tests__/{Breadcrumb.d.ts → Breadcrumbs.d.ts} +0 -0
  45. package/lib/__tests__/{Breadcrumb.js → Breadcrumbs.js} +7 -9
  46. package/lib/__tests__/{BreadcrumbItem.d.ts → BreadcrumbsItem.d.ts} +0 -0
  47. package/lib/__tests__/{BreadcrumbItem.js → BreadcrumbsItem.js} +6 -6
  48. package/lib/index.d.ts +2 -2
  49. package/lib/index.js +8 -2
  50. package/lib-esm/Breadcrumbs.d.ts +40 -0
  51. package/lib-esm/{Breadcrumb.js → Breadcrumbs.js} +28 -19
  52. package/lib-esm/__tests__/{Breadcrumb.d.ts → Breadcrumbs.d.ts} +0 -0
  53. package/lib-esm/__tests__/Breadcrumbs.js +29 -0
  54. package/lib-esm/__tests__/{BreadcrumbItem.d.ts → BreadcrumbsItem.d.ts} +0 -0
  55. package/lib-esm/__tests__/{BreadcrumbItem.js → BreadcrumbsItem.js} +7 -7
  56. package/lib-esm/index.d.ts +2 -2
  57. package/lib-esm/index.js +1 -1
  58. package/migrating.md +4 -4
  59. package/package-lock.json +561 -280
  60. package/package.json +6 -5
  61. package/src/{Breadcrumb.tsx → Breadcrumbs.tsx} +27 -13
  62. package/src/__tests__/Breadcrumbs.tsx +28 -0
  63. package/src/__tests__/{BreadcrumbItem.tsx → BreadcrumbsItem.tsx} +7 -7
  64. package/src/__tests__/__snapshots__/{Breadcrumb.tsx.snap → Breadcrumbs.tsx.snap} +3 -3
  65. package/src/__tests__/__snapshots__/{BreadcrumbItem.tsx.snap → BreadcrumbsItem.tsx.snap} +3 -3
  66. package/src/index.ts +2 -2
  67. package/stats.html +1 -1
  68. package/lib/Breadcrumb.d.ts +0 -23
  69. package/lib-esm/Breadcrumb.d.ts +0 -23
  70. package/lib-esm/__tests__/Breadcrumb.js +0 -31
  71. package/src/__tests__/Breadcrumb.tsx +0 -31
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primer/components",
3
- "version": "29.1.1-rc.0f976d3a",
3
+ "version": "30.0.0-rc.48fd5c94",
4
4
  "description": "Primer react components",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -15,7 +15,7 @@
15
15
  "start": "concurrently npm:start:*",
16
16
  "start:docs": "cd docs && npm run develop",
17
17
  "start:storybook": "start-storybook -p 6006",
18
- "lint": "eslint '**/*.{js,ts,tsx}'",
18
+ "lint": "eslint '**/*.{js,ts,tsx,md,mdx}'",
19
19
  "lint:fix": "npm run lint -- --fix",
20
20
  "test": "jest",
21
21
  "test:update": "npm run test -- --updateSnapshot",
@@ -56,14 +56,13 @@
56
56
  "@types/styled-system__theme-get": "5.0.1",
57
57
  "classnames": "2.3.1",
58
58
  "deepmerge": "4.2.2",
59
- "eslint-plugin-primer-react": "0.4.1",
60
59
  "focus-visible": "5.2.0",
61
60
  "styled-system": "5.1.5"
62
61
  },
63
62
  "devDependencies": {
64
63
  "@babel/cli": "7.14.5",
65
64
  "@babel/core": "7.14.8",
66
- "@babel/eslint-parser": "7.14.5",
65
+ "@babel/eslint-parser": "7.15.7",
67
66
  "@babel/plugin-proposal-nullish-coalescing-operator": "7.14.5",
68
67
  "@babel/plugin-proposal-optional-chaining": "7.14.5",
69
68
  "@babel/plugin-transform-modules-commonjs": "7.14.5",
@@ -79,7 +78,7 @@
79
78
  "@storybook/addon-actions": "^6.2.9",
80
79
  "@storybook/addon-essentials": "6.2.9",
81
80
  "@storybook/addon-links": "^6.2.9",
82
- "@storybook/react": "6.3.6",
81
+ "@storybook/react": "6.3.8",
83
82
  "@testing-library/dom": "7.31.2",
84
83
  "@testing-library/react": "11.2.7",
85
84
  "@testing-library/react-hooks": "7.0.0",
@@ -110,7 +109,9 @@
110
109
  "eslint-plugin-github": "4.1.3",
111
110
  "eslint-plugin-jest": "24.3.6",
112
111
  "eslint-plugin-jsx-a11y": "6.4.1",
112
+ "eslint-plugin-mdx": "1.15.1",
113
113
  "eslint-plugin-prettier": "3.4.0",
114
+ "eslint-plugin-primer-react": "0.4.2",
114
115
  "eslint-plugin-react": "7.24.0",
115
116
  "eslint-plugin-react-hooks": "4.2.0",
116
117
  "jest": "27.0.4",
@@ -31,7 +31,7 @@ const Wrapper = styled.li`
31
31
  }
32
32
  `
33
33
 
34
- const BreadcrumbBase = styled.nav<SystemFlexProps & SystemCommonProps & SxProp>`
34
+ const BreadcrumbsBase = styled.nav<SystemFlexProps & SystemCommonProps & SxProp>`
35
35
  display: flex;
36
36
  justify-content: space-between;
37
37
  ${COMMON};
@@ -39,31 +39,30 @@ const BreadcrumbBase = styled.nav<SystemFlexProps & SystemCommonProps & SxProp>`
39
39
  ${sx};
40
40
  `
41
41
 
42
- export type BreadcrumbProps = ComponentProps<typeof BreadcrumbBase>
42
+ export type BreadcrumbsProps = ComponentProps<typeof BreadcrumbsBase>
43
43
 
44
- function Breadcrumb({className, children, theme, ...rest}: React.PropsWithChildren<BreadcrumbProps>) {
45
- const classes = classnames(className, 'Breadcrumb')
44
+ function Breadcrumbs({className, children, theme, ...rest}: React.PropsWithChildren<BreadcrumbsProps>) {
46
45
  const wrappedChildren = React.Children.map(children, child => <Wrapper theme={theme}>{child}</Wrapper>)
47
46
  return (
48
- <BreadcrumbBase className={classes} aria-label="breadcrumb" theme={theme} {...rest}>
47
+ <BreadcrumbsBase className={className} aria-label="Breadcrumbs" theme={theme} {...rest}>
49
48
  <Box as="ol" my={0} pl={0}>
50
49
  {wrappedChildren}
51
50
  </Box>
52
- </BreadcrumbBase>
51
+ </BreadcrumbsBase>
53
52
  )
54
53
  }
55
54
 
56
- type StyledBreadcrumbItemProps = {
55
+ type StyledBreadcrumbsItemProps = {
57
56
  to?: History.LocationDescriptor
58
57
  selected?: boolean
59
58
  } & SystemCommonProps &
60
59
  SxProp
61
60
 
62
- const BreadcrumbItem = styled.a.attrs<StyledBreadcrumbItemProps>(props => ({
61
+ const BreadcrumbsItem = styled.a.attrs<StyledBreadcrumbsItemProps>(props => ({
63
62
  activeClassName: typeof props.to === 'string' ? 'selected' : '',
64
63
  className: classnames(props.selected && SELECTED_CLASS, props.className),
65
64
  'aria-current': props.selected ? 'page' : null
66
- }))<StyledBreadcrumbItemProps>`
65
+ }))<StyledBreadcrumbsItemProps>`
67
66
  color: ${get('colors.accent.fg')};
68
67
  display: inline-block;
69
68
  font-size: ${get('fontSizes.1')};
@@ -79,9 +78,24 @@ const BreadcrumbItem = styled.a.attrs<StyledBreadcrumbItemProps>(props => ({
79
78
  ${sx};
80
79
  `
81
80
 
82
- Breadcrumb.displayName = 'Breadcrumb'
81
+ Breadcrumbs.displayName = 'Breadcrumbs'
83
82
 
84
- BreadcrumbItem.displayName = 'Breadcrumb.Item'
83
+ BreadcrumbsItem.displayName = 'Breadcrumbs.Item'
85
84
 
86
- export type BreadcrumbItemProps = ComponentProps<typeof BreadcrumbItem>
87
- export default Object.assign(Breadcrumb, {Item: BreadcrumbItem})
85
+ export type BreadcrumbsItemProps = ComponentProps<typeof BreadcrumbsItem>
86
+ export default Object.assign(Breadcrumbs, {Item: BreadcrumbsItem})
87
+
88
+ /**
89
+ * @deprecated Use the `Breadcrumbs` component instead (i.e. `<Breadcrumb>` → `<Breadcrumbs>`)
90
+ */
91
+ export const Breadcrumb = Object.assign(Breadcrumbs, {Item: BreadcrumbsItem})
92
+
93
+ /**
94
+ * @deprecated Use the `BreadcrumbsProps` type instead
95
+ */
96
+ export type BreadcrumbProps = ComponentProps<typeof BreadcrumbsBase>
97
+
98
+ /**
99
+ * @deprecated Use the `BreadcrumbsItemProps` type instead
100
+ */
101
+ export type BreadcrumbItemProps = ComponentProps<typeof BreadcrumbsItem>
@@ -0,0 +1,28 @@
1
+ import React from 'react'
2
+ import {Breadcrumbs, Breadcrumb} from '..'
3
+ import {render, behavesAsComponent, checkExports} from '../utils/testing'
4
+ import {COMMON} from '../constants'
5
+ import {render as HTMLRender, cleanup} from '@testing-library/react'
6
+ import {axe, toHaveNoViolations} from 'jest-axe'
7
+ import 'babel-polyfill'
8
+ expect.extend(toHaveNoViolations)
9
+
10
+ describe('Breadcrumbs', () => {
11
+ behavesAsComponent({Component: Breadcrumbs, systemPropArray: [COMMON]})
12
+
13
+ checkExports('Breadcrumbs', {
14
+ default: Breadcrumbs,
15
+ Breadcrumb
16
+ })
17
+
18
+ it('should have no axe violations', async () => {
19
+ const {container} = HTMLRender(<Breadcrumbs />)
20
+ const results = await axe(container)
21
+ expect(results).toHaveNoViolations()
22
+ cleanup()
23
+ })
24
+
25
+ it('renders a <nav>', () => {
26
+ expect(render(<Breadcrumbs />).type).toEqual('nav')
27
+ })
28
+ })
@@ -2,31 +2,31 @@ import {cleanup, render as HTMLRender} from '@testing-library/react'
2
2
  import 'babel-polyfill'
3
3
  import {axe, toHaveNoViolations} from 'jest-axe'
4
4
  import React from 'react'
5
- import {Breadcrumb} from '..'
5
+ import {Breadcrumbs} from '..'
6
6
  import {COMMON} from '../constants'
7
7
  import {behavesAsComponent, render} from '../utils/testing'
8
8
  expect.extend(toHaveNoViolations)
9
9
 
10
- describe('Breadcrumb.Item', () => {
11
- behavesAsComponent({Component: Breadcrumb.Item, systemPropArray: [COMMON]})
10
+ describe('Breadcrumbs.Item', () => {
11
+ behavesAsComponent({Component: Breadcrumbs.Item, systemPropArray: [COMMON]})
12
12
 
13
13
  it('renders an <a> by default', () => {
14
- expect(render(<Breadcrumb.Item />).type).toEqual('a')
14
+ expect(render(<Breadcrumbs.Item />).type).toEqual('a')
15
15
  })
16
16
 
17
17
  it('should have no axe violations', async () => {
18
- const {container} = HTMLRender(<Breadcrumb.Item />)
18
+ const {container} = HTMLRender(<Breadcrumbs.Item />)
19
19
  const results = await axe(container)
20
20
  expect(results).toHaveNoViolations()
21
21
  cleanup()
22
22
  })
23
23
 
24
24
  it('respects the "selected" prop', () => {
25
- expect(render(<Breadcrumb.Item selected />)).toMatchSnapshot()
25
+ expect(render(<Breadcrumbs.Item selected />)).toMatchSnapshot()
26
26
  })
27
27
 
28
28
  it('adds activeClassName={SELECTED_CLASS} when it gets a "to" prop', () => {
29
29
  const Link = ({theme: _ignoredTheme, ...props}: Record<string, unknown>) => <div {...props} />
30
- expect(render(<Breadcrumb.Item as={Link} to="#" />)).toMatchSnapshot()
30
+ expect(render(<Breadcrumbs.Item as={Link} to="#" />)).toMatchSnapshot()
31
31
  })
32
32
  })
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`Breadcrumb renders consistently 1`] = `
3
+ exports[`Breadcrumbs renders consistently 1`] = `
4
4
  .c1 {
5
5
  margin-top: 0;
6
6
  margin-bottom: 0;
@@ -19,8 +19,8 @@ exports[`Breadcrumb renders consistently 1`] = `
19
19
  }
20
20
 
21
21
  <nav
22
- aria-label="breadcrumb"
23
- className="c0 Breadcrumb"
22
+ aria-label="Breadcrumbs"
23
+ className="c0"
24
24
  >
25
25
  <ol
26
26
  className="c1"
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`Breadcrumb.Item adds activeClassName={SELECTED_CLASS} when it gets a "to" prop 1`] = `
3
+ exports[`Breadcrumbs.Item adds activeClassName={SELECTED_CLASS} when it gets a "to" prop 1`] = `
4
4
  .c0 {
5
5
  color: #0969da;
6
6
  display: inline-block;
@@ -27,7 +27,7 @@ exports[`Breadcrumb.Item adds activeClassName={SELECTED_CLASS} when it gets a "t
27
27
  />
28
28
  `;
29
29
 
30
- exports[`Breadcrumb.Item renders consistently 1`] = `
30
+ exports[`Breadcrumbs.Item renders consistently 1`] = `
31
31
  .c0 {
32
32
  color: #0969da;
33
33
  display: inline-block;
@@ -52,7 +52,7 @@ exports[`Breadcrumb.Item renders consistently 1`] = `
52
52
  />
53
53
  `;
54
54
 
55
- exports[`Breadcrumb.Item respects the "selected" prop 1`] = `
55
+ exports[`Breadcrumbs.Item respects the "selected" prop 1`] = `
56
56
  .c0 {
57
57
  color: #0969da;
58
58
  display: inline-block;
package/src/index.ts CHANGED
@@ -38,8 +38,8 @@ export {default as AvatarStack} from './AvatarStack'
38
38
  export type {AvatarStackProps} from './AvatarStack'
39
39
  export {default as BranchName} from './BranchName'
40
40
  export type {BranchNameProps} from './BranchName'
41
- export {default as Breadcrumb} from './Breadcrumb'
42
- export type {BreadcrumbProps, BreadcrumbItemProps} from './Breadcrumb'
41
+ export {default as Breadcrumbs, Breadcrumb} from './Breadcrumbs'
42
+ export type {BreadcrumbsProps, BreadcrumbsItemProps, BreadcrumbProps, BreadcrumbItemProps} from './Breadcrumbs'
43
43
  export {
44
44
  default as Button,
45
45
  ButtonDanger,