@toptal/picasso-lab 9.3.0 → 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 (366) 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 +0 -0
  15. package/{DatePicker → dist-package/DatePicker}/DatePicker.js +0 -0
  16. package/{DatePicker → dist-package/DatePicker}/DatePicker.js.map +0 -0
  17. package/{DatePicker → dist-package/DatePicker}/constants.d.ts +0 -0
  18. package/{DatePicker → dist-package/DatePicker}/constants.js +0 -0
  19. package/{DatePicker → dist-package/DatePicker}/constants.js.map +0 -0
  20. package/{DatePicker → dist-package/DatePicker}/index.d.ts +0 -0
  21. package/{DatePicker → dist-package/DatePicker}/index.js +0 -0
  22. package/{DatePicker → dist-package/DatePicker}/index.js.map +0 -0
  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/{DatePicker → dist-package/DatePicker}/types.d.ts +0 -0
  27. package/{DatePicker → dist-package/DatePicker}/types.js +0 -0
  28. package/{DatePicker → dist-package/DatePicker}/types.js.map +0 -0
  29. package/{DatePicker → dist-package/DatePicker}/utils.d.ts +0 -0
  30. package/{DatePicker → dist-package/DatePicker}/utils.js +0 -0
  31. package/{DatePicker → dist-package/DatePicker}/utils.js.map +0 -0
  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 +0 -0
  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 +0 -0
  148. package/{Section → dist-package/Section}/Section.js +0 -0
  149. package/{Section → dist-package/Section}/Section.js.map +0 -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/{Section → dist-package/Section}/styles.d.ts +0 -0
  154. package/{Section → dist-package/Section}/styles.js +0 -0
  155. package/{Section → dist-package/Section}/styles.js.map +0 -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} +0 -0
  181. package/{index.js → dist-package/index.js} +0 -0
  182. package/{index.js.map → dist-package/index.js.map} +0 -0
  183. package/dist-package/package.json +53 -0
  184. package/package.json +3 -4
  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
@@ -0,0 +1,123 @@
1
+ import parse from 'date-fns/parse'
2
+ import isValid from 'date-fns/isValid'
3
+ import formatDate from 'date-fns/format'
4
+ import isWithinInterval from 'date-fns/isWithinInterval'
5
+ import isEqual from 'date-fns/isEqual'
6
+ import isBefore from 'date-fns/isBefore'
7
+ import isAfter from 'date-fns/isAfter'
8
+ import { utcToZonedTime, format as tzFormat } from 'date-fns-tz'
9
+
10
+ import { DatePickerStringParser } from './types'
11
+ import { DateOrDateRangeType, DateRangeType } from '../Calendar'
12
+
13
+ // Convert date to given timezone. If timezone is undefined, return given date as is.
14
+ export const timezoneConvert = (
15
+ date: DateOrDateRangeType,
16
+ timeZone?: string
17
+ ): DateOrDateRangeType => {
18
+ const convert = (dateToConvert: Date) => {
19
+ if (timeZone) {
20
+ /**
21
+ * Prevent invalid IANA timezone error. This is likely to happen
22
+ * when someone is editing properties in a Storybook examples.
23
+ */
24
+ try {
25
+ return utcToZonedTime(dateToConvert, timeZone)
26
+ } catch {
27
+ return dateToConvert
28
+ }
29
+ }
30
+
31
+ return dateToConvert
32
+ }
33
+
34
+ return Array.isArray(date)
35
+ ? (date.map(convert) as DateRangeType)
36
+ : (convert(date) as Date)
37
+ }
38
+
39
+ // Format date in given timezone. If timezone is undefined, return given date as is.
40
+ export const timezoneFormat = (date: Date, timeZone?: string) => {
41
+ if (timeZone) {
42
+ /**
43
+ * Prevent invalid IANA timezone error. This is likely to happen
44
+ * when someone is editing properties in a Storybook examples.
45
+ */
46
+ try {
47
+ /**
48
+ * Maintain the same date and time, but formatted in the given timezone
49
+ * so next time the user edits the date it's not recalculated.
50
+ */
51
+ return new Date(tzFormat(date, 'MMM dd yyyy HH:mm:ss OOOO', { timeZone }))
52
+ } catch {
53
+ return date
54
+ }
55
+ }
56
+
57
+ return date
58
+ }
59
+
60
+ export const formatDateRange = (dates: DateRangeType, format: string) =>
61
+ dates.map(date => formatDate(date, format)).join(' - ')
62
+
63
+ export const isDateValid = (date: string, pattern: string) => {
64
+ return (
65
+ date.length === pattern.length && isValid(parse(date, pattern, new Date()))
66
+ )
67
+ }
68
+
69
+ export const isDateAfter = (date: Date, dateToCompare: Date) =>
70
+ isEqual(date, dateToCompare) || isAfter(date, dateToCompare)
71
+
72
+ export const isDateBefore = (date: Date, dateToCompare: Date) =>
73
+ isEqual(date, dateToCompare) || isBefore(date, dateToCompare)
74
+
75
+ // eslint-disable-next-line complexity
76
+ export const isDateWithinInterval = (
77
+ date: Date,
78
+ minDate: Date | undefined,
79
+ maxDate: Date | undefined
80
+ ) => {
81
+ if (!minDate && !maxDate) {
82
+ return true
83
+ }
84
+
85
+ if (minDate && maxDate) {
86
+ return isWithinInterval(date, {
87
+ start: minDate,
88
+ end: maxDate
89
+ })
90
+ }
91
+
92
+ if (minDate) {
93
+ return isDateAfter(date, minDate)
94
+ }
95
+
96
+ if (maxDate) {
97
+ return isDateBefore(date, maxDate)
98
+ }
99
+
100
+ return false
101
+ }
102
+
103
+ export const datePickerParseDateString: DatePickerStringParser = (
104
+ value,
105
+ { dateFormat, timezone, minDate, maxDate }
106
+ ) => {
107
+ if (!isDateValid(value, dateFormat)) {
108
+ return
109
+ }
110
+
111
+ const parsedNextValue = parse(value, dateFormat, new Date())
112
+ const nextTimezoneValue = timezoneFormat(parsedNextValue, timezone)
113
+
114
+ if (!isDateWithinInterval(nextTimezoneValue, minDate, maxDate)) {
115
+ return
116
+ }
117
+
118
+ return nextTimezoneValue
119
+ }
120
+
121
+ export const isValidDateValue = (
122
+ dateValue: DateOrDateRangeType | string
123
+ ): dateValue is DateOrDateRangeType => typeof dateValue !== 'string'
@@ -0,0 +1,105 @@
1
+ import MUIDrawer from '@material-ui/core/Drawer'
2
+ import { makeStyles, Theme, useTheme } from '@material-ui/core/styles'
3
+ import cx from 'classnames'
4
+ import { Button, Container } from '@toptal/picasso'
5
+ import { BaseProps } from '@toptal/picasso-shared'
6
+ import { useDrawer, usePicassoRoot } from '@toptal/picasso-provider'
7
+ import { CloseMinor16 } from '@toptal/picasso/Icon'
8
+ import React, { FunctionComponent, ReactNode, useLayoutEffect } from 'react'
9
+
10
+ import styles from './styles'
11
+ import DrawerTitle from '../DrawerTitle'
12
+
13
+ type AnchorType = 'bottom' | 'left' | 'right' | 'top'
14
+
15
+ type WidthType = 'narrow' | 'regular' | 'medium' | 'wide' | 'ultra-wide'
16
+
17
+ export interface Props extends BaseProps {
18
+ /** Side from which the drawer will appear. */
19
+ anchor?: AnchorType
20
+ /** Drawer content */
21
+ children: ReactNode
22
+ /** Disable the portal behavior. The children stay within it's parent DOM hierarchy. */
23
+ disablePortal?: boolean
24
+ /** Specify if the drawer is opened or not */
25
+ open: boolean
26
+ /** Specify the drawer title */
27
+ title?: ReactNode
28
+ /** Callback fired when the component requests to be closed. */
29
+ onClose?: () => void
30
+ /** Width of Drawer */
31
+ width?: WidthType
32
+ }
33
+
34
+ const useStyles = makeStyles<Theme>(styles, { name: 'PicassoDrawer' })
35
+
36
+ export const Drawer: FunctionComponent<Props> = props => {
37
+ const {
38
+ children,
39
+ disablePortal,
40
+ open,
41
+ onClose,
42
+ title,
43
+ width = 'regular',
44
+ ...rest
45
+ } = props
46
+ const classes = useStyles()
47
+ const { setHasDrawer } = useDrawer()
48
+ const theme = useTheme()
49
+ const container = usePicassoRoot()
50
+
51
+ useLayoutEffect(() => {
52
+ setHasDrawer(open)
53
+
54
+ const cleanup = () => {
55
+ setHasDrawer(false)
56
+ }
57
+
58
+ return cleanup
59
+ }, [open, setHasDrawer])
60
+
61
+ const handleOnClose = () => {
62
+ if (onClose) {
63
+ onClose()
64
+ }
65
+ }
66
+
67
+ return (
68
+ <MUIDrawer
69
+ {...rest}
70
+ open={open}
71
+ onClose={handleOnClose}
72
+ disablePortal={disablePortal}
73
+ container={container}
74
+ ModalProps={{ style: { zIndex: theme.zIndex.drawer } }}
75
+ >
76
+ <Container
77
+ flex
78
+ direction='column'
79
+ className={cx(classes.container, classes[width])}
80
+ >
81
+ <DrawerTitle title={title} />
82
+ <Container flex className={classes.content}>
83
+ {children}
84
+ </Container>
85
+ <Button.Circular
86
+ variant='flat'
87
+ icon={<CloseMinor16 />}
88
+ onClick={handleOnClose}
89
+ className={classes.closeButton}
90
+ />
91
+ </Container>
92
+ </MUIDrawer>
93
+ )
94
+ }
95
+
96
+ Drawer.displayName = 'Drawer'
97
+
98
+ Drawer.defaultProps = {
99
+ anchor: 'right',
100
+ disablePortal: false,
101
+ onClose: () => {},
102
+ width: 'regular'
103
+ }
104
+
105
+ export default Drawer
@@ -0,0 +1,6 @@
1
+ import { OmitInternalProps } from '@toptal/picasso-shared'
2
+
3
+ import { Props } from './Drawer'
4
+
5
+ export { default } from './Drawer'
6
+ export type DrawerProps = OmitInternalProps<Props>
@@ -0,0 +1,32 @@
1
+ import { Button, Typography, Container, List } from '@toptal/picasso'
2
+ import { Drawer } from '@toptal/picasso-lab'
3
+ import React, { useState } from 'react'
4
+
5
+ const Title = () => (
6
+ <Container flex alignItems='center' padded='small'>
7
+ <Typography>This Drawer has a custom title</Typography>
8
+ <Button size='small'>OK!</Button>
9
+ </Container>
10
+ )
11
+
12
+ const Example = () => {
13
+ const [open, setOpen] = useState(false)
14
+
15
+ return (
16
+ <div>
17
+ <Button data-testid='trigger' onClick={() => setOpen(!open)}>
18
+ Show drawer
19
+ </Button>
20
+ <Drawer title={<Title />} open={open} onClose={() => setOpen(false)}>
21
+ <Container data-testid='content' padded='small'>
22
+ <List variant='ordered'>
23
+ <List.Item>Add at least 10 skills</List.Item>
24
+ <List.Item>Set your age</List.Item>
25
+ </List>
26
+ </Container>
27
+ </Drawer>
28
+ </div>
29
+ )
30
+ }
31
+
32
+ export default Example
@@ -0,0 +1,29 @@
1
+ import { Button, Container, List } from '@toptal/picasso'
2
+ import { Drawer } from '@toptal/picasso-lab'
3
+ import React, { useState } from 'react'
4
+
5
+ const Example = () => {
6
+ const [open, setOpen] = useState(false)
7
+
8
+ return (
9
+ <div>
10
+ <Button data-testid='trigger' onClick={() => setOpen(!open)}>
11
+ Show drawer
12
+ </Button>
13
+ <Drawer
14
+ title='My Operational Issues'
15
+ open={open}
16
+ onClose={() => setOpen(false)}
17
+ >
18
+ <Container data-testid='content' padded='medium'>
19
+ <List variant='ordered'>
20
+ <List.Item>Add at least 10 skills</List.Item>
21
+ <List.Item>Set your age</List.Item>
22
+ </List>
23
+ </Container>
24
+ </Drawer>
25
+ </div>
26
+ )
27
+ }
28
+
29
+ export default Example
@@ -0,0 +1,34 @@
1
+ import { Button, Container, List } from '@toptal/picasso'
2
+ import { Drawer } from '@toptal/picasso-lab'
3
+ import { useNotifications } from '@toptal/picasso/utils'
4
+ import React, { useState } from 'react'
5
+
6
+ const Example = () => {
7
+ const { showSuccess } = useNotifications()
8
+ const [open, setOpen] = useState(false)
9
+
10
+ const showDrawer = () => {
11
+ setOpen(!open)
12
+ showSuccess("That's one small step for a man, one giant leap for mankind.")
13
+ }
14
+
15
+ return (
16
+ <div>
17
+ <Button onClick={showDrawer}>Show drawer</Button>
18
+ <Drawer
19
+ title='My Operational Issues'
20
+ open={open}
21
+ onClose={() => setOpen(false)}
22
+ >
23
+ <Container padded='medium'>
24
+ <List variant='ordered'>
25
+ <List.Item>Add at least 10 skills</List.Item>
26
+ <List.Item>Set your age</List.Item>
27
+ </List>
28
+ </Container>
29
+ </Drawer>
30
+ </div>
31
+ )
32
+ }
33
+
34
+ export default Example
@@ -0,0 +1,46 @@
1
+ import { Container, List, Button } from '@toptal/picasso'
2
+ import { Drawer } from '@toptal/picasso-lab'
3
+ import React, { useState } from 'react'
4
+
5
+ type WidthType = 'narrow' | 'regular' | 'medium' | 'wide' | 'ultra-wide'
6
+
7
+ const types: WidthType[] = ['narrow', 'regular', 'medium', 'wide', 'ultra-wide']
8
+
9
+ const Example = () => {
10
+ const [width, setWidth] = useState<WidthType>('narrow')
11
+ const [open, setOpen] = useState(false)
12
+
13
+ const handleClick = (type: WidthType) => {
14
+ setWidth(type)
15
+ setOpen(!open)
16
+ }
17
+
18
+ return (
19
+ <div>
20
+ {types.map(type => (
21
+ <Button
22
+ data-testid={`show-${type}`}
23
+ onClick={() => handleClick(type)}
24
+ key={type}
25
+ >
26
+ Show {type} drawer
27
+ </Button>
28
+ ))}
29
+ <Drawer
30
+ title='My Operational Issues'
31
+ open={open}
32
+ onClose={() => setOpen(false)}
33
+ width={width}
34
+ >
35
+ <Container data-testid='content' padded='medium'>
36
+ <List variant='ordered'>
37
+ <List.Item>Add at least 10 skills</List.Item>
38
+ <List.Item>Set your age</List.Item>
39
+ </List>
40
+ </Container>
41
+ </Drawer>
42
+ </div>
43
+ )
44
+ }
45
+
46
+ export default Example
@@ -0,0 +1,22 @@
1
+ import { Button, Typography, Container } from '@toptal/picasso'
2
+ import { Drawer } from '@toptal/picasso-lab'
3
+ import React, { useState } from 'react'
4
+
5
+ const Example = () => {
6
+ const [open, setOpen] = useState(false)
7
+
8
+ return (
9
+ <div>
10
+ <Button data-testid='trigger' onClick={() => setOpen(!open)}>
11
+ Show drawer
12
+ </Button>
13
+ <Drawer open={open} onClose={() => setOpen(false)}>
14
+ <Container data-testid='content' padded='small'>
15
+ <Typography>This is the content. The title is omitted.</Typography>
16
+ </Container>
17
+ </Drawer>
18
+ </div>
19
+ )
20
+ }
21
+
22
+ export default Example
@@ -0,0 +1,80 @@
1
+ import { Drawer } from '../Drawer'
2
+ import PicassoBook from '~/.storybook/components/PicassoBook'
3
+
4
+ const page = PicassoBook.section('Picasso Lab').createPage(
5
+ 'Drawer',
6
+ `
7
+ Allows rendering a sidebar with custom content
8
+
9
+ ${PicassoBook.createBaseDocsLink(
10
+ 'https://share.goabstract.com/22ba178c-50b8-4eb3-9eeb-e527fbed15e5?collectionLayerId=e9a36438-d8c9-42a4-94bc-ea134fd2e2a1&mode=design&present=true'
11
+ )}
12
+ `
13
+ )
14
+
15
+ page.createTabChapter('Props').addComponentDocs({
16
+ component: Drawer,
17
+ name: 'Drawer'
18
+ })
19
+
20
+ page
21
+ .createChapter()
22
+ .addExample('Drawer/story/Default.example.tsx', {
23
+ title: 'Default',
24
+ effect: async (testPage, makeScreenshot) => {
25
+ await testPage.click('[data-testid="trigger"]')
26
+
27
+ await makeScreenshot({
28
+ isFullScreen: true,
29
+ selector: '[data-testid="content"]'
30
+ })
31
+ }
32
+ })
33
+ .addExample('Drawer/story/WithoutTitle.example.tsx', {
34
+ title: 'Without Title',
35
+ effect: async (testPage, makeScreenshot) => {
36
+ await testPage.click('[data-testid="trigger"]')
37
+
38
+ await makeScreenshot({
39
+ isFullScreen: true
40
+ })
41
+ }
42
+ })
43
+ .addExample('Drawer/story/CustomTitle.example.tsx', {
44
+ title: 'Custom Title',
45
+ effect: async (testPage, makeScreenshot) => {
46
+ await testPage.click('[data-testid="trigger"]')
47
+
48
+ await makeScreenshot({
49
+ isFullScreen: true
50
+ })
51
+ }
52
+ })
53
+ .addExample('Drawer/story/Widths.example.tsx', {
54
+ title: 'Width',
55
+ effect: async (testPage, makeScreenshot) => {
56
+ const types = ['narrow', 'regular', 'medium', 'wide', 'ultra-wide']
57
+ const contentSelector = '[data-testid="content"]'
58
+
59
+ for (const type in types) {
60
+ const buttonSelector = `[data-testid="show-${types[type]}"]`
61
+
62
+ await testPage.click(buttonSelector)
63
+ await testPage.waitFor(contentSelector, {
64
+ visible: true
65
+ })
66
+ await makeScreenshot({
67
+ isFullScreen: true,
68
+ selector: contentSelector
69
+ })
70
+ await testPage.click('[role="presentation"] button')
71
+ await testPage.waitFor(contentSelector, {
72
+ hidden: true
73
+ })
74
+ }
75
+ }
76
+ })
77
+ .addExample(
78
+ 'Drawer/story/DrawerAndNotification.example.tsx',
79
+ 'With notification'
80
+ ) // picasso-skip-visuals
@@ -0,0 +1,42 @@
1
+ import { createStyles } from '@material-ui/core/styles'
2
+ import { PicassoProvider } from '@toptal/picasso-provider'
3
+
4
+ PicassoProvider.override(() => ({
5
+ MuiDrawer: {
6
+ paper: {
7
+ maxWidth: '100%'
8
+ }
9
+ }
10
+ }))
11
+
12
+ export default () =>
13
+ createStyles({
14
+ container: {
15
+ maxWidth: '100%',
16
+ position: 'relative',
17
+ flex: 1
18
+ },
19
+ content: {
20
+ flex: 1
21
+ },
22
+ closeButton: {
23
+ position: 'absolute',
24
+ right: '1.5rem',
25
+ top: '1rem'
26
+ },
27
+ narrow: {
28
+ width: '27.5rem'
29
+ },
30
+ regular: {
31
+ width: '35rem'
32
+ },
33
+ medium: {
34
+ width: '40rem'
35
+ },
36
+ wide: {
37
+ width: '60rem'
38
+ },
39
+ 'ultra-wide': {
40
+ width: '73.75rem'
41
+ }
42
+ })
@@ -0,0 +1,35 @@
1
+ import React from 'react'
2
+ import { BaseProps } from '@toptal/picasso-shared'
3
+ import { Container, Typography } from '@toptal/picasso'
4
+ import { makeStyles, Theme } from '@material-ui/core/styles'
5
+
6
+ import styles from './styles'
7
+ import { DrawerProps } from '../Drawer'
8
+
9
+ export interface Props extends BaseProps, Pick<DrawerProps, 'title'> {}
10
+
11
+ const useStyles = makeStyles<Theme>(styles, { name: 'PicassoDrawerTitle' })
12
+
13
+ export const DrawerTitle = ({ title }: Props) => {
14
+ const classes = useStyles()
15
+
16
+ if (!title) {
17
+ return null
18
+ }
19
+
20
+ if (React.isValidElement(title)) {
21
+ return title
22
+ }
23
+
24
+ return (
25
+ <Container flex alignItems='center' className={classes.header}>
26
+ <Typography variant='heading' size='medium' className={classes.title}>
27
+ {title}
28
+ </Typography>
29
+ </Container>
30
+ )
31
+ }
32
+
33
+ DrawerTitle.displayName = 'DrawerTitle'
34
+
35
+ export default DrawerTitle
@@ -0,0 +1 @@
1
+ export { default } from './DrawerTitle'
@@ -0,0 +1,12 @@
1
+ import { createStyles, Theme } from '@material-ui/core/styles'
2
+
3
+ export default ({ palette }: Theme) =>
4
+ createStyles({
5
+ header: {
6
+ borderBottom: `1px solid ${palette.grey.lighter}`,
7
+ padding: '1rem 1.5rem'
8
+ },
9
+ title: {
10
+ flexGrow: 1
11
+ }
12
+ })