@primer/components 32.0.1-rc.c4c2c50a → 32.0.1

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 (1271) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/lib/ActionList/index.js +23 -12
  3. package/lib/ActionList2/index.js +41 -23
  4. package/lib/AnchoredOverlay/index.js +12 -4
  5. package/lib/Autocomplete/index.js +14 -7
  6. package/lib/Button/index.js +70 -21
  7. package/lib/DropdownMenu/index.js +20 -6
  8. package/lib/DropdownStyles.js +26 -18
  9. package/lib/FilteredActionList/index.js +12 -4
  10. package/lib/NewButton/index.js +12 -5
  11. package/lib/NewButton/types.js +1 -2
  12. package/lib/Pagination/index.js +12 -6
  13. package/lib/Portal/index.js +16 -5
  14. package/lib/SelectMenu/hooks/useKeyboardNav.js +96 -80
  15. package/lib/SelectMenu/index.js +14 -7
  16. package/lib/SelectPanel/index.js +12 -4
  17. package/lib/Token/index.js +30 -11
  18. package/lib/behaviors/anchoredPosition.js +234 -205
  19. package/lib/behaviors/focusTrap.js +157 -121
  20. package/lib/behaviors/focusZone.js +509 -434
  21. package/lib/behaviors/scrollIntoViewingArea.js +35 -18
  22. package/lib/constants.js +43 -39
  23. package/lib/drafts.js +30 -20
  24. package/lib/hooks/index.js +60 -16
  25. package/lib/hooks/useAnchoredPosition.js +40 -32
  26. package/lib/hooks/useCombinedRefs.js +36 -32
  27. package/lib/hooks/useDialog.js +96 -72
  28. package/lib/hooks/useFocusTrap.js +60 -43
  29. package/lib/hooks/useFocusZone.js +50 -54
  30. package/lib/hooks/useOnEscapePress.js +36 -25
  31. package/lib/hooks/useOpenAndCloseFocus.js +34 -22
  32. package/lib/hooks/useProvidedRefOrCreate.js +14 -10
  33. package/lib/hooks/useProvidedStateOrCreate.js +16 -13
  34. package/lib/hooks/useRenderForcingRef.js +17 -13
  35. package/lib/hooks/useResizeObserver.js +18 -15
  36. package/lib/hooks/useSafeTimeout.js +30 -22
  37. package/lib/hooks/useScrollFlash.js +23 -16
  38. package/lib/index.js +644 -163
  39. package/lib/polyfills/eventListenerSignal.js +45 -37
  40. package/lib/sx.js +22 -10
  41. package/lib/theme-preval.js +3169 -64
  42. package/lib/theme.js +12 -3
  43. package/lib/utils/iterateFocusableElements.js +85 -63
  44. package/lib/utils/theme.js +47 -33
  45. package/lib/utils/types/AriaRole.js +1 -2
  46. package/lib/utils/types/ComponentProps.js +1 -2
  47. package/lib/utils/types/Flatten.js +1 -2
  48. package/lib/utils/types/KeyPaths.js +1 -2
  49. package/lib/utils/types/MandateProps.js +1 -16
  50. package/lib/utils/types/Merge.js +1 -2
  51. package/lib/utils/types/index.js +69 -16
  52. package/lib/utils/uniqueId.js +8 -5
  53. package/lib/utils/use-force-update.js +14 -8
  54. package/lib/utils/useIsomorphicLayoutEffect.js +11 -8
  55. package/lib/utils/userAgent.js +12 -8
  56. package/package.json +2 -3
  57. package/.changeset/README.md +0 -8
  58. package/.changeset/config.json +0 -10
  59. package/.devcontainer/devcontainer.json +0 -8
  60. package/.eslintrc.json +0 -137
  61. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  62. package/.github/ISSUE_TEMPLATE/new_component_proposal_template.md +0 -41
  63. package/.github/dependabot.yml +0 -18
  64. package/.github/pull_request_template.md +0 -18
  65. package/.github/workflows/check_for_changeset.yml +0 -25
  66. package/.github/workflows/ci.yml +0 -34
  67. package/.github/workflows/deploy_preview.yml +0 -47
  68. package/.github/workflows/deploy_production.yml +0 -70
  69. package/.github/workflows/release.yml +0 -35
  70. package/.github/workflows/release_canary.yml +0 -70
  71. package/.github/workflows/release_candidate.yml +0 -60
  72. package/.github/workflows/size.yml +0 -13
  73. package/.github/workflows/stale.yml +0 -26
  74. package/.gitignore +0 -10
  75. package/.npmrc +0 -4
  76. package/.nvmrc +0 -1
  77. package/.storybook/main.js +0 -9
  78. package/.storybook/preview.js +0 -117
  79. package/.vscode/launch.json +0 -21
  80. package/.vscode/settings.json +0 -13
  81. package/@types/@styled-system/index.d.ts +0 -0
  82. package/@types/@styled-system/prop-types/index.d.ts +0 -1
  83. package/@types/@styled-system/props/index.d.ts +0 -1
  84. package/@types/jest-styled-components/index.d.ts +0 -1
  85. package/CODEOWNERS +0 -2
  86. package/babel-defines.js +0 -13
  87. package/babel.config.js +0 -39
  88. package/contributor-docs/CODE_OF_CONDUCT.md +0 -76
  89. package/contributor-docs/CONTRIBUTING.md +0 -274
  90. package/contributor-docs/adrs/adr-001-typescript.md +0 -23
  91. package/contributor-docs/adrs/adr-002-behavior-isolation.md +0 -108
  92. package/contributor-docs/adrs/adr-003-prop-norms.md +0 -72
  93. package/contributor-docs/behaviors.md +0 -132
  94. package/contributor-docs/component-contents-api-patterns.md +0 -316
  95. package/contributor-docs/principles.md +0 -39
  96. package/docs/.eslintrc +0 -0
  97. package/docs/.gitignore +0 -91
  98. package/docs/components/PropsList.js +0 -5
  99. package/docs/components/State.js +0 -9
  100. package/docs/components/constants.js +0 -34
  101. package/docs/components/index.js +0 -2
  102. package/docs/content/ActionList.mdx +0 -99
  103. package/docs/content/ActionList2.mdx +0 -359
  104. package/docs/content/ActionMenu.mdx +0 -80
  105. package/docs/content/AnchoredOverlay.mdx +0 -37
  106. package/docs/content/Autocomplete.mdx +0 -657
  107. package/docs/content/Avatar.mdx +0 -33
  108. package/docs/content/AvatarStack.mdx +0 -37
  109. package/docs/content/BorderBox.md +0 -46
  110. package/docs/content/Box.mdx +0 -96
  111. package/docs/content/BranchName.md +0 -18
  112. package/docs/content/Breadcrumbs.md +0 -47
  113. package/docs/content/Buttons.md +0 -46
  114. package/docs/content/CircleBadge.md +0 -35
  115. package/docs/content/CircleOcticon.md +0 -18
  116. package/docs/content/CounterLabel.md +0 -22
  117. package/docs/content/Details.md +0 -105
  118. package/docs/content/Dialog.md +0 -105
  119. package/docs/content/Dialog2.mdx +0 -180
  120. package/docs/content/Dropdown.md +0 -65
  121. package/docs/content/DropdownMenu.mdx +0 -49
  122. package/docs/content/FilterList.md +0 -37
  123. package/docs/content/FilteredSearch.md +0 -32
  124. package/docs/content/Flash.md +0 -35
  125. package/docs/content/Flex.md +0 -58
  126. package/docs/content/FormGroup.md +0 -38
  127. package/docs/content/Grid.md +0 -59
  128. package/docs/content/Header.md +0 -77
  129. package/docs/content/Heading.md +0 -22
  130. package/docs/content/Label.md +0 -49
  131. package/docs/content/LabelGroup.md +0 -21
  132. package/docs/content/Link.md +0 -28
  133. package/docs/content/Overlay.mdx +0 -85
  134. package/docs/content/Pagehead.md +0 -18
  135. package/docs/content/Pagination.md +0 -178
  136. package/docs/content/PointerBox.md +0 -81
  137. package/docs/content/Popover.md +0 -129
  138. package/docs/content/Portal.mdx +0 -78
  139. package/docs/content/Position.md +0 -100
  140. package/docs/content/ProgressBar.mdx +0 -29
  141. package/docs/content/SelectMenu.md +0 -371
  142. package/docs/content/SelectPanel.mdx +0 -67
  143. package/docs/content/SideNav.md +0 -171
  144. package/docs/content/Spinner.mdx +0 -32
  145. package/docs/content/StateLabel.md +0 -27
  146. package/docs/content/StyledOcticon.md +0 -27
  147. package/docs/content/SubNav.md +0 -100
  148. package/docs/content/TabNav.md +0 -42
  149. package/docs/content/Text.md +0 -31
  150. package/docs/content/TextInput.md +0 -34
  151. package/docs/content/TextInputTokens.mdx +0 -89
  152. package/docs/content/TextInputWithTokens.mdx +0 -211
  153. package/docs/content/Timeline.md +0 -148
  154. package/docs/content/Token.mdx +0 -381
  155. package/docs/content/Tooltip.md +0 -32
  156. package/docs/content/Truncate.md +0 -55
  157. package/docs/content/UnderlineNav.md +0 -45
  158. package/docs/content/anchoredPosition.mdx +0 -163
  159. package/docs/content/core-concepts.md +0 -70
  160. package/docs/content/focusTrap.mdx +0 -103
  161. package/docs/content/focusZone.mdx +0 -145
  162. package/docs/content/getting-started.md +0 -138
  163. package/docs/content/index.md +0 -33
  164. package/docs/content/linting.md +0 -35
  165. package/docs/content/overriding-styles.mdx +0 -82
  166. package/docs/content/philosophy.md +0 -23
  167. package/docs/content/primer-theme.md +0 -89
  168. package/docs/content/ssr.mdx +0 -43
  169. package/docs/content/system-props.mdx +0 -37
  170. package/docs/content/theme-reference.md +0 -16
  171. package/docs/content/theming.md +0 -272
  172. package/docs/content/useOnEscapePress.mdx +0 -56
  173. package/docs/content/useOnOutsideClick.mdx +0 -57
  174. package/docs/content/useOpenAndCloseFocus.mdx +0 -49
  175. package/docs/content/useOverlay.mdx +0 -62
  176. package/docs/content/useSafeTimeout.mdx +0 -32
  177. package/docs/gatsby-config.js +0 -30
  178. package/docs/gatsby-node.js +0 -101
  179. package/docs/package-lock.json +0 -20867
  180. package/docs/package.json +0 -36
  181. package/docs/src/@primer/gatsby-theme-doctocat/components/hero.js +0 -21
  182. package/docs/src/@primer/gatsby-theme-doctocat/components/live-preview-wrapper.js +0 -41
  183. package/docs/src/@primer/gatsby-theme-doctocat/live-code-scope.js +0 -73
  184. package/docs/src/@primer/gatsby-theme-doctocat/nav.yml +0 -133
  185. package/docs/src/@primer/gatsby-theme-doctocat/primer-components-hero.svg +0 -1411
  186. package/docs/src/component-checklist.js +0 -81
  187. package/docs/src/props.js +0 -77
  188. package/jest.config.js +0 -13
  189. package/lib/ActionList/Divider.jsx +0 -29
  190. package/lib/ActionList/Group.jsx +0 -23
  191. package/lib/ActionList/Header.jsx +0 -66
  192. package/lib/ActionList/Item.jsx +0 -288
  193. package/lib/ActionList/List.jsx +0 -138
  194. package/lib/ActionList2/Description.jsx +0 -29
  195. package/lib/ActionList2/Divider.jsx +0 -22
  196. package/lib/ActionList2/Group.jsx +0 -54
  197. package/lib/ActionList2/Header.jsx +0 -36
  198. package/lib/ActionList2/Item.jsx +0 -174
  199. package/lib/ActionList2/LinkItem.jsx +0 -28
  200. package/lib/ActionList2/List.jsx +0 -41
  201. package/lib/ActionList2/Selection.jsx +0 -50
  202. package/lib/ActionList2/Visuals.jsx +0 -48
  203. package/lib/ActionMenu.jsx +0 -73
  204. package/lib/AnchoredOverlay/AnchoredOverlay.jsx +0 -100
  205. package/lib/Autocomplete/Autocomplete.jsx +0 -100
  206. package/lib/Autocomplete/AutocompleteContext.jsx +0 -5
  207. package/lib/Autocomplete/AutocompleteInput.jsx +0 -113
  208. package/lib/Autocomplete/AutocompleteMenu.jsx +0 -190
  209. package/lib/Autocomplete/AutocompleteOverlay.jsx +0 -55
  210. package/lib/Avatar.jsx +0 -34
  211. package/lib/AvatarPair.jsx +0 -29
  212. package/lib/AvatarStack.jsx +0 -151
  213. package/lib/BaseStyles.jsx +0 -65
  214. package/lib/BorderBox.jsx +0 -18
  215. package/lib/Box.jsx +0 -10
  216. package/lib/BranchName.jsx +0 -20
  217. package/lib/Breadcrumbs.jsx +0 -71
  218. package/lib/Button/Button.jsx +0 -40
  219. package/lib/Button/ButtonBase.jsx +0 -33
  220. package/lib/Button/ButtonClose.jsx +0 -53
  221. package/lib/Button/ButtonDanger.jsx +0 -43
  222. package/lib/Button/ButtonGroup.jsx +0 -55
  223. package/lib/Button/ButtonInvisible.jsx +0 -32
  224. package/lib/Button/ButtonOutline.jsx +0 -43
  225. package/lib/Button/ButtonPrimary.jsx +0 -42
  226. package/lib/Button/ButtonStyles.jsx +0 -37
  227. package/lib/Button/ButtonTableList.jsx +0 -46
  228. package/lib/Caret.jsx +0 -93
  229. package/lib/CircleBadge.jsx +0 -42
  230. package/lib/CircleOcticon.jsx +0 -21
  231. package/lib/CounterLabel.jsx +0 -43
  232. package/lib/Details.jsx +0 -21
  233. package/lib/Dialog/ConfirmationDialog.jsx +0 -146
  234. package/lib/Dialog/Dialog.jsx +0 -279
  235. package/lib/Dialog.jsx +0 -129
  236. package/lib/Dropdown.jsx +0 -131
  237. package/lib/DropdownMenu/DropdownButton.jsx +0 -14
  238. package/lib/DropdownMenu/DropdownMenu.jsx +0 -70
  239. package/lib/FilterList.jsx +0 -59
  240. package/lib/FilteredActionList/FilteredActionList.jsx +0 -100
  241. package/lib/FilteredSearch.jsx +0 -28
  242. package/lib/Flash.jsx +0 -69
  243. package/lib/Flex.jsx +0 -15
  244. package/lib/FormGroup.jsx +0 -22
  245. package/lib/Grid.jsx +0 -15
  246. package/lib/Header.jsx +0 -83
  247. package/lib/Heading.jsx +0 -21
  248. package/lib/Label.jsx +0 -82
  249. package/lib/LabelGroup.jsx +0 -18
  250. package/lib/Link.jsx +0 -36
  251. package/lib/NewButton/button-counter.jsx +0 -14
  252. package/lib/NewButton/button.jsx +0 -279
  253. package/lib/Overlay.jsx +0 -154
  254. package/lib/Pagehead.jsx +0 -17
  255. package/lib/Pagination/Pagination.jsx +0 -161
  256. package/lib/Pagination/model.jsx +0 -174
  257. package/lib/PointerBox.jsx +0 -25
  258. package/lib/Popover.jsx +0 -202
  259. package/lib/Portal/Portal.jsx +0 -79
  260. package/lib/Position.jsx +0 -46
  261. package/lib/ProgressBar.jsx +0 -39
  262. package/lib/SelectMenu/SelectMenu.jsx +0 -112
  263. package/lib/SelectMenu/SelectMenuContext.jsx +0 -5
  264. package/lib/SelectMenu/SelectMenuDivider.jsx +0 -42
  265. package/lib/SelectMenu/SelectMenuFilter.jsx +0 -58
  266. package/lib/SelectMenu/SelectMenuFooter.jsx +0 -45
  267. package/lib/SelectMenu/SelectMenuHeader.jsx +0 -42
  268. package/lib/SelectMenu/SelectMenuItem.jsx +0 -142
  269. package/lib/SelectMenu/SelectMenuList.jsx +0 -59
  270. package/lib/SelectMenu/SelectMenuLoadingAnimation.jsx +0 -22
  271. package/lib/SelectMenu/SelectMenuModal.jsx +0 -118
  272. package/lib/SelectMenu/SelectMenuTab.jsx +0 -92
  273. package/lib/SelectMenu/SelectMenuTabPanel.jsx +0 -42
  274. package/lib/SelectMenu/SelectMenuTabs.jsx +0 -57
  275. package/lib/SelectPanel/SelectPanel.jsx +0 -105
  276. package/lib/SideNav.jsx +0 -173
  277. package/lib/Spinner.jsx +0 -35
  278. package/lib/StateLabel.jsx +0 -93
  279. package/lib/StyledOcticon.jsx +0 -18
  280. package/lib/SubNav.jsx +0 -101
  281. package/lib/TabNav.jsx +0 -58
  282. package/lib/Text.jsx +0 -14
  283. package/lib/TextInput.jsx +0 -23
  284. package/lib/TextInputWithTokens.jsx +0 -218
  285. package/lib/ThemeProvider.jsx +0 -130
  286. package/lib/Timeline.jsx +0 -123
  287. package/lib/Token/AvatarToken.jsx +0 -54
  288. package/lib/Token/IssueLabelToken.jsx +0 -125
  289. package/lib/Token/Token.jsx +0 -103
  290. package/lib/Token/TokenBase.jsx +0 -88
  291. package/lib/Token/_RemoveTokenButton.jsx +0 -108
  292. package/lib/Token/_TokenTextContainer.jsx +0 -49
  293. package/lib/Tooltip.jsx +0 -246
  294. package/lib/Truncate.jsx +0 -24
  295. package/lib/UnderlineNav.jsx +0 -88
  296. package/lib/_TextInputWrapper.jsx +0 -120
  297. package/lib/_UnstyledTextInput.jsx +0 -22
  298. package/lib/__tests__/ActionList.test.d.ts +0 -1
  299. package/lib/__tests__/ActionList.test.js +0 -69
  300. package/lib/__tests__/ActionList.test.jsx +0 -49
  301. package/lib/__tests__/ActionList.types.test.d.ts +0 -6
  302. package/lib/__tests__/ActionList.types.test.js +0 -69
  303. package/lib/__tests__/ActionList.types.test.jsx +0 -45
  304. package/lib/__tests__/ActionList2.test.d.ts +0 -1
  305. package/lib/__tests__/ActionList2.test.js +0 -53
  306. package/lib/__tests__/ActionList2.test.jsx +0 -46
  307. package/lib/__tests__/ActionMenu.test.d.ts +0 -1
  308. package/lib/__tests__/ActionMenu.test.js +0 -151
  309. package/lib/__tests__/ActionMenu.test.jsx +0 -124
  310. package/lib/__tests__/AnchoredOverlay.test.d.ts +0 -1
  311. package/lib/__tests__/AnchoredOverlay.test.js +0 -162
  312. package/lib/__tests__/AnchoredOverlay.test.jsx +0 -121
  313. package/lib/__tests__/Autocomplete.test.d.ts +0 -1
  314. package/lib/__tests__/Autocomplete.test.js +0 -528
  315. package/lib/__tests__/Autocomplete.test.jsx +0 -299
  316. package/lib/__tests__/Avatar.test.d.ts +0 -1
  317. package/lib/__tests__/Avatar.test.js +0 -67
  318. package/lib/__tests__/Avatar.test.jsx +0 -42
  319. package/lib/__tests__/AvatarStack.test.d.ts +0 -1
  320. package/lib/__tests__/AvatarStack.test.js +0 -71
  321. package/lib/__tests__/AvatarStack.test.jsx +0 -43
  322. package/lib/__tests__/BorderBox.test.d.ts +0 -1
  323. package/lib/__tests__/BorderBox.test.js +0 -58
  324. package/lib/__tests__/BorderBox.test.jsx +0 -36
  325. package/lib/__tests__/Box.test.d.ts +0 -1
  326. package/lib/__tests__/Box.test.js +0 -78
  327. package/lib/__tests__/Box.test.jsx +0 -41
  328. package/lib/__tests__/BranchName.test.d.ts +0 -1
  329. package/lib/__tests__/BranchName.test.js +0 -36
  330. package/lib/__tests__/BranchName.test.jsx +0 -27
  331. package/lib/__tests__/Breadcrumbs.test.d.ts +0 -1
  332. package/lib/__tests__/Breadcrumbs.test.js +0 -40
  333. package/lib/__tests__/Breadcrumbs.test.jsx +0 -28
  334. package/lib/__tests__/Breadcrumbs.types.test.d.ts +0 -3
  335. package/lib/__tests__/Breadcrumbs.types.test.js +0 -25
  336. package/lib/__tests__/Breadcrumbs.types.test.jsx +0 -24
  337. package/lib/__tests__/BreadcrumbsItem.test.d.ts +0 -1
  338. package/lib/__tests__/BreadcrumbsItem.test.js +0 -49
  339. package/lib/__tests__/BreadcrumbsItem.test.jsx +0 -31
  340. package/lib/__tests__/Button.test.d.ts +0 -1
  341. package/lib/__tests__/Button.test.js +0 -147
  342. package/lib/__tests__/Button.test.jsx +0 -100
  343. package/lib/__tests__/Caret.test.d.ts +0 -1
  344. package/lib/__tests__/Caret.test.js +0 -52
  345. package/lib/__tests__/Caret.test.jsx +0 -37
  346. package/lib/__tests__/CircleBadge.test.d.ts +0 -1
  347. package/lib/__tests__/CircleBadge.test.js +0 -83
  348. package/lib/__tests__/CircleBadge.test.jsx +0 -55
  349. package/lib/__tests__/CircleBadge.types.test.d.ts +0 -3
  350. package/lib/__tests__/CircleBadge.types.test.js +0 -28
  351. package/lib/__tests__/CircleBadge.types.test.jsx +0 -17
  352. package/lib/__tests__/CircleOcticon.test.d.ts +0 -1
  353. package/lib/__tests__/CircleOcticon.test.js +0 -71
  354. package/lib/__tests__/CircleOcticon.test.jsx +0 -45
  355. package/lib/__tests__/ConfirmationDialog.test.d.ts +0 -1
  356. package/lib/__tests__/ConfirmationDialog.test.js +0 -134
  357. package/lib/__tests__/ConfirmationDialog.test.jsx +0 -119
  358. package/lib/__tests__/CounterLabel.test.d.ts +0 -1
  359. package/lib/__tests__/CounterLabel.test.js +0 -58
  360. package/lib/__tests__/CounterLabel.test.jsx +0 -36
  361. package/lib/__tests__/CounterLabel.types.test.d.ts +0 -3
  362. package/lib/__tests__/CounterLabel.types.test.js +0 -28
  363. package/lib/__tests__/CounterLabel.types.test.jsx +0 -17
  364. package/lib/__tests__/Details.test.d.ts +0 -1
  365. package/lib/__tests__/Details.test.js +0 -117
  366. package/lib/__tests__/Details.test.jsx +0 -85
  367. package/lib/__tests__/Dialog.test.d.ts +0 -1
  368. package/lib/__tests__/Dialog.test.js +0 -184
  369. package/lib/__tests__/Dialog.test.jsx +0 -139
  370. package/lib/__tests__/Dialog.types.test.d.ts +0 -3
  371. package/lib/__tests__/Dialog.types.test.js +0 -28
  372. package/lib/__tests__/Dialog.types.test.jsx +0 -17
  373. package/lib/__tests__/Dialog2.types.test.d.ts +0 -3
  374. package/lib/__tests__/Dialog2.types.test.js +0 -31
  375. package/lib/__tests__/Dialog2.types.test.jsx +0 -17
  376. package/lib/__tests__/Dropdown.test.d.ts +0 -1
  377. package/lib/__tests__/Dropdown.test.js +0 -63
  378. package/lib/__tests__/Dropdown.test.jsx +0 -49
  379. package/lib/__tests__/Dropdown.types.test.d.ts +0 -3
  380. package/lib/__tests__/Dropdown.types.test.js +0 -31
  381. package/lib/__tests__/Dropdown.types.test.jsx +0 -25
  382. package/lib/__tests__/DropdownMenu.test.d.ts +0 -1
  383. package/lib/__tests__/DropdownMenu.test.js +0 -150
  384. package/lib/__tests__/DropdownMenu.test.jsx +0 -119
  385. package/lib/__tests__/FilterList.test.d.ts +0 -1
  386. package/lib/__tests__/FilterList.test.js +0 -36
  387. package/lib/__tests__/FilterList.test.jsx +0 -27
  388. package/lib/__tests__/FilterList.types.test.d.ts +0 -3
  389. package/lib/__tests__/FilterList.types.test.js +0 -27
  390. package/lib/__tests__/FilterList.types.test.jsx +0 -21
  391. package/lib/__tests__/FilterListItem.test.d.ts +0 -1
  392. package/lib/__tests__/FilterListItem.test.js +0 -46
  393. package/lib/__tests__/FilterListItem.test.jsx +0 -31
  394. package/lib/__tests__/FilteredSearch.test.d.ts +0 -1
  395. package/lib/__tests__/FilteredSearch.test.js +0 -36
  396. package/lib/__tests__/FilteredSearch.test.jsx +0 -27
  397. package/lib/__tests__/FilteredSearch.types.test.d.ts +0 -3
  398. package/lib/__tests__/FilteredSearch.types.test.js +0 -28
  399. package/lib/__tests__/FilteredSearch.types.test.jsx +0 -17
  400. package/lib/__tests__/Flash.test.d.ts +0 -1
  401. package/lib/__tests__/Flash.test.js +0 -62
  402. package/lib/__tests__/Flash.test.jsx +0 -36
  403. package/lib/__tests__/Flash.types.test.d.ts +0 -3
  404. package/lib/__tests__/Flash.types.test.js +0 -28
  405. package/lib/__tests__/Flash.types.test.jsx +0 -17
  406. package/lib/__tests__/Flex.test.d.ts +0 -1
  407. package/lib/__tests__/Flex.test.js +0 -74
  408. package/lib/__tests__/Flex.test.jsx +0 -51
  409. package/lib/__tests__/FormGroup.test.d.ts +0 -1
  410. package/lib/__tests__/FormGroup.test.js +0 -54
  411. package/lib/__tests__/FormGroup.test.jsx +0 -36
  412. package/lib/__tests__/FormGroup.types.test.d.ts +0 -3
  413. package/lib/__tests__/FormGroup.types.test.js +0 -28
  414. package/lib/__tests__/FormGroup.types.test.jsx +0 -17
  415. package/lib/__tests__/Grid.test.d.ts +0 -1
  416. package/lib/__tests__/Grid.test.js +0 -104
  417. package/lib/__tests__/Grid.test.jsx +0 -69
  418. package/lib/__tests__/Header.test.d.ts +0 -1
  419. package/lib/__tests__/Header.test.js +0 -58
  420. package/lib/__tests__/Header.test.jsx +0 -45
  421. package/lib/__tests__/Header.types.test.d.ts +0 -3
  422. package/lib/__tests__/Header.types.test.js +0 -29
  423. package/lib/__tests__/Header.types.test.jsx +0 -23
  424. package/lib/__tests__/Heading.test.d.ts +0 -1
  425. package/lib/__tests__/Heading.test.js +0 -109
  426. package/lib/__tests__/Heading.test.jsx +0 -71
  427. package/lib/__tests__/KeyPaths.types.test.d.ts +0 -11
  428. package/lib/__tests__/KeyPaths.types.test.js +0 -7
  429. package/lib/__tests__/Label.test.d.ts +0 -1
  430. package/lib/__tests__/Label.test.js +0 -46
  431. package/lib/__tests__/Label.test.jsx +0 -33
  432. package/lib/__tests__/Label.types.test.d.ts +0 -3
  433. package/lib/__tests__/Label.types.test.js +0 -28
  434. package/lib/__tests__/Label.types.test.jsx +0 -17
  435. package/lib/__tests__/LabelGroup.test.d.ts +0 -1
  436. package/lib/__tests__/LabelGroup.test.js +0 -38
  437. package/lib/__tests__/LabelGroup.test.jsx +0 -29
  438. package/lib/__tests__/LabelGroup.types.test.d.ts +0 -3
  439. package/lib/__tests__/LabelGroup.types.test.js +0 -28
  440. package/lib/__tests__/LabelGroup.types.test.jsx +0 -17
  441. package/lib/__tests__/Link.test.d.ts +0 -1
  442. package/lib/__tests__/Link.test.js +0 -76
  443. package/lib/__tests__/Link.test.jsx +0 -43
  444. package/lib/__tests__/Link.types.test.d.ts +0 -3
  445. package/lib/__tests__/Link.types.test.js +0 -28
  446. package/lib/__tests__/Link.types.test.jsx +0 -17
  447. package/lib/__tests__/Merge.types.test.d.ts +0 -30
  448. package/lib/__tests__/Merge.types.test.js +0 -21
  449. package/lib/__tests__/NewButton.test.d.ts +0 -1
  450. package/lib/__tests__/NewButton.test.js +0 -95
  451. package/lib/__tests__/NewButton.test.jsx +0 -61
  452. package/lib/__tests__/Overlay.test.d.ts +0 -1
  453. package/lib/__tests__/Overlay.test.js +0 -145
  454. package/lib/__tests__/Overlay.test.jsx +0 -105
  455. package/lib/__tests__/Overlay.types.test.d.ts +0 -3
  456. package/lib/__tests__/Overlay.types.test.js +0 -35
  457. package/lib/__tests__/Overlay.types.test.jsx +0 -18
  458. package/lib/__tests__/Pagehead.test.d.ts +0 -1
  459. package/lib/__tests__/Pagehead.test.js +0 -37
  460. package/lib/__tests__/Pagehead.test.jsx +0 -25
  461. package/lib/__tests__/Pagehead.types.test.d.ts +0 -3
  462. package/lib/__tests__/Pagehead.types.test.js +0 -28
  463. package/lib/__tests__/Pagehead.types.test.jsx +0 -17
  464. package/lib/__tests__/Pagination/Pagination.test.d.ts +0 -1
  465. package/lib/__tests__/Pagination/Pagination.test.js +0 -47
  466. package/lib/__tests__/Pagination/Pagination.test.jsx +0 -32
  467. package/lib/__tests__/Pagination/PaginationModel.test.d.ts +0 -1
  468. package/lib/__tests__/Pagination/PaginationModel.test.js +0 -186
  469. package/lib/__tests__/Pagination/PaginationModel.test.jsx +0 -118
  470. package/lib/__tests__/Pagination.types.test.d.ts +0 -3
  471. package/lib/__tests__/Pagination.types.test.js +0 -33
  472. package/lib/__tests__/Pagination.types.test.jsx +0 -17
  473. package/lib/__tests__/PointerBox.test.d.ts +0 -1
  474. package/lib/__tests__/PointerBox.test.js +0 -46
  475. package/lib/__tests__/PointerBox.test.jsx +0 -33
  476. package/lib/__tests__/Popover.test.d.ts +0 -1
  477. package/lib/__tests__/Popover.test.js +0 -66
  478. package/lib/__tests__/Popover.test.jsx +0 -58
  479. package/lib/__tests__/Popover.types.test.d.ts +0 -3
  480. package/lib/__tests__/Popover.types.test.js +0 -27
  481. package/lib/__tests__/Popover.types.test.jsx +0 -21
  482. package/lib/__tests__/Portal.test.d.ts +0 -1
  483. package/lib/__tests__/Portal.test.js +0 -124
  484. package/lib/__tests__/Portal.test.jsx +0 -102
  485. package/lib/__tests__/Position.test.d.ts +0 -1
  486. package/lib/__tests__/Position.test.js +0 -143
  487. package/lib/__tests__/Position.test.jsx +0 -96
  488. package/lib/__tests__/ProgressBar.test.d.ts +0 -1
  489. package/lib/__tests__/ProgressBar.test.js +0 -68
  490. package/lib/__tests__/ProgressBar.test.jsx +0 -38
  491. package/lib/__tests__/SelectMenu.test.d.ts +0 -1
  492. package/lib/__tests__/SelectMenu.test.js +0 -155
  493. package/lib/__tests__/SelectMenu.test.jsx +0 -120
  494. package/lib/__tests__/SelectMenu.types.test.d.ts +0 -3
  495. package/lib/__tests__/SelectMenu.types.test.js +0 -47
  496. package/lib/__tests__/SelectMenu.types.test.jsx +0 -41
  497. package/lib/__tests__/SelectPanel.test.d.ts +0 -1
  498. package/lib/__tests__/SelectPanel.test.js +0 -80
  499. package/lib/__tests__/SelectPanel.test.jsx +0 -48
  500. package/lib/__tests__/SideNav.test.d.ts +0 -1
  501. package/lib/__tests__/SideNav.test.js +0 -71
  502. package/lib/__tests__/SideNav.test.jsx +0 -55
  503. package/lib/__tests__/SideNav.types.test.d.ts +0 -3
  504. package/lib/__tests__/SideNav.types.test.js +0 -28
  505. package/lib/__tests__/SideNav.types.test.jsx +0 -17
  506. package/lib/__tests__/Spinner.test.d.ts +0 -1
  507. package/lib/__tests__/Spinner.test.js +0 -53
  508. package/lib/__tests__/Spinner.test.jsx +0 -41
  509. package/lib/__tests__/StateLabel.test.d.ts +0 -1
  510. package/lib/__tests__/StateLabel.test.js +0 -71
  511. package/lib/__tests__/StateLabel.test.jsx +0 -46
  512. package/lib/__tests__/StateLabel.types.test.d.ts +0 -3
  513. package/lib/__tests__/StateLabel.types.test.js +0 -28
  514. package/lib/__tests__/StateLabel.types.test.jsx +0 -17
  515. package/lib/__tests__/StyledOcticon.test.d.ts +0 -1
  516. package/lib/__tests__/StyledOcticon.test.js +0 -40
  517. package/lib/__tests__/StyledOcticon.test.jsx +0 -28
  518. package/lib/__tests__/StyledOcticon.types.test.d.ts +0 -3
  519. package/lib/__tests__/StyledOcticon.types.test.js +0 -32
  520. package/lib/__tests__/StyledOcticon.types.test.jsx +0 -18
  521. package/lib/__tests__/SubNav.test.d.ts +0 -1
  522. package/lib/__tests__/SubNav.test.js +0 -62
  523. package/lib/__tests__/SubNav.test.jsx +0 -47
  524. package/lib/__tests__/SubNav.types.test.d.ts +0 -3
  525. package/lib/__tests__/SubNav.types.test.js +0 -27
  526. package/lib/__tests__/SubNav.types.test.jsx +0 -27
  527. package/lib/__tests__/SubNavLink.test.d.ts +0 -1
  528. package/lib/__tests__/SubNavLink.test.js +0 -49
  529. package/lib/__tests__/SubNavLink.test.jsx +0 -31
  530. package/lib/__tests__/TabNav.test.d.ts +0 -1
  531. package/lib/__tests__/TabNav.test.js +0 -49
  532. package/lib/__tests__/TabNav.test.jsx +0 -32
  533. package/lib/__tests__/TabNav.types.test.d.ts +0 -3
  534. package/lib/__tests__/TabNav.types.test.js +0 -25
  535. package/lib/__tests__/TabNav.types.test.jsx +0 -24
  536. package/lib/__tests__/Text.test.d.ts +0 -1
  537. package/lib/__tests__/Text.test.js +0 -105
  538. package/lib/__tests__/Text.test.jsx +0 -71
  539. package/lib/__tests__/TextInput.test.d.ts +0 -1
  540. package/lib/__tests__/TextInput.test.js +0 -78
  541. package/lib/__tests__/TextInput.test.jsx +0 -45
  542. package/lib/__tests__/TextInputWithTokens.test.d.ts +0 -1
  543. package/lib/__tests__/TextInputWithTokens.test.js +0 -572
  544. package/lib/__tests__/TextInputWithTokens.test.jsx +0 -302
  545. package/lib/__tests__/ThemeProvider.test.d.ts +0 -1
  546. package/lib/__tests__/ThemeProvider.test.js +0 -444
  547. package/lib/__tests__/ThemeProvider.test.jsx +0 -314
  548. package/lib/__tests__/Timeline.test.d.ts +0 -1
  549. package/lib/__tests__/Timeline.test.js +0 -75
  550. package/lib/__tests__/Timeline.test.jsx +0 -51
  551. package/lib/__tests__/Timeline.types.test.d.ts +0 -3
  552. package/lib/__tests__/Timeline.types.test.js +0 -31
  553. package/lib/__tests__/Timeline.types.test.jsx +0 -33
  554. package/lib/__tests__/Token.test.d.ts +0 -1
  555. package/lib/__tests__/Token.test.js +0 -180
  556. package/lib/__tests__/Token.test.jsx +0 -93
  557. package/lib/__tests__/Tooltip.test.d.ts +0 -1
  558. package/lib/__tests__/Tooltip.test.js +0 -69
  559. package/lib/__tests__/Tooltip.test.jsx +0 -46
  560. package/lib/__tests__/Tooltip.types.test.d.ts +0 -3
  561. package/lib/__tests__/Tooltip.types.test.js +0 -28
  562. package/lib/__tests__/Tooltip.types.test.jsx +0 -17
  563. package/lib/__tests__/Truncate.test.d.ts +0 -1
  564. package/lib/__tests__/Truncate.test.js +0 -63
  565. package/lib/__tests__/Truncate.test.jsx +0 -41
  566. package/lib/__tests__/Truncate.types.test.d.ts +0 -3
  567. package/lib/__tests__/Truncate.types.test.js +0 -31
  568. package/lib/__tests__/Truncate.types.test.jsx +0 -17
  569. package/lib/__tests__/UnderlineNav.test.d.ts +0 -1
  570. package/lib/__tests__/UnderlineNav.test.js +0 -72
  571. package/lib/__tests__/UnderlineNav.test.jsx +0 -53
  572. package/lib/__tests__/UnderlineNav.types.test.d.ts +0 -3
  573. package/lib/__tests__/UnderlineNav.types.test.js +0 -25
  574. package/lib/__tests__/UnderlineNav.types.test.jsx +0 -24
  575. package/lib/__tests__/UnderlineNavLink.test.d.ts +0 -1
  576. package/lib/__tests__/UnderlineNavLink.test.js +0 -51
  577. package/lib/__tests__/UnderlineNavLink.test.jsx +0 -31
  578. package/lib/__tests__/behaviors/anchoredPosition.test.d.ts +0 -1
  579. package/lib/__tests__/behaviors/anchoredPosition.test.js +0 -243
  580. package/lib/__tests__/behaviors/focusTrap.test.d.ts +0 -1
  581. package/lib/__tests__/behaviors/focusTrap.test.js +0 -234
  582. package/lib/__tests__/behaviors/focusTrap.test.jsx +0 -184
  583. package/lib/__tests__/behaviors/focusZone.test.d.ts +0 -1
  584. package/lib/__tests__/behaviors/focusZone.test.js +0 -570
  585. package/lib/__tests__/behaviors/focusZone.test.jsx +0 -406
  586. package/lib/__tests__/behaviors/iterateFocusableElements.test.d.ts +0 -1
  587. package/lib/__tests__/behaviors/iterateFocusableElements.test.js +0 -55
  588. package/lib/__tests__/behaviors/iterateFocusableElements.test.jsx +0 -58
  589. package/lib/__tests__/behaviors/scrollIntoViewingArea.test.d.ts +0 -1
  590. package/lib/__tests__/behaviors/scrollIntoViewingArea.test.js +0 -155
  591. package/lib/__tests__/filterObject.test.d.ts +0 -1
  592. package/lib/__tests__/filterObject.test.js +0 -51
  593. package/lib/__tests__/hooks/useAnchoredPosition.test.d.ts +0 -1
  594. package/lib/__tests__/hooks/useAnchoredPosition.test.js +0 -54
  595. package/lib/__tests__/hooks/useAnchoredPosition.test.jsx +0 -29
  596. package/lib/__tests__/hooks/useOnEscapePress.test.d.ts +0 -1
  597. package/lib/__tests__/hooks/useOnEscapePress.test.js +0 -32
  598. package/lib/__tests__/hooks/useOnEscapePress.test.jsx +0 -19
  599. package/lib/__tests__/hooks/useOnOutsideClick.test.d.ts +0 -1
  600. package/lib/__tests__/hooks/useOnOutsideClick.test.js +0 -87
  601. package/lib/__tests__/hooks/useOnOutsideClick.test.jsx +0 -63
  602. package/lib/__tests__/hooks/useOpenAndCloseFocus.test.d.ts +0 -1
  603. package/lib/__tests__/hooks/useOpenAndCloseFocus.test.js +0 -60
  604. package/lib/__tests__/hooks/useOpenAndCloseFocus.test.jsx +0 -61
  605. package/lib/__tests__/hooks/useProvidedStateOrCreate.test.d.ts +0 -1
  606. package/lib/__tests__/hooks/useProvidedStateOrCreate.test.js +0 -45
  607. package/lib/__tests__/hooks/useProvidedStateOrCreate.test.jsx +0 -56
  608. package/lib/__tests__/theme.test.d.ts +0 -1
  609. package/lib/__tests__/theme.test.js +0 -35
  610. package/lib/__tests__/themeGet.test.d.ts +0 -1
  611. package/lib/__tests__/themeGet.test.js +0 -14
  612. package/lib/__tests__/useSafeTimeout.test.d.ts +0 -1
  613. package/lib/__tests__/useSafeTimeout.test.js +0 -45
  614. package/lib/__tests__/useSafeTimeout.test.jsx +0 -36
  615. package/lib/__tests__/utils/createSlots.test.d.ts +0 -1
  616. package/lib/__tests__/utils/createSlots.test.js +0 -75
  617. package/lib/__tests__/utils/createSlots.test.jsx +0 -57
  618. package/lib/hooks/useDetails.jsx +0 -39
  619. package/lib/hooks/useOnOutsideClick.jsx +0 -61
  620. package/lib/hooks/useOverlay.jsx +0 -15
  621. package/lib/stories/ActionList.stories.js +0 -454
  622. package/lib/stories/ActionList2.stories.js +0 -909
  623. package/lib/stories/ActionMenu.stories.js +0 -348
  624. package/lib/stories/AnchoredOverlay.stories.js +0 -127
  625. package/lib/stories/Autocomplete.stories.js +0 -619
  626. package/lib/stories/AvatarStack.stories.js +0 -49
  627. package/lib/stories/Button.stories.js +0 -125
  628. package/lib/stories/ConfirmationDialog.stories.js +0 -119
  629. package/lib/stories/Dialog.stories.js +0 -269
  630. package/lib/stories/DropdownMenu.stories.js +0 -122
  631. package/lib/stories/IssueLabelToken.stories.js +0 -165
  632. package/lib/stories/NewButton.stories.js +0 -230
  633. package/lib/stories/Overlay.stories.js +0 -204
  634. package/lib/stories/Portal.stories.js +0 -104
  635. package/lib/stories/ProfileToken.stories.js +0 -162
  636. package/lib/stories/SelectPanel.stories.js +0 -399
  637. package/lib/stories/TextInput.stories.js +0 -144
  638. package/lib/stories/TextInputWithTokens.stories.js +0 -252
  639. package/lib/stories/ThemeProvider.stories.js +0 -102
  640. package/lib/stories/Token.stories.js +0 -176
  641. package/lib/stories/useAnchoredPosition.stories.js +0 -351
  642. package/lib/stories/useFocusTrap.stories.js +0 -360
  643. package/lib/stories/useFocusZone.stories.js +0 -607
  644. package/lib/utils/create-slots.jsx +0 -65
  645. package/lib/utils/deprecate.jsx +0 -59
  646. package/lib/utils/isNumeric.jsx +0 -7
  647. package/lib/utils/ssr.jsx +0 -6
  648. package/lib/utils/test-deprecations.jsx +0 -20
  649. package/lib/utils/test-helpers.jsx +0 -8
  650. package/lib/utils/test-matchers.jsx +0 -100
  651. package/lib/utils/testing.jsx +0 -206
  652. package/lib-esm/__tests__/ActionList.test.d.ts +0 -1
  653. package/lib-esm/__tests__/ActionList.test.js +0 -57
  654. package/lib-esm/__tests__/ActionList.types.test.d.ts +0 -6
  655. package/lib-esm/__tests__/ActionList.types.test.js +0 -45
  656. package/lib-esm/__tests__/ActionList2.test.d.ts +0 -1
  657. package/lib-esm/__tests__/ActionList2.test.js +0 -41
  658. package/lib-esm/__tests__/ActionMenu.test.d.ts +0 -1
  659. package/lib-esm/__tests__/ActionMenu.test.js +0 -139
  660. package/lib-esm/__tests__/AnchoredOverlay.test.d.ts +0 -1
  661. package/lib-esm/__tests__/AnchoredOverlay.test.js +0 -136
  662. package/lib-esm/__tests__/Autocomplete.test.d.ts +0 -1
  663. package/lib-esm/__tests__/Autocomplete.test.js +0 -494
  664. package/lib-esm/__tests__/Avatar.test.d.ts +0 -1
  665. package/lib-esm/__tests__/Avatar.test.js +0 -56
  666. package/lib-esm/__tests__/AvatarStack.test.d.ts +0 -1
  667. package/lib-esm/__tests__/AvatarStack.test.js +0 -58
  668. package/lib-esm/__tests__/BorderBox.test.d.ts +0 -1
  669. package/lib-esm/__tests__/BorderBox.test.js +0 -47
  670. package/lib-esm/__tests__/Box.test.d.ts +0 -1
  671. package/lib-esm/__tests__/Box.test.js +0 -67
  672. package/lib-esm/__tests__/BranchName.test.d.ts +0 -1
  673. package/lib-esm/__tests__/BranchName.test.js +0 -26
  674. package/lib-esm/__tests__/Breadcrumbs.test.d.ts +0 -1
  675. package/lib-esm/__tests__/Breadcrumbs.test.js +0 -30
  676. package/lib-esm/__tests__/Breadcrumbs.types.test.d.ts +0 -3
  677. package/lib-esm/__tests__/Breadcrumbs.types.test.js +0 -12
  678. package/lib-esm/__tests__/BreadcrumbsItem.test.d.ts +0 -1
  679. package/lib-esm/__tests__/BreadcrumbsItem.test.js +0 -39
  680. package/lib-esm/__tests__/Button.test.d.ts +0 -1
  681. package/lib-esm/__tests__/Button.test.js +0 -137
  682. package/lib-esm/__tests__/Caret.test.d.ts +0 -1
  683. package/lib-esm/__tests__/Caret.test.js +0 -42
  684. package/lib-esm/__tests__/CircleBadge.test.d.ts +0 -1
  685. package/lib-esm/__tests__/CircleBadge.test.js +0 -70
  686. package/lib-esm/__tests__/CircleBadge.types.test.d.ts +0 -3
  687. package/lib-esm/__tests__/CircleBadge.types.test.js +0 -13
  688. package/lib-esm/__tests__/CircleOcticon.test.d.ts +0 -1
  689. package/lib-esm/__tests__/CircleOcticon.test.js +0 -59
  690. package/lib-esm/__tests__/ConfirmationDialog.test.d.ts +0 -1
  691. package/lib-esm/__tests__/ConfirmationDialog.test.js +0 -113
  692. package/lib-esm/__tests__/CounterLabel.test.d.ts +0 -1
  693. package/lib-esm/__tests__/CounterLabel.test.js +0 -47
  694. package/lib-esm/__tests__/CounterLabel.types.test.d.ts +0 -3
  695. package/lib-esm/__tests__/CounterLabel.types.test.js +0 -13
  696. package/lib-esm/__tests__/Details.test.d.ts +0 -1
  697. package/lib-esm/__tests__/Details.test.js +0 -107
  698. package/lib-esm/__tests__/Dialog.test.d.ts +0 -1
  699. package/lib-esm/__tests__/Dialog.test.js +0 -171
  700. package/lib-esm/__tests__/Dialog.types.test.d.ts +0 -3
  701. package/lib-esm/__tests__/Dialog.types.test.js +0 -13
  702. package/lib-esm/__tests__/Dialog2.types.test.d.ts +0 -3
  703. package/lib-esm/__tests__/Dialog2.types.test.js +0 -16
  704. package/lib-esm/__tests__/Dropdown.test.d.ts +0 -1
  705. package/lib-esm/__tests__/Dropdown.test.js +0 -53
  706. package/lib-esm/__tests__/Dropdown.types.test.d.ts +0 -3
  707. package/lib-esm/__tests__/Dropdown.types.test.js +0 -17
  708. package/lib-esm/__tests__/DropdownMenu.test.d.ts +0 -1
  709. package/lib-esm/__tests__/DropdownMenu.test.js +0 -137
  710. package/lib-esm/__tests__/FilterList.test.d.ts +0 -1
  711. package/lib-esm/__tests__/FilterList.test.js +0 -26
  712. package/lib-esm/__tests__/FilterList.types.test.d.ts +0 -3
  713. package/lib-esm/__tests__/FilterList.types.test.js +0 -13
  714. package/lib-esm/__tests__/FilterListItem.test.d.ts +0 -1
  715. package/lib-esm/__tests__/FilterListItem.test.js +0 -36
  716. package/lib-esm/__tests__/FilteredSearch.test.d.ts +0 -1
  717. package/lib-esm/__tests__/FilteredSearch.test.js +0 -26
  718. package/lib-esm/__tests__/FilteredSearch.types.test.d.ts +0 -3
  719. package/lib-esm/__tests__/FilteredSearch.types.test.js +0 -13
  720. package/lib-esm/__tests__/Flash.test.d.ts +0 -1
  721. package/lib-esm/__tests__/Flash.test.js +0 -51
  722. package/lib-esm/__tests__/Flash.types.test.d.ts +0 -3
  723. package/lib-esm/__tests__/Flash.types.test.js +0 -13
  724. package/lib-esm/__tests__/Flex.test.d.ts +0 -1
  725. package/lib-esm/__tests__/Flex.test.js +0 -64
  726. package/lib-esm/__tests__/FormGroup.test.d.ts +0 -1
  727. package/lib-esm/__tests__/FormGroup.test.js +0 -44
  728. package/lib-esm/__tests__/FormGroup.types.test.d.ts +0 -3
  729. package/lib-esm/__tests__/FormGroup.types.test.js +0 -13
  730. package/lib-esm/__tests__/Grid.test.d.ts +0 -1
  731. package/lib-esm/__tests__/Grid.test.js +0 -94
  732. package/lib-esm/__tests__/Header.test.d.ts +0 -1
  733. package/lib-esm/__tests__/Header.test.js +0 -48
  734. package/lib-esm/__tests__/Header.types.test.d.ts +0 -3
  735. package/lib-esm/__tests__/Header.types.test.js +0 -15
  736. package/lib-esm/__tests__/Heading.test.d.ts +0 -1
  737. package/lib-esm/__tests__/Heading.test.js +0 -99
  738. package/lib-esm/__tests__/KeyPaths.types.test.d.ts +0 -11
  739. package/lib-esm/__tests__/KeyPaths.types.test.js +0 -3
  740. package/lib-esm/__tests__/Label.test.d.ts +0 -1
  741. package/lib-esm/__tests__/Label.test.js +0 -36
  742. package/lib-esm/__tests__/Label.types.test.d.ts +0 -3
  743. package/lib-esm/__tests__/Label.types.test.js +0 -13
  744. package/lib-esm/__tests__/LabelGroup.test.d.ts +0 -1
  745. package/lib-esm/__tests__/LabelGroup.test.js +0 -26
  746. package/lib-esm/__tests__/LabelGroup.types.test.d.ts +0 -3
  747. package/lib-esm/__tests__/LabelGroup.types.test.js +0 -13
  748. package/lib-esm/__tests__/Link.test.d.ts +0 -1
  749. package/lib-esm/__tests__/Link.test.js +0 -66
  750. package/lib-esm/__tests__/Link.types.test.d.ts +0 -3
  751. package/lib-esm/__tests__/Link.types.test.js +0 -13
  752. package/lib-esm/__tests__/Merge.types.test.d.ts +0 -30
  753. package/lib-esm/__tests__/Merge.types.test.js +0 -14
  754. package/lib-esm/__tests__/NewButton.test.d.ts +0 -1
  755. package/lib-esm/__tests__/NewButton.test.js +0 -84
  756. package/lib-esm/__tests__/Overlay.test.d.ts +0 -1
  757. package/lib-esm/__tests__/Overlay.test.js +0 -123
  758. package/lib-esm/__tests__/Overlay.types.test.d.ts +0 -3
  759. package/lib-esm/__tests__/Overlay.types.test.js +0 -20
  760. package/lib-esm/__tests__/Pagehead.test.d.ts +0 -1
  761. package/lib-esm/__tests__/Pagehead.test.js +0 -26
  762. package/lib-esm/__tests__/Pagehead.types.test.d.ts +0 -3
  763. package/lib-esm/__tests__/Pagehead.types.test.js +0 -13
  764. package/lib-esm/__tests__/Pagination/Pagination.test.d.ts +0 -1
  765. package/lib-esm/__tests__/Pagination/Pagination.test.js +0 -35
  766. package/lib-esm/__tests__/Pagination/PaginationModel.test.d.ts +0 -1
  767. package/lib-esm/__tests__/Pagination/PaginationModel.test.js +0 -182
  768. package/lib-esm/__tests__/Pagination.types.test.d.ts +0 -3
  769. package/lib-esm/__tests__/Pagination.types.test.js +0 -18
  770. package/lib-esm/__tests__/PointerBox.test.d.ts +0 -1
  771. package/lib-esm/__tests__/PointerBox.test.js +0 -36
  772. package/lib-esm/__tests__/Popover.test.d.ts +0 -1
  773. package/lib-esm/__tests__/Popover.test.js +0 -53
  774. package/lib-esm/__tests__/Popover.types.test.d.ts +0 -3
  775. package/lib-esm/__tests__/Popover.types.test.js +0 -13
  776. package/lib-esm/__tests__/Portal.test.d.ts +0 -1
  777. package/lib-esm/__tests__/Portal.test.js +0 -104
  778. package/lib-esm/__tests__/Position.test.d.ts +0 -1
  779. package/lib-esm/__tests__/Position.test.js +0 -133
  780. package/lib-esm/__tests__/ProgressBar.test.d.ts +0 -1
  781. package/lib-esm/__tests__/ProgressBar.test.js +0 -58
  782. package/lib-esm/__tests__/SelectMenu.test.d.ts +0 -1
  783. package/lib-esm/__tests__/SelectMenu.test.js +0 -145
  784. package/lib-esm/__tests__/SelectMenu.types.test.d.ts +0 -3
  785. package/lib-esm/__tests__/SelectMenu.types.test.js +0 -33
  786. package/lib-esm/__tests__/SelectPanel.test.d.ts +0 -1
  787. package/lib-esm/__tests__/SelectPanel.test.js +0 -65
  788. package/lib-esm/__tests__/SideNav.test.d.ts +0 -1
  789. package/lib-esm/__tests__/SideNav.test.js +0 -60
  790. package/lib-esm/__tests__/SideNav.types.test.d.ts +0 -3
  791. package/lib-esm/__tests__/SideNav.types.test.js +0 -13
  792. package/lib-esm/__tests__/Spinner.test.d.ts +0 -1
  793. package/lib-esm/__tests__/Spinner.test.js +0 -43
  794. package/lib-esm/__tests__/StateLabel.test.d.ts +0 -1
  795. package/lib-esm/__tests__/StateLabel.test.js +0 -61
  796. package/lib-esm/__tests__/StateLabel.types.test.d.ts +0 -3
  797. package/lib-esm/__tests__/StateLabel.types.test.js +0 -13
  798. package/lib-esm/__tests__/StyledOcticon.test.d.ts +0 -1
  799. package/lib-esm/__tests__/StyledOcticon.test.js +0 -29
  800. package/lib-esm/__tests__/StyledOcticon.types.test.d.ts +0 -3
  801. package/lib-esm/__tests__/StyledOcticon.types.test.js +0 -16
  802. package/lib-esm/__tests__/SubNav.test.d.ts +0 -1
  803. package/lib-esm/__tests__/SubNav.test.js +0 -50
  804. package/lib-esm/__tests__/SubNav.types.test.d.ts +0 -3
  805. package/lib-esm/__tests__/SubNav.types.test.js +0 -14
  806. package/lib-esm/__tests__/SubNavLink.test.d.ts +0 -1
  807. package/lib-esm/__tests__/SubNavLink.test.js +0 -39
  808. package/lib-esm/__tests__/TabNav.test.d.ts +0 -1
  809. package/lib-esm/__tests__/TabNav.test.js +0 -39
  810. package/lib-esm/__tests__/TabNav.types.test.d.ts +0 -3
  811. package/lib-esm/__tests__/TabNav.types.test.js +0 -12
  812. package/lib-esm/__tests__/Text.test.d.ts +0 -1
  813. package/lib-esm/__tests__/Text.test.js +0 -93
  814. package/lib-esm/__tests__/TextInput.test.d.ts +0 -1
  815. package/lib-esm/__tests__/TextInput.test.js +0 -68
  816. package/lib-esm/__tests__/TextInputWithTokens.test.d.ts +0 -1
  817. package/lib-esm/__tests__/TextInputWithTokens.test.js +0 -511
  818. package/lib-esm/__tests__/ThemeProvider.test.d.ts +0 -1
  819. package/lib-esm/__tests__/ThemeProvider.test.js +0 -408
  820. package/lib-esm/__tests__/Timeline.test.d.ts +0 -1
  821. package/lib-esm/__tests__/Timeline.test.js +0 -65
  822. package/lib-esm/__tests__/Timeline.types.test.d.ts +0 -3
  823. package/lib-esm/__tests__/Timeline.types.test.js +0 -18
  824. package/lib-esm/__tests__/Token.test.d.ts +0 -1
  825. package/lib-esm/__tests__/Token.test.js +0 -166
  826. package/lib-esm/__tests__/Tooltip.test.d.ts +0 -1
  827. package/lib-esm/__tests__/Tooltip.test.js +0 -59
  828. package/lib-esm/__tests__/Tooltip.types.test.d.ts +0 -3
  829. package/lib-esm/__tests__/Tooltip.types.test.js +0 -13
  830. package/lib-esm/__tests__/Truncate.test.d.ts +0 -1
  831. package/lib-esm/__tests__/Truncate.test.js +0 -53
  832. package/lib-esm/__tests__/Truncate.types.test.d.ts +0 -3
  833. package/lib-esm/__tests__/Truncate.types.test.js +0 -16
  834. package/lib-esm/__tests__/UnderlineNav.test.d.ts +0 -1
  835. package/lib-esm/__tests__/UnderlineNav.test.js +0 -60
  836. package/lib-esm/__tests__/UnderlineNav.types.test.d.ts +0 -3
  837. package/lib-esm/__tests__/UnderlineNav.types.test.js +0 -12
  838. package/lib-esm/__tests__/UnderlineNavLink.test.d.ts +0 -1
  839. package/lib-esm/__tests__/UnderlineNavLink.test.js +0 -41
  840. package/lib-esm/__tests__/behaviors/anchoredPosition.test.d.ts +0 -1
  841. package/lib-esm/__tests__/behaviors/anchoredPosition.test.js +0 -388
  842. package/lib-esm/__tests__/behaviors/focusTrap.test.d.ts +0 -1
  843. package/lib-esm/__tests__/behaviors/focusTrap.test.js +0 -227
  844. package/lib-esm/__tests__/behaviors/focusZone.test.d.ts +0 -1
  845. package/lib-esm/__tests__/behaviors/focusZone.test.js +0 -487
  846. package/lib-esm/__tests__/behaviors/iterateFocusableElements.test.d.ts +0 -1
  847. package/lib-esm/__tests__/behaviors/iterateFocusableElements.test.js +0 -48
  848. package/lib-esm/__tests__/behaviors/scrollIntoViewingArea.test.d.ts +0 -1
  849. package/lib-esm/__tests__/behaviors/scrollIntoViewingArea.test.js +0 -224
  850. package/lib-esm/__tests__/filterObject.test.d.ts +0 -1
  851. package/lib-esm/__tests__/filterObject.test.js +0 -27
  852. package/lib-esm/__tests__/hooks/useAnchoredPosition.test.d.ts +0 -1
  853. package/lib-esm/__tests__/hooks/useAnchoredPosition.test.js +0 -46
  854. package/lib-esm/__tests__/hooks/useOnEscapePress.test.d.ts +0 -1
  855. package/lib-esm/__tests__/hooks/useOnEscapePress.test.js +0 -23
  856. package/lib-esm/__tests__/hooks/useOnOutsideClick.test.d.ts +0 -1
  857. package/lib-esm/__tests__/hooks/useOnOutsideClick.test.js +0 -68
  858. package/lib-esm/__tests__/hooks/useOpenAndCloseFocus.test.d.ts +0 -1
  859. package/lib-esm/__tests__/hooks/useOpenAndCloseFocus.test.js +0 -52
  860. package/lib-esm/__tests__/hooks/useProvidedStateOrCreate.test.d.ts +0 -1
  861. package/lib-esm/__tests__/hooks/useProvidedStateOrCreate.test.js +0 -36
  862. package/lib-esm/__tests__/theme.test.d.ts +0 -1
  863. package/lib-esm/__tests__/theme.test.js +0 -33
  864. package/lib-esm/__tests__/themeGet.test.d.ts +0 -1
  865. package/lib-esm/__tests__/themeGet.test.js +0 -22
  866. package/lib-esm/__tests__/useSafeTimeout.test.d.ts +0 -1
  867. package/lib-esm/__tests__/useSafeTimeout.test.js +0 -39
  868. package/lib-esm/__tests__/utils/createSlots.test.d.ts +0 -1
  869. package/lib-esm/__tests__/utils/createSlots.test.js +0 -67
  870. package/lib-esm/stories/ActionList.stories.js +0 -395
  871. package/lib-esm/stories/ActionList2.stories.js +0 -797
  872. package/lib-esm/stories/ActionMenu.stories.js +0 -303
  873. package/lib-esm/stories/AnchoredOverlay.stories.js +0 -101
  874. package/lib-esm/stories/Autocomplete.stories.js +0 -560
  875. package/lib-esm/stories/AvatarStack.stories.js +0 -32
  876. package/lib-esm/stories/Button.stories.js +0 -86
  877. package/lib-esm/stories/ConfirmationDialog.stories.js +0 -94
  878. package/lib-esm/stories/Dialog.stories.js +0 -244
  879. package/lib-esm/stories/DropdownMenu.stories.js +0 -94
  880. package/lib-esm/stories/IssueLabelToken.stories.js +0 -139
  881. package/lib-esm/stories/NewButton.stories.js +0 -178
  882. package/lib-esm/stories/Overlay.stories.js +0 -173
  883. package/lib-esm/stories/Portal.stories.js +0 -68
  884. package/lib-esm/stories/ProfileToken.stories.js +0 -136
  885. package/lib-esm/stories/SelectPanel.stories.js +0 -334
  886. package/lib-esm/stories/TextInput.stories.js +0 -117
  887. package/lib-esm/stories/TextInputWithTokens.stories.js +0 -210
  888. package/lib-esm/stories/ThemeProvider.stories.js +0 -83
  889. package/lib-esm/stories/Token.stories.js +0 -146
  890. package/lib-esm/stories/useAnchoredPosition.stories.js +0 -313
  891. package/lib-esm/stories/useFocusTrap.stories.js +0 -313
  892. package/lib-esm/stories/useFocusZone.stories.js +0 -562
  893. package/migrating.md +0 -250
  894. package/now.json +0 -17
  895. package/package-lock.json +0 -66509
  896. package/rollup.config.js +0 -36
  897. package/script/build +0 -21
  898. package/script/build-storybook +0 -10
  899. package/script/setup +0 -12
  900. package/src/ActionList/Divider.tsx +0 -25
  901. package/src/ActionList/Group.tsx +0 -45
  902. package/src/ActionList/Header.tsx +0 -74
  903. package/src/ActionList/Item.tsx +0 -480
  904. package/src/ActionList/List.tsx +0 -258
  905. package/src/ActionList/index.ts +0 -21
  906. package/src/ActionList2/Description.tsx +0 -52
  907. package/src/ActionList2/Divider.tsx +0 -24
  908. package/src/ActionList2/Group.tsx +0 -103
  909. package/src/ActionList2/Header.tsx +0 -58
  910. package/src/ActionList2/Item.tsx +0 -246
  911. package/src/ActionList2/LinkItem.tsx +0 -49
  912. package/src/ActionList2/List.tsx +0 -55
  913. package/src/ActionList2/Selection.tsx +0 -60
  914. package/src/ActionList2/Visuals.tsx +0 -76
  915. package/src/ActionList2/index.ts +0 -39
  916. package/src/ActionMenu.tsx +0 -106
  917. package/src/AnchoredOverlay/AnchoredOverlay.tsx +0 -191
  918. package/src/AnchoredOverlay/index.ts +0 -2
  919. package/src/Autocomplete/Autocomplete.tsx +0 -103
  920. package/src/Autocomplete/AutocompleteContext.tsx +0 -19
  921. package/src/Autocomplete/AutocompleteInput.tsx +0 -179
  922. package/src/Autocomplete/AutocompleteMenu.tsx +0 -341
  923. package/src/Autocomplete/AutocompleteOverlay.tsx +0 -68
  924. package/src/Autocomplete/index.ts +0 -2
  925. package/src/Avatar.tsx +0 -46
  926. package/src/AvatarPair.tsx +0 -35
  927. package/src/AvatarStack.tsx +0 -159
  928. package/src/BaseStyles.tsx +0 -53
  929. package/src/BorderBox.tsx +0 -18
  930. package/src/Box.tsx +0 -54
  931. package/src/BranchName.tsx +0 -19
  932. package/src/Breadcrumbs.tsx +0 -101
  933. package/src/Button/Button.tsx +0 -39
  934. package/src/Button/ButtonBase.tsx +0 -39
  935. package/src/Button/ButtonClose.tsx +0 -36
  936. package/src/Button/ButtonDanger.tsx +0 -42
  937. package/src/Button/ButtonGroup.tsx +0 -55
  938. package/src/Button/ButtonInvisible.tsx +0 -31
  939. package/src/Button/ButtonOutline.tsx +0 -42
  940. package/src/Button/ButtonPrimary.tsx +0 -40
  941. package/src/Button/ButtonStyles.tsx +0 -36
  942. package/src/Button/ButtonTableList.tsx +0 -45
  943. package/src/Button/index.ts +0 -16
  944. package/src/Caret.tsx +0 -133
  945. package/src/CircleBadge.tsx +0 -53
  946. package/src/CircleOcticon.tsx +0 -37
  947. package/src/CounterLabel.tsx +0 -50
  948. package/src/Details.tsx +0 -23
  949. package/src/Dialog/ConfirmationDialog.tsx +0 -184
  950. package/src/Dialog/Dialog.tsx +0 -444
  951. package/src/Dialog.tsx +0 -145
  952. package/src/Dropdown.tsx +0 -154
  953. package/src/DropdownMenu/DropdownButton.tsx +0 -15
  954. package/src/DropdownMenu/DropdownMenu.tsx +0 -115
  955. package/src/DropdownMenu/index.ts +0 -4
  956. package/src/DropdownStyles.ts +0 -128
  957. package/src/FilterList.tsx +0 -75
  958. package/src/FilteredActionList/FilteredActionList.tsx +0 -142
  959. package/src/FilteredActionList/index.ts +0 -2
  960. package/src/FilteredSearch.tsx +0 -27
  961. package/src/Flash.tsx +0 -75
  962. package/src/Flex.tsx +0 -15
  963. package/src/FormGroup.tsx +0 -24
  964. package/src/Grid.tsx +0 -15
  965. package/src/Header.tsx +0 -74
  966. package/src/Heading.tsx +0 -21
  967. package/src/Label.tsx +0 -72
  968. package/src/LabelGroup.tsx +0 -17
  969. package/src/Link.tsx +0 -42
  970. package/src/NewButton/button-counter.tsx +0 -15
  971. package/src/NewButton/button.tsx +0 -283
  972. package/src/NewButton/index.ts +0 -10
  973. package/src/NewButton/types.ts +0 -36
  974. package/src/Overlay.tsx +0 -200
  975. package/src/Pagehead.tsx +0 -16
  976. package/src/Pagination/Pagination.tsx +0 -212
  977. package/src/Pagination/index.ts +0 -4
  978. package/src/Pagination/model.tsx +0 -187
  979. package/src/PointerBox.tsx +0 -31
  980. package/src/Popover.tsx +0 -225
  981. package/src/Portal/Portal.tsx +0 -97
  982. package/src/Portal/index.ts +0 -5
  983. package/src/Position.tsx +0 -63
  984. package/src/ProgressBar.tsx +0 -52
  985. package/src/SelectMenu/SelectMenu.tsx +0 -123
  986. package/src/SelectMenu/SelectMenuContext.tsx +0 -9
  987. package/src/SelectMenu/SelectMenuDivider.tsx +0 -24
  988. package/src/SelectMenu/SelectMenuFilter.tsx +0 -50
  989. package/src/SelectMenu/SelectMenuFooter.tsx +0 -27
  990. package/src/SelectMenu/SelectMenuHeader.tsx +0 -48
  991. package/src/SelectMenu/SelectMenuItem.tsx +0 -136
  992. package/src/SelectMenu/SelectMenuList.tsx +0 -41
  993. package/src/SelectMenu/SelectMenuLoadingAnimation.tsx +0 -25
  994. package/src/SelectMenu/SelectMenuModal.tsx +0 -119
  995. package/src/SelectMenu/SelectMenuTab.tsx +0 -87
  996. package/src/SelectMenu/SelectMenuTabPanel.tsx +0 -29
  997. package/src/SelectMenu/SelectMenuTabs.tsx +0 -43
  998. package/src/SelectMenu/hooks/useKeyboardNav.js +0 -90
  999. package/src/SelectMenu/index.ts +0 -15
  1000. package/src/SelectPanel/SelectPanel.tsx +0 -173
  1001. package/src/SelectPanel/index.ts +0 -2
  1002. package/src/SideNav.tsx +0 -191
  1003. package/src/Spinner.tsx +0 -59
  1004. package/src/StateLabel.tsx +0 -112
  1005. package/src/StyledOcticon.tsx +0 -22
  1006. package/src/SubNav.tsx +0 -124
  1007. package/src/TabNav.tsx +0 -73
  1008. package/src/Text.tsx +0 -13
  1009. package/src/TextInput.tsx +0 -68
  1010. package/src/TextInputWithTokens.tsx +0 -351
  1011. package/src/ThemeProvider.tsx +0 -176
  1012. package/src/Timeline.tsx +0 -140
  1013. package/src/Token/AvatarToken.tsx +0 -54
  1014. package/src/Token/IssueLabelToken.tsx +0 -150
  1015. package/src/Token/Token.tsx +0 -126
  1016. package/src/Token/TokenBase.tsx +0 -129
  1017. package/src/Token/_RemoveTokenButton.tsx +0 -111
  1018. package/src/Token/_TokenTextContainer.tsx +0 -47
  1019. package/src/Token/index.ts +0 -3
  1020. package/src/Tooltip.tsx +0 -263
  1021. package/src/Truncate.tsx +0 -31
  1022. package/src/UnderlineNav.tsx +0 -107
  1023. package/src/_TextInputWrapper.tsx +0 -113
  1024. package/src/_UnstyledTextInput.tsx +0 -19
  1025. package/src/__tests__/.eslintrc.json +0 -11
  1026. package/src/__tests__/ActionList.test.tsx +0 -53
  1027. package/src/__tests__/ActionList.types.test.tsx +0 -51
  1028. package/src/__tests__/ActionList2.test.tsx +0 -47
  1029. package/src/__tests__/ActionMenu.test.tsx +0 -136
  1030. package/src/__tests__/AnchoredOverlay.test.tsx +0 -150
  1031. package/src/__tests__/Autocomplete.test.tsx +0 -444
  1032. package/src/__tests__/Avatar.test.tsx +0 -44
  1033. package/src/__tests__/AvatarStack.test.tsx +0 -48
  1034. package/src/__tests__/BorderBox.test.tsx +0 -43
  1035. package/src/__tests__/Box.test.tsx +0 -42
  1036. package/src/__tests__/BranchName.test.tsx +0 -26
  1037. package/src/__tests__/Breadcrumbs.test.tsx +0 -27
  1038. package/src/__tests__/Breadcrumbs.types.test.tsx +0 -22
  1039. package/src/__tests__/BreadcrumbsItem.test.tsx +0 -31
  1040. package/src/__tests__/Button.test.tsx +0 -128
  1041. package/src/__tests__/Caret.test.tsx +0 -36
  1042. package/src/__tests__/CircleBadge.test.tsx +0 -66
  1043. package/src/__tests__/CircleBadge.types.test.tsx +0 -11
  1044. package/src/__tests__/CircleOcticon.test.tsx +0 -50
  1045. package/src/__tests__/ConfirmationDialog.test.tsx +0 -120
  1046. package/src/__tests__/CounterLabel.test.tsx +0 -50
  1047. package/src/__tests__/CounterLabel.types.test.tsx +0 -11
  1048. package/src/__tests__/Details.test.tsx +0 -115
  1049. package/src/__tests__/Dialog.test.tsx +0 -155
  1050. package/src/__tests__/Dialog.types.test.tsx +0 -11
  1051. package/src/__tests__/Dialog2.types.test.tsx +0 -11
  1052. package/src/__tests__/Dropdown.test.tsx +0 -53
  1053. package/src/__tests__/Dropdown.types.test.tsx +0 -21
  1054. package/src/__tests__/DropdownMenu.test.tsx +0 -136
  1055. package/src/__tests__/FilterList.test.tsx +0 -26
  1056. package/src/__tests__/FilterList.types.test.tsx +0 -17
  1057. package/src/__tests__/FilterListItem.test.tsx +0 -31
  1058. package/src/__tests__/FilteredSearch.test.tsx +0 -26
  1059. package/src/__tests__/FilteredSearch.types.test.tsx +0 -11
  1060. package/src/__tests__/Flash.test.tsx +0 -45
  1061. package/src/__tests__/Flash.types.test.tsx +0 -11
  1062. package/src/__tests__/Flex.test.tsx +0 -58
  1063. package/src/__tests__/FormGroup.test.tsx +0 -38
  1064. package/src/__tests__/FormGroup.types.test.tsx +0 -11
  1065. package/src/__tests__/Grid.test.tsx +0 -82
  1066. package/src/__tests__/Header.test.tsx +0 -49
  1067. package/src/__tests__/Header.types.test.tsx +0 -19
  1068. package/src/__tests__/Heading.test.tsx +0 -91
  1069. package/src/__tests__/KeyPaths.types.test.ts +0 -14
  1070. package/src/__tests__/Label.test.tsx +0 -34
  1071. package/src/__tests__/Label.types.test.tsx +0 -11
  1072. package/src/__tests__/LabelGroup.test.tsx +0 -30
  1073. package/src/__tests__/LabelGroup.types.test.tsx +0 -11
  1074. package/src/__tests__/Link.test.tsx +0 -47
  1075. package/src/__tests__/Link.types.test.tsx +0 -11
  1076. package/src/__tests__/Merge.types.test.ts +0 -39
  1077. package/src/__tests__/NewButton.test.tsx +0 -70
  1078. package/src/__tests__/Overlay.test.tsx +0 -103
  1079. package/src/__tests__/Overlay.types.test.tsx +0 -18
  1080. package/src/__tests__/Pagehead.test.tsx +0 -23
  1081. package/src/__tests__/Pagehead.types.test.tsx +0 -11
  1082. package/src/__tests__/Pagination/Pagination.test.tsx +0 -30
  1083. package/src/__tests__/Pagination/PaginationModel.test.tsx +0 -133
  1084. package/src/__tests__/Pagination/__snapshots__/Pagination.test.tsx.snap +0 -184
  1085. package/src/__tests__/Pagination.types.test.tsx +0 -11
  1086. package/src/__tests__/PointerBox.test.tsx +0 -34
  1087. package/src/__tests__/Popover.test.tsx +0 -68
  1088. package/src/__tests__/Popover.types.test.tsx +0 -17
  1089. package/src/__tests__/Portal.test.tsx +0 -103
  1090. package/src/__tests__/Position.test.tsx +0 -117
  1091. package/src/__tests__/ProgressBar.test.tsx +0 -40
  1092. package/src/__tests__/SelectMenu.test.tsx +0 -142
  1093. package/src/__tests__/SelectMenu.types.test.tsx +0 -37
  1094. package/src/__tests__/SelectPanel.test.tsx +0 -63
  1095. package/src/__tests__/SideNav.test.tsx +0 -62
  1096. package/src/__tests__/SideNav.types.test.tsx +0 -11
  1097. package/src/__tests__/Spinner.test.tsx +0 -42
  1098. package/src/__tests__/StateLabel.test.tsx +0 -48
  1099. package/src/__tests__/StateLabel.types.test.tsx +0 -11
  1100. package/src/__tests__/StyledOcticon.test.tsx +0 -26
  1101. package/src/__tests__/StyledOcticon.types.test.tsx +0 -12
  1102. package/src/__tests__/SubNav.test.tsx +0 -50
  1103. package/src/__tests__/SubNav.types.test.tsx +0 -25
  1104. package/src/__tests__/SubNavLink.test.tsx +0 -31
  1105. package/src/__tests__/TabNav.test.tsx +0 -32
  1106. package/src/__tests__/TabNav.types.test.tsx +0 -22
  1107. package/src/__tests__/Text.test.tsx +0 -78
  1108. package/src/__tests__/TextInput.test.tsx +0 -49
  1109. package/src/__tests__/TextInputWithTokens.test.tsx +0 -422
  1110. package/src/__tests__/ThemeProvider.test.tsx +0 -441
  1111. package/src/__tests__/Timeline.test.tsx +0 -58
  1112. package/src/__tests__/Timeline.types.test.tsx +0 -31
  1113. package/src/__tests__/Token.test.tsx +0 -118
  1114. package/src/__tests__/Tooltip.test.tsx +0 -52
  1115. package/src/__tests__/Tooltip.types.test.tsx +0 -11
  1116. package/src/__tests__/Truncate.test.tsx +0 -43
  1117. package/src/__tests__/Truncate.types.test.tsx +0 -11
  1118. package/src/__tests__/UnderlineNav.test.tsx +0 -58
  1119. package/src/__tests__/UnderlineNav.types.test.tsx +0 -22
  1120. package/src/__tests__/UnderlineNavLink.test.tsx +0 -31
  1121. package/src/__tests__/__snapshots__/ActionList.test.tsx.snap +0 -223
  1122. package/src/__tests__/__snapshots__/ActionList2.test.tsx.snap +0 -14
  1123. package/src/__tests__/__snapshots__/ActionMenu.test.tsx.snap +0 -80
  1124. package/src/__tests__/__snapshots__/AnchoredOverlay.test.tsx.snap +0 -232
  1125. package/src/__tests__/__snapshots__/Autocomplete.test.tsx.snap +0 -3888
  1126. package/src/__tests__/__snapshots__/Avatar.test.tsx.snap +0 -19
  1127. package/src/__tests__/__snapshots__/AvatarStack.test.tsx.snap +0 -377
  1128. package/src/__tests__/__snapshots__/BorderBox.test.tsx.snap +0 -14
  1129. package/src/__tests__/__snapshots__/Box.test.tsx.snap +0 -201
  1130. package/src/__tests__/__snapshots__/BranchName.test.tsx.snap +0 -17
  1131. package/src/__tests__/__snapshots__/Breadcrumbs.test.tsx.snap +0 -29
  1132. package/src/__tests__/__snapshots__/BreadcrumbsItem.test.tsx.snap +0 -79
  1133. package/src/__tests__/__snapshots__/Button.test.tsx.snap +0 -840
  1134. package/src/__tests__/__snapshots__/Caret.test.tsx.snap +0 -373
  1135. package/src/__tests__/__snapshots__/CircleBadge.test.tsx.snap +0 -142
  1136. package/src/__tests__/__snapshots__/CircleOcticon.test.tsx.snap +0 -65
  1137. package/src/__tests__/__snapshots__/ConfirmationDialog.test.tsx.snap +0 -89
  1138. package/src/__tests__/__snapshots__/CounterLabel.test.tsx.snap +0 -22
  1139. package/src/__tests__/__snapshots__/Details.test.tsx.snap +0 -15
  1140. package/src/__tests__/__snapshots__/Dialog.test.tsx.snap +0 -201
  1141. package/src/__tests__/__snapshots__/Dropdown.test.tsx.snap +0 -249
  1142. package/src/__tests__/__snapshots__/DropdownMenu.test.tsx.snap +0 -107
  1143. package/src/__tests__/__snapshots__/FilterList.test.tsx.snap +0 -13
  1144. package/src/__tests__/__snapshots__/FilterListItem.test.tsx.snap +0 -80
  1145. package/src/__tests__/__snapshots__/FilteredSearch.test.tsx.snap +0 -32
  1146. package/src/__tests__/__snapshots__/Flash.test.tsx.snap +0 -32
  1147. package/src/__tests__/__snapshots__/Flex.test.tsx.snap +0 -130
  1148. package/src/__tests__/__snapshots__/FormGroup.test.tsx.snap +0 -25
  1149. package/src/__tests__/__snapshots__/Grid.test.tsx.snap +0 -178
  1150. package/src/__tests__/__snapshots__/Header.test.tsx.snap +0 -79
  1151. package/src/__tests__/__snapshots__/Heading.test.tsx.snap +0 -13
  1152. package/src/__tests__/__snapshots__/Label.test.tsx.snap +0 -73
  1153. package/src/__tests__/__snapshots__/LabelGroup.test.tsx.snap +0 -15
  1154. package/src/__tests__/__snapshots__/Link.test.tsx.snap +0 -212
  1155. package/src/__tests__/__snapshots__/NewButton.test.tsx.snap +0 -305
  1156. package/src/__tests__/__snapshots__/Pagehead.test.tsx.snap +0 -15
  1157. package/src/__tests__/__snapshots__/PointerBox.test.tsx.snap +0 -174
  1158. package/src/__tests__/__snapshots__/Popover.test.tsx.snap +0 -4687
  1159. package/src/__tests__/__snapshots__/Position.test.tsx.snap +0 -44
  1160. package/src/__tests__/__snapshots__/ProgressBar.test.tsx.snap +0 -53
  1161. package/src/__tests__/__snapshots__/SelectMenu.test.tsx.snap +0 -473
  1162. package/src/__tests__/__snapshots__/SelectPanel.test.tsx.snap +0 -124
  1163. package/src/__tests__/__snapshots__/SideNav.test.tsx.snap +0 -143
  1164. package/src/__tests__/__snapshots__/Spinner.test.tsx.snap +0 -33
  1165. package/src/__tests__/__snapshots__/StateLabel.test.tsx.snap +0 -395
  1166. package/src/__tests__/__snapshots__/StyledOcticon.test.tsx.snap +0 -26
  1167. package/src/__tests__/__snapshots__/SubNav.test.tsx.snap +0 -44
  1168. package/src/__tests__/__snapshots__/SubNavLink.test.tsx.snap +0 -199
  1169. package/src/__tests__/__snapshots__/TabNav.test.tsx.snap +0 -58
  1170. package/src/__tests__/__snapshots__/Text.test.tsx.snap +0 -7
  1171. package/src/__tests__/__snapshots__/TextInput.test.tsx.snap +0 -446
  1172. package/src/__tests__/__snapshots__/TextInputWithTokens.test.tsx.snap +0 -6045
  1173. package/src/__tests__/__snapshots__/ThemeProvider.test.tsx.snap +0 -15
  1174. package/src/__tests__/__snapshots__/Timeline.test.tsx.snap +0 -159
  1175. package/src/__tests__/__snapshots__/Token.test.tsx.snap +0 -3811
  1176. package/src/__tests__/__snapshots__/Tooltip.test.tsx.snap +0 -227
  1177. package/src/__tests__/__snapshots__/Truncate.test.tsx.snap +0 -17
  1178. package/src/__tests__/__snapshots__/UnderlineNav.test.tsx.snap +0 -59
  1179. package/src/__tests__/__snapshots__/UnderlineNavLink.test.tsx.snap +0 -130
  1180. package/src/__tests__/behaviors/anchoredPosition.test.ts +0 -295
  1181. package/src/__tests__/behaviors/focusTrap.test.tsx +0 -236
  1182. package/src/__tests__/behaviors/focusZone.test.tsx +0 -549
  1183. package/src/__tests__/behaviors/iterateFocusableElements.test.tsx +0 -61
  1184. package/src/__tests__/behaviors/scrollIntoViewingArea.test.ts +0 -195
  1185. package/src/__tests__/filterObject.test.ts +0 -54
  1186. package/src/__tests__/hooks/useAnchoredPosition.test.tsx +0 -31
  1187. package/src/__tests__/hooks/useOnEscapePress.test.tsx +0 -16
  1188. package/src/__tests__/hooks/useOnOutsideClick.test.tsx +0 -48
  1189. package/src/__tests__/hooks/useOpenAndCloseFocus.test.tsx +0 -48
  1190. package/src/__tests__/hooks/useProvidedStateOrCreate.test.tsx +0 -39
  1191. package/src/__tests__/theme.test.ts +0 -41
  1192. package/src/__tests__/themeGet.test.ts +0 -15
  1193. package/src/__tests__/useSafeTimeout.test.tsx +0 -36
  1194. package/src/__tests__/utils/__snapshots__/createSlots.test.tsx.snap +0 -55
  1195. package/src/__tests__/utils/createSlots.test.tsx +0 -74
  1196. package/src/behaviors/anchoredPosition.ts +0 -442
  1197. package/src/behaviors/focusTrap.ts +0 -184
  1198. package/src/behaviors/focusZone.ts +0 -713
  1199. package/src/behaviors/scrollIntoViewingArea.ts +0 -27
  1200. package/src/constants.ts +0 -62
  1201. package/src/drafts.ts +0 -10
  1202. package/src/hooks/index.ts +0 -11
  1203. package/src/hooks/useAnchoredPosition.ts +0 -54
  1204. package/src/hooks/useCombinedRefs.ts +0 -40
  1205. package/src/hooks/useDetails.tsx +0 -54
  1206. package/src/hooks/useDialog.ts +0 -121
  1207. package/src/hooks/useFocusTrap.ts +0 -80
  1208. package/src/hooks/useFocusZone.ts +0 -64
  1209. package/src/hooks/useOnEscapePress.ts +0 -63
  1210. package/src/hooks/useOnOutsideClick.tsx +0 -82
  1211. package/src/hooks/useOpenAndCloseFocus.ts +0 -32
  1212. package/src/hooks/useOverlay.tsx +0 -34
  1213. package/src/hooks/useProvidedRefOrCreate.ts +0 -14
  1214. package/src/hooks/useProvidedStateOrCreate.ts +0 -27
  1215. package/src/hooks/useRenderForcingRef.ts +0 -22
  1216. package/src/hooks/useResizeObserver.ts +0 -11
  1217. package/src/hooks/useSafeTimeout.ts +0 -38
  1218. package/src/hooks/useScrollFlash.ts +0 -21
  1219. package/src/index.ts +0 -172
  1220. package/src/polyfills/eventListenerSignal.ts +0 -66
  1221. package/src/stories/ActionList.stories.tsx +0 -436
  1222. package/src/stories/ActionList2.stories.tsx +0 -1291
  1223. package/src/stories/ActionMenu.stories.tsx +0 -331
  1224. package/src/stories/AnchoredOverlay.stories.tsx +0 -117
  1225. package/src/stories/Autocomplete.stories.tsx +0 -655
  1226. package/src/stories/AvatarStack.stories.tsx +0 -37
  1227. package/src/stories/Button.stories.tsx +0 -92
  1228. package/src/stories/ConfirmationDialog.stories.tsx +0 -105
  1229. package/src/stories/Dialog.stories.tsx +0 -240
  1230. package/src/stories/DropdownMenu.stories.tsx +0 -84
  1231. package/src/stories/IssueLabelToken.stories.tsx +0 -138
  1232. package/src/stories/NewButton.stories.tsx +0 -201
  1233. package/src/stories/Overlay.stories.tsx +0 -213
  1234. package/src/stories/Portal.stories.tsx +0 -109
  1235. package/src/stories/ProfileToken.stories.tsx +0 -129
  1236. package/src/stories/SelectPanel.stories.tsx +0 -353
  1237. package/src/stories/TextInput.stories.tsx +0 -113
  1238. package/src/stories/TextInputWithTokens.stories.tsx +0 -155
  1239. package/src/stories/ThemeProvider.stories.tsx +0 -104
  1240. package/src/stories/Token.stories.tsx +0 -137
  1241. package/src/stories/useAnchoredPosition.stories.tsx +0 -332
  1242. package/src/stories/useFocusTrap.stories.tsx +0 -400
  1243. package/src/stories/useFocusZone.stories.tsx +0 -663
  1244. package/src/sx.ts +0 -24
  1245. package/src/theme-preval.js +0 -80
  1246. package/src/theme.ts +0 -89
  1247. package/src/utils/create-slots.tsx +0 -96
  1248. package/src/utils/deprecate.tsx +0 -73
  1249. package/src/utils/isNumeric.tsx +0 -4
  1250. package/src/utils/iterateFocusableElements.ts +0 -121
  1251. package/src/utils/ssr.tsx +0 -1
  1252. package/src/utils/test-deprecations.tsx +0 -19
  1253. package/src/utils/test-helpers.tsx +0 -7
  1254. package/src/utils/test-matchers.tsx +0 -109
  1255. package/src/utils/testing.tsx +0 -242
  1256. package/src/utils/theme.js +0 -64
  1257. package/src/utils/types/AriaRole.ts +0 -71
  1258. package/src/utils/types/ComponentProps.ts +0 -13
  1259. package/src/utils/types/Flatten.ts +0 -4
  1260. package/src/utils/types/KeyPaths.ts +0 -10
  1261. package/src/utils/types/MandateProps.ts +0 -19
  1262. package/src/utils/types/Merge.ts +0 -20
  1263. package/src/utils/types/index.ts +0 -5
  1264. package/src/utils/uniqueId.ts +0 -6
  1265. package/src/utils/use-force-update.ts +0 -7
  1266. package/src/utils/useIsomorphicLayoutEffect.ts +0 -10
  1267. package/src/utils/userAgent.ts +0 -7
  1268. package/stats.html +0 -3279
  1269. package/tsconfig.base.json +0 -20
  1270. package/tsconfig.build.json +0 -7
  1271. package/tsconfig.json +0 -7
@@ -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,72 +0,0 @@
1
- # ADR 003: Prop norms in Primer React Components
2
-
3
- ## Status
4
-
5
- Proposed
6
-
7
- ## Context
8
-
9
- Today our component prop APIs have:
10
-
11
- - Implicit conventions not documented anywhere but consistently reflected in our code (e.g., the type of the `sx` prop)
12
- - Explicit plans to change some of those (e.g., the deprecation of Styled System props)
13
- - Inconsistencies in our implementation (e.g., when components accept a `ref` prop)
14
-
15
- This ADR aims to unify some of these conversations about prop APIs, codify our decisions, and sequence the work to get there.
16
-
17
- ## Decision
18
-
19
- ### 🟢 `sx`
20
-
21
- All components that ultimately render to the DOM should accept an `sx` prop.
22
-
23
- The `sx` prop (of type `SystemStyleObject`) should generally set styles for the root HTML element rendered by the component. An exception would be components like `<Dialog>`, whose outermost HTML element is a backdrop. In that case, it would be appropriate for `sx` styles to apply to child of the backdrop that is more likely to need styling overrides.
24
-
25
- ### 🟢 `ref`
26
-
27
- All components that ultimately render to the DOM should accept a `ref` prop. That `ref` prop should most often be passed to the root HTMLElement rendered by the component, although occasionally a different descendent node may make more sense.
28
-
29
- See also: [Discussion on `ref` props (internal)](https://github.com/github/primer/discussions/131)
30
-
31
- ### 🟡 `as`
32
-
33
- Only components with a clear need for polymorphism should accept an `as` prop. Reasonable cases include:
34
-
35
- - Components that need functionality from the component passed to the `as` prop, like a `<Button>` that renders a React Router link.
36
- - Components whose accessibility are improved by using semantically appropriate HTML elements, like an ActionList
37
-
38
- When a Primer component user passes an `as` prop to a component, it should be done in a way that is consistent with the component’s intended use. In some situations we can enforce that with a narrowed type for our `as` prop.
39
-
40
- See also: [Discussion on `as` props (internal)](https://github.com/github/primer/discussions/130)
41
-
42
- ### 🟡 DOM props: Limited
43
-
44
- All components that accept an `as` prop should accept props en masse for the element specified by the `as` prop (excluding props of the same name already used by the component). _Additionally_, some other elements that do _not_ accept an `as` prop should accept the props for their root HTML element when those props are fundamental to the component’s function (e.g., `<TextInput>` should accept DOM props for its underlying `<input>`).
45
-
46
- ### 🔴 Styled System props
47
-
48
- Components should not accept Styled System props (except our utility components: `Box` and `Type`)
49
-
50
- _Reasoning:_ Utility components are meant to provide a convenient API for writing styles (including styles that reference theme and other context managed within Primer). Non-utility components implement specific design patterns where additional styling is available for exceptional cases.
51
-
52
- See also: [Discussion on the deprecation of styled-system props (internal)](https://github.com/github/primer/discussions/132)
53
-
54
- ### 🔴 `theme`
55
-
56
- Components should not accept a `theme` prop (with the exception of `ThemeProvider`).
57
-
58
- _Reasoning:_ The `theme` prop doesn't enable anything that can't be done with `<ThemeProvider>`, and promotes the anti-pattern of per-component theme overrides.
59
-
60
- ### `children`
61
-
62
- I'm intentionally withholding advocacy about `children` prop types because I expect that topic will be covered by a future ADR.
63
-
64
- ### Sequencing
65
-
66
- 1. Deprecate remaining unwanted Styled System props (should be done? Let's verify.)
67
- 1. Release an eslint rule to disallow Styled System props
68
- 1. Release an eslint rule to disallow `theme`
69
- 1. Migrate all usage within PRC
70
- 1. Assist GitHub projects with migration
71
- 1. Remove support for unwanted props
72
- 1. Update docs to reflect the standards in this ADR
@@ -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.
@@ -1,316 +0,0 @@
1
- # React Component APIs: Contents as data vs. Contents as children
2
-
3
- Consider a React component that renders a list of items. Here are two possible APIs that component might expose, both achieving an equivalent result.
4
-
5
- ### A: Contents passed as React children
6
-
7
- ```jsx
8
- <List>
9
- <List.Item>New file</List.Item>
10
- <List.Divider />
11
- <List.Item>Copy link</List.Item>
12
- <List.Item>Edit file</List.Item>
13
- <List.Item variant="danger">Delete file</List.Item>
14
- </List>
15
- ```
16
-
17
- ### B: Contents passed as data
18
-
19
- ```jsx
20
- <List
21
- items={[
22
- { text: "New file" },
23
- ActionList.Divider,
24
- { text: "Copy link" },
25
- { text: "Edit file" },
26
- { text: "Delete file", variant: "danger" },
27
- ]}
28
- />
29
- ```
30
-
31
- Is one API better than the other generally? What about in this context (a "List" component)? Are there situations where it is better to choose one over the other? Let's try to answer these questions.
32
-
33
- ## Both APIs have valid use cases
34
-
35
- This section simply argues that both of the patterns above are valid. Once we do this, we can attempt to define the criteria that helps the API designer choose one over the other.
36
-
37
- ### Contents passed as React children
38
-
39
- This is the most common way to define the structure of content in React. In fact, all HTML elements work this way:
40
-
41
- ```jsx
42
- <div>
43
- <div>Some content</div>
44
- <div>More content</div>
45
- </div>
46
- ```
47
-
48
- ```jsx
49
- <ul>
50
- <li>Item 1</li>
51
- <li>Item 2</li>
52
- </ul>
53
- ```
54
-
55
- ```jsx
56
- <select>
57
- <option value="1">First option</option>
58
- <option value="1">Second option</option>
59
- </select>
60
- ```
61
-
62
- Though less common, sometimes the HTML schema puts tight restrictions on the kinds of children an element may contain:
63
-
64
- - `<select>` elements may only contain `<option>` and `<optgroup>` children.
65
- - `<ul>` may only contain `<li>` children.
66
- - `<span>` elements may only contain [phrasing content](https://html.spec.whatwg.org/multipage/dom.html#phrasing-content-2).
67
-
68
- Furthermore, for custom React components, there is a first-class approach for rendering your component's children:
69
-
70
- ```jsx
71
- function MyFancyBox({ children }) {
72
- return <div style="border: 4px double cornflowerblue;">{children}</div>;
73
- }
74
-
75
- // usage
76
- <MyFancyBox>I have a blue border!</MyFancyBox>;
77
- ```
78
-
79
- I call this "first class" because the JSX children that are defined between your component's opening and closing tags are wrapped up into a special prop called `children`. It is the component's responsibility to render those children in the appropriate spot.
80
-
81
- **Clearly, this is a valid approach for a component API.**
82
-
83
- ### Contents passed as data
84
-
85
- An alternative approach is to accept data in the form of a prop, which eventually gets turned into a React element by the component's implementation. In plain HTML, this is far less common. One example is the `title` attribute, which results in a tooltip:
86
-
87
- ```html
88
- <button title="Save">💾</button>
89
- ```
90
-
91
- One _could_ imagine a parallel universe where a tooltip is achieved by some other means!
92
-
93
- ```html
94
- <button>
95
- <title>Save</title>
96
- 💾
97
- </button>
98
- ```
99
-
100
- In custom React components, this pattern can be more common. In this example, the text to render is passed as a prop, as data rather than as pre-created React elements (i.e. JSX):
101
-
102
- ```jsx
103
- function WordWrap({ text, charactersPerLine }) {
104
- const lines = [];
105
- for (
106
- let low = 0;
107
- low + charactersPerLine < text.length;
108
- low += charactersPerLine
109
- ) {
110
- lines.push(text.substr(low, charactersPerLine));
111
- }
112
- const remaining = text.length % charactersPerLine;
113
- if (remaining !== 0) {
114
- lines.push(text.substr(text.length - remaining));
115
- }
116
- return (
117
- <>
118
- {lines.map((l, index) => (
119
- <div key={index + l}>{l}</div>
120
- ))}
121
- </>
122
- );
123
- }
124
-
125
- // usage
126
- <WordWrap
127
- text="the quick brown fox jumps over the lazy dog"
128
- charactersPerLine={5}
129
- />;
130
- ```
131
-
132
- For further customization, one could imagine an optional `renderLine` prop that is used to give consumers control over the way a single line is rendered (see the section "Customization of content passed as data" below).
133
-
134
- ## Can't we just stick to one of the two patterns?
135
-
136
- As shown above, both patterns can be valid approaches based on the component. But _why_ did we choose the data API for `WordWrap`, and _why_ did we choose the React children API for `MyFancyBox`?
137
-
138
- ### Let's try swapping
139
-
140
- Since both patterns are equally powerful, we should be able to write equivalent components using the alternate approach.
141
-
142
- #### MyFancyBox
143
-
144
- Let's start with `MyFancyBox`:
145
-
146
- ```jsx
147
- function MyFancyBox({ contents }) {
148
- const boxChildren = [];
149
- if (typeof contents === "string" || React.isValidElement(contents)) {
150
- boxChildren.push(contents);
151
- } else if (typeof contents === "function") {
152
- boxChildren.push(contents());
153
- } // implementation abbreviated for clarity
154
- return <div style="border: 4px double cornflowerblue;">{boxChildren}</div>;
155
- }
156
-
157
- // usage
158
- <MyFancyBox contents="I have a blue border!" />;
159
- ```
160
-
161
- This example is so esoteric that I think it's obvious which is superior. The original has a less-complex implementation and a clearer API (in the second, just looking at the usage example, there is no way to know that contents can also accept a React element or a function callback).
162
-
163
- #### WordWrap
164
-
165
- Now let's dive into `WordWrap`, implemented with a React children-based API:
166
-
167
- ```jsx
168
- function WordWrap({ children, charactersPerLine }) {
169
- const items = React.Children.toArray(children);
170
- let textContent = "";
171
- for (const child of items) {
172
- if (typeof child === "string") {
173
- textContent += child;
174
- }
175
- }
176
- const lines = [];
177
- for (
178
- let low = 0;
179
- low + charactersPerLine < textContent.length;
180
- low += charactersPerLine
181
- ) {
182
- lines.push(textContent.substr(low, charactersPerLine));
183
- }
184
- const remaining = textContent.length % charactersPerLine;
185
- if (remaining !== 0) {
186
- lines.push(textContent.substr(textContent.length - remaining));
187
- }
188
- return (
189
- <>
190
- {lines.map((l, index) => (
191
- <div key={index + l}>{l}</div>
192
- ))}
193
- </>
194
- );
195
- }
196
-
197
- // usage
198
- <WordWrap charactersPerLine={5}>
199
- the quick brown fox jumps over the lazy dog
200
- </WordWrap>;
201
- ```
202
-
203
- Let's get the obvious out of the way: the component implementation is more complex. Instead of receiving the raw text as a prop, the component has to iterate through its children, figure out which ones are text nodes, and build up the string.
204
-
205
- But sometimes we are willing to make the sacrifice of increasing the complexity of our components if they become easier to use for our consumers. Is that what is happening here? One could argue that our new API is more straightforward and more readable! It's clear that the child text node of `WordWrap` will serve as the eventually-rendered contents, whereas the prop passed (`charactersPerLine`) is more of a configuration of the behavior.
206
-
207
- On the other hand, if you are consuming this `WordWrap`, you might be left more confused. It is not clear without reading the code what is allowed as a child node. Can I include links or styled elements? How does it respond to receiving component children? In fact, if we want to the [principle of least surprise](https://en.wikipedia.org/wiki/Principle_of_least_astonishment), it may be necessary to support links or bolded text. While possible, this greatly increases the complexity of the component. Even if we do support this, it might be hard to discover this feature unless the user reads the docs or source code.
208
-
209
- The first `WordWrap` implementation comparatively has a very strict API, easily discovered (with strong typing), and there is no possible way to use it which would produce a surprising result.
210
-
211
- Because of the trade-offs described, I postulate that the first implementation of `WordWrap` is superior.
212
-
213
- ### The hybrid approach
214
-
215
- It is possible to build a component API that supports both patterns. In other words, the consumer can pass data as a prop, which gets rendered into React elements, while also accepting those children being passed in directly.
216
-
217
- We do not recommend this approach. The resulting behavior can be very hard to predict. How do the elements generated from data interact with the passed-in children? How are they ordered? Furthermore, the approach likely does not improve the developer experience.
218
-
219
- ## The ownership of React elements
220
-
221
- I shall make the following claim:
222
-
223
- > The owner of a React element is the component that _originally_ added it to the component tree.
224
-
225
- For example, take the following two implementations of a simple (contrived) List component:
226
-
227
- ```jsx
228
- function List({ children, ordered }) {
229
- const Elem = ordered ? "ol" : "ul";
230
- return <Elem>{children}</Elem>;
231
- }
232
- function Item({ children }) {
233
- return <li>{children}</li>;
234
- }
235
-
236
- // usage
237
- function MyApp() {
238
- return (
239
- <List ordered={true}>
240
- <Item>Apple</Item>
241
- <Item>Banana</Item>
242
- <Item>Cantaloupe</Item>
243
- </List>
244
- );
245
- }
246
- ```
247
-
248
- ```jsx
249
- function List({ items, ordered }) {
250
- const Elem = ordered ? "ol" : "ul";
251
- const listItems = items.map((i) => <li key={i}>i</li>);
252
- return <Elem>{listItems}</Elem>;
253
- }
254
-
255
- // usage
256
- function MyApp() {
257
- return <List ordered={true} items={["Apple", "Banana", "Cantaloupe"]} />;
258
- }
259
- ```
260
-
261
- In the first example, `MyApp` "owns" the `List` and its 3 `Item`s. In the second example, `MyApp` only "owns" `List`, while the `List` owns the `Item`s it renders.
262
-
263
- Why do I bring this up? If you assume that the _owner_ of an element has the _highest authority_ to configure that element (i.e. change the element type, its props, and its children), then any component API should strive to be designed to respect this assumption.
264
-
265
- I believe this is a reasonable assumption: an element owner should be able to expect that the element will be rendered as close to the definition as possible. Otherwise, this violates the principle of least surprise.
266
-
267
- ### The `React.Children` anti-pattern
268
- Based on the above assumption, using `React.Children` can be an anti-pattern. `React.Children` allows a component to reach into elements that it does not own. In our `WordWrap` example that uses React children, it is clear that we do not respect the owner (as defined above) of these elements. We iterate through children, ignoring anything that is not a text node.
269
-
270
- With this reasoning, it's also easy to argue that `React.cloneElement` should be an anti-pattern. While that is true, there are ways to use `React.cloneElement` to simply augment children without altering their primary purpose or function. Adding additional props is a common use.
271
-
272
- While anti-patterns sometimes have their valid uses, those uses should be individually scrutinized and avoided where possible.
273
-
274
- ## Customization of content passed as data
275
-
276
- One significant benefit to the contents as children pattern is the fact that it lends itself very naturally to customization. Since the parent owns the children, it can create whatever children it likes, deciding their props and element types. This level of customization can be achieved using the contents as data pattern too, but it's not quite as straightforward (for the component author or the component consumer).
277
-
278
- One common practice is for a component to accept a "render prop." The render prop is a function that returns JSX (the same as a function component). That function should be passed any data that may be needed for rendering. Of course, components should ship with a default renderer and not rely on being passed a render prop.
279
-
280
- ## How to decide
281
-
282
- At this point we have shown that both patterns are valid, so how do we know which to use? Here is a comparison of the two approaches:
283
-
284
- ### Advantages of data contract
285
-
286
- - Strongly typed
287
- - All use cases are clearly defined
288
- - Easy to manipulate data
289
- - Easy to define a "pit of success" and lead the user there
290
- - Can support "escape hatches"
291
- - Component retains ownership of rendered contents
292
- - Usually less code in the implementation
293
-
294
- ### Advantages of children-based contract
295
-
296
- - Indicates flexibility
297
- - Leaves room for a flexible implementation
298
- - Recognizable from HTML
299
- - Easier to read
300
- - Ownership of contents remains with a parent or ancestor component
301
-
302
- Based on these observations, here are some guidelines to decide which type of API to build:
303
-
304
- ### When to use a data contract
305
- - Data doesn't cleanly transfer to an element structure
306
- - Data needs to be manipulated before being converted to an element structure
307
- - Certain well-defined scenarios need to be supported
308
- - You want to control the types and structure of child elements
309
- - The default rendering of the component is useful in many cases
310
- - You are building a composite component
311
-
312
- ### When to use a children-based contract
313
- - Your component doesn't care about the structure of children
314
- - Your component doesn't need to use `React.Children`
315
- - Your component is flexible enough to accommodate almost any child structure
316
- - You are building an intermediate component that provides behaviors or styles to a container