@workday/canvas-kit-react 5.3.15 → 5.4.0-next.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 (714) hide show
  1. package/action-bar/lib/ActionBar.tsx +43 -30
  2. package/avatar/lib/Avatar.tsx +4 -0
  3. package/button/lib/PrimaryButton.tsx +110 -32
  4. package/button/lib/SecondaryButton.tsx +31 -16
  5. package/button/lib/TertiaryButton.tsx +45 -35
  6. package/button/lib/parts/ButtonContainer.tsx +18 -5
  7. package/button/lib/parts/ButtonLabelIcon.tsx +34 -14
  8. package/button/lib/types.ts +11 -0
  9. package/checkbox/lib/Checkbox.tsx +1 -1
  10. package/common/README.md +78 -0
  11. package/common/index.ts +1 -0
  12. package/common/lib/EllipsisText.tsx +11 -0
  13. package/common/lib/parts/_brand-assets.ts +6 -6
  14. package/common/lib/styles/accessibleHide.ts +2 -2
  15. package/common/lib/theming/README.md +189 -25
  16. package/common/lib/theming/breakpoints.ts +296 -16
  17. package/common/lib/theming/types.ts +191 -1
  18. package/common/lib/utils/components.ts +50 -23
  19. package/common/lib/utils/elements.ts +5 -1
  20. package/common/lib/utils/index.ts +2 -0
  21. package/common/lib/utils/mergeProps.ts +4 -0
  22. package/common/lib/utils/useConstant.ts +18 -0
  23. package/common/lib/utils/useResizeObserver.ts +29 -0
  24. package/common/lib/utils/useUniqueId.ts +46 -4
  25. package/cookie-banner/README.md +15 -10
  26. package/cookie-banner/index.ts +3 -3
  27. package/cookie-banner/lib/CookieBanner.tsx +29 -4
  28. package/dist/commonjs/action-bar/lib/ActionBar.d.ts.map +1 -1
  29. package/dist/commonjs/action-bar/lib/ActionBar.js +36 -28
  30. package/dist/commonjs/avatar/lib/Avatar.d.ts.map +1 -1
  31. package/dist/commonjs/avatar/lib/Avatar.js +3 -0
  32. package/dist/commonjs/button/lib/PrimaryButton.d.ts +80 -6
  33. package/dist/commonjs/button/lib/PrimaryButton.d.ts.map +1 -1
  34. package/dist/commonjs/button/lib/PrimaryButton.js +80 -26
  35. package/dist/commonjs/button/lib/SecondaryButton.d.ts +8 -5
  36. package/dist/commonjs/button/lib/SecondaryButton.d.ts.map +1 -1
  37. package/dist/commonjs/button/lib/SecondaryButton.js +22 -12
  38. package/dist/commonjs/button/lib/TertiaryButton.d.ts +8 -4
  39. package/dist/commonjs/button/lib/TertiaryButton.d.ts.map +1 -1
  40. package/dist/commonjs/button/lib/TertiaryButton.js +24 -19
  41. package/dist/commonjs/button/lib/parts/ButtonContainer.d.ts +5 -3
  42. package/dist/commonjs/button/lib/parts/ButtonContainer.d.ts.map +1 -1
  43. package/dist/commonjs/button/lib/parts/ButtonContainer.js +7 -9
  44. package/dist/commonjs/button/lib/parts/ButtonLabel.d.ts +1 -1
  45. package/dist/commonjs/button/lib/parts/ButtonLabel.d.ts.map +1 -1
  46. package/dist/commonjs/button/lib/parts/ButtonLabelIcon.d.ts +7 -4
  47. package/dist/commonjs/button/lib/parts/ButtonLabelIcon.d.ts.map +1 -1
  48. package/dist/commonjs/button/lib/parts/ButtonLabelIcon.js +28 -13
  49. package/dist/commonjs/button/lib/types.d.ts +9 -0
  50. package/dist/commonjs/button/lib/types.d.ts.map +1 -1
  51. package/dist/commonjs/checkbox/lib/Checkbox.d.ts +1 -1
  52. package/dist/commonjs/common/index.d.ts +1 -0
  53. package/dist/commonjs/common/index.d.ts.map +1 -1
  54. package/dist/commonjs/common/index.js +1 -0
  55. package/dist/commonjs/common/lib/EllipsisText.d.ts +5 -0
  56. package/dist/commonjs/common/lib/EllipsisText.d.ts.map +1 -0
  57. package/dist/commonjs/common/lib/EllipsisText.js +13 -0
  58. package/dist/commonjs/common/lib/parts/_brand-assets.d.ts.map +1 -1
  59. package/dist/commonjs/common/lib/parts/_brand-assets.js +6 -6
  60. package/dist/commonjs/common/lib/styles/accessibleHide.d.ts +2 -2
  61. package/dist/commonjs/common/lib/styles/accessibleHide.d.ts.map +1 -1
  62. package/dist/commonjs/common/lib/theming/breakpoints.d.ts +287 -6
  63. package/dist/commonjs/common/lib/theming/breakpoints.d.ts.map +1 -1
  64. package/dist/commonjs/common/lib/theming/breakpoints.js +192 -10
  65. package/dist/commonjs/common/lib/theming/types.d.ts +191 -1
  66. package/dist/commonjs/common/lib/theming/types.d.ts.map +1 -1
  67. package/dist/commonjs/common/lib/utils/components.d.ts +19 -9
  68. package/dist/commonjs/common/lib/utils/components.d.ts.map +1 -1
  69. package/dist/commonjs/common/lib/utils/components.js +12 -2
  70. package/dist/commonjs/common/lib/utils/elements.d.ts +2 -2
  71. package/dist/commonjs/common/lib/utils/elements.d.ts.map +1 -1
  72. package/dist/commonjs/common/lib/utils/elements.js +4 -1
  73. package/dist/commonjs/common/lib/utils/index.d.ts +2 -0
  74. package/dist/commonjs/common/lib/utils/index.d.ts.map +1 -1
  75. package/dist/commonjs/common/lib/utils/index.js +2 -0
  76. package/dist/commonjs/common/lib/utils/mergeProps.d.ts.map +1 -1
  77. package/dist/commonjs/common/lib/utils/mergeProps.js +5 -0
  78. package/dist/commonjs/common/lib/utils/useConstant.d.ts +9 -0
  79. package/dist/commonjs/common/lib/utils/useConstant.d.ts.map +1 -0
  80. package/dist/commonjs/common/lib/utils/useConstant.js +18 -0
  81. package/dist/commonjs/common/lib/utils/useResizeObserver.d.ts +3 -0
  82. package/dist/commonjs/common/lib/utils/useResizeObserver.d.ts.map +1 -0
  83. package/dist/commonjs/common/lib/utils/useResizeObserver.js +42 -0
  84. package/dist/commonjs/common/lib/utils/useUniqueId.d.ts +28 -0
  85. package/dist/commonjs/common/lib/utils/useUniqueId.d.ts.map +1 -1
  86. package/dist/commonjs/common/lib/utils/useUniqueId.js +42 -14
  87. package/dist/commonjs/cookie-banner/index.d.ts +3 -3
  88. package/dist/commonjs/cookie-banner/index.d.ts.map +1 -1
  89. package/dist/commonjs/cookie-banner/index.js +1 -1
  90. package/dist/commonjs/cookie-banner/lib/CookieBanner.d.ts +19 -2
  91. package/dist/commonjs/cookie-banner/lib/CookieBanner.d.ts.map +1 -1
  92. package/dist/commonjs/cookie-banner/lib/CookieBanner.js +19 -8
  93. package/dist/commonjs/dialog/lib/hooks/useDialogCard.d.ts +4 -16
  94. package/dist/commonjs/dialog/lib/hooks/useDialogCard.d.ts.map +1 -1
  95. package/dist/commonjs/dialog/lib/hooks/useDialogPopper.d.ts +5 -2
  96. package/dist/commonjs/dialog/lib/hooks/useDialogPopper.d.ts.map +1 -1
  97. package/dist/commonjs/form-field/lib/FormField.d.ts.map +1 -1
  98. package/dist/commonjs/form-field/lib/FormField.js +1 -2
  99. package/dist/commonjs/form-field/lib/Label.d.ts.map +1 -1
  100. package/dist/commonjs/form-field/lib/Label.js +3 -7
  101. package/dist/commonjs/modal/lib/ModalOverlay.d.ts +4 -2
  102. package/dist/commonjs/modal/lib/ModalOverlay.d.ts.map +1 -1
  103. package/dist/commonjs/modal/lib/hooks/useModalCard.d.ts +4 -16
  104. package/dist/commonjs/modal/lib/hooks/useModalCard.d.ts.map +1 -1
  105. package/dist/commonjs/modal/lib/hooks/useModalHeading.d.ts +5 -17
  106. package/dist/commonjs/modal/lib/hooks/useModalHeading.d.ts.map +1 -1
  107. package/dist/commonjs/page-header/index.d.ts +3 -3
  108. package/dist/commonjs/page-header/index.d.ts.map +1 -1
  109. package/dist/commonjs/page-header/index.js +1 -1
  110. package/dist/commonjs/page-header/lib/PageHeader.d.ts +19 -2
  111. package/dist/commonjs/page-header/lib/PageHeader.d.ts.map +1 -1
  112. package/dist/commonjs/page-header/lib/PageHeader.js +18 -7
  113. package/dist/commonjs/pagination/lib/Pagination/PageList.d.ts +1 -1
  114. package/dist/commonjs/pagination/lib/Pagination/PageList.d.ts.map +1 -1
  115. package/dist/commonjs/pagination/lib/Pagination/Pagination.d.ts +5 -5
  116. package/dist/commonjs/pagination/lib/Pagination/common/List.d.ts +1 -1
  117. package/dist/commonjs/pagination/lib/Pagination/common/List.d.ts.map +1 -1
  118. package/dist/commonjs/pagination/lib/Pagination/common/utils/getValidChildren.d.ts +1 -1
  119. package/dist/commonjs/pagination/lib/Pagination/common/utils/getValidChildren.d.ts.map +1 -1
  120. package/dist/commonjs/pagination/lib/Pagination/common/utils/space.d.ts +28 -28
  121. package/dist/commonjs/popup/lib/PopupCard.js +2 -3
  122. package/dist/commonjs/popup/lib/hooks/focus-trap-js.d.ts.map +1 -1
  123. package/dist/commonjs/popup/lib/hooks/focus-trap-js.js +1 -0
  124. package/dist/commonjs/popup/lib/hooks/usePopupCard.d.ts +5 -2
  125. package/dist/commonjs/popup/lib/hooks/usePopupCard.d.ts.map +1 -1
  126. package/dist/commonjs/popup/lib/hooks/usePopupCloseButton.d.ts +4 -2
  127. package/dist/commonjs/popup/lib/hooks/usePopupCloseButton.d.ts.map +1 -1
  128. package/dist/commonjs/popup/lib/hooks/usePopupHeading.d.ts +5 -2
  129. package/dist/commonjs/popup/lib/hooks/usePopupHeading.d.ts.map +1 -1
  130. package/dist/commonjs/popup/lib/hooks/usePopupPopper.d.ts +4 -2
  131. package/dist/commonjs/popup/lib/hooks/usePopupPopper.d.ts.map +1 -1
  132. package/dist/commonjs/popup/lib/hooks/usePopupTarget.d.ts +4 -2
  133. package/dist/commonjs/popup/lib/hooks/usePopupTarget.d.ts.map +1 -1
  134. package/dist/commonjs/popup/lib/hooks/useReturnFocus.d.ts +1 -1
  135. package/dist/commonjs/popup/lib/hooks/useReturnFocus.js +1 -1
  136. package/dist/commonjs/radio/lib/Radio.d.ts +1 -1
  137. package/dist/commonjs/switch/lib/Switch.d.ts +1 -1
  138. package/dist/commonjs/table/lib/TableRow.d.ts +5 -4
  139. package/dist/commonjs/table/lib/TableRow.d.ts.map +1 -1
  140. package/dist/commonjs/table/lib/TableRow.js +12 -26
  141. package/dist/commonjs/tabs/index.d.ts +5 -0
  142. package/dist/commonjs/tabs/index.d.ts.map +1 -1
  143. package/dist/commonjs/tabs/index.js +11 -0
  144. package/dist/commonjs/tabs/lib/Tabs.d.ts +35 -7
  145. package/dist/commonjs/tabs/lib/Tabs.d.ts.map +1 -1
  146. package/dist/commonjs/tabs/lib/Tabs.js +28 -7
  147. package/dist/commonjs/tabs/lib/TabsItem.d.ts +107 -0
  148. package/dist/commonjs/tabs/lib/TabsItem.d.ts.map +1 -0
  149. package/dist/commonjs/tabs/lib/TabsItem.js +140 -0
  150. package/dist/commonjs/tabs/lib/TabsList.d.ts +43 -0
  151. package/dist/commonjs/tabs/lib/TabsList.d.ts.map +1 -0
  152. package/dist/commonjs/tabs/lib/TabsList.js +53 -0
  153. package/dist/commonjs/tabs/lib/TabsMenuPopper.d.ts +21 -0
  154. package/dist/commonjs/tabs/lib/TabsMenuPopper.d.ts.map +1 -0
  155. package/dist/commonjs/tabs/lib/{TabList.js → TabsMenuPopper.js} +7 -19
  156. package/dist/commonjs/tabs/lib/TabsOverflowButton.d.ts +31 -0
  157. package/dist/commonjs/tabs/lib/TabsOverflowButton.d.ts.map +1 -0
  158. package/dist/commonjs/tabs/lib/TabsOverflowButton.js +57 -0
  159. package/{ts3.5/dist/commonjs/tabs/lib/TabPanel.d.ts → dist/commonjs/tabs/lib/TabsPanel.d.ts} +39 -29
  160. package/dist/commonjs/tabs/lib/TabsPanel.d.ts.map +1 -0
  161. package/dist/commonjs/tabs/lib/TabsPanel.js +64 -0
  162. package/dist/{es6/tabs/lib/TabList.d.ts → commonjs/tabs/lib/TabsPanels.d.ts} +5 -5
  163. package/dist/commonjs/tabs/lib/TabsPanels.d.ts.map +1 -0
  164. package/dist/commonjs/tabs/lib/TabsPanels.js +21 -0
  165. package/dist/commonjs/tabs/lib/cursor/index.d.ts +1 -1
  166. package/dist/commonjs/tabs/lib/cursor/index.d.ts.map +1 -1
  167. package/dist/commonjs/tabs/lib/cursor/index.js +1 -1
  168. package/dist/commonjs/tabs/lib/cursor/useCursorModel.d.ts +23 -13
  169. package/dist/commonjs/tabs/lib/cursor/useCursorModel.d.ts.map +1 -1
  170. package/dist/commonjs/tabs/lib/cursor/useCursorModel.js +50 -49
  171. package/dist/commonjs/tabs/lib/cursor/useRovingFocus.d.ts +37 -0
  172. package/dist/commonjs/tabs/lib/cursor/useRovingFocus.d.ts.map +1 -0
  173. package/dist/commonjs/tabs/lib/cursor/{hooks.js → useRovingFocus.js} +26 -50
  174. package/dist/commonjs/tabs/lib/list/index.d.ts +2 -1
  175. package/dist/commonjs/tabs/lib/list/index.d.ts.map +1 -1
  176. package/dist/commonjs/tabs/lib/list/index.js +2 -1
  177. package/dist/commonjs/tabs/lib/list/renderItem.d.ts +4 -0
  178. package/dist/commonjs/tabs/lib/list/renderItem.d.ts.map +1 -0
  179. package/dist/commonjs/tabs/lib/list/renderItem.js +18 -0
  180. package/dist/commonjs/tabs/lib/list/useListModel.d.ts +25 -13
  181. package/dist/commonjs/tabs/lib/list/useListModel.d.ts.map +1 -1
  182. package/dist/commonjs/tabs/lib/list/useListModel.js +20 -7
  183. package/dist/commonjs/tabs/lib/list/useListRegisterItem.d.ts +14 -0
  184. package/dist/commonjs/tabs/lib/list/useListRegisterItem.d.ts.map +1 -0
  185. package/dist/commonjs/tabs/lib/list/useListRegisterItem.js +46 -0
  186. package/dist/commonjs/tabs/lib/menu/Menu.d.ts +80 -0
  187. package/dist/commonjs/tabs/lib/menu/Menu.d.ts.map +1 -0
  188. package/dist/commonjs/tabs/lib/menu/Menu.js +94 -0
  189. package/dist/commonjs/tabs/lib/menu/MenuCard.d.ts +17 -0
  190. package/dist/commonjs/tabs/lib/menu/MenuCard.d.ts.map +1 -0
  191. package/dist/commonjs/tabs/lib/menu/MenuCard.js +82 -0
  192. package/dist/commonjs/tabs/lib/menu/MenuItem.d.ts +62 -0
  193. package/dist/commonjs/tabs/lib/menu/MenuItem.d.ts.map +1 -0
  194. package/dist/commonjs/tabs/lib/menu/MenuItem.js +145 -0
  195. package/dist/commonjs/tabs/lib/menu/MenuList.d.ts +23 -0
  196. package/dist/commonjs/tabs/lib/menu/MenuList.d.ts.map +1 -0
  197. package/dist/commonjs/tabs/lib/menu/MenuList.js +52 -0
  198. package/dist/commonjs/tabs/lib/menu/MenuPopper.d.ts +21 -0
  199. package/dist/commonjs/tabs/lib/menu/MenuPopper.d.ts.map +1 -0
  200. package/dist/commonjs/tabs/lib/menu/MenuPopper.js +45 -0
  201. package/dist/commonjs/tabs/lib/menu/MenuTarget.d.ts +21 -0
  202. package/dist/commonjs/tabs/lib/menu/MenuTarget.d.ts.map +1 -0
  203. package/dist/commonjs/tabs/lib/menu/MenuTarget.js +60 -0
  204. package/dist/commonjs/tabs/lib/menu/index.d.ts +8 -0
  205. package/dist/commonjs/tabs/lib/menu/index.d.ts.map +1 -0
  206. package/dist/commonjs/tabs/lib/menu/index.js +18 -0
  207. package/dist/commonjs/tabs/lib/menu/useMenuModel.d.ts +35 -0
  208. package/dist/commonjs/tabs/lib/menu/useMenuModel.d.ts.map +1 -0
  209. package/dist/commonjs/tabs/lib/menu/useMenuModel.js +33 -0
  210. package/dist/commonjs/tabs/lib/overflow/index.d.ts +5 -0
  211. package/dist/commonjs/tabs/lib/overflow/index.d.ts.map +1 -0
  212. package/dist/commonjs/tabs/lib/overflow/index.js +9 -0
  213. package/dist/commonjs/tabs/lib/overflow/useOverflowMeasureContainer.d.ts +8 -0
  214. package/dist/commonjs/tabs/lib/overflow/useOverflowMeasureContainer.d.ts.map +1 -0
  215. package/dist/commonjs/tabs/lib/overflow/useOverflowMeasureContainer.js +22 -0
  216. package/dist/commonjs/tabs/lib/overflow/useOverflowMeasureItem.d.ts +10 -0
  217. package/dist/commonjs/tabs/lib/overflow/useOverflowMeasureItem.d.ts.map +1 -0
  218. package/dist/commonjs/tabs/lib/overflow/useOverflowMeasureItem.js +32 -0
  219. package/dist/commonjs/tabs/lib/overflow/useOverflowModel.d.ts +69 -0
  220. package/dist/commonjs/tabs/lib/overflow/useOverflowModel.d.ts.map +1 -0
  221. package/dist/commonjs/tabs/lib/overflow/useOverflowModel.js +126 -0
  222. package/dist/commonjs/tabs/lib/overflow/useOverflowTarget.d.ts +11 -0
  223. package/dist/commonjs/tabs/lib/overflow/useOverflowTarget.d.ts.map +1 -0
  224. package/dist/commonjs/tabs/lib/overflow/useOverflowTarget.js +35 -0
  225. package/dist/commonjs/tabs/lib/selection/index.d.ts +4 -0
  226. package/dist/commonjs/tabs/lib/selection/index.d.ts.map +1 -0
  227. package/dist/commonjs/tabs/lib/selection/index.js +8 -0
  228. package/dist/commonjs/tabs/lib/selection/useResetCursorOnBlur.d.ts +13 -0
  229. package/dist/commonjs/tabs/lib/selection/useResetCursorOnBlur.d.ts.map +1 -0
  230. package/dist/commonjs/tabs/lib/{hooks.js → selection/useResetCursorOnBlur.js} +8 -9
  231. package/dist/commonjs/tabs/lib/selection/useSelectionItem.d.ts +8 -0
  232. package/dist/commonjs/tabs/lib/selection/useSelectionItem.d.ts.map +1 -0
  233. package/dist/commonjs/tabs/lib/selection/useSelectionItem.js +16 -0
  234. package/dist/commonjs/tabs/lib/selection/useSelectionModel.d.ts +62 -0
  235. package/dist/commonjs/tabs/lib/selection/useSelectionModel.d.ts.map +1 -0
  236. package/dist/commonjs/tabs/lib/selection/useSelectionModel.js +80 -0
  237. package/dist/commonjs/tabs/lib/useTabsModel.d.ts +39 -38
  238. package/dist/commonjs/tabs/lib/useTabsModel.d.ts.map +1 -1
  239. package/dist/commonjs/tabs/lib/useTabsModel.js +50 -37
  240. package/dist/commonjs/tokens/index.d.ts +3 -20
  241. package/dist/commonjs/tokens/index.d.ts.map +1 -1
  242. package/dist/commonjs/tokens/index.js +3 -6
  243. package/dist/commonjs/tokens/lib/depth.d.ts +109 -3
  244. package/dist/commonjs/tokens/lib/depth.d.ts.map +1 -1
  245. package/dist/commonjs/tokens/lib/depth.js +40 -5
  246. package/dist/commonjs/tooltip/lib/useTooltip.d.ts +1 -1
  247. package/dist/commonjs/tooltip/lib/useTooltip.js +2 -5
  248. package/dist/es6/action-bar/lib/ActionBar.d.ts.map +1 -1
  249. package/dist/es6/action-bar/lib/ActionBar.js +34 -23
  250. package/dist/es6/avatar/lib/Avatar.d.ts.map +1 -1
  251. package/dist/es6/avatar/lib/Avatar.js +3 -0
  252. package/dist/es6/button/lib/PrimaryButton.d.ts +80 -6
  253. package/dist/es6/button/lib/PrimaryButton.d.ts.map +1 -1
  254. package/dist/es6/button/lib/PrimaryButton.js +81 -27
  255. package/dist/es6/button/lib/SecondaryButton.d.ts +8 -5
  256. package/dist/es6/button/lib/SecondaryButton.d.ts.map +1 -1
  257. package/dist/es6/button/lib/SecondaryButton.js +22 -12
  258. package/dist/es6/button/lib/TertiaryButton.d.ts +8 -4
  259. package/dist/es6/button/lib/TertiaryButton.d.ts.map +1 -1
  260. package/dist/es6/button/lib/TertiaryButton.js +25 -20
  261. package/dist/es6/button/lib/parts/ButtonContainer.d.ts +5 -3
  262. package/dist/es6/button/lib/parts/ButtonContainer.d.ts.map +1 -1
  263. package/dist/es6/button/lib/parts/ButtonContainer.js +7 -9
  264. package/dist/es6/button/lib/parts/ButtonLabel.d.ts +1 -1
  265. package/dist/es6/button/lib/parts/ButtonLabel.d.ts.map +1 -1
  266. package/dist/es6/button/lib/parts/ButtonLabelIcon.d.ts +7 -4
  267. package/dist/es6/button/lib/parts/ButtonLabelIcon.d.ts.map +1 -1
  268. package/dist/es6/button/lib/parts/ButtonLabelIcon.js +28 -13
  269. package/dist/es6/button/lib/types.d.ts +9 -0
  270. package/dist/es6/button/lib/types.d.ts.map +1 -1
  271. package/dist/es6/checkbox/lib/Checkbox.d.ts +1 -1
  272. package/dist/es6/common/index.d.ts +1 -0
  273. package/dist/es6/common/index.d.ts.map +1 -1
  274. package/dist/es6/common/index.js +1 -0
  275. package/dist/es6/common/lib/EllipsisText.d.ts +5 -0
  276. package/dist/es6/common/lib/EllipsisText.d.ts.map +1 -0
  277. package/dist/es6/common/lib/EllipsisText.js +8 -0
  278. package/dist/es6/common/lib/parts/_brand-assets.d.ts.map +1 -1
  279. package/dist/es6/common/lib/parts/_brand-assets.js +6 -6
  280. package/dist/es6/common/lib/styles/accessibleHide.d.ts +2 -2
  281. package/dist/es6/common/lib/styles/accessibleHide.d.ts.map +1 -1
  282. package/dist/es6/common/lib/theming/breakpoints.d.ts +287 -6
  283. package/dist/es6/common/lib/theming/breakpoints.d.ts.map +1 -1
  284. package/dist/es6/common/lib/theming/breakpoints.js +192 -10
  285. package/dist/es6/common/lib/theming/types.d.ts +191 -1
  286. package/dist/es6/common/lib/theming/types.d.ts.map +1 -1
  287. package/dist/es6/common/lib/utils/components.d.ts +19 -9
  288. package/dist/es6/common/lib/utils/components.d.ts.map +1 -1
  289. package/dist/es6/common/lib/utils/components.js +12 -2
  290. package/dist/es6/common/lib/utils/elements.d.ts +2 -2
  291. package/dist/es6/common/lib/utils/elements.d.ts.map +1 -1
  292. package/dist/es6/common/lib/utils/elements.js +4 -1
  293. package/dist/es6/common/lib/utils/index.d.ts +2 -0
  294. package/dist/es6/common/lib/utils/index.d.ts.map +1 -1
  295. package/dist/es6/common/lib/utils/index.js +2 -0
  296. package/dist/es6/common/lib/utils/mergeProps.d.ts.map +1 -1
  297. package/dist/es6/common/lib/utils/mergeProps.js +5 -0
  298. package/dist/es6/common/lib/utils/useConstant.d.ts +9 -0
  299. package/dist/es6/common/lib/utils/useConstant.d.ts.map +1 -0
  300. package/dist/es6/common/lib/utils/useConstant.js +15 -0
  301. package/dist/es6/common/lib/utils/useResizeObserver.d.ts +3 -0
  302. package/dist/es6/common/lib/utils/useResizeObserver.d.ts.map +1 -0
  303. package/dist/es6/common/lib/utils/useResizeObserver.js +37 -0
  304. package/dist/es6/common/lib/utils/useUniqueId.d.ts +28 -0
  305. package/dist/es6/common/lib/utils/useUniqueId.d.ts.map +1 -1
  306. package/dist/es6/common/lib/utils/useUniqueId.js +42 -4
  307. package/dist/es6/cookie-banner/index.d.ts +3 -3
  308. package/dist/es6/cookie-banner/index.d.ts.map +1 -1
  309. package/dist/es6/cookie-banner/index.js +3 -3
  310. package/dist/es6/cookie-banner/lib/CookieBanner.d.ts +19 -2
  311. package/dist/es6/cookie-banner/lib/CookieBanner.d.ts.map +1 -1
  312. package/dist/es6/cookie-banner/lib/CookieBanner.js +19 -8
  313. package/dist/es6/dialog/lib/hooks/useDialogCard.d.ts +4 -16
  314. package/dist/es6/dialog/lib/hooks/useDialogCard.d.ts.map +1 -1
  315. package/dist/es6/dialog/lib/hooks/useDialogPopper.d.ts +5 -2
  316. package/dist/es6/dialog/lib/hooks/useDialogPopper.d.ts.map +1 -1
  317. package/dist/es6/form-field/lib/FormField.d.ts.map +1 -1
  318. package/dist/es6/form-field/lib/FormField.js +2 -3
  319. package/dist/es6/form-field/lib/Label.d.ts.map +1 -1
  320. package/dist/es6/form-field/lib/Label.js +1 -2
  321. package/dist/es6/modal/lib/ModalOverlay.d.ts +4 -2
  322. package/dist/es6/modal/lib/ModalOverlay.d.ts.map +1 -1
  323. package/dist/es6/modal/lib/hooks/useModalCard.d.ts +4 -16
  324. package/dist/es6/modal/lib/hooks/useModalCard.d.ts.map +1 -1
  325. package/dist/es6/modal/lib/hooks/useModalHeading.d.ts +5 -17
  326. package/dist/es6/modal/lib/hooks/useModalHeading.d.ts.map +1 -1
  327. package/dist/es6/page-header/index.d.ts +3 -3
  328. package/dist/es6/page-header/index.d.ts.map +1 -1
  329. package/dist/es6/page-header/index.js +3 -3
  330. package/dist/es6/page-header/lib/PageHeader.d.ts +19 -2
  331. package/dist/es6/page-header/lib/PageHeader.d.ts.map +1 -1
  332. package/dist/es6/page-header/lib/PageHeader.js +18 -7
  333. package/dist/es6/pagination/lib/Pagination/PageList.d.ts +1 -1
  334. package/dist/es6/pagination/lib/Pagination/PageList.d.ts.map +1 -1
  335. package/dist/es6/pagination/lib/Pagination/Pagination.d.ts +5 -5
  336. package/dist/es6/pagination/lib/Pagination/common/List.d.ts +1 -1
  337. package/dist/es6/pagination/lib/Pagination/common/List.d.ts.map +1 -1
  338. package/dist/es6/pagination/lib/Pagination/common/utils/getValidChildren.d.ts +1 -1
  339. package/dist/es6/pagination/lib/Pagination/common/utils/getValidChildren.d.ts.map +1 -1
  340. package/dist/es6/pagination/lib/Pagination/common/utils/space.d.ts +28 -28
  341. package/dist/es6/popup/lib/PopupCard.js +3 -4
  342. package/dist/es6/popup/lib/hooks/focus-trap-js.d.ts.map +1 -1
  343. package/dist/es6/popup/lib/hooks/focus-trap-js.js +1 -0
  344. package/dist/es6/popup/lib/hooks/usePopupCard.d.ts +5 -2
  345. package/dist/es6/popup/lib/hooks/usePopupCard.d.ts.map +1 -1
  346. package/dist/es6/popup/lib/hooks/usePopupCloseButton.d.ts +4 -2
  347. package/dist/es6/popup/lib/hooks/usePopupCloseButton.d.ts.map +1 -1
  348. package/dist/es6/popup/lib/hooks/usePopupHeading.d.ts +5 -2
  349. package/dist/es6/popup/lib/hooks/usePopupHeading.d.ts.map +1 -1
  350. package/dist/es6/popup/lib/hooks/usePopupPopper.d.ts +4 -2
  351. package/dist/es6/popup/lib/hooks/usePopupPopper.d.ts.map +1 -1
  352. package/dist/es6/popup/lib/hooks/usePopupTarget.d.ts +4 -2
  353. package/dist/es6/popup/lib/hooks/usePopupTarget.d.ts.map +1 -1
  354. package/dist/es6/popup/lib/hooks/useReturnFocus.d.ts +1 -1
  355. package/dist/es6/popup/lib/hooks/useReturnFocus.js +1 -1
  356. package/dist/es6/radio/lib/Radio.d.ts +1 -1
  357. package/dist/es6/switch/lib/Switch.d.ts +1 -1
  358. package/dist/es6/table/lib/TableRow.d.ts +5 -4
  359. package/dist/es6/table/lib/TableRow.d.ts.map +1 -1
  360. package/dist/es6/table/lib/TableRow.js +12 -26
  361. package/dist/es6/tabs/index.d.ts +5 -0
  362. package/dist/es6/tabs/index.d.ts.map +1 -1
  363. package/dist/es6/tabs/index.js +5 -0
  364. package/dist/es6/tabs/lib/Tabs.d.ts +35 -7
  365. package/dist/es6/tabs/lib/Tabs.d.ts.map +1 -1
  366. package/dist/es6/tabs/lib/Tabs.js +28 -7
  367. package/dist/es6/tabs/lib/TabsItem.d.ts +107 -0
  368. package/dist/es6/tabs/lib/TabsItem.d.ts.map +1 -0
  369. package/dist/es6/tabs/lib/TabsItem.js +131 -0
  370. package/dist/es6/tabs/lib/TabsList.d.ts +43 -0
  371. package/dist/es6/tabs/lib/TabsList.d.ts.map +1 -0
  372. package/dist/es6/tabs/lib/TabsList.js +44 -0
  373. package/dist/es6/tabs/lib/TabsMenuPopper.d.ts +21 -0
  374. package/dist/es6/tabs/lib/TabsMenuPopper.d.ts.map +1 -0
  375. package/dist/es6/tabs/lib/{TabList.js → TabsMenuPopper.js} +8 -20
  376. package/dist/es6/tabs/lib/TabsOverflowButton.d.ts +31 -0
  377. package/dist/es6/tabs/lib/TabsOverflowButton.d.ts.map +1 -0
  378. package/dist/es6/tabs/lib/TabsOverflowButton.js +48 -0
  379. package/dist/{commonjs/tabs/lib/TabPanel.d.ts → es6/tabs/lib/TabsPanel.d.ts} +15 -5
  380. package/dist/es6/tabs/lib/TabsPanel.d.ts.map +1 -0
  381. package/dist/es6/tabs/lib/TabsPanel.js +59 -0
  382. package/{ts3.5/dist/commonjs/tabs/lib/TabList.d.ts → dist/es6/tabs/lib/TabsPanels.d.ts} +15 -15
  383. package/dist/es6/tabs/lib/TabsPanels.d.ts.map +1 -0
  384. package/dist/es6/tabs/lib/TabsPanels.js +12 -0
  385. package/dist/es6/tabs/lib/cursor/index.d.ts +1 -1
  386. package/dist/es6/tabs/lib/cursor/index.d.ts.map +1 -1
  387. package/dist/es6/tabs/lib/cursor/index.js +1 -1
  388. package/dist/es6/tabs/lib/cursor/useCursorModel.d.ts +23 -13
  389. package/dist/es6/tabs/lib/cursor/useCursorModel.d.ts.map +1 -1
  390. package/dist/es6/tabs/lib/cursor/useCursorModel.js +51 -50
  391. package/dist/es6/tabs/lib/cursor/useRovingFocus.d.ts +37 -0
  392. package/dist/es6/tabs/lib/cursor/useRovingFocus.d.ts.map +1 -0
  393. package/dist/es6/tabs/lib/cursor/useRovingFocus.js +84 -0
  394. package/dist/es6/tabs/lib/list/index.d.ts +2 -1
  395. package/dist/es6/tabs/lib/list/index.d.ts.map +1 -1
  396. package/dist/es6/tabs/lib/list/index.js +2 -1
  397. package/dist/es6/tabs/lib/list/renderItem.d.ts +4 -0
  398. package/dist/es6/tabs/lib/list/renderItem.d.ts.map +1 -0
  399. package/dist/es6/tabs/lib/list/renderItem.js +12 -0
  400. package/dist/es6/tabs/lib/list/useListModel.d.ts +25 -13
  401. package/dist/es6/tabs/lib/list/useListModel.d.ts.map +1 -1
  402. package/dist/es6/tabs/lib/list/useListModel.js +21 -8
  403. package/dist/es6/tabs/lib/list/useListRegisterItem.d.ts +14 -0
  404. package/dist/es6/tabs/lib/list/useListRegisterItem.d.ts.map +1 -0
  405. package/dist/es6/tabs/lib/list/useListRegisterItem.js +41 -0
  406. package/dist/es6/tabs/lib/menu/Menu.d.ts +80 -0
  407. package/dist/es6/tabs/lib/menu/Menu.d.ts.map +1 -0
  408. package/dist/es6/tabs/lib/menu/Menu.js +89 -0
  409. package/dist/es6/tabs/lib/menu/MenuCard.d.ts +17 -0
  410. package/dist/es6/tabs/lib/menu/MenuCard.d.ts.map +1 -0
  411. package/dist/es6/tabs/lib/menu/MenuCard.js +73 -0
  412. package/dist/es6/tabs/lib/menu/MenuItem.d.ts +62 -0
  413. package/dist/es6/tabs/lib/menu/MenuItem.d.ts.map +1 -0
  414. package/dist/es6/tabs/lib/menu/MenuItem.js +136 -0
  415. package/dist/es6/tabs/lib/menu/MenuList.d.ts +23 -0
  416. package/dist/es6/tabs/lib/menu/MenuList.d.ts.map +1 -0
  417. package/dist/es6/tabs/lib/menu/MenuList.js +43 -0
  418. package/dist/es6/tabs/lib/menu/MenuPopper.d.ts +21 -0
  419. package/dist/es6/tabs/lib/menu/MenuPopper.d.ts.map +1 -0
  420. package/dist/es6/tabs/lib/menu/MenuPopper.js +36 -0
  421. package/dist/es6/tabs/lib/menu/MenuTarget.d.ts +21 -0
  422. package/dist/es6/tabs/lib/menu/MenuTarget.d.ts.map +1 -0
  423. package/dist/es6/tabs/lib/menu/MenuTarget.js +51 -0
  424. package/dist/es6/tabs/lib/menu/index.d.ts +8 -0
  425. package/dist/es6/tabs/lib/menu/index.d.ts.map +1 -0
  426. package/dist/es6/tabs/lib/menu/index.js +7 -0
  427. package/dist/es6/tabs/lib/menu/useMenuModel.d.ts +35 -0
  428. package/dist/es6/tabs/lib/menu/useMenuModel.d.ts.map +1 -0
  429. package/dist/es6/tabs/lib/menu/useMenuModel.js +31 -0
  430. package/dist/es6/tabs/lib/overflow/index.d.ts +5 -0
  431. package/dist/es6/tabs/lib/overflow/index.d.ts.map +1 -0
  432. package/dist/es6/tabs/lib/overflow/index.js +4 -0
  433. package/dist/es6/tabs/lib/overflow/useOverflowMeasureContainer.d.ts +8 -0
  434. package/dist/es6/tabs/lib/overflow/useOverflowMeasureContainer.d.ts.map +1 -0
  435. package/dist/es6/tabs/lib/overflow/useOverflowMeasureContainer.js +13 -0
  436. package/dist/es6/tabs/lib/overflow/useOverflowMeasureItem.d.ts +10 -0
  437. package/dist/es6/tabs/lib/overflow/useOverflowMeasureItem.d.ts.map +1 -0
  438. package/dist/es6/tabs/lib/overflow/useOverflowMeasureItem.js +30 -0
  439. package/dist/es6/tabs/lib/overflow/useOverflowModel.d.ts +69 -0
  440. package/dist/es6/tabs/lib/overflow/useOverflowModel.d.ts.map +1 -0
  441. package/dist/es6/tabs/lib/overflow/useOverflowModel.js +120 -0
  442. package/dist/es6/tabs/lib/overflow/useOverflowTarget.d.ts +11 -0
  443. package/dist/es6/tabs/lib/overflow/useOverflowTarget.d.ts.map +1 -0
  444. package/dist/es6/tabs/lib/overflow/useOverflowTarget.js +30 -0
  445. package/dist/es6/tabs/lib/selection/index.d.ts +4 -0
  446. package/dist/es6/tabs/lib/selection/index.d.ts.map +1 -0
  447. package/dist/es6/tabs/lib/selection/index.js +3 -0
  448. package/dist/es6/tabs/lib/selection/useResetCursorOnBlur.d.ts +13 -0
  449. package/dist/es6/tabs/lib/selection/useResetCursorOnBlur.d.ts.map +1 -0
  450. package/dist/es6/tabs/lib/{hooks.js → selection/useResetCursorOnBlur.js} +8 -9
  451. package/dist/es6/tabs/lib/selection/useSelectionItem.d.ts +8 -0
  452. package/dist/es6/tabs/lib/selection/useSelectionItem.d.ts.map +1 -0
  453. package/dist/es6/tabs/lib/selection/useSelectionItem.js +14 -0
  454. package/dist/es6/tabs/lib/selection/useSelectionModel.d.ts +62 -0
  455. package/dist/es6/tabs/lib/selection/useSelectionModel.d.ts.map +1 -0
  456. package/dist/es6/tabs/lib/selection/useSelectionModel.js +75 -0
  457. package/dist/es6/tabs/lib/useTabsModel.d.ts +39 -38
  458. package/dist/es6/tabs/lib/useTabsModel.d.ts.map +1 -1
  459. package/dist/es6/tabs/lib/useTabsModel.js +50 -37
  460. package/dist/es6/tokens/index.d.ts +3 -20
  461. package/dist/es6/tokens/index.d.ts.map +1 -1
  462. package/dist/es6/tokens/index.js +1 -1
  463. package/dist/es6/tokens/lib/depth.d.ts +109 -3
  464. package/dist/es6/tokens/lib/depth.d.ts.map +1 -1
  465. package/dist/es6/tokens/lib/depth.js +40 -2
  466. package/dist/es6/tooltip/lib/useTooltip.d.ts +1 -1
  467. package/dist/es6/tooltip/lib/useTooltip.js +2 -2
  468. package/form-field/lib/FormField.tsx +8 -3
  469. package/form-field/lib/Label.tsx +1 -2
  470. package/package.json +7 -7
  471. package/page-header/README.md +11 -6
  472. package/page-header/index.ts +3 -3
  473. package/page-header/lib/PageHeader.tsx +28 -3
  474. package/popup/lib/PopupCard.tsx +3 -3
  475. package/popup/lib/hooks/focus-trap-js.ts +1 -0
  476. package/popup/lib/hooks/useReturnFocus.tsx +1 -1
  477. package/radio/lib/Radio.tsx +1 -1
  478. package/switch/lib/Switch.tsx +1 -1
  479. package/table/lib/TableRow.tsx +19 -13
  480. package/tabs/index.ts +6 -0
  481. package/tabs/lib/Tabs.tsx +34 -9
  482. package/tabs/lib/TabsItem.tsx +250 -0
  483. package/tabs/lib/TabsList.tsx +67 -0
  484. package/tabs/lib/TabsMenuPopper.tsx +27 -0
  485. package/tabs/lib/TabsOverflowButton.tsx +58 -0
  486. package/tabs/lib/{TabPanel.tsx → TabsPanel.tsx} +33 -31
  487. package/tabs/lib/TabsPanels.tsx +28 -0
  488. package/tabs/lib/cursor/index.ts +1 -1
  489. package/tabs/lib/cursor/useCursorModel.tsx +78 -65
  490. package/tabs/lib/cursor/useRovingFocus.tsx +94 -0
  491. package/tabs/lib/list/index.ts +2 -1
  492. package/tabs/lib/list/renderItem.tsx +19 -0
  493. package/tabs/lib/list/useListModel.tsx +48 -23
  494. package/tabs/lib/list/useListRegisterItem.tsx +53 -0
  495. package/tabs/lib/menu/Menu.tsx +95 -0
  496. package/tabs/lib/menu/MenuCard.tsx +96 -0
  497. package/tabs/lib/menu/MenuItem.tsx +195 -0
  498. package/tabs/lib/menu/MenuList.tsx +58 -0
  499. package/tabs/lib/menu/MenuPopper.tsx +31 -0
  500. package/tabs/lib/menu/MenuTarget.tsx +52 -0
  501. package/tabs/lib/menu/index.ts +8 -0
  502. package/tabs/lib/menu/useMenuModel.tsx +67 -0
  503. package/tabs/lib/overflow/index.ts +4 -0
  504. package/tabs/lib/overflow/spec/tsconfig.json +3 -0
  505. package/tabs/lib/overflow/spec/useOverflowModel.spec.tsx +46 -0
  506. package/tabs/lib/overflow/useOverflowMeasureContainer.ts +20 -0
  507. package/tabs/lib/overflow/useOverflowMeasureItem.tsx +40 -0
  508. package/tabs/lib/overflow/useOverflowModel.tsx +207 -0
  509. package/tabs/lib/overflow/useOverflowTarget.tsx +42 -0
  510. package/tabs/lib/selection/index.ts +3 -0
  511. package/tabs/lib/selection/useResetCursorOnBlur.tsx +29 -0
  512. package/tabs/lib/selection/useSelectionItem.tsx +26 -0
  513. package/tabs/lib/selection/useSelectionModel.tsx +133 -0
  514. package/tabs/lib/useTabsModel.tsx +93 -78
  515. package/tokens/README.md +5 -12
  516. package/tokens/index.ts +2 -2
  517. package/tokens/lib/depth.ts +125 -3
  518. package/tooltip/lib/useTooltip.tsx +2 -2
  519. package/ts3.5/dist/commonjs/button/lib/PrimaryButton.d.ts +80 -6
  520. package/ts3.5/dist/commonjs/button/lib/SecondaryButton.d.ts +8 -5
  521. package/ts3.5/dist/commonjs/button/lib/TertiaryButton.d.ts +8 -4
  522. package/ts3.5/dist/commonjs/button/lib/parts/ButtonContainer.d.ts +5 -3
  523. package/ts3.5/dist/commonjs/button/lib/parts/ButtonLabel.d.ts +1 -1
  524. package/ts3.5/dist/commonjs/button/lib/parts/ButtonLabelIcon.d.ts +7 -4
  525. package/ts3.5/dist/commonjs/button/lib/types.d.ts +9 -0
  526. package/ts3.5/dist/commonjs/checkbox/lib/Checkbox.d.ts +1 -1
  527. package/ts3.5/dist/commonjs/common/index.d.ts +1 -0
  528. package/ts3.5/dist/commonjs/common/lib/EllipsisText.d.ts +5 -0
  529. package/ts3.5/dist/commonjs/common/lib/styles/accessibleHide.d.ts +2 -2
  530. package/ts3.5/dist/commonjs/common/lib/theming/breakpoints.d.ts +287 -6
  531. package/ts3.5/dist/commonjs/common/lib/theming/types.d.ts +191 -1
  532. package/ts3.5/dist/commonjs/common/lib/utils/components.d.ts +19 -9
  533. package/ts3.5/dist/commonjs/common/lib/utils/elements.d.ts +2 -2
  534. package/ts3.5/dist/commonjs/common/lib/utils/index.d.ts +2 -0
  535. package/ts3.5/dist/commonjs/common/lib/utils/useConstant.d.ts +9 -0
  536. package/ts3.5/dist/commonjs/common/lib/utils/useResizeObserver.d.ts +3 -0
  537. package/ts3.5/dist/commonjs/common/lib/utils/useUniqueId.d.ts +28 -0
  538. package/ts3.5/dist/commonjs/cookie-banner/index.d.ts +3 -3
  539. package/ts3.5/dist/commonjs/cookie-banner/lib/CookieBanner.d.ts +19 -2
  540. package/ts3.5/dist/commonjs/dialog/lib/hooks/useDialogCard.d.ts +4 -16
  541. package/ts3.5/dist/commonjs/dialog/lib/hooks/useDialogPopper.d.ts +5 -2
  542. package/ts3.5/dist/commonjs/modal/lib/ModalOverlay.d.ts +4 -2
  543. package/ts3.5/dist/commonjs/modal/lib/hooks/useModalCard.d.ts +4 -16
  544. package/ts3.5/dist/commonjs/modal/lib/hooks/useModalHeading.d.ts +5 -17
  545. package/ts3.5/dist/commonjs/page-header/index.d.ts +3 -3
  546. package/ts3.5/dist/commonjs/page-header/lib/PageHeader.d.ts +19 -2
  547. package/ts3.5/dist/commonjs/pagination/lib/Pagination/PageList.d.ts +1 -1
  548. package/ts3.5/dist/commonjs/pagination/lib/Pagination/Pagination.d.ts +5 -5
  549. package/ts3.5/dist/commonjs/pagination/lib/Pagination/common/List.d.ts +1 -1
  550. package/ts3.5/dist/commonjs/pagination/lib/Pagination/common/utils/getValidChildren.d.ts +1 -1
  551. package/ts3.5/dist/commonjs/pagination/lib/Pagination/common/utils/space.d.ts +28 -28
  552. package/ts3.5/dist/commonjs/popup/lib/hooks/usePopupCard.d.ts +5 -2
  553. package/ts3.5/dist/commonjs/popup/lib/hooks/usePopupCloseButton.d.ts +4 -2
  554. package/ts3.5/dist/commonjs/popup/lib/hooks/usePopupHeading.d.ts +5 -2
  555. package/ts3.5/dist/commonjs/popup/lib/hooks/usePopupPopper.d.ts +4 -2
  556. package/ts3.5/dist/commonjs/popup/lib/hooks/usePopupTarget.d.ts +4 -2
  557. package/ts3.5/dist/commonjs/popup/lib/hooks/useReturnFocus.d.ts +1 -1
  558. package/ts3.5/dist/commonjs/radio/lib/Radio.d.ts +1 -1
  559. package/ts3.5/dist/commonjs/switch/lib/Switch.d.ts +1 -1
  560. package/ts3.5/dist/commonjs/table/lib/TableRow.d.ts +5 -4
  561. package/ts3.5/dist/commonjs/tabs/index.d.ts +5 -0
  562. package/ts3.5/dist/commonjs/tabs/lib/Tabs.d.ts +35 -7
  563. package/ts3.5/dist/commonjs/tabs/lib/TabsItem.d.ts +107 -0
  564. package/ts3.5/dist/commonjs/tabs/lib/TabsList.d.ts +43 -0
  565. package/ts3.5/dist/commonjs/tabs/lib/TabsMenuPopper.d.ts +21 -0
  566. package/ts3.5/dist/commonjs/tabs/lib/TabsOverflowButton.d.ts +31 -0
  567. package/{dist/es6/tabs/lib/TabPanel.d.ts → ts3.5/dist/commonjs/tabs/lib/TabsPanel.d.ts} +39 -29
  568. package/ts3.5/dist/{es6/tabs/lib/TabList.d.ts → commonjs/tabs/lib/TabsPanels.d.ts} +5 -5
  569. package/ts3.5/dist/commonjs/tabs/lib/cursor/index.d.ts +1 -1
  570. package/ts3.5/dist/commonjs/tabs/lib/cursor/useCursorModel.d.ts +23 -13
  571. package/ts3.5/dist/commonjs/tabs/lib/cursor/useRovingFocus.d.ts +37 -0
  572. package/ts3.5/dist/commonjs/tabs/lib/list/index.d.ts +2 -1
  573. package/ts3.5/dist/commonjs/tabs/lib/list/renderItem.d.ts +4 -0
  574. package/ts3.5/dist/commonjs/tabs/lib/list/useListModel.d.ts +25 -13
  575. package/ts3.5/dist/commonjs/tabs/lib/list/useListRegisterItem.d.ts +14 -0
  576. package/ts3.5/dist/commonjs/tabs/lib/menu/Menu.d.ts +80 -0
  577. package/ts3.5/dist/commonjs/tabs/lib/menu/MenuCard.d.ts +17 -0
  578. package/ts3.5/dist/commonjs/tabs/lib/menu/MenuItem.d.ts +62 -0
  579. package/ts3.5/dist/commonjs/tabs/lib/menu/MenuList.d.ts +23 -0
  580. package/ts3.5/dist/commonjs/tabs/lib/menu/MenuPopper.d.ts +21 -0
  581. package/ts3.5/dist/commonjs/tabs/lib/menu/MenuTarget.d.ts +21 -0
  582. package/ts3.5/dist/commonjs/tabs/lib/menu/index.d.ts +8 -0
  583. package/ts3.5/dist/commonjs/tabs/lib/menu/useMenuModel.d.ts +35 -0
  584. package/ts3.5/dist/commonjs/tabs/lib/overflow/index.d.ts +5 -0
  585. package/ts3.5/dist/commonjs/tabs/lib/overflow/useOverflowMeasureContainer.d.ts +8 -0
  586. package/ts3.5/dist/commonjs/tabs/lib/overflow/useOverflowMeasureItem.d.ts +10 -0
  587. package/ts3.5/dist/commonjs/tabs/lib/overflow/useOverflowModel.d.ts +69 -0
  588. package/ts3.5/dist/commonjs/tabs/lib/overflow/useOverflowTarget.d.ts +11 -0
  589. package/ts3.5/dist/commonjs/tabs/lib/selection/index.d.ts +4 -0
  590. package/ts3.5/dist/commonjs/tabs/lib/selection/useResetCursorOnBlur.d.ts +13 -0
  591. package/ts3.5/dist/commonjs/tabs/lib/selection/useSelectionItem.d.ts +8 -0
  592. package/ts3.5/dist/commonjs/tabs/lib/selection/useSelectionModel.d.ts +62 -0
  593. package/ts3.5/dist/commonjs/tabs/lib/useTabsModel.d.ts +39 -38
  594. package/ts3.5/dist/commonjs/tokens/index.d.ts +3 -20
  595. package/ts3.5/dist/commonjs/tokens/lib/depth.d.ts +109 -3
  596. package/ts3.5/dist/commonjs/tooltip/lib/useTooltip.d.ts +1 -1
  597. package/ts3.5/dist/es6/button/lib/PrimaryButton.d.ts +80 -6
  598. package/ts3.5/dist/es6/button/lib/SecondaryButton.d.ts +8 -5
  599. package/ts3.5/dist/es6/button/lib/TertiaryButton.d.ts +8 -4
  600. package/ts3.5/dist/es6/button/lib/parts/ButtonContainer.d.ts +5 -3
  601. package/ts3.5/dist/es6/button/lib/parts/ButtonLabel.d.ts +1 -1
  602. package/ts3.5/dist/es6/button/lib/parts/ButtonLabelIcon.d.ts +7 -4
  603. package/ts3.5/dist/es6/button/lib/types.d.ts +9 -0
  604. package/ts3.5/dist/es6/checkbox/lib/Checkbox.d.ts +1 -1
  605. package/ts3.5/dist/es6/common/index.d.ts +1 -0
  606. package/ts3.5/dist/es6/common/lib/EllipsisText.d.ts +5 -0
  607. package/ts3.5/dist/es6/common/lib/styles/accessibleHide.d.ts +2 -2
  608. package/ts3.5/dist/es6/common/lib/theming/breakpoints.d.ts +287 -6
  609. package/ts3.5/dist/es6/common/lib/theming/types.d.ts +191 -1
  610. package/ts3.5/dist/es6/common/lib/utils/components.d.ts +19 -9
  611. package/ts3.5/dist/es6/common/lib/utils/elements.d.ts +2 -2
  612. package/ts3.5/dist/es6/common/lib/utils/index.d.ts +2 -0
  613. package/ts3.5/dist/es6/common/lib/utils/useConstant.d.ts +9 -0
  614. package/ts3.5/dist/es6/common/lib/utils/useResizeObserver.d.ts +3 -0
  615. package/ts3.5/dist/es6/common/lib/utils/useUniqueId.d.ts +28 -0
  616. package/ts3.5/dist/es6/cookie-banner/index.d.ts +3 -3
  617. package/ts3.5/dist/es6/cookie-banner/lib/CookieBanner.d.ts +19 -2
  618. package/ts3.5/dist/es6/dialog/lib/hooks/useDialogCard.d.ts +4 -16
  619. package/ts3.5/dist/es6/dialog/lib/hooks/useDialogPopper.d.ts +5 -2
  620. package/ts3.5/dist/es6/modal/lib/ModalOverlay.d.ts +4 -2
  621. package/ts3.5/dist/es6/modal/lib/hooks/useModalCard.d.ts +4 -16
  622. package/ts3.5/dist/es6/modal/lib/hooks/useModalHeading.d.ts +5 -17
  623. package/ts3.5/dist/es6/page-header/index.d.ts +3 -3
  624. package/ts3.5/dist/es6/page-header/lib/PageHeader.d.ts +19 -2
  625. package/ts3.5/dist/es6/pagination/lib/Pagination/PageList.d.ts +1 -1
  626. package/ts3.5/dist/es6/pagination/lib/Pagination/Pagination.d.ts +5 -5
  627. package/ts3.5/dist/es6/pagination/lib/Pagination/common/List.d.ts +1 -1
  628. package/ts3.5/dist/es6/pagination/lib/Pagination/common/utils/getValidChildren.d.ts +1 -1
  629. package/ts3.5/dist/es6/pagination/lib/Pagination/common/utils/space.d.ts +28 -28
  630. package/ts3.5/dist/es6/popup/lib/hooks/usePopupCard.d.ts +5 -2
  631. package/ts3.5/dist/es6/popup/lib/hooks/usePopupCloseButton.d.ts +4 -2
  632. package/ts3.5/dist/es6/popup/lib/hooks/usePopupHeading.d.ts +5 -2
  633. package/ts3.5/dist/es6/popup/lib/hooks/usePopupPopper.d.ts +4 -2
  634. package/ts3.5/dist/es6/popup/lib/hooks/usePopupTarget.d.ts +4 -2
  635. package/ts3.5/dist/es6/popup/lib/hooks/useReturnFocus.d.ts +1 -1
  636. package/ts3.5/dist/es6/radio/lib/Radio.d.ts +1 -1
  637. package/ts3.5/dist/es6/switch/lib/Switch.d.ts +1 -1
  638. package/ts3.5/dist/es6/table/lib/TableRow.d.ts +5 -4
  639. package/ts3.5/dist/es6/tabs/index.d.ts +5 -0
  640. package/ts3.5/dist/es6/tabs/lib/Tabs.d.ts +35 -7
  641. package/ts3.5/dist/es6/tabs/lib/TabsItem.d.ts +107 -0
  642. package/ts3.5/dist/es6/tabs/lib/TabsList.d.ts +43 -0
  643. package/ts3.5/dist/es6/tabs/lib/TabsMenuPopper.d.ts +21 -0
  644. package/ts3.5/dist/es6/tabs/lib/TabsOverflowButton.d.ts +31 -0
  645. package/ts3.5/dist/es6/tabs/lib/{TabPanel.d.ts → TabsPanel.d.ts} +15 -5
  646. package/{dist/commonjs/tabs/lib/TabList.d.ts → ts3.5/dist/es6/tabs/lib/TabsPanels.d.ts} +15 -15
  647. package/ts3.5/dist/es6/tabs/lib/cursor/index.d.ts +1 -1
  648. package/ts3.5/dist/es6/tabs/lib/cursor/useCursorModel.d.ts +23 -13
  649. package/ts3.5/dist/es6/tabs/lib/cursor/useRovingFocus.d.ts +37 -0
  650. package/ts3.5/dist/es6/tabs/lib/list/index.d.ts +2 -1
  651. package/ts3.5/dist/es6/tabs/lib/list/renderItem.d.ts +4 -0
  652. package/ts3.5/dist/es6/tabs/lib/list/useListModel.d.ts +25 -13
  653. package/ts3.5/dist/es6/tabs/lib/list/useListRegisterItem.d.ts +14 -0
  654. package/ts3.5/dist/es6/tabs/lib/menu/Menu.d.ts +80 -0
  655. package/ts3.5/dist/es6/tabs/lib/menu/MenuCard.d.ts +17 -0
  656. package/ts3.5/dist/es6/tabs/lib/menu/MenuItem.d.ts +62 -0
  657. package/ts3.5/dist/es6/tabs/lib/menu/MenuList.d.ts +23 -0
  658. package/ts3.5/dist/es6/tabs/lib/menu/MenuPopper.d.ts +21 -0
  659. package/ts3.5/dist/es6/tabs/lib/menu/MenuTarget.d.ts +21 -0
  660. package/ts3.5/dist/es6/tabs/lib/menu/index.d.ts +8 -0
  661. package/ts3.5/dist/es6/tabs/lib/menu/useMenuModel.d.ts +35 -0
  662. package/ts3.5/dist/es6/tabs/lib/overflow/index.d.ts +5 -0
  663. package/ts3.5/dist/es6/tabs/lib/overflow/useOverflowMeasureContainer.d.ts +8 -0
  664. package/ts3.5/dist/es6/tabs/lib/overflow/useOverflowMeasureItem.d.ts +10 -0
  665. package/ts3.5/dist/es6/tabs/lib/overflow/useOverflowModel.d.ts +69 -0
  666. package/ts3.5/dist/es6/tabs/lib/overflow/useOverflowTarget.d.ts +11 -0
  667. package/ts3.5/dist/es6/tabs/lib/selection/index.d.ts +4 -0
  668. package/ts3.5/dist/es6/tabs/lib/selection/useResetCursorOnBlur.d.ts +13 -0
  669. package/ts3.5/dist/es6/tabs/lib/selection/useSelectionItem.d.ts +8 -0
  670. package/ts3.5/dist/es6/tabs/lib/selection/useSelectionModel.d.ts +62 -0
  671. package/ts3.5/dist/es6/tabs/lib/useTabsModel.d.ts +39 -38
  672. package/ts3.5/dist/es6/tokens/index.d.ts +3 -20
  673. package/ts3.5/dist/es6/tokens/lib/depth.d.ts +109 -3
  674. package/ts3.5/dist/es6/tooltip/lib/useTooltip.d.ts +1 -1
  675. package/dist/commonjs/tabs/lib/Tab.d.ts +0 -49
  676. package/dist/commonjs/tabs/lib/Tab.d.ts.map +0 -1
  677. package/dist/commonjs/tabs/lib/Tab.js +0 -95
  678. package/dist/commonjs/tabs/lib/TabList.d.ts.map +0 -1
  679. package/dist/commonjs/tabs/lib/TabPanel.d.ts.map +0 -1
  680. package/dist/commonjs/tabs/lib/TabPanel.js +0 -56
  681. package/dist/commonjs/tabs/lib/cursor/hooks.d.ts +0 -39
  682. package/dist/commonjs/tabs/lib/cursor/hooks.d.ts.map +0 -1
  683. package/dist/commonjs/tabs/lib/hooks.d.ts +0 -10
  684. package/dist/commonjs/tabs/lib/hooks.d.ts.map +0 -1
  685. package/dist/commonjs/tabs/lib/list/hooks.d.ts +0 -11
  686. package/dist/commonjs/tabs/lib/list/hooks.d.ts.map +0 -1
  687. package/dist/commonjs/tabs/lib/list/hooks.js +0 -39
  688. package/dist/es6/tabs/lib/Tab.d.ts +0 -49
  689. package/dist/es6/tabs/lib/Tab.d.ts.map +0 -1
  690. package/dist/es6/tabs/lib/Tab.js +0 -86
  691. package/dist/es6/tabs/lib/TabList.d.ts.map +0 -1
  692. package/dist/es6/tabs/lib/TabPanel.d.ts.map +0 -1
  693. package/dist/es6/tabs/lib/TabPanel.js +0 -51
  694. package/dist/es6/tabs/lib/cursor/hooks.d.ts +0 -39
  695. package/dist/es6/tabs/lib/cursor/hooks.d.ts.map +0 -1
  696. package/dist/es6/tabs/lib/cursor/hooks.js +0 -108
  697. package/dist/es6/tabs/lib/hooks.d.ts +0 -10
  698. package/dist/es6/tabs/lib/hooks.d.ts.map +0 -1
  699. package/dist/es6/tabs/lib/list/hooks.d.ts +0 -11
  700. package/dist/es6/tabs/lib/list/hooks.d.ts.map +0 -1
  701. package/dist/es6/tabs/lib/list/hooks.js +0 -34
  702. package/tabs/lib/Tab.tsx +0 -170
  703. package/tabs/lib/TabList.tsx +0 -59
  704. package/tabs/lib/cursor/hooks.tsx +0 -122
  705. package/tabs/lib/hooks.tsx +0 -31
  706. package/tabs/lib/list/hooks.tsx +0 -45
  707. package/ts3.5/dist/commonjs/tabs/lib/Tab.d.ts +0 -49
  708. package/ts3.5/dist/commonjs/tabs/lib/cursor/hooks.d.ts +0 -39
  709. package/ts3.5/dist/commonjs/tabs/lib/hooks.d.ts +0 -10
  710. package/ts3.5/dist/commonjs/tabs/lib/list/hooks.d.ts +0 -11
  711. package/ts3.5/dist/es6/tabs/lib/Tab.d.ts +0 -49
  712. package/ts3.5/dist/es6/tabs/lib/cursor/hooks.d.ts +0 -39
  713. package/ts3.5/dist/es6/tabs/lib/hooks.d.ts +0 -10
  714. package/ts3.5/dist/es6/tabs/lib/list/hooks.d.ts +0 -11
@@ -1,11 +1,5 @@
1
1
  import React from 'react';
2
- import {
3
- createEventMap,
4
- Model,
5
- ToModelConfig,
6
- useEventMap,
7
- assert,
8
- } from '@workday/canvas-kit-react/common';
2
+ import {createEventMap, ToModelConfig, useEventMap, assert} from '@workday/canvas-kit-react/common';
9
3
 
10
4
  import {
11
5
  ListState,
@@ -13,13 +7,13 @@ import {
13
7
  BaseListModelConfig,
14
8
  listEventMap,
15
9
  useListModel,
16
- Item,
17
10
  ListModelConfig,
11
+ ListModel,
18
12
  } from '../list/useListModel';
19
13
 
20
14
  export type Orientation = 'horizontal' | 'vertical';
21
15
 
22
- export type CursorState = ListState & {
16
+ export type CursorState<T = unknown> = ListState<T> & {
23
17
  /** Orientation of the list. This property determines what "next" and "previous" mean. This should
24
18
  * be set to match the layout of UI components */
25
19
  orientation: Orientation;
@@ -27,7 +21,7 @@ export type CursorState = ListState & {
27
21
  cursorId: string;
28
22
  };
29
23
 
30
- export type CursorEvents = ListEvents & {
24
+ export type CursorEvents<T = unknown> = ListEvents<T> & {
31
25
  /** Directly sets the cursor to the list item by its identifier. */
32
26
  goTo(data: {id: string}): void;
33
27
  /** Set the cursor to the "next" item in the list. If the end of the list is detected, it will
@@ -42,7 +36,10 @@ export type CursorEvents = ListEvents & {
42
36
  last(): void;
43
37
  };
44
38
 
45
- export type CursorModel = Model<CursorState, CursorEvents>;
39
+ export interface CursorModel<T = unknown> extends ListModel<T> {
40
+ state: CursorState<T>;
41
+ events: CursorEvents<T>;
42
+ }
46
43
 
47
44
  export const cursorEventMap = createEventMap<CursorEvents>()({
48
45
  guards: {
@@ -61,98 +58,114 @@ export const cursorEventMap = createEventMap<CursorEvents>()({
61
58
  },
62
59
  });
63
60
 
64
- export type BaseCursorModelConfig = BaseListModelConfig & {
61
+ export type BaseCursorModelConfig<T> = BaseListModelConfig<T> & {
65
62
  /**
66
63
  * The orientation of a list of items. Values are either `vertical` or `horizontal`. This value will
67
- * effect which keys activate progression through a list. For example, `horizontal` will activate with
64
+ * effect which ids activate progression through a list. For example, `horizontal` will activate with
68
65
  * left and right arrows while `vertical` will activate with up and down arrows.
69
66
  * @default 'vertical'
70
67
  */
71
68
  orientation?: Orientation;
69
+ /**
70
+ * Initial cursor position. If not provided, the cursor will point to the first item in the list
71
+ */
72
+ initialCursorId?: string;
72
73
  };
73
74
 
74
- export type CursorModelConfig = BaseCursorModelConfig &
75
- Partial<ToModelConfig<CursorState, CursorEvents, typeof cursorEventMap>>;
75
+ export type CursorModelConfig<T> = BaseCursorModelConfig<T> &
76
+ Partial<ToModelConfig<CursorState<T>, CursorEvents<T>, typeof cursorEventMap>>;
77
+
78
+ export const useCursorNavigation = <T extends unknown>(
79
+ state: CursorState<T>,
80
+ getId: ListModel<T>['getId']
81
+ ) => {
82
+ // refs for performance so that new functions aren't created every render
83
+ const getIdRef = React.useRef(getId);
84
+ const itemsRef = React.useRef(state.items);
85
+ const nonInteractiveIdsRef = React.useRef(state.nonInteractiveIds);
86
+
87
+ itemsRef.current = state.items;
88
+ nonInteractiveIdsRef.current = state.nonInteractiveIds;
89
+
90
+ // return a memoized function to prevent recreation of functions every render
91
+ return React.useMemo(() => {
92
+ const getFirst = () => itemsRef.current[0];
93
+ const getLast = () => itemsRef.current[itemsRef.current.length - 1];
94
+
95
+ const getItem = (id: string): T => {
96
+ const item = id ? itemsRef.current.find(item => getIdRef.current(item) === id) : getFirst(); // no id, return first item
97
+ assert(item, `Item not found: ${id}`);
98
+ return item;
99
+ };
100
+
101
+ const getOffsetItem = (offset: number) => (id: string, tries = itemsRef.current.length): T => {
102
+ const items = itemsRef.current;
103
+ const item = getItem(id);
104
+
105
+ const getId = getIdRef.current;
106
+ const currentIndex = items.findIndex(i => getId(item) === getId(i));
107
+ let nextIndex = currentIndex + offset;
108
+ if (nextIndex < 0) {
109
+ nextIndex = items.length - 1;
110
+ } else if (nextIndex >= items.length) {
111
+ nextIndex = 0;
112
+ }
76
113
 
77
- const getFirst = (items: Item[]): Item => {
78
- return items[0];
79
- };
114
+ if (nonInteractiveIdsRef.current.includes(getId(items[nextIndex])) && tries > 0) {
115
+ // The next item is disabled, try again, but only if we haven't already tried everything.
116
+ // Avoid an infinite loop with `tries`
117
+ return getOffsetItem(offset)(getId(items[nextIndex]), tries - 1);
118
+ }
80
119
 
81
- const getLast = (items: Item[]): Item => {
82
- return items[items.length - 1];
83
- };
120
+ return items[nextIndex];
121
+ };
84
122
 
85
- export const getItem = (id: string, items: Item[]): Item => {
86
- const item = id ? items.find(item => item.id === id) : getFirst(items); // no id, return first item
87
- assert(item, `Item not found: ${id}`);
88
- return item;
89
- };
123
+ const getNext = getOffsetItem(1);
124
+ const getPrevious = getOffsetItem(-1);
90
125
 
91
- const getOffsetItem = (offset: number) => (id: string, items: Item[]): Item => {
92
- const item = getItem(id, items);
93
- const currentIndex = items.findIndex(({id}) => item.id === id);
94
- let nextIndex = currentIndex + offset;
95
- if (nextIndex < 0) {
96
- nextIndex = items.length - 1;
97
- } else if (nextIndex >= items.length) {
98
- nextIndex = 0;
99
- }
100
-
101
- const disabledAttribute = items[nextIndex].ref.current?.getAttribute('disabled');
102
- if (disabledAttribute !== null || disabledAttribute === 'false') {
103
- // The next item is disabled, try again
104
- return getOffsetItem(offset)(items[nextIndex].id, items);
105
- }
106
-
107
- return items[nextIndex];
126
+ return {getFirst, getLast, getItem, getNext, getPrevious};
127
+ }, []);
108
128
  };
109
129
 
110
- export const hasItems = (items: Item[]) => items.some(item => item.ref.current);
111
-
112
- export const getNext = getOffsetItem(1);
113
- export const getPrevious = getOffsetItem(-1);
114
-
115
- export const useCursorModel = (config: CursorModelConfig = {}): CursorModel => {
130
+ export const useCursorModel = <T extends unknown>(
131
+ config: CursorModelConfig<T> = {}
132
+ ): CursorModel<T> => {
116
133
  const [orientation] = React.useState(config.orientation || 'vertical');
117
134
  const [cursorId, setCursorId] = React.useState('');
118
- const initialCurrentRef = React.useRef('');
119
- const list = useListModel(config as ListModelConfig);
135
+ const list = useListModel(config as ListModelConfig<T>);
136
+ const initialCurrentRef = React.useRef(
137
+ config.initialCursorId || config.items?.length ? list.getId(config.items![0]) : ''
138
+ );
120
139
 
121
140
  const state = {...list.state, orientation, cursorId};
141
+ const navigation = useCursorNavigation(state, list.getId);
122
142
 
123
143
  const events = useEventMap(cursorEventMap, state, config, {
124
144
  ...list.events,
125
145
  registerItem(data) {
126
146
  // point the cursor at the first item
127
147
  if (!initialCurrentRef.current) {
128
- initialCurrentRef.current = data.item.id;
148
+ initialCurrentRef.current = list.getId(data.item);
129
149
  setCursorId(initialCurrentRef.current);
130
150
  }
131
151
  list.events.registerItem(data);
132
152
  },
133
- unregisterItem(data) {
134
- // move the cursor forward if the the cursor is pointing to an item that is being removed
135
- if (state.cursorId === data.id && state.items.some(i => i.ref.current !== null)) {
136
- events.next();
137
- }
138
- list.events.unregisterItem(data);
139
- },
140
153
  goTo({id}) {
141
154
  setCursorId(id);
142
155
  },
143
156
  next() {
144
- setCursorId(getNext(state.cursorId, state.items).id);
157
+ setCursorId(list.getId(navigation.getNext(state.cursorId)));
145
158
  },
146
159
  previous() {
147
- setCursorId(getPrevious(state.cursorId, state.items).id);
160
+ setCursorId(list.getId(navigation.getPrevious(state.cursorId)));
148
161
  },
149
162
  first() {
150
- setCursorId(getFirst(state.items).id);
163
+ setCursorId(list.getId(navigation.getFirst()));
151
164
  },
152
165
  last() {
153
- setCursorId(getLast(state.items).id);
166
+ setCursorId(list.getId(navigation.getLast()));
154
167
  },
155
- });
168
+ } as CursorEvents<T>);
156
169
 
157
- return {state, events};
170
+ return {state, events, getId: list.getId};
158
171
  };
@@ -0,0 +1,94 @@
1
+ import React from 'react';
2
+ import {useIsRTL, createHook} from '@workday/canvas-kit-react/common';
3
+
4
+ import {CursorModel, useCursorNavigation} from './useCursorModel';
5
+
6
+ export const orientationKeyMap = {
7
+ horizontal: {
8
+ ArrowLeft: 'previous',
9
+ Left: 'previous',
10
+ ArrowRight: 'next',
11
+ Right: 'next',
12
+ Home: 'first',
13
+ End: 'last',
14
+ },
15
+ vertical: {
16
+ ArrowUp: 'previous',
17
+ Up: 'previous',
18
+ ArrowDown: 'next',
19
+ Down: 'next',
20
+ Home: 'first',
21
+ End: 'last',
22
+ },
23
+ } as const;
24
+
25
+ const rightToLeftMap = {
26
+ ArrowLeft: 'ArrowRight',
27
+ Left: 'Right',
28
+ ArrowRight: 'ArrowLeft',
29
+ Right: 'Left',
30
+ Home: 'End',
31
+ End: 'Home',
32
+ } as const;
33
+
34
+ /**
35
+ * Handles the roving focus behavior of a Cursor model. It should be added to the element
36
+ * representing a list item.
37
+ *
38
+ * @see https://www.w3.org/TR/wai-aria-practices/#kbd_roving_tabindex
39
+ */
40
+ export const useRovingFocus = createHook(
41
+ ({state, events, getId}: CursorModel, ref, elemProps: {name?: string} = {}) => {
42
+ // Tracks when this element has focus. If this item is removed while still focused, we have to
43
+ // inform the model to move the cursor to the next item.
44
+ const focusRef = React.useRef(false);
45
+ const getIdRef = React.useRef(getId);
46
+
47
+ // Create a ref out of state. We don't want to watch state on unmount, so we use a ref to get the
48
+ // current value at the time of unmounting. Otherwise, `state.items` would be a cached value of an
49
+ // empty array
50
+ const stateRef = React.useRef(state);
51
+ stateRef.current = state;
52
+
53
+ const keyDownRef = React.useRef(false);
54
+ const isRTL = useIsRTL();
55
+
56
+ const navigation = useCursorNavigation(state, getId);
57
+
58
+ React.useEffect(() => {
59
+ if (keyDownRef.current) {
60
+ const item = navigation.getItem(state.cursorId);
61
+ document.querySelector<HTMLElement>(`#${state.id}-${getIdRef.current(item)}`)?.focus();
62
+
63
+ keyDownRef.current = false;
64
+ }
65
+ }, [state.cursorId, state.id, navigation]);
66
+
67
+ return {
68
+ onKeyDown(event: React.KeyboardEvent) {
69
+ (Object.keys(
70
+ orientationKeyMap[state.orientation]
71
+ ) as (keyof typeof orientationKeyMap[typeof state.orientation])[]).forEach(key => {
72
+ if (isRTL ? event.key === rightToLeftMap[key] : event.key === key) {
73
+ const event = orientationKeyMap[state.orientation][key];
74
+ keyDownRef.current = true;
75
+ events[event]?.();
76
+ }
77
+ });
78
+ },
79
+ onFocus() {
80
+ focusRef.current = true;
81
+ },
82
+ onBlur() {
83
+ focusRef.current = false;
84
+ },
85
+ id: `${state.id}-${elemProps.name}`,
86
+ tabIndex: !state.cursorId
87
+ ? 0 // cursor isn't known yet, be safe and mark this as focusable
88
+ : !!elemProps.name && state.cursorId === elemProps.name
89
+ ? 0 // A name is known and cursor is here
90
+ : -1, // A name is known an cursor is somewhere else
91
+ ref,
92
+ };
93
+ }
94
+ );
@@ -1,2 +1,3 @@
1
- export * from './hooks';
1
+ export * from './useListRegisterItem';
2
2
  export * from './useListModel';
3
+ export * from './renderItem';
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+
3
+ import {ListModel} from './useListModel';
4
+
5
+ export function useRenderItems<T>(
6
+ model: ListModel<T>,
7
+ children: ((item: T) => React.ReactNode) | React.ReactNode
8
+ ) {
9
+ const items = React.useMemo(() => {
10
+ return typeof children === 'function'
11
+ ? model.state.items.map(item => React.cloneElement(children(item), {key: model.getId(item)}))
12
+ : null;
13
+ // If we added `children` as a dependency, this memo would be useless. If the user wants the
14
+ // item to rerender, the item and items array needs to be updated.
15
+ // eslint-disable-next-line react-hooks/exhaustive-deps
16
+ }, [model.state.items]);
17
+
18
+ return items || children;
19
+ }
@@ -5,34 +5,42 @@ import {
5
5
  ToModelConfig,
6
6
  useEventMap,
7
7
  useUniqueId,
8
+ assert,
8
9
  } from '@workday/canvas-kit-react/common';
9
10
 
10
- export type Item = {
11
- /** IDREF of the list. Children ids can be derived from this id */
12
- id: string;
13
- ref: React.RefObject<HTMLElement>;
14
- };
15
-
16
- export type ListState = {
11
+ export type ListState<T = unknown> = {
17
12
  /** IDREF of the list. Children ids can be derived from this id */
18
13
  id: string;
19
14
  /** Used as an auto-incrementing ID for accessibility */
20
15
  indexRef: React.RefObject<number>;
21
- items: Item[];
16
+ items: T[];
17
+ /**
18
+ * An array of ids of non-interactive elements. Non-interactive elements usually have `disabled`
19
+ * applied to them and thus are not focusable by the browser. Lists need to know about these so
20
+ * that keyboard navigation properly skips over these items. Interactive elements that are
21
+ * disabled should use `[aria-disabled]` instead and should still receive focus.
22
+ * @see https://www.w3.org/TR/wai-aria-practices-1.1/#kbd_disabled_controls
23
+ */
24
+ nonInteractiveIds: string[];
22
25
  };
23
26
 
24
- export type ListEvents = {
27
+ export type ListEvents<T = unknown> = {
25
28
  /** Register an item to the list. Takes in an identifier, a React.Ref and an optional index. This should be called on
26
29
  * component mount */
27
- registerItem(data: {item: Item; index?: number}): void;
30
+ registerItem(data: {item: T; index?: number}): void;
28
31
  /** Unregister an item by its identifier. This should be called when the component is unmounted */
29
32
  unregisterItem(data: {id: string}): void;
30
33
  /** Updates the position of a tab within the list. This should be called when a tab's index is updated */
31
34
  updateItemPosition(data: {id: string; index: number}): void;
32
35
  };
33
36
 
34
- export type ListModel = Model<ListState, ListEvents>;
37
+ export interface ListModel<T = unknown> extends Model<ListState<T>, ListEvents<T>> {
38
+ getId: (item: T) => string;
39
+ }
35
40
 
41
+ // We don't have a way of knowing what the generic could be, so we leave it as `unknown`. It will
42
+ // probably need to be cast to the generic in use inside extending models. This will not effect the
43
+ // use of the model in an application, only in models composing this model.
36
44
  export const listEventMap = createEventMap<ListEvents>()({
37
45
  guards: {
38
46
  /**
@@ -76,20 +84,37 @@ export const listEventMap = createEventMap<ListEvents>()({
76
84
  },
77
85
  });
78
86
 
79
- export type BaseListModelConfig = {
87
+ export type BaseListModelConfig<T = unknown> = {
80
88
  /** IDREF of the list. Children ids can be derived from this id */
81
89
  id?: string;
90
+ items?: T[];
91
+ getId?: (item: T) => string;
92
+ /**
93
+ * Array of all ids which are currently disabled
94
+ */
95
+ nonInteractiveIds?: string[];
82
96
  };
83
97
 
84
- export type ListModelConfig = BaseListModelConfig &
85
- Partial<ToModelConfig<ListState, ListEvents, typeof listEventMap>>;
98
+ export type ListModelConfig<T> = BaseListModelConfig<T> &
99
+ Partial<ToModelConfig<ListState<T>, ListEvents<T>, typeof listEventMap>>;
100
+
101
+ export const defaultGetId = (item: any): string => {
102
+ assert(item.id, 'A list item must have an `id` field or a `getId` function defined');
103
+ return item.id;
104
+ };
86
105
 
87
- export const useListModel = (config: ListModelConfig = {}): ListModel => {
106
+ export const useListModel = <T extends unknown>(config: ListModelConfig<T> = {}): ListModel<T> => {
88
107
  const id = useUniqueId(config.id);
89
108
  const indexRef = React.useRef(0);
90
- const [items, setItems] = React.useState([] as Item[]);
109
+ const [items, setItems] = React.useState(config.items || []);
110
+ const getId = config.getId || defaultGetId;
91
111
 
92
- const state = {id, items, indexRef};
112
+ const state = {
113
+ id,
114
+ items: config.items || items,
115
+ indexRef,
116
+ nonInteractiveIds: config.nonInteractiveIds || [],
117
+ };
93
118
 
94
119
  const events = useEventMap(listEventMap, state, config, {
95
120
  registerItem({item, index}) {
@@ -105,8 +130,8 @@ export const useListModel = (config: ListModelConfig = {}): ListModel => {
105
130
  },
106
131
  unregisterItem({id}) {
107
132
  setItems(items => {
108
- if (items.find(item => item.id === id)) {
109
- return items.filter(item => item.id !== id);
133
+ if (items.find(item => getId(item) === id)) {
134
+ return items.filter(item => getId(item) !== id);
110
135
  } else {
111
136
  return items;
112
137
  }
@@ -114,12 +139,12 @@ export const useListModel = (config: ListModelConfig = {}): ListModel => {
114
139
  },
115
140
  updateItemPosition({id, index}) {
116
141
  setItems(items => {
117
- const copy = items.filter(item => item.id !== id);
118
- copy.splice(index, 0, items.find(item => item.id === id)!);
142
+ const copy = items.filter(item => getId(item) !== id);
143
+ copy.splice(index, 0, items.find(item => getId(item) === id)!);
119
144
  return copy;
120
145
  });
121
146
  },
122
- });
147
+ } as ListEvents<T>);
123
148
 
124
- return {state, events};
149
+ return {state, events, getId};
125
150
  };
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+
3
+ import {useMountLayout, createHook} from '@workday/canvas-kit-react/common';
4
+
5
+ import {ListModel} from './useListModel';
6
+
7
+ /**
8
+ * Registers an item with a list. It will return elemProps with a `name` which can be used by other
9
+ * hooks to identify the item in the list.
10
+ */
11
+ export const useListRegisterItem = createHook(
12
+ (
13
+ {state, events, getId}: ListModel,
14
+ _?: React.Ref<HTMLElement>,
15
+ elemProps: {name?: string; index?: number; disabled?: boolean} = {}
16
+ ) => {
17
+ const [localId, setLocalId] = React.useState(elemProps.name || '');
18
+ const firstRender = React.useRef(true);
19
+
20
+ React.useLayoutEffect(() => {
21
+ if (elemProps.index !== undefined && !firstRender.current) {
22
+ events.updateItemPosition({id: localId, index: elemProps.index});
23
+ }
24
+ // we only care about the index changing
25
+ // eslint-disable-next-line react-hooks/exhaustive-deps
26
+ }, [elemProps.index]);
27
+
28
+ useMountLayout(() => {
29
+ const defaultId = state.indexRef.current;
30
+ const itemId = elemProps.name || String(defaultId);
31
+ // bail early if item already exists. This happens if items were already provided.
32
+ if (state.items.find(item => getId(item) === elemProps.name)) {
33
+ return;
34
+ }
35
+ events.registerItem({
36
+ item: {id: itemId},
37
+ index: elemProps.index,
38
+ });
39
+ setLocalId(itemId);
40
+ firstRender.current = false;
41
+
42
+ return () => {
43
+ events.unregisterItem({id: itemId});
44
+ };
45
+ });
46
+
47
+ return {
48
+ 'data-name': localId,
49
+ name: localId,
50
+ disabled: elemProps.disabled || state.nonInteractiveIds.includes(localId) ? true : undefined,
51
+ };
52
+ }
53
+ );
@@ -0,0 +1,95 @@
1
+ import React from 'react';
2
+
3
+ import {createComponent, useDefaultModel} from '@workday/canvas-kit-react/common';
4
+
5
+ import {MenuModel, MenuModelConfig, useMenuModel} from './useMenuModel';
6
+ import {MenuPopper} from './MenuPopper';
7
+ import {MenuTarget} from './MenuTarget';
8
+ import {MenuItem} from './MenuItem';
9
+ import {MenuCard} from './MenuCard';
10
+ import {MenuList} from './MenuList';
11
+
12
+ export const MenuModelContext = React.createContext<MenuModel>({} as any);
13
+
14
+ export interface MenuProps<T> extends MenuModelConfig<T> {
15
+ /**
16
+ * The contents of the Menu. Can be `Menu` children or any valid elements.
17
+ */
18
+ children: React.ReactNode;
19
+ /**
20
+ * Optionally pass a model directly to this component. Default is to create a model out of model
21
+ * config passed to this component.
22
+ * @default useMenuModel(config)
23
+ */
24
+ model?: MenuModel<T>;
25
+ }
26
+
27
+ /**
28
+ * An accessible dropdown menu component. A dropdown menu usually contains a target element that
29
+ * opens to a menu.
30
+ * @example
31
+ * <Menu>
32
+ * <Menu.Target>Open</Menu.Target>
33
+ * <Menu.Popper>
34
+ * <Menu.Card>
35
+ * <Menu.List>
36
+ * <Menu.Item name="first">First Item</Menu.Item>
37
+ * <Menu.Item name="second">Second Item</Menu.Item>
38
+ * </Menu.List>
39
+ * </Menu.Card>
40
+ * </Menu.Popper>
41
+ * </Menu>
42
+ */
43
+ export const Menu = createComponent()({
44
+ displayName: 'Menu',
45
+ Component: ({children, model, ...config}: MenuProps<any>) => {
46
+ const value = useDefaultModel(model, config, useMenuModel);
47
+
48
+ return <MenuModelContext.Provider value={value}>{children}</MenuModelContext.Provider>;
49
+ },
50
+ subComponents: {
51
+ /**
52
+ * The menu card is a non-semantic element used to give the dropdown menu its distinct visual
53
+ * cue that the dropdown menu is floating above other content. A menu card usually contains a
54
+ * menu list, but can also contain other elements like a header or footer.
55
+ */
56
+ Card: MenuCard,
57
+ /**
58
+ * The menu list follows the Collections API. A list can either contain static items
59
+ * or a render prop and `items` to the model.
60
+ *
61
+ * @example
62
+ * const MyComponent = () => {
63
+ * const model = useMenuModel({
64
+ * items: [
65
+ * { id: 'first', text: 'First Item' },
66
+ * { id: 'second', text: 'Second Item' },
67
+ * ]
68
+ * })
69
+ *
70
+ * return (
71
+ * <Menu model={model}>
72
+ * <Menu.List>
73
+ * {(item) => <Menu.Item name={item.id}>{item.text}</Menu.Item>}
74
+ * </Menu.List>
75
+ * </Menu>
76
+ * )
77
+ * }
78
+ */
79
+ List: MenuList,
80
+ /**
81
+ * A menu item has an optional `name` prop that identifies the item in the menu list and will be
82
+ * passed to the optional `onSelect` callback of the menu model. A menu item can contain any
83
+ * HTML. If more complex HTML is provided, consider
84
+ */
85
+ Item: MenuItem,
86
+ Target: MenuTarget,
87
+ /**
88
+ * The "Popper" of a menu. The popper will appear around the `Menu.Target`. It renders a `div`
89
+ * element that is portalled to the `document.body` which is controlled by the `PopupStack. The
90
+ * `PopupStack` is not part of React. This means no extra props given to this component will be
91
+ * forwarded to the `div` element, but the `ref` will be forwarded.
92
+ */
93
+ Popper: MenuPopper,
94
+ },
95
+ });