@lumx/react 3.0.6 → 3.0.7-alpha.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 (514) hide show
  1. package/{CONTRIBUTING.md → dist/CONTRIBUTING.md} +0 -0
  2. package/{LICENSE.md → dist/LICENSE.md} +0 -0
  3. package/dist/README.md +38 -0
  4. package/{_internal → dist/_internal}/ClickAwayProvider.js +0 -0
  5. package/{_internal → dist/_internal}/ClickAwayProvider.js.map +0 -0
  6. package/{_internal → dist/_internal}/types.d.ts +0 -0
  7. package/{index.d.ts → dist/index.d.ts} +60 -1
  8. package/{index.js → dist/index.js} +767 -613
  9. package/dist/index.js.map +1 -0
  10. package/dist/package.json +117 -0
  11. package/dist/src/components/alert-dialog/AlertDialog.stories.tsx +196 -0
  12. package/dist/src/components/alert-dialog/AlertDialog.test.tsx +43 -0
  13. package/dist/src/components/alert-dialog/AlertDialog.tsx +185 -0
  14. package/dist/src/components/alert-dialog/__snapshots__/AlertDialog.test.tsx.snap +551 -0
  15. package/dist/src/components/alert-dialog/index.ts +1 -0
  16. package/dist/src/components/autocomplete/Autocomplete.stories.tsx +70 -0
  17. package/dist/src/components/autocomplete/Autocomplete.test.tsx +181 -0
  18. package/dist/src/components/autocomplete/Autocomplete.tsx +292 -0
  19. package/dist/src/components/autocomplete/AutocompleteMultiple.stories.tsx +170 -0
  20. package/dist/src/components/autocomplete/AutocompleteMultiple.test.tsx +94 -0
  21. package/dist/src/components/autocomplete/AutocompleteMultiple.tsx +156 -0
  22. package/dist/src/components/autocomplete/__mockData__/index.ts +34 -0
  23. package/dist/src/components/autocomplete/__snapshots__/Autocomplete.test.tsx.snap +213 -0
  24. package/dist/src/components/autocomplete/__snapshots__/AutocompleteMultiple.test.tsx.snap +88 -0
  25. package/dist/src/components/autocomplete/index.ts +2 -0
  26. package/dist/src/components/avatar/Avatar.stories.tsx +92 -0
  27. package/dist/src/components/avatar/Avatar.test.tsx +39 -0
  28. package/dist/src/components/avatar/Avatar.tsx +112 -0
  29. package/dist/src/components/avatar/__snapshots__/Avatar.test.tsx.snap +681 -0
  30. package/dist/src/components/avatar/index.ts +1 -0
  31. package/dist/src/components/badge/Badge.stories.tsx +45 -0
  32. package/dist/src/components/badge/Badge.test.tsx +91 -0
  33. package/dist/src/components/badge/Badge.tsx +55 -0
  34. package/dist/src/components/badge/__snapshots__/Badge.test.tsx.snap +11 -0
  35. package/dist/src/components/badge/index.ts +1 -0
  36. package/dist/src/components/button/Button.stories.tsx +156 -0
  37. package/dist/src/components/button/Button.test.tsx +152 -0
  38. package/dist/src/components/button/Button.tsx +81 -0
  39. package/dist/src/components/button/ButtonGroup.test.tsx +66 -0
  40. package/dist/src/components/button/ButtonGroup.tsx +46 -0
  41. package/dist/src/components/button/ButtonRoot.test.tsx +203 -0
  42. package/dist/src/components/button/ButtonRoot.tsx +190 -0
  43. package/dist/src/components/button/IconButton.test.tsx +103 -0
  44. package/dist/src/components/button/IconButton.tsx +80 -0
  45. package/dist/src/components/button/__snapshots__/Button.test.tsx.snap +96 -0
  46. package/dist/src/components/button/__snapshots__/ButtonGroup.test.tsx.snap +22 -0
  47. package/dist/src/components/button/__snapshots__/ButtonRoot.test.tsx.snap +160 -0
  48. package/dist/src/components/button/__snapshots__/IconButton.test.tsx.snap +83 -0
  49. package/dist/src/components/button/index.ts +4 -0
  50. package/dist/src/components/checkbox/Checkbox.stories.tsx +37 -0
  51. package/dist/src/components/checkbox/Checkbox.test.tsx +114 -0
  52. package/dist/src/components/checkbox/Checkbox.tsx +145 -0
  53. package/dist/src/components/checkbox/__snapshots__/Checkbox.test.tsx.snap +141 -0
  54. package/dist/src/components/checkbox/index.ts +1 -0
  55. package/dist/src/components/chip/Chip.stories.tsx +21 -0
  56. package/dist/src/components/chip/Chip.test.tsx +199 -0
  57. package/dist/src/components/chip/Chip.tsx +154 -0
  58. package/dist/src/components/chip/ChipGroup.test.tsx +29 -0
  59. package/dist/src/components/chip/ChipGroup.tsx +62 -0
  60. package/dist/src/components/chip/__snapshots__/Chip.test.tsx.snap +12 -0
  61. package/dist/src/components/chip/__snapshots__/ChipGroup.test.tsx.snap +29 -0
  62. package/dist/src/components/chip/index.ts +2 -0
  63. package/dist/src/components/comment-block/CommentBlock.stories.tsx +30 -0
  64. package/dist/src/components/comment-block/CommentBlock.test.tsx +28 -0
  65. package/dist/src/components/comment-block/CommentBlock.tsx +174 -0
  66. package/dist/src/components/comment-block/__snapshots__/CommentBlock.test.tsx.snap +92 -0
  67. package/dist/src/components/comment-block/index.ts +1 -0
  68. package/dist/src/components/date-picker/DatePicker.test.tsx +41 -0
  69. package/dist/src/components/date-picker/DatePicker.tsx +56 -0
  70. package/dist/src/components/date-picker/DatePickerControlled.test.tsx +44 -0
  71. package/dist/src/components/date-picker/DatePickerControlled.tsx +128 -0
  72. package/dist/src/components/date-picker/DatePickerField.stories.tsx +93 -0
  73. package/dist/src/components/date-picker/DatePickerField.test.tsx +47 -0
  74. package/dist/src/components/date-picker/DatePickerField.tsx +141 -0
  75. package/dist/src/components/date-picker/__snapshots__/DatePicker.test.tsx.snap +22 -0
  76. package/dist/src/components/date-picker/__snapshots__/DatePickerControlled.test.tsx.snap +597 -0
  77. package/dist/src/components/date-picker/__snapshots__/DatePickerField.test.tsx.snap +43 -0
  78. package/dist/src/components/date-picker/constants.ts +11 -0
  79. package/dist/src/components/date-picker/index.ts +4 -0
  80. package/dist/src/components/date-picker/types.ts +28 -0
  81. package/dist/src/components/dialog/Dialog.stories.tsx +426 -0
  82. package/dist/src/components/dialog/Dialog.test.tsx +93 -0
  83. package/dist/src/components/dialog/Dialog.tsx +263 -0
  84. package/dist/src/components/dialog/__snapshots__/Dialog.test.tsx.snap +960 -0
  85. package/dist/src/components/dialog/index.ts +1 -0
  86. package/dist/src/components/divider/Divider.test.tsx +93 -0
  87. package/dist/src/components/divider/Divider.tsx +51 -0
  88. package/dist/src/components/divider/__snapshots__/Divider.test.tsx.snap +9 -0
  89. package/dist/src/components/divider/index.ts +1 -0
  90. package/dist/src/components/drag-handle/DragHandle.tsx +50 -0
  91. package/dist/src/components/drag-handle/index.ts +1 -0
  92. package/dist/src/components/dropdown/Dropdown.stories.tsx +216 -0
  93. package/dist/src/components/dropdown/Dropdown.test.tsx +97 -0
  94. package/dist/src/components/dropdown/Dropdown.tsx +184 -0
  95. package/dist/src/components/dropdown/__snapshots__/Dropdown.test.tsx.snap +35 -0
  96. package/dist/src/components/dropdown/index.ts +1 -0
  97. package/dist/src/components/expansion-panel/ExpansionPanel.test.tsx +116 -0
  98. package/dist/src/components/expansion-panel/ExpansionPanel.tsx +170 -0
  99. package/dist/src/components/expansion-panel/index.ts +1 -0
  100. package/dist/src/components/flag/Flag.stories.tsx +23 -0
  101. package/dist/src/components/flag/Flag.test.tsx +86 -0
  102. package/dist/src/components/flag/Flag.tsx +47 -0
  103. package/dist/src/components/flag/__snapshots__/Flag.test.tsx.snap +133 -0
  104. package/dist/src/components/flag/index.ts +1 -0
  105. package/dist/src/components/flex-box/FlexBox.stories.tsx +245 -0
  106. package/dist/src/components/flex-box/FlexBox.test.tsx +65 -0
  107. package/dist/src/components/flex-box/FlexBox.tsx +98 -0
  108. package/dist/src/components/flex-box/__snapshots__/FlexBox.test.tsx.snap +492 -0
  109. package/dist/src/components/flex-box/index.ts +1 -0
  110. package/dist/src/components/generic-block/GenericBlock.stories.jsx +128 -0
  111. package/dist/src/components/generic-block/GenericBlock.test.tsx +152 -0
  112. package/dist/src/components/generic-block/GenericBlock.tsx +222 -0
  113. package/dist/src/components/generic-block/constants.ts +9 -0
  114. package/dist/src/components/generic-block/index.ts +2 -0
  115. package/dist/src/components/grid/Grid.tsx +73 -0
  116. package/dist/src/components/grid/GridItem.tsx +54 -0
  117. package/dist/src/components/grid/index.ts +2 -0
  118. package/dist/src/components/grid-column/GridColumn.stories.jsx +56 -0
  119. package/dist/src/components/grid-column/GridColumn.test.jsx +58 -0
  120. package/dist/src/components/grid-column/GridColumn.tsx +90 -0
  121. package/dist/src/components/grid-column/index.ts +1 -0
  122. package/dist/src/components/heading/Heading.stories.tsx +108 -0
  123. package/dist/src/components/heading/Heading.test.tsx +82 -0
  124. package/dist/src/components/heading/Heading.tsx +63 -0
  125. package/dist/src/components/heading/HeadingLevelProvider.tsx +30 -0
  126. package/dist/src/components/heading/constants.ts +16 -0
  127. package/dist/src/components/heading/context.tsx +13 -0
  128. package/dist/src/components/heading/index.ts +3 -0
  129. package/dist/src/components/heading/useHeadingLevel.tsx +8 -0
  130. package/dist/src/components/icon/Icon.stories.tsx +76 -0
  131. package/dist/src/components/icon/Icon.test.tsx +102 -0
  132. package/dist/src/components/icon/Icon.tsx +121 -0
  133. package/dist/src/components/icon/__snapshots__/Icon.test.tsx.snap +49 -0
  134. package/dist/src/components/icon/index.ts +1 -0
  135. package/dist/src/components/image-block/ImageBlock.stories.tsx +52 -0
  136. package/dist/src/components/image-block/ImageBlock.test.tsx +28 -0
  137. package/dist/src/components/image-block/ImageBlock.tsx +151 -0
  138. package/dist/src/components/image-block/__snapshots__/ImageBlock.test.tsx.snap +64 -0
  139. package/dist/src/components/image-block/index.ts +1 -0
  140. package/dist/src/components/index.ts +176 -0
  141. package/dist/src/components/inline-list/InlineList.stories.tsx +40 -0
  142. package/dist/src/components/inline-list/InlineList.test.tsx +41 -0
  143. package/dist/src/components/inline-list/InlineList.tsx +82 -0
  144. package/dist/src/components/inline-list/index.ts +1 -0
  145. package/dist/src/components/input-helper/InputHelper.stories.tsx +29 -0
  146. package/dist/src/components/input-helper/InputHelper.test.tsx +107 -0
  147. package/dist/src/components/input-helper/InputHelper.tsx +61 -0
  148. package/dist/src/components/input-helper/__snapshots__/InputHelper.test.tsx.snap +9 -0
  149. package/dist/src/components/input-helper/constants.ts +11 -0
  150. package/dist/src/components/input-helper/index.ts +1 -0
  151. package/dist/src/components/input-label/InputLabel.stories.tsx +15 -0
  152. package/dist/src/components/input-label/InputLabel.test.tsx +86 -0
  153. package/dist/src/components/input-label/InputLabel.tsx +59 -0
  154. package/dist/src/components/input-label/__snapshots__/InputLabel.test.tsx.snap +10 -0
  155. package/dist/src/components/input-label/index.ts +1 -0
  156. package/dist/src/components/lightbox/Lightbox.stories.tsx +83 -0
  157. package/dist/src/components/lightbox/Lightbox.test.tsx +30 -0
  158. package/dist/src/components/lightbox/Lightbox.tsx +153 -0
  159. package/dist/src/components/lightbox/__snapshots__/Lightbox.test.tsx.snap +194 -0
  160. package/dist/src/components/lightbox/index.ts +1 -0
  161. package/dist/src/components/link/Link.stories.tsx +141 -0
  162. package/dist/src/components/link/Link.test.tsx +60 -0
  163. package/dist/src/components/link/Link.tsx +156 -0
  164. package/dist/src/components/link/__snapshots__/Link.test.tsx.snap +29 -0
  165. package/dist/src/components/link/index.ts +1 -0
  166. package/dist/src/components/link-preview/LinkPreview.stories.tsx +88 -0
  167. package/dist/src/components/link-preview/LinkPreview.test.tsx +102 -0
  168. package/dist/src/components/link-preview/LinkPreview.tsx +158 -0
  169. package/dist/src/components/link-preview/index.ts +1 -0
  170. package/dist/src/components/list/List.stories.tsx +141 -0
  171. package/dist/src/components/list/List.test.tsx +29 -0
  172. package/dist/src/components/list/List.tsx +94 -0
  173. package/dist/src/components/list/ListDivider.stories.tsx +7 -0
  174. package/dist/src/components/list/ListDivider.test.tsx +29 -0
  175. package/dist/src/components/list/ListDivider.tsx +42 -0
  176. package/dist/src/components/list/ListItem.stories.tsx +62 -0
  177. package/{src/components/progress/Progress.test.tsx → dist/src/components/list/ListItem.test.tsx} +8 -7
  178. package/dist/src/components/list/ListItem.tsx +154 -0
  179. package/dist/src/components/list/ListSubheader.stories.tsx +8 -0
  180. package/dist/src/components/list/ListSubheader.test.tsx +29 -0
  181. package/dist/src/components/list/ListSubheader.tsx +43 -0
  182. package/dist/src/components/list/__snapshots__/List.test.tsx.snap +360 -0
  183. package/dist/src/components/list/__snapshots__/ListDivider.test.tsx.snap +7 -0
  184. package/dist/src/components/list/__snapshots__/ListItem.test.tsx.snap +160 -0
  185. package/dist/src/components/list/__snapshots__/ListSubheader.test.tsx.snap +9 -0
  186. package/dist/src/components/list/index.ts +4 -0
  187. package/dist/src/components/list/useInteractiveList.tsx +202 -0
  188. package/dist/src/components/message/Message.stories.tsx +27 -0
  189. package/dist/src/components/message/Message.test.tsx +76 -0
  190. package/dist/src/components/message/Message.tsx +74 -0
  191. package/dist/src/components/message/__snapshots__/Message.test.tsx.snap +15 -0
  192. package/dist/src/components/message/index.ts +1 -0
  193. package/dist/src/components/mosaic/Mosaic.stories.tsx +85 -0
  194. package/dist/src/components/mosaic/Mosaic.test.tsx +120 -0
  195. package/dist/src/components/mosaic/Mosaic.tsx +95 -0
  196. package/dist/src/components/mosaic/__snapshots__/Mosaic.test.tsx.snap +357 -0
  197. package/dist/src/components/mosaic/index.ts +1 -0
  198. package/dist/src/components/notification/Notification.test.tsx +108 -0
  199. package/dist/src/components/notification/Notification.tsx +130 -0
  200. package/dist/src/components/notification/Notifications.stories.tsx +77 -0
  201. package/dist/src/components/notification/__snapshots__/Notification.test.tsx.snap +34 -0
  202. package/dist/src/components/notification/constants.ts +28 -0
  203. package/dist/src/components/notification/index.ts +1 -0
  204. package/dist/src/components/popover/Popover.stories.tsx +386 -0
  205. package/dist/src/components/popover/Popover.test.tsx +30 -0
  206. package/dist/src/components/popover/Popover.tsx +382 -0
  207. package/dist/src/components/popover/__snapshots__/Popover.test.tsx.snap +343 -0
  208. package/dist/src/components/popover/index.ts +1 -0
  209. package/dist/src/components/popover-dialog/PopoverDialog.stories.tsx +75 -0
  210. package/dist/src/components/popover-dialog/PopoverDialog.test.tsx +65 -0
  211. package/dist/src/components/popover-dialog/PopoverDialog.tsx +65 -0
  212. package/dist/src/components/popover-dialog/index.tsx +1 -0
  213. package/dist/src/components/post-block/PostBlock.test.tsx +28 -0
  214. package/dist/src/components/post-block/PostBlock.tsx +123 -0
  215. package/dist/src/components/post-block/__snapshots__/PostBlock.test.tsx.snap +139 -0
  216. package/dist/src/components/post-block/index.ts +1 -0
  217. package/dist/src/components/progress/Progress.tsx +68 -0
  218. package/dist/src/components/progress/ProgressCircular.stories.tsx +18 -0
  219. package/dist/src/components/progress/ProgressCircular.test.tsx +49 -0
  220. package/dist/src/components/progress/ProgressCircular.tsx +68 -0
  221. package/dist/src/components/progress/ProgressLinear.stories.tsx +8 -0
  222. package/dist/src/components/progress/ProgressLinear.test.tsx +37 -0
  223. package/dist/src/components/progress/ProgressLinear.tsx +52 -0
  224. package/dist/src/components/progress/index.ts +3 -0
  225. package/dist/src/components/progress-tracker/ProgressTracker.stories.tsx +145 -0
  226. package/dist/src/components/progress-tracker/ProgressTracker.test.tsx +57 -0
  227. package/dist/src/components/progress-tracker/ProgressTracker.tsx +89 -0
  228. package/dist/src/components/progress-tracker/ProgressTrackerProvider.test.tsx +42 -0
  229. package/dist/src/components/progress-tracker/ProgressTrackerProvider.tsx +66 -0
  230. package/dist/src/components/progress-tracker/ProgressTrackerStep.test.tsx +128 -0
  231. package/dist/src/components/progress-tracker/ProgressTrackerStep.tsx +159 -0
  232. package/dist/src/components/progress-tracker/ProgressTrackerStepPanel.test.tsx +73 -0
  233. package/dist/src/components/progress-tracker/ProgressTrackerStepPanel.tsx +67 -0
  234. package/dist/src/components/progress-tracker/__snapshots__/ProgressTracker.test.tsx.snap +41 -0
  235. package/dist/src/components/progress-tracker/__snapshots__/ProgressTrackerStep.test.tsx.snap +141 -0
  236. package/dist/src/components/progress-tracker/__snapshots__/ProgressTrackerStepPanel.test.tsx.snap +25 -0
  237. package/dist/src/components/progress-tracker/index.ts +4 -0
  238. package/dist/src/components/radio-button/RadioButton.stories.tsx +28 -0
  239. package/dist/src/components/radio-button/RadioButton.test.tsx +123 -0
  240. package/dist/src/components/radio-button/RadioButton.tsx +141 -0
  241. package/dist/src/components/radio-button/RadioGroup.stories.tsx +42 -0
  242. package/dist/src/components/radio-button/RadioGroup.test.tsx +77 -0
  243. package/dist/src/components/radio-button/RadioGroup.tsx +52 -0
  244. package/dist/src/components/radio-button/__snapshots__/RadioButton.test.tsx.snap +113 -0
  245. package/dist/src/components/radio-button/__snapshots__/RadioGroup.test.tsx.snap +26 -0
  246. package/dist/src/components/radio-button/index.ts +2 -0
  247. package/dist/src/components/select/Select.stories.tsx +399 -0
  248. package/dist/src/components/select/Select.test.tsx +359 -0
  249. package/dist/src/components/select/Select.tsx +193 -0
  250. package/dist/src/components/select/SelectMultiple.stories.tsx +227 -0
  251. package/dist/src/components/select/SelectMultiple.test.tsx +405 -0
  252. package/dist/src/components/select/SelectMultiple.tsx +198 -0
  253. package/dist/src/components/select/WithSelectContext.tsx +143 -0
  254. package/dist/src/components/select/__snapshots__/Select.test.tsx.snap +43 -0
  255. package/dist/src/components/select/__snapshots__/SelectMultiple.test.tsx.snap +87 -0
  256. package/dist/src/components/select/constants.ts +53 -0
  257. package/dist/src/components/select/index.ts +2 -0
  258. package/dist/src/components/side-navigation/SideNavigation.stories.tsx +191 -0
  259. package/dist/src/components/side-navigation/SideNavigation.test.tsx +52 -0
  260. package/dist/src/components/side-navigation/SideNavigation.tsx +54 -0
  261. package/dist/src/components/side-navigation/SideNavigationItem.test.tsx +175 -0
  262. package/dist/src/components/side-navigation/SideNavigationItem.tsx +162 -0
  263. package/dist/src/components/side-navigation/__snapshots__/SideNavigation.test.tsx.snap +7 -0
  264. package/dist/src/components/side-navigation/__snapshots__/SideNavigationItem.test.tsx.snap +30 -0
  265. package/dist/src/components/side-navigation/index.ts +2 -0
  266. package/dist/src/components/skeleton/SkeletonCircle.stories.tsx +25 -0
  267. package/dist/src/components/skeleton/SkeletonCircle.test.tsx +28 -0
  268. package/dist/src/components/skeleton/SkeletonCircle.tsx +52 -0
  269. package/dist/src/components/skeleton/SkeletonRectangle.stories.tsx +107 -0
  270. package/dist/src/components/skeleton/SkeletonRectangle.test.tsx +28 -0
  271. package/dist/src/components/skeleton/SkeletonRectangle.tsx +78 -0
  272. package/dist/src/components/skeleton/SkeletonTypography.stories.tsx +26 -0
  273. package/dist/src/components/skeleton/SkeletonTypography.test.tsx +28 -0
  274. package/dist/src/components/skeleton/SkeletonTypography.tsx +57 -0
  275. package/dist/src/components/skeleton/__snapshots__/SkeletonCircle.test.tsx.snap +54 -0
  276. package/dist/src/components/skeleton/__snapshots__/SkeletonRectangle.test.tsx.snap +177 -0
  277. package/dist/src/components/skeleton/__snapshots__/SkeletonTypography.test.tsx.snap +174 -0
  278. package/dist/src/components/skeleton/index.ts +3 -0
  279. package/dist/src/components/slider/Slider.stories.tsx +29 -0
  280. package/dist/src/components/slider/Slider.test.tsx +31 -0
  281. package/dist/src/components/slider/Slider.tsx +299 -0
  282. package/dist/src/components/slider/__snapshots__/Slider.test.tsx.snap +122 -0
  283. package/dist/src/components/slider/index.ts +2 -0
  284. package/dist/src/components/slideshow/Slides.tsx +124 -0
  285. package/dist/src/components/slideshow/Slideshow.stories.tsx +212 -0
  286. package/dist/src/components/slideshow/Slideshow.test.tsx +39 -0
  287. package/dist/src/components/slideshow/Slideshow.tsx +170 -0
  288. package/dist/src/components/slideshow/SlideshowControls.stories.tsx +112 -0
  289. package/dist/src/components/slideshow/SlideshowControls.tsx +241 -0
  290. package/dist/src/components/slideshow/SlideshowItem.tsx +52 -0
  291. package/dist/src/components/slideshow/SlideshowItemGroup.tsx +64 -0
  292. package/dist/src/components/slideshow/__snapshots__/Slideshow.test.tsx.snap +157 -0
  293. package/dist/src/components/slideshow/constants.ts +24 -0
  294. package/dist/src/components/slideshow/index.ts +4 -0
  295. package/dist/src/components/slideshow/useKeyNavigate.ts +28 -0
  296. package/dist/src/components/slideshow/usePaginationVisibleRange.ts +37 -0
  297. package/dist/src/components/slideshow/useSlideFocusManagement.tsx +92 -0
  298. package/dist/src/components/slideshow/useSwipeNavigate.ts +18 -0
  299. package/dist/src/components/switch/Switch.stories.tsx +36 -0
  300. package/dist/src/components/switch/Switch.test.tsx +189 -0
  301. package/dist/src/components/switch/Switch.tsx +141 -0
  302. package/dist/src/components/switch/__snapshots__/Switch.test.tsx.snap +179 -0
  303. package/dist/src/components/switch/index.ts +1 -0
  304. package/dist/src/components/table/Table.test.tsx +28 -0
  305. package/dist/src/components/table/Table.tsx +59 -0
  306. package/dist/src/components/table/TableBody.test.tsx +22 -0
  307. package/dist/src/components/table/TableBody.tsx +44 -0
  308. package/dist/src/components/table/TableCell.test.tsx +23 -0
  309. package/dist/src/components/table/TableCell.tsx +125 -0
  310. package/dist/src/components/table/TableHeader.test.tsx +22 -0
  311. package/dist/src/components/table/TableHeader.tsx +50 -0
  312. package/dist/src/components/table/TableRow.test.tsx +22 -0
  313. package/dist/src/components/table/TableRow.tsx +68 -0
  314. package/dist/src/components/table/__snapshots__/Table.test.tsx.snap +263 -0
  315. package/dist/src/components/table/index.ts +5 -0
  316. package/dist/src/components/tabs/Tab.test.tsx +116 -0
  317. package/dist/src/components/tabs/Tab.tsx +120 -0
  318. package/dist/src/components/tabs/TabList.test.tsx +80 -0
  319. package/dist/src/components/tabs/TabList.tsx +82 -0
  320. package/dist/src/components/tabs/TabPanel.test.tsx +74 -0
  321. package/dist/src/components/tabs/TabPanel.tsx +65 -0
  322. package/dist/src/components/tabs/TabProvider.test.tsx +42 -0
  323. package/dist/src/components/tabs/TabProvider.tsx +59 -0
  324. package/dist/src/components/tabs/Tabs.stories.tsx +134 -0
  325. package/dist/src/components/tabs/__snapshots__/Tab.test.tsx.snap +62 -0
  326. package/dist/src/components/tabs/__snapshots__/TabList.test.tsx.snap +22 -0
  327. package/dist/src/components/tabs/__snapshots__/TabPanel.test.tsx.snap +25 -0
  328. package/dist/src/components/tabs/index.ts +4 -0
  329. package/dist/src/components/tabs/state.ts +116 -0
  330. package/dist/src/components/tabs/test.mocks.ts +33 -0
  331. package/dist/src/components/text/Text.stories.jsx +75 -0
  332. package/dist/src/components/text/Text.test.tsx +108 -0
  333. package/dist/src/components/text/Text.tsx +121 -0
  334. package/dist/src/components/text/index.ts +1 -0
  335. package/dist/src/components/text-field/TextField.stories.tsx +169 -0
  336. package/dist/src/components/text-field/TextField.test.tsx +171 -0
  337. package/dist/src/components/text-field/TextField.tsx +432 -0
  338. package/dist/src/components/text-field/__snapshots__/TextField.test.tsx.snap +42 -0
  339. package/dist/src/components/text-field/index.ts +1 -0
  340. package/dist/src/components/thumbnail/Thumbnail.stories.tsx +510 -0
  341. package/dist/src/components/thumbnail/Thumbnail.test.tsx +46 -0
  342. package/dist/src/components/thumbnail/Thumbnail.tsx +222 -0
  343. package/dist/src/components/thumbnail/__snapshots__/Thumbnail.test.tsx.snap +130 -0
  344. package/dist/src/components/thumbnail/index.ts +3 -0
  345. package/dist/src/components/thumbnail/types.ts +39 -0
  346. package/dist/src/components/thumbnail/useFocusPointStyle.test.ts +92 -0
  347. package/dist/src/components/thumbnail/useFocusPointStyle.tsx +111 -0
  348. package/dist/src/components/thumbnail/useImageLoad.ts +40 -0
  349. package/dist/src/components/toolbar/Toolbar.tsx +67 -0
  350. package/dist/src/components/toolbar/index.ts +1 -0
  351. package/dist/src/components/tooltip/Tooltip.stories.tsx +172 -0
  352. package/dist/src/components/tooltip/Tooltip.test.tsx +105 -0
  353. package/dist/src/components/tooltip/Tooltip.tsx +122 -0
  354. package/dist/src/components/tooltip/__snapshots__/Tooltip.test.tsx.snap +233 -0
  355. package/dist/src/components/tooltip/index.ts +1 -0
  356. package/dist/src/components/tooltip/useInjectTooltipRef.tsx +44 -0
  357. package/dist/src/components/tooltip/useTooltipOpen.tsx +113 -0
  358. package/dist/src/components/uploader/Uploader.test.tsx +87 -0
  359. package/dist/src/components/uploader/Uploader.tsx +105 -0
  360. package/dist/src/components/uploader/__snapshots__/Uploader.test.tsx.snap +14 -0
  361. package/dist/src/components/uploader/index.ts +1 -0
  362. package/dist/src/components/user-block/UserBlock.stories.tsx +76 -0
  363. package/dist/src/components/user-block/UserBlock.test.tsx +38 -0
  364. package/dist/src/components/user-block/UserBlock.tsx +179 -0
  365. package/dist/src/components/user-block/__snapshots__/UserBlock.test.tsx.snap +362 -0
  366. package/dist/src/components/user-block/index.ts +1 -0
  367. package/dist/src/constants.ts +17 -0
  368. package/dist/src/hooks/useBooleanState.tsx +13 -0
  369. package/dist/src/hooks/useCallbackOnEscape.ts +34 -0
  370. package/dist/src/hooks/useChipGroupNavigation.tsx +75 -0
  371. package/dist/src/hooks/useClickAway.tsx +47 -0
  372. package/dist/src/hooks/useDisableBodyScroll.ts +28 -0
  373. package/dist/src/hooks/useEventCallback.tsx +17 -0
  374. package/dist/src/hooks/useFocus.tsx +21 -0
  375. package/dist/src/hooks/useFocusTrap.ts +85 -0
  376. package/dist/src/hooks/useFocusWithin.ts +33 -0
  377. package/dist/src/hooks/useInfiniteScroll.tsx +60 -0
  378. package/dist/src/hooks/useIntersectionObserver.tsx +43 -0
  379. package/dist/src/hooks/useInterval.tsx +31 -0
  380. package/dist/src/hooks/useKeyboardListNavigation.tsx +204 -0
  381. package/dist/src/hooks/useListenFocus.tsx +26 -0
  382. package/dist/src/hooks/useOnResize.ts +41 -0
  383. package/dist/src/hooks/useRovingTabIndex.tsx +90 -0
  384. package/dist/src/hooks/useSlideshowControls.ts +243 -0
  385. package/dist/src/hooks/useStopPropagation.ts +21 -0
  386. package/dist/src/hooks/useTransitionVisibility.ts +54 -0
  387. package/dist/src/index.ts +58 -0
  388. package/dist/src/stories/chromaticForceScreenSize.tsx +7 -0
  389. package/dist/src/stories/generated/Autocomplete/Demos.stories.tsx +7 -0
  390. package/dist/src/stories/generated/Avatar/Demos.stories.tsx +7 -0
  391. package/dist/src/stories/generated/Badge/Demos.stories.tsx +9 -0
  392. package/dist/src/stories/generated/Button/Demos.stories.tsx +11 -0
  393. package/dist/src/stories/generated/Checkbox/Demos.stories.tsx +6 -0
  394. package/dist/src/stories/generated/Chip/Demos.stories.tsx +11 -0
  395. package/dist/src/stories/generated/CommentBlock/Demos.stories.tsx +8 -0
  396. package/dist/src/stories/generated/DatePicker/Demos.stories.tsx +8 -0
  397. package/dist/src/stories/generated/Dialog/Demos.stories.tsx +10 -0
  398. package/dist/src/stories/generated/Divider/Demos.stories.tsx +6 -0
  399. package/dist/src/stories/generated/Dropdown/Demos.stories.tsx +8 -0
  400. package/dist/src/stories/generated/ExpansionPanel/Demos.stories.tsx +9 -0
  401. package/dist/src/stories/generated/Flag/Demos.stories.tsx +6 -0
  402. package/dist/src/stories/generated/GenericBlock/Demos.stories.tsx +8 -0
  403. package/dist/src/stories/generated/Heading/Demos.stories.tsx +6 -0
  404. package/dist/src/stories/generated/Icon/Demos.stories.tsx +8 -0
  405. package/dist/src/stories/generated/ImageBlock/Demos.stories.tsx +9 -0
  406. package/dist/src/stories/generated/Lightbox/Demos.stories.tsx +6 -0
  407. package/dist/src/stories/generated/Link/Demos.stories.tsx +8 -0
  408. package/dist/src/stories/generated/LinkPreview/Demos.stories.tsx +7 -0
  409. package/dist/src/stories/generated/List/Demos.stories.tsx +11 -0
  410. package/dist/src/stories/generated/Message/Demos.stories.tsx +10 -0
  411. package/dist/src/stories/generated/Mosaic/Demos.stories.tsx +9 -0
  412. package/dist/src/stories/generated/Notification/Demos.stories.tsx +6 -0
  413. package/dist/src/stories/generated/Popover/Demos.stories.tsx +11 -0
  414. package/dist/src/stories/generated/PopoverDialog/Demos.stories.tsx +6 -0
  415. package/dist/src/stories/generated/PostBlock/Demos.stories.tsx +6 -0
  416. package/dist/src/stories/generated/Progress/Demos.stories.tsx +7 -0
  417. package/dist/src/stories/generated/ProgressTracker/Demos.stories.tsx +9 -0
  418. package/dist/src/stories/generated/RadioButton/Demos.stories.tsx +6 -0
  419. package/dist/src/stories/generated/Select/Demos.stories.tsx +14 -0
  420. package/dist/src/stories/generated/SideNavigation/Demos.stories.tsx +10 -0
  421. package/dist/src/stories/generated/Skeleton/Demos.stories.tsx +9 -0
  422. package/dist/src/stories/generated/Slider/Demos.stories.tsx +9 -0
  423. package/dist/src/stories/generated/Slideshow/Demos.stories.tsx +8 -0
  424. package/dist/src/stories/generated/Switch/Demos.stories.tsx +6 -0
  425. package/dist/src/stories/generated/Table/Demos.stories.tsx +6 -0
  426. package/dist/src/stories/generated/Tabs/Demos.stories.tsx +8 -0
  427. package/dist/src/stories/generated/TextField/Demos.stories.tsx +19 -0
  428. package/dist/src/stories/generated/Thumbnail/Demos.stories.tsx +12 -0
  429. package/dist/src/stories/generated/Toolbar/Demos.stories.tsx +10 -0
  430. package/dist/src/stories/generated/Tooltip/Demos.stories.tsx +8 -0
  431. package/dist/src/stories/generated/Uploader/Demos.stories.tsx +8 -0
  432. package/dist/src/stories/generated/UserBlock/Demos.stories.tsx +10 -0
  433. package/dist/src/stories/knobs/buttonKnob.ts +9 -0
  434. package/dist/src/stories/knobs/emphasisKnob.ts +8 -0
  435. package/dist/src/stories/knobs/enumKnob.ts +14 -0
  436. package/dist/src/stories/knobs/focusKnob.ts +3 -0
  437. package/dist/src/stories/knobs/image.ts +69 -0
  438. package/dist/src/stories/knobs/lorem.ts +59 -0
  439. package/dist/src/stories/knobs/sizeKnob.ts +5 -0
  440. package/dist/src/stories/knobs/thumbnailsKnob.ts +9 -0
  441. package/dist/src/stories/utils/CustomLink.tsx +7 -0
  442. package/dist/src/stories/withResizableBox.tsx +18 -0
  443. package/dist/src/testing/utils/commonTestsSuite.ts +71 -0
  444. package/dist/src/testing/utils/commonTestsSuiteRTL.ts +55 -0
  445. package/dist/src/testing/utils/index.ts +4 -0
  446. package/dist/src/testing/utils/itShouldRenderStories.tsx +103 -0
  447. package/dist/src/testing/utils/queries.ts +19 -0
  448. package/dist/src/untypped-modules.d.ts +7 -0
  449. package/dist/src/utils/ClickAwayProvider/ClickAwayProvider.stories.jsx +58 -0
  450. package/dist/src/utils/ClickAwayProvider/ClickAwayProvider.tsx +65 -0
  451. package/dist/src/utils/ClickAwayProvider/index.ts +1 -0
  452. package/dist/src/utils/MaterialThemeSwitcher/MaterialThemeSwitcher.tsx +54 -0
  453. package/dist/src/utils/MaterialThemeSwitcher/index.ts +1 -0
  454. package/dist/src/utils/browserDoesNotSupportHover.test.js +24 -0
  455. package/dist/src/utils/browserDoesNotSupportHover.ts +2 -0
  456. package/dist/src/utils/clamp.ts +17 -0
  457. package/dist/src/utils/className.ts +44 -0
  458. package/dist/src/utils/event.ts +1 -0
  459. package/dist/src/utils/flattenChildren.test.tsx +58 -0
  460. package/dist/src/utils/flattenChildren.ts +27 -0
  461. package/dist/src/utils/focus/constants.ts +5 -0
  462. package/dist/src/utils/focus/getFirstAndLastFocusable.test.ts +134 -0
  463. package/dist/src/utils/focus/getFirstAndLastFocusable.ts +21 -0
  464. package/dist/src/utils/focus/getFocusableElements.test.ts +151 -0
  465. package/dist/src/utils/focus/getFocusableElements.ts +7 -0
  466. package/dist/src/utils/index.ts +5 -0
  467. package/dist/src/utils/isInternetExplorer.ts +15 -0
  468. package/dist/src/utils/makeListenerTowerContext.ts +32 -0
  469. package/dist/src/utils/mergeRefs.ts +22 -0
  470. package/dist/src/utils/partitionMulti.ts +28 -0
  471. package/dist/src/utils/renderLink.tsx +17 -0
  472. package/dist/src/utils/type.ts +113 -0
  473. package/dist/src/utils/userHasReducedMotion.ts +7 -0
  474. package/dist/src/utils/utils.test.ts +48 -0
  475. package/{utils → dist/utils}/index.d.ts +0 -0
  476. package/{utils → dist/utils}/index.js +0 -0
  477. package/{utils → dist/utils}/index.js.map +0 -0
  478. package/jest/__mocks__/@storybook/addon-actions.js +3 -0
  479. package/jest/__mocks__/@storybook/addon-knobs.js +6 -0
  480. package/jest/__mocks__/emptyFileMockTransformer.js +8 -0
  481. package/jest/__mocks__/emptyModuleMock.js +1 -0
  482. package/jest/configure.js +6 -0
  483. package/jest/index.js +36 -0
  484. package/jest/transform.js +6 -0
  485. package/package.json +3 -5
  486. package/rollup.config.js +98 -0
  487. package/src/components/checkbox/Checkbox.test.tsx +2 -0
  488. package/src/components/checkbox/Checkbox.tsx +1 -0
  489. package/src/components/grid-column/GridColumn.stories.jsx +56 -0
  490. package/src/components/grid-column/GridColumn.test.jsx +58 -0
  491. package/src/components/grid-column/GridColumn.tsx +90 -0
  492. package/src/components/grid-column/index.ts +1 -0
  493. package/src/components/progress/Progress.tsx +6 -25
  494. package/src/components/progress/ProgressCircular.stories.tsx +18 -0
  495. package/src/components/progress/ProgressCircular.test.tsx +49 -0
  496. package/src/components/progress/ProgressCircular.tsx +68 -0
  497. package/src/components/progress/ProgressLinear.stories.tsx +8 -0
  498. package/src/components/progress/ProgressLinear.test.tsx +37 -0
  499. package/src/components/progress/ProgressLinear.tsx +52 -0
  500. package/src/components/progress/index.ts +2 -0
  501. package/src/index.ts +1 -0
  502. package/storybook/build +4 -0
  503. package/storybook/generate-demo-stories.js +59 -0
  504. package/storybook/main.js +67 -0
  505. package/storybook/package.json +13 -0
  506. package/storybook/preview.js +11 -0
  507. package/storybook/start +4 -0
  508. package/storybook/story-block/StoryBlock.tsx +49 -0
  509. package/storybook/story-block/decorator.jsx +7 -0
  510. package/storybook/story-block/index.scss +27 -0
  511. package/storybook/yarn.lock +13192 -0
  512. package/tsconfig.json +3 -0
  513. package/index.js.map +0 -1
  514. package/src/components/progress/__snapshots__/Progress.test.tsx.snap +0 -48
@@ -0,0 +1,141 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`<Checkbox> Props should use the given props 1`] = `
4
+ <div
5
+ className="lumx-checkbox lumx-checkbox--is-unchecked lumx-checkbox--theme-light"
6
+ >
7
+ <div
8
+ className="lumx-checkbox__input-wrapper"
9
+ >
10
+ <input
11
+ aria-describedby="fixedId-helper"
12
+ className="lumx-checkbox__input-native"
13
+ id="fixedId"
14
+ onChange={[Function]}
15
+ tabIndex={0}
16
+ type="checkbox"
17
+ />
18
+ <div
19
+ className="lumx-checkbox__input-placeholder"
20
+ >
21
+ <div
22
+ className="lumx-checkbox__input-background"
23
+ />
24
+ <div
25
+ className="lumx-checkbox__input-indicator"
26
+ >
27
+ <Icon
28
+ icon="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"
29
+ />
30
+ </div>
31
+ </div>
32
+ </div>
33
+ <div
34
+ className="lumx-checkbox__content"
35
+ >
36
+ <InputLabel
37
+ className="lumx-checkbox__label"
38
+ htmlFor="fixedId"
39
+ theme="light"
40
+ >
41
+ Test label
42
+ </InputLabel>
43
+ <InputHelper
44
+ className="lumx-checkbox__helper"
45
+ id="fixedId-helper"
46
+ kind="info"
47
+ theme="light"
48
+ >
49
+ Test helper
50
+ </InputHelper>
51
+ </div>
52
+ </div>
53
+ `;
54
+
55
+ exports[`<Checkbox> Props should use the given props while passing custom props to input 1`] = `
56
+ <div
57
+ className="lumx-checkbox lumx-checkbox--is-unchecked lumx-checkbox--theme-light"
58
+ >
59
+ <div
60
+ className="lumx-checkbox__input-wrapper"
61
+ >
62
+ <input
63
+ aria-describedby="fixedId-helper"
64
+ aria-labelledby="labelledby-id"
65
+ className="lumx-checkbox__input-native"
66
+ id="fixedId"
67
+ onChange={[Function]}
68
+ tabIndex={0}
69
+ type="checkbox"
70
+ />
71
+ <div
72
+ className="lumx-checkbox__input-placeholder"
73
+ >
74
+ <div
75
+ className="lumx-checkbox__input-background"
76
+ />
77
+ <div
78
+ className="lumx-checkbox__input-indicator"
79
+ >
80
+ <Icon
81
+ icon="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"
82
+ />
83
+ </div>
84
+ </div>
85
+ </div>
86
+ <div
87
+ className="lumx-checkbox__content"
88
+ >
89
+ <InputLabel
90
+ className="lumx-checkbox__label"
91
+ htmlFor="fixedId"
92
+ theme="light"
93
+ >
94
+ Test label
95
+ </InputLabel>
96
+ <InputHelper
97
+ className="lumx-checkbox__helper"
98
+ id="fixedId-helper"
99
+ kind="info"
100
+ theme="light"
101
+ >
102
+ Test helper
103
+ </InputHelper>
104
+ </div>
105
+ </div>
106
+ `;
107
+
108
+ exports[`<Checkbox> Snapshots and structure should render correctly 1`] = `
109
+ <div
110
+ className="lumx-checkbox lumx-checkbox--is-unchecked lumx-checkbox--theme-light"
111
+ >
112
+ <div
113
+ className="lumx-checkbox__input-wrapper"
114
+ >
115
+ <input
116
+ className="lumx-checkbox__input-native"
117
+ id="fixedId"
118
+ onChange={[Function]}
119
+ tabIndex={0}
120
+ type="checkbox"
121
+ />
122
+ <div
123
+ className="lumx-checkbox__input-placeholder"
124
+ >
125
+ <div
126
+ className="lumx-checkbox__input-background"
127
+ />
128
+ <div
129
+ className="lumx-checkbox__input-indicator"
130
+ >
131
+ <Icon
132
+ icon="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"
133
+ />
134
+ </div>
135
+ </div>
136
+ </div>
137
+ <div
138
+ className="lumx-checkbox__content"
139
+ />
140
+ </div>
141
+ `;
@@ -0,0 +1 @@
1
+ export * from './Checkbox';
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+
3
+ import { mdiClose, mdiViewList } from '@lumx/icons';
4
+ import { Chip, Icon } from '@lumx/react';
5
+
6
+ export default { title: 'LumX components/chip/Chip' };
7
+
8
+ export const Simple = ({ theme }: any) => <Chip theme={theme}>The chip</Chip>;
9
+
10
+ export const WithAfterAndBefore = ({ theme }: any) => (
11
+ <Chip
12
+ theme={theme}
13
+ after={<Icon icon={mdiClose} />}
14
+ onAfterClick={() => alert('clicked on close')}
15
+ before={<Icon icon={mdiViewList} />}
16
+ onClick={() => alert('clicked on chip')}
17
+ isClickable
18
+ >
19
+ content
20
+ </Chip>
21
+ );
@@ -0,0 +1,199 @@
1
+ import { mount, shallow } from 'enzyme';
2
+ import 'jest-enzyme';
3
+ import React, { ReactElement } from 'react';
4
+
5
+ import { ColorPalette, Theme } from '@lumx/react';
6
+ import { Wrapper } from '@lumx/react/testing/utils';
7
+ import { getBasicClass } from '@lumx/react/utils/className';
8
+ import { Chip, ChipProps } from './Chip';
9
+
10
+ const CLASSNAME = Chip.className as string;
11
+
12
+ /**
13
+ * Mounts the component and returns common DOM elements / data needed in multiple tests further down.
14
+ */
15
+ const setup = (propOverrides: Partial<ChipProps> = {}, shallowRendering = true) => {
16
+ const props = {
17
+ ...propOverrides,
18
+ };
19
+ const renderer: (el: ReactElement) => Wrapper = shallowRendering ? shallow : mount;
20
+ const wrapper = renderer(<Chip {...props} />);
21
+
22
+ return {
23
+ after: wrapper.find('.lumx-chip__after') as any,
24
+ before: wrapper.find('.lumx-chip__before') as any,
25
+ props,
26
+ wrapper,
27
+ };
28
+ };
29
+
30
+ describe('<Chip />', () => {
31
+ // 1. Test render via snapshot (default state of component).
32
+ describe('Snapshot', () => {
33
+ it('should render correctly Chip component', () => {
34
+ const { wrapper } = setup();
35
+ expect(wrapper).toMatchSnapshot();
36
+ });
37
+ });
38
+
39
+ // 2. Test defaultProps value and important props custom values.
40
+ // N/A.
41
+
42
+ // 3. Test events.
43
+ describe('Events', () => {
44
+ const mockOnClick = jest.fn();
45
+ const mockOnAfterClick = jest.fn();
46
+ const mockOnBeforeClick = jest.fn();
47
+ const mockClickEvent = {
48
+ stopPropagation: (): boolean => true,
49
+ };
50
+ const clearClickMocks = () => {
51
+ [mockOnClick, mockOnAfterClick, mockOnBeforeClick].forEach((func) => func.mockClear());
52
+ };
53
+
54
+ beforeEach(() => clearClickMocks);
55
+
56
+ it('should trigger onBeforeClick only when clicking on the "before" element', () => {
57
+ const { after, before, wrapper } = setup({
58
+ after: 'after',
59
+ before: 'before',
60
+ onAfterClick: mockOnAfterClick,
61
+ onBeforeClick: mockOnBeforeClick,
62
+ onClick: mockOnClick,
63
+ });
64
+
65
+ wrapper.simulate('click', mockClickEvent);
66
+ expect(mockOnBeforeClick).not.toHaveBeenCalled();
67
+
68
+ clearClickMocks();
69
+
70
+ after.simulate('click', mockClickEvent);
71
+ expect(mockOnBeforeClick).not.toHaveBeenCalled();
72
+
73
+ clearClickMocks();
74
+
75
+ before.simulate('click', mockClickEvent);
76
+ expect(mockOnBeforeClick).toHaveBeenCalled();
77
+ });
78
+
79
+ it('should trigger onClick when clicking on the label area', () => {
80
+ const { after, before, wrapper } = setup({
81
+ after: 'after',
82
+ before: 'before',
83
+ onAfterClick: mockOnAfterClick,
84
+ onBeforeClick: mockOnBeforeClick,
85
+ onClick: mockOnClick,
86
+ });
87
+
88
+ wrapper.simulate('click');
89
+ expect(mockOnClick).toHaveBeenCalled();
90
+
91
+ clearClickMocks();
92
+
93
+ after.simulate('click');
94
+ expect(mockOnClick).not.toHaveBeenCalled();
95
+
96
+ clearClickMocks();
97
+
98
+ before.simulate('click');
99
+ expect(mockOnClick).not.toHaveBeenCalled();
100
+ });
101
+
102
+ it('should trigger onAfterClick only when clicking on the "after" element', () => {
103
+ const { after, before, wrapper } = setup({
104
+ after: 'after',
105
+ before: 'before',
106
+ onAfterClick: mockOnAfterClick,
107
+ onBeforeClick: mockOnBeforeClick,
108
+ onClick: mockOnClick,
109
+ });
110
+
111
+ wrapper.simulate('click', mockClickEvent);
112
+ expect(mockOnAfterClick).not.toHaveBeenCalled();
113
+
114
+ clearClickMocks();
115
+
116
+ after.simulate('click', mockClickEvent);
117
+ expect(mockOnAfterClick).toHaveBeenCalled();
118
+
119
+ clearClickMocks();
120
+
121
+ before.simulate('click', mockClickEvent);
122
+ expect(mockOnAfterClick).not.toHaveBeenCalled();
123
+ });
124
+
125
+ it('should not stop propagation when clicking on a "before"or "after" element without an event handler', () => {
126
+ const onClick = jest.fn();
127
+ const { after, before } = setup(
128
+ {
129
+ after: 'after',
130
+ before: 'before',
131
+ onClick,
132
+ },
133
+ false,
134
+ );
135
+
136
+ before.simulate('click', mockClickEvent);
137
+ expect(onClick).toHaveBeenCalled();
138
+
139
+ onClick.mockClear();
140
+
141
+ after.simulate('click', mockClickEvent);
142
+ expect(onClick).toHaveBeenCalled();
143
+ });
144
+ });
145
+
146
+ // 4. Test conditions (i.e. things that display or not in the UI based on props).
147
+ describe('Conditions', () => {
148
+ it('should have an extra class on the "before" element if it is clickable', () => {
149
+ let { before } = setup({ before: 'before 1' });
150
+ expect(before).toHaveLength(1);
151
+ expect(before.hasClass('lumx-chip__before--is-clickable')).toEqual(false);
152
+
153
+ ({ before } = setup({ before: 'before 2', onBeforeClick: (): boolean => true }));
154
+ expect(before).toHaveLength(1);
155
+ expect(before.hasClass('lumx-chip__before--is-clickable')).toEqual(true);
156
+ });
157
+
158
+ it('should have an extra class on the "after" element if it is clickable', () => {
159
+ let { after } = setup({ after: 'after 1' });
160
+ expect(after).toHaveLength(1);
161
+ expect(after.hasClass('lumx-chip__after--is-clickable')).toEqual(false);
162
+
163
+ ({ after } = setup({ after: 'after 2', onAfterClick: (): boolean => true }));
164
+ expect(after).toHaveLength(1);
165
+ expect(after.hasClass('lumx-chip__after--is-clickable')).toEqual(true);
166
+ });
167
+
168
+ it('should have correct default color', () => {
169
+ const { wrapper } = setup({});
170
+ expect(wrapper).toHaveClassName(
171
+ getBasicClass({
172
+ prefix: CLASSNAME,
173
+ type: 'color',
174
+ value: ColorPalette.dark,
175
+ }),
176
+ );
177
+ });
178
+
179
+ it('should switch color with theme', () => {
180
+ const { wrapper } = setup({ theme: Theme.dark });
181
+ expect(wrapper).toHaveClassName(
182
+ getBasicClass({
183
+ prefix: CLASSNAME,
184
+ type: 'color',
185
+ value: ColorPalette.light,
186
+ }),
187
+ );
188
+ });
189
+
190
+ it('should use color over the theme', () => {
191
+ const color = ColorPalette.red;
192
+ const { wrapper } = setup({ theme: Theme.dark, color });
193
+ expect(wrapper).toHaveClassName(getBasicClass({ prefix: CLASSNAME, type: 'color', value: color }));
194
+ });
195
+ });
196
+
197
+ // 5. Test state.
198
+ // N/A.
199
+ });
@@ -0,0 +1,154 @@
1
+ import { Color, ColorPalette, Size, Theme } from '@lumx/react';
2
+ import { useStopPropagation } from '@lumx/react/hooks/useStopPropagation';
3
+
4
+ import { Comp, GenericProps, HasTheme } from '@lumx/react/utils/type';
5
+ import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
6
+ import { onEnterPressed } from '@lumx/react/utils/event';
7
+
8
+ import classNames from 'classnames';
9
+
10
+ import isFunction from 'lodash/isFunction';
11
+ import React, { forwardRef, MouseEventHandler, ReactNode } from 'react';
12
+
13
+ /**
14
+ * Chip sizes.
15
+ */
16
+ type ChipSize = Extract<Size, 's' | 'm'>;
17
+
18
+ /**
19
+ * Defines the props of the component.
20
+ */
21
+ export interface ChipProps extends GenericProps, HasTheme {
22
+ /** A component to be rendered after the content. */
23
+ after?: ReactNode;
24
+ /** A component to be rendered before the content. */
25
+ before?: ReactNode;
26
+ /** Color variant. */
27
+ color?: Color;
28
+ /** Whether the component is clickable or not. */
29
+ isClickable?: boolean;
30
+ /** Whether the component is disabled or not. */
31
+ isDisabled?: boolean;
32
+ /** Whether the chip is currently in a highlighted state or not. */
33
+ isHighlighted?: boolean;
34
+ /** Whether the component is selected or not. */
35
+ isSelected?: boolean;
36
+ /** Size variant. */
37
+ size?: ChipSize;
38
+ /** On "after" element clicked callback. */
39
+ onAfterClick?: MouseEventHandler;
40
+ /** On "before" element clicked callback. */
41
+ onBeforeClick?: MouseEventHandler;
42
+ }
43
+
44
+ /**
45
+ * Component display name.
46
+ */
47
+ const COMPONENT_NAME = 'Chip';
48
+
49
+ /**
50
+ * Component default class name and class prefix.
51
+ */
52
+ const CLASSNAME = getRootClassName(COMPONENT_NAME);
53
+
54
+ /**
55
+ * Component default props.
56
+ */
57
+ const DEFAULT_PROPS: Partial<ChipProps> = {
58
+ size: Size.m,
59
+ theme: Theme.light,
60
+ };
61
+
62
+ /**
63
+ * Chip component.
64
+ *
65
+ * @param props Component props.
66
+ * @param ref Component ref.
67
+ * @return React element.
68
+ */
69
+ export const Chip: Comp<ChipProps, HTMLAnchorElement> = forwardRef((props, ref) => {
70
+ const {
71
+ after,
72
+ before,
73
+ children,
74
+ className,
75
+ color,
76
+ disabled,
77
+ isClickable,
78
+ isDisabled = disabled,
79
+ isHighlighted,
80
+ isSelected,
81
+ onAfterClick,
82
+ onBeforeClick,
83
+ onClick,
84
+ size,
85
+ theme,
86
+ ...forwardedProps
87
+ } = props;
88
+ const hasAfterClick = isFunction(onAfterClick);
89
+ const hasBeforeClick = isFunction(onBeforeClick);
90
+ const hasOnClick = isFunction(onClick);
91
+
92
+ // Adapt color to the theme.
93
+ const chipColor = color || (theme === Theme.light ? ColorPalette.dark : ColorPalette.light);
94
+
95
+ const handleOnBeforeClick = useStopPropagation(onBeforeClick);
96
+ const handleOnAfterClick = useStopPropagation(onAfterClick);
97
+
98
+ return (
99
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
100
+ <a
101
+ {...forwardedProps}
102
+ ref={ref}
103
+ className={classNames(
104
+ className,
105
+ handleBasicClasses({
106
+ clickable: Boolean(hasOnClick) || isClickable,
107
+ color: chipColor,
108
+ isDisabled,
109
+ hasAfter: Boolean(after),
110
+ hasBefore: Boolean(before),
111
+ highlighted: Boolean(isHighlighted),
112
+ prefix: CLASSNAME,
113
+ selected: Boolean(isSelected),
114
+ size,
115
+ unselected: Boolean(!isSelected),
116
+ }),
117
+ )}
118
+ role={hasOnClick ? 'button' : undefined}
119
+ tabIndex={isDisabled || !hasOnClick ? -1 : 0}
120
+ aria-disabled={(hasOnClick && isDisabled) || undefined}
121
+ onClick={hasOnClick ? onClick : undefined}
122
+ onKeyDown={hasOnClick ? onEnterPressed(onClick) : undefined}
123
+ >
124
+ {before && (
125
+ // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
126
+ <div
127
+ className={classNames(`${CLASSNAME}__before`, {
128
+ [`${CLASSNAME}__before--is-clickable`]: hasBeforeClick,
129
+ })}
130
+ onClick={handleOnBeforeClick}
131
+ >
132
+ {before}
133
+ </div>
134
+ )}
135
+
136
+ <div className={`${CLASSNAME}__label`}>{children}</div>
137
+
138
+ {after && (
139
+ // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
140
+ <div
141
+ className={classNames(`${CLASSNAME}__after`, {
142
+ [`${CLASSNAME}__after--is-clickable`]: hasAfterClick,
143
+ })}
144
+ onClick={handleOnAfterClick}
145
+ >
146
+ {after}
147
+ </div>
148
+ )}
149
+ </a>
150
+ );
151
+ });
152
+ Chip.displayName = COMPONENT_NAME;
153
+ Chip.className = CLASSNAME;
154
+ Chip.defaultProps = DEFAULT_PROPS;
@@ -0,0 +1,29 @@
1
+ import { shallow } from 'enzyme';
2
+ import 'jest-enzyme';
3
+ import React from 'react';
4
+
5
+ import { Chip } from './Chip';
6
+ import { ChipGroup, ChipGroupProps } from './ChipGroup';
7
+
8
+ /**
9
+ * Mounts the component and returns common DOM elements / data needed in multiple tests further down.
10
+ */
11
+ const setup = (propOverrides: Partial<ChipGroupProps> = {}) => {
12
+ const props = {
13
+ children: [<Chip key="1">Chip 1</Chip>, <Chip key="2">Chip 2</Chip>, <Chip key="3">Chip 3</Chip>],
14
+ ...propOverrides,
15
+ };
16
+ const wrapper = shallow(<ChipGroup {...props} />);
17
+
18
+ return { props, wrapper };
19
+ };
20
+
21
+ describe('<ChipGroup />', () => {
22
+ // 1. Test render via snapshot (default state of component).
23
+ describe('Snapshot', () => {
24
+ it('should render correctly Chip Group component', () => {
25
+ const { wrapper } = setup();
26
+ expect(wrapper).toMatchSnapshot();
27
+ });
28
+ });
29
+ });
@@ -0,0 +1,62 @@
1
+ import { Alignment, HorizontalAlignment } from '@lumx/react/components';
2
+ import React, { forwardRef, ReactNode } from 'react';
3
+
4
+ import classNames from 'classnames';
5
+
6
+ import { Comp, GenericProps } from '@lumx/react/utils/type';
7
+ import { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';
8
+
9
+ import { useChipGroupNavigation } from '@lumx/react/hooks/useChipGroupNavigation';
10
+
11
+ /**
12
+ * Defines the props of the component.
13
+ */
14
+ export interface ChipGroupProps extends GenericProps {
15
+ /** Chip horizontal alignment. */
16
+ align?: HorizontalAlignment;
17
+ /** List of Chip. */
18
+ children: ReactNode;
19
+ }
20
+
21
+ /**
22
+ * Component default props.
23
+ */
24
+ const DEFAULT_PROPS: Partial<ChipGroupProps> = {
25
+ align: Alignment.left,
26
+ };
27
+
28
+ /**
29
+ * Component display name.
30
+ */
31
+ const COMPONENT_NAME = 'ChipGroup';
32
+
33
+ /**
34
+ * Component default class name and class prefix.
35
+ */
36
+ const CLASSNAME = getRootClassName(COMPONENT_NAME);
37
+
38
+ /**
39
+ * ChipGroup component.
40
+ *
41
+ * @param props Component props.
42
+ * @param ref Component ref.
43
+ * @return React element.
44
+ */
45
+ const InternalChipGroup: Comp<ChipGroupProps, HTMLDivElement> = forwardRef((props, ref) => {
46
+ const { align, children, className, ...forwardedProps } = props;
47
+ const chipGroupClassName = handleBasicClasses({
48
+ align,
49
+ prefix: CLASSNAME,
50
+ });
51
+
52
+ return (
53
+ <div ref={ref} {...forwardedProps} className={classNames(className, chipGroupClassName)}>
54
+ {children}
55
+ </div>
56
+ );
57
+ });
58
+ InternalChipGroup.displayName = COMPONENT_NAME;
59
+ InternalChipGroup.className = CLASSNAME;
60
+ InternalChipGroup.defaultProps = DEFAULT_PROPS;
61
+
62
+ export const ChipGroup = Object.assign(InternalChipGroup, { useChipGroupNavigation });
@@ -0,0 +1,12 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`<Chip /> Snapshot should render correctly Chip component 1`] = `
4
+ <a
5
+ className="lumx-chip lumx-chip--color-dark lumx-chip--size-m lumx-chip--is-unselected"
6
+ tabIndex={-1}
7
+ >
8
+ <div
9
+ className="lumx-chip__label"
10
+ />
11
+ </a>
12
+ `;
@@ -0,0 +1,29 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`<ChipGroup /> Snapshot should render correctly Chip Group component 1`] = `
4
+ <div
5
+ className="lumx-chip-group lumx-chip-group--align-left"
6
+ >
7
+ <Chip
8
+ key="1"
9
+ size="m"
10
+ theme="light"
11
+ >
12
+ Chip 1
13
+ </Chip>
14
+ <Chip
15
+ key="2"
16
+ size="m"
17
+ theme="light"
18
+ >
19
+ Chip 2
20
+ </Chip>
21
+ <Chip
22
+ key="3"
23
+ size="m"
24
+ theme="light"
25
+ >
26
+ Chip 3
27
+ </Chip>
28
+ </div>
29
+ `;
@@ -0,0 +1,2 @@
1
+ export * from './Chip';
2
+ export * from './ChipGroup';
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import { mdiDotsHorizontal, mdiHeart, mdiReply } from '@lumx/icons';
3
+ import { Button, CommentBlock, Emphasis, Size } from '@lumx/react';
4
+ import { IconButton } from '@lumx/react/components/button/IconButton';
5
+ import { avatarImageKnob } from '@lumx/react/stories/knobs/image';
6
+
7
+ export default { title: 'LumX components/comment-block/CommentBlock' };
8
+
9
+ export const WithHeaderActions = ({ theme }: any) => (
10
+ <CommentBlock
11
+ hasActions
12
+ actions={[
13
+ <Button key="button0" theme={theme} emphasis={Emphasis.low} size={Size.s} leftIcon={mdiHeart}>
14
+ 24 likes
15
+ </Button>,
16
+ <Button key="button1" theme={theme} emphasis={Emphasis.low} size={Size.s} leftIcon={mdiReply}>
17
+ Reply
18
+ </Button>,
19
+ ]}
20
+ theme={theme}
21
+ avatarProps={{ image: avatarImageKnob(), alt: 'Avatar' }}
22
+ date="5 days"
23
+ fullDate="Monday, March 30, 2021 at 4:06 PM"
24
+ name="Emmitt O. Lum"
25
+ text="All the rumors have finally died down and many skeptics have tightened their lips, the iPod does support video format now on its fifth generation."
26
+ headerActions={
27
+ <IconButton label="Actions" icon={mdiDotsHorizontal} theme={theme} emphasis={Emphasis.low} size={Size.s} />
28
+ }
29
+ />
30
+ );