@workday/canvas-kit-react 10.0.0-alpha.539-next.0 → 10.0.0-alpha.543-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/checkbox/lib/Checkbox.tsx +24 -33
  2. package/collection/index.ts +1 -0
  3. package/collection/lib/useBaseListModel.tsx +3 -3
  4. package/collection/lib/useListItemRegister.tsx +1 -1
  5. package/collection/lib/useListRenderItem.tsx +2 -2
  6. package/combobox/index.ts +11 -4
  7. package/combobox/lib/Combobox.tsx +1 -1
  8. package/combobox/lib/ComboboxCard.tsx +1 -1
  9. package/combobox/lib/ComboboxInput.tsx +2 -90
  10. package/combobox/lib/ComboboxMenu.tsx +4 -3
  11. package/combobox/lib/ComboboxMenuItem.tsx +9 -8
  12. package/combobox/lib/ComboboxMenuList.tsx +1 -1
  13. package/combobox/lib/ComboboxPopper.tsx +20 -0
  14. package/combobox/lib/hooks/index.ts +9 -0
  15. package/combobox/lib/hooks/useComboboxInput.ts +88 -0
  16. package/combobox/lib/hooks/useComboboxKeyboardTypeAhead.ts +127 -0
  17. package/combobox/lib/hooks/useComboboxListKeyboardHandler.ts +23 -0
  18. package/combobox/lib/{useComboboxModel.tsx → hooks/useComboboxModel.tsx} +6 -2
  19. package/combobox/lib/hooks/useComboboxMoveCursorToSelected.tsx +27 -0
  20. package/combobox/lib/hooks/useComboboxResetCursorToSelected.tsx +18 -0
  21. package/combobox/lib/hooks/useSetPopupWidth.ts +16 -0
  22. package/common/lib/utils/components.ts +284 -274
  23. package/common/lib/utils/models.ts +67 -84
  24. package/dist/commonjs/checkbox/lib/Checkbox.d.ts.map +1 -1
  25. package/dist/commonjs/checkbox/lib/Checkbox.js +13 -17
  26. package/dist/commonjs/collection/index.d.ts +1 -0
  27. package/dist/commonjs/collection/index.d.ts.map +1 -1
  28. package/dist/commonjs/collection/index.js +3 -1
  29. package/dist/commonjs/collection/lib/useBaseListModel.d.ts +1 -1
  30. package/dist/commonjs/collection/lib/useBaseListModel.d.ts.map +1 -1
  31. package/dist/commonjs/collection/lib/useBaseListModel.js +2 -2
  32. package/dist/commonjs/collection/lib/useListItemRegister.js +2 -2
  33. package/dist/commonjs/collection/lib/useListRenderItem.js +2 -2
  34. package/dist/commonjs/combobox/index.d.ts +1 -4
  35. package/dist/commonjs/combobox/index.d.ts.map +1 -1
  36. package/dist/commonjs/combobox/index.js +11 -9
  37. package/dist/commonjs/combobox/lib/Combobox.d.ts +9 -3
  38. package/dist/commonjs/combobox/lib/Combobox.d.ts.map +1 -1
  39. package/dist/commonjs/combobox/lib/Combobox.js +2 -2
  40. package/dist/commonjs/combobox/lib/ComboboxCard.js +3 -3
  41. package/dist/commonjs/combobox/lib/ComboboxInput.d.ts +1 -106
  42. package/dist/commonjs/combobox/lib/ComboboxInput.d.ts.map +1 -1
  43. package/dist/commonjs/combobox/lib/ComboboxInput.js +4 -71
  44. package/dist/commonjs/combobox/lib/ComboboxMenu.d.ts +9 -3
  45. package/dist/commonjs/combobox/lib/ComboboxMenu.d.ts.map +1 -1
  46. package/dist/commonjs/combobox/lib/ComboboxMenu.js +5 -4
  47. package/dist/commonjs/combobox/lib/ComboboxMenuItem.d.ts +7 -1
  48. package/dist/commonjs/combobox/lib/ComboboxMenuItem.d.ts.map +1 -1
  49. package/dist/commonjs/combobox/lib/ComboboxMenuItem.js +7 -7
  50. package/dist/commonjs/combobox/lib/ComboboxMenuList.js +2 -2
  51. package/dist/commonjs/combobox/lib/ComboboxPopper.d.ts +97 -0
  52. package/dist/commonjs/combobox/lib/ComboboxPopper.d.ts.map +1 -0
  53. package/dist/commonjs/{select/lib/SelectOption.js → combobox/lib/ComboboxPopper.js} +12 -8
  54. package/dist/commonjs/combobox/lib/hooks/index.d.ts +10 -0
  55. package/dist/commonjs/combobox/lib/hooks/index.d.ts.map +1 -0
  56. package/dist/commonjs/combobox/lib/hooks/index.js +21 -0
  57. package/dist/commonjs/combobox/lib/hooks/useComboboxInput.d.ts +107 -0
  58. package/dist/commonjs/combobox/lib/hooks/useComboboxInput.d.ts.map +1 -0
  59. package/dist/commonjs/combobox/lib/hooks/useComboboxInput.js +74 -0
  60. package/dist/{es6/combobox/lib → commonjs/combobox/lib/hooks}/useComboboxInputOpenWithArrowKeys.d.ts +6 -6
  61. package/dist/commonjs/combobox/lib/hooks/useComboboxInputOpenWithArrowKeys.d.ts.map +1 -0
  62. package/dist/commonjs/combobox/lib/hooks/useComboboxKeyboardTypeAhead.d.ts +101 -0
  63. package/dist/commonjs/combobox/lib/hooks/useComboboxKeyboardTypeAhead.d.ts.map +1 -0
  64. package/dist/commonjs/combobox/lib/hooks/useComboboxKeyboardTypeAhead.js +109 -0
  65. package/dist/commonjs/combobox/lib/hooks/useComboboxListKeyboardHandler.d.ts +84 -0
  66. package/dist/commonjs/combobox/lib/hooks/useComboboxListKeyboardHandler.d.ts.map +1 -0
  67. package/dist/commonjs/combobox/lib/hooks/useComboboxListKeyboardHandler.js +22 -0
  68. package/dist/commonjs/combobox/lib/hooks/useComboboxLoader.d.ts.map +1 -0
  69. package/dist/commonjs/combobox/lib/{useComboboxModel.d.ts → hooks/useComboboxModel.d.ts} +196 -196
  70. package/dist/commonjs/combobox/lib/hooks/useComboboxModel.d.ts.map +1 -0
  71. package/dist/commonjs/combobox/lib/{useComboboxModel.js → hooks/useComboboxModel.js} +3 -2
  72. package/dist/commonjs/combobox/lib/hooks/useComboboxMoveCursorToSelected.d.ts +82 -0
  73. package/dist/commonjs/combobox/lib/hooks/useComboboxMoveCursorToSelected.d.ts.map +1 -0
  74. package/dist/commonjs/combobox/lib/hooks/useComboboxMoveCursorToSelected.js +33 -0
  75. package/dist/commonjs/combobox/lib/hooks/useComboboxResetCursorToSelected.d.ts +82 -0
  76. package/dist/commonjs/combobox/lib/hooks/useComboboxResetCursorToSelected.d.ts.map +1 -0
  77. package/dist/commonjs/combobox/lib/hooks/useComboboxResetCursorToSelected.js +23 -0
  78. package/dist/commonjs/combobox/lib/hooks/useSetPopupWidth.d.ts +82 -0
  79. package/dist/commonjs/combobox/lib/hooks/useSetPopupWidth.d.ts.map +1 -0
  80. package/dist/commonjs/combobox/lib/hooks/useSetPopupWidth.js +22 -0
  81. package/dist/commonjs/common/lib/utils/components.d.ts.map +1 -1
  82. package/dist/commonjs/common/lib/utils/models.d.ts +4 -4
  83. package/dist/commonjs/common/lib/utils/models.d.ts.map +1 -1
  84. package/dist/commonjs/common/lib/utils/models.js +7 -8
  85. package/dist/commonjs/form-field/lib/FormField.d.ts.map +1 -1
  86. package/dist/commonjs/form-field/lib/FormField.js +3 -2
  87. package/dist/commonjs/menu/lib/MenuPopper.d.ts.map +1 -1
  88. package/dist/commonjs/menu/lib/MenuPopper.js +10 -1
  89. package/dist/commonjs/popup/lib/PopupPopper.d.ts.map +1 -1
  90. package/dist/commonjs/popup/lib/PopupPopper.js +10 -1
  91. package/dist/commonjs/radio/lib/Radio.d.ts.map +1 -1
  92. package/dist/commonjs/radio/lib/Radio.js +17 -22
  93. package/dist/commonjs/select/index.d.ts +1 -1
  94. package/dist/commonjs/select/index.d.ts.map +1 -1
  95. package/dist/commonjs/select/index.js +1 -1
  96. package/dist/commonjs/select/lib/Select.d.ts +2634 -18
  97. package/dist/commonjs/select/lib/Select.d.ts.map +1 -1
  98. package/dist/commonjs/select/lib/Select.js +141 -84
  99. package/dist/commonjs/select/lib/hooks/index.d.ts +4 -0
  100. package/dist/commonjs/select/lib/hooks/index.d.ts.map +1 -0
  101. package/dist/commonjs/select/lib/hooks/index.js +15 -0
  102. package/dist/commonjs/select/lib/hooks/useSelectCard.d.ts +83 -0
  103. package/dist/commonjs/select/lib/hooks/useSelectCard.d.ts.map +1 -0
  104. package/dist/commonjs/select/lib/hooks/useSelectCard.js +13 -0
  105. package/dist/commonjs/select/lib/hooks/useSelectInput.d.ts +112 -0
  106. package/dist/commonjs/select/lib/hooks/useSelectInput.d.ts.map +1 -0
  107. package/dist/commonjs/select/lib/hooks/useSelectInput.js +49 -0
  108. package/dist/commonjs/select/lib/hooks/useSelectModel.d.ts +1779 -0
  109. package/dist/commonjs/select/lib/hooks/useSelectModel.d.ts.map +1 -0
  110. package/dist/commonjs/select/lib/hooks/useSelectModel.js +32 -0
  111. package/dist/commonjs/table/lib/Table.d.ts +1 -2
  112. package/dist/commonjs/table/lib/Table.d.ts.map +1 -1
  113. package/dist/commonjs/table/lib/Table.js +1 -2
  114. package/dist/commonjs/table/lib/TableRow.d.ts +3 -6
  115. package/dist/commonjs/table/lib/TableRow.d.ts.map +1 -1
  116. package/dist/commonjs/table/lib/TableRow.js +3 -5
  117. package/dist/commonjs/text-area/lib/TextArea.d.ts.map +1 -1
  118. package/dist/commonjs/text-area/lib/TextArea.js +1 -1
  119. package/dist/commonjs/text-input/lib/TextInput.js +1 -1
  120. package/dist/commonjs/tokens/lib/space.d.ts +44 -31
  121. package/dist/commonjs/tokens/lib/space.d.ts.map +1 -1
  122. package/dist/commonjs/tokens/lib/space.js +22 -29
  123. package/dist/commonjs/tooltip/lib/TooltipContainer.js +2 -2
  124. package/dist/es6/checkbox/lib/Checkbox.d.ts.map +1 -1
  125. package/dist/es6/checkbox/lib/Checkbox.js +14 -18
  126. package/dist/es6/collection/index.d.ts +1 -0
  127. package/dist/es6/collection/index.d.ts.map +1 -1
  128. package/dist/es6/collection/index.js +1 -0
  129. package/dist/es6/collection/lib/useBaseListModel.d.ts +1 -1
  130. package/dist/es6/collection/lib/useBaseListModel.d.ts.map +1 -1
  131. package/dist/es6/collection/lib/useBaseListModel.js +2 -2
  132. package/dist/es6/collection/lib/useListItemRegister.js +2 -2
  133. package/dist/es6/collection/lib/useListRenderItem.js +2 -2
  134. package/dist/es6/combobox/index.d.ts +1 -4
  135. package/dist/es6/combobox/index.d.ts.map +1 -1
  136. package/dist/es6/combobox/index.js +1 -4
  137. package/dist/es6/combobox/lib/Combobox.d.ts +9 -3
  138. package/dist/es6/combobox/lib/Combobox.d.ts.map +1 -1
  139. package/dist/es6/combobox/lib/Combobox.js +1 -1
  140. package/dist/es6/combobox/lib/ComboboxCard.js +1 -1
  141. package/dist/es6/combobox/lib/ComboboxInput.d.ts +1 -106
  142. package/dist/es6/combobox/lib/ComboboxInput.d.ts.map +1 -1
  143. package/dist/es6/combobox/lib/ComboboxInput.js +2 -69
  144. package/dist/es6/combobox/lib/ComboboxMenu.d.ts +9 -3
  145. package/dist/es6/combobox/lib/ComboboxMenu.d.ts.map +1 -1
  146. package/dist/es6/combobox/lib/ComboboxMenu.js +4 -3
  147. package/dist/es6/combobox/lib/ComboboxMenuItem.d.ts +7 -1
  148. package/dist/es6/combobox/lib/ComboboxMenuItem.d.ts.map +1 -1
  149. package/dist/es6/combobox/lib/ComboboxMenuItem.js +7 -7
  150. package/dist/es6/combobox/lib/ComboboxMenuList.js +1 -1
  151. package/dist/es6/combobox/lib/ComboboxPopper.d.ts +97 -0
  152. package/dist/es6/combobox/lib/ComboboxPopper.d.ts.map +1 -0
  153. package/dist/es6/combobox/lib/ComboboxPopper.js +12 -0
  154. package/dist/es6/combobox/lib/hooks/index.d.ts +10 -0
  155. package/dist/es6/combobox/lib/hooks/index.d.ts.map +1 -0
  156. package/dist/es6/combobox/lib/hooks/index.js +9 -0
  157. package/dist/es6/combobox/lib/hooks/useComboboxInput.d.ts +107 -0
  158. package/dist/es6/combobox/lib/hooks/useComboboxInput.d.ts.map +1 -0
  159. package/dist/es6/combobox/lib/hooks/useComboboxInput.js +68 -0
  160. package/dist/{commonjs/combobox/lib → es6/combobox/lib/hooks}/useComboboxInputOpenWithArrowKeys.d.ts +6 -6
  161. package/dist/es6/combobox/lib/hooks/useComboboxInputOpenWithArrowKeys.d.ts.map +1 -0
  162. package/dist/es6/combobox/lib/hooks/useComboboxKeyboardTypeAhead.d.ts +101 -0
  163. package/dist/es6/combobox/lib/hooks/useComboboxKeyboardTypeAhead.d.ts.map +1 -0
  164. package/dist/es6/combobox/lib/hooks/useComboboxKeyboardTypeAhead.js +103 -0
  165. package/dist/es6/combobox/lib/hooks/useComboboxListKeyboardHandler.d.ts +84 -0
  166. package/dist/es6/combobox/lib/hooks/useComboboxListKeyboardHandler.d.ts.map +1 -0
  167. package/dist/es6/combobox/lib/hooks/useComboboxListKeyboardHandler.js +19 -0
  168. package/dist/es6/combobox/lib/hooks/useComboboxLoader.d.ts.map +1 -0
  169. package/dist/es6/combobox/lib/{useComboboxModel.d.ts → hooks/useComboboxModel.d.ts} +196 -196
  170. package/dist/es6/combobox/lib/hooks/useComboboxModel.d.ts.map +1 -0
  171. package/dist/es6/combobox/lib/{useComboboxModel.js → hooks/useComboboxModel.js} +3 -2
  172. package/dist/es6/combobox/lib/hooks/useComboboxMoveCursorToSelected.d.ts +82 -0
  173. package/dist/es6/combobox/lib/hooks/useComboboxMoveCursorToSelected.d.ts.map +1 -0
  174. package/dist/es6/combobox/lib/hooks/useComboboxMoveCursorToSelected.js +27 -0
  175. package/dist/es6/combobox/lib/hooks/useComboboxResetCursorToSelected.d.ts +82 -0
  176. package/dist/es6/combobox/lib/hooks/useComboboxResetCursorToSelected.d.ts.map +1 -0
  177. package/dist/es6/combobox/lib/hooks/useComboboxResetCursorToSelected.js +17 -0
  178. package/dist/es6/combobox/lib/hooks/useSetPopupWidth.d.ts +82 -0
  179. package/dist/es6/combobox/lib/hooks/useSetPopupWidth.d.ts.map +1 -0
  180. package/dist/es6/combobox/lib/hooks/useSetPopupWidth.js +16 -0
  181. package/dist/es6/common/lib/utils/components.d.ts.map +1 -1
  182. package/dist/es6/common/lib/utils/models.d.ts +4 -4
  183. package/dist/es6/common/lib/utils/models.d.ts.map +1 -1
  184. package/dist/es6/common/lib/utils/models.js +7 -8
  185. package/dist/es6/form-field/lib/FormField.d.ts.map +1 -1
  186. package/dist/es6/form-field/lib/FormField.js +3 -2
  187. package/dist/es6/menu/lib/MenuPopper.d.ts.map +1 -1
  188. package/dist/es6/menu/lib/MenuPopper.js +10 -1
  189. package/dist/es6/popup/lib/PopupPopper.d.ts.map +1 -1
  190. package/dist/es6/popup/lib/PopupPopper.js +10 -1
  191. package/dist/es6/radio/lib/Radio.d.ts.map +1 -1
  192. package/dist/es6/radio/lib/Radio.js +18 -23
  193. package/dist/es6/select/index.d.ts +1 -1
  194. package/dist/es6/select/index.d.ts.map +1 -1
  195. package/dist/es6/select/index.js +1 -1
  196. package/dist/es6/select/lib/Select.d.ts +2634 -18
  197. package/dist/es6/select/lib/Select.d.ts.map +1 -1
  198. package/dist/es6/select/lib/Select.js +139 -66
  199. package/dist/es6/select/lib/hooks/index.d.ts +4 -0
  200. package/dist/es6/select/lib/hooks/index.d.ts.map +1 -0
  201. package/dist/es6/select/lib/hooks/index.js +3 -0
  202. package/dist/es6/select/lib/hooks/useSelectCard.d.ts +83 -0
  203. package/dist/es6/select/lib/hooks/useSelectCard.d.ts.map +1 -0
  204. package/dist/es6/select/lib/hooks/useSelectCard.js +10 -0
  205. package/dist/es6/select/lib/hooks/useSelectInput.d.ts +112 -0
  206. package/dist/es6/select/lib/hooks/useSelectInput.d.ts.map +1 -0
  207. package/dist/es6/select/lib/hooks/useSelectInput.js +46 -0
  208. package/dist/es6/select/lib/hooks/useSelectModel.d.ts +1779 -0
  209. package/dist/es6/select/lib/hooks/useSelectModel.d.ts.map +1 -0
  210. package/dist/es6/select/lib/hooks/useSelectModel.js +29 -0
  211. package/dist/es6/table/lib/Table.d.ts +1 -2
  212. package/dist/es6/table/lib/Table.d.ts.map +1 -1
  213. package/dist/es6/table/lib/Table.js +1 -2
  214. package/dist/es6/table/lib/TableRow.d.ts +3 -6
  215. package/dist/es6/table/lib/TableRow.d.ts.map +1 -1
  216. package/dist/es6/table/lib/TableRow.js +4 -6
  217. package/dist/es6/text-area/lib/TextArea.d.ts.map +1 -1
  218. package/dist/es6/text-area/lib/TextArea.js +2 -2
  219. package/dist/es6/text-input/lib/TextInput.js +2 -2
  220. package/dist/es6/tokens/lib/space.d.ts +44 -31
  221. package/dist/es6/tokens/lib/space.d.ts.map +1 -1
  222. package/dist/es6/tokens/lib/space.js +22 -29
  223. package/dist/es6/tooltip/lib/TooltipContainer.js +3 -3
  224. package/form-field/lib/FormField.tsx +8 -2
  225. package/menu/lib/MenuPopper.tsx +14 -1
  226. package/package.json +4 -4
  227. package/popup/lib/Popper.tsx +1 -1
  228. package/popup/lib/PopupPopper.tsx +17 -1
  229. package/radio/lib/Radio.tsx +18 -34
  230. package/select/index.ts +1 -1
  231. package/select/lib/Select.tsx +175 -111
  232. package/select/lib/hooks/index.ts +3 -0
  233. package/select/lib/hooks/useSelectCard.ts +11 -0
  234. package/select/lib/hooks/useSelectInput.ts +74 -0
  235. package/select/lib/hooks/useSelectModel.tsx +30 -0
  236. package/table/lib/Table.tsx +1 -2
  237. package/table/lib/TableRow.tsx +5 -8
  238. package/text-area/lib/TextArea.tsx +2 -8
  239. package/text-input/lib/TextInput.tsx +2 -2
  240. package/tokens/README.md +25 -28
  241. package/tokens/lib/space.ts +53 -40
  242. package/tooltip/lib/TooltipContainer.tsx +3 -3
  243. package/dist/commonjs/combobox/lib/useComboboxInputOpenWithArrowKeys.d.ts.map +0 -1
  244. package/dist/commonjs/combobox/lib/useComboboxLoader.d.ts.map +0 -1
  245. package/dist/commonjs/combobox/lib/useComboboxModel.d.ts.map +0 -1
  246. package/dist/commonjs/select/lib/SelectOption.d.ts +0 -20
  247. package/dist/commonjs/select/lib/SelectOption.d.ts.map +0 -1
  248. package/dist/es6/combobox/lib/useComboboxInputOpenWithArrowKeys.d.ts.map +0 -1
  249. package/dist/es6/combobox/lib/useComboboxLoader.d.ts.map +0 -1
  250. package/dist/es6/combobox/lib/useComboboxModel.d.ts.map +0 -1
  251. package/dist/es6/select/lib/SelectOption.d.ts +0 -20
  252. package/dist/es6/select/lib/SelectOption.d.ts.map +0 -1
  253. package/dist/es6/select/lib/SelectOption.js +0 -7
  254. package/select/lib/SelectOption.tsx +0 -33
  255. /package/combobox/lib/{useComboboxInputOpenWithArrowKeys.ts → hooks/useComboboxInputOpenWithArrowKeys.ts} +0 -0
  256. /package/combobox/lib/{useComboboxLoader.ts → hooks/useComboboxLoader.ts} +0 -0
  257. /package/dist/commonjs/combobox/lib/{useComboboxInputOpenWithArrowKeys.js → hooks/useComboboxInputOpenWithArrowKeys.js} +0 -0
  258. /package/dist/commonjs/combobox/lib/{useComboboxLoader.d.ts → hooks/useComboboxLoader.d.ts} +0 -0
  259. /package/dist/commonjs/combobox/lib/{useComboboxLoader.js → hooks/useComboboxLoader.js} +0 -0
  260. /package/dist/es6/combobox/lib/{useComboboxInputOpenWithArrowKeys.js → hooks/useComboboxInputOpenWithArrowKeys.js} +0 -0
  261. /package/dist/es6/combobox/lib/{useComboboxLoader.d.ts → hooks/useComboboxLoader.d.ts} +0 -0
  262. /package/dist/es6/combobox/lib/{useComboboxLoader.js → hooks/useComboboxLoader.js} +0 -0
@@ -12,13 +12,7 @@ import {
12
12
  Themeable,
13
13
  useLocalRef,
14
14
  } from '@workday/canvas-kit-react/common';
15
- import {
16
- borderRadius,
17
- colors,
18
- inputColors,
19
- space,
20
- spaceNumbers,
21
- } from '@workday/canvas-kit-react/tokens';
15
+ import {borderRadius, colors, inputColors, space} from '@workday/canvas-kit-react/tokens';
22
16
  import {SystemIcon} from '@workday/canvas-kit-react/icon';
23
17
  import {checkSmallIcon} from '@workday/canvas-system-icons-web';
24
18
  import {LabelText} from '@workday/canvas-kit-react/text';
@@ -67,17 +61,10 @@ export interface CheckboxProps extends Themeable {
67
61
  variant?: 'inverse' | undefined;
68
62
  }
69
63
 
70
- const checkboxHeight = (spaceNumbers.xl - spaceNumbers.xxxs) / 2;
71
- const checkboxTapArea = space.m;
72
- const checkboxContainerHeight = checkboxTapArea;
73
- const checkboxLabelDistance = `${spaceNumbers.xs}rem`;
74
- const checkboxWidth = checkboxHeight;
75
- const rippleRadius = (spaceNumbers.l - checkboxWidth) / 2;
76
-
77
64
  const CheckboxContainer = styled('div')({
78
65
  display: 'flex',
79
66
  alignItems: 'center',
80
- minHeight: checkboxContainerHeight,
67
+ minHeight: space.m,
81
68
  position: 'relative',
82
69
  });
83
70
 
@@ -88,8 +75,8 @@ const CheckboxContainer = styled('div')({
88
75
  */
89
76
  const CheckboxInputWrapper = styled('div')<Pick<CheckboxProps, 'disabled'>>({
90
77
  display: 'flex',
91
- height: `${checkboxHeight}rem`,
92
- minWidth: `${checkboxWidth}rem`,
78
+ height: `calc(${space.s} + 2px)`,
79
+ minWidth: `calc(${space.s} + 2px)`,
93
80
  marginTop: '3px',
94
81
  alignSelf: 'flex-start',
95
82
  });
@@ -98,9 +85,9 @@ const CheckboxRipple = styled('span')<Pick<CheckboxProps, 'disabled' | 'variant'
98
85
  {
99
86
  borderRadius: borderRadius.circle,
100
87
  boxShadow: `0 0 0 0 ${colors.soap200}`,
101
- height: `${checkboxHeight}rem`,
88
+ height: `calc(${space.s} + 2px)`,
102
89
  transition: 'box-shadow 150ms ease-out',
103
- width: `${checkboxWidth}rem`,
90
+ width: `calc(${space.s} + 2px)`,
104
91
  position: 'absolute',
105
92
  pointerEvents: 'none', // This is a decorative element we don't want it to block clicks to input
106
93
  },
@@ -126,8 +113,8 @@ const CheckboxInput = styled('input')<CheckboxProps & StyledType>(
126
113
  variant,
127
114
  }) => ({
128
115
  borderRadius: borderRadius.s,
129
- width: checkboxTapArea,
130
- height: checkboxTapArea,
116
+ width: space.m,
117
+ height: space.m,
131
118
  margin: 0,
132
119
  marginTop: '-3px',
133
120
  marginLeft: '-3px',
@@ -139,11 +126,12 @@ const CheckboxInput = styled('input')<CheckboxProps & StyledType>(
139
126
  },
140
127
 
141
128
  // States
142
- '&:not(:checked):not(:indeterminate):not(:disabled):not(:focus):hover, &:not(:checked):not(:indeterminate):not(:disabled):active': {
143
- '~ div:first-of-type': {
144
- borderColor: variant === 'inverse' ? colors.soap300 : inputColors.hoverBorder,
129
+ '&:not(:checked):not(:indeterminate):not(:disabled):not(:focus):hover, &:not(:checked):not(:indeterminate):not(:disabled):active':
130
+ {
131
+ '~ div:first-of-type': {
132
+ borderColor: variant === 'inverse' ? colors.soap300 : inputColors.hoverBorder,
133
+ },
145
134
  },
146
- },
147
135
  '&:checked ~ div:first-of-type, &:indeterminate ~ div:first-of-type': {
148
136
  borderColor: variant === 'inverse' ? colors.soap300 : themePrimary.main,
149
137
  backgroundColor: variant === 'inverse' ? colors.frenchVanilla100 : themePrimary.main,
@@ -210,7 +198,9 @@ const CheckboxInput = styled('input')<CheckboxProps & StyledType>(
210
198
  }),
211
199
  ({disabled}) => ({
212
200
  '&:hover ~ span:first-of-type': {
213
- boxShadow: disabled ? undefined : `0 0 0 ${rippleRadius}rem ${colors.soap200}`,
201
+ boxShadow: disabled
202
+ ? undefined
203
+ : `0 0 0 calc((${space.l} - (${space.s} + 2px)) / 2) ${colors.soap200}`,
214
204
  },
215
205
  }),
216
206
  ({theme, error, variant}) => {
@@ -226,11 +216,12 @@ const CheckboxInput = styled('input')<CheckboxProps & StyledType>(
226
216
  variant === 'inverse' ? `1px solid ${colors.soap300}` : `1px solid ${errorColors.inner}`,
227
217
  boxShadow: `0 0 0 1px ${errorColors.inner}, 0 0 0 2px ${errorColors.outer}`,
228
218
  },
229
- '&:not(:checked):not(:indeterminate):not(:disabled):not(:focus):hover, &:not(:checked):not(:indeterminate):not(:disabled):active': {
230
- '~ div:first-of-type': {
231
- borderColor: variant === 'inverse' ? `1px solid ${colors.soap300}` : errorColors.inner,
219
+ '&:not(:checked):not(:indeterminate):not(:disabled):not(:focus):hover, &:not(:checked):not(:indeterminate):not(:disabled):active':
220
+ {
221
+ '~ div:first-of-type': {
222
+ borderColor: variant === 'inverse' ? `1px solid ${colors.soap300}` : errorColors.inner,
223
+ },
232
224
  },
233
- },
234
225
  '&:checked ~ div:first-of-type, &:indeterminate ~ div:first-of-type': {
235
226
  borderColor: variant === 'inverse' ? colors.soap300 : theme.canvas.palette.primary.main,
236
227
  boxShadow: `
@@ -260,13 +251,13 @@ const CheckboxBackground = styled('div')<CheckboxProps>(
260
251
  borderRadius: borderRadius.s,
261
252
  boxSizing: 'border-box',
262
253
  display: 'flex',
263
- height: `${checkboxHeight}rem`,
254
+ height: `calc(${space.s} + 2px)`,
264
255
  justifyContent: 'center',
265
256
  padding: '0px 2px',
266
257
  pointerEvents: 'none',
267
258
  position: 'absolute',
268
259
  transition: 'border 200ms ease, background 200ms',
269
- width: `${checkboxWidth}rem`,
260
+ width: `calc(${space.s} + 2px)`,
270
261
  },
271
262
  ({variant}) => ({
272
263
  border: `1px solid ${variant === 'inverse' ? colors.soap300 : inputColors.border}`,
@@ -373,7 +364,7 @@ export const Checkbox = createComponent('input')({
373
364
  htmlFor={inputId}
374
365
  disabled={disabled}
375
366
  variant={variant}
376
- paddingInlineStart={checkboxLabelDistance}
367
+ paddingInlineStart={space.xs}
377
368
  cursor="pointer"
378
369
  >
379
370
  {label}
@@ -15,6 +15,7 @@ export * from './lib/useGridModel';
15
15
  export * from './lib/useListActiveDescendant';
16
16
  export * from './lib/useListItemAllowChildStrings';
17
17
  export {ListBox, ListBoxProps} from './lib/ListBox';
18
+ export {keyboardEventToCursorEvents} from './lib/keyUtils';
18
19
  export {
19
20
  singleSelectionManager,
20
21
  multiSelectionManager,
@@ -10,7 +10,7 @@ export const defaultGetId = (item: any): string => {
10
10
  };
11
11
 
12
12
  export const defaultGetTextValue = (item: any): string => {
13
- return typeof item === 'string' ? item : item.text || '';
13
+ return typeof item === 'string' ? item : item.text || item.id || '';
14
14
  };
15
15
 
16
16
  export interface Item<T> {
@@ -20,7 +20,7 @@ export interface Item<T> {
20
20
  /**
21
21
  * Used by components that allow jumping to an item based on typing
22
22
  */
23
- textValue?: string;
23
+ textValue: string;
24
24
  }
25
25
 
26
26
  // interface Collection<T> {
@@ -124,7 +124,7 @@ export const useBaseListModel = createModelHook({
124
124
  const getTextValueRef = React.useRef(defaultGetTextValue);
125
125
 
126
126
  const getId = config.getId || defaultGetId;
127
- const getTextValue = config.getTextValue || defaultGetTextValue;
127
+ const getTextValue = config.getTextValue || config.getId || defaultGetTextValue;
128
128
  getIdRef.current = getId;
129
129
  getTextValueRef.current = getTextValue;
130
130
 
@@ -94,7 +94,7 @@ export const useListItemRegister = createElemPropsHook(useListModel)(
94
94
  disabled: elemProps.disabled || state.nonInteractiveIds.includes(localId) ? true : undefined,
95
95
  item: null, // remove `item` from prop list
96
96
  virtual: null, // remove `virtual` from prop list
97
- 'aria-setsize': elemProps.virtual?.size,
97
+ 'aria-setsize': elemProps.virtual ? state.UNSTABLE_virtual.totalSize : undefined,
98
98
  'aria-posinset': elemProps.virtual ? elemProps.item!.index + 1 : undefined,
99
99
  style,
100
100
  id: slugify(`${state.id}-${localId}`),
@@ -34,7 +34,7 @@ export function useListRenderItems<T>(
34
34
  // about capital letters in attributes. React thinks this will be applied to the DOM
35
35
  // element even though we remove it later...
36
36
  virtual,
37
- key: item.id,
37
+ key: item.id || item.index,
38
38
  item,
39
39
  });
40
40
  }
@@ -44,7 +44,7 @@ export function useListRenderItems<T>(
44
44
  const child = children(item.value, item.index);
45
45
  if (React.isValidElement(child)) {
46
46
  return React.cloneElement(child, {
47
- key: item.id,
47
+ key: item.id || item.index,
48
48
  item: item.value,
49
49
  });
50
50
  }
package/combobox/index.ts CHANGED
@@ -2,7 +2,14 @@ export {Combobox} from './lib/Combobox';
2
2
  export {useComboboxCard} from './lib/ComboboxCard';
3
3
  export {useComboboxMenuItem} from './lib/ComboboxMenuItem';
4
4
  export {useComboboxMenuList} from './lib/ComboboxMenuList';
5
- export {useComboboxInput} from './lib/ComboboxInput';
6
- export {useComboboxLoader} from './lib/useComboboxLoader';
7
- export {useComboboxModel} from './lib/useComboboxModel';
8
- export {useComboboxInputOpenWithArrowKeys as useComboboxOpenWithArrowKeys} from './lib/useComboboxInputOpenWithArrowKeys';
5
+ export {
6
+ useComboboxLoader,
7
+ useComboboxModel,
8
+ useComboboxInputOpenWithArrowKeys,
9
+ useComboboxKeyboardTypeAhead,
10
+ useSetPopupWidth,
11
+ useComboboxMoveCursorToSelected,
12
+ useComboboxInput,
13
+ useComboboxListKeyboardHandler,
14
+ useComboboxResetCursorToSelected,
15
+ } from './lib/hooks';
@@ -2,7 +2,7 @@ import React from 'react';
2
2
 
3
3
  import {createContainer} from '@workday/canvas-kit-react/common';
4
4
 
5
- import {useComboboxModel} from './useComboboxModel';
5
+ import {useComboboxModel} from './hooks';
6
6
  import {ComboboxInput} from './ComboboxInput';
7
7
  import {ComboboxMenu} from './ComboboxMenu';
8
8
  export interface ComboboxProps {
@@ -7,7 +7,7 @@ import {
7
7
  } from '@workday/canvas-kit-react/common';
8
8
  import {Menu} from '@workday/canvas-kit-react/menu';
9
9
 
10
- import {useComboboxModel} from './useComboboxModel';
10
+ import {useComboboxModel} from './hooks';
11
11
 
12
12
  export interface ComboboxCardProps extends ExtractProps<typeof Menu.Card> {}
13
13
 
@@ -1,97 +1,9 @@
1
1
  import React from 'react';
2
2
 
3
- import {
4
- composeHooks,
5
- createElemPropsHook,
6
- createSubcomponent,
7
- dispatchInputEvent,
8
- ExtractProps,
9
- useForkRef,
10
- } from '@workday/canvas-kit-react/common';
3
+ import {createSubcomponent, ExtractProps} from '@workday/canvas-kit-react/common';
11
4
  import {TextInput} from '@workday/canvas-kit-react/text-input';
12
- import {usePopupTarget} from '@workday/canvas-kit-react/popup';
13
- import {
14
- useListActiveDescendant,
15
- useListKeyboardHandler,
16
- } from '@workday/canvas-kit-react/collection';
17
5
 
18
- import {useComboboxModel} from './useComboboxModel';
19
- import {useComboboxInputOpenWithArrowKeys} from './useComboboxInputOpenWithArrowKeys';
20
-
21
- /**
22
- * Adds all attributes necessary to start with a {@link ComboboxInput Combobox.Input}. It opens the
23
- * menu with arrow keys, uses {@link useListActiveDescendant}, and handles keyboard arrows to
24
- * navigate items of the menu. You may also compose this hook to add more specific behaviors for
25
- * your {@link ComboboxInput Combobox.Input}.
26
- */
27
- export const useComboboxInput = composeHooks(
28
- createElemPropsHook(useComboboxModel)((model, ref) => {
29
- const elementRef = useForkRef(ref, model.state.inputRef);
30
-
31
- React.useEffect(() => {
32
- if (model.state.cursorId && model.state.visibility === 'visible') {
33
- const item = model.navigation.getItem(model.state.cursorId, model);
34
- if (model.state.isVirtualized && item) {
35
- model.state.UNSTABLE_virtual.scrollToIndex(item.index);
36
- } else {
37
- const listboxId = model.state.inputRef.current?.getAttribute('aria-controls');
38
- if (listboxId) {
39
- const menuItem = document.querySelector(
40
- `[id="${listboxId}"] [data-id="${model.state.cursorId}"]`
41
- );
42
- if (menuItem) {
43
- menuItem.scrollIntoView({block: 'nearest'});
44
- }
45
- }
46
- }
47
- }
48
-
49
- // we only want to run this effect if the cursor changes and not any other time
50
- // eslint-disable-next-line react-hooks/exhaustive-deps
51
- }, [model.state.cursorId]);
52
-
53
- return {
54
- onKeyDown(event: React.KeyboardEvent) {
55
- if (event.key === 'Escape') {
56
- dispatchInputEvent(event.currentTarget as HTMLElement, '');
57
- }
58
- if (event.key === 'Enter' && !event.metaKey && model.state.visibility === 'visible') {
59
- const element = document.querySelector(`[data-id="${model.state.cursorId}"]`);
60
- if (element && element?.getAttribute('aria-disabled') !== 'true') {
61
- model.events.select({id: model.state.cursorId});
62
- if (model.state.mode === 'single') {
63
- model.events.hide(event);
64
- }
65
- }
66
-
67
- // We don't want to submit forms while the combobox is open
68
- event.preventDefault();
69
- }
70
- },
71
- onBlur(event: React.FocusEvent) {
72
- model.events.hide(event);
73
- },
74
- onChange: model.onChange,
75
- onClick(event: React.MouseEvent) {
76
- if (model.state.visibility === 'hidden') {
77
- model.events.setWidth(event.currentTarget.clientWidth);
78
- }
79
- },
80
- value: model.state.value,
81
- role: 'combobox',
82
- 'aria-haspopup': true,
83
- 'aria-expanded': model.state.visibility === 'visible',
84
- 'aria-autocomplete': 'list',
85
- 'aria-controls': `${model.state.id}-list`,
86
- id: model.state.id,
87
- ref: elementRef,
88
- } as const;
89
- }),
90
- useComboboxInputOpenWithArrowKeys,
91
- useListActiveDescendant,
92
- useListKeyboardHandler,
93
- usePopupTarget
94
- );
6
+ import {useComboboxModel, useComboboxInput} from './hooks';
95
7
 
96
8
  export const ComboboxInput = createSubcomponent(TextInput)({
97
9
  modelHook: useComboboxModel,
@@ -3,10 +3,11 @@ import React from 'react';
3
3
  import {createSubcomponent} from '@workday/canvas-kit-react/common';
4
4
  import {Menu} from '@workday/canvas-kit-react/menu';
5
5
 
6
- import {useComboboxModel} from './useComboboxModel';
6
+ import {useComboboxModel} from './hooks';
7
7
  import {ComboboxMenuList} from './ComboboxMenuList';
8
8
  import {ComboboxMenuItem} from './ComboboxMenuItem';
9
9
  import {ComboboxCard} from './ComboboxCard';
10
+ import {ComboboxMenuPopper} from './ComboboxPopper';
10
11
 
11
12
  export interface ComboboxMenuProps {
12
13
  /**
@@ -23,9 +24,9 @@ export const ComboboxMenu = createSubcomponent()({
23
24
  * {@link ComboboxInput Combobox.Input}. It renders a `div` element that is portalled to the
24
25
  * `document.body` which is controlled by the {@link PopupStack}. The `PopupStack` is not part
25
26
  * of React. This means no extra props given to this component will be forwarded to the `div`
26
- * element, but the `ref` will be forwarded.
27
+ * element, but the `ref` will be forwarded. Also fallback placements for the popper with be either `top` or `bottom`.
27
28
  */
28
- Popper: Menu.Popper,
29
+ Popper: ComboboxMenuPopper,
29
30
  /**
30
31
  * The combobox menu list follows the Collections API. A list can either contain static items or
31
32
  * a render prop and `items` to the model.
@@ -4,15 +4,17 @@ import {
4
4
  composeHooks,
5
5
  createElemPropsHook,
6
6
  createSubcomponent,
7
+ styled,
7
8
  } from '@workday/canvas-kit-react/common';
8
9
  import {StyledMenuItem, useMenuModel} from '@workday/canvas-kit-react/menu';
10
+ import {SystemIcon} from '@workday/canvas-kit-react/icon';
9
11
  import {
10
12
  useListItemAllowChildStrings,
11
13
  useListItemRegister,
12
14
  } from '@workday/canvas-kit-react/collection';
13
15
  import {OverflowTooltip} from '@workday/canvas-kit-react/tooltip';
14
16
 
15
- import {useComboboxModel} from './useComboboxModel';
17
+ import {useComboboxModel} from './hooks';
16
18
 
17
19
  export interface ComboboxMenuItemProps {
18
20
  children: React.ReactNode;
@@ -26,17 +28,13 @@ export interface ComboboxMenuItemProps {
26
28
  * added when the item has "focus" (when the cursor is on the item).
27
29
  */
28
30
  export const useComboboxMenuItem = composeHooks(
29
- createElemPropsHook(useMenuModel)((model, _, elemProps: {'data-id'?: string} = {}) => {
31
+ createElemPropsHook(useMenuModel)((model, ref, elemProps: {'data-id'?: string} = {}) => {
30
32
  const id = elemProps['data-id'] || '';
33
+
31
34
  const onMouseDown = (event: React.MouseEvent<HTMLElement>) => {
32
- if (
33
- model.state.nonInteractiveIds.includes(id) ||
34
- event.currentTarget.hasAttribute('aria-disabled')
35
- ) {
36
- return;
37
- }
38
35
  if (event.currentTarget.getAttribute('aria-disabled') !== 'true') {
39
36
  model.events.select({id});
37
+
40
38
  if (model.state.mode === 'single') {
41
39
  model.events.hide(event);
42
40
  }
@@ -63,6 +61,9 @@ export const useComboboxMenuItem = composeHooks(
63
61
  export const ComboboxMenuItem = createSubcomponent('li')({
64
62
  modelHook: useComboboxModel,
65
63
  elemPropsHook: useComboboxMenuItem,
64
+ subComponents: {
65
+ Icon: styled(SystemIcon)({alignSelf: 'start'}),
66
+ },
66
67
  })<ComboboxMenuItemProps>(({children, ...elemProps}, Element) => {
67
68
  return (
68
69
  <OverflowTooltip placement="left">
@@ -5,7 +5,7 @@ import {createElemPropsHook, createSubcomponent} from '@workday/canvas-kit-react
5
5
  import {useMenuModel} from '@workday/canvas-kit-react/menu';
6
6
  import {ListBox, ListBoxProps} from '@workday/canvas-kit-react/collection';
7
7
 
8
- import {useComboboxModel} from './useComboboxModel';
8
+ import {useComboboxModel} from './hooks';
9
9
 
10
10
  export interface ComboboxMenuListProps<T = any> extends ListBoxProps<T> {}
11
11
 
@@ -0,0 +1,20 @@
1
+ import * as React from 'react';
2
+
3
+ import {createSubcomponent, ExtractProps} from '@workday/canvas-kit-react/common';
4
+ import {usePopupPopper, Popper} from '@workday/canvas-kit-react/popup';
5
+
6
+ import {Menu, useMenuModel} from '@workday/canvas-kit-react/menu';
7
+
8
+ export const useMenuPopper = usePopupPopper;
9
+
10
+ export const ComboboxMenuPopper = createSubcomponent('div')({
11
+ displayName: 'Combobox.Menu.Popper',
12
+ modelHook: useMenuModel,
13
+ elemPropsHook: useMenuPopper,
14
+ })<ExtractProps<typeof Popper>>(({children, ...elemProps}) => {
15
+ return (
16
+ <Menu.Popper fallbackPlacements={['top', 'bottom']} {...elemProps}>
17
+ {children}
18
+ </Menu.Popper>
19
+ );
20
+ });
@@ -0,0 +1,9 @@
1
+ export * from './useComboboxInputOpenWithArrowKeys';
2
+ export * from './useComboboxLoader';
3
+ export * from './useComboboxModel';
4
+ export * from './useComboboxMoveCursorToSelected';
5
+ export * from './useSetPopupWidth';
6
+ export * from './useComboboxKeyboardTypeAhead';
7
+ export * from './useComboboxListKeyboardHandler';
8
+ export * from './useComboboxInput';
9
+ export * from './useComboboxResetCursorToSelected';
@@ -0,0 +1,88 @@
1
+ import React from 'react';
2
+
3
+ import {composeHooks, createElemPropsHook, useForkRef} from '@workday/canvas-kit-react/common';
4
+ import {usePopupTarget} from '@workday/canvas-kit-react/popup';
5
+
6
+ import {useListActiveDescendant} from '@workday/canvas-kit-react/collection';
7
+
8
+ import {
9
+ useComboboxModel,
10
+ useComboboxInputOpenWithArrowKeys,
11
+ useSetPopupWidth,
12
+ useComboboxListKeyboardHandler,
13
+ } from './index';
14
+
15
+ /**
16
+ * `useComboboxInput` Adds all attributes necessary to start with a {@link ComboboxInput Combobox.Input}. It opens the
17
+ * menu with arrow keys, uses {@link useListActiveDescendant}, and handles keyboard arrows to
18
+ * navigate items of the menu. You may also compose this hook to add more specific behaviors for
19
+ * your {@link ComboboxInput Combobox.Input}.
20
+ */
21
+ export const useComboboxInput = composeHooks(
22
+ createElemPropsHook(useComboboxModel)((model, ref) => {
23
+ const elementRef = useForkRef(ref, model.state.inputRef);
24
+
25
+ React.useEffect(() => {
26
+ if (model.state.cursorId && model.state.visibility === 'visible') {
27
+ const item = model.navigation.getItem(model.state.cursorId, model);
28
+ if (model.state.isVirtualized && item) {
29
+ model.state.UNSTABLE_virtual.scrollToIndex(item.index);
30
+ } else {
31
+ const listboxId = model.state.inputRef.current?.getAttribute('aria-controls');
32
+ if (listboxId) {
33
+ const menuItem = document.querySelector(
34
+ `[id="${listboxId}"] [data-id="${model.state.cursorId}"]`
35
+ );
36
+ if (menuItem) {
37
+ requestAnimationFrame(() => {
38
+ menuItem.scrollIntoView({block: 'nearest'});
39
+ });
40
+ }
41
+ }
42
+ }
43
+ }
44
+
45
+ // we only want to run this effect if the cursor, visibility and selectedIds change and not any other time
46
+ // eslint-disable-next-line react-hooks/exhaustive-deps
47
+ }, [model.state.cursorId, model.state.selectedIds, model.state.visibility]);
48
+
49
+ return {
50
+ onKeyDown(event: React.KeyboardEvent) {
51
+ if (event.key === 'Enter' && !event.metaKey && model.state.visibility === 'visible') {
52
+ const element = document.querySelector(`[data-id="${model.state.cursorId}"]`);
53
+ if (element && element?.getAttribute('aria-disabled') !== 'true') {
54
+ model.events.select({id: model.state.cursorId});
55
+ if (model.state.mode === 'single') {
56
+ model.events.hide(event);
57
+ }
58
+ }
59
+
60
+ // We don't want to submit forms while the combobox is open
61
+ event.preventDefault();
62
+ }
63
+ },
64
+ onBlur(event: React.FocusEvent) {
65
+ model.events.hide(event);
66
+ },
67
+ onChange: model.onChange,
68
+ onClick(event: React.MouseEvent) {
69
+ if (model.state.visibility === 'hidden') {
70
+ model.events.setWidth(event.currentTarget.clientWidth);
71
+ }
72
+ },
73
+ value: model.state.value,
74
+ role: 'combobox',
75
+ 'aria-haspopup': true,
76
+ 'aria-expanded': model.state.visibility === 'visible',
77
+ 'aria-autocomplete': 'list',
78
+ 'aria-controls': `${model.state.id}-list`,
79
+ id: model.state.id,
80
+ ref: elementRef,
81
+ } as const;
82
+ }),
83
+ useSetPopupWidth,
84
+ useComboboxInputOpenWithArrowKeys,
85
+ useListActiveDescendant,
86
+ useComboboxListKeyboardHandler,
87
+ usePopupTarget
88
+ );