@primer/components 31.2.0-rc.5ccefd7d → 31.2.0-rc.5e503f97

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 (206) hide show
  1. package/.github/workflows/release.yml +1 -0
  2. package/.github/workflows/release_canary.yml +1 -0
  3. package/CHANGELOG.md +14 -0
  4. package/dist/browser.esm.js +626 -624
  5. package/dist/browser.esm.js.map +1 -1
  6. package/dist/browser.umd.js +196 -194
  7. package/dist/browser.umd.js.map +1 -1
  8. package/docs/content/ActionList2.mdx +360 -0
  9. package/docs/content/StateLabel.md +5 -4
  10. package/docs/content/getting-started.md +1 -1
  11. package/docs/src/@primer/gatsby-theme-doctocat/components/hero.js +1 -3
  12. package/docs/src/@primer/gatsby-theme-doctocat/components/live-preview-wrapper.js +1 -1
  13. package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +17 -0
  14. package/lib/ActionList2/Description.d.ts +12 -0
  15. package/lib/ActionList2/Description.js +53 -0
  16. package/lib/ActionList2/Divider.d.ts +5 -0
  17. package/lib/ActionList2/Divider.js +35 -0
  18. package/lib/ActionList2/Group.d.ts +11 -0
  19. package/lib/ActionList2/Group.js +57 -0
  20. package/lib/ActionList2/Header.d.ts +26 -0
  21. package/lib/ActionList2/Header.js +55 -0
  22. package/lib/ActionList2/Item.d.ts +63 -0
  23. package/lib/ActionList2/Item.js +244 -0
  24. package/lib/ActionList2/LinkItem.d.ts +17 -0
  25. package/lib/ActionList2/LinkItem.js +57 -0
  26. package/lib/ActionList2/List.d.ts +26 -0
  27. package/lib/ActionList2/List.js +59 -0
  28. package/lib/ActionList2/Selection.d.ts +5 -0
  29. package/lib/ActionList2/Selection.js +70 -0
  30. package/lib/ActionList2/Visuals.d.ts +9 -0
  31. package/lib/ActionList2/Visuals.js +90 -0
  32. package/lib/ActionList2/index.d.ts +36 -0
  33. package/lib/ActionList2/index.js +47 -0
  34. package/lib/Autocomplete/Autocomplete.d.ts +28 -28
  35. package/lib/Autocomplete/AutocompleteInput.d.ts +28 -28
  36. package/lib/Button/Button.d.ts +25 -25
  37. package/lib/Button/ButtonClose.d.ts +45 -45
  38. package/lib/Button/ButtonDanger.d.ts +25 -25
  39. package/lib/Button/ButtonInvisible.d.ts +25 -25
  40. package/lib/Button/ButtonOutline.d.ts +25 -25
  41. package/lib/Button/ButtonPrimary.d.ts +25 -25
  42. package/lib/CircleOcticon.d.ts +42 -42
  43. package/lib/Dialog.d.ts +45 -45
  44. package/lib/Dropdown.d.ts +176 -176
  45. package/lib/DropdownMenu/DropdownButton.d.ts +46 -46
  46. package/lib/FilterList.d.ts +42 -42
  47. package/lib/Overlay.js +3 -1
  48. package/lib/Portal/Portal.js +3 -2
  49. package/lib/Position.d.ts +4 -4
  50. package/lib/SelectMenu/SelectMenu.d.ts +246 -246
  51. package/lib/SelectMenu/SelectMenuItem.d.ts +1 -1
  52. package/lib/SelectMenu/SelectMenuModal.d.ts +1 -1
  53. package/lib/StateLabel.d.ts +1 -1
  54. package/lib/StateLabel.js +6 -1
  55. package/lib/TextInputWithTokens.d.ts +28 -28
  56. package/lib/Timeline.d.ts +43 -43
  57. package/lib/Token/AvatarToken.d.ts +1 -1
  58. package/lib/Token/IssueLabelToken.d.ts +1 -1
  59. package/lib/Token/Token.d.ts +1 -1
  60. package/lib/_TextInputWrapper.js +2 -2
  61. package/lib/__tests__/ActionList2.test.d.ts +1 -0
  62. package/lib/__tests__/ActionList2.test.js +53 -0
  63. package/lib/__tests__/AnchoredOverlay.test.js +4 -2
  64. package/lib/__tests__/TextInputWithTokens.test.js +1 -10
  65. package/lib/__tests__/utils/createSlots.test.d.ts +1 -0
  66. package/lib/__tests__/utils/createSlots.test.js +75 -0
  67. package/lib/drafts.d.ts +7 -0
  68. package/lib/drafts.js +18 -0
  69. package/lib/hooks/useAnchoredPosition.js +3 -2
  70. package/lib/hooks/useCombinedRefs.d.ts +2 -2
  71. package/lib/hooks/useCombinedRefs.js +4 -6
  72. package/lib/hooks/useResizeObserver.js +2 -2
  73. package/lib/stories/ActionList2.stories.js +907 -0
  74. package/lib/stories/TextInput.stories.js +144 -0
  75. package/lib/stories/Token.stories.js +19 -2
  76. package/lib/sx.d.ts +2 -0
  77. package/lib/sx.js +8 -0
  78. package/lib/theme-preval.js +81 -2
  79. package/lib/utils/create-slots.d.ts +17 -0
  80. package/lib/utils/create-slots.js +105 -0
  81. package/lib/utils/testing.d.ts +14 -1
  82. package/lib/utils/use-force-update.d.ts +1 -0
  83. package/lib/utils/use-force-update.js +19 -0
  84. package/lib/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  85. package/lib/utils/useIsomorphicLayoutEffect.js +12 -0
  86. package/lib-esm/ActionList2/Description.d.ts +12 -0
  87. package/lib-esm/ActionList2/Description.js +37 -0
  88. package/lib-esm/ActionList2/Divider.d.ts +5 -0
  89. package/lib-esm/ActionList2/Divider.js +23 -0
  90. package/lib-esm/ActionList2/Group.d.ts +11 -0
  91. package/lib-esm/ActionList2/Group.js +40 -0
  92. package/lib-esm/ActionList2/Header.d.ts +26 -0
  93. package/lib-esm/ActionList2/Header.js +44 -0
  94. package/lib-esm/ActionList2/Item.d.ts +63 -0
  95. package/lib-esm/ActionList2/Item.js +210 -0
  96. package/lib-esm/ActionList2/LinkItem.d.ts +17 -0
  97. package/lib-esm/ActionList2/LinkItem.js +43 -0
  98. package/lib-esm/ActionList2/List.d.ts +26 -0
  99. package/lib-esm/ActionList2/List.js +37 -0
  100. package/lib-esm/ActionList2/Selection.d.ts +5 -0
  101. package/lib-esm/ActionList2/Selection.js +52 -0
  102. package/lib-esm/ActionList2/Visuals.d.ts +9 -0
  103. package/lib-esm/ActionList2/Visuals.js +68 -0
  104. package/lib-esm/ActionList2/index.d.ts +36 -0
  105. package/lib-esm/ActionList2/index.js +33 -0
  106. package/lib-esm/Autocomplete/Autocomplete.d.ts +28 -28
  107. package/lib-esm/Autocomplete/AutocompleteInput.d.ts +28 -28
  108. package/lib-esm/Button/Button.d.ts +25 -25
  109. package/lib-esm/Button/ButtonClose.d.ts +45 -45
  110. package/lib-esm/Button/ButtonDanger.d.ts +25 -25
  111. package/lib-esm/Button/ButtonInvisible.d.ts +25 -25
  112. package/lib-esm/Button/ButtonOutline.d.ts +25 -25
  113. package/lib-esm/Button/ButtonPrimary.d.ts +25 -25
  114. package/lib-esm/CircleOcticon.d.ts +42 -42
  115. package/lib-esm/Dialog.d.ts +45 -45
  116. package/lib-esm/Dropdown.d.ts +176 -176
  117. package/lib-esm/DropdownMenu/DropdownButton.d.ts +46 -46
  118. package/lib-esm/FilterList.d.ts +42 -42
  119. package/lib-esm/Overlay.js +2 -1
  120. package/lib-esm/Portal/Portal.js +2 -1
  121. package/lib-esm/Position.d.ts +4 -4
  122. package/lib-esm/SelectMenu/SelectMenu.d.ts +246 -246
  123. package/lib-esm/SelectMenu/SelectMenuItem.d.ts +1 -1
  124. package/lib-esm/SelectMenu/SelectMenuModal.d.ts +1 -1
  125. package/lib-esm/StateLabel.d.ts +1 -1
  126. package/lib-esm/StateLabel.js +7 -2
  127. package/lib-esm/TextInputWithTokens.d.ts +28 -28
  128. package/lib-esm/Timeline.d.ts +43 -43
  129. package/lib-esm/Token/AvatarToken.d.ts +1 -1
  130. package/lib-esm/Token/IssueLabelToken.d.ts +1 -1
  131. package/lib-esm/Token/Token.d.ts +1 -1
  132. package/lib-esm/_TextInputWrapper.js +2 -2
  133. package/lib-esm/__tests__/ActionList2.test.d.ts +1 -0
  134. package/lib-esm/__tests__/ActionList2.test.js +41 -0
  135. package/lib-esm/__tests__/AnchoredOverlay.test.js +4 -2
  136. package/lib-esm/__tests__/TextInputWithTokens.test.js +1 -10
  137. package/lib-esm/__tests__/utils/createSlots.test.d.ts +1 -0
  138. package/lib-esm/__tests__/utils/createSlots.test.js +67 -0
  139. package/lib-esm/drafts.d.ts +7 -0
  140. package/lib-esm/drafts.js +8 -0
  141. package/lib-esm/hooks/useAnchoredPosition.js +2 -1
  142. package/lib-esm/hooks/useCombinedRefs.d.ts +2 -2
  143. package/lib-esm/hooks/useCombinedRefs.js +3 -2
  144. package/lib-esm/hooks/useResizeObserver.js +2 -2
  145. package/lib-esm/stories/ActionList2.stories.js +796 -0
  146. package/lib-esm/stories/TextInput.stories.js +117 -0
  147. package/lib-esm/stories/Token.stories.js +14 -1
  148. package/lib-esm/sx.d.ts +2 -0
  149. package/lib-esm/sx.js +3 -1
  150. package/lib-esm/theme-preval.js +81 -2
  151. package/lib-esm/utils/create-slots.d.ts +17 -0
  152. package/lib-esm/utils/create-slots.js +84 -0
  153. package/lib-esm/utils/testing.d.ts +14 -1
  154. package/lib-esm/utils/use-force-update.d.ts +1 -0
  155. package/lib-esm/utils/use-force-update.js +6 -0
  156. package/lib-esm/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  157. package/lib-esm/utils/useIsomorphicLayoutEffect.js +3 -0
  158. package/migrating.md +1 -1
  159. package/package-lock.json +153 -14
  160. package/package.json +6 -4
  161. package/script/build +2 -0
  162. package/src/ActionList2/Description.tsx +49 -0
  163. package/src/ActionList2/Divider.tsx +24 -0
  164. package/src/ActionList2/Group.tsx +34 -0
  165. package/src/ActionList2/Header.tsx +58 -0
  166. package/src/ActionList2/Item.tsx +245 -0
  167. package/src/ActionList2/LinkItem.tsx +49 -0
  168. package/src/ActionList2/List.tsx +55 -0
  169. package/src/ActionList2/Selection.tsx +40 -0
  170. package/src/ActionList2/Visuals.tsx +76 -0
  171. package/src/ActionList2/index.ts +39 -0
  172. package/src/Overlay.tsx +2 -1
  173. package/src/Portal/Portal.tsx +2 -1
  174. package/src/StateLabel.tsx +14 -2
  175. package/src/_TextInputWrapper.tsx +7 -0
  176. package/src/__tests__/ActionList2.test.tsx +47 -0
  177. package/src/__tests__/AnchoredOverlay.test.tsx +2 -2
  178. package/src/__tests__/TextInputWithTokens.test.tsx +0 -10
  179. package/src/__tests__/__snapshots__/ActionList2.test.tsx.snap +14 -0
  180. package/src/__tests__/__snapshots__/AnchoredOverlay.test.tsx.snap +35 -135
  181. package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +1 -0
  182. package/src/__tests__/__snapshots__/CircleBadge.test.tsx.snap +1 -0
  183. package/src/__tests__/__snapshots__/CircleOcticon.test.tsx.snap +1 -0
  184. package/src/__tests__/__snapshots__/Dialog.test.tsx.snap +1 -0
  185. package/src/__tests__/__snapshots__/DropdownMenu.test.tsx.snap +1 -0
  186. package/src/__tests__/__snapshots__/SelectMenu.test.tsx.snap +4 -0
  187. package/src/__tests__/__snapshots__/SelectPanel.test.tsx.snap +1 -0
  188. package/src/__tests__/__snapshots__/StateLabel.test.tsx.snap +13 -6
  189. package/src/__tests__/__snapshots__/StyledOcticon.test.tsx.snap +1 -0
  190. package/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap +66 -0
  191. package/src/__tests__/__snapshots__/Token.test.tsx.snap +17 -0
  192. package/src/__tests__/utils/__snapshots__/createSlots.test.tsx.snap +55 -0
  193. package/src/__tests__/utils/createSlots.test.tsx +74 -0
  194. package/src/drafts.ts +9 -0
  195. package/src/hooks/useAnchoredPosition.ts +2 -1
  196. package/src/hooks/useCombinedRefs.ts +3 -3
  197. package/src/hooks/useResizeObserver.ts +2 -2
  198. package/src/stories/ActionList2.stories.tsx +1288 -0
  199. package/src/stories/TextInput.stories.tsx +113 -0
  200. package/src/stories/Token.stories.tsx +12 -1
  201. package/src/sx.ts +3 -0
  202. package/src/theme-preval.js +1 -0
  203. package/src/utils/create-slots.tsx +96 -0
  204. package/src/utils/use-force-update.ts +7 -0
  205. package/src/utils/useIsomorphicLayoutEffect.ts +10 -0
  206. package/stats.html +1 -1
@@ -0,0 +1,74 @@
1
+ import React from 'react'
2
+ import 'babel-polyfill'
3
+ import {render, waitFor} from '@testing-library/react'
4
+ import createSlots from '../../utils/create-slots'
5
+
6
+ // setup a component with slots
7
+ const {Slots, Slot} = createSlots(['One', 'Two', 'Three'])
8
+ type ContextTypes = {salutation?: string}
9
+
10
+ const ComponentWithSlots: React.FC<ContextTypes> = ({salutation, children}) => {
11
+ return (
12
+ <Slots context={{salutation}}>
13
+ {slots => (
14
+ <div>
15
+ {slots.One}
16
+ <span>
17
+ {children} {slots.Two} {slots.Three}
18
+ </span>
19
+ </div>
20
+ )}
21
+ </Slots>
22
+ )
23
+ }
24
+ const SlotItem1: React.FC = ({children}) => <Slot name="One">{children}</Slot>
25
+ const SlotItem2: React.FC = ({children}) => <Slot name="Two">{children}</Slot>
26
+ const SlotItem3: React.FC = ({children}) => (
27
+ <Slot name="Three">
28
+ {(context: ContextTypes) => (
29
+ <>
30
+ {context.salutation} {children}
31
+ </>
32
+ )}
33
+ </Slot>
34
+ )
35
+
36
+ describe('ComponentWithSlots', () => {
37
+ it('renders all slots', async () => {
38
+ const component = render(
39
+ <ComponentWithSlots>
40
+ <SlotItem1>first</SlotItem1>
41
+ <SlotItem2>second</SlotItem2>
42
+ free form
43
+ </ComponentWithSlots>
44
+ )
45
+
46
+ await waitFor(() => component.getByText('first'))
47
+ expect(component.container).toMatchSnapshot()
48
+ })
49
+
50
+ it('renders without any slots', async () => {
51
+ const component = render(<ComponentWithSlots>free form</ComponentWithSlots>)
52
+ expect(component.container).toMatchSnapshot()
53
+ })
54
+
55
+ it('renders with just one slot', async () => {
56
+ const component = render(
57
+ <ComponentWithSlots>
58
+ <SlotItem1>first</SlotItem1>
59
+ free form
60
+ </ComponentWithSlots>
61
+ )
62
+ expect(component.container).toMatchSnapshot()
63
+ })
64
+
65
+ it('renders with context passed to children', async () => {
66
+ const component = render(
67
+ <ComponentWithSlots salutation="hi">
68
+ <SlotItem3>third</SlotItem3>
69
+ free form
70
+ </ComponentWithSlots>
71
+ )
72
+ expect(component.container).toMatchSnapshot()
73
+ })
74
+ })
package/src/drafts.ts ADDED
@@ -0,0 +1,9 @@
1
+ /** This is the place where we keep components that are not part of the public
2
+ * api yet (not in main bundle). We don't recommend using it in production.
3
+ *
4
+ * But, they are published on npm and you can import them for experimentation/feedback.
5
+ * example: import {ActionList} from '@primer/components/drafts
6
+ */
7
+
8
+ // Components
9
+ export * from './ActionList2'
@@ -2,6 +2,7 @@ import React from 'react'
2
2
  import {PositionSettings, getAnchoredPosition, AnchorPosition} from '../behaviors/anchoredPosition'
3
3
  import {useProvidedRefOrCreate} from './useProvidedRefOrCreate'
4
4
  import {useResizeObserver} from './useResizeObserver'
5
+ import useLayoutEffect from '../utils/useIsomorphicLayoutEffect'
5
6
 
6
7
  export interface AnchoredPositionHookSettings extends Partial<PositionSettings> {
7
8
  floatingElementRef?: React.RefObject<Element>
@@ -41,7 +42,7 @@ export function useAnchoredPosition(
41
42
  [floatingElementRef, anchorElementRef, ...dependencies]
42
43
  )
43
44
 
44
- React.useLayoutEffect(updatePosition, [updatePosition])
45
+ useLayoutEffect(updatePosition, [updatePosition])
45
46
 
46
47
  useResizeObserver(updatePosition)
47
48
 
@@ -1,4 +1,5 @@
1
- import React, {ForwardedRef, useRef} from 'react'
1
+ import {ForwardedRef, useRef} from 'react'
2
+ import useLayoutEffect from '../utils/useIsomorphicLayoutEffect'
2
3
 
3
4
  /**
4
5
  * Creates a ref by combining multiple constituent refs. The ref returned by this hook
@@ -11,7 +12,7 @@ import React, {ForwardedRef, useRef} from 'react'
11
12
  export function useCombinedRefs<T>(...refs: (ForwardedRef<T> | null | undefined)[]) {
12
13
  const combinedRef = useRef<T | null>(null)
13
14
 
14
- React.useLayoutEffect(() => {
15
+ useLayoutEffect(() => {
15
16
  function setRefs(current: T | null = null) {
16
17
  for (const ref of refs) {
17
18
  if (!ref) {
@@ -32,7 +33,6 @@ export function useCombinedRefs<T>(...refs: (ForwardedRef<T> | null | undefined)
32
33
  // eslint-disable-next-line react-hooks/exhaustive-deps
33
34
  setRefs(combinedRef.current)
34
35
  }
35
-
36
36
  // eslint-disable-next-line react-hooks/exhaustive-deps
37
37
  }, [...refs, combinedRef.current])
38
38
 
@@ -1,7 +1,7 @@
1
- import React from 'react'
1
+ import useLayoutEffect from '../utils/useIsomorphicLayoutEffect'
2
2
 
3
3
  export function useResizeObserver(callback: () => void) {
4
- React.useLayoutEffect(() => {
4
+ useLayoutEffect(() => {
5
5
  const observer = new window.ResizeObserver(() => callback())
6
6
  observer.observe(document.documentElement)
7
7
  return () => {