@workday/canvas-kit-react 9.0.0-alpha.418-next.20 → 9.0.0-alpha.420-next.22

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 (269) hide show
  1. package/breadcrumbs/lib/BreadcrumbsItem.tsx +1 -1
  2. package/collection/index.ts +2 -0
  3. package/collection/lib/ListBox.tsx +12 -10
  4. package/collection/lib/useBaseListModel.tsx +6 -4
  5. package/collection/lib/useCursorListModel.tsx +1 -1
  6. package/collection/lib/useListActiveDescendant.ts +24 -0
  7. package/collection/lib/useListItemAllowChildStrings.ts +2 -1
  8. package/collection/lib/useListItemRegister.tsx +10 -3
  9. package/collection/lib/useListItemSelect.tsx +1 -1
  10. package/collection/lib/useListKeyboardHandler.ts +28 -0
  11. package/collection/lib/useListLoader.ts +116 -54
  12. package/collection/lib/useOverflowListItemMeasure.tsx +2 -2
  13. package/collection/lib/useOverflowListMeasure.ts +11 -13
  14. package/collection/lib/useOverflowListTarget.tsx +28 -30
  15. package/collection/lib/useSelectionListModel.tsx +1 -0
  16. package/combobox/LICENSE +52 -0
  17. package/combobox/README.md +7 -0
  18. package/combobox/index.ts +8 -0
  19. package/combobox/lib/Combobox.tsx +32 -0
  20. package/combobox/lib/ComboboxCard.tsx +33 -0
  21. package/combobox/lib/ComboboxInput.tsx +104 -0
  22. package/combobox/lib/ComboboxMenu.tsx +67 -0
  23. package/combobox/lib/ComboboxMenuItem.tsx +74 -0
  24. package/combobox/lib/ComboboxMenuList.tsx +45 -0
  25. package/combobox/lib/useComboboxInputOpenWithArrowKeys.ts +21 -0
  26. package/combobox/lib/useComboboxLoader.ts +72 -0
  27. package/combobox/lib/useComboboxModel.tsx +85 -0
  28. package/combobox/package.json +6 -0
  29. package/common/lib/utils/components.ts +20 -16
  30. package/common/lib/utils/models.ts +2 -2
  31. package/dist/commonjs/action-bar/lib/ActionBar.d.ts +2 -2
  32. package/dist/commonjs/action-bar/lib/ActionBarList.d.ts +1 -1
  33. package/dist/commonjs/action-bar/lib/useActionBarModel.d.ts +2 -2
  34. package/dist/commonjs/breadcrumbs/lib/Breadcrumbs.d.ts +2 -2
  35. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsMenu.d.ts +1 -1
  36. package/dist/commonjs/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts +2 -2
  37. package/dist/commonjs/collection/index.d.ts +2 -0
  38. package/dist/commonjs/collection/index.d.ts.map +1 -1
  39. package/dist/commonjs/collection/index.js +2 -0
  40. package/dist/commonjs/collection/lib/ListBox.d.ts +7 -6
  41. package/dist/commonjs/collection/lib/ListBox.d.ts.map +1 -1
  42. package/dist/commonjs/collection/lib/ListBox.js +5 -3
  43. package/dist/commonjs/collection/lib/useBaseListModel.d.ts.map +1 -1
  44. package/dist/commonjs/collection/lib/useBaseListModel.js +4 -4
  45. package/dist/commonjs/collection/lib/useCursorListModel.d.ts +0 -34
  46. package/dist/commonjs/collection/lib/useCursorListModel.d.ts.map +1 -1
  47. package/dist/commonjs/collection/lib/useCursorListModel.js +1 -1
  48. package/dist/commonjs/collection/lib/useListActiveDescendant.d.ts +68 -0
  49. package/dist/commonjs/collection/lib/useListActiveDescendant.d.ts.map +1 -0
  50. package/dist/commonjs/collection/lib/useListActiveDescendant.js +25 -0
  51. package/dist/commonjs/collection/lib/useListItemAllowChildStrings.d.ts +2 -1
  52. package/dist/commonjs/collection/lib/useListItemAllowChildStrings.d.ts.map +1 -1
  53. package/dist/commonjs/collection/lib/useListItemAllowChildStrings.js +2 -1
  54. package/dist/commonjs/collection/lib/useListItemRegister.d.ts.map +1 -1
  55. package/dist/commonjs/collection/lib/useListItemRegister.js +5 -1
  56. package/dist/commonjs/collection/lib/useListKeyboardHandler.d.ts +66 -0
  57. package/dist/commonjs/collection/lib/useListKeyboardHandler.d.ts.map +1 -0
  58. package/dist/commonjs/collection/lib/useListKeyboardHandler.js +27 -0
  59. package/dist/commonjs/collection/lib/useListLoader.d.ts +46 -7
  60. package/dist/commonjs/collection/lib/useListLoader.d.ts.map +1 -1
  61. package/dist/commonjs/collection/lib/useListLoader.js +61 -35
  62. package/dist/commonjs/collection/lib/useOverflowListMeasure.d.ts +1 -1
  63. package/dist/commonjs/collection/lib/useOverflowListMeasure.d.ts.map +1 -1
  64. package/dist/commonjs/collection/lib/useOverflowListTarget.d.ts +5 -2
  65. package/dist/commonjs/collection/lib/useOverflowListTarget.d.ts.map +1 -1
  66. package/dist/commonjs/collection/lib/useOverflowListTarget.js +1 -1
  67. package/dist/commonjs/collection/lib/useSelectionListModel.d.ts.map +1 -1
  68. package/dist/commonjs/collection/lib/useSelectionListModel.js +1 -0
  69. package/dist/commonjs/combobox/index.d.ts +9 -0
  70. package/dist/commonjs/combobox/index.d.ts.map +1 -0
  71. package/dist/commonjs/combobox/index.js +19 -0
  72. package/dist/commonjs/combobox/lib/Combobox.d.ts +2075 -0
  73. package/dist/commonjs/combobox/lib/Combobox.d.ts.map +1 -0
  74. package/dist/commonjs/combobox/lib/Combobox.js +29 -0
  75. package/dist/commonjs/combobox/lib/ComboboxCard.d.ts +166 -0
  76. package/dist/commonjs/combobox/lib/ComboboxCard.d.ts.map +1 -0
  77. package/dist/commonjs/combobox/lib/ComboboxCard.js +25 -0
  78. package/dist/commonjs/combobox/lib/ComboboxInput.d.ts +186 -0
  79. package/dist/commonjs/combobox/lib/ComboboxInput.d.ts.map +1 -0
  80. package/dist/commonjs/combobox/lib/ComboboxInput.js +84 -0
  81. package/dist/commonjs/combobox/lib/ComboboxMenu.d.ts +428 -0
  82. package/dist/commonjs/combobox/lib/ComboboxMenu.d.ts.map +1 -0
  83. package/dist/commonjs/combobox/lib/ComboboxMenu.js +63 -0
  84. package/dist/commonjs/combobox/lib/ComboboxMenuItem.d.ts +178 -0
  85. package/dist/commonjs/combobox/lib/ComboboxMenuItem.d.ts.map +1 -0
  86. package/dist/commonjs/combobox/lib/ComboboxMenuItem.js +50 -0
  87. package/dist/commonjs/combobox/lib/ComboboxMenuList.d.ts +164 -0
  88. package/dist/commonjs/combobox/lib/ComboboxMenuList.d.ts.map +1 -0
  89. package/dist/commonjs/combobox/lib/ComboboxMenuList.js +31 -0
  90. package/dist/commonjs/combobox/lib/useComboboxInputOpenWithArrowKeys.d.ts +84 -0
  91. package/dist/commonjs/combobox/lib/useComboboxInputOpenWithArrowKeys.d.ts.map +1 -0
  92. package/dist/commonjs/combobox/lib/useComboboxInputOpenWithArrowKeys.js +20 -0
  93. package/dist/commonjs/combobox/lib/useComboboxLoader.d.ts +28 -0
  94. package/dist/commonjs/combobox/lib/useComboboxLoader.d.ts.map +1 -0
  95. package/dist/commonjs/combobox/lib/useComboboxLoader.js +65 -0
  96. package/dist/commonjs/combobox/lib/useComboboxModel.d.ts +1998 -0
  97. package/dist/commonjs/combobox/lib/useComboboxModel.d.ts.map +1 -0
  98. package/dist/commonjs/combobox/lib/useComboboxModel.js +82 -0
  99. package/dist/commonjs/common/lib/utils/components.d.ts +9 -23
  100. package/dist/commonjs/common/lib/utils/components.d.ts.map +1 -1
  101. package/dist/commonjs/common/lib/utils/components.js +6 -2
  102. package/dist/commonjs/common/lib/utils/models.js +2 -2
  103. package/dist/commonjs/index.d.ts +1 -0
  104. package/dist/commonjs/index.d.ts.map +1 -1
  105. package/dist/commonjs/index.js +1 -0
  106. package/dist/commonjs/menu/index.d.ts +1 -1
  107. package/dist/commonjs/menu/index.d.ts.map +1 -1
  108. package/dist/commonjs/menu/index.js +2 -1
  109. package/dist/commonjs/menu/lib/Menu.d.ts +7 -5
  110. package/dist/commonjs/menu/lib/Menu.d.ts.map +1 -1
  111. package/dist/commonjs/menu/lib/Menu.js +6 -4
  112. package/dist/commonjs/menu/lib/MenuContextTarget.d.ts +2 -2
  113. package/dist/commonjs/menu/lib/MenuItem.d.ts +7 -1
  114. package/dist/commonjs/menu/lib/MenuItem.d.ts.map +1 -1
  115. package/dist/commonjs/menu/lib/MenuItem.js +9 -11
  116. package/dist/commonjs/menu/lib/MenuList.d.ts +3 -3
  117. package/dist/commonjs/menu/lib/MenuList.d.ts.map +1 -1
  118. package/dist/commonjs/menu/lib/MenuList.js +3 -2
  119. package/dist/commonjs/menu/lib/MenuPopper.d.ts +1 -1
  120. package/dist/commonjs/menu/lib/MenuTarget.d.ts +2 -2
  121. package/dist/commonjs/menu/lib/useMenuModel.d.ts +2 -2
  122. package/dist/commonjs/menu/lib/useMenuModel.d.ts.map +1 -1
  123. package/dist/commonjs/menu/lib/useMenuModel.js +3 -5
  124. package/dist/commonjs/popup/lib/hooks/usePopupPopper.d.ts +1 -1
  125. package/dist/commonjs/popup/lib/hooks/usePopupTarget.d.ts +1 -1
  126. package/dist/commonjs/popup/lib/hooks/usePopupTargetContext.d.ts +1 -1
  127. package/dist/commonjs/tabs/lib/Tabs.d.ts +18 -120
  128. package/dist/commonjs/tabs/lib/Tabs.d.ts.map +1 -1
  129. package/dist/commonjs/tabs/lib/TabsItem.d.ts +0 -1
  130. package/dist/commonjs/tabs/lib/TabsItem.d.ts.map +1 -1
  131. package/dist/commonjs/tabs/lib/TabsItem.js +0 -1
  132. package/dist/commonjs/tabs/lib/TabsList.d.ts +1 -1
  133. package/dist/commonjs/tabs/lib/TabsMenuPopper.d.ts +1 -1
  134. package/dist/commonjs/tabs/lib/TabsPanel.d.ts.map +1 -1
  135. package/dist/commonjs/tabs/lib/useTabsModel.d.ts +8 -20
  136. package/dist/commonjs/tabs/lib/useTabsModel.d.ts.map +1 -1
  137. package/dist/commonjs/tabs/lib/useTabsModel.js +1 -0
  138. package/dist/commonjs/text-input/index.d.ts +1 -1
  139. package/dist/commonjs/text-input/index.d.ts.map +1 -1
  140. package/dist/commonjs/text-input/index.js +2 -1
  141. package/dist/commonjs/text-input/lib/InputGroup.d.ts +94 -9
  142. package/dist/commonjs/text-input/lib/InputGroup.d.ts.map +1 -1
  143. package/dist/commonjs/text-input/lib/InputGroup.js +129 -63
  144. package/dist/es6/action-bar/lib/ActionBar.d.ts +2 -2
  145. package/dist/es6/action-bar/lib/ActionBarList.d.ts +1 -1
  146. package/dist/es6/action-bar/lib/useActionBarModel.d.ts +2 -2
  147. package/dist/es6/breadcrumbs/lib/Breadcrumbs.d.ts +2 -2
  148. package/dist/es6/breadcrumbs/lib/BreadcrumbsMenu.d.ts +1 -1
  149. package/dist/es6/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts +2 -2
  150. package/dist/es6/collection/index.d.ts +2 -0
  151. package/dist/es6/collection/index.d.ts.map +1 -1
  152. package/dist/es6/collection/index.js +2 -0
  153. package/dist/es6/collection/lib/ListBox.d.ts +7 -6
  154. package/dist/es6/collection/lib/ListBox.d.ts.map +1 -1
  155. package/dist/es6/collection/lib/ListBox.js +6 -4
  156. package/dist/es6/collection/lib/useBaseListModel.d.ts.map +1 -1
  157. package/dist/es6/collection/lib/useBaseListModel.js +4 -4
  158. package/dist/es6/collection/lib/useCursorListModel.d.ts +0 -34
  159. package/dist/es6/collection/lib/useCursorListModel.d.ts.map +1 -1
  160. package/dist/es6/collection/lib/useCursorListModel.js +1 -1
  161. package/dist/es6/collection/lib/useListActiveDescendant.d.ts +68 -0
  162. package/dist/es6/collection/lib/useListActiveDescendant.d.ts.map +1 -0
  163. package/dist/es6/collection/lib/useListActiveDescendant.js +22 -0
  164. package/dist/es6/collection/lib/useListItemAllowChildStrings.d.ts +2 -1
  165. package/dist/es6/collection/lib/useListItemAllowChildStrings.d.ts.map +1 -1
  166. package/dist/es6/collection/lib/useListItemAllowChildStrings.js +2 -1
  167. package/dist/es6/collection/lib/useListItemRegister.d.ts.map +1 -1
  168. package/dist/es6/collection/lib/useListItemRegister.js +5 -1
  169. package/dist/es6/collection/lib/useListKeyboardHandler.d.ts +66 -0
  170. package/dist/es6/collection/lib/useListKeyboardHandler.d.ts.map +1 -0
  171. package/dist/es6/collection/lib/useListKeyboardHandler.js +24 -0
  172. package/dist/es6/collection/lib/useListLoader.d.ts +46 -7
  173. package/dist/es6/collection/lib/useListLoader.d.ts.map +1 -1
  174. package/dist/es6/collection/lib/useListLoader.js +61 -35
  175. package/dist/es6/collection/lib/useOverflowListMeasure.d.ts +1 -1
  176. package/dist/es6/collection/lib/useOverflowListMeasure.d.ts.map +1 -1
  177. package/dist/es6/collection/lib/useOverflowListTarget.d.ts +5 -2
  178. package/dist/es6/collection/lib/useOverflowListTarget.d.ts.map +1 -1
  179. package/dist/es6/collection/lib/useOverflowListTarget.js +1 -1
  180. package/dist/es6/collection/lib/useSelectionListModel.d.ts.map +1 -1
  181. package/dist/es6/collection/lib/useSelectionListModel.js +1 -0
  182. package/dist/es6/combobox/index.d.ts +9 -0
  183. package/dist/es6/combobox/index.d.ts.map +1 -0
  184. package/dist/es6/combobox/index.js +8 -0
  185. package/dist/es6/combobox/lib/Combobox.d.ts +2075 -0
  186. package/dist/es6/combobox/lib/Combobox.d.ts.map +1 -0
  187. package/dist/es6/combobox/lib/Combobox.js +23 -0
  188. package/dist/es6/combobox/lib/ComboboxCard.d.ts +166 -0
  189. package/dist/es6/combobox/lib/ComboboxCard.d.ts.map +1 -0
  190. package/dist/es6/combobox/lib/ComboboxCard.js +19 -0
  191. package/dist/es6/combobox/lib/ComboboxInput.d.ts +186 -0
  192. package/dist/es6/combobox/lib/ComboboxInput.d.ts.map +1 -0
  193. package/dist/es6/combobox/lib/ComboboxInput.js +78 -0
  194. package/dist/es6/combobox/lib/ComboboxMenu.d.ts +428 -0
  195. package/dist/es6/combobox/lib/ComboboxMenu.d.ts.map +1 -0
  196. package/dist/es6/combobox/lib/ComboboxMenu.js +57 -0
  197. package/dist/es6/combobox/lib/ComboboxMenuItem.d.ts +178 -0
  198. package/dist/es6/combobox/lib/ComboboxMenuItem.d.ts.map +1 -0
  199. package/dist/es6/combobox/lib/ComboboxMenuItem.js +44 -0
  200. package/dist/es6/combobox/lib/ComboboxMenuList.d.ts +164 -0
  201. package/dist/es6/combobox/lib/ComboboxMenuList.d.ts.map +1 -0
  202. package/dist/es6/combobox/lib/ComboboxMenuList.js +25 -0
  203. package/dist/es6/combobox/lib/useComboboxInputOpenWithArrowKeys.d.ts +84 -0
  204. package/dist/es6/combobox/lib/useComboboxInputOpenWithArrowKeys.d.ts.map +1 -0
  205. package/dist/es6/combobox/lib/useComboboxInputOpenWithArrowKeys.js +17 -0
  206. package/dist/es6/combobox/lib/useComboboxLoader.d.ts +28 -0
  207. package/dist/es6/combobox/lib/useComboboxLoader.d.ts.map +1 -0
  208. package/dist/es6/combobox/lib/useComboboxLoader.js +58 -0
  209. package/dist/es6/combobox/lib/useComboboxModel.d.ts +1998 -0
  210. package/dist/es6/combobox/lib/useComboboxModel.d.ts.map +1 -0
  211. package/dist/es6/combobox/lib/useComboboxModel.js +76 -0
  212. package/dist/es6/common/lib/utils/components.d.ts +9 -23
  213. package/dist/es6/common/lib/utils/components.d.ts.map +1 -1
  214. package/dist/es6/common/lib/utils/components.js +6 -2
  215. package/dist/es6/common/lib/utils/models.js +2 -2
  216. package/dist/es6/index.d.ts +1 -0
  217. package/dist/es6/index.d.ts.map +1 -1
  218. package/dist/es6/index.js +1 -0
  219. package/dist/es6/menu/index.d.ts +1 -1
  220. package/dist/es6/menu/index.d.ts.map +1 -1
  221. package/dist/es6/menu/index.js +1 -1
  222. package/dist/es6/menu/lib/Menu.d.ts +7 -5
  223. package/dist/es6/menu/lib/Menu.d.ts.map +1 -1
  224. package/dist/es6/menu/lib/Menu.js +6 -4
  225. package/dist/es6/menu/lib/MenuContextTarget.d.ts +2 -2
  226. package/dist/es6/menu/lib/MenuItem.d.ts +7 -1
  227. package/dist/es6/menu/lib/MenuItem.d.ts.map +1 -1
  228. package/dist/es6/menu/lib/MenuItem.js +8 -10
  229. package/dist/es6/menu/lib/MenuList.d.ts +3 -3
  230. package/dist/es6/menu/lib/MenuList.d.ts.map +1 -1
  231. package/dist/es6/menu/lib/MenuList.js +4 -3
  232. package/dist/es6/menu/lib/MenuPopper.d.ts +1 -1
  233. package/dist/es6/menu/lib/MenuTarget.d.ts +2 -2
  234. package/dist/es6/menu/lib/useMenuModel.d.ts +2 -2
  235. package/dist/es6/menu/lib/useMenuModel.d.ts.map +1 -1
  236. package/dist/es6/menu/lib/useMenuModel.js +4 -6
  237. package/dist/es6/popup/lib/hooks/usePopupPopper.d.ts +1 -1
  238. package/dist/es6/popup/lib/hooks/usePopupTarget.d.ts +1 -1
  239. package/dist/es6/popup/lib/hooks/usePopupTargetContext.d.ts +1 -1
  240. package/dist/es6/tabs/lib/Tabs.d.ts +18 -120
  241. package/dist/es6/tabs/lib/Tabs.d.ts.map +1 -1
  242. package/dist/es6/tabs/lib/TabsItem.d.ts +0 -1
  243. package/dist/es6/tabs/lib/TabsItem.d.ts.map +1 -1
  244. package/dist/es6/tabs/lib/TabsItem.js +0 -1
  245. package/dist/es6/tabs/lib/TabsList.d.ts +1 -1
  246. package/dist/es6/tabs/lib/TabsMenuPopper.d.ts +1 -1
  247. package/dist/es6/tabs/lib/TabsPanel.d.ts.map +1 -1
  248. package/dist/es6/tabs/lib/useTabsModel.d.ts +8 -20
  249. package/dist/es6/tabs/lib/useTabsModel.d.ts.map +1 -1
  250. package/dist/es6/tabs/lib/useTabsModel.js +1 -0
  251. package/dist/es6/text-input/index.d.ts +1 -1
  252. package/dist/es6/text-input/index.d.ts.map +1 -1
  253. package/dist/es6/text-input/index.js +1 -1
  254. package/dist/es6/text-input/lib/InputGroup.d.ts +94 -9
  255. package/dist/es6/text-input/lib/InputGroup.d.ts.map +1 -1
  256. package/dist/es6/text-input/lib/InputGroup.js +129 -63
  257. package/index.ts +1 -0
  258. package/menu/index.ts +1 -1
  259. package/menu/lib/Menu.tsx +6 -4
  260. package/menu/lib/MenuItem.tsx +9 -12
  261. package/menu/lib/MenuList.tsx +16 -10
  262. package/menu/lib/useMenuModel.tsx +4 -7
  263. package/modal/lib/hooks/useModalHeading.ts +2 -2
  264. package/package.json +3 -3
  265. package/tabs/lib/TabsItem.tsx +10 -13
  266. package/tabs/lib/TabsPanel.tsx +1 -5
  267. package/tabs/lib/useTabsModel.tsx +1 -0
  268. package/text-input/index.ts +1 -1
  269. package/text-input/lib/InputGroup.tsx +177 -95
@@ -1,9 +1,64 @@
1
1
  import React from 'react';
2
- export declare const InputGroupInnerStart: import("@workday/canvas-kit-react/common").ElementComponent<"div", Omit<import("@workday/canvas-kit-react/layout").BoxProps, "display"> & import("@workday/canvas-kit-react/layout").FlexStyleProps & React.HTMLAttributes<HTMLDivElement>>;
3
- export declare const InputGroupInnerEnd: import("@workday/canvas-kit-react/common").ElementComponent<"div", Omit<import("@workday/canvas-kit-react/layout").BoxProps, "display"> & import("@workday/canvas-kit-react/layout").FlexStyleProps & React.HTMLAttributes<HTMLDivElement>>;
4
- export declare const InputGroupInput: import("@workday/canvas-kit-react/common").ElementComponent<import("@workday/canvas-kit-react/common").ElementComponent<"input", import("./TextInput").TextInputProps> & {
2
+ export declare const useInputGroupModel: (<TT_Special_Generic>(config?: (Partial<{}> & {} & {}) | undefined) => {
3
+ state: {
4
+ inputRef: React.RefObject<HTMLInputElement>;
5
+ };
6
+ events: {};
7
+ }) & import("@workday/canvas-kit-react/common").ModelExtras<{}, {}, {
8
+ inputRef: React.RefObject<HTMLInputElement>;
9
+ }, {}, {
10
+ state: {
11
+ inputRef: React.RefObject<HTMLInputElement>;
12
+ };
13
+ events: {};
14
+ }>;
15
+ export declare const InputGroupInnerStart: import("@workday/canvas-kit-react/common").ElementComponentM<"div", Omit<import("@workday/canvas-kit-react/layout").BoxProps, "display"> & import("@workday/canvas-kit-react/layout").FlexStyleProps, {
16
+ state: {
17
+ inputRef: React.RefObject<HTMLInputElement>;
18
+ };
19
+ events: {};
20
+ }>;
21
+ export declare const InputGroupInnerEnd: import("@workday/canvas-kit-react/common").ElementComponentM<"div", Omit<import("@workday/canvas-kit-react/layout").BoxProps, "display"> & import("@workday/canvas-kit-react/layout").FlexStyleProps, {
22
+ state: {
23
+ inputRef: React.RefObject<HTMLInputElement>;
24
+ };
25
+ events: {};
26
+ }>;
27
+ export declare const InputGroupInput: import("@workday/canvas-kit-react/common").ElementComponentM<import("@workday/canvas-kit-react/common").ElementComponent<"input", import("./TextInput").TextInputProps> & {
5
28
  ErrorType: typeof import("@workday/canvas-kit-react/common").ErrorType;
6
- }, Omit<import("@workday/canvas-kit-react/layout").BoxProps, "display"> & import("@workday/canvas-kit-react/layout").FlexStyleProps & React.HTMLAttributes<HTMLDivElement>>;
29
+ }, Omit<import("@workday/canvas-kit-react/layout").BoxProps, "display"> & import("@workday/canvas-kit-react/layout").FlexStyleProps, {
30
+ state: {
31
+ inputRef: React.RefObject<HTMLInputElement>;
32
+ };
33
+ events: {};
34
+ }>;
35
+ export declare const useClearButton: import("@workday/canvas-kit-react/common").BehaviorHook<{
36
+ state: {
37
+ inputRef: React.RefObject<HTMLInputElement>;
38
+ };
39
+ events: {};
40
+ }, {
41
+ readonly role: "presentation";
42
+ readonly tabIndex: -1;
43
+ readonly icon: import("@workday/design-assets-types").CanvasSystemIcon;
44
+ readonly size: "small";
45
+ readonly transition: "opacity 300ms ease";
46
+ readonly onMouseDown: (event: React.MouseEvent) => void;
47
+ readonly onClick: () => void;
48
+ readonly style: {
49
+ readonly opacity: 0 | 1;
50
+ readonly pointerEvents: "none" | "auto";
51
+ };
52
+ }>;
53
+ /**
54
+ * A clear input button. This can be a component later.
55
+ */
56
+ export declare const ClearButton: import("@workday/canvas-kit-react/common").ElementComponentM<import("@workday/canvas-kit-react/common").ElementComponent<"button", import("@workday/canvas-kit-react/button").TertiaryButtonProps>, import("@workday/canvas-kit-react/button").TertiaryButtonProps, {
57
+ state: {
58
+ inputRef: React.RefObject<HTMLInputElement>;
59
+ };
60
+ events: {};
61
+ }>;
7
62
  /**
8
63
  * An `InputGroup` is a container around a {@link TextInput} with optional inner start and end
9
64
  * elements. The inner start and end elements are usually icons or icon buttons visually represented
@@ -24,27 +79,57 @@ export declare const InputGroupInput: import("@workday/canvas-kit-react/common")
24
79
  * </InputGroup>
25
80
  * ```
26
81
  */
27
- export declare const InputGroup: import("@workday/canvas-kit-react/common").ElementComponent<"div", Omit<import("@workday/canvas-kit-react/layout").BoxProps, "display"> & import("@workday/canvas-kit-react/layout").FlexStyleProps & React.HTMLAttributes<HTMLDivElement>> & {
82
+ export declare const InputGroup: import("@workday/canvas-kit-react/common").ElementComponentM<"div", Omit<import("@workday/canvas-kit-react/layout").BoxProps, "display"> & import("@workday/canvas-kit-react/layout").FlexStyleProps & Partial<{}> & {} & {}, {
83
+ state: {
84
+ inputRef: React.RefObject<HTMLInputElement>;
85
+ };
86
+ events: {};
87
+ }> & {
28
88
  /**
29
89
  * A component to show inside and at the start of the input. The input's padding will be
30
90
  * adjusted to not overlap with this element. Use `width` (number of pixels only) to adjust the
31
91
  * width offset. The width defaults to 40px which is the correct width for icons or icon
32
92
  * buttons.
33
93
  */
34
- InnerStart: import("@workday/canvas-kit-react/common").ElementComponent<"div", Omit<import("@workday/canvas-kit-react/layout").BoxProps, "display"> & import("@workday/canvas-kit-react/layout").FlexStyleProps & React.HTMLAttributes<HTMLDivElement>>;
94
+ InnerStart: import("@workday/canvas-kit-react/common").ElementComponentM<"div", Omit<import("@workday/canvas-kit-react/layout").BoxProps, "display"> & import("@workday/canvas-kit-react/layout").FlexStyleProps, {
95
+ state: {
96
+ inputRef: React.RefObject<HTMLInputElement>;
97
+ };
98
+ events: {};
99
+ }>;
35
100
  /**
36
101
  * The input to render. By default, this is a {@link TextInput}. Use the `as` prop to change the
37
102
  * component to be rendered.
38
103
  */
39
- Input: import("@workday/canvas-kit-react/common").ElementComponent<import("@workday/canvas-kit-react/common").ElementComponent<"input", import("./TextInput").TextInputProps> & {
104
+ Input: import("@workday/canvas-kit-react/common").ElementComponentM<import("@workday/canvas-kit-react/common").ElementComponent<"input", import("./TextInput").TextInputProps> & {
40
105
  ErrorType: typeof import("@workday/canvas-kit-react/common").ErrorType;
41
- }, Omit<import("@workday/canvas-kit-react/layout").BoxProps, "display"> & import("@workday/canvas-kit-react/layout").FlexStyleProps & React.HTMLAttributes<HTMLDivElement>>;
106
+ }, Omit<import("@workday/canvas-kit-react/layout").BoxProps, "display"> & import("@workday/canvas-kit-react/layout").FlexStyleProps, {
107
+ state: {
108
+ inputRef: React.RefObject<HTMLInputElement>;
109
+ };
110
+ events: {};
111
+ }>;
42
112
  /**
43
113
  * A component to show inside and at the end of the input. The input's padding will be adjusted
44
114
  * to not overlap with this element. Use `width` (number of pixels only) to adjust the width
45
115
  * offset. The width defaults to 40px which is the correct width for icons or icon buttons
46
116
  * within the input.
47
117
  */
48
- InnerEnd: import("@workday/canvas-kit-react/common").ElementComponent<"div", Omit<import("@workday/canvas-kit-react/layout").BoxProps, "display"> & import("@workday/canvas-kit-react/layout").FlexStyleProps & React.HTMLAttributes<HTMLDivElement>>;
118
+ InnerEnd: import("@workday/canvas-kit-react/common").ElementComponentM<"div", Omit<import("@workday/canvas-kit-react/layout").BoxProps, "display"> & import("@workday/canvas-kit-react/layout").FlexStyleProps, {
119
+ state: {
120
+ inputRef: React.RefObject<HTMLInputElement>;
121
+ };
122
+ events: {};
123
+ }>;
124
+ /**
125
+ * A component that can be added to an input group that will clear the input. It will only render
126
+ * when the input has a value and will fade when a value is entered.
127
+ */
128
+ ClearButton: import("@workday/canvas-kit-react/common").ElementComponentM<import("@workday/canvas-kit-react/common").ElementComponent<"button", import("@workday/canvas-kit-react/button").TertiaryButtonProps>, import("@workday/canvas-kit-react/button").TertiaryButtonProps, {
129
+ state: {
130
+ inputRef: React.RefObject<HTMLInputElement>;
131
+ };
132
+ events: {};
133
+ }>;
49
134
  };
50
135
  //# sourceMappingURL=InputGroup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InputGroup.d.ts","sourceRoot":"","sources":["../../../../text-input/lib/InputGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,eAAO,MAAM,oBAAoB,6OAe/B,CAAC;AAEH,eAAO,MAAM,kBAAkB,6OAe7B,CAAC;AAEH,eAAO,MAAM,eAAe;;2KAI1B,CAAC;AAmBH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,UAAU;IA8DnB;;;;;OAKG;;IAEH;;;OAGG;;;;IAEH;;;;;OAKG;;CAGL,CAAC"}
1
+ {"version":3,"file":"InputGroup.d.ts","sourceRoot":"","sources":["../../../../text-input/lib/InputGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAmB1B,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAS7B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;EAc/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;EAc7B,CAAC;AAUH,eAAO,MAAM,eAAe;;;;;;;EAK1B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;kCAwBJ,gBAAgB;;;;;;EAYrC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;EAKtB,CAAC;AAmBH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,UAAU;;;;;;IAInB;;;;;OAKG;;;;;;;IAEH;;;OAGG;;;;;;;;;IAEH;;;;;OAKG;;;;;;;IAEH;;;OAGG;;;;;;;CA6DL,CAAC"}
@@ -1,22 +1,83 @@
1
1
  import React from 'react';
2
2
  import { space } from '@workday/canvas-kit-react/tokens';
3
- import { createComponent, useIsRTL } from '@workday/canvas-kit-react/common';
3
+ import { createContainer, createElemPropsHook, createModelHook, createSubcomponent, dispatchInputEvent, useForkRef, useIsRTL, } from '@workday/canvas-kit-react/common';
4
4
  import { Flex } from '@workday/canvas-kit-react/layout';
5
+ import { TertiaryButton } from '@workday/canvas-kit-react/button';
6
+ import { xSmallIcon } from '@workday/canvas-system-icons-web';
5
7
  import { TextInput } from './TextInput';
6
- export const InputGroupInnerStart = createComponent('div')({
7
- Component(elemProps, ref, Element) {
8
- return (React.createElement(Flex, Object.assign({ ref: ref, as: Element, position: "absolute", alignItems: "center", justifyContent: "center", height: "xl", width: "xl" }, elemProps)));
9
- },
8
+ export const useInputGroupModel = createModelHook({})(() => {
9
+ const inputRef = React.useRef(null);
10
+ return {
11
+ state: {
12
+ inputRef,
13
+ },
14
+ events: {},
15
+ };
10
16
  });
11
- export const InputGroupInnerEnd = createComponent('div')({
12
- Component(elemProps, ref, Element) {
13
- return (React.createElement(Flex, Object.assign({ ref: ref, as: Element, position: "absolute", alignItems: "center", justifyContent: "center", height: "xl", width: "xl" }, elemProps)));
14
- },
17
+ export const InputGroupInnerStart = createSubcomponent('div')({
18
+ modelHook: useInputGroupModel,
19
+ })((elemProps, Element) => {
20
+ return (React.createElement(Flex, Object.assign({ as: Element, position: "absolute", alignItems: "center", justifyContent: "center", height: "xl", width: "xl" }, elemProps)));
15
21
  });
16
- export const InputGroupInput = createComponent(TextInput)({
17
- Component(elemProps, ref, Element) {
18
- return React.createElement(Flex, Object.assign({ ref: ref, as: Element, width: "100%" }, elemProps));
19
- },
22
+ export const InputGroupInnerEnd = createSubcomponent('div')({
23
+ modelHook: useInputGroupModel,
24
+ })((elemProps, Element) => {
25
+ return (React.createElement(Flex, Object.assign({ as: Element, position: "absolute", alignItems: "center", justifyContent: "center", height: "xl", width: "xl" }, elemProps)));
26
+ });
27
+ const useInputGroupInput = createElemPropsHook(useInputGroupModel)((model, ref) => {
28
+ const elementRef = useForkRef(ref, model.state.inputRef);
29
+ return {
30
+ ref: elementRef,
31
+ };
32
+ });
33
+ export const InputGroupInput = createSubcomponent(TextInput)({
34
+ modelHook: useInputGroupModel,
35
+ elemPropsHook: useInputGroupInput,
36
+ })((elemProps, Element) => {
37
+ return React.createElement(Flex, Object.assign({ as: Element, width: "100%" }, elemProps));
38
+ });
39
+ export const useClearButton = createElemPropsHook(useInputGroupModel)(model => {
40
+ const [inputHasValue, setInputHasValue] = React.useState(false);
41
+ React.useLayoutEffect(() => {
42
+ const input = model.state.inputRef.current;
43
+ if (input) {
44
+ input.addEventListener('input', () => {
45
+ setInputHasValue(!!input.value);
46
+ });
47
+ }
48
+ }, [model.state.inputRef]);
49
+ return {
50
+ // This element does not need to be accessible via screen reader. The user can already clear
51
+ // an input
52
+ role: 'presentation',
53
+ // A clear input button doesn't need focus. There's already keyboard keys to clear an input
54
+ tabIndex: -1,
55
+ icon: xSmallIcon,
56
+ // "small" is needed to render correctly within a `TextInput`
57
+ size: 'small',
58
+ transition: 'opacity 300ms ease',
59
+ // prevent a focus change to the button. Focus should stay in the input.
60
+ onMouseDown(event) {
61
+ event.preventDefault();
62
+ },
63
+ onClick() {
64
+ // This will clear the input's value
65
+ dispatchInputEvent(model.state.inputRef.current, '');
66
+ },
67
+ style: {
68
+ opacity: inputHasValue ? 1 : 0,
69
+ pointerEvents: inputHasValue ? 'auto' : 'none',
70
+ },
71
+ };
72
+ });
73
+ /**
74
+ * A clear input button. This can be a component later.
75
+ */
76
+ export const ClearButton = createSubcomponent(TertiaryButton)({
77
+ modelHook: useInputGroupModel,
78
+ elemPropsHook: useClearButton,
79
+ })((elemProps, Element) => {
80
+ return React.createElement(Element, Object.assign({}, elemProps));
20
81
  });
21
82
  // make sure we always use pixels if the input is a number - this is required for `calc`
22
83
  const toPx = (input) => {
@@ -53,57 +114,9 @@ const wrapInCalc = (values) => {
53
114
  * </InputGroup>
54
115
  * ```
55
116
  */
56
- export const InputGroup = createComponent('div')({
117
+ export const InputGroup = createContainer('div')({
57
118
  displayName: 'InputGroup',
58
- Component({ children, ...elemProps }, ref, Element) {
59
- const isRTL = useIsRTL();
60
- const offsetsStart = [];
61
- const offsetsEnd = [];
62
- // Collect the widths of the `InnerStart` and `InnerEnd` components into `offsetStart` and
63
- // `offsetEnd` arrays
64
- React.Children.forEach(children, child => {
65
- if (React.isValidElement(child) && child.type === InputGroupInnerStart) {
66
- const width = child.props.width || space.xl;
67
- offsetsStart.push(width);
68
- }
69
- if (React.isValidElement(child) && child.type === InputGroupInnerEnd) {
70
- const width = child.props.width || space.xl;
71
- offsetsEnd.push(width);
72
- }
73
- });
74
- // keep track of the index offsets to make sure we calculate the correct position offset
75
- let indexStart = 0;
76
- let indexEnd = 0;
77
- // Loop over all the children and set the correct padding and positions
78
- const mappedChildren = React.Children.map(children, child => {
79
- if (React.isValidElement(child)) {
80
- if (child.type === InputGroupInput) {
81
- return React.cloneElement(child, {
82
- paddingInlineStart: wrapInCalc(offsetsStart),
83
- paddingInlineEnd: wrapInCalc(offsetsEnd),
84
- });
85
- }
86
- if (child.type === InputGroupInnerStart) {
87
- const offset = wrapInCalc(offsetsStart.slice(0, indexStart)) || 0;
88
- indexStart++;
89
- return React.cloneElement(child, {
90
- left: isRTL ? undefined : offset,
91
- right: isRTL ? offset : undefined,
92
- });
93
- }
94
- if (child.type === InputGroupInnerEnd) {
95
- const offset = wrapInCalc(offsetsEnd.slice(indexEnd, -1)) || 0;
96
- indexEnd++;
97
- return React.cloneElement(child, {
98
- left: isRTL ? offset : undefined,
99
- right: isRTL ? undefined : offset,
100
- });
101
- }
102
- }
103
- return child;
104
- });
105
- return (React.createElement(Flex, Object.assign({ ref: ref, as: Element, position: "relative" }, elemProps), mappedChildren));
106
- },
119
+ modelHook: useInputGroupModel,
107
120
  subComponents: {
108
121
  /**
109
122
  * A component to show inside and at the start of the input. The input's padding will be
@@ -124,5 +137,58 @@ export const InputGroup = createComponent('div')({
124
137
  * within the input.
125
138
  */
126
139
  InnerEnd: InputGroupInnerEnd,
140
+ /**
141
+ * A component that can be added to an input group that will clear the input. It will only render
142
+ * when the input has a value and will fade when a value is entered.
143
+ */
144
+ ClearButton: ClearButton,
127
145
  },
146
+ })(({ children, ...elemProps }, Element) => {
147
+ const isRTL = useIsRTL();
148
+ const offsetsStart = [];
149
+ const offsetsEnd = [];
150
+ // Collect the widths of the `InnerStart` and `InnerEnd` components into `offsetStart` and
151
+ // `offsetEnd` arrays
152
+ React.Children.forEach(children, child => {
153
+ if (React.isValidElement(child) && child.type === InputGroupInnerStart) {
154
+ const width = child.props.width || space.xl;
155
+ offsetsStart.push(width);
156
+ }
157
+ if (React.isValidElement(child) && child.type === InputGroupInnerEnd) {
158
+ const width = child.props.width || space.xl;
159
+ offsetsEnd.push(width);
160
+ }
161
+ });
162
+ // keep track of the index offsets to make sure we calculate the correct position offset
163
+ let indexStart = 0;
164
+ let indexEnd = 0;
165
+ // Loop over all the children and set the correct padding and positions
166
+ const mappedChildren = React.Children.map(children, child => {
167
+ if (React.isValidElement(child)) {
168
+ if (child.type === InputGroupInput) {
169
+ return React.cloneElement(child, {
170
+ paddingInlineStart: wrapInCalc(offsetsStart),
171
+ paddingInlineEnd: wrapInCalc(offsetsEnd),
172
+ });
173
+ }
174
+ if (child.type === InputGroupInnerStart) {
175
+ const offset = wrapInCalc(offsetsStart.slice(0, indexStart)) || 0;
176
+ indexStart++;
177
+ return React.cloneElement(child, {
178
+ left: isRTL ? undefined : offset,
179
+ right: isRTL ? offset : undefined,
180
+ });
181
+ }
182
+ if (child.type === InputGroupInnerEnd) {
183
+ const offset = wrapInCalc(offsetsEnd.slice(indexEnd, -1)) || 0;
184
+ indexEnd++;
185
+ return React.cloneElement(child, {
186
+ left: isRTL ? offset : undefined,
187
+ right: isRTL ? undefined : offset,
188
+ });
189
+ }
190
+ }
191
+ return child;
192
+ });
193
+ return (React.createElement(Flex, Object.assign({ as: Element, position: "relative" }, elemProps), mappedChildren));
128
194
  });
package/index.ts CHANGED
@@ -8,6 +8,7 @@ export * from './card';
8
8
  export * from './checkbox';
9
9
  export * from './collection';
10
10
  export * from './color-picker';
11
+ export * from './combobox';
11
12
  export * from './common';
12
13
  export * from './dialog';
13
14
  export * from './disclosure';
package/menu/index.ts CHANGED
@@ -2,7 +2,7 @@ export {useMenuModel} from './lib/useMenuModel';
2
2
  export {Menu} from './lib/Menu';
3
3
 
4
4
  export {useMenuCard} from './lib/MenuCard';
5
- export {useMenuItem} from './lib/MenuItem';
5
+ export {useMenuItem, StyledMenuItem} from './lib/MenuItem';
6
6
  export {useMenuList} from './lib/MenuList';
7
7
  export {useMenuPopper} from './lib/MenuPopper';
8
8
  export {useMenuTarget, useMenuTargetContext} from './lib/MenuTarget';
package/menu/lib/Menu.tsx CHANGED
@@ -83,7 +83,7 @@ export const Menu = createContainer()({
83
83
  * return (
84
84
  * <Menu model={model}>
85
85
  * <Menu.List>
86
- * {(item) => <Menu.Item name={item.id}>{item.text}</Menu.Item>}
86
+ * {(item) => <Menu.Item data-id={item.id}>{item.text}</Menu.Item>}
87
87
  * </Menu.List>
88
88
  * </Menu>
89
89
  * )
@@ -92,9 +92,11 @@ export const Menu = createContainer()({
92
92
  */
93
93
  List: MenuList,
94
94
  /**
95
- * A menu item has an optional `name` prop that identifies the item in the menu list and will be
96
- * passed to the optional `onSelect` callback of the menu model. A menu item can contain any
97
- * HTML. If more complex HTML is provided, consider
95
+ * A `Menu.Item` has an optional `data-id` prop that identifies the item in the `Menu.List` and
96
+ * will be passed to the optional `onSelect` callback of the `Menu` model. A `Menu.Item` can
97
+ * contain any HTML. If more complex HTML is provided, add `data-text` to the `Menu.Item`
98
+ * component if using the static API. If you're using the dynamic API, pass `getTextValue` to
99
+ * the model.
98
100
  */
99
101
  Item: MenuItem,
100
102
  Divider: MenuDivider,
@@ -40,7 +40,7 @@ export interface MenuItemProps {
40
40
  'aria-disabled'?: boolean;
41
41
  }
42
42
 
43
- const StyledItem = styled(Box.as('button'))<StyledType>(
43
+ export const StyledMenuItem = styled(Box.as('button'))<StyledType>(
44
44
  ({theme}) => {
45
45
  return {
46
46
  ...type.levels.subtext.large,
@@ -65,7 +65,7 @@ const StyledItem = styled(Box.as('button'))<StyledType>(
65
65
  fill: iconColors.hover,
66
66
  },
67
67
  },
68
- '&:focus': {
68
+ '&:focus, &.focus': {
69
69
  outline: 'none',
70
70
  backgroundColor: theme.canvas.palette.primary.main,
71
71
  color: typeColors.inverse,
@@ -89,7 +89,7 @@ const StyledItem = styled(Box.as('button'))<StyledType>(
89
89
  fill: iconColors.hover,
90
90
  },
91
91
  },
92
- '&:focus': {
92
+ '&:focus, &.focus': {
93
93
  '.wd-icon-background ~ .wd-icon-accent, .wd-icon-background ~ .wd-icon-accent2': {
94
94
  fill: iconColors.hover,
95
95
  },
@@ -102,7 +102,7 @@ const StyledItem = styled(Box.as('button'))<StyledType>(
102
102
  '.wd-icon-fill, .wd-icon-accent, .wd-icon-accent2': {
103
103
  fill: iconColors.disabled,
104
104
  },
105
- '&:focus': {
105
+ '&:focus, &.focus': {
106
106
  backgroundColor: colors.blueberry200,
107
107
  '.wd-icon-background ~ .wd-icon-accent, .wd-icon-background ~ .wd-icon-accent2': {
108
108
  fill: iconColors.disabled,
@@ -133,7 +133,7 @@ const StyledItem = styled(Box.as('button'))<StyledType>(
133
133
  export const useMenuItem = composeHooks(
134
134
  createElemPropsHook(useMenuModel)(
135
135
  (model, ref, elemProps: {'data-id': string} = {'data-id': ''}) => {
136
- const {localRef, elementRef} = useLocalRef(ref);
136
+ const {localRef, elementRef} = useLocalRef(ref as React.Ref<HTMLElement>);
137
137
  const id = elemProps['data-id'];
138
138
 
139
139
  // focus on the item with the cursor
@@ -142,14 +142,11 @@ export const useMenuItem = composeHooks(
142
142
  if (model.state.cursorId === id) {
143
143
  // delay focus changes to allow PopperJS to position
144
144
  requestAnimationFrame(() => {
145
- localRef.current.focus();
145
+ localRef.current?.focus();
146
146
  });
147
147
  }
148
148
  }
149
- // We only need to run when the ID or cursorId has changed. If the static API is used, the first time
150
- // this is run, the id will be blank
151
- // eslint-disable-next-line react-hooks/exhaustive-deps
152
- }, [id, model.state.cursorId]);
149
+ }, [id, localRef, model.state.cursorId, model.state.mode]);
153
150
 
154
151
  return {
155
152
  ref: elementRef,
@@ -182,9 +179,9 @@ export const MenuItem = createSubcomponent('button')({
182
179
  })<MenuItemProps>(({children, ...elemProps}, Element) => {
183
180
  return (
184
181
  <OverflowTooltip placement="left">
185
- <StyledItem minHeight={space.xl} as={Element} {...elemProps}>
182
+ <StyledMenuItem minHeight={space.xl} as={Element} {...elemProps}>
186
183
  {children}
187
- </StyledItem>
184
+ </StyledMenuItem>
188
185
  </OverflowTooltip>
189
186
  );
190
187
  });
@@ -5,25 +5,31 @@ import {
5
5
  createSubcomponent,
6
6
  createElemPropsHook,
7
7
  ExtractProps,
8
+ composeHooks,
8
9
  } from '@workday/canvas-kit-react/common';
9
- import {ListBox} from '@workday/canvas-kit-react/collection';
10
- import {Flex} from '@workday/canvas-kit-react/layout';
10
+ import {ListBox, ListProps} from '@workday/canvas-kit-react/collection';
11
+ import {useReturnFocus, useFocusRedirect} from '@workday/canvas-kit-react/popup';
11
12
 
12
13
  import {useMenuModel} from './useMenuModel';
13
14
 
14
- export interface MenuListProps<T = any> extends Omit<ExtractProps<typeof Flex, never>, 'children'> {
15
+ export interface MenuListProps<T = any>
16
+ extends Omit<ExtractProps<typeof ListBox, never>, 'children'> {
15
17
  /**
16
18
  * The label text of the MenuList.
17
19
  */
18
- children: React.ReactNode | ((item: T) => React.ReactNode);
20
+ children: ListProps<T>['children'];
19
21
  }
20
22
 
21
- export const useMenuList = createElemPropsHook(useMenuModel)(model => {
22
- return {
23
- role: 'menu',
24
- 'aria-labelledby': model.state.id,
25
- };
26
- });
23
+ export const useMenuList = composeHooks(
24
+ createElemPropsHook(useMenuModel)(model => {
25
+ return {
26
+ role: 'menu',
27
+ 'aria-labelledby': model.state.id,
28
+ };
29
+ }),
30
+ useReturnFocus,
31
+ useFocusRedirect
32
+ );
27
33
 
28
34
  export const MenuList = createSubcomponent('div')({
29
35
  displayName: 'Menu.List',
@@ -2,9 +2,7 @@ import {createModelHook} from '@workday/canvas-kit-react/common';
2
2
  import {
3
3
  useAlwaysCloseOnOutsideClick,
4
4
  useCloseOnEscape,
5
- useFocusRedirect,
6
5
  usePopupModel,
7
- useReturnFocus,
8
6
  } from '@workday/canvas-kit-react/popup';
9
7
  import {
10
8
  multiSelectionManager,
@@ -18,16 +16,17 @@ export const useMenuModel = createModelHook({
18
16
  ...usePopupModel.defaultConfig,
19
17
  /** Determines the default selection manager used as well as if the menu closes when an item is selected */
20
18
  mode: 'single' as 'single' | 'multiple',
19
+ // don't virtualize menus by default to avoid oddities with card width
20
+
21
+ shouldVirtualize: false,
21
22
  },
22
23
  requiredConfig: {
23
24
  ...useListModel.requiredConfig,
24
25
  ...usePopupModel.requiredConfig,
25
26
  },
26
27
  })(config => {
27
- // don't virtualize menus by default to avoid oddities with card width
28
28
  const list = useListModel(
29
29
  useListModel.mergeConfig(config, {
30
- shouldVirtualize: false,
31
30
  selection: config.mode === 'single' ? singleSelectionManager : multiSelectionManager,
32
31
  })
33
32
  );
@@ -43,8 +42,6 @@ export const useMenuModel = createModelHook({
43
42
 
44
43
  useAlwaysCloseOnOutsideClick(popup);
45
44
  useCloseOnEscape(popup);
46
- useReturnFocus(popup);
47
- useFocusRedirect(popup);
48
45
 
49
46
  const state = {mode: config.mode, ...list.state, ...popup.state};
50
47
 
@@ -53,5 +50,5 @@ export const useMenuModel = createModelHook({
53
50
  ...popup.events,
54
51
  };
55
52
 
56
- return {...list, state, events};
53
+ return {...list, ...popup, state, events};
57
54
  });
@@ -10,8 +10,8 @@ import {usePopupHeading, usePopupModel} from '@workday/canvas-kit-react/popup';
10
10
 
11
11
  export const useModalHeading = composeHooks(
12
12
  usePopupHeading,
13
- createElemPropsHook(usePopupModel)((_, ref?: React.Ref<HTMLElement>) => {
14
- const {elementRef, localRef} = useLocalRef(ref);
13
+ createElemPropsHook(usePopupModel)((_, ref) => {
14
+ const {elementRef, localRef} = useLocalRef(ref as React.Ref<HTMLElement>);
15
15
 
16
16
  useMountLayout(() => {
17
17
  if (localRef.current?.parentElement?.querySelector('button')?.textContent) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workday/canvas-kit-react",
3
- "version": "9.0.0-alpha.418-next.20+fbc6e240",
3
+ "version": "9.0.0-alpha.420-next.22+87587db5",
4
4
  "description": "The parent module that contains all Workday Canvas Kit React components",
5
5
  "author": "Workday, Inc. (https://www.workday.com)",
6
6
  "license": "Apache-2.0",
@@ -49,7 +49,7 @@
49
49
  "@emotion/styled": "^11.6.0",
50
50
  "@popperjs/core": "^2.5.4",
51
51
  "@workday/canvas-colors-web": "^2.0.0",
52
- "@workday/canvas-kit-popup-stack": "^9.0.0-alpha.418-next.20+fbc6e240",
52
+ "@workday/canvas-kit-popup-stack": "^9.0.0-alpha.420-next.22+87587db5",
53
53
  "@workday/canvas-system-icons-web": "^3.0.0",
54
54
  "@workday/design-assets-types": "^0.2.8",
55
55
  "chroma-js": "^2.1.0",
@@ -66,5 +66,5 @@
66
66
  "@workday/canvas-accent-icons-web": "^3.0.0",
67
67
  "@workday/canvas-applet-icons-web": "^2.0.0"
68
68
  },
69
- "gitHead": "fbc6e240f8596001531f9f5374943f2f7afa49ec"
69
+ "gitHead": "87587db5b8bc197a9b1a544d8851b884848647e9"
70
70
  }
@@ -170,21 +170,18 @@ export const StyledTabItem = styled(Box.as('button'))<StyledType & Pick<TabsItem
170
170
  );
171
171
 
172
172
  export const useTabsItem = composeHooks(
173
- createElemPropsHook(useTabsModel)(
174
- ({state}, _?: React.Ref<HTMLButtonElement>, elemProps: {'data-id'?: string} = {}) => {
175
- const name = elemProps['data-id'] || '';
173
+ createElemPropsHook(useTabsModel)(({state}, _, elemProps: {'data-id'?: string} = {}) => {
174
+ const name = elemProps['data-id'] || '';
176
175
 
177
- const selected = !!elemProps['data-id'] && isSelected(name, state);
176
+ const selected = !!elemProps['data-id'] && isSelected(name, state);
178
177
 
179
- return {
180
- type: 'button' as const,
181
- role: 'tab' as const,
182
- id: `${state.id}-${name}`,
183
- 'aria-selected': selected,
184
- 'aria-controls': `tabpanel-${state.id}-${name}`,
185
- };
186
- }
187
- ),
178
+ return {
179
+ type: 'button' as const,
180
+ role: 'tab' as const,
181
+ 'aria-selected': selected,
182
+ 'aria-controls': `tabpanel-${state.id}-${name}`,
183
+ };
184
+ }),
188
185
  useListItemSelect,
189
186
  useOverflowListItemMeasure,
190
187
  useListItemRovingFocus,
@@ -39,11 +39,7 @@ export interface TabPanelProps extends ExtractProps<typeof Box, never> {
39
39
  const StyledTabsPanel = styled(Box)<StyledType>(hideMouseFocus);
40
40
 
41
41
  export const useTabsPanel = createElemPropsHook(useTabsModel)(
42
- (
43
- {state, events},
44
- _?: React.Ref<HTMLElement>,
45
- elemProps: {'data-id'?: string; item?: Item<any>} = {}
46
- ) => {
42
+ ({state, events}, _, elemProps: {'data-id'?: string; item?: Item<any>} = {}) => {
47
43
  const [localId, setLocalId] = React.useState(elemProps['data-id'] || elemProps.item?.id || '');
48
44
 
49
45
  useMountLayout(() => {
@@ -48,6 +48,7 @@ export const useTabsModel = createModelHook({
48
48
  menuConfig: {} as typeof useMenuModel.TConfig,
49
49
  },
50
50
  requiredConfig: useOverflowListModel.requiredConfig,
51
+ contextOverride: useOverflowListModel.Context,
51
52
  })(config => {
52
53
  const initialSelectedRef = React.useRef(config.initialTab);
53
54
  const getId = config.getId || defaultGetId;