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

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.
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,