@zohodesk/components 1.0.0-temp-666 → 1.0.0-temp-69

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 (408) hide show
  1. package/README.md +11 -1
  2. package/es/Accordion/Accordion.js +4 -20
  3. package/es/Accordion/AccordionItem.js +4 -19
  4. package/es/Accordion/props/defaultProps.js +8 -0
  5. package/es/Accordion/props/propTypes.js +30 -0
  6. package/es/Animation/Animation.js +4 -25
  7. package/es/Animation/props/defaultProps.js +7 -0
  8. package/es/Animation/props/propTypes.js +12 -0
  9. package/es/AppContainer/AppContainer.js +4 -23
  10. package/es/AppContainer/props/defaultProps.js +8 -0
  11. package/es/AppContainer/props/propTypes.js +15 -0
  12. package/es/Avatar/Avatar.js +4 -44
  13. package/es/Avatar/Avatar.module.css +11 -9
  14. package/es/Avatar/props/defaultProps.js +13 -0
  15. package/es/Avatar/props/propTypes.js +22 -0
  16. package/es/AvatarTeam/AvatarTeam.js +4 -36
  17. package/es/AvatarTeam/AvatarTeam.module.css +21 -7
  18. package/es/AvatarTeam/props/defaultProps.js +13 -0
  19. package/es/AvatarTeam/props/propTypes.js +23 -0
  20. package/es/Button/Button.js +4 -47
  21. package/es/Button/Button.module.css +97 -24
  22. package/es/Button/props/defaultProps.js +15 -0
  23. package/es/Button/props/propTypes.js +22 -0
  24. package/es/Buttongroup/Buttongroup.js +4 -11
  25. package/es/Buttongroup/Buttongroup.module.css +37 -8
  26. package/es/Buttongroup/props/defaultProps.js +4 -0
  27. package/es/Buttongroup/props/propTypes.js +7 -0
  28. package/es/Card/Card.js +12 -60
  29. package/es/Card/props/defaultProps.js +15 -0
  30. package/es/Card/props/propTypes.js +43 -0
  31. package/es/CheckBox/CheckBox.js +4 -59
  32. package/es/CheckBox/CheckBox.module.css +29 -19
  33. package/es/CheckBox/props/defaultProps.js +18 -0
  34. package/es/CheckBox/props/propTypes.js +41 -0
  35. package/es/DateTime/CalendarView.js +6 -26
  36. package/es/DateTime/DateTime.js +4 -62
  37. package/es/DateTime/DateTime.module.css +39 -12
  38. package/es/DateTime/DateWidget.js +4 -83
  39. package/es/DateTime/DateWidget.module.css +9 -5
  40. package/es/DateTime/YearView.js +4 -12
  41. package/es/DateTime/YearView.module.css +17 -7
  42. package/es/DateTime/props/defaultProps.js +50 -0
  43. package/es/DateTime/props/propTypes.js +130 -0
  44. package/es/DropBox/DropBox.js +4 -71
  45. package/es/DropBox/DropBox.module.css +47 -11
  46. package/es/DropBox/props/defaultProps.js +20 -0
  47. package/es/DropBox/props/propTypes.js +47 -0
  48. package/es/DropDown/DropDown.js +7 -34
  49. package/es/DropDown/DropDownHeading.js +4 -19
  50. package/es/DropDown/DropDownHeading.module.css +7 -3
  51. package/es/DropDown/DropDownItem.js +4 -18
  52. package/es/DropDown/DropDownItem.module.css +32 -6
  53. package/es/DropDown/DropDownSearch.js +4 -24
  54. package/es/DropDown/DropDownSeparator.js +2 -4
  55. package/es/DropDown/props/defaultProps.js +18 -0
  56. package/es/DropDown/props/propTypes.js +77 -0
  57. package/es/Label/Label.js +4 -24
  58. package/es/Label/props/defaultProps.js +10 -0
  59. package/es/Label/props/propTypes.js +14 -0
  60. package/es/Layout/Box.js +15 -30
  61. package/es/Layout/Container.js +15 -27
  62. package/es/Layout/Layout.module.css +13 -1
  63. package/es/Layout/docs/Layout__four_Column.docs.js +16 -22
  64. package/es/Layout/props/defaultProps.js +12 -0
  65. package/es/Layout/props/propTypes.js +42 -0
  66. package/es/ListItem/ListContainer.js +4 -41
  67. package/es/ListItem/ListItem.js +4 -50
  68. package/es/ListItem/ListItem.module.css +69 -33
  69. package/es/ListItem/ListItemWithAvatar.js +4 -56
  70. package/es/ListItem/ListItemWithCheckBox.js +4 -40
  71. package/es/ListItem/ListItemWithIcon.js +4 -47
  72. package/es/ListItem/ListItemWithRadio.js +4 -41
  73. package/es/ListItem/props/defaultProps.js +85 -0
  74. package/es/ListItem/props/propTypes.js +185 -0
  75. package/es/Modal/Modal.js +4 -9
  76. package/es/Modal/props/defaultProps.js +3 -0
  77. package/es/Modal/props/propTypes.js +6 -0
  78. package/es/MultiSelect/AdvancedGroupMultiSelect.js +5 -91
  79. package/es/MultiSelect/AdvancedMultiSelect.js +4 -113
  80. package/es/MultiSelect/EmptyState.js +4 -29
  81. package/es/MultiSelect/MultiSelect.js +4 -113
  82. package/es/MultiSelect/MultiSelect.module.css +28 -11
  83. package/es/MultiSelect/MultiSelectHeader.js +4 -12
  84. package/es/MultiSelect/MultiSelectWithAvatar.js +4 -99
  85. package/es/MultiSelect/SelectedOptions.js +4 -19
  86. package/es/MultiSelect/SelectedOptions.module.css +8 -2
  87. package/es/MultiSelect/Suggestions.js +5 -34
  88. package/es/MultiSelect/props/defaultProps.js +140 -0
  89. package/es/MultiSelect/props/propTypes.js +360 -0
  90. package/es/PopOver/PopOver.js +7 -78
  91. package/es/PopOver/PopOver.module.css +1 -1
  92. package/es/PopOver/props/defaultProps.js +7 -0
  93. package/es/PopOver/props/propTypes.js +53 -0
  94. package/es/Radio/Radio.js +4 -46
  95. package/es/Radio/Radio.module.css +18 -10
  96. package/es/Radio/props/defaultProps.js +14 -0
  97. package/es/Radio/props/propTypes.js +32 -0
  98. package/es/Responsive/CustomResponsive.js +8 -19
  99. package/es/Responsive/ResizeComponent.js +15 -82
  100. package/es/Responsive/ResizeObserver.js +2 -6
  101. package/es/Responsive/Responsive.js +8 -22
  102. package/es/Responsive/docs/style.module.css +17 -8
  103. package/es/Responsive/props/defaultProps.js +13 -0
  104. package/es/Responsive/props/propTypes.js +25 -0
  105. package/es/ResponsiveDropBox/ResponsiveDropBox.js +4 -11
  106. package/es/ResponsiveDropBox/props/defaultProps.js +4 -0
  107. package/es/ResponsiveDropBox/props/propTypes.js +7 -0
  108. package/es/Ribbon/Ribbon.js +4 -25
  109. package/es/Ribbon/Ribbon.module.css +93 -28
  110. package/es/Ribbon/props/defaultProps.js +8 -0
  111. package/es/Ribbon/props/propTypes.js +10 -0
  112. package/es/RippleEffect/RippleEffect.js +4 -20
  113. package/es/RippleEffect/RippleEffect.module.css +37 -44
  114. package/es/RippleEffect/props/defaultProps.js +9 -0
  115. package/es/RippleEffect/props/propTypes.js +11 -0
  116. package/es/Select/GroupSelect.js +4 -109
  117. package/es/Select/Select.js +4 -120
  118. package/es/Select/Select.module.css +12 -2
  119. package/es/Select/SelectWithAvatar.js +4 -80
  120. package/es/Select/SelectWithIcon.js +4 -69
  121. package/es/Select/props/defaultProps.js +110 -0
  122. package/es/Select/props/propTypes.js +266 -0
  123. package/es/Stencils/Stencils.js +4 -17
  124. package/es/Stencils/Stencils.module.css +21 -3
  125. package/es/Stencils/props/defaultProps.js +6 -0
  126. package/es/Stencils/props/propTypes.js +7 -0
  127. package/es/Switch/Switch.js +4 -37
  128. package/es/Switch/Switch.module.css +9 -9
  129. package/es/Switch/props/defaultProps.js +10 -0
  130. package/es/Switch/props/propTypes.js +27 -0
  131. package/es/Tab/Tab.js +4 -31
  132. package/es/Tab/Tab.module.css +16 -7
  133. package/es/Tab/TabContent.js +4 -10
  134. package/es/Tab/TabContentWrapper.js +4 -12
  135. package/es/Tab/TabWrapper.js +4 -25
  136. package/es/Tab/Tabs.js +6 -68
  137. package/es/Tab/Tabs.module.css +42 -8
  138. package/es/Tab/docs/tabdocs.module.css +1 -1
  139. package/es/Tab/props/defaultProps.js +39 -0
  140. package/es/Tab/props/propTypes.js +102 -0
  141. package/es/Tag/Tag.js +4 -47
  142. package/es/Tag/Tag.module.css +36 -14
  143. package/es/Tag/props/defaultProps.js +13 -0
  144. package/es/Tag/props/propTypes.js +34 -0
  145. package/es/TextBox/TextBox.js +4 -72
  146. package/es/TextBox/TextBox.module.css +7 -11
  147. package/es/TextBox/props/defaultProps.js +19 -0
  148. package/es/TextBox/props/propTypes.js +53 -0
  149. package/es/TextBoxIcon/TextBoxIcon.js +4 -70
  150. package/es/TextBoxIcon/TextBoxIcon.module.css +12 -5
  151. package/es/TextBoxIcon/props/defaultProps.js +21 -0
  152. package/es/TextBoxIcon/props/propTypes.js +49 -0
  153. package/es/Textarea/Textarea.js +4 -47
  154. package/es/Textarea/Textarea.module.css +6 -7
  155. package/es/Textarea/props/defaultProps.js +16 -0
  156. package/es/Textarea/props/propTypes.js +31 -0
  157. package/es/Tooltip/Tooltip.js +4 -12
  158. package/es/Tooltip/Tooltip.module.css +9 -8
  159. package/es/Tooltip/props/defaultProps.js +4 -0
  160. package/es/Tooltip/props/propTypes.js +8 -0
  161. package/es/VelocityAnimation/VelocityAnimation/VelocityAnimation.js +4 -23
  162. package/es/VelocityAnimation/VelocityAnimation/props/defaultProps.js +7 -0
  163. package/es/VelocityAnimation/VelocityAnimation/props/propTypes.js +12 -0
  164. package/es/VelocityAnimation/VelocityAnimationGroup/VelocityAnimationGroup.js +4 -37
  165. package/es/VelocityAnimation/VelocityAnimationGroup/props/defaultProps.js +15 -0
  166. package/es/VelocityAnimation/VelocityAnimationGroup/props/propTypes.js +19 -0
  167. package/es/common/animation.module.css +219 -21
  168. package/es/common/basicReset.module.css +2 -12
  169. package/es/common/common.module.css +88 -21
  170. package/es/common/customscroll.module.css +17 -21
  171. package/es/common/docStyle.module.css +79 -32
  172. package/es/common/transition.module.css +50 -10
  173. package/es/deprecated/AdvancedMultiSelect.module.css +22 -8
  174. package/es/deprecated/PortalLayer/PortalLayer.js +4 -16
  175. package/es/deprecated/PortalLayer/props/defaultProps.js +5 -0
  176. package/es/deprecated/PortalLayer/props/propTypes.js +11 -0
  177. package/es/index.js +9 -4
  178. package/es/semantic/Button/Button.js +4 -38
  179. package/es/semantic/Button/props/defaultProps.js +12 -0
  180. package/es/semantic/Button/props/propTypes.js +26 -0
  181. package/es/semantic/Button/semanticButton.module.css +3 -3
  182. package/es/ucl/Grid/Grid.js +45 -0
  183. package/es/ucl/Grid/componentNames.js +6 -0
  184. package/es/ucl/Grid/css/Grid.module.css +217 -0
  185. package/es/ucl/Grid/css/cssJSLogic.js +46 -0
  186. package/es/ucl/Grid/docs/Grid__Area_Based_Detail_Layout.docs.js +41 -0
  187. package/es/ucl/Grid/docs/Grid__Area_Based_List_Layout.docs.js +49 -0
  188. package/es/ucl/Grid/docs/Grid__Auto_Flow_Row.docs.js +32 -0
  189. package/es/ucl/Grid/docs/Grid__Basic_Detail_Layout.docs.js +41 -0
  190. package/es/ucl/Grid/docs/Grid__Box_Alignment.docs.js +37 -0
  191. package/es/ucl/Grid/docs/Grid__Line_Based_Detail_Layout.docs.js +41 -0
  192. package/es/ucl/Grid/docs/Grid__Line_Based_List_Layout.docs.js +45 -0
  193. package/es/ucl/Grid/docs/Grid__default.docs.js +61 -0
  194. package/es/ucl/Grid/docs/css/gridDocsAreaBasedDetailLayout.module.css +38 -0
  195. package/es/ucl/Grid/docs/css/gridDocsAreaBasedListLayout.module.css +63 -0
  196. package/es/ucl/Grid/docs/css/gridDocsAutoFlowRow.module.css +23 -0
  197. package/es/ucl/Grid/docs/css/gridDocsBasicDetailLayout.module.css +21 -0
  198. package/es/ucl/Grid/docs/css/gridDocsBoxAlignment.module.css +16 -0
  199. package/es/ucl/Grid/docs/css/gridDocsDefault.module.css +15 -0
  200. package/es/ucl/Grid/docs/css/gridDocsLineBasedDetailLayout.module.css +38 -0
  201. package/es/ucl/Grid/docs/css/gridDocsLineBasedListLayout.module.css +47 -0
  202. package/es/ucl/Grid/docs/css/gridDocsStyle.module.css +30 -0
  203. package/es/ucl/Grid/index.js +5 -0
  204. package/es/ucl/Grid/props/ariaPropTypes.js +6 -0
  205. package/es/ucl/Grid/props/defaultProps.js +8 -0
  206. package/es/ucl/Grid/props/propConstants.js +66 -0
  207. package/es/ucl/Grid/props/propTypes.js +27 -0
  208. package/lib/Accordion/Accordion.js +5 -20
  209. package/lib/Accordion/AccordionItem.js +5 -19
  210. package/lib/Accordion/props/defaultProps.js +16 -0
  211. package/lib/Accordion/props/propTypes.js +42 -0
  212. package/lib/Animation/Animation.js +5 -25
  213. package/lib/Animation/props/defaultProps.js +14 -0
  214. package/lib/Animation/props/propTypes.js +23 -0
  215. package/lib/AppContainer/AppContainer.js +13 -24
  216. package/lib/AppContainer/props/defaultProps.js +15 -0
  217. package/lib/AppContainer/props/propTypes.js +26 -0
  218. package/lib/Avatar/Avatar.js +5 -44
  219. package/lib/Avatar/props/defaultProps.js +20 -0
  220. package/lib/Avatar/props/propTypes.js +33 -0
  221. package/lib/AvatarTeam/AvatarTeam.js +5 -36
  222. package/lib/AvatarTeam/props/defaultProps.js +20 -0
  223. package/lib/AvatarTeam/props/propTypes.js +34 -0
  224. package/lib/Button/Button.js +5 -48
  225. package/lib/Button/props/defaultProps.js +24 -0
  226. package/lib/Button/props/propTypes.js +33 -0
  227. package/lib/Buttongroup/Buttongroup.js +5 -11
  228. package/lib/Buttongroup/props/defaultProps.js +11 -0
  229. package/lib/Buttongroup/props/propTypes.js +18 -0
  230. package/lib/Card/Card.js +13 -60
  231. package/lib/Card/props/defaultProps.js +23 -0
  232. package/lib/Card/props/propTypes.js +57 -0
  233. package/lib/CheckBox/CheckBox.js +7 -60
  234. package/lib/CheckBox/CheckBox.module.css +12 -8
  235. package/lib/CheckBox/props/defaultProps.js +25 -0
  236. package/lib/CheckBox/props/propTypes.js +52 -0
  237. package/lib/DateTime/CalendarView.js +7 -26
  238. package/lib/DateTime/DateTime.js +53 -82
  239. package/lib/DateTime/DateTime.module.css +1 -1
  240. package/lib/DateTime/DateWidget.js +17 -85
  241. package/lib/DateTime/DateWidget.module.css +0 -4
  242. package/lib/DateTime/YearView.js +5 -12
  243. package/lib/DateTime/YearView.module.css +1 -0
  244. package/lib/DateTime/props/defaultProps.js +61 -0
  245. package/lib/DateTime/props/propTypes.js +145 -0
  246. package/lib/DropBox/DropBox.js +6 -72
  247. package/lib/DropBox/props/defaultProps.js +27 -0
  248. package/lib/DropBox/props/propTypes.js +58 -0
  249. package/lib/DropDown/DropDown.js +8 -34
  250. package/lib/DropDown/DropDownHeading.js +5 -19
  251. package/lib/DropDown/DropDownItem.js +5 -18
  252. package/lib/DropDown/DropDownSearch.js +5 -23
  253. package/lib/DropDown/DropDownSeparator.js +2 -4
  254. package/lib/DropDown/props/defaultProps.js +28 -0
  255. package/lib/DropDown/props/propTypes.js +94 -0
  256. package/lib/Label/Label.js +5 -24
  257. package/lib/Label/props/defaultProps.js +17 -0
  258. package/lib/Label/props/propTypes.js +25 -0
  259. package/lib/Layout/Box.js +18 -32
  260. package/lib/Layout/Container.js +18 -29
  261. package/lib/Layout/Layout.module.css +13 -1
  262. package/lib/Layout/docs/Layout__four_Column.docs.js +16 -22
  263. package/lib/Layout/props/defaultProps.js +20 -0
  264. package/lib/Layout/props/propTypes.js +54 -0
  265. package/lib/LightNightMode/Colors.json +496 -397
  266. package/lib/LightNightMode/docs/AlternativeColors.docs.js +23 -1
  267. package/lib/ListItem/ListContainer.js +13 -46
  268. package/lib/ListItem/ListItem.js +7 -52
  269. package/lib/ListItem/ListItem.module.css +18 -19
  270. package/lib/ListItem/ListItemWithAvatar.js +7 -38
  271. package/lib/ListItem/ListItemWithCheckBox.js +7 -42
  272. package/lib/ListItem/ListItemWithIcon.js +7 -49
  273. package/lib/ListItem/ListItemWithRadio.js +7 -43
  274. package/lib/ListItem/props/defaultProps.js +97 -0
  275. package/lib/ListItem/props/propTypes.js +181 -0
  276. package/lib/Modal/Modal.js +5 -9
  277. package/lib/Modal/props/defaultProps.js +10 -0
  278. package/lib/Modal/props/propTypes.js +17 -0
  279. package/lib/MultiSelect/AdvancedGroupMultiSelect.js +118 -172
  280. package/lib/MultiSelect/AdvancedMultiSelect.js +101 -172
  281. package/lib/MultiSelect/EmptyState.js +5 -29
  282. package/lib/MultiSelect/MultiSelect.js +91 -173
  283. package/lib/MultiSelect/MultiSelect.module.css +15 -2
  284. package/lib/MultiSelect/MultiSelectHeader.js +5 -12
  285. package/lib/MultiSelect/MultiSelectWithAvatar.js +83 -152
  286. package/lib/MultiSelect/SelectedOptions.js +5 -19
  287. package/lib/MultiSelect/Suggestions.js +6 -34
  288. package/lib/MultiSelect/props/defaultProps.js +156 -0
  289. package/lib/MultiSelect/props/propTypes.js +378 -0
  290. package/lib/PopOver/PopOver.js +19 -82
  291. package/lib/PopOver/props/defaultProps.js +15 -0
  292. package/lib/PopOver/props/propTypes.js +66 -0
  293. package/lib/Provider/Config.js +3 -1
  294. package/lib/Provider.js +32 -98
  295. package/lib/Radio/Radio.js +5 -46
  296. package/lib/Radio/Radio.module.css +8 -6
  297. package/lib/Radio/props/defaultProps.js +21 -0
  298. package/lib/Radio/props/propTypes.js +43 -0
  299. package/lib/Responsive/CustomResponsive.js +11 -21
  300. package/lib/Responsive/Responsive.js +17 -24
  301. package/lib/Responsive/props/defaultProps.js +23 -0
  302. package/lib/Responsive/props/propTypes.js +39 -0
  303. package/lib/ResponsiveDropBox/ResponsiveDropBox.js +124 -0
  304. package/lib/ResponsiveDropBox/ResponsiveDropBox.module.css +6 -0
  305. package/lib/ResponsiveDropBox/props/defaultProps.js +11 -0
  306. package/lib/ResponsiveDropBox/props/propTypes.js +18 -0
  307. package/lib/Ribbon/Ribbon.js +5 -25
  308. package/lib/Ribbon/props/defaultProps.js +15 -0
  309. package/lib/Ribbon/props/propTypes.js +21 -0
  310. package/lib/RippleEffect/RippleEffect.js +5 -20
  311. package/lib/RippleEffect/RippleEffect.module.css +37 -15
  312. package/lib/RippleEffect/props/defaultProps.js +16 -0
  313. package/lib/RippleEffect/props/propTypes.js +22 -0
  314. package/lib/Select/GroupSelect.js +105 -186
  315. package/lib/Select/Select.js +113 -196
  316. package/lib/Select/Select.module.css +6 -0
  317. package/lib/Select/SelectWithAvatar.js +101 -151
  318. package/lib/Select/SelectWithIcon.js +102 -134
  319. package/lib/Select/props/defaultProps.js +113 -0
  320. package/lib/Select/props/propTypes.js +280 -0
  321. package/lib/Stencils/Stencils.js +5 -17
  322. package/lib/Stencils/props/defaultProps.js +13 -0
  323. package/lib/Stencils/props/propTypes.js +18 -0
  324. package/lib/Switch/Switch.js +5 -37
  325. package/lib/Switch/Switch.module.css +3 -2
  326. package/lib/Switch/props/defaultProps.js +17 -0
  327. package/lib/Switch/props/propTypes.js +38 -0
  328. package/lib/Tab/Tab.js +5 -31
  329. package/lib/Tab/TabContent.js +5 -10
  330. package/lib/Tab/TabContentWrapper.js +5 -12
  331. package/lib/Tab/TabWrapper.js +5 -27
  332. package/lib/Tab/Tabs.js +80 -114
  333. package/lib/Tab/Tabs.module.css +2 -1
  334. package/lib/Tab/props/defaultProps.js +50 -0
  335. package/lib/Tab/props/propTypes.js +117 -0
  336. package/lib/Tag/Tag.js +5 -47
  337. package/lib/Tag/Tag.module.css +6 -2
  338. package/lib/Tag/props/defaultProps.js +20 -0
  339. package/lib/Tag/props/propTypes.js +45 -0
  340. package/lib/TextBox/TextBox.js +5 -70
  341. package/lib/TextBox/props/defaultProps.js +26 -0
  342. package/lib/TextBox/props/propTypes.js +62 -0
  343. package/lib/TextBoxIcon/TextBoxIcon.js +5 -70
  344. package/lib/TextBoxIcon/props/defaultProps.js +28 -0
  345. package/lib/TextBoxIcon/props/propTypes.js +60 -0
  346. package/lib/Textarea/Textarea.js +5 -47
  347. package/lib/Textarea/props/defaultProps.js +23 -0
  348. package/lib/Textarea/props/propTypes.js +42 -0
  349. package/lib/Tooltip/Tooltip.js +65 -20
  350. package/lib/Tooltip/Tooltip.module.css +6 -1
  351. package/lib/Tooltip/docs/Tooltip__default.docs.js +50 -11
  352. package/lib/Tooltip/props/defaultProps.js +11 -0
  353. package/lib/Tooltip/props/propTypes.js +19 -0
  354. package/lib/VelocityAnimation/VelocityAnimation/VelocityAnimation.js +5 -23
  355. package/lib/VelocityAnimation/VelocityAnimation/props/defaultProps.js +14 -0
  356. package/lib/VelocityAnimation/VelocityAnimation/props/propTypes.js +23 -0
  357. package/lib/VelocityAnimation/VelocityAnimationGroup/VelocityAnimationGroup.js +12 -38
  358. package/lib/VelocityAnimation/VelocityAnimationGroup/props/defaultProps.js +22 -0
  359. package/lib/VelocityAnimation/VelocityAnimationGroup/props/propTypes.js +30 -0
  360. package/lib/common/common.module.css +26 -3
  361. package/lib/common/docStyle.module.css +6 -2
  362. package/lib/css.js +0 -2
  363. package/lib/{MultiSelect → deprecated}/AdvancedMultiSelect.module.css +1 -1
  364. package/lib/deprecated/PortalLayer/PortalLayer.js +5 -16
  365. package/lib/deprecated/PortalLayer/props/defaultProps.js +12 -0
  366. package/lib/deprecated/PortalLayer/props/propTypes.js +22 -0
  367. package/lib/deprecated/advancedMultiSelectVariableJson.js +82 -0
  368. package/lib/index.js +80 -21
  369. package/lib/semantic/Button/Button.js +5 -38
  370. package/lib/semantic/Button/props/defaultProps.js +19 -0
  371. package/lib/semantic/Button/props/propTypes.js +37 -0
  372. package/lib/ucl/Grid/Grid.js +70 -0
  373. package/lib/ucl/Grid/componentNames.js +13 -0
  374. package/lib/ucl/Grid/css/Grid.module.css +217 -0
  375. package/lib/ucl/Grid/css/cssJSLogic.js +44 -0
  376. package/lib/{beta/FocusRing/docs/FocusRing__default.docs.js → ucl/Grid/docs/Grid__Area_Based_Detail_Layout.docs.js} +42 -50
  377. package/lib/ucl/Grid/docs/Grid__Area_Based_List_Layout.docs.js +101 -0
  378. package/lib/ucl/Grid/docs/Grid__Auto_Flow_Row.docs.js +86 -0
  379. package/lib/ucl/Grid/docs/Grid__Basic_Detail_Layout.docs.js +93 -0
  380. package/lib/ucl/Grid/docs/Grid__Box_Alignment.docs.js +91 -0
  381. package/lib/ucl/Grid/docs/Grid__Line_Based_Detail_Layout.docs.js +93 -0
  382. package/lib/ucl/Grid/docs/Grid__Line_Based_List_Layout.docs.js +97 -0
  383. package/lib/ucl/Grid/docs/Grid__default.docs.js +113 -0
  384. package/lib/ucl/Grid/docs/css/gridDocsAreaBasedDetailLayout.module.css +38 -0
  385. package/lib/ucl/Grid/docs/css/gridDocsAreaBasedListLayout.module.css +63 -0
  386. package/lib/ucl/Grid/docs/css/gridDocsAutoFlowRow.module.css +23 -0
  387. package/lib/ucl/Grid/docs/css/gridDocsBasicDetailLayout.module.css +21 -0
  388. package/lib/ucl/Grid/docs/css/gridDocsBoxAlignment.module.css +16 -0
  389. package/lib/ucl/Grid/docs/css/gridDocsDefault.module.css +15 -0
  390. package/lib/ucl/Grid/docs/css/gridDocsLineBasedDetailLayout.module.css +38 -0
  391. package/lib/ucl/Grid/docs/css/gridDocsLineBasedListLayout.module.css +47 -0
  392. package/lib/ucl/Grid/docs/css/gridDocsStyle.module.css +30 -0
  393. package/lib/ucl/Grid/index.js +31 -0
  394. package/lib/ucl/Grid/props/ariaPropTypes.js +23 -0
  395. package/lib/ucl/Grid/props/defaultProps.js +19 -0
  396. package/lib/ucl/Grid/props/propConstants.js +73 -0
  397. package/lib/ucl/Grid/props/propTypes.js +46 -0
  398. package/package.json +10 -6
  399. package/es/MultiSelect/AdvancedMultiSelect.module.css +0 -113
  400. package/es/a11y/FocusScope/FocusScope.js +0 -370
  401. package/es/a11y/FocusScope/docs/FocusScope__default.docs.js +0 -139
  402. package/es/beta/FocusRing/FocusRing.js +0 -281
  403. package/es/beta/FocusRing/FocusRing.module.css +0 -127
  404. package/es/beta/FocusRing/docs/FocusRing__default.docs.js +0 -48
  405. package/lib/a11y/FocusScope/FocusScope.js +0 -443
  406. package/lib/a11y/FocusScope/docs/FocusScope__default.docs.js +0 -191
  407. package/lib/beta/FocusRing/FocusRing.js +0 -338
  408. package/lib/beta/FocusRing/FocusRing.module.css +0 -152
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+
10
+ var _automationProps = _interopRequireDefault(require("@zohodesk/utils/es/props/automationProps"));
11
+
12
+ var _customStyleProps = _interopRequireDefault(require("@zohodesk/utils/es/props/customStyleProps"));
13
+
14
+ var _tagAttributeProps = _interopRequireDefault(require("@zohodesk/utils/es/props/tagAttributeProps"));
15
+
16
+ var _tagGeneralAttributeProps = _interopRequireDefault(require("@zohodesk/utils/es/props/tagGeneralAttributeProps"));
17
+
18
+ var _propConstants = _interopRequireDefault(require("./propConstants"));
19
+
20
+ var _ariaPropTypes = _interopRequireDefault(require("./ariaPropTypes"));
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
23
+
24
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
25
+
26
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
27
+
28
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
+
30
+ var _default = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
31
+ tagName: _propTypes["default"].string,
32
+ isCover: _propTypes["default"].bool,
33
+ alignItems: _propTypes["default"].oneOf(Object.values(_propConstants["default"].alignItems)),
34
+ alignSelf: _propTypes["default"].oneOf(Object.values(_propConstants["default"].alignSelf)),
35
+ alignContent: _propTypes["default"].oneOf(Object.values(_propConstants["default"].alignContent)),
36
+ justifyItems: _propTypes["default"].oneOf(Object.values(_propConstants["default"].justifyItems)),
37
+ justifySelf: _propTypes["default"].oneOf(Object.values(_propConstants["default"].justifySelf)),
38
+ justifyContent: _propTypes["default"].oneOf(Object.values(_propConstants["default"].justifyContent)),
39
+ flow: _propTypes["default"].oneOf(Object.values(_propConstants["default"].flow)),
40
+ overFlowScroll: _propTypes["default"].oneOf(Object.values(_propConstants["default"].scroll)),
41
+ display: _propTypes["default"].oneOf(Object.values(_propConstants["default"].display)),
42
+ children: _propTypes["default"].node,
43
+ className: _propTypes["default"].string
44
+ }, _automationProps["default"]), _ariaPropTypes["default"]), _customStyleProps["default"]), _tagAttributeProps["default"]), _tagGeneralAttributeProps["default"]);
45
+
46
+ exports["default"] = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zohodesk/components",
3
- "version": "1.0.0-temp-666",
3
+ "version": "1.0.0-temp-69",
4
4
  "main": "lib/index.js",
5
5
  "module": "es/index.js",
6
6
  "jsnext:main": "es/index.js",
@@ -16,8 +16,9 @@
16
16
  "init": "npm run clean && cd ../assets && npm run componentsassets && cd ../components && npm run build:variables",
17
17
  "build:variables": "node ./preprocess/index",
18
18
  "rtl": "react-cli rtl ./src ./lib && react-cli rtl ./src ./es",
19
+ "common_package_build": "cd ../common && npm run build && cd ../components",
19
20
  "start": "react-cli start",
20
- "docs": "npm run dubCheck && react-cli docs",
21
+ "docs": "npm run common_package_build && npm run dubCheck && react-cli docs",
21
22
  "build": " react-cli build:component:cmjs",
22
23
  "buildlocal": " react-cli build:component:cmjs && npm run rtl",
23
24
  "build:dev": "npm run build:variables && npm run build && npm run build:es --module:mode=dev -- -w",
@@ -37,22 +38,25 @@
37
38
  "devDependencies": {
38
39
  "@zohodesk/docstool": "1.0.0-alpha-2",
39
40
  "@zohodesk/variables": "1.0.0-beta.29",
40
- "@zohodesk/icons": "1.0.0-beta.105",
41
+ "@zohodesk/icons": "1.0.0-beta.109",
41
42
  "@zohodesk/virtualizer": "1.0.3",
42
43
  "velocity-react": "1.4.3",
43
44
  "react-sortable-hoc": "^0.8.3",
44
- "@zohodesk/svg": "1.0.0-beta.47"
45
+ "@zohodesk/svg": "1.0.0-beta.48"
45
46
  },
46
47
  "dependencies": {
48
+ "@zohodesk/hooks": "^1.0.3-alpha.2",
49
+ "@zohodesk/theme": "^1.0.3-alpha.1",
50
+ "@zohodesk/utils": "^1.0.3-alpha.1",
47
51
  "hoist-non-react-statics": "3.0.1",
48
52
  "react-transition-group": "2.5.0",
49
53
  "reselect": "4.0.0",
50
54
  "selectn": "1.1.2"
51
55
  },
52
56
  "peerDependencies": {
53
- "@zohodesk/icons": "1.0.0-beta.105",
57
+ "@zohodesk/icons": "1.0.0-beta.109",
54
58
  "@zohodesk/variables": "1.0.0-beta.29",
55
- "@zohodesk/svg": "1.0.0-beta.47",
59
+ "@zohodesk/svg": "1.0.0-beta.49",
56
60
  "@zohodesk/virtualizer": "1.0.3",
57
61
  "velocity-react": "1.4.3",
58
62
  "react-sortable-hoc": "^0.8.3"
@@ -1,113 +0,0 @@
1
- .wrapper {
2
- position: relative;
3
- }
4
- .disabled,
5
- .readOnly {
6
- cursor: not-allowed;
7
- }
8
- .container {
9
- max-height: var(--zd_size120);
10
- composes: oflowy from '../common/common.module.css';
11
- }
12
- .hasBorder {
13
- border-bottom-style: solid;
14
- border-bottom-width: 1px;
15
- transition: border var(--zd_transition2) linear 0s;
16
- }
17
- .borderColor_transparent {
18
- border-bottom-color: var(--zdt_advancedmultiselect_transparent_border);
19
- }
20
- .effect .borderColor_transparent:hover {
21
- border-bottom-color: var(--zdt_advancedmultiselect_transparent_hover_border);
22
- }
23
- .effect .borderColor_transparent.active {
24
- border-bottom-color: var(--zdt_advancedmultiselect_transparent_active_border);
25
- }
26
- .borderColor_default {
27
- border-bottom-color: var(--zdt_advancedmultiselect_default_border);
28
- }
29
- .effect .borderColor_default:hover {
30
- border-bottom-color: var(--zdt_advancedmultiselect_default_hover_border);
31
- }
32
- .effect .borderColor_default.active {
33
- border-bottom-color: var(--zdt_advancedmultiselect_default_active_border);
34
- }
35
- .borderColor_dark {
36
- border-bottom-color: var(--zdt_advancedmultiselect_dark_border);
37
- }
38
- .effect .borderColor_dark:hover {
39
- border-bottom-color: var(--zdt_advancedmultiselect_dark_hover_border);
40
- }
41
- .effect .borderColor_dark.active {
42
- border-bottom-color: var(--zdt_advancedmultiselect_dark_active_border);
43
- }
44
- .container.medium {
45
- padding: 0 var(--zd_size34) var(--zd_size7) 0;
46
- }
47
- .container.xmedium {
48
- padding: 0 var(--zd_size34) var(--zd_size1) 0;
49
- min-height: var(--zd_size30);
50
- }
51
-
52
- .delete {
53
- position: absolute;
54
- bottom: 0;
55
- right: var(--zd_size15);
56
- padding-bottom: var(--zd_size10);
57
- color: var(--zdt_advancedmultiselect_delete_text);
58
- cursor: pointer;
59
- background-color: var(--zdt_advancedmultiselect_delete_bg);
60
- border: 0;
61
- }
62
-
63
- .delete:hover {
64
- color: var(--zdt_advancedmultiselect_delete_hover_text);
65
- }
66
- .transparentContainer .delete {
67
- opacity: 0;
68
- visibility: hidden;
69
- }
70
- .transparentContainer:hover .delete {
71
- opacity: 1;
72
- visibility: visible;
73
- }
74
-
75
- .box {
76
- background: var(--zdt_advancedmultiselect_box_bg);
77
- }
78
-
79
- .small {
80
- max-height: var(--zd_size200);
81
- }
82
-
83
- .medium {
84
- max-height: var(--zd_size350);
85
- }
86
-
87
- .large {
88
- max-height: var(--zd_size400);
89
- }
90
-
91
- .dropContainer {
92
- display: inline-block;
93
- max-width: 100%;
94
- margin-bottom: var(--zd_size5);
95
- }
96
-
97
- .dropPopup {
98
- font-size: var(--zd_font_size13);
99
- }
100
-
101
- .dropPopup :global .toggleDropIcon {
102
- color: var(--zdt_advancedmultiselect_droppopup_text);
103
- }
104
-
105
- .more {
106
- font-size: var(--zd_font_size14);
107
- color: var(--zdt_advancedmultiselect_more_text);
108
- cursor: pointer;
109
- margin-top: var(--zd_size5);
110
- font-family: inherit;
111
- background-color: var(--zdt_advancedmultiselect_delete_bg);
112
- border: 0;
113
- }
@@ -1,370 +0,0 @@
1
- import React, { useContext, useEffect, useRef } from 'react';
2
- let scopes = new Set();
3
- let activeScope = null;
4
- const FocusContext = /*#__PURE__*/React.createContext(null); // interface FocusManager {
5
- // /** Moves focus to the next focusable or tabbable element in the focus scope. */
6
- // focusNext(opts?: FocusManagerOptions): HTMLElement,
7
- // /** Moves focus to the previous focusable or tabbable element in the focus scope. */
8
- // focusPrevious(opts?: FocusManagerOptions): HTMLElement
9
- // }
10
-
11
- export const useLayoutEffect = window !== 'undefined' ? React.useLayoutEffect : () => {};
12
- export default function FocusScope(props) {
13
- let {
14
- children,
15
- contain = true,
16
- restoreFocus = true,
17
- autoFocus = true
18
- } = props;
19
- let startRef = useRef();
20
- let endRef = useRef();
21
- let scopeRef = useRef([]);
22
- useLayoutEffect(() => {
23
- // Find all rendered nodes between the sentinels and add them to the scope.
24
- let node = startRef.current.nextSibling;
25
- let nodes = [];
26
-
27
- while (node && node !== endRef.current) {
28
- nodes.push(node);
29
- node = node.nextSibling;
30
- }
31
-
32
- scopeRef.current = nodes;
33
- scopes.add(scopeRef);
34
- return () => {
35
- scopes.delete(scopeRef);
36
- };
37
- }, [children]);
38
- useFocusContainment(scopeRef, contain);
39
- useRestoreFocus(scopeRef, restoreFocus, contain);
40
- useAutoFocus(scopeRef, autoFocus);
41
- let focusManager = createFocusManager(scopeRef);
42
- return /*#__PURE__*/React.createElement(FocusContext.Provider, {
43
- value: focusManager
44
- }, /*#__PURE__*/React.createElement("span", {
45
- hidden: true,
46
- ref: startRef
47
- }), children, /*#__PURE__*/React.createElement("span", {
48
- hidden: true,
49
- ref: endRef
50
- }));
51
- }
52
- export function useFocusManager() {
53
- return useContext(FocusContext);
54
- }
55
-
56
- function createFocusManager(scopeRef) {
57
- return {
58
- focusNext(opts) {
59
- let node = opts.from || document.activeElement;
60
- let focusable = getFocusableElementsInScope(scopeRef.current, opts);
61
- let nextNode = focusable.find(n => !!(node.compareDocumentPosition(n) & (Node.DOCUMENT_POSITION_FOLLOWING | Node.DOCUMENT_POSITION_CONTAINED_BY)));
62
-
63
- if (!nextNode && opts.wrap) {
64
- nextNode = focusable[0];
65
- }
66
-
67
- if (nextNode) {
68
- nextNode.focus();
69
- }
70
-
71
- return nextNode;
72
- },
73
-
74
- focusPrevious(opts) {
75
- let node = opts.from || document.activeElement;
76
- let focusable = getFocusableElementsInScope(scopeRef.current, opts).reverse();
77
- let previousNode = focusable.find(n => !!(node.compareDocumentPosition(n) & (Node.DOCUMENT_POSITION_PRECEDING | Node.DOCUMENT_POSITION_CONTAINED_BY)));
78
-
79
- if (!previousNode && opts.wrap) {
80
- previousNode = focusable[0];
81
- }
82
-
83
- if (previousNode) {
84
- previousNode.focus();
85
- }
86
-
87
- return previousNode;
88
- }
89
-
90
- };
91
- }
92
-
93
- const focusableElements = ['input:not([disabled]):not([type=hidden])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'a[href]', 'audio[controls]', 'video[controls]', '[contenteditable]:not([contenteditable="false"])', 'details>summary:first-of-type', 'details', 'area[href]', 'summary', 'iframe', 'object', 'embed'];
94
- const FOCUSABLE_ELEMENT_SELECTOR = focusableElements.join(',') + ',[tabindex]';
95
- focusableElements.push('[tabindex]:not([tabindex="-1"])');
96
- const TABBABLE_ELEMENT_SELECTOR = focusableElements.join(':not([tabindex="-1"]),');
97
-
98
- function useAutoFocus(scopeRef, autoFocus) {
99
- useEffect(() => {
100
- if (autoFocus) {
101
- activeScope = scopeRef;
102
-
103
- if (!isElementInScope(document.activeElement, activeScope.current)) {
104
- focusFirstInScope(scopeRef.current);
105
- }
106
- }
107
- }, [scopeRef, autoFocus]);
108
- }
109
-
110
- function getFocusableElementsInScope(scope, opts) {
111
- let res = [],
112
- response = [];
113
- let selector = opts.tabbable ? TABBABLE_ELEMENT_SELECTOR : FOCUSABLE_ELEMENT_SELECTOR;
114
-
115
- for (let node of scope) {
116
- if (node.matches(selector)) {
117
- res.push(node);
118
- }
119
-
120
- response.push(...Array.from(node.querySelectorAll(selector)));
121
- res = response.filter(element => {
122
- return !(window.getComputedStyle(element).display === 'none');
123
- });
124
- }
125
-
126
- ;
127
- return res;
128
- }
129
-
130
- function useFocusContainment(scopeRef, contain) {
131
- let focusedNode = useRef();
132
- let raf = useRef(null);
133
- useEffect(() => {
134
- let scope = scopeRef.current;
135
-
136
- if (!contain) {
137
- return;
138
- } // Handle the Tab key to contain focus within the scope
139
-
140
-
141
- let onKeyDown = e => {
142
- if (e.key !== 'Tab' || e.altKey || e.ctrlKey || e.metaKey) {
143
- return;
144
- }
145
-
146
- let elements = getFocusableElementsInScope(scope, {
147
- tabbable: true
148
- });
149
- let focusedElement = document.activeElement;
150
-
151
- if (!isElementInScope(focusedElement, scope)) {
152
- return;
153
- }
154
-
155
- let position = elements.indexOf(focusedElement);
156
- let lastPosition = elements.length - 1;
157
- let nextElement = null;
158
-
159
- if (e.shiftKey) {
160
- if (position <= 0) {
161
- nextElement = elements[lastPosition];
162
- } else {
163
- nextElement = elements[position - 1];
164
- }
165
- } else {
166
- if (position === lastPosition) {
167
- nextElement = elements[0];
168
- } else {
169
- nextElement = elements[position + 1];
170
- }
171
- }
172
-
173
- e.preventDefault();
174
-
175
- if (nextElement) {
176
- focusElement(nextElement, true);
177
- }
178
- };
179
-
180
- let onFocus = e => {
181
- // If a focus event occurs outside the active scope (e.g. user tabs from browser location bar),
182
- // restore focus to the previously focused node or the first tabbable element in the active scope.
183
- let isInAnyScope = isElementInAnyScope(e.target, scopes);
184
-
185
- if (!isInAnyScope) {
186
- if (focusedNode.current) {
187
- focusedNode.current.focus();
188
- } else if (activeScope) {
189
- focusFirstInScope(activeScope.current);
190
- }
191
- } else {
192
- activeScope = scopeRef;
193
- focusedNode.current = e.target;
194
- }
195
- };
196
-
197
- let onBlur = e => {
198
- // Firefox doesn't shift focus back to the Dialog properly without this
199
- raf.current = requestAnimationFrame(() => {
200
- // Use document.activeElement instead of e.relatedTarget so we can tell if user clicked into iframe
201
- let isInAnyScope = isElementInAnyScope(document.activeElement, scopes);
202
-
203
- if (!isInAnyScope) {
204
- activeScope = scopeRef;
205
- focusedNode.current = e.target;
206
- focusedNode.current.focus();
207
- }
208
- });
209
- };
210
-
211
- document.addEventListener('keydown', onKeyDown, false);
212
- document.addEventListener('focusin', onFocus, false);
213
- scope.forEach(element => element.addEventListener('focusin', onFocus, false));
214
- scope.forEach(element => element.addEventListener('focusout', onBlur, false));
215
- return () => {
216
- document.removeEventListener('keydown', onKeyDown, false);
217
- document.removeEventListener('focusin', onFocus, false);
218
- scope.forEach(element => element.removeEventListener('focusin', onFocus, false));
219
- scope.forEach(element => element.removeEventListener('focusout', onBlur, false));
220
- };
221
- }, [scopeRef, contain]); // eslint-disable-next-line arrow-body-style
222
-
223
- useEffect(() => {
224
- return () => cancelAnimationFrame(raf.current);
225
- }, [raf]);
226
- }
227
-
228
- function isElementInAnyScope(element) {
229
- let scopes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
230
-
231
- for (let scope of scopes.values()) {
232
- if (isElementInScope(element, scope.current)) {
233
- return true;
234
- }
235
- }
236
-
237
- return false;
238
- }
239
-
240
- function isElementInScope(element) {
241
- let scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
242
- return scope.some(node => node.contains(element));
243
- }
244
-
245
- function focusElement() {
246
- let element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
247
-
248
- if (element != null) {
249
- element.focus();
250
- }
251
- }
252
-
253
- function findElement(elements) {
254
- let ele = [];
255
-
256
- for (let element = 0; element < elements.length; element++) {
257
- let elem = elements[element];
258
-
259
- if (elem.getAttribute('data-auto-focus')) {
260
- ele.push(elem);
261
- }
262
- }
263
-
264
- return ele.length ? ele[0] : null;
265
- }
266
-
267
- function focusFirstInScope() {
268
- let scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
269
- let elements = getFocusableElementsInScope(scope, {
270
- tabbable: true
271
- });
272
- let element = findElement(elements);
273
- focusElement(element ? element : elements[0]);
274
- }
275
-
276
- function useRestoreFocus(scopeRef, restoreFocus, contain) {
277
- // useLayoutEffect instead of useEffect so the active element is saved synchronously instead of asynchronously.
278
- useLayoutEffect(() => {
279
- let scope = scopeRef.current;
280
- let nodeToRestore = document.activeElement; // Handle the Tab key so that tabbing out of the scope goes to the next element
281
- // after the node that had focus when the scope mounted. This is important when
282
- // using portals for overlays, so that focus goes to the expected element when
283
- // tabbing out of the overlay.
284
-
285
- let onKeyDown = e => {
286
- if (e.key !== 'Tab' || e.altKey || e.ctrlKey || e.metaKey) {
287
- return;
288
- }
289
-
290
- let focusedElement = document.activeElement;
291
-
292
- if (!isElementInScope(focusedElement, scope)) {
293
- return;
294
- } // Create a DOM tree walker that matches all tabbable elements
295
-
296
-
297
- let walker = getFocusableTreeWalker(document.body, {
298
- tabbable: true
299
- }); // Find the next tabbable element after the currently focused element
300
-
301
- walker.currentNode = focusedElement;
302
- let nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode(); // If there is no next element, or it is outside the current scope, move focus to the
303
- // next element after the node to restore to instead.
304
-
305
- if ((!nextElement || !isElementInScope(nextElement, scope)) && nodeToRestore) {
306
- walker.currentNode = nodeToRestore; // Skip over elements within the scope, in case the scope immediately follows the node to restore.
307
-
308
- do {
309
- nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();
310
- } while (isElementInScope(nextElement, scope));
311
-
312
- e.preventDefault();
313
- e.stopPropagation();
314
-
315
- if (nextElement) {
316
- nextElement.focus();
317
- } else {
318
- // If there is no next element, blur the focused element to move focus to the body.
319
- focusedElement.blur();
320
- }
321
- }
322
- };
323
-
324
- if (!contain) {
325
- document.addEventListener('keydown', onKeyDown, true);
326
- }
327
-
328
- return () => {
329
- if (!contain) {
330
- document.removeEventListener('keydown', onKeyDown, true);
331
- }
332
-
333
- if (restoreFocus && nodeToRestore && isElementInScope(document.activeElement, scope)) {
334
- requestAnimationFrame(() => {
335
- if (document.body.contains(nodeToRestore)) {
336
- focusElement(nodeToRestore);
337
- }
338
- });
339
- }
340
- };
341
- }, [scopeRef, restoreFocus, contain]);
342
- }
343
-
344
- export function getFocusableTreeWalker(root, opts) {
345
- let selector = opts && opts.tabbable ? TABBABLE_ELEMENT_SELECTOR : FOCUSABLE_ELEMENT_SELECTOR;
346
- let walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, {
347
- acceptNode(node) {
348
- // Skip nodes inside the starting node.
349
- if (opts && opts.from && opts.from.contains(node)) {
350
- return NodeFilter.FILTER_REJECT;
351
- }
352
-
353
- if (node.matches(selector)) {
354
- return NodeFilter.FILTER_ACCEPT;
355
- }
356
-
357
- return NodeFilter.FILTER_SKIP;
358
- }
359
-
360
- }, false);
361
-
362
- if (opts && opts.from) {
363
- walker.currentNode = opts.from;
364
- }
365
-
366
- return walker;
367
- }
368
- FocusScope.docs = {
369
- componentGroup: 'Atom'
370
- };