@toptal/picasso-lab 9.1.1-alpha-sat-750--poc-picasso-with-ssr.2531 → 9.3.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 (374) hide show
  1. package/CHANGELOG.md +1385 -0
  2. package/{Calendar → dist-package/Calendar}/Calendar.d.ts +0 -0
  3. package/{Calendar → dist-package/Calendar}/Calendar.js +0 -0
  4. package/{Calendar → dist-package/Calendar}/Calendar.js.map +0 -0
  5. package/{Calendar → dist-package/Calendar}/index.d.ts +0 -0
  6. package/{Calendar → dist-package/Calendar}/index.js +0 -0
  7. package/{Calendar → dist-package/Calendar}/index.js.map +0 -0
  8. package/{Calendar → dist-package/Calendar}/styles.d.ts +0 -0
  9. package/{Calendar → dist-package/Calendar}/styles.js +0 -0
  10. package/{Calendar → dist-package/Calendar}/styles.js.map +0 -0
  11. package/{Calendar → dist-package/Calendar}/types.d.ts +0 -0
  12. package/{Calendar → dist-package/Calendar}/types.js +0 -0
  13. package/{Calendar → dist-package/Calendar}/types.js.map +0 -0
  14. package/{DatePicker → dist-package/DatePicker}/DatePicker.d.ts +9 -9
  15. package/{DatePicker → dist-package/DatePicker}/DatePicker.js +24 -14
  16. package/dist-package/DatePicker/DatePicker.js.map +1 -0
  17. package/dist-package/DatePicker/constants.d.ts +2 -0
  18. package/dist-package/DatePicker/constants.js +3 -0
  19. package/dist-package/DatePicker/constants.js.map +1 -0
  20. package/dist-package/DatePicker/index.d.ts +5 -0
  21. package/dist-package/DatePicker/index.js +4 -0
  22. package/{DatePicker → dist-package/DatePicker}/index.js.map +1 -1
  23. package/{DatePicker → dist-package/DatePicker}/styles.d.ts +0 -0
  24. package/{DatePicker → dist-package/DatePicker}/styles.js +0 -0
  25. package/{DatePicker → dist-package/DatePicker}/styles.js.map +0 -0
  26. package/dist-package/DatePicker/types.d.ts +8 -0
  27. package/dist-package/DatePicker/types.js +2 -0
  28. package/dist-package/DatePicker/types.js.map +1 -0
  29. package/{DatePicker → dist-package/DatePicker}/utils.d.ts +3 -0
  30. package/{DatePicker → dist-package/DatePicker}/utils.js +12 -0
  31. package/{DatePicker → dist-package/DatePicker}/utils.js.map +1 -1
  32. package/{Drawer → dist-package/Drawer}/Drawer.d.ts +0 -0
  33. package/{Drawer → dist-package/Drawer}/Drawer.js +0 -0
  34. package/{Drawer → dist-package/Drawer}/Drawer.js.map +0 -0
  35. package/{Drawer → dist-package/Drawer}/index.d.ts +0 -0
  36. package/{Drawer → dist-package/Drawer}/index.js +0 -0
  37. package/{Drawer → dist-package/Drawer}/index.js.map +0 -0
  38. package/{Drawer → dist-package/Drawer}/styles.d.ts +0 -0
  39. package/{Drawer → dist-package/Drawer}/styles.js +0 -0
  40. package/{Drawer → dist-package/Drawer}/styles.js.map +0 -0
  41. package/{DrawerTitle → dist-package/DrawerTitle}/DrawerTitle.d.ts +0 -0
  42. package/{DrawerTitle → dist-package/DrawerTitle}/DrawerTitle.js +0 -0
  43. package/{DrawerTitle → dist-package/DrawerTitle}/DrawerTitle.js.map +0 -0
  44. package/{DrawerTitle → dist-package/DrawerTitle}/index.d.ts +0 -0
  45. package/{DrawerTitle → dist-package/DrawerTitle}/index.js +0 -0
  46. package/{DrawerTitle → dist-package/DrawerTitle}/index.js.map +0 -0
  47. package/{DrawerTitle → dist-package/DrawerTitle}/styles.d.ts +0 -0
  48. package/{DrawerTitle → dist-package/DrawerTitle}/styles.js +0 -0
  49. package/{DrawerTitle → dist-package/DrawerTitle}/styles.js.map +0 -0
  50. package/{Dropzone → dist-package/Dropzone}/Dropzone.d.ts +0 -0
  51. package/{Dropzone → dist-package/Dropzone}/Dropzone.js +1 -1
  52. package/{Dropzone → dist-package/Dropzone}/Dropzone.js.map +1 -1
  53. package/{Dropzone → dist-package/Dropzone}/index.d.ts +0 -0
  54. package/{Dropzone → dist-package/Dropzone}/index.js +0 -0
  55. package/{Dropzone → dist-package/Dropzone}/index.js.map +0 -0
  56. package/{Dropzone → dist-package/Dropzone}/styles.d.ts +1 -1
  57. package/{Dropzone → dist-package/Dropzone}/styles.js +0 -0
  58. package/{Dropzone → dist-package/Dropzone}/styles.js.map +0 -0
  59. package/{Dropzone → dist-package/Dropzone}/types.d.ts +0 -0
  60. package/{Dropzone → dist-package/Dropzone}/types.js +0 -0
  61. package/{Dropzone → dist-package/Dropzone}/types.js.map +0 -0
  62. package/{EmptyState → dist-package/EmptyState}/EmptyState.d.ts +0 -0
  63. package/{EmptyState → dist-package/EmptyState}/EmptyState.js +0 -0
  64. package/{EmptyState → dist-package/EmptyState}/EmptyState.js.map +0 -0
  65. package/{EmptyState → dist-package/EmptyState}/index.d.ts +0 -0
  66. package/{EmptyState → dist-package/EmptyState}/index.js +0 -0
  67. package/{EmptyState → dist-package/EmptyState}/index.js.map +0 -0
  68. package/{EmptyStateCollection → dist-package/EmptyStateCollection}/EmptyStateCollection.d.ts +0 -0
  69. package/{EmptyStateCollection → dist-package/EmptyStateCollection}/EmptyStateCollection.js +0 -0
  70. package/{EmptyStateCollection → dist-package/EmptyStateCollection}/EmptyStateCollection.js.map +0 -0
  71. package/{EmptyStateCollection → dist-package/EmptyStateCollection}/index.d.ts +0 -0
  72. package/{EmptyStateCollection → dist-package/EmptyStateCollection}/index.js +0 -0
  73. package/{EmptyStateCollection → dist-package/EmptyStateCollection}/index.js.map +0 -0
  74. package/{EmptyStateCollection → dist-package/EmptyStateCollection}/styles.d.ts +0 -0
  75. package/{EmptyStateCollection → dist-package/EmptyStateCollection}/styles.js +0 -0
  76. package/{EmptyStateCollection → dist-package/EmptyStateCollection}/styles.js.map +0 -0
  77. package/{EmptyStatePage → dist-package/EmptyStatePage}/EmptyStatePage.d.ts +0 -0
  78. package/{EmptyStatePage → dist-package/EmptyStatePage}/EmptyStatePage.js +0 -0
  79. package/{EmptyStatePage → dist-package/EmptyStatePage}/EmptyStatePage.js.map +0 -0
  80. package/{EmptyStatePage → dist-package/EmptyStatePage}/index.d.ts +0 -0
  81. package/{EmptyStatePage → dist-package/EmptyStatePage}/index.js +0 -0
  82. package/{EmptyStatePage → dist-package/EmptyStatePage}/index.js.map +0 -0
  83. package/{EmptyStatePage → dist-package/EmptyStatePage}/styles.d.ts +0 -0
  84. package/{EmptyStatePage → dist-package/EmptyStatePage}/styles.js +0 -0
  85. package/{EmptyStatePage → dist-package/EmptyStatePage}/styles.js.map +0 -0
  86. package/{Note → dist-package/Note}/Note.d.ts +0 -0
  87. package/{Note → dist-package/Note}/Note.js +0 -0
  88. package/{Note → dist-package/Note}/Note.js.map +0 -0
  89. package/{Note → dist-package/Note}/index.d.ts +0 -0
  90. package/{Note → dist-package/Note}/index.js +0 -0
  91. package/{Note → dist-package/Note}/index.js.map +0 -0
  92. package/{Note → dist-package/Note}/styles.d.ts +0 -0
  93. package/{Note → dist-package/Note}/styles.js +0 -0
  94. package/{Note → dist-package/Note}/styles.js.map +0 -0
  95. package/{NoteContent → dist-package/NoteContent}/NoteContent.d.ts +0 -0
  96. package/{NoteContent → dist-package/NoteContent}/NoteContent.js +0 -0
  97. package/{NoteContent → dist-package/NoteContent}/NoteContent.js.map +0 -0
  98. package/{NoteContent → dist-package/NoteContent}/index.d.ts +0 -0
  99. package/{NoteContent → dist-package/NoteContent}/index.js +0 -0
  100. package/{NoteContent → dist-package/NoteContent}/index.js.map +0 -0
  101. package/{NoteSubtitle → dist-package/NoteSubtitle}/NoteSubtitle.d.ts +0 -0
  102. package/{NoteSubtitle → dist-package/NoteSubtitle}/NoteSubtitle.js +0 -0
  103. package/{NoteSubtitle → dist-package/NoteSubtitle}/NoteSubtitle.js.map +0 -0
  104. package/{NoteSubtitle → dist-package/NoteSubtitle}/index.d.ts +0 -0
  105. package/{NoteSubtitle → dist-package/NoteSubtitle}/index.js +0 -0
  106. package/{NoteSubtitle → dist-package/NoteSubtitle}/index.js.map +0 -0
  107. package/{NoteTitle → dist-package/NoteTitle}/NoteTitle.d.ts +0 -0
  108. package/{NoteTitle → dist-package/NoteTitle}/NoteTitle.js +0 -0
  109. package/{NoteTitle → dist-package/NoteTitle}/NoteTitle.js.map +0 -0
  110. package/{NoteTitle → dist-package/NoteTitle}/index.d.ts +0 -0
  111. package/{NoteTitle → dist-package/NoteTitle}/index.js +0 -0
  112. package/{NoteTitle → dist-package/NoteTitle}/index.js.map +0 -0
  113. package/{NoteTitle → dist-package/NoteTitle}/styles.d.ts +0 -0
  114. package/{NoteTitle → dist-package/NoteTitle}/styles.js +0 -0
  115. package/{NoteTitle → dist-package/NoteTitle}/styles.js.map +0 -0
  116. package/{OverviewBlock → dist-package/OverviewBlock}/OverviewBlock.d.ts +0 -0
  117. package/{OverviewBlock → dist-package/OverviewBlock}/OverviewBlock.js +0 -0
  118. package/{OverviewBlock → dist-package/OverviewBlock}/OverviewBlock.js.map +0 -0
  119. package/{OverviewBlock → dist-package/OverviewBlock}/index.d.ts +0 -0
  120. package/{OverviewBlock → dist-package/OverviewBlock}/index.js +0 -0
  121. package/{OverviewBlock → dist-package/OverviewBlock}/index.js.map +0 -0
  122. package/{OverviewBlock → dist-package/OverviewBlock}/styles.d.ts +0 -0
  123. package/{OverviewBlock → dist-package/OverviewBlock}/styles.js +0 -0
  124. package/{OverviewBlock → dist-package/OverviewBlock}/styles.js.map +0 -0
  125. package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/OverviewBlockGroup.d.ts +0 -0
  126. package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/OverviewBlockGroup.js +0 -0
  127. package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/OverviewBlockGroup.js.map +0 -0
  128. package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/OverviewBlockGroupContext.d.ts +0 -0
  129. package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/OverviewBlockGroupContext.js +0 -0
  130. package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/OverviewBlockGroupContext.js.map +0 -0
  131. package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/index.d.ts +0 -0
  132. package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/index.js +0 -0
  133. package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/index.js.map +0 -0
  134. package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/settings.d.ts +0 -0
  135. package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/settings.js +0 -0
  136. package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/settings.js.map +0 -0
  137. package/{OverviewBlockRow → dist-package/OverviewBlockRow}/OverviewBlockRow.d.ts +0 -0
  138. package/{OverviewBlockRow → dist-package/OverviewBlockRow}/OverviewBlockRow.js +0 -0
  139. package/{OverviewBlockRow → dist-package/OverviewBlockRow}/OverviewBlockRow.js.map +0 -0
  140. package/{OverviewBlockRow → dist-package/OverviewBlockRow}/index.d.ts +0 -0
  141. package/{OverviewBlockRow → dist-package/OverviewBlockRow}/index.js +0 -0
  142. package/{OverviewBlockRow → dist-package/OverviewBlockRow}/index.js.map +0 -0
  143. package/{OverviewBlockRow → dist-package/OverviewBlockRow}/styles.d.ts +0 -0
  144. package/{OverviewBlockRow → dist-package/OverviewBlockRow}/styles.js +0 -0
  145. package/{OverviewBlockRow → dist-package/OverviewBlockRow}/styles.js.map +0 -0
  146. package/dist-package/README.md +26 -0
  147. package/{Section → dist-package/Section}/Section.d.ts +1 -1
  148. package/{Section → dist-package/Section}/Section.js +6 -5
  149. package/dist-package/Section/Section.js.map +1 -0
  150. package/{Section → dist-package/Section}/index.d.ts +0 -0
  151. package/{Section → dist-package/Section}/index.js +0 -0
  152. package/{Section → dist-package/Section}/index.js.map +0 -0
  153. package/dist-package/Section/styles.d.ts +3 -0
  154. package/dist-package/Section/styles.js +60 -0
  155. package/dist-package/Section/styles.js.map +1 -0
  156. package/{Timeline → dist-package/Timeline}/Timeline.d.ts +0 -0
  157. package/{Timeline → dist-package/Timeline}/Timeline.js +0 -0
  158. package/{Timeline → dist-package/Timeline}/Timeline.js.map +0 -0
  159. package/{Timeline → dist-package/Timeline}/index.d.ts +0 -0
  160. package/{Timeline → dist-package/Timeline}/index.js +0 -0
  161. package/{Timeline → dist-package/Timeline}/index.js.map +0 -0
  162. package/{TimelineRow → dist-package/TimelineRow}/TimelineRow.d.ts +0 -0
  163. package/{TimelineRow → dist-package/TimelineRow}/TimelineRow.js +0 -0
  164. package/{TimelineRow → dist-package/TimelineRow}/TimelineRow.js.map +0 -0
  165. package/{TimelineRow → dist-package/TimelineRow}/index.d.ts +0 -0
  166. package/{TimelineRow → dist-package/TimelineRow}/index.js +0 -0
  167. package/{TimelineRow → dist-package/TimelineRow}/index.js.map +0 -0
  168. package/{TimelineRow → dist-package/TimelineRow}/styles.d.ts +0 -0
  169. package/{TimelineRow → dist-package/TimelineRow}/styles.js +0 -0
  170. package/{TimelineRow → dist-package/TimelineRow}/styles.js.map +0 -0
  171. package/{TypographyOverflow → dist-package/TypographyOverflow}/TypographyOverflow.d.ts +0 -0
  172. package/{TypographyOverflow → dist-package/TypographyOverflow}/TypographyOverflow.js +0 -0
  173. package/{TypographyOverflow → dist-package/TypographyOverflow}/TypographyOverflow.js.map +0 -0
  174. package/{TypographyOverflow → dist-package/TypographyOverflow}/index.d.ts +0 -0
  175. package/{TypographyOverflow → dist-package/TypographyOverflow}/index.js +0 -0
  176. package/{TypographyOverflow → dist-package/TypographyOverflow}/index.js.map +0 -0
  177. package/{TypographyOverflow → dist-package/TypographyOverflow}/styles.d.ts +0 -0
  178. package/{TypographyOverflow → dist-package/TypographyOverflow}/styles.js +0 -0
  179. package/{TypographyOverflow → dist-package/TypographyOverflow}/styles.js.map +0 -0
  180. package/{index.d.ts → dist-package/index.d.ts} +2 -2
  181. package/{index.js → dist-package/index.js} +1 -1
  182. package/dist-package/index.js.map +1 -0
  183. package/dist-package/package.json +53 -0
  184. package/package.json +4 -5
  185. package/src/Calendar/Calendar.tsx +215 -0
  186. package/src/Calendar/__snapshots__/test.tsx.snap +447 -0
  187. package/src/Calendar/index.ts +2 -0
  188. package/src/Calendar/styles.ts +104 -0
  189. package/src/Calendar/test.tsx +20 -0
  190. package/src/Calendar/types.ts +42 -0
  191. package/src/DatePicker/DatePicker.tsx +366 -0
  192. package/src/DatePicker/__image_snapshots__/datepicker-full-width-snap.png +0 -0
  193. package/src/DatePicker/__image_snapshots__/datepicker-with-custom-day-rendering-snap.png +0 -0
  194. package/src/DatePicker/__snapshots__/test.tsx.snap +51 -0
  195. package/src/DatePicker/constants.ts +2 -0
  196. package/src/DatePicker/index.ts +5 -0
  197. package/src/DatePicker/story/AllowCustomValue.example.tsx +33 -0
  198. package/src/DatePicker/story/Autocomplete.example.tsx +47 -0
  199. package/src/DatePicker/story/Default.example.tsx +19 -0
  200. package/src/DatePicker/story/Error.example.tsx +26 -0
  201. package/src/DatePicker/story/Range.example.tsx +22 -0
  202. package/src/DatePicker/story/WithCustomDayRendering.example.tsx +47 -0
  203. package/src/DatePicker/story/WithInitialValue.example.tsx +19 -0
  204. package/src/DatePicker/story/WithInputProps.example.tsx +24 -0
  205. package/src/DatePicker/story/WithNoHideOnSelect.example.tsx +20 -0
  206. package/src/DatePicker/story/WithOnBlurHandler.example.tsx +22 -0
  207. package/src/DatePicker/story/WithSelectionLimits.example.tsx +32 -0
  208. package/src/DatePicker/story/WithTimezone.example.tsx +25 -0
  209. package/src/DatePicker/story/index.jsx +50 -0
  210. package/src/DatePicker/styles.ts +8 -0
  211. package/src/DatePicker/test.tsx +370 -0
  212. package/src/DatePicker/types.ts +13 -0
  213. package/src/DatePicker/utils.ts +123 -0
  214. package/src/Drawer/Drawer.tsx +105 -0
  215. package/src/Drawer/__image_snapshots__/drawer-custom-title-effect-1-snap.png +0 -0
  216. package/src/Drawer/__image_snapshots__/drawer-custom-title-snap.png +0 -0
  217. package/src/Drawer/__image_snapshots__/drawer-default-effect-1-snap.png +0 -0
  218. package/src/Drawer/__image_snapshots__/drawer-default-snap.png +0 -0
  219. package/src/Drawer/__image_snapshots__/drawer-width-effect-1-snap.png +0 -0
  220. package/src/Drawer/__image_snapshots__/drawer-width-effect-2-snap.png +0 -0
  221. package/src/Drawer/__image_snapshots__/drawer-width-effect-3-snap.png +0 -0
  222. package/src/Drawer/__image_snapshots__/drawer-width-effect-4-snap.png +0 -0
  223. package/src/Drawer/__image_snapshots__/drawer-width-effect-5-snap.png +0 -0
  224. package/src/Drawer/__image_snapshots__/drawer-width-snap.png +0 -0
  225. package/src/Drawer/__image_snapshots__/drawer-without-title-effect-1-snap.png +0 -0
  226. package/src/Drawer/__image_snapshots__/drawer-without-title-snap.png +0 -0
  227. package/src/Drawer/index.ts +6 -0
  228. package/src/Drawer/story/CustomTitle.example.tsx +32 -0
  229. package/src/Drawer/story/Default.example.tsx +29 -0
  230. package/src/Drawer/story/DrawerAndNotification.example.tsx +34 -0
  231. package/src/Drawer/story/Widths.example.tsx +46 -0
  232. package/src/Drawer/story/WithoutTitle.example.tsx +22 -0
  233. package/src/Drawer/story/index.jsx +80 -0
  234. package/src/Drawer/styles.ts +42 -0
  235. package/src/DrawerTitle/DrawerTitle.tsx +35 -0
  236. package/src/DrawerTitle/index.ts +1 -0
  237. package/src/DrawerTitle/styles.ts +12 -0
  238. package/src/Dropzone/Dropzone.tsx +146 -0
  239. package/src/Dropzone/__snapshots__/test.tsx.snap +40 -0
  240. package/src/Dropzone/index.ts +7 -0
  241. package/src/Dropzone/story/Default.example.tsx +8 -0
  242. package/src/Dropzone/story/Disabled.example.tsx +25 -0
  243. package/src/Dropzone/story/Error.example.tsx +16 -0
  244. package/src/Dropzone/story/Multiple.example.tsx +30 -0
  245. package/src/Dropzone/story/Uploader.example.tsx +116 -0
  246. package/src/Dropzone/story/Uploading.example.tsx +16 -0
  247. package/src/Dropzone/story/index.jsx +85 -0
  248. package/src/Dropzone/styles.ts +43 -0
  249. package/src/Dropzone/test.tsx +33 -0
  250. package/src/Dropzone/types.ts +56 -0
  251. package/src/EmptyState/EmptyState.tsx +7 -0
  252. package/src/EmptyState/index.tsx +1 -0
  253. package/src/EmptyState/story/index.jsx +13 -0
  254. package/src/EmptyStateCollection/EmptyStateCollection.tsx +56 -0
  255. package/src/EmptyStateCollection/__image_snapshots__/emptystate-collection-emptystatecollection-snap.png +0 -0
  256. package/src/EmptyStateCollection/index.tsx +1 -0
  257. package/src/EmptyStateCollection/story/Default.example.tsx +11 -0
  258. package/src/EmptyStateCollection/story/index.jsx +20 -0
  259. package/src/EmptyStateCollection/styles.ts +10 -0
  260. package/src/EmptyStatePage/EmptyStatePage.tsx +65 -0
  261. package/src/EmptyStatePage/__image_snapshots__/emptystate-page-emptystatepage-snap.png +0 -0
  262. package/src/EmptyStatePage/index.tsx +1 -0
  263. package/src/EmptyStatePage/story/Default.example.tsx +21 -0
  264. package/src/EmptyStatePage/story/index.jsx +21 -0
  265. package/src/EmptyStatePage/styles.ts +9 -0
  266. package/src/Note/Note.tsx +36 -0
  267. package/src/Note/__snapshots__/test.tsx.snap +37 -0
  268. package/src/Note/index.ts +6 -0
  269. package/src/Note/story/Default.example.tsx +14 -0
  270. package/src/Note/story/index.jsx +23 -0
  271. package/src/Note/styles.ts +27 -0
  272. package/src/Note/test.tsx +22 -0
  273. package/src/NoteContent/NoteContent.tsx +23 -0
  274. package/src/NoteContent/index.ts +1 -0
  275. package/src/NoteContent/story/index.jsx +12 -0
  276. package/src/NoteSubtitle/NoteSubtitle.tsx +25 -0
  277. package/src/NoteSubtitle/index.ts +1 -0
  278. package/src/NoteSubtitle/story/index.jsx +12 -0
  279. package/src/NoteTitle/NoteTitle.tsx +34 -0
  280. package/src/NoteTitle/index.ts +1 -0
  281. package/src/NoteTitle/story/index.jsx +12 -0
  282. package/src/NoteTitle/styles.ts +8 -0
  283. package/src/OverviewBlock/OverviewBlock.tsx +125 -0
  284. package/src/OverviewBlock/__image_snapshots__/overviewblock-default-snap.png +0 -0
  285. package/src/OverviewBlock/__image_snapshots__/overviewblock-multi-line-snap.png +0 -0
  286. package/src/OverviewBlock/__image_snapshots__/overviewblock-number-snap.png +0 -0
  287. package/src/OverviewBlock/__image_snapshots__/overviewblock-routing-snap.png +0 -0
  288. package/src/OverviewBlock/__image_snapshots__/overviewblock-text-snap.png +0 -0
  289. package/src/OverviewBlock/index.ts +6 -0
  290. package/src/OverviewBlock/story/Default.example.tsx +35 -0
  291. package/src/OverviewBlock/story/Multiline.example.tsx +51 -0
  292. package/src/OverviewBlock/story/Number.example.tsx +20 -0
  293. package/src/OverviewBlock/story/Routing.example.tsx +40 -0
  294. package/src/OverviewBlock/story/Text.example.tsx +15 -0
  295. package/src/OverviewBlock/story/index.jsx +100 -0
  296. package/src/OverviewBlock/styles.ts +44 -0
  297. package/src/OverviewBlock/test.tsx +111 -0
  298. package/src/OverviewBlockGroup/OverviewBlockGroup.tsx +56 -0
  299. package/src/OverviewBlockGroup/OverviewBlockGroupContext.tsx +21 -0
  300. package/src/OverviewBlockGroup/__image_snapshots__/visual-variants-of-the-groups-block-width-snap.png +0 -0
  301. package/src/OverviewBlockGroup/__image_snapshots__/visual-variants-of-the-groups-center-aligned-snap.png +0 -0
  302. package/src/OverviewBlockGroup/index.ts +1 -0
  303. package/src/OverviewBlockGroup/settings.ts +2 -0
  304. package/src/OverviewBlockGroup/story/BlockWidth.example.tsx +38 -0
  305. package/src/OverviewBlockGroup/story/CenterAligned.example.tsx +17 -0
  306. package/src/OverviewBlockGroup/story/index.jsx +25 -0
  307. package/src/OverviewBlockGroup/test.tsx +17 -0
  308. package/src/OverviewBlockRow/OverviewBlockRow.tsx +22 -0
  309. package/src/OverviewBlockRow/index.ts +1 -0
  310. package/src/OverviewBlockRow/story/index.jsx +11 -0
  311. package/src/OverviewBlockRow/styles.ts +27 -0
  312. package/src/Section/Section.tsx +163 -0
  313. package/src/Section/__snapshots__/test.tsx.snap +186 -0
  314. package/src/Section/index.ts +6 -0
  315. package/src/Section/story/Actions.example.tsx +85 -0
  316. package/src/Section/story/Collapsible.example.tsx +113 -0
  317. package/src/Section/story/Default.example.tsx +77 -0
  318. package/src/Section/story/TitleSize.example.tsx +34 -0
  319. package/src/Section/story/Variant.example.tsx +108 -0
  320. package/src/Section/story/index.jsx +35 -0
  321. package/src/Section/styles.ts +65 -0
  322. package/src/Section/test.tsx +115 -0
  323. package/src/Timeline/Timeline.tsx +25 -0
  324. package/src/Timeline/__snapshots__/test.tsx.snap +332 -0
  325. package/src/Timeline/index.ts +6 -0
  326. package/src/Timeline/story/Dates.example.tsx +52 -0
  327. package/src/Timeline/story/Default.example.tsx +34 -0
  328. package/src/Timeline/story/TrimLastConnector.example.tsx +29 -0
  329. package/src/Timeline/story/index.jsx +27 -0
  330. package/src/Timeline/test.tsx +101 -0
  331. package/src/TimelineRow/TimelineRow.tsx +83 -0
  332. package/src/TimelineRow/index.ts +6 -0
  333. package/src/TimelineRow/story/index.jsx +11 -0
  334. package/src/TimelineRow/styles.ts +47 -0
  335. package/src/TypographyOverflow/TypographyOverflow.tsx +153 -0
  336. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-checkbox-label-effect-1-snap.png +0 -0
  337. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-checkbox-label-snap.png +0 -0
  338. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-custom-tooltip-content-effect-1-snap.png +0 -0
  339. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-custom-tooltip-content-snap.png +0 -0
  340. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-default-effect-1-snap.png +0 -0
  341. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-default-effect-2-snap.png +0 -0
  342. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-default-snap.png +0 -0
  343. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-delay-effect-1-snap.png +0 -0
  344. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-delay-effect-2-snap.png +0 -0
  345. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-delay-snap.png +0 -0
  346. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-light-tooltip-background-effect-1-snap.png +0 -0
  347. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-light-tooltip-background-effect-2-snap.png +0 -0
  348. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-light-tooltip-background-snap.png +0 -0
  349. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-multiline-effect-1-snap.png +0 -0
  350. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-multiline-effect-2-snap.png +0 -0
  351. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-multiline-effect-3-snap.png +0 -0
  352. package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-multiline-snap.png +0 -0
  353. package/src/TypographyOverflow/index.ts +6 -0
  354. package/src/TypographyOverflow/story/CheckboxLabel.example.tsx +21 -0
  355. package/src/TypographyOverflow/story/CustomTooltip.example.tsx +22 -0
  356. package/src/TypographyOverflow/story/Default.example.tsx +32 -0
  357. package/src/TypographyOverflow/story/Delay.example.tsx +29 -0
  358. package/src/TypographyOverflow/story/GridWithControls.example.tsx +64 -0
  359. package/src/TypographyOverflow/story/Multiline.example.tsx +59 -0
  360. package/src/TypographyOverflow/story/TooltipVariants.example.tsx +23 -0
  361. package/src/TypographyOverflow/story/index.jsx +83 -0
  362. package/src/TypographyOverflow/styles.ts +29 -0
  363. package/src/TypographyOverflow/test.tsx +60 -0
  364. package/src/index.ts +35 -0
  365. package/src/story/index.jsx +10 -0
  366. package/tsconfig.build.json +7 -0
  367. package/DatePicker/DatePicker.js.map +0 -1
  368. package/DatePicker/index.d.ts +0 -2
  369. package/DatePicker/index.js +0 -2
  370. package/Section/Section.js.map +0 -1
  371. package/Section/styles.d.ts +0 -3
  372. package/Section/styles.js +0 -36
  373. package/Section/styles.js.map +0 -1
  374. package/index.js.map +0 -1
@@ -0,0 +1,100 @@
1
+ import overviewBlockGroupStory from '../../OverviewBlockGroup/story'
2
+ import overviewBlockRowStory from '../../OverviewBlockRow/story'
3
+ import { OverviewBlock } from '../OverviewBlock'
4
+ import PicassoBook from '~/.storybook/components/PicassoBook'
5
+
6
+ const page = PicassoBook.section('Picasso Lab').createPage(
7
+ 'OverviewBlock',
8
+ 'Allows displaying counters.'
9
+ )
10
+
11
+ page
12
+ .createTabChapter('Props')
13
+ .addComponentDocs({
14
+ component: OverviewBlock,
15
+ name: 'OverviewBlock',
16
+ // react-docgen-typescript doesn't work with generics, so we have to generate this
17
+ // documentation manually
18
+ additionalDocs: {
19
+ children: {
20
+ name: 'children',
21
+ type: 'ReactNode',
22
+ description: 'Content of the component'
23
+ },
24
+ value: {
25
+ name: 'value',
26
+ type: 'string',
27
+ description: 'Counter value'
28
+ },
29
+ title: {
30
+ name: 'title',
31
+ type: 'string',
32
+ description: 'Counter title'
33
+ },
34
+ color: {
35
+ name: 'variant',
36
+ type: {
37
+ name: 'enum',
38
+ enums: [
39
+ "'value-red'",
40
+ "'value-green'",
41
+ "'value-blue'",
42
+ "'value-yellow'",
43
+ "'label-red'",
44
+ "'label-green'",
45
+ "'label-blue'",
46
+ "'label-yellow'"
47
+ ]
48
+ },
49
+ description: 'The color variant'
50
+ },
51
+ align: {
52
+ name: 'align',
53
+ type: {
54
+ name: 'enum',
55
+ enums: ["'default'", "'center'"]
56
+ },
57
+ defaultValue: 'default',
58
+ description:
59
+ 'Value and label alignment. By default content is aligned to the left.'
60
+ },
61
+ width: {
62
+ name: 'width',
63
+ type: {
64
+ name: 'enum',
65
+ enums: ["'narrow'", "'regular'", "'wide'"]
66
+ },
67
+ defaultValue: 'regular',
68
+ description: 'The width variant'
69
+ },
70
+ as: {
71
+ name: 'as',
72
+ type: {
73
+ name: 'enum'
74
+ },
75
+ defaultValue: 'button',
76
+ description:
77
+ 'The component used for the root node.\nEither a string to use a DOM element or a component.'
78
+ },
79
+ onClick: {
80
+ name: 'onClick',
81
+ type: {
82
+ name: 'function',
83
+ description: '(event: MouseEvent) => void'
84
+ },
85
+ description: 'Callback invoked when component is clicked'
86
+ }
87
+ }
88
+ })
89
+ .addComponentDocs(overviewBlockGroupStory.componentDocs)
90
+ .addComponentDocs(overviewBlockRowStory.componentDocs)
91
+
92
+ page
93
+ .createChapter()
94
+ .addExample('OverviewBlock/story/Default.example.tsx', 'Default')
95
+ .addExample('OverviewBlock/story/Text.example.tsx', 'Text')
96
+ .addExample('OverviewBlock/story/Number.example.tsx', 'Number')
97
+ .addExample('OverviewBlock/story/Multiline.example.tsx', 'Multi-line')
98
+ .addExample('OverviewBlock/story/Routing.example.tsx', 'Routing')
99
+
100
+ page.connect(overviewBlockGroupStory.chapter)
@@ -0,0 +1,44 @@
1
+ import { createStyles, Theme } from '@material-ui/core/styles'
2
+ import { rem } from '@toptal/picasso-shared'
3
+
4
+ export default ({ palette, sizes }: Theme) =>
5
+ createStyles({
6
+ root: {
7
+ display: 'flex',
8
+ flexDirection: 'column',
9
+ backgroundColor: palette.common.white,
10
+ margin: 0,
11
+ minWidth: rem('150px'),
12
+ border: 'none',
13
+ textDecoration: 'none',
14
+ '&:not(:first-child)': {
15
+ borderLeft: `${sizes.borderWidth} solid ${palette.grey.light2}`
16
+ }
17
+ },
18
+ clickable: {
19
+ cursor: 'pointer',
20
+ outline: 'none',
21
+ '&:hover': {
22
+ backgroundColor: palette.blue.lighter
23
+ }
24
+ },
25
+ disableOutline: {
26
+ outline: 'none'
27
+ },
28
+
29
+ defaultAlign: {
30
+ alignItems: 'flex-start'
31
+ },
32
+ centerAlign: {
33
+ alignItems: 'center'
34
+ },
35
+ narrowWidth: {
36
+ padding: '0.75rem 1rem'
37
+ },
38
+ regularWidth: {
39
+ padding: '0.75rem 1.5rem'
40
+ },
41
+ wideWidth: {
42
+ padding: '0.75rem 2rem'
43
+ }
44
+ })
@@ -0,0 +1,111 @@
1
+ import React, { ComponentProps } from 'react'
2
+ import { render, PicassoConfig } from '@toptal/picasso/test-utils'
3
+ import * as titleCaseModule from 'ap-style-title-case'
4
+ import { Link, MemoryRouter as Router } from 'react-router-dom'
5
+
6
+ import OverviewBlock from './OverviewBlock'
7
+
8
+ jest.mock('ap-style-title-case')
9
+
10
+ const renderOverviewBlock = (
11
+ props: ComponentProps<typeof OverviewBlock>,
12
+ picassoConfig?: PicassoConfig
13
+ ) => {
14
+ return render(
15
+ <Router>
16
+ <OverviewBlock {...props} />
17
+ </Router>,
18
+ undefined,
19
+ picassoConfig
20
+ )
21
+ }
22
+
23
+ let spiedOnTitleCase: jest.SpyInstance
24
+
25
+ describe('OverviewBlock', () => {
26
+ beforeEach(() => {
27
+ spiedOnTitleCase = jest.spyOn(titleCaseModule, 'default')
28
+ })
29
+
30
+ afterEach(() => {
31
+ spiedOnTitleCase.mockReset()
32
+ })
33
+
34
+ it('should transform text to title case when Picasso titleCase property is true', () => {
35
+ const LABEL_TEXT = 'abc dj4'
36
+
37
+ renderOverviewBlock(
38
+ { value: 'abc co5', label: LABEL_TEXT },
39
+ { titleCase: true }
40
+ )
41
+
42
+ expect(spiedOnTitleCase).toHaveBeenCalledWith(LABEL_TEXT)
43
+ })
44
+
45
+ it('should not transform text to title case when Picasso titleCase property is true but the component property overrides it', () => {
46
+ renderOverviewBlock(
47
+ { value: 'abc dk9', label: 'abc ps0', titleCase: false },
48
+ { titleCase: true }
49
+ )
50
+
51
+ expect(spiedOnTitleCase).toHaveBeenCalledTimes(0)
52
+ })
53
+
54
+ describe('when OnClick function is defined', () => {
55
+ describe('when `as` prop is defined', () => {
56
+ it('render the element as `Link`', () => {
57
+ const { getByTestId } = renderOverviewBlock({
58
+ value: 'abc dk9',
59
+ label: 'abc ps0',
60
+ as: Link,
61
+ onClick: jest.fn(),
62
+ to: '/',
63
+ 'data-testid': 'OverviewBlock'
64
+ })
65
+ const block = getByTestId('OverviewBlock')
66
+
67
+ // By the Link component to -> href
68
+ expect(block).toHaveAttribute('href', '/')
69
+ expect(block.nodeName).toBe('A')
70
+ })
71
+ })
72
+
73
+ describe('when `as` prop is undefined', () => {
74
+ it('render the element as `button`', () => {
75
+ const { getByTestId } = renderOverviewBlock({
76
+ value: 'abc dk9',
77
+ label: 'abc ps0',
78
+ onClick: jest.fn(),
79
+ 'data-testid': 'OverviewBlock'
80
+ })
81
+
82
+ expect(getByTestId('OverviewBlock').nodeName).toBe('BUTTON')
83
+ })
84
+ })
85
+ })
86
+
87
+ describe('when OnClick function is undefined', () => {
88
+ it('renders the element as `div`', () => {
89
+ const { getByTestId } = renderOverviewBlock({
90
+ value: 'abc dk9',
91
+ label: 'abc ps0',
92
+ 'data-testid': 'OverviewBlock'
93
+ })
94
+
95
+ expect(getByTestId('OverviewBlock').nodeName).toBe('DIV')
96
+ })
97
+
98
+ it('renders the element as `Link`', () => {
99
+ const { getByTestId } = renderOverviewBlock({
100
+ as: Link,
101
+ to: '/',
102
+ 'data-testid': 'OverviewBlock'
103
+ })
104
+ const block = getByTestId('OverviewBlock')
105
+
106
+ // By the Link component to -> href
107
+ expect(block).toHaveAttribute('href', '/')
108
+ expect(block.nodeName).toBe('A')
109
+ })
110
+ })
111
+ })
@@ -0,0 +1,56 @@
1
+ import React, {
2
+ FunctionComponent,
3
+ HTMLAttributes,
4
+ ReactNode,
5
+ ReactComponentElement
6
+ } from 'react'
7
+
8
+ import { Alignment, BlockWidth } from './settings'
9
+ import { OverviewBlockGroupContext } from './OverviewBlockGroupContext'
10
+ import OverviewBlockRow from '../OverviewBlockRow'
11
+
12
+ type Props = HTMLAttributes<HTMLDivElement> & {
13
+ /** Value and label alignment for blocks. By default content is aligned to the left. */
14
+ align?: Alignment
15
+ /** The block width variant */
16
+ blockWidth?: BlockWidth
17
+ }
18
+
19
+ // We need to inject a single row if there is none provided.
20
+ // It allows to skip `OverviewBlock.Row` component for a single-row groups.
21
+ const shouldInjectRow = (children?: ReactNode) => {
22
+ if (!children) {
23
+ return false
24
+ }
25
+
26
+ return !React.Children.toArray(children)
27
+ .filter((el): el is ReactComponentElement<typeof OverviewBlockRow> =>
28
+ React.isValidElement(el)
29
+ )
30
+ .some(el => el.type.displayName === OverviewBlockRow.displayName)
31
+ }
32
+
33
+ const OverviewBlockGroup: FunctionComponent<Props> = props => {
34
+ const { children, align = 'default', blockWidth = 'regular', ...rest } = props
35
+
36
+ return (
37
+ <section {...rest}>
38
+ <OverviewBlockGroupContext.Provider value={{ align, blockWidth }}>
39
+ {shouldInjectRow(children) ? (
40
+ <OverviewBlockRow>{children}</OverviewBlockRow>
41
+ ) : (
42
+ children
43
+ )}
44
+ </OverviewBlockGroupContext.Provider>
45
+ </section>
46
+ )
47
+ }
48
+
49
+ OverviewBlockGroup.displayName = 'OverviewBlockGroup'
50
+
51
+ OverviewBlockGroup.defaultProps = {
52
+ align: 'default',
53
+ blockWidth: 'regular'
54
+ }
55
+
56
+ export default OverviewBlockGroup
@@ -0,0 +1,21 @@
1
+ import { createContext, useContext } from 'react'
2
+
3
+ import { Alignment, BlockWidth } from './settings'
4
+
5
+ interface OverviewBlockGroupSettings {
6
+ align: Alignment
7
+ blockWidth: BlockWidth
8
+ }
9
+
10
+ const defaultSettings = {
11
+ align: 'default' as const,
12
+ blockWidth: 'regular' as const
13
+ }
14
+
15
+ export const OverviewBlockGroupContext = createContext<
16
+ OverviewBlockGroupSettings
17
+ >(defaultSettings)
18
+
19
+ export const useOverviewBlockGroupContext = () => {
20
+ return useContext(OverviewBlockGroupContext)
21
+ }
@@ -0,0 +1 @@
1
+ export { default } from './OverviewBlockGroup'
@@ -0,0 +1,2 @@
1
+ export type Alignment = 'default' | 'center'
2
+ export type BlockWidth = 'narrow' | 'regular' | 'wide'
@@ -0,0 +1,38 @@
1
+ import React from 'react'
2
+ import { OverviewBlock } from '@toptal/picasso-lab'
3
+ import { Container } from '@toptal/picasso'
4
+
5
+ const BlockWidthExample = () => {
6
+ return (
7
+ <Container>
8
+ <Container>
9
+ <OverviewBlock.Group blockWidth='narrow'>
10
+ <OverviewBlock value='Narrow' label='Width' />
11
+ <OverviewBlock value='Narrow' label='Width' />
12
+ <OverviewBlock value='Narrow' label='Width' />
13
+ <OverviewBlock value='Narrow' label='Width' />
14
+ <OverviewBlock value='Narrow' label='Width' />
15
+ </OverviewBlock.Group>
16
+ </Container>
17
+
18
+ <Container top='small'>
19
+ <OverviewBlock.Group blockWidth='regular'>
20
+ <OverviewBlock value='Regular' label='Width' />
21
+ <OverviewBlock value='Regular' label='Width' />
22
+ <OverviewBlock value='Regular' label='Width' />
23
+ <OverviewBlock value='Regular' label='Width' />
24
+ </OverviewBlock.Group>
25
+ </Container>
26
+
27
+ <Container top='small'>
28
+ <OverviewBlock.Group blockWidth='wide'>
29
+ <OverviewBlock value='Wide' label='Width' />
30
+ <OverviewBlock value='Wide' label='Width' />
31
+ <OverviewBlock value='Wide' label='Width' />
32
+ </OverviewBlock.Group>
33
+ </Container>
34
+ </Container>
35
+ )
36
+ }
37
+
38
+ export default BlockWidthExample
@@ -0,0 +1,17 @@
1
+ import React from 'react'
2
+ import { OverviewBlock } from '@toptal/picasso-lab'
3
+
4
+ const CenterAlignedExample = () => {
5
+ return (
6
+ <OverviewBlock.Group align='center'>
7
+ <OverviewBlock value='12345678' label='Label' variant='label-red' />
8
+ <OverviewBlock
9
+ value='$585,895,606.35'
10
+ label='Paid'
11
+ variant='label-green'
12
+ />
13
+ </OverviewBlock.Group>
14
+ )
15
+ }
16
+
17
+ export default CenterAlignedExample
@@ -0,0 +1,25 @@
1
+ import OverviewBlockGroup from '../OverviewBlockGroup'
2
+ import PicassoBook from '~/.storybook/components/PicassoBook'
3
+
4
+ const componentDocs = PicassoBook.createComponentDocs(
5
+ OverviewBlockGroup,
6
+ 'OverviewBlock.Group'
7
+ )
8
+
9
+ const chapter = PicassoBook.connectToPage(page =>
10
+ page
11
+ .createChapter('Visual variants of the groups', '')
12
+ .addExample(
13
+ 'OverviewBlockGroup/story/CenterAligned.example.tsx',
14
+ 'Center Aligned'
15
+ )
16
+ .addExample(
17
+ 'OverviewBlockGroup/story/BlockWidth.example.tsx',
18
+ 'Block Width'
19
+ )
20
+ )
21
+
22
+ export default {
23
+ chapter,
24
+ componentDocs
25
+ }
@@ -0,0 +1,17 @@
1
+ import React from 'react'
2
+ import { render } from '@toptal/picasso/test-utils'
3
+
4
+ import OverviewBlock from '../OverviewBlock'
5
+ import OverviewBlockGroup from './OverviewBlockGroup'
6
+
7
+ describe('OverlayBlockGroup', () => {
8
+ it('allows to render a single block', () => {
9
+ expect(() => {
10
+ render(
11
+ <OverviewBlockGroup>
12
+ <OverviewBlock value='Value' label='Label' />
13
+ </OverviewBlockGroup>
14
+ )
15
+ }).not.toThrow()
16
+ })
17
+ })
@@ -0,0 +1,22 @@
1
+ import React, { FunctionComponent, HTMLAttributes } from 'react'
2
+ import { Theme, makeStyles } from '@material-ui/core/styles'
3
+ import cx from 'classnames'
4
+
5
+ import styles from './styles'
6
+
7
+ type Props = HTMLAttributes<HTMLDivElement>
8
+
9
+ const useStyles = makeStyles<Theme>(styles, {
10
+ name: 'PicassoOverviewBlockRow'
11
+ })
12
+
13
+ const OverviewBlockRow: FunctionComponent<Props> = props => {
14
+ const { className, ...rest } = props
15
+ const classes = useStyles()
16
+
17
+ return <div {...rest} className={cx(classes.root, className)} />
18
+ }
19
+
20
+ OverviewBlockRow.displayName = 'OverviewBlockRow'
21
+
22
+ export default OverviewBlockRow
@@ -0,0 +1 @@
1
+ export { default } from './OverviewBlockRow'
@@ -0,0 +1,11 @@
1
+ import OverviewBlockRow from '../OverviewBlockRow'
2
+ import PicassoBook from '~/.storybook/components/PicassoBook'
3
+
4
+ const componentDocs = PicassoBook.createComponentDocs(
5
+ OverviewBlockRow,
6
+ 'OverviewBlock.Row'
7
+ )
8
+
9
+ export default {
10
+ componentDocs
11
+ }
@@ -0,0 +1,27 @@
1
+ import { createStyles, Theme } from '@material-ui/core/styles'
2
+
3
+ export default ({ palette, sizes }: Theme) =>
4
+ createStyles({
5
+ root: {
6
+ display: 'flex',
7
+ borderRadius: sizes.borderRadius.medium,
8
+ padding: '1rem 0',
9
+ border: `${sizes.borderWidth} solid ${palette.grey.lighter2}`,
10
+ backgroundColor: palette.common.white,
11
+ justifyContent: 'flex-start',
12
+ '& > *': {
13
+ flex: '1 0'
14
+ },
15
+ '&:not(:first-child)': {
16
+ borderTop: 0,
17
+ borderTopLeftRadius: 0,
18
+ borderTopRightRadius: 0
19
+ },
20
+ '&:not(:last-child)': {
21
+ borderBottom: 0,
22
+ borderBottomLeftRadius: 0,
23
+ borderBottomRightRadius: 0,
24
+ paddingBottom: 0
25
+ }
26
+ }
27
+ })
@@ -0,0 +1,163 @@
1
+ import cx from 'classnames'
2
+ import React, { forwardRef, ReactNode, useState } from 'react'
3
+ import { makeStyles, Theme } from '@material-ui/core/styles'
4
+ import { Collapse } from '@material-ui/core'
5
+ import {
6
+ ArrowDownMinor16,
7
+ BaseProps,
8
+ Button,
9
+ Container,
10
+ SizeType,
11
+ Typography
12
+ } from '@toptal/picasso'
13
+ import { Rotate180 } from '@toptal/picasso/utils/Transitions'
14
+
15
+ import styles from './styles'
16
+
17
+ type VariantType = 'bordered' | 'default' | 'withHeaderBar'
18
+
19
+ export interface Props extends BaseProps {
20
+ /** Title of the Section */
21
+ title?: ReactNode
22
+ /** Subtitle of the Section */
23
+ subtitle?: ReactNode
24
+ /** Additional actions of the Section */
25
+ actions?: ReactNode
26
+ /** Main content of the Section */
27
+ children?: ReactNode
28
+ /** Whether section can be collapsed */
29
+ collapsible?: boolean
30
+ /** Default collapsed value **(applied if `collapsible: true`)** */
31
+ defaultCollapsed?: boolean
32
+ testIds?: {
33
+ header?: string
34
+ title?: string
35
+ subtitle?: string
36
+ actions?: string
37
+ collapse?: string
38
+ }
39
+ variant?: VariantType
40
+ /** Title size of the inner text */
41
+ titleSize?: SizeType<'small' | 'medium'>
42
+ }
43
+
44
+ const useStyles = makeStyles<Theme>(styles, {
45
+ name: 'PicassoSection'
46
+ })
47
+
48
+ export const Section = forwardRef<HTMLDivElement, Props>(function Section(
49
+ props,
50
+ ref
51
+ ) {
52
+ const {
53
+ className,
54
+ style,
55
+ title,
56
+ subtitle,
57
+ actions,
58
+ children,
59
+ testIds,
60
+ collapsible = false,
61
+ defaultCollapsed = true,
62
+ variant = 'default',
63
+ titleSize = 'medium',
64
+ ...rest
65
+ } = props
66
+ const classes = useStyles()
67
+ const [collapsed, setCollapsed] = useState(
68
+ collapsible ? defaultCollapsed : false
69
+ )
70
+
71
+ const toggleCollapse = () => setCollapsed(!collapsed)
72
+
73
+ const renderTitle = () =>
74
+ title ? (
75
+ <Typography
76
+ className={classes.title}
77
+ data-testid={testIds?.title}
78
+ variant='heading'
79
+ size={titleSize}
80
+ >
81
+ {title}
82
+ </Typography>
83
+ ) : null
84
+
85
+ const renderSubtitle = () =>
86
+ subtitle ? (
87
+ <Typography
88
+ className={classes.subtitle}
89
+ data-testid={testIds?.subtitle}
90
+ size='medium'
91
+ color='dark-grey'
92
+ >
93
+ {subtitle}
94
+ </Typography>
95
+ ) : null
96
+
97
+ const renderCollapse = () =>
98
+ collapsible ? (
99
+ <Button.Circular
100
+ onClick={toggleCollapse}
101
+ data-testid={testIds?.collapse}
102
+ variant='flat'
103
+ icon={
104
+ <Rotate180 on={!collapsed}>
105
+ <ArrowDownMinor16 />
106
+ </Rotate180>
107
+ }
108
+ />
109
+ ) : null
110
+
111
+ const hasActions = actions || collapsible
112
+ const renderActions = () =>
113
+ hasActions ? (
114
+ <Container data-testid={testIds?.actions} className={classes.actions}>
115
+ {actions}
116
+ {renderCollapse()}
117
+ </Container>
118
+ ) : null
119
+
120
+ const hasHeader = title || subtitle || hasActions
121
+
122
+ return (
123
+ <Container
124
+ ref={ref}
125
+ className={cx(
126
+ {
127
+ [classes[variant]]: true,
128
+ [classes.collapsed]: variant === 'default' && collapsed
129
+ },
130
+ classes.root,
131
+ className
132
+ )}
133
+ style={style}
134
+ {...rest}
135
+ >
136
+ {hasHeader && (
137
+ <Container
138
+ data-testid={testIds?.header}
139
+ className={cx({
140
+ [classes[`${variant}Header`]]: true,
141
+ [classes[`${variant}CollapsedHeader`]]: collapsed
142
+ })}
143
+ >
144
+ {renderTitle()}
145
+ {renderSubtitle()}
146
+ {renderActions()}
147
+ </Container>
148
+ )}
149
+ <Collapse in={!collapsed} unmountOnExit>
150
+ {children}
151
+ </Collapse>
152
+ </Container>
153
+ )
154
+ })
155
+
156
+ Section.displayName = 'Section'
157
+ Section.defaultProps = {
158
+ collapsible: false,
159
+ defaultCollapsed: true,
160
+ titleSize: 'medium'
161
+ }
162
+
163
+ export default Section