@primer/components 31.0.0-rc.ee65b7f1 → 31.0.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.
Files changed (815) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/browser.esm.js +12 -7
  3. package/dist/browser.esm.js.map +1 -1
  4. package/dist/browser.umd.js +12 -7
  5. package/dist/browser.umd.js.map +1 -1
  6. package/lib/ActionList/Item.js +3 -3
  7. package/lib/Button/Button.js +1 -1
  8. package/lib/Button/ButtonInvisible.js +1 -1
  9. package/lib/Button/ButtonTableList.js +1 -1
  10. package/lib/Pagination/Pagination.js +1 -1
  11. package/lib/_TextInputWrapper.js +1 -1
  12. package/lib-esm/ActionList/Item.js +3 -3
  13. package/lib-esm/Button/Button.js +1 -1
  14. package/lib-esm/Button/ButtonInvisible.js +1 -1
  15. package/lib-esm/Button/ButtonTableList.js +1 -1
  16. package/lib-esm/Pagination/Pagination.js +1 -1
  17. package/lib-esm/_TextInputWrapper.js +1 -1
  18. package/package.json +1 -1
  19. package/.changeset/README.md +0 -8
  20. package/.changeset/config.json +0 -10
  21. package/.devcontainer/devcontainer.json +0 -8
  22. package/.eslintrc.json +0 -137
  23. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  24. package/.github/ISSUE_TEMPLATE/new_component_proposal_template.md +0 -41
  25. package/.github/dependabot.yml +0 -18
  26. package/.github/pull_request_template.md +0 -18
  27. package/.github/workflows/ci.yml +0 -31
  28. package/.github/workflows/deploy_preview.yml +0 -47
  29. package/.github/workflows/deploy_production.yml +0 -70
  30. package/.github/workflows/release.yml +0 -35
  31. package/.github/workflows/release_canary.yml +0 -70
  32. package/.github/workflows/release_candidate.yml +0 -60
  33. package/.github/workflows/size.yml +0 -13
  34. package/.github/workflows/stale.yml +0 -26
  35. package/.gitignore +0 -10
  36. package/.npmrc +0 -4
  37. package/.nvmrc +0 -1
  38. package/.storybook/main.js +0 -11
  39. package/.storybook/preview.js +0 -113
  40. package/.vscode/launch.json +0 -21
  41. package/.vscode/settings.json +0 -13
  42. package/@types/@styled-system/index.d.ts +0 -0
  43. package/@types/@styled-system/prop-types/index.d.ts +0 -1
  44. package/@types/@styled-system/props/index.d.ts +0 -1
  45. package/@types/jest-styled-components/index.d.ts +0 -1
  46. package/CODEOWNERS +0 -2
  47. package/babel-defines.js +0 -13
  48. package/babel.config.js +0 -39
  49. package/contributor-docs/CODE_OF_CONDUCT.md +0 -76
  50. package/contributor-docs/CONTRIBUTING.md +0 -274
  51. package/contributor-docs/adrs/adr-001-typescript.md +0 -23
  52. package/contributor-docs/adrs/adr-002-behavior-isolation.md +0 -108
  53. package/contributor-docs/behaviors.md +0 -132
  54. package/contributor-docs/component-contents-api-patterns.md +0 -316
  55. package/contributor-docs/principles.md +0 -39
  56. package/docs/.eslintrc +0 -0
  57. package/docs/.gitignore +0 -91
  58. package/docs/components/PropsList.js +0 -5
  59. package/docs/components/State.js +0 -9
  60. package/docs/components/constants.js +0 -34
  61. package/docs/components/index.js +0 -2
  62. package/docs/content/ActionList.mdx +0 -99
  63. package/docs/content/ActionMenu.mdx +0 -80
  64. package/docs/content/AnchoredOverlay.mdx +0 -37
  65. package/docs/content/Autocomplete.mdx +0 -627
  66. package/docs/content/Avatar.mdx +0 -33
  67. package/docs/content/AvatarStack.mdx +0 -37
  68. package/docs/content/BorderBox.md +0 -46
  69. package/docs/content/Box.md +0 -74
  70. package/docs/content/BranchName.md +0 -18
  71. package/docs/content/Breadcrumbs.md +0 -52
  72. package/docs/content/Buttons.md +0 -56
  73. package/docs/content/CircleBadge.md +0 -45
  74. package/docs/content/CircleOcticon.md +0 -18
  75. package/docs/content/CounterLabel.md +0 -32
  76. package/docs/content/Details.md +0 -105
  77. package/docs/content/Dialog.md +0 -108
  78. package/docs/content/Dialog2.mdx +0 -179
  79. package/docs/content/Dropdown.md +0 -72
  80. package/docs/content/DropdownMenu.mdx +0 -49
  81. package/docs/content/FilterList.md +0 -44
  82. package/docs/content/FilteredSearch.md +0 -39
  83. package/docs/content/Flash.md +0 -44
  84. package/docs/content/Flex.md +0 -58
  85. package/docs/content/FormGroup.md +0 -46
  86. package/docs/content/Grid.md +0 -59
  87. package/docs/content/Header.md +0 -79
  88. package/docs/content/Heading.md +0 -22
  89. package/docs/content/Label.md +0 -42
  90. package/docs/content/LabelGroup.md +0 -31
  91. package/docs/content/Link.md +0 -37
  92. package/docs/content/Overlay.mdx +0 -94
  93. package/docs/content/Pagehead.md +0 -27
  94. package/docs/content/Pagination.md +0 -187
  95. package/docs/content/PointerBox.md +0 -81
  96. package/docs/content/Popover.md +0 -137
  97. package/docs/content/Portal.mdx +0 -78
  98. package/docs/content/Position.md +0 -100
  99. package/docs/content/ProgressBar.mdx +0 -29
  100. package/docs/content/SelectMenu.md +0 -435
  101. package/docs/content/SelectPanel.mdx +0 -67
  102. package/docs/content/SideNav.md +0 -179
  103. package/docs/content/Spinner.mdx +0 -32
  104. package/docs/content/StateLabel.md +0 -35
  105. package/docs/content/StyledOcticon.md +0 -36
  106. package/docs/content/SubNav.md +0 -102
  107. package/docs/content/TabNav.md +0 -50
  108. package/docs/content/Text.md +0 -31
  109. package/docs/content/TextInput.md +0 -34
  110. package/docs/content/TextInputTokens.mdx +0 -89
  111. package/docs/content/TextInputWithTokens.mdx +0 -97
  112. package/docs/content/Timeline.md +0 -138
  113. package/docs/content/Token.mdx +0 -381
  114. package/docs/content/Tooltip.md +0 -41
  115. package/docs/content/Truncate.md +0 -64
  116. package/docs/content/UnderlineNav.md +0 -53
  117. package/docs/content/anchoredPosition.mdx +0 -163
  118. package/docs/content/core-concepts.md +0 -70
  119. package/docs/content/focusTrap.mdx +0 -103
  120. package/docs/content/focusZone.mdx +0 -145
  121. package/docs/content/getting-started.md +0 -138
  122. package/docs/content/index.md +0 -33
  123. package/docs/content/linting.md +0 -35
  124. package/docs/content/overriding-styles.mdx +0 -82
  125. package/docs/content/philosophy.md +0 -23
  126. package/docs/content/primer-theme.md +0 -89
  127. package/docs/content/ssr.mdx +0 -43
  128. package/docs/content/system-props.mdx +0 -37
  129. package/docs/content/theme-reference.md +0 -16
  130. package/docs/content/theming.md +0 -249
  131. package/docs/content/useOnEscapePress.mdx +0 -56
  132. package/docs/content/useOnOutsideClick.mdx +0 -57
  133. package/docs/content/useOpenAndCloseFocus.mdx +0 -49
  134. package/docs/content/useOverlay.mdx +0 -62
  135. package/docs/content/useSafeTimeout.mdx +0 -32
  136. package/docs/gatsby-config.js +0 -30
  137. package/docs/gatsby-node.js +0 -101
  138. package/docs/package-lock.json +0 -20756
  139. package/docs/package.json +0 -36
  140. package/docs/src/@primer/gatsby-theme-doctocat/components/hero.js +0 -23
  141. package/docs/src/@primer/gatsby-theme-doctocat/components/live-preview-wrapper.js +0 -41
  142. package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +0 -54
  143. package/docs/src/@primer/gatsby-theme-doctocat/nav.yml +0 -133
  144. package/docs/src/@primer/gatsby-theme-doctocat/primer-components-hero.svg +0 -1411
  145. package/docs/src/props.js +0 -77
  146. package/jest.config.js +0 -13
  147. package/lib/__tests__/ActionList.test.d.ts +0 -1
  148. package/lib/__tests__/ActionList.test.js +0 -69
  149. package/lib/__tests__/ActionList.types.test.d.ts +0 -6
  150. package/lib/__tests__/ActionList.types.test.js +0 -69
  151. package/lib/__tests__/ActionMenu.test.d.ts +0 -1
  152. package/lib/__tests__/ActionMenu.test.js +0 -151
  153. package/lib/__tests__/AnchoredOverlay.test.d.ts +0 -1
  154. package/lib/__tests__/AnchoredOverlay.test.js +0 -160
  155. package/lib/__tests__/Autocomplete.test.d.ts +0 -1
  156. package/lib/__tests__/Autocomplete.test.js +0 -528
  157. package/lib/__tests__/Avatar.test.d.ts +0 -1
  158. package/lib/__tests__/Avatar.test.js +0 -67
  159. package/lib/__tests__/AvatarStack.test.d.ts +0 -1
  160. package/lib/__tests__/AvatarStack.test.js +0 -71
  161. package/lib/__tests__/BorderBox.test.d.ts +0 -1
  162. package/lib/__tests__/BorderBox.test.js +0 -58
  163. package/lib/__tests__/Box.test.d.ts +0 -1
  164. package/lib/__tests__/Box.test.js +0 -78
  165. package/lib/__tests__/BranchName.test.d.ts +0 -1
  166. package/lib/__tests__/BranchName.test.js +0 -36
  167. package/lib/__tests__/Breadcrumbs.test.d.ts +0 -1
  168. package/lib/__tests__/Breadcrumbs.test.js +0 -37
  169. package/lib/__tests__/BreadcrumbsItem.test.d.ts +0 -1
  170. package/lib/__tests__/BreadcrumbsItem.test.js +0 -49
  171. package/lib/__tests__/Button.test.d.ts +0 -1
  172. package/lib/__tests__/Button.test.js +0 -143
  173. package/lib/__tests__/Caret.test.d.ts +0 -1
  174. package/lib/__tests__/Caret.test.js +0 -52
  175. package/lib/__tests__/CircleBadge.test.d.ts +0 -1
  176. package/lib/__tests__/CircleBadge.test.js +0 -83
  177. package/lib/__tests__/CircleOcticon.test.d.ts +0 -1
  178. package/lib/__tests__/CircleOcticon.test.js +0 -71
  179. package/lib/__tests__/ConfirmationDialog.test.d.ts +0 -1
  180. package/lib/__tests__/ConfirmationDialog.test.js +0 -134
  181. package/lib/__tests__/CounterLabel.test.d.ts +0 -1
  182. package/lib/__tests__/CounterLabel.test.js +0 -58
  183. package/lib/__tests__/Details.test.d.ts +0 -1
  184. package/lib/__tests__/Details.test.js +0 -117
  185. package/lib/__tests__/Dialog.test.d.ts +0 -1
  186. package/lib/__tests__/Dialog.test.js +0 -184
  187. package/lib/__tests__/Dropdown.test.d.ts +0 -1
  188. package/lib/__tests__/Dropdown.test.js +0 -63
  189. package/lib/__tests__/DropdownMenu.test.d.ts +0 -1
  190. package/lib/__tests__/DropdownMenu.test.js +0 -150
  191. package/lib/__tests__/FilterList.test.d.ts +0 -1
  192. package/lib/__tests__/FilterList.test.js +0 -36
  193. package/lib/__tests__/FilterListItem.test.d.ts +0 -1
  194. package/lib/__tests__/FilterListItem.test.js +0 -46
  195. package/lib/__tests__/FilteredSearch.test.d.ts +0 -1
  196. package/lib/__tests__/FilteredSearch.test.js +0 -36
  197. package/lib/__tests__/Flash.test.d.ts +0 -1
  198. package/lib/__tests__/Flash.test.js +0 -62
  199. package/lib/__tests__/Flex.test.d.ts +0 -1
  200. package/lib/__tests__/Flex.test.js +0 -74
  201. package/lib/__tests__/FormGroup.test.d.ts +0 -1
  202. package/lib/__tests__/FormGroup.test.js +0 -54
  203. package/lib/__tests__/Grid.test.d.ts +0 -1
  204. package/lib/__tests__/Grid.test.js +0 -104
  205. package/lib/__tests__/Header.test.d.ts +0 -1
  206. package/lib/__tests__/Header.test.js +0 -58
  207. package/lib/__tests__/Heading.test.d.ts +0 -1
  208. package/lib/__tests__/Heading.test.js +0 -109
  209. package/lib/__tests__/Label.test.d.ts +0 -1
  210. package/lib/__tests__/Label.test.js +0 -46
  211. package/lib/__tests__/LabelGroup.test.d.ts +0 -1
  212. package/lib/__tests__/LabelGroup.test.js +0 -38
  213. package/lib/__tests__/Link.test.d.ts +0 -1
  214. package/lib/__tests__/Link.test.js +0 -70
  215. package/lib/__tests__/Merge.types.test.d.ts +0 -30
  216. package/lib/__tests__/Merge.types.test.js +0 -27
  217. package/lib/__tests__/Overlay.test.d.ts +0 -1
  218. package/lib/__tests__/Overlay.test.js +0 -145
  219. package/lib/__tests__/Pagehead.test.d.ts +0 -1
  220. package/lib/__tests__/Pagehead.test.js +0 -37
  221. package/lib/__tests__/Pagination/Pagination.test.d.ts +0 -1
  222. package/lib/__tests__/Pagination/Pagination.test.js +0 -47
  223. package/lib/__tests__/Pagination/PaginationModel.test.d.ts +0 -1
  224. package/lib/__tests__/Pagination/PaginationModel.test.js +0 -186
  225. package/lib/__tests__/PointerBox.test.d.ts +0 -1
  226. package/lib/__tests__/PointerBox.test.js +0 -46
  227. package/lib/__tests__/Popover.test.d.ts +0 -1
  228. package/lib/__tests__/Popover.test.js +0 -66
  229. package/lib/__tests__/Portal.test.d.ts +0 -1
  230. package/lib/__tests__/Portal.test.js +0 -124
  231. package/lib/__tests__/Position.test.d.ts +0 -1
  232. package/lib/__tests__/Position.test.js +0 -143
  233. package/lib/__tests__/ProgressBar.test.d.ts +0 -1
  234. package/lib/__tests__/ProgressBar.test.js +0 -68
  235. package/lib/__tests__/SelectMenu.test.d.ts +0 -1
  236. package/lib/__tests__/SelectMenu.test.js +0 -155
  237. package/lib/__tests__/SelectPanel.test.d.ts +0 -1
  238. package/lib/__tests__/SelectPanel.test.js +0 -80
  239. package/lib/__tests__/SideNav.test.d.ts +0 -1
  240. package/lib/__tests__/SideNav.test.js +0 -71
  241. package/lib/__tests__/Spinner.test.d.ts +0 -1
  242. package/lib/__tests__/Spinner.test.js +0 -53
  243. package/lib/__tests__/StateLabel.test.d.ts +0 -1
  244. package/lib/__tests__/StateLabel.test.js +0 -71
  245. package/lib/__tests__/StyledOcticon.test.d.ts +0 -1
  246. package/lib/__tests__/StyledOcticon.test.js +0 -40
  247. package/lib/__tests__/SubNav.test.d.ts +0 -1
  248. package/lib/__tests__/SubNav.test.js +0 -62
  249. package/lib/__tests__/SubNavLink.test.d.ts +0 -1
  250. package/lib/__tests__/SubNavLink.test.js +0 -49
  251. package/lib/__tests__/TabNav.test.d.ts +0 -1
  252. package/lib/__tests__/TabNav.test.js +0 -49
  253. package/lib/__tests__/Text.test.d.ts +0 -1
  254. package/lib/__tests__/Text.test.js +0 -105
  255. package/lib/__tests__/TextInput.test.d.ts +0 -1
  256. package/lib/__tests__/TextInput.test.js +0 -78
  257. package/lib/__tests__/TextInputWithTokens.test.d.ts +0 -1
  258. package/lib/__tests__/TextInputWithTokens.test.js +0 -389
  259. package/lib/__tests__/ThemeProvider.test.d.ts +0 -1
  260. package/lib/__tests__/ThemeProvider.test.js +0 -444
  261. package/lib/__tests__/Timeline.test.d.ts +0 -1
  262. package/lib/__tests__/Timeline.test.js +0 -75
  263. package/lib/__tests__/Token.test.d.ts +0 -1
  264. package/lib/__tests__/Token.test.js +0 -180
  265. package/lib/__tests__/Tooltip.test.d.ts +0 -1
  266. package/lib/__tests__/Tooltip.test.js +0 -69
  267. package/lib/__tests__/Truncate.test.d.ts +0 -1
  268. package/lib/__tests__/Truncate.test.js +0 -63
  269. package/lib/__tests__/UnderlineNav.test.d.ts +0 -1
  270. package/lib/__tests__/UnderlineNav.test.js +0 -72
  271. package/lib/__tests__/UnderlineNavLink.test.d.ts +0 -1
  272. package/lib/__tests__/UnderlineNavLink.test.js +0 -51
  273. package/lib/__tests__/behaviors/anchoredPosition.test.d.ts +0 -1
  274. package/lib/__tests__/behaviors/anchoredPosition.test.js +0 -390
  275. package/lib/__tests__/behaviors/focusTrap.test.d.ts +0 -1
  276. package/lib/__tests__/behaviors/focusTrap.test.js +0 -234
  277. package/lib/__tests__/behaviors/focusZone.test.d.ts +0 -1
  278. package/lib/__tests__/behaviors/focusZone.test.js +0 -570
  279. package/lib/__tests__/behaviors/iterateFocusableElements.test.d.ts +0 -1
  280. package/lib/__tests__/behaviors/iterateFocusableElements.test.js +0 -55
  281. package/lib/__tests__/behaviors/scrollIntoViewingArea.test.d.ts +0 -1
  282. package/lib/__tests__/behaviors/scrollIntoViewingArea.test.js +0 -226
  283. package/lib/__tests__/filterObject.test.d.ts +0 -1
  284. package/lib/__tests__/filterObject.test.js +0 -30
  285. package/lib/__tests__/hooks/useAnchoredPosition.test.d.ts +0 -1
  286. package/lib/__tests__/hooks/useAnchoredPosition.test.js +0 -54
  287. package/lib/__tests__/hooks/useOnEscapePress.test.d.ts +0 -1
  288. package/lib/__tests__/hooks/useOnEscapePress.test.js +0 -32
  289. package/lib/__tests__/hooks/useOnOutsideClick.test.d.ts +0 -1
  290. package/lib/__tests__/hooks/useOnOutsideClick.test.js +0 -87
  291. package/lib/__tests__/hooks/useOpenAndCloseFocus.test.d.ts +0 -1
  292. package/lib/__tests__/hooks/useOpenAndCloseFocus.test.js +0 -60
  293. package/lib/__tests__/hooks/useProvidedStateOrCreate.test.d.ts +0 -1
  294. package/lib/__tests__/hooks/useProvidedStateOrCreate.test.js +0 -45
  295. package/lib/__tests__/theme.test.d.ts +0 -1
  296. package/lib/__tests__/theme.test.js +0 -36
  297. package/lib/__tests__/themeGet.test.d.ts +0 -1
  298. package/lib/__tests__/themeGet.test.js +0 -25
  299. package/lib/__tests__/useSafeTimeout.test.d.ts +0 -1
  300. package/lib/__tests__/useSafeTimeout.test.js +0 -45
  301. package/lib/stories/ActionList.stories.js +0 -453
  302. package/lib/stories/ActionMenu.stories.js +0 -338
  303. package/lib/stories/AnchoredOverlay.stories.js +0 -127
  304. package/lib/stories/Autocomplete.stories.js +0 -608
  305. package/lib/stories/AvatarStack.stories.js +0 -49
  306. package/lib/stories/Button.stories.js +0 -114
  307. package/lib/stories/ConfirmationDialog.stories.js +0 -111
  308. package/lib/stories/Dialog.stories.js +0 -265
  309. package/lib/stories/DropdownMenu.stories.js +0 -122
  310. package/lib/stories/IssueLabelToken.stories.js +0 -165
  311. package/lib/stories/Overlay.stories.js +0 -204
  312. package/lib/stories/Portal.stories.js +0 -104
  313. package/lib/stories/ProfileToken.stories.js +0 -162
  314. package/lib/stories/SelectPanel.stories.js +0 -399
  315. package/lib/stories/TextInputWithTokens.stories.js +0 -235
  316. package/lib/stories/ThemeProvider.stories.js +0 -102
  317. package/lib/stories/Token.stories.js +0 -159
  318. package/lib/stories/useAnchoredPosition.stories.js +0 -351
  319. package/lib/stories/useFocusTrap.stories.js +0 -356
  320. package/lib/stories/useFocusZone.stories.js +0 -599
  321. package/lib-esm/__tests__/ActionList.test.d.ts +0 -1
  322. package/lib-esm/__tests__/ActionList.test.js +0 -57
  323. package/lib-esm/__tests__/ActionList.types.test.d.ts +0 -6
  324. package/lib-esm/__tests__/ActionList.types.test.js +0 -45
  325. package/lib-esm/__tests__/ActionMenu.test.d.ts +0 -1
  326. package/lib-esm/__tests__/ActionMenu.test.js +0 -139
  327. package/lib-esm/__tests__/AnchoredOverlay.test.d.ts +0 -1
  328. package/lib-esm/__tests__/AnchoredOverlay.test.js +0 -134
  329. package/lib-esm/__tests__/Autocomplete.test.d.ts +0 -1
  330. package/lib-esm/__tests__/Autocomplete.test.js +0 -494
  331. package/lib-esm/__tests__/Avatar.test.d.ts +0 -1
  332. package/lib-esm/__tests__/Avatar.test.js +0 -56
  333. package/lib-esm/__tests__/AvatarStack.test.d.ts +0 -1
  334. package/lib-esm/__tests__/AvatarStack.test.js +0 -58
  335. package/lib-esm/__tests__/BorderBox.test.d.ts +0 -1
  336. package/lib-esm/__tests__/BorderBox.test.js +0 -47
  337. package/lib-esm/__tests__/Box.test.d.ts +0 -1
  338. package/lib-esm/__tests__/Box.test.js +0 -67
  339. package/lib-esm/__tests__/BranchName.test.d.ts +0 -1
  340. package/lib-esm/__tests__/BranchName.test.js +0 -26
  341. package/lib-esm/__tests__/Breadcrumbs.test.d.ts +0 -1
  342. package/lib-esm/__tests__/Breadcrumbs.test.js +0 -27
  343. package/lib-esm/__tests__/BreadcrumbsItem.test.d.ts +0 -1
  344. package/lib-esm/__tests__/BreadcrumbsItem.test.js +0 -39
  345. package/lib-esm/__tests__/Button.test.d.ts +0 -1
  346. package/lib-esm/__tests__/Button.test.js +0 -133
  347. package/lib-esm/__tests__/Caret.test.d.ts +0 -1
  348. package/lib-esm/__tests__/Caret.test.js +0 -42
  349. package/lib-esm/__tests__/CircleBadge.test.d.ts +0 -1
  350. package/lib-esm/__tests__/CircleBadge.test.js +0 -70
  351. package/lib-esm/__tests__/CircleOcticon.test.d.ts +0 -1
  352. package/lib-esm/__tests__/CircleOcticon.test.js +0 -59
  353. package/lib-esm/__tests__/ConfirmationDialog.test.d.ts +0 -1
  354. package/lib-esm/__tests__/ConfirmationDialog.test.js +0 -113
  355. package/lib-esm/__tests__/CounterLabel.test.d.ts +0 -1
  356. package/lib-esm/__tests__/CounterLabel.test.js +0 -47
  357. package/lib-esm/__tests__/Details.test.d.ts +0 -1
  358. package/lib-esm/__tests__/Details.test.js +0 -107
  359. package/lib-esm/__tests__/Dialog.test.d.ts +0 -1
  360. package/lib-esm/__tests__/Dialog.test.js +0 -171
  361. package/lib-esm/__tests__/Dropdown.test.d.ts +0 -1
  362. package/lib-esm/__tests__/Dropdown.test.js +0 -53
  363. package/lib-esm/__tests__/DropdownMenu.test.d.ts +0 -1
  364. package/lib-esm/__tests__/DropdownMenu.test.js +0 -137
  365. package/lib-esm/__tests__/FilterList.test.d.ts +0 -1
  366. package/lib-esm/__tests__/FilterList.test.js +0 -26
  367. package/lib-esm/__tests__/FilterListItem.test.d.ts +0 -1
  368. package/lib-esm/__tests__/FilterListItem.test.js +0 -36
  369. package/lib-esm/__tests__/FilteredSearch.test.d.ts +0 -1
  370. package/lib-esm/__tests__/FilteredSearch.test.js +0 -26
  371. package/lib-esm/__tests__/Flash.test.d.ts +0 -1
  372. package/lib-esm/__tests__/Flash.test.js +0 -51
  373. package/lib-esm/__tests__/Flex.test.d.ts +0 -1
  374. package/lib-esm/__tests__/Flex.test.js +0 -64
  375. package/lib-esm/__tests__/FormGroup.test.d.ts +0 -1
  376. package/lib-esm/__tests__/FormGroup.test.js +0 -44
  377. package/lib-esm/__tests__/Grid.test.d.ts +0 -1
  378. package/lib-esm/__tests__/Grid.test.js +0 -94
  379. package/lib-esm/__tests__/Header.test.d.ts +0 -1
  380. package/lib-esm/__tests__/Header.test.js +0 -48
  381. package/lib-esm/__tests__/Heading.test.d.ts +0 -1
  382. package/lib-esm/__tests__/Heading.test.js +0 -99
  383. package/lib-esm/__tests__/Label.test.d.ts +0 -1
  384. package/lib-esm/__tests__/Label.test.js +0 -36
  385. package/lib-esm/__tests__/LabelGroup.test.d.ts +0 -1
  386. package/lib-esm/__tests__/LabelGroup.test.js +0 -26
  387. package/lib-esm/__tests__/Link.test.d.ts +0 -1
  388. package/lib-esm/__tests__/Link.test.js +0 -60
  389. package/lib-esm/__tests__/Merge.types.test.d.ts +0 -30
  390. package/lib-esm/__tests__/Merge.types.test.js +0 -14
  391. package/lib-esm/__tests__/Overlay.test.d.ts +0 -1
  392. package/lib-esm/__tests__/Overlay.test.js +0 -123
  393. package/lib-esm/__tests__/Pagehead.test.d.ts +0 -1
  394. package/lib-esm/__tests__/Pagehead.test.js +0 -26
  395. package/lib-esm/__tests__/Pagination/Pagination.test.d.ts +0 -1
  396. package/lib-esm/__tests__/Pagination/Pagination.test.js +0 -35
  397. package/lib-esm/__tests__/Pagination/PaginationModel.test.d.ts +0 -1
  398. package/lib-esm/__tests__/Pagination/PaginationModel.test.js +0 -182
  399. package/lib-esm/__tests__/PointerBox.test.d.ts +0 -1
  400. package/lib-esm/__tests__/PointerBox.test.js +0 -36
  401. package/lib-esm/__tests__/Popover.test.d.ts +0 -1
  402. package/lib-esm/__tests__/Popover.test.js +0 -53
  403. package/lib-esm/__tests__/Portal.test.d.ts +0 -1
  404. package/lib-esm/__tests__/Portal.test.js +0 -104
  405. package/lib-esm/__tests__/Position.test.d.ts +0 -1
  406. package/lib-esm/__tests__/Position.test.js +0 -133
  407. package/lib-esm/__tests__/ProgressBar.test.d.ts +0 -1
  408. package/lib-esm/__tests__/ProgressBar.test.js +0 -58
  409. package/lib-esm/__tests__/SelectMenu.test.d.ts +0 -1
  410. package/lib-esm/__tests__/SelectMenu.test.js +0 -145
  411. package/lib-esm/__tests__/SelectPanel.test.d.ts +0 -1
  412. package/lib-esm/__tests__/SelectPanel.test.js +0 -65
  413. package/lib-esm/__tests__/SideNav.test.d.ts +0 -1
  414. package/lib-esm/__tests__/SideNav.test.js +0 -60
  415. package/lib-esm/__tests__/Spinner.test.d.ts +0 -1
  416. package/lib-esm/__tests__/Spinner.test.js +0 -43
  417. package/lib-esm/__tests__/StateLabel.test.d.ts +0 -1
  418. package/lib-esm/__tests__/StateLabel.test.js +0 -61
  419. package/lib-esm/__tests__/StyledOcticon.test.d.ts +0 -1
  420. package/lib-esm/__tests__/StyledOcticon.test.js +0 -29
  421. package/lib-esm/__tests__/SubNav.test.d.ts +0 -1
  422. package/lib-esm/__tests__/SubNav.test.js +0 -50
  423. package/lib-esm/__tests__/SubNavLink.test.d.ts +0 -1
  424. package/lib-esm/__tests__/SubNavLink.test.js +0 -39
  425. package/lib-esm/__tests__/TabNav.test.d.ts +0 -1
  426. package/lib-esm/__tests__/TabNav.test.js +0 -39
  427. package/lib-esm/__tests__/Text.test.d.ts +0 -1
  428. package/lib-esm/__tests__/Text.test.js +0 -93
  429. package/lib-esm/__tests__/TextInput.test.d.ts +0 -1
  430. package/lib-esm/__tests__/TextInput.test.js +0 -68
  431. package/lib-esm/__tests__/TextInputWithTokens.test.d.ts +0 -1
  432. package/lib-esm/__tests__/TextInputWithTokens.test.js +0 -341
  433. package/lib-esm/__tests__/ThemeProvider.test.d.ts +0 -1
  434. package/lib-esm/__tests__/ThemeProvider.test.js +0 -408
  435. package/lib-esm/__tests__/Timeline.test.d.ts +0 -1
  436. package/lib-esm/__tests__/Timeline.test.js +0 -65
  437. package/lib-esm/__tests__/Token.test.d.ts +0 -1
  438. package/lib-esm/__tests__/Token.test.js +0 -166
  439. package/lib-esm/__tests__/Tooltip.test.d.ts +0 -1
  440. package/lib-esm/__tests__/Tooltip.test.js +0 -59
  441. package/lib-esm/__tests__/Truncate.test.d.ts +0 -1
  442. package/lib-esm/__tests__/Truncate.test.js +0 -53
  443. package/lib-esm/__tests__/UnderlineNav.test.d.ts +0 -1
  444. package/lib-esm/__tests__/UnderlineNav.test.js +0 -60
  445. package/lib-esm/__tests__/UnderlineNavLink.test.d.ts +0 -1
  446. package/lib-esm/__tests__/UnderlineNavLink.test.js +0 -41
  447. package/lib-esm/__tests__/behaviors/anchoredPosition.test.d.ts +0 -1
  448. package/lib-esm/__tests__/behaviors/anchoredPosition.test.js +0 -388
  449. package/lib-esm/__tests__/behaviors/focusTrap.test.d.ts +0 -1
  450. package/lib-esm/__tests__/behaviors/focusTrap.test.js +0 -227
  451. package/lib-esm/__tests__/behaviors/focusZone.test.d.ts +0 -1
  452. package/lib-esm/__tests__/behaviors/focusZone.test.js +0 -487
  453. package/lib-esm/__tests__/behaviors/iterateFocusableElements.test.d.ts +0 -1
  454. package/lib-esm/__tests__/behaviors/iterateFocusableElements.test.js +0 -48
  455. package/lib-esm/__tests__/behaviors/scrollIntoViewingArea.test.d.ts +0 -1
  456. package/lib-esm/__tests__/behaviors/scrollIntoViewingArea.test.js +0 -224
  457. package/lib-esm/__tests__/filterObject.test.d.ts +0 -1
  458. package/lib-esm/__tests__/filterObject.test.js +0 -27
  459. package/lib-esm/__tests__/hooks/useAnchoredPosition.test.d.ts +0 -1
  460. package/lib-esm/__tests__/hooks/useAnchoredPosition.test.js +0 -46
  461. package/lib-esm/__tests__/hooks/useOnEscapePress.test.d.ts +0 -1
  462. package/lib-esm/__tests__/hooks/useOnEscapePress.test.js +0 -23
  463. package/lib-esm/__tests__/hooks/useOnOutsideClick.test.d.ts +0 -1
  464. package/lib-esm/__tests__/hooks/useOnOutsideClick.test.js +0 -68
  465. package/lib-esm/__tests__/hooks/useOpenAndCloseFocus.test.d.ts +0 -1
  466. package/lib-esm/__tests__/hooks/useOpenAndCloseFocus.test.js +0 -52
  467. package/lib-esm/__tests__/hooks/useProvidedStateOrCreate.test.d.ts +0 -1
  468. package/lib-esm/__tests__/hooks/useProvidedStateOrCreate.test.js +0 -36
  469. package/lib-esm/__tests__/theme.test.d.ts +0 -1
  470. package/lib-esm/__tests__/theme.test.js +0 -33
  471. package/lib-esm/__tests__/themeGet.test.d.ts +0 -1
  472. package/lib-esm/__tests__/themeGet.test.js +0 -22
  473. package/lib-esm/__tests__/useSafeTimeout.test.d.ts +0 -1
  474. package/lib-esm/__tests__/useSafeTimeout.test.js +0 -39
  475. package/lib-esm/stories/ActionList.stories.js +0 -394
  476. package/lib-esm/stories/ActionMenu.stories.js +0 -293
  477. package/lib-esm/stories/AnchoredOverlay.stories.js +0 -101
  478. package/lib-esm/stories/Autocomplete.stories.js +0 -549
  479. package/lib-esm/stories/AvatarStack.stories.js +0 -32
  480. package/lib-esm/stories/Button.stories.js +0 -78
  481. package/lib-esm/stories/ConfirmationDialog.stories.js +0 -86
  482. package/lib-esm/stories/Dialog.stories.js +0 -240
  483. package/lib-esm/stories/DropdownMenu.stories.js +0 -94
  484. package/lib-esm/stories/IssueLabelToken.stories.js +0 -139
  485. package/lib-esm/stories/Overlay.stories.js +0 -173
  486. package/lib-esm/stories/Portal.stories.js +0 -68
  487. package/lib-esm/stories/ProfileToken.stories.js +0 -136
  488. package/lib-esm/stories/SelectPanel.stories.js +0 -334
  489. package/lib-esm/stories/TextInputWithTokens.stories.js +0 -196
  490. package/lib-esm/stories/ThemeProvider.stories.js +0 -83
  491. package/lib-esm/stories/Token.stories.js +0 -133
  492. package/lib-esm/stories/useAnchoredPosition.stories.js +0 -313
  493. package/lib-esm/stories/useFocusTrap.stories.js +0 -309
  494. package/lib-esm/stories/useFocusZone.stories.js +0 -554
  495. package/migrating.md +0 -250
  496. package/now.json +0 -17
  497. package/package-lock.json +0 -29369
  498. package/rollup.config.js +0 -36
  499. package/script/build +0 -19
  500. package/script/build-storybook +0 -10
  501. package/script/setup +0 -12
  502. package/src/ActionList/Divider.tsx +0 -25
  503. package/src/ActionList/Group.tsx +0 -45
  504. package/src/ActionList/Header.tsx +0 -74
  505. package/src/ActionList/Item.tsx +0 -483
  506. package/src/ActionList/List.tsx +0 -258
  507. package/src/ActionList/index.ts +0 -21
  508. package/src/ActionMenu.tsx +0 -106
  509. package/src/AnchoredOverlay/AnchoredOverlay.tsx +0 -191
  510. package/src/AnchoredOverlay/index.ts +0 -2
  511. package/src/Autocomplete/Autocomplete.tsx +0 -103
  512. package/src/Autocomplete/AutocompleteContext.tsx +0 -19
  513. package/src/Autocomplete/AutocompleteInput.tsx +0 -179
  514. package/src/Autocomplete/AutocompleteMenu.tsx +0 -341
  515. package/src/Autocomplete/AutocompleteOverlay.tsx +0 -68
  516. package/src/Autocomplete/index.ts +0 -2
  517. package/src/Avatar.tsx +0 -46
  518. package/src/AvatarPair.tsx +0 -35
  519. package/src/AvatarStack.tsx +0 -159
  520. package/src/BaseStyles.tsx +0 -53
  521. package/src/BorderBox.tsx +0 -18
  522. package/src/Box.tsx +0 -54
  523. package/src/BranchName.tsx +0 -19
  524. package/src/Breadcrumbs.tsx +0 -101
  525. package/src/Button/Button.tsx +0 -40
  526. package/src/Button/ButtonBase.tsx +0 -43
  527. package/src/Button/ButtonClose.tsx +0 -40
  528. package/src/Button/ButtonDanger.tsx +0 -43
  529. package/src/Button/ButtonGroup.tsx +0 -55
  530. package/src/Button/ButtonInvisible.tsx +0 -27
  531. package/src/Button/ButtonOutline.tsx +0 -43
  532. package/src/Button/ButtonPrimary.tsx +0 -41
  533. package/src/Button/ButtonStyles.tsx +0 -36
  534. package/src/Button/ButtonTableList.tsx +0 -58
  535. package/src/Button/index.ts +0 -16
  536. package/src/Caret.tsx +0 -133
  537. package/src/CircleBadge.tsx +0 -55
  538. package/src/CircleOcticon.tsx +0 -37
  539. package/src/CounterLabel.tsx +0 -52
  540. package/src/Details.tsx +0 -23
  541. package/src/Dialog/ConfirmationDialog.tsx +0 -184
  542. package/src/Dialog/Dialog.tsx +0 -432
  543. package/src/Dialog.tsx +0 -149
  544. package/src/Dropdown.tsx +0 -158
  545. package/src/DropdownMenu/DropdownButton.tsx +0 -15
  546. package/src/DropdownMenu/DropdownMenu.tsx +0 -115
  547. package/src/DropdownMenu/index.ts +0 -4
  548. package/src/DropdownStyles.ts +0 -128
  549. package/src/FilterList.tsx +0 -81
  550. package/src/FilteredActionList/FilteredActionList.tsx +0 -142
  551. package/src/FilteredActionList/index.ts +0 -2
  552. package/src/FilteredSearch.tsx +0 -28
  553. package/src/Flash.tsx +0 -77
  554. package/src/Flex.tsx +0 -15
  555. package/src/FormGroup.tsx +0 -27
  556. package/src/Grid.tsx +0 -15
  557. package/src/Header.tsx +0 -84
  558. package/src/Heading.tsx +0 -21
  559. package/src/Label.tsx +0 -75
  560. package/src/LabelGroup.tsx +0 -18
  561. package/src/Link.tsx +0 -46
  562. package/src/Overlay.tsx +0 -197
  563. package/src/Pagehead.tsx +0 -17
  564. package/src/Pagination/Pagination.tsx +0 -214
  565. package/src/Pagination/index.ts +0 -4
  566. package/src/Pagination/model.tsx +0 -187
  567. package/src/PointerBox.tsx +0 -31
  568. package/src/Popover.tsx +0 -236
  569. package/src/Portal/Portal.tsx +0 -96
  570. package/src/Portal/index.ts +0 -5
  571. package/src/Position.tsx +0 -63
  572. package/src/ProgressBar.tsx +0 -52
  573. package/src/SelectMenu/SelectMenu.tsx +0 -125
  574. package/src/SelectMenu/SelectMenuContext.tsx +0 -9
  575. package/src/SelectMenu/SelectMenuDivider.tsx +0 -25
  576. package/src/SelectMenu/SelectMenuFilter.tsx +0 -51
  577. package/src/SelectMenu/SelectMenuFooter.tsx +0 -28
  578. package/src/SelectMenu/SelectMenuHeader.tsx +0 -50
  579. package/src/SelectMenu/SelectMenuItem.tsx +0 -137
  580. package/src/SelectMenu/SelectMenuList.tsx +0 -42
  581. package/src/SelectMenu/SelectMenuLoadingAnimation.tsx +0 -24
  582. package/src/SelectMenu/SelectMenuModal.tsx +0 -121
  583. package/src/SelectMenu/SelectMenuTab.tsx +0 -88
  584. package/src/SelectMenu/SelectMenuTabPanel.tsx +0 -30
  585. package/src/SelectMenu/SelectMenuTabs.tsx +0 -44
  586. package/src/SelectMenu/hooks/useKeyboardNav.js +0 -90
  587. package/src/SelectMenu/index.ts +0 -15
  588. package/src/SelectPanel/SelectPanel.tsx +0 -173
  589. package/src/SelectPanel/index.ts +0 -2
  590. package/src/SideNav.tsx +0 -193
  591. package/src/Spinner.tsx +0 -59
  592. package/src/StateLabel.tsx +0 -102
  593. package/src/StyledOcticon.tsx +0 -24
  594. package/src/SubNav.tsx +0 -129
  595. package/src/TabNav.tsx +0 -77
  596. package/src/Text.tsx +0 -13
  597. package/src/TextInput.tsx +0 -68
  598. package/src/TextInputWithTokens.tsx +0 -271
  599. package/src/ThemeProvider.tsx +0 -176
  600. package/src/Timeline.tsx +0 -141
  601. package/src/Token/AvatarToken.tsx +0 -54
  602. package/src/Token/IssueLabelToken.tsx +0 -150
  603. package/src/Token/Token.tsx +0 -112
  604. package/src/Token/TokenBase.tsx +0 -134
  605. package/src/Token/_RemoveTokenButton.tsx +0 -98
  606. package/src/Token/_TokenTextContainer.tsx +0 -47
  607. package/src/Token/index.ts +0 -3
  608. package/src/Tooltip.tsx +0 -263
  609. package/src/Truncate.tsx +0 -36
  610. package/src/UnderlineNav.tsx +0 -110
  611. package/src/_TextInputWrapper.tsx +0 -105
  612. package/src/_UnstyledTextInput.tsx +0 -19
  613. package/src/__tests__/.eslintrc.json +0 -11
  614. package/src/__tests__/ActionList.test.tsx +0 -53
  615. package/src/__tests__/ActionList.types.test.tsx +0 -51
  616. package/src/__tests__/ActionMenu.test.tsx +0 -136
  617. package/src/__tests__/AnchoredOverlay.test.tsx +0 -150
  618. package/src/__tests__/Autocomplete.test.tsx +0 -444
  619. package/src/__tests__/Avatar.test.tsx +0 -44
  620. package/src/__tests__/AvatarStack.test.tsx +0 -48
  621. package/src/__tests__/BorderBox.test.tsx +0 -43
  622. package/src/__tests__/Box.test.tsx +0 -42
  623. package/src/__tests__/BranchName.test.tsx +0 -26
  624. package/src/__tests__/Breadcrumbs.test.tsx +0 -27
  625. package/src/__tests__/BreadcrumbsItem.test.tsx +0 -31
  626. package/src/__tests__/Button.test.tsx +0 -128
  627. package/src/__tests__/Caret.test.tsx +0 -36
  628. package/src/__tests__/CircleBadge.test.tsx +0 -66
  629. package/src/__tests__/CircleOcticon.test.tsx +0 -50
  630. package/src/__tests__/ConfirmationDialog.test.tsx +0 -120
  631. package/src/__tests__/CounterLabel.test.tsx +0 -50
  632. package/src/__tests__/Details.test.tsx +0 -115
  633. package/src/__tests__/Dialog.test.tsx +0 -155
  634. package/src/__tests__/Dropdown.test.tsx +0 -53
  635. package/src/__tests__/DropdownMenu.test.tsx +0 -136
  636. package/src/__tests__/FilterList.test.tsx +0 -26
  637. package/src/__tests__/FilterListItem.test.tsx +0 -31
  638. package/src/__tests__/FilteredSearch.test.tsx +0 -26
  639. package/src/__tests__/Flash.test.tsx +0 -45
  640. package/src/__tests__/Flex.test.tsx +0 -58
  641. package/src/__tests__/FormGroup.test.tsx +0 -38
  642. package/src/__tests__/Grid.test.tsx +0 -82
  643. package/src/__tests__/Header.test.tsx +0 -49
  644. package/src/__tests__/Heading.test.tsx +0 -91
  645. package/src/__tests__/Label.test.tsx +0 -34
  646. package/src/__tests__/LabelGroup.test.tsx +0 -30
  647. package/src/__tests__/Link.test.tsx +0 -47
  648. package/src/__tests__/Merge.types.test.ts +0 -39
  649. package/src/__tests__/Overlay.test.tsx +0 -103
  650. package/src/__tests__/Pagehead.test.tsx +0 -23
  651. package/src/__tests__/Pagination/Pagination.test.tsx +0 -30
  652. package/src/__tests__/Pagination/PaginationModel.test.tsx +0 -133
  653. package/src/__tests__/Pagination/__snapshots__/Pagination.test.tsx.snap +0 -184
  654. package/src/__tests__/PointerBox.test.tsx +0 -34
  655. package/src/__tests__/Popover.test.tsx +0 -68
  656. package/src/__tests__/Portal.test.tsx +0 -103
  657. package/src/__tests__/Position.test.tsx +0 -117
  658. package/src/__tests__/ProgressBar.test.tsx +0 -40
  659. package/src/__tests__/SelectMenu.test.tsx +0 -142
  660. package/src/__tests__/SelectPanel.test.tsx +0 -63
  661. package/src/__tests__/SideNav.test.tsx +0 -62
  662. package/src/__tests__/Spinner.test.tsx +0 -42
  663. package/src/__tests__/StateLabel.test.tsx +0 -48
  664. package/src/__tests__/StyledOcticon.test.tsx +0 -26
  665. package/src/__tests__/SubNav.test.tsx +0 -50
  666. package/src/__tests__/SubNavLink.test.tsx +0 -31
  667. package/src/__tests__/TabNav.test.tsx +0 -32
  668. package/src/__tests__/Text.test.tsx +0 -78
  669. package/src/__tests__/TextInput.test.tsx +0 -49
  670. package/src/__tests__/TextInputWithTokens.test.tsx +0 -262
  671. package/src/__tests__/ThemeProvider.test.tsx +0 -441
  672. package/src/__tests__/Timeline.test.tsx +0 -58
  673. package/src/__tests__/Token.test.tsx +0 -118
  674. package/src/__tests__/Tooltip.test.tsx +0 -52
  675. package/src/__tests__/Truncate.test.tsx +0 -43
  676. package/src/__tests__/UnderlineNav.test.tsx +0 -58
  677. package/src/__tests__/UnderlineNavLink.test.tsx +0 -31
  678. package/src/__tests__/__snapshots__/ActionList.test.tsx.snap +0 -223
  679. package/src/__tests__/__snapshots__/ActionMenu.test.tsx.snap +0 -80
  680. package/src/__tests__/__snapshots__/AnchoredOverlay.test.tsx.snap +0 -332
  681. package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +0 -3414
  682. package/src/__tests__/__snapshots__/Avatar.test.tsx.snap +0 -19
  683. package/src/__tests__/__snapshots__/AvatarStack.test.tsx.snap +0 -377
  684. package/src/__tests__/__snapshots__/BorderBox.test.tsx.snap +0 -14
  685. package/src/__tests__/__snapshots__/Box.test.tsx.snap +0 -201
  686. package/src/__tests__/__snapshots__/BranchName.test.tsx.snap +0 -17
  687. package/src/__tests__/__snapshots__/Breadcrumbs.test.tsx.snap +0 -29
  688. package/src/__tests__/__snapshots__/BreadcrumbsItem.test.tsx.snap +0 -79
  689. package/src/__tests__/__snapshots__/Button.test.tsx.snap +0 -832
  690. package/src/__tests__/__snapshots__/Caret.test.tsx.snap +0 -373
  691. package/src/__tests__/__snapshots__/CircleBadge.test.tsx.snap +0 -141
  692. package/src/__tests__/__snapshots__/CircleOcticon.test.tsx.snap +0 -64
  693. package/src/__tests__/__snapshots__/ConfirmationDialog.test.tsx.snap +0 -89
  694. package/src/__tests__/__snapshots__/CounterLabel.test.tsx.snap +0 -22
  695. package/src/__tests__/__snapshots__/Details.test.tsx.snap +0 -15
  696. package/src/__tests__/__snapshots__/Dialog.test.tsx.snap +0 -200
  697. package/src/__tests__/__snapshots__/Dropdown.test.tsx.snap +0 -249
  698. package/src/__tests__/__snapshots__/DropdownMenu.test.tsx.snap +0 -106
  699. package/src/__tests__/__snapshots__/FilterList.test.tsx.snap +0 -13
  700. package/src/__tests__/__snapshots__/FilterListItem.test.tsx.snap +0 -80
  701. package/src/__tests__/__snapshots__/FilteredSearch.test.tsx.snap +0 -32
  702. package/src/__tests__/__snapshots__/Flash.test.tsx.snap +0 -32
  703. package/src/__tests__/__snapshots__/Flex.test.tsx.snap +0 -130
  704. package/src/__tests__/__snapshots__/FormGroup.test.tsx.snap +0 -25
  705. package/src/__tests__/__snapshots__/Grid.test.tsx.snap +0 -178
  706. package/src/__tests__/__snapshots__/Header.test.tsx.snap +0 -79
  707. package/src/__tests__/__snapshots__/Heading.test.tsx.snap +0 -13
  708. package/src/__tests__/__snapshots__/Label.test.tsx.snap +0 -74
  709. package/src/__tests__/__snapshots__/LabelGroup.test.tsx.snap +0 -15
  710. package/src/__tests__/__snapshots__/Link.test.tsx.snap +0 -213
  711. package/src/__tests__/__snapshots__/Pagehead.test.tsx.snap +0 -15
  712. package/src/__tests__/__snapshots__/PointerBox.test.tsx.snap +0 -174
  713. package/src/__tests__/__snapshots__/Popover.test.tsx.snap +0 -4687
  714. package/src/__tests__/__snapshots__/Position.test.tsx.snap +0 -44
  715. package/src/__tests__/__snapshots__/ProgressBar.test.tsx.snap +0 -53
  716. package/src/__tests__/__snapshots__/SelectMenu.test.tsx.snap +0 -469
  717. package/src/__tests__/__snapshots__/SelectPanel.test.tsx.snap +0 -123
  718. package/src/__tests__/__snapshots__/SideNav.test.tsx.snap +0 -143
  719. package/src/__tests__/__snapshots__/Spinner.test.tsx.snap +0 -33
  720. package/src/__tests__/__snapshots__/StateLabel.test.tsx.snap +0 -388
  721. package/src/__tests__/__snapshots__/StyledOcticon.test.tsx.snap +0 -25
  722. package/src/__tests__/__snapshots__/SubNav.test.tsx.snap +0 -44
  723. package/src/__tests__/__snapshots__/SubNavLink.test.tsx.snap +0 -199
  724. package/src/__tests__/__snapshots__/TabNav.test.tsx.snap +0 -58
  725. package/src/__tests__/__snapshots__/Text.test.tsx.snap +0 -7
  726. package/src/__tests__/__snapshots__/TextInput.test.tsx.snap +0 -440
  727. package/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap +0 -5308
  728. package/src/__tests__/__snapshots__/ThemeProvider.test.tsx.snap +0 -15
  729. package/src/__tests__/__snapshots__/Timeline.test.tsx.snap +0 -159
  730. package/src/__tests__/__snapshots__/Token.test.tsx.snap +0 -3787
  731. package/src/__tests__/__snapshots__/Tooltip.test.tsx.snap +0 -227
  732. package/src/__tests__/__snapshots__/Truncate.test.tsx.snap +0 -17
  733. package/src/__tests__/__snapshots__/UnderlineNav.test.tsx.snap +0 -59
  734. package/src/__tests__/__snapshots__/UnderlineNavLink.test.tsx.snap +0 -130
  735. package/src/__tests__/behaviors/anchoredPosition.test.ts +0 -295
  736. package/src/__tests__/behaviors/focusTrap.test.tsx +0 -236
  737. package/src/__tests__/behaviors/focusZone.test.tsx +0 -549
  738. package/src/__tests__/behaviors/iterateFocusableElements.test.tsx +0 -61
  739. package/src/__tests__/behaviors/scrollIntoViewingArea.test.ts +0 -195
  740. package/src/__tests__/filterObject.test.ts +0 -54
  741. package/src/__tests__/hooks/useAnchoredPosition.test.tsx +0 -31
  742. package/src/__tests__/hooks/useOnEscapePress.test.tsx +0 -16
  743. package/src/__tests__/hooks/useOnOutsideClick.test.tsx +0 -48
  744. package/src/__tests__/hooks/useOpenAndCloseFocus.test.tsx +0 -48
  745. package/src/__tests__/hooks/useProvidedStateOrCreate.test.tsx +0 -39
  746. package/src/__tests__/theme.test.ts +0 -41
  747. package/src/__tests__/themeGet.test.ts +0 -15
  748. package/src/__tests__/useSafeTimeout.test.tsx +0 -36
  749. package/src/behaviors/anchoredPosition.ts +0 -442
  750. package/src/behaviors/focusTrap.ts +0 -184
  751. package/src/behaviors/focusZone.ts +0 -713
  752. package/src/behaviors/scrollIntoViewingArea.ts +0 -27
  753. package/src/constants.ts +0 -62
  754. package/src/hooks/index.ts +0 -11
  755. package/src/hooks/useAnchoredPosition.ts +0 -53
  756. package/src/hooks/useCombinedRefs.ts +0 -40
  757. package/src/hooks/useDetails.tsx +0 -54
  758. package/src/hooks/useDialog.ts +0 -121
  759. package/src/hooks/useFocusTrap.ts +0 -80
  760. package/src/hooks/useFocusZone.ts +0 -64
  761. package/src/hooks/useOnEscapePress.ts +0 -63
  762. package/src/hooks/useOnOutsideClick.tsx +0 -82
  763. package/src/hooks/useOpenAndCloseFocus.ts +0 -32
  764. package/src/hooks/useOverlay.tsx +0 -34
  765. package/src/hooks/useProvidedRefOrCreate.ts +0 -14
  766. package/src/hooks/useProvidedStateOrCreate.ts +0 -27
  767. package/src/hooks/useRenderForcingRef.ts +0 -22
  768. package/src/hooks/useResizeObserver.ts +0 -11
  769. package/src/hooks/useSafeTimeout.ts +0 -38
  770. package/src/hooks/useScrollFlash.ts +0 -21
  771. package/src/index.ts +0 -170
  772. package/src/polyfills/eventListenerSignal.ts +0 -66
  773. package/src/stories/ActionList.stories.tsx +0 -437
  774. package/src/stories/ActionMenu.stories.tsx +0 -322
  775. package/src/stories/AnchoredOverlay.stories.tsx +0 -117
  776. package/src/stories/Autocomplete.stories.tsx +0 -572
  777. package/src/stories/AvatarStack.stories.tsx +0 -37
  778. package/src/stories/Button.stories.tsx +0 -88
  779. package/src/stories/ConfirmationDialog.stories.tsx +0 -105
  780. package/src/stories/Dialog.stories.tsx +0 -240
  781. package/src/stories/DropdownMenu.stories.tsx +0 -84
  782. package/src/stories/IssueLabelToken.stories.tsx +0 -138
  783. package/src/stories/Overlay.stories.tsx +0 -213
  784. package/src/stories/Portal.stories.tsx +0 -109
  785. package/src/stories/ProfileToken.stories.tsx +0 -129
  786. package/src/stories/SelectPanel.stories.tsx +0 -353
  787. package/src/stories/TextInputWithTokens.stories.tsx +0 -146
  788. package/src/stories/ThemeProvider.stories.tsx +0 -104
  789. package/src/stories/Token.stories.tsx +0 -126
  790. package/src/stories/useAnchoredPosition.stories.tsx +0 -320
  791. package/src/stories/useFocusTrap.stories.tsx +0 -400
  792. package/src/stories/useFocusZone.stories.tsx +0 -663
  793. package/src/sx.ts +0 -9
  794. package/src/theme-preval.js +0 -79
  795. package/src/theme.ts +0 -3
  796. package/src/utils/deprecate.tsx +0 -73
  797. package/src/utils/isNumeric.tsx +0 -4
  798. package/src/utils/iterateFocusableElements.ts +0 -121
  799. package/src/utils/ssr.tsx +0 -1
  800. package/src/utils/test-deprecations.tsx +0 -19
  801. package/src/utils/test-helpers.tsx +0 -7
  802. package/src/utils/test-matchers.tsx +0 -109
  803. package/src/utils/testing.tsx +0 -242
  804. package/src/utils/theme.js +0 -64
  805. package/src/utils/types/AriaRole.ts +0 -71
  806. package/src/utils/types/ComponentProps.ts +0 -13
  807. package/src/utils/types/Flatten.ts +0 -4
  808. package/src/utils/types/MandateProps.ts +0 -19
  809. package/src/utils/types/Merge.ts +0 -20
  810. package/src/utils/types/index.ts +0 -5
  811. package/src/utils/uniqueId.ts +0 -6
  812. package/src/utils/userAgent.ts +0 -7
  813. package/stats.html +0 -3279
  814. package/tsconfig.build.json +0 -7
  815. package/tsconfig.json +0 -20
@@ -1,274 +0,0 @@
1
- # Contribution guidelines
2
-
3
- 1. [Roadmap](#roadmap)
4
- 2. [Before Getting Started](#before-getting-started)
5
- 3. [Discussing non-public features or products](#discussing-non-public-features-or-products)
6
- 4. [Developing Components](#developing-components)
7
- - [Tools we use](#tools-we-use)
8
- - [Component patterns](#component-patterns)
9
- - [Adding system props](#adding-system-props)
10
- - [Adding the sx prop](#adding-the-sx-prop)
11
- - [Linting](#linting)
12
- - [Testing](#testing)
13
- - [TypeScript support](#typescript-support)
14
- - [Additional resources](#additional-resources)
15
- 5. [Writing documentation](#writing-documentation)
16
- 6. [Creating a pull request](#creating-a-pull-request)
17
- - [What to expect after opening a pull request](#what-to-expect-after-opening-a-pull-request)
18
- - [What we look for in reviews](#what-we-look-for-in-reviews)
19
- 7. [Deploying & publishing](#deploying-and-publishing)
20
- - [Deploying](#deploying)
21
- - [Path aliasing](#path-aliasing)
22
- - [Publishing](#publishing)
23
- 8. [Troubleshooting](#troubleshooting)
24
- 9. [Glossary](#glossary)
25
- - [System Props](#system-props)
26
-
27
- ## Roadmap
28
-
29
- If you're looking for something to work on, a great place to start is our issues labeled [up for grabs](https://github.com/primer/react/issues?q=is%3Aopen+is%3Aissue+label%3A%22up+for+grabs%22)! If you've got a feature that you'd like to implement, be sure to check out our [Primer Components Roadmap](https://github.com/primer/react/projects/3) to make sure it hasn't already been started on.
30
-
31
- ## Before Getting Started
32
-
33
- A common question asked about Primer Components is how to know what should be added to Primer Components and what is best left as a local component in a consuming application. Though there are no hard & fast rules about what can and cannot be added to Primer Components, here are a few things we take into consideration:
34
-
35
- - Is the new feature an existing pattern in Primer CSS or related to UI built at GitHub? Primer Components is first and foremost a library for building UI at GitHub - patterns that aren't currently being used in GitHub UI (either on github.com or in a GitHub owned project outside of github.com) probably shouldn't be added to Primer Components. Exceptions to this could be helper components that don't necessarily render UI but help with the development process (like `Flex`, `Grid`, or `Box`).
36
-
37
- - Does the proposed component get used in more than one or two places across GitHub UI? A component that's only meant to be used in one place and doesn't have potential to be reused in many places probably should exist as a local component. An example of something like this might be a component that renders content specific to a single GitHub product.
38
-
39
- **In general, we tend to be pretty excited about 99% of feature proposals and contributions!** If you would like to get started with a component proposal, open an issue using the [component proposal template](https://github.com/primer/react/issues/new?template=new-component-proposal.md).
40
-
41
- ## Discussing non-public features or products
42
-
43
- As this is a public repo, please be careful not to include details or screenshots from unreleased GitHub products or features. In most cases, a good bug report, feature request, or pull request should be able to describe the work without including business logic or feature details, but if you must discuss context relating to an unreleased feature, please open an issue in the private [Design Systems repo](https://github.com/github/design-systems/issues/new/choose) and link to it in your issue or pull request.
44
-
45
- ## Developing components
46
-
47
- We primarily use our documentation site as a workspace to develop new components or make changes to existing components (stay tuned for a better development environment coming soon!).
48
-
49
- Before running the documentation site locally, you'll need to install packages in the root and `docs` directories:
50
-
51
- ```sh
52
- npm install && cd docs && npm install
53
- ```
54
-
55
- Then navigate back to the root folder and run the following to start up the site:
56
-
57
- ```sh
58
- npm start
59
- ```
60
-
61
- Navigate to http://localhost:8000/ to see the site in your browser ✨
62
-
63
- ### Tools we use
64
-
65
- 1. We use [styled-components](https://www.styled-components.com/) to style our components.
66
- 2. We use style functions from [styled-system](https://styled-system.com/) whenever possible, and styled-systems' `style()` function to create new ones.
67
-
68
- ### Component patterns
69
-
70
- With a couple of exceptions, all components should be created with the `styled` function from [styled-components] and should have the appropriate groups of system props attached.
71
-
72
- Default values for system props can be set in `Component.defaultProps`.
73
-
74
- ⚠️ **Do not set the default `theme` prop! This can sometimes override the theme provided by the ThemeProvider and cause unexpected theming issues.**
75
-
76
- Additionally, every component should support [the `sx` prop](https://primer.style/components/overriding-styles); remember to add `${sx}` to the style literal.
77
-
78
- Here's an example of a basic component written in the style of Primer Components:
79
-
80
- ```jsx
81
- import {TYPOGRAPHY, COMMON} from './constants'
82
- import sx from './sx'
83
-
84
- const Component = styled.div`
85
- // additional styles here
86
-
87
- ${COMMON};
88
- ${TYPOGRAPHY};
89
- ${sx};
90
- `
91
-
92
- Component.defaultProps = {
93
- m: 0,
94
- fontSize: 5,
95
- }
96
-
97
- export default Component
98
- ```
99
-
100
- ### Adding system props
101
-
102
- Each component should have access to the appropriate system props. Every component has access to `COMMON`. For **most** components added, you'll only need to give the component to `COMMON`. If you are unsure, ping a DS team member on your PR.
103
-
104
- Categories of system props are exported from `src/constants.js`:
105
-
106
- - `COMMON` includes color and spacing (margin and padding) props
107
- - `TYPOGRAPHY` includes font family, font weight, and line-height props
108
- - `POSITION` includes positioning props
109
- - `FLEX` includes flexbox props
110
- - `BORDER` includes border and box-shadow props
111
- - `GRID` includes grid props
112
-
113
- To give the component access to a group of system props, import the system prop function from `./constants` and include the system prop function in your styled-component like so:
114
-
115
- ```jsx
116
- import {COMMON} from './constants'
117
-
118
- const Component = styled.div`
119
- // additional styles here
120
- ${COMMON};
121
- `
122
- ```
123
-
124
- Remember that the system prop function inside your style declaration needs to go _after_ any built-in styles you want to be overridable.
125
-
126
- ### Adding the `sx` prop
127
-
128
- Each component should provide access to a prop called `sx` that allows for setting theme-aware ad-hoc styles. See the [overriding styles](https://primer.style/components/overriding-styles) doc for more information on using the prop.
129
-
130
- Adding the `sx` prop is similar to adding system props; import the default export from the `sx` module, add it to your style definition, and add the appropriate prop types. **The `sx` prop should go at the _very end_ of your style definition.**
131
-
132
- ```jsx
133
- import {COMMON} from './constants'
134
- import sx from './sx'
135
-
136
- const Component = styled.div`
137
- // additional styles here
138
- ${COMMON};
139
- ${sx};
140
- `
141
- ```
142
-
143
- ### Linting
144
-
145
- We use the [React configuration](https://github.com/github/eslint-plugin-github/blob/master/lib/configs/react.js) from [GitHub's eslint plugin](https://github.com/github/eslint-plugin-github) to lint our JavaScript. To check your work before pushing, run:
146
-
147
- ```sh
148
- npm run lint
149
- ```
150
-
151
- Or, you can use [npx] to run eslint on one or more specific files:
152
-
153
- ```sh
154
- # lint the component and the tests in src/__tests__
155
- npx eslint src/**/MyComponent.js
156
- ```
157
-
158
- **Protip:** The [eslint `--fix` flag](https://eslint.org/docs/user-guide/command-line-interface#--fix) can automatically fix most linting errors, such as those involving whitespace or incorrect ordering of object keys and imports. You can fix those issues across the entire project with:
159
-
160
- ```sh
161
- npm run lint -- --fix
162
- ```
163
-
164
- **Protip:** `npm run lint -- --quiet` (or `npx eslint --quiet ...`) will suppress warnings so that you can focus on fixing errors.
165
-
166
- ### Testing
167
-
168
- We test our components with [Jest](https://facebook.github.io/jest/) and [react-test-renderer](https://reactjs.org/docs/test-renderer.html). You can run the tests locally with `npm test`. To run the tests as you work, run Jest in watch mode with:
169
-
170
- ```sh
171
- npm test -- --watch
172
- ```
173
-
174
- See [`src/__tests__/example.js`](src/__tests__/example.js) for examples of ways that we test our components.
175
-
176
- ### TypeScript support
177
-
178
- Several of the projects that consume Primer Components are written in TypeScript. Though Primer Components is not currently written in TS, we do export type definitions in order to make Primer Components compatible with other TS projects.
179
-
180
- Whenever adding new components or modifying the props of an existing component, **please make sure to update the type definition** in `index.d.ts`! This is super important to make sure we don't break compatibility :)
181
-
182
- ### Additional resources
183
-
184
- - [Primer Components Philosophy](https://primer.style/components/philosophy)
185
- - [Primer Components Core Concepts](https://primer.style/components/core-concepts)
186
- - [Primer Components System Props](https://primer.style/components/system-props)
187
- - [Styled Components docs](https://styled-components.com/)
188
- - [Styled System docs](https://styled-system.com/)
189
-
190
- ## Writing documentation
191
-
192
- We use [Doctocat](https://github.com/primer/doctocat) to power our documentation site at [https://primer.style/components](https://primer.style/components/).
193
-
194
- To add a new component to our documentation site, create a new file with the `.md` extension for your component in `docs/content` (e.g. `docs/content/Button.md`).
195
-
196
- ## Creating a pull request
197
-
198
- When creating a new pull request, please follow the guidelines in the auto-populated pull request template. Be sure to add screenshots of any relevant work and a thoughtful description.
199
-
200
- ### What to expect after opening a pull request
201
-
202
- After opening a pull request, a member of the design systems team will add the appropriate labels (major, minor, patch release labels) and update the base branch to the correct release branch. Usually, you'll receive a response from the design systems team within a day or two. The design systems team member will review the pull request keeping the following items in mind:
203
-
204
- ### What we look for in reviews
205
-
206
- - If it's a new component, does the component make sense to add to Primer Components? (Ideally this is discussed before the pull request stage, please reach out to a DS member if you aren't sure if a component should be added to Primer Components!)
207
- - Does the component follow our [Primer Components code style](#component-patterns)?
208
- - Does the component use theme values for most CSS values?
209
- - Does the component have the [correct system props implemented](#adding-system-props)?
210
- - Is the component API intuitive?
211
- - Does the component have the appropriate [type definitions in `index.d.ts`](#typescript-support)?
212
- - Is the component documented accurately?
213
- - Does the component have appropriate tests?
214
- - Does the pull request increase the bundle size significantly?
215
-
216
- If everything looks great, the design systems team member will approve the pull request and merge when appropriate. Minor and patch changes are released frequently, and we try to bundle up breaking changes and avoid shipping major versions too often. If your pull request is time-sensitive, please let a design systems team member know. You do not need to worry about merging pull requests on your own, we'll take care of that for you :)
217
-
218
- ## Deploying and publishing
219
-
220
- ### Deploying
221
-
222
- All of our documentation sites use the [Now integration](https://github.com/organizations/primer/settings/installations/1007619) to deploy documentation changes whenever code is merged into main. The integration also creates a preview site every time you commit code to a branch. To view the preview site, navigate to the PR and find the comment from the `now` bot. This will include a link to the preview site for your branch.
223
-
224
- Once you merge your branch into main, any changes to the docs will automatically deploy. No further action is necessary.
225
-
226
- ### Path aliasing
227
-
228
- This site is served as a subdirectory of [primer.style] using a [path alias](https://zeit.co/docs/features/path-aliases) configured in that repo's [`rules.json`](https://github.com/primer/primer.style/tree/master/rules.json). If you change the production deployment URL for this app, you will also need to change it there and re-deploy that app; otherwise, Now will automatically route requests from [primer.style/components](https://primer.style/components/) to the new deployment whenever you alias this one to `primer-components.now.sh`.
229
-
230
- ### Publishing
231
-
232
- We use [changesets](https://github.com/atlassian/changesets) to managing versioning, publishing, and release notes. Here's how it works:
233
-
234
- #### Using changesets to prepare and publish a release
235
-
236
- 1. When creating a new PR, changeset-bot will remind you to add a changeset if your change should trigger a new version number for the package.
237
- 2. To create a new changeset on your local machine, run `npx changeset` and answer the prompts. If you are introducing multiple features in the PR, add a separate changeset for each.
238
- 3. Push your new changes along with the changeset file to your PR; changeset-bot will show that there are valid changesets in the PR.
239
- 4. When the PR is ready, merge it to the main branch.
240
- 5. The changeset action will automatically create a new PR that bumps the version number appropriately, creates or updates `CHANGELOG.md`, and shows the release notes that will be used in the GitHub Release notes.
241
- 6. If you want to release more features, merge them into the main branch and changesets will update the release PR. Note that it does this via force-pushing, so you should not edit the release PR yourself.
242
- 7. When you're ready to release, merge the release PR into the main branch and changesets will publish the new version to npm and create a GitHub Release.
243
-
244
- ## Troubleshooting
245
-
246
- **`npm start` fails with an error like `gatsby: command not found`**
247
-
248
- Make sure to run `npm install` from inside the `docs/` subfolder _as well as_ the root folder.
249
-
250
- **`npm start` fails with a different error**
251
-
252
- Ensure you are using the latest minor of Node.js for the major version specified in the `.nvmrc` file. For example, if `.nvmrc` contains `8`, make sure you're using the latest version of Node.js with the major version of 8.
253
-
254
- ## Glossary
255
-
256
- ### System props
257
-
258
- System props are style functions that provide one or more props, and can be passed directly the return value of [styled-components]'s `styled()` function:
259
-
260
- ```jsx
261
- import styled from 'styled-components'
262
- import {space} from 'styled-system'
263
- const SpaceDiv = styled.div`
264
- ${space}
265
- `
266
- ```
267
-
268
- [classnames]: https://www.npmjs.com/package/classnames
269
- [spread syntax]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
270
- [styled-system]: https://styled-system.com
271
- [table]: https://jxnblk.com/styled-system/table
272
- [npx]: https://www.npmjs.com/package/npx
273
- [now]: https://zeit.co/now
274
- [primer.style]: https://primer.style
@@ -1,23 +0,0 @@
1
- # ADR 1: TypeScript
2
-
3
- ## Status
4
-
5
- Approved 2021-01-15
6
-
7
- ## Context
8
-
9
- Primer React components was originally released without TypeScript type definitions, making it difficult for engineers to consume the library in TypeScript applications. In [July 2019](https://github.com/primer/react/commit/2983c935ea9ad600c04078adb25e40c3624c11fa#diff-7aa4473ede4abd9ec099e87fec67fd57afafaf39e05d493ab4533acc38547eb8), we created an [ambient declaration](https://www.geeksforgeeks.org/typescript-ambients-declaration/) file (`index.d.ts`) file to provide type definitions for TypeScript applications without having to rewrite Primer React components in TypeScript.
10
-
11
- `index.d.ts` has been an effective stopgap, enabling teams to build complex applications with Primer React components and TypeScript. However, because `index.d.ts` is disconnected from the implementation code, we've struggled to keep the type definitions up-to-date and accurate, as evidenced by [many](https://github.com/primer/react/issues/906) [TypeScript](https://github.com/primer/react/issues/540) [bug](https://github.com/primer/react/issues/520) [reports](https://github.com/primer/react/issues/534). As the library continues to grow in size and complexity, manually maintaining type definitions will become unsustainable.
12
-
13
- ## Decision
14
-
15
- We will rewrite Primer React components in TypeScript.
16
-
17
- ## Consequences
18
-
19
- - Type definitions can be generated by the TypeScript compiler, eliminating bugs caused by hand-written type definitions.
20
- - Engineers can upstream components from other TypeScript projects at GitHub without having to remove type annotations, improving the contributor experience.
21
- - We can refactor components with increased confidence.
22
- - Component prop documentation can be generated by [react-docgen-typescript](https://github.com/styleguidist/react-docgen-typescript), eliminating inaccurate and out-of-date hand-written prop documentation.
23
- - New contributors will need some familiarity with TypeScript in order to make code contributions.
@@ -1,108 +0,0 @@
1
- # ADR 2: Isolating behaviors through custom clements and vanilla JavaScript
2
-
3
- ## Status
4
-
5
- Approved 2021-02-04
6
-
7
- ## Related documents
8
-
9
- - April 18th, 2018: [Custom Elements Example](https://github.com/primer/react/pull/13)
10
- - May 8th, 2018: [Custom Elements Experiment](https://github.com/primer/react/pull/14)
11
- - May 18th 2018: [React & Custom Elements](https://docs.google.com/document/d/1b6D2jW3ztQJiKEtQINbb4JoHJ3F3szU6lBX-fGce6aY/edit?usp=sharing)
12
- - October 16th 2019: [Issue exploring pros & cons of reusing .com JS in React](https://github.com/github/issues-index-experiment/issues/90)
13
- - November 15th 2019: [Experiment porting PRC to web components](https://github.com/github/ui-engineering/issues/12#issuecomment-558257842)
14
- - November 27th 2019: [Usage of custom elements in IIE project](https://github.com/github/issues-index-experiment/pull/133)
15
- - November 27th 2019: [Styling custom elements with styled components](https://github.slack.com/archives/CMZ4DC9BL/p1574883198055600)
16
- - June 9th 2020: [Discussion in Slack about using skatejs for SSR](https://github.slack.com/archives/C0ER2LCG2/p1591707104461300)
17
- - November 10th 2020: [Replace dialog with details-dialog](https://github.com/primer/react/issues/907)
18
- - January 27th 2021: [Guidelines for authoring behaviors](https://github.com/primer/react/pull/992)
19
- - February 1st 2021: [Example of a vanilla JS behavior & accompanying hook](https://github.com/T-Hugs/components/commit/105c3a191681381377f5aa193cb241a2189db8a6)
20
-
21
- ## Providing behaviors via custom elements
22
-
23
- ### Context
24
-
25
- Throughout the last few years folks from the Design Infrastructure, Web Systems, and UI Platform teams have discussed the idea of using custom elements for behaviors in Primer React. The main goal of using custom elements in Primer React is to be able to author behaviors once and reuse them in any framework. Several experiments have been conducted which are listed above.
26
-
27
- ### Assumptions
28
-
29
- De-duplication is not our highest or only priority. Attempts at de-duplication must be weighed against changes to the maintainer, developer, and customer experience.
30
-
31
- ### Findings
32
-
33
- #### Developer experience regressions
34
-
35
- - Custom elements rendering their own subtrees (ShadowDOM) requires polyfills for as-yet implemented specifications. This means Primer React will accumulate added complexity if we were to implement Custom Elements with ShadowDOM.
36
-
37
- - Implementing Custom Elements in Primer React will require a division of client side and server side code, as custom elements should only be executed in a browser environment. Currently Primer React is "isomorphic" - in that the code can be executed anywhere that React can be, which includes NodeJS server runtimes, as well as the client side. While not insurmountable this does mean Primer React will accumulate added complexity, which likely will be surfaced to the user.
38
-
39
- - While it's possible to add server side libraries to enable Custom Elements to be rendered on the Server, this adds more complexity and is antithetical to the usage patterns of custom elements.
40
-
41
- - As of this writing, you cannot style custom elements with styled-components[^1]. This means that if a component wants to use a custom element to get behaviors and you also want to style that component, you must use another wrapper div to apply styles. This is a bug in styled-components and should be fixed in the next release.
42
-
43
- #### Incompatibility with some React tools
44
-
45
- Some of our GitHub custom elements such as `details-dialog` and `details-menu` make assumptions about the DOM tree. For example, `details-dialog` expects a `details` element to wrap the custom element and uses this assumption[^2] to determine whether or not clicks are happening inside or outside of the dialog and closes the dialog if the click happened outside of the dialog. This makes sense in most cases and is a nice way of enforcing proper usage of the details element, but breaks down when used with [React Portals](https://reactjs.org/docs/portals.html) which are often used to ensure menus are displayed correctly in cases where a parent has an overflow: hidden applied to it, or incompatible z-index.
46
-
47
- #### Extensibility
48
-
49
- Building behaviors in React Hooks gives us the ability to provide things like state and state change hooks to the consumer of the component. This allows the user to build on additional behaviors to the component based on the state or other variables provided to the component consumer. Doing the same with custom elements would require listening to events on the document[^3] and reacting to them. This is certainly do-able, but goes against some of the foundational principles of React (reacting to changes in the DOM vs changes in React state).
50
-
51
- #### Organizational overhead
52
-
53
- - GitHub’s custom elements are all managed in different repos which introduces more maintenance overhead.
54
- - You'd need to npm link while developing if you want to test changes out with the presentational components themselves instead of making changes and seeing updates instantly. npm link usually doesn't work well with hot module reloading either.
55
- - You'd need to draft & publish releases to both libraries every time you want to update the behavior
56
- - If the behaviors are shared between github.com and Primer React, you'd need to do careful testing in both environments to make sure that changes don't create any regressions. That greatly widens the context that engineers need to keep in mind every time a change is made.
57
- - Reacting to changes will take a bit more time as we’ll need to orchestrate releases between custom elements and Primer React - as opposed to having behaviors already present in Primer React which can be versioned in lockstep.
58
- - Engineers who want to contribute to Primer React Components to build new components and behaviors would need to be familiar with both custom elements and React, two very different paradigms, and context switch between the two.
59
-
60
- #### Other
61
-
62
- - The custom element and web component API progress slower than React due to changes needing to go through the whatwq standards process.
63
-
64
- #### Risks of not switching to custom elements for behaviors
65
-
66
- - We spend extra time building behaviors in React that have already been built in our [custom elements library](https://github.github.io/web-systems-documentation/#custom-elements).
67
- - There are currently 19 behaviors/components listed on the custom elements documentation site. Several of these we have already implemented in React in either Priemr React, Doctocat, or other React applications at GitHub which can be upstreamed (details-dialog, details-menu, clipboard-copy, text-expander, autocomplete, task-list via drag and drop hooks, tab-container, text-expander).
68
- - We decide not to invest further in React at GitHub and have wasted time we could have spent building more custom elements.
69
- - This seems unlikely as there seems to be clear consensus that we will continue to build more and more highly interactive products.
70
- - The React library is abandoned and becomes obsolete.
71
- - This is a risk with any technology that we may use, seems highly unlikely in the near term.
72
- - While also a possibility for custom elements, the track record demonstrates deprecations of Web APIs is extremely rare and has a long deprecation path.
73
- - Behaviors in github.com using custom elements and behaviors in Primer REact diverge, leading to an inconsistent experience.
74
- - This is probably the biggest risk we face, but moving to custom elements isn’t necessarily the only or best solution. We should explore other ways of detecting divergence such as integration tests.
75
-
76
- ## Providing behaviors through vanilla JavaScript
77
-
78
- A simpler method of isolating component behaviors is to implement them in vanilla JavaScript (or TypeScript). This way, they can be shared between React components and web components. Both types of consumers would need to hook up the vanilla behavior to the component(s) that use(s) them.
79
-
80
- In some cases, this strategy is very straightforward. When a behavior can be made to have no dependencies other than the DOM, it is easy to isolate and consume in various frameworks. Behaviors that have effects on interactions/events, shared state, and component styles will be more difficult to isolate in this manner.
81
-
82
- ### Interactions and events
83
-
84
- Many user interactions rely on DOM events, such as `click`, `keypress`, and `focus`. React's event system is _not_ the same as the native DOM event system. React implements a [SyntheticEvent](https://reactjs.org/docs/events.html) that wraps native events. Working with both `SyntheticEvent`s and native events simultaneously is significant additional complexity for maintainers and consumers. However, vanilla JavaScript must operate only using native events. This makes isolating behaviors that automatically hook up event listeners to DOM elements difficult to achieve, and the resulting simultaneous usage of native events and `SyntheticEvent` has the potential to degrade both the maintainer's and the consumer's developer experience using Primer React.
85
-
86
- ### Shared state
87
-
88
- There are countless ways to manage state in a web application. React has its own ecosystem of state management strategies and libraries (in addition to its own primitive constructs for state management). Since there is no standard state management pattern in vanilla JavaScript, introducing such a pattern would add a new layer of complexity to the component behavior API.
89
-
90
- ### Component styles
91
-
92
- Since Primer React uses styled-components to manage CSS styles, any behaviors that affect styles should be doing so with styled-components. Any vanilla JavaScript behaviors that affect styles will add complexity by introducing a second mechanism for applying styles, since they will not be able to use styled-components.
93
-
94
- ## Decision
95
-
96
- ### Custom elements
97
-
98
- Due to the challenges listed above and our priorities listed in the [Assumptions](#assumptions) section, we are not investing time in building out behaviors with custom elements in our Primer React library. Instead, we should spend time expanding coverage using React Hooks and focus on finding other approaches for making sure implementation of behaviors in our different stacks are consistent (such as integration tests).
99
-
100
- ### Vanilla JavaScript behaviors
101
-
102
- Some behaviors can be implemented as vanilla JavaScript without introducing additional complexity to Primer React or its consumers. In cases where this is possible, behaviors will be implemented with no dependencies except the DOM and consumed within React Hooks to provide their functionality to Primer React.
103
-
104
- In general, _portions of behaviors_ that affect or rely on **user interactions and events**, **shared state**, or **CSS styles** should be kept in React Hooks. Parts of the behavior that can be implemented in isolation of these concepts should be built with no dependency on React or other libraries.
105
-
106
- [^1]: https://codesandbox.io/s/demo-styling-custom-element-g973d?file=/src/index.tsx
107
- [^2]: https://github.com/github/details-dialog-element/blob/main/src/index.ts#L195
108
- [^3]: https://github.com/github/details-dialog-element#details-dialog-close
@@ -1,132 +0,0 @@
1
- _Note: This documentation is a draft and is expected to undergo several revisions before being adopted._
2
-
3
- # Implementing Behaviors in Primer Components
4
-
5
- Behaviors in Primer Components are implemented via React Hooks. Primer Components provides two types of behaviors: generic behaviors and component behaviors.
6
-
7
- ## Dependencies
8
-
9
- **External dependencies:** Third-party/external dependencies are not allowed, except under very strict circumstances. If you need to use an external dependency, open an issue and discuss with the team.
10
-
11
- **Internal dependencies:** Internal dependencies are fine and encouraged to reduce code duplication and maintain consistency. When taking an internal dependency, observe the following:
12
-
13
- - No circular dependencies
14
- - Components may depend on other components and component behaviors, but should avoid depending directly on generic behaviors.
15
- - Component behaviors may depend on other component behaviors and generic behaviors.
16
- - Generic behaviors may only depend on other generic behaviors.
17
-
18
- See below for a visualization of allowed dependencies.
19
-
20
- ```
21
- ____________
22
- | \*
23
- +-------------V--------+ /
24
- | Generic behaviors |---
25
- +----------------------+
26
- ^
27
- *| ___________
28
- | | \*
29
- +----------|----V-------+ /
30
- | Component behaviors |---
31
- +-----------------------+
32
- ^
33
- 1| _____
34
- | | \*
35
- +--------|---V-+ /
36
- | Components |---
37
- +--------------+
38
-
39
- ```
40
-
41
- ## Generic behaviors
42
-
43
- Generic behaviors provide functionality that is not specific to any single component or class of components. If you can't tell which component it should operate on, it's probably a generic behavior. Generic behaviors are _low-level_. Generic behaviors may only have dependencies on other generic behaviors.
44
-
45
- ### Examples
46
-
47
- - `useProvidedRefOrCreate`
48
- - `usePosition`
49
- - `useClickAway`
50
- - `useTypeAhead`
51
-
52
- ## Component behaviors
53
-
54
- Component behaviors specifically implement behaviors for components. Therefore, hooks that implement component behaviors should always return an object containing props objects to be spread across the elements that make up the component's JSX. While component behaviors do not necessarily have to be one-to-one, **a component may only use one component behavior**. Sometimes it makes sense to use the same component behavior on several components. For example: the Dialog, Popover, and PointerBox components may all use the `usePopover` component behavior.
55
-
56
- ### Examples
57
-
58
- - `usePopover`
59
- - `useComboBox`
60
- - `useFilteredSearch`
61
- - `useDetails`
62
-
63
- ## Implementation guidelines
64
-
65
- All behaviors should be implemented as [React Hooks](https://reactjs.org/docs/hooks-intro.html).
66
-
67
- Component behaviors should be relatively brief. A component behavior should build a component's experience through the combination of several configured generic behaviors.
68
-
69
- Example: The Dialog component uses a `usePopover` behavior. The `usePopover` behavior in turn may call generic behaviors such as `usePosition` (to position the popover on the screen), `useClickAway` (to set up an event handler for clicking outside of the dialog), and `useFocusTrap` (to prevent focus from leaving the dialog while it is being shown).
70
-
71
- ### Component implementation
72
-
73
- Component implementation is [discussed elsewhere](https://github.com/primer/react/blob/main/contributor-docs/CONTRIBUTING.md#developing-components), but with respect to behaviors, follow these guidelines.
74
-
75
- - If a component has behaviors, it should make a call to exactly one component behavior hook.
76
- - The hook will return an object containing multiple props objects. Each of the returned objects are props that should be spread onto the appropriate JSX element.
77
- - Component implementations should be as clean as possible, mostly consisting of the JSX tree definition that the component renders.
78
- - Component props and, in some circumstances, context values, should serve as arguments to component behavior hooks.
79
-
80
- ### Balancing API surface with supported scenarios
81
-
82
- The [YAGNI Principle](https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it) cautions developers against building out functionality that isn't presently needed, but as a library, Primer Components should carefully balance the API surface area with building a library that functions for a wide range of use cases. Since it is difficult to define a quantitative test to determine whether or not a component or a behavior should support a certain scenario, there will be some subjectivity when it comes to choosing to build certain features. When adding a feature that seems too specific, try to _generalize_ it. Can multiple use cases be accounted for by implementing a single generalized feature? Can a known needed use case be extrapolated into a feature that supports that use case along with other use cases that are not yet known to be needed? If so, use these considerations when designing your APIs.
83
-
84
- ### Sensible defaults, powerful configuration, and last-resort "escape hatches"
85
-
86
- - Defaults should take users down the “happy path” and place them into the “pit of success.”
87
- - Configuration allows the component to reach more use cases. Components that use configurations to deviate from defaults should be viewed as first-class supported scenarios, just as important as the defaults.
88
- - Escape hatches may be necessary to support consumers with requirements that we haven’t considered. It should be cleared that using escape hatches “voids your warranty,” yet, they should be fully documented.
89
-
90
- ### Arguments to behaviors
91
-
92
- - As mentioned above, behaviors should have sensible defaults but powerful configuration. Behaviors are configured via arguments passed to the hook.
93
- - When possible, a hook should be able to be called with zero arguments to get all the defaults.
94
- - Each argument that is required should have an individual parameter on the hook function.
95
- - Optional arguments (i.e. “settings”) should be provided via a strongly typed settings object as the last argument to a hook function.
96
-
97
- ### Return value of behavior hooks
98
-
99
- #### Component behavior hook return value
100
-
101
- Component behavior hooks produce _props_. Therefore, the return value of a component behavior should be a collection of props objects, intended to be spread onto JSX elements that render a component.
102
-
103
- - Each element of the object returned from a component behavior hook is a props object that can be spread onto a JSX element
104
- - The names of the keys should accurately indicate the JSX element onto which those props should be spread
105
-
106
- Example: The Dialog component uses a `usePopover` component behavior, which may return an object like:
107
-
108
- ```
109
- {
110
- popoverProps: PropsObject,
111
- openClickTargetProps: PropsObject,
112
- closeClickTargetProps: PropsObject
113
- }
114
- ```
115
-
116
- Each of these props objects would then get spread onto their respective JSX elements.
117
-
118
- #### Generic behavior hook return value
119
-
120
- There are no restrictions on return values of generic behavior hooks. In fact, some behavioral hooks might not need to return anything. For example, a `useEscape` hook might simply set up a callback for an `Escape` keypress.
121
-
122
- ### Refs
123
-
124
- - Often, a behavior will need to act on a real DOM element.
125
- - In this case, the hook should return a ref as part of the returned props for that element. The ref will get spread onto the element, giving the ref access to it.
126
- - Whenever you need a ref, it must be accepted as an optional setting to the hook. The hook then uses the `useProvidedRefOrCreate` hook to resolve a usable ref. Remember to return the resulting ref from the hook.
127
-
128
- ## Testing behaviors
129
-
130
- - Whenever possible, test your changes in another application that makes heavy use of Primer Components.
131
- - You may even want to build and “marinate” your component in another application before merging a change to Primer Components.
132
- - Build the component, start using it in the application, and see how the component API feels. This approach works best for engineers at GitHub already working on a product written in React.