@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.
- package/CHANGELOG.md +1385 -0
- package/{Calendar → dist-package/Calendar}/Calendar.d.ts +0 -0
- package/{Calendar → dist-package/Calendar}/Calendar.js +0 -0
- package/{Calendar → dist-package/Calendar}/Calendar.js.map +0 -0
- package/{Calendar → dist-package/Calendar}/index.d.ts +0 -0
- package/{Calendar → dist-package/Calendar}/index.js +0 -0
- package/{Calendar → dist-package/Calendar}/index.js.map +0 -0
- package/{Calendar → dist-package/Calendar}/styles.d.ts +0 -0
- package/{Calendar → dist-package/Calendar}/styles.js +0 -0
- package/{Calendar → dist-package/Calendar}/styles.js.map +0 -0
- package/{Calendar → dist-package/Calendar}/types.d.ts +0 -0
- package/{Calendar → dist-package/Calendar}/types.js +0 -0
- package/{Calendar → dist-package/Calendar}/types.js.map +0 -0
- package/{DatePicker → dist-package/DatePicker}/DatePicker.d.ts +0 -0
- package/{DatePicker → dist-package/DatePicker}/DatePicker.js +0 -0
- package/{DatePicker → dist-package/DatePicker}/DatePicker.js.map +0 -0
- package/{DatePicker → dist-package/DatePicker}/constants.d.ts +0 -0
- package/{DatePicker → dist-package/DatePicker}/constants.js +0 -0
- package/{DatePicker → dist-package/DatePicker}/constants.js.map +0 -0
- package/{DatePicker → dist-package/DatePicker}/index.d.ts +0 -0
- package/{DatePicker → dist-package/DatePicker}/index.js +0 -0
- package/{DatePicker → dist-package/DatePicker}/index.js.map +0 -0
- package/{DatePicker → dist-package/DatePicker}/styles.d.ts +0 -0
- package/{DatePicker → dist-package/DatePicker}/styles.js +0 -0
- package/{DatePicker → dist-package/DatePicker}/styles.js.map +0 -0
- package/{DatePicker → dist-package/DatePicker}/types.d.ts +0 -0
- package/{DatePicker → dist-package/DatePicker}/types.js +0 -0
- package/{DatePicker → dist-package/DatePicker}/types.js.map +0 -0
- package/{DatePicker → dist-package/DatePicker}/utils.d.ts +0 -0
- package/{DatePicker → dist-package/DatePicker}/utils.js +0 -0
- package/{DatePicker → dist-package/DatePicker}/utils.js.map +0 -0
- package/{Drawer → dist-package/Drawer}/Drawer.d.ts +0 -0
- package/{Drawer → dist-package/Drawer}/Drawer.js +0 -0
- package/{Drawer → dist-package/Drawer}/Drawer.js.map +0 -0
- package/{Drawer → dist-package/Drawer}/index.d.ts +0 -0
- package/{Drawer → dist-package/Drawer}/index.js +0 -0
- package/{Drawer → dist-package/Drawer}/index.js.map +0 -0
- package/{Drawer → dist-package/Drawer}/styles.d.ts +0 -0
- package/{Drawer → dist-package/Drawer}/styles.js +0 -0
- package/{Drawer → dist-package/Drawer}/styles.js.map +0 -0
- package/{DrawerTitle → dist-package/DrawerTitle}/DrawerTitle.d.ts +0 -0
- package/{DrawerTitle → dist-package/DrawerTitle}/DrawerTitle.js +0 -0
- package/{DrawerTitle → dist-package/DrawerTitle}/DrawerTitle.js.map +0 -0
- package/{DrawerTitle → dist-package/DrawerTitle}/index.d.ts +0 -0
- package/{DrawerTitle → dist-package/DrawerTitle}/index.js +0 -0
- package/{DrawerTitle → dist-package/DrawerTitle}/index.js.map +0 -0
- package/{DrawerTitle → dist-package/DrawerTitle}/styles.d.ts +0 -0
- package/{DrawerTitle → dist-package/DrawerTitle}/styles.js +0 -0
- package/{DrawerTitle → dist-package/DrawerTitle}/styles.js.map +0 -0
- package/{Dropzone → dist-package/Dropzone}/Dropzone.d.ts +0 -0
- package/{Dropzone → dist-package/Dropzone}/Dropzone.js +1 -1
- package/{Dropzone → dist-package/Dropzone}/Dropzone.js.map +1 -1
- package/{Dropzone → dist-package/Dropzone}/index.d.ts +0 -0
- package/{Dropzone → dist-package/Dropzone}/index.js +0 -0
- package/{Dropzone → dist-package/Dropzone}/index.js.map +0 -0
- package/{Dropzone → dist-package/Dropzone}/styles.d.ts +0 -0
- package/{Dropzone → dist-package/Dropzone}/styles.js +0 -0
- package/{Dropzone → dist-package/Dropzone}/styles.js.map +0 -0
- package/{Dropzone → dist-package/Dropzone}/types.d.ts +0 -0
- package/{Dropzone → dist-package/Dropzone}/types.js +0 -0
- package/{Dropzone → dist-package/Dropzone}/types.js.map +0 -0
- package/{EmptyState → dist-package/EmptyState}/EmptyState.d.ts +0 -0
- package/{EmptyState → dist-package/EmptyState}/EmptyState.js +0 -0
- package/{EmptyState → dist-package/EmptyState}/EmptyState.js.map +0 -0
- package/{EmptyState → dist-package/EmptyState}/index.d.ts +0 -0
- package/{EmptyState → dist-package/EmptyState}/index.js +0 -0
- package/{EmptyState → dist-package/EmptyState}/index.js.map +0 -0
- package/{EmptyStateCollection → dist-package/EmptyStateCollection}/EmptyStateCollection.d.ts +0 -0
- package/{EmptyStateCollection → dist-package/EmptyStateCollection}/EmptyStateCollection.js +0 -0
- package/{EmptyStateCollection → dist-package/EmptyStateCollection}/EmptyStateCollection.js.map +0 -0
- package/{EmptyStateCollection → dist-package/EmptyStateCollection}/index.d.ts +0 -0
- package/{EmptyStateCollection → dist-package/EmptyStateCollection}/index.js +0 -0
- package/{EmptyStateCollection → dist-package/EmptyStateCollection}/index.js.map +0 -0
- package/{EmptyStateCollection → dist-package/EmptyStateCollection}/styles.d.ts +0 -0
- package/{EmptyStateCollection → dist-package/EmptyStateCollection}/styles.js +0 -0
- package/{EmptyStateCollection → dist-package/EmptyStateCollection}/styles.js.map +0 -0
- package/{EmptyStatePage → dist-package/EmptyStatePage}/EmptyStatePage.d.ts +0 -0
- package/{EmptyStatePage → dist-package/EmptyStatePage}/EmptyStatePage.js +0 -0
- package/{EmptyStatePage → dist-package/EmptyStatePage}/EmptyStatePage.js.map +0 -0
- package/{EmptyStatePage → dist-package/EmptyStatePage}/index.d.ts +0 -0
- package/{EmptyStatePage → dist-package/EmptyStatePage}/index.js +0 -0
- package/{EmptyStatePage → dist-package/EmptyStatePage}/index.js.map +0 -0
- package/{EmptyStatePage → dist-package/EmptyStatePage}/styles.d.ts +0 -0
- package/{EmptyStatePage → dist-package/EmptyStatePage}/styles.js +0 -0
- package/{EmptyStatePage → dist-package/EmptyStatePage}/styles.js.map +0 -0
- package/{Note → dist-package/Note}/Note.d.ts +0 -0
- package/{Note → dist-package/Note}/Note.js +0 -0
- package/{Note → dist-package/Note}/Note.js.map +0 -0
- package/{Note → dist-package/Note}/index.d.ts +0 -0
- package/{Note → dist-package/Note}/index.js +0 -0
- package/{Note → dist-package/Note}/index.js.map +0 -0
- package/{Note → dist-package/Note}/styles.d.ts +0 -0
- package/{Note → dist-package/Note}/styles.js +0 -0
- package/{Note → dist-package/Note}/styles.js.map +0 -0
- package/{NoteContent → dist-package/NoteContent}/NoteContent.d.ts +0 -0
- package/{NoteContent → dist-package/NoteContent}/NoteContent.js +0 -0
- package/{NoteContent → dist-package/NoteContent}/NoteContent.js.map +0 -0
- package/{NoteContent → dist-package/NoteContent}/index.d.ts +0 -0
- package/{NoteContent → dist-package/NoteContent}/index.js +0 -0
- package/{NoteContent → dist-package/NoteContent}/index.js.map +0 -0
- package/{NoteSubtitle → dist-package/NoteSubtitle}/NoteSubtitle.d.ts +0 -0
- package/{NoteSubtitle → dist-package/NoteSubtitle}/NoteSubtitle.js +0 -0
- package/{NoteSubtitle → dist-package/NoteSubtitle}/NoteSubtitle.js.map +0 -0
- package/{NoteSubtitle → dist-package/NoteSubtitle}/index.d.ts +0 -0
- package/{NoteSubtitle → dist-package/NoteSubtitle}/index.js +0 -0
- package/{NoteSubtitle → dist-package/NoteSubtitle}/index.js.map +0 -0
- package/{NoteTitle → dist-package/NoteTitle}/NoteTitle.d.ts +0 -0
- package/{NoteTitle → dist-package/NoteTitle}/NoteTitle.js +0 -0
- package/{NoteTitle → dist-package/NoteTitle}/NoteTitle.js.map +0 -0
- package/{NoteTitle → dist-package/NoteTitle}/index.d.ts +0 -0
- package/{NoteTitle → dist-package/NoteTitle}/index.js +0 -0
- package/{NoteTitle → dist-package/NoteTitle}/index.js.map +0 -0
- package/{NoteTitle → dist-package/NoteTitle}/styles.d.ts +0 -0
- package/{NoteTitle → dist-package/NoteTitle}/styles.js +0 -0
- package/{NoteTitle → dist-package/NoteTitle}/styles.js.map +0 -0
- package/{OverviewBlock → dist-package/OverviewBlock}/OverviewBlock.d.ts +0 -0
- package/{OverviewBlock → dist-package/OverviewBlock}/OverviewBlock.js +0 -0
- package/{OverviewBlock → dist-package/OverviewBlock}/OverviewBlock.js.map +0 -0
- package/{OverviewBlock → dist-package/OverviewBlock}/index.d.ts +0 -0
- package/{OverviewBlock → dist-package/OverviewBlock}/index.js +0 -0
- package/{OverviewBlock → dist-package/OverviewBlock}/index.js.map +0 -0
- package/{OverviewBlock → dist-package/OverviewBlock}/styles.d.ts +0 -0
- package/{OverviewBlock → dist-package/OverviewBlock}/styles.js +0 -0
- package/{OverviewBlock → dist-package/OverviewBlock}/styles.js.map +0 -0
- package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/OverviewBlockGroup.d.ts +0 -0
- package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/OverviewBlockGroup.js +0 -0
- package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/OverviewBlockGroup.js.map +0 -0
- package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/OverviewBlockGroupContext.d.ts +0 -0
- package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/OverviewBlockGroupContext.js +0 -0
- package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/OverviewBlockGroupContext.js.map +0 -0
- package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/index.d.ts +0 -0
- package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/index.js +0 -0
- package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/index.js.map +0 -0
- package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/settings.d.ts +0 -0
- package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/settings.js +0 -0
- package/{OverviewBlockGroup → dist-package/OverviewBlockGroup}/settings.js.map +0 -0
- package/{OverviewBlockRow → dist-package/OverviewBlockRow}/OverviewBlockRow.d.ts +0 -0
- package/{OverviewBlockRow → dist-package/OverviewBlockRow}/OverviewBlockRow.js +0 -0
- package/{OverviewBlockRow → dist-package/OverviewBlockRow}/OverviewBlockRow.js.map +0 -0
- package/{OverviewBlockRow → dist-package/OverviewBlockRow}/index.d.ts +0 -0
- package/{OverviewBlockRow → dist-package/OverviewBlockRow}/index.js +0 -0
- package/{OverviewBlockRow → dist-package/OverviewBlockRow}/index.js.map +0 -0
- package/{OverviewBlockRow → dist-package/OverviewBlockRow}/styles.d.ts +0 -0
- package/{OverviewBlockRow → dist-package/OverviewBlockRow}/styles.js +0 -0
- package/{OverviewBlockRow → dist-package/OverviewBlockRow}/styles.js.map +0 -0
- package/dist-package/README.md +26 -0
- package/{Section → dist-package/Section}/Section.d.ts +0 -0
- package/{Section → dist-package/Section}/Section.js +0 -0
- package/{Section → dist-package/Section}/Section.js.map +0 -0
- package/{Section → dist-package/Section}/index.d.ts +0 -0
- package/{Section → dist-package/Section}/index.js +0 -0
- package/{Section → dist-package/Section}/index.js.map +0 -0
- package/{Section → dist-package/Section}/styles.d.ts +0 -0
- package/{Section → dist-package/Section}/styles.js +0 -0
- package/{Section → dist-package/Section}/styles.js.map +0 -0
- package/{Timeline → dist-package/Timeline}/Timeline.d.ts +0 -0
- package/{Timeline → dist-package/Timeline}/Timeline.js +0 -0
- package/{Timeline → dist-package/Timeline}/Timeline.js.map +0 -0
- package/{Timeline → dist-package/Timeline}/index.d.ts +0 -0
- package/{Timeline → dist-package/Timeline}/index.js +0 -0
- package/{Timeline → dist-package/Timeline}/index.js.map +0 -0
- package/{TimelineRow → dist-package/TimelineRow}/TimelineRow.d.ts +0 -0
- package/{TimelineRow → dist-package/TimelineRow}/TimelineRow.js +0 -0
- package/{TimelineRow → dist-package/TimelineRow}/TimelineRow.js.map +0 -0
- package/{TimelineRow → dist-package/TimelineRow}/index.d.ts +0 -0
- package/{TimelineRow → dist-package/TimelineRow}/index.js +0 -0
- package/{TimelineRow → dist-package/TimelineRow}/index.js.map +0 -0
- package/{TimelineRow → dist-package/TimelineRow}/styles.d.ts +0 -0
- package/{TimelineRow → dist-package/TimelineRow}/styles.js +0 -0
- package/{TimelineRow → dist-package/TimelineRow}/styles.js.map +0 -0
- package/{TypographyOverflow → dist-package/TypographyOverflow}/TypographyOverflow.d.ts +0 -0
- package/{TypographyOverflow → dist-package/TypographyOverflow}/TypographyOverflow.js +0 -0
- package/{TypographyOverflow → dist-package/TypographyOverflow}/TypographyOverflow.js.map +0 -0
- package/{TypographyOverflow → dist-package/TypographyOverflow}/index.d.ts +0 -0
- package/{TypographyOverflow → dist-package/TypographyOverflow}/index.js +0 -0
- package/{TypographyOverflow → dist-package/TypographyOverflow}/index.js.map +0 -0
- package/{TypographyOverflow → dist-package/TypographyOverflow}/styles.d.ts +0 -0
- package/{TypographyOverflow → dist-package/TypographyOverflow}/styles.js +0 -0
- package/{TypographyOverflow → dist-package/TypographyOverflow}/styles.js.map +0 -0
- package/{index.d.ts → dist-package/index.d.ts} +0 -0
- package/{index.js → dist-package/index.js} +0 -0
- package/{index.js.map → dist-package/index.js.map} +0 -0
- package/dist-package/package.json +53 -0
- package/package.json +3 -4
- package/src/Calendar/Calendar.tsx +215 -0
- package/src/Calendar/__snapshots__/test.tsx.snap +447 -0
- package/src/Calendar/index.ts +2 -0
- package/src/Calendar/styles.ts +104 -0
- package/src/Calendar/test.tsx +20 -0
- package/src/Calendar/types.ts +42 -0
- package/src/DatePicker/DatePicker.tsx +366 -0
- package/src/DatePicker/__image_snapshots__/datepicker-full-width-snap.png +0 -0
- package/src/DatePicker/__image_snapshots__/datepicker-with-custom-day-rendering-snap.png +0 -0
- package/src/DatePicker/__snapshots__/test.tsx.snap +51 -0
- package/src/DatePicker/constants.ts +2 -0
- package/src/DatePicker/index.ts +5 -0
- package/src/DatePicker/story/AllowCustomValue.example.tsx +33 -0
- package/src/DatePicker/story/Autocomplete.example.tsx +47 -0
- package/src/DatePicker/story/Default.example.tsx +19 -0
- package/src/DatePicker/story/Error.example.tsx +26 -0
- package/src/DatePicker/story/Range.example.tsx +22 -0
- package/src/DatePicker/story/WithCustomDayRendering.example.tsx +47 -0
- package/src/DatePicker/story/WithInitialValue.example.tsx +19 -0
- package/src/DatePicker/story/WithInputProps.example.tsx +24 -0
- package/src/DatePicker/story/WithNoHideOnSelect.example.tsx +20 -0
- package/src/DatePicker/story/WithOnBlurHandler.example.tsx +22 -0
- package/src/DatePicker/story/WithSelectionLimits.example.tsx +32 -0
- package/src/DatePicker/story/WithTimezone.example.tsx +25 -0
- package/src/DatePicker/story/index.jsx +50 -0
- package/src/DatePicker/styles.ts +8 -0
- package/src/DatePicker/test.tsx +370 -0
- package/src/DatePicker/types.ts +13 -0
- package/src/DatePicker/utils.ts +123 -0
- package/src/Drawer/Drawer.tsx +105 -0
- package/src/Drawer/__image_snapshots__/drawer-custom-title-effect-1-snap.png +0 -0
- package/src/Drawer/__image_snapshots__/drawer-custom-title-snap.png +0 -0
- package/src/Drawer/__image_snapshots__/drawer-default-effect-1-snap.png +0 -0
- package/src/Drawer/__image_snapshots__/drawer-default-snap.png +0 -0
- package/src/Drawer/__image_snapshots__/drawer-width-effect-1-snap.png +0 -0
- package/src/Drawer/__image_snapshots__/drawer-width-effect-2-snap.png +0 -0
- package/src/Drawer/__image_snapshots__/drawer-width-effect-3-snap.png +0 -0
- package/src/Drawer/__image_snapshots__/drawer-width-effect-4-snap.png +0 -0
- package/src/Drawer/__image_snapshots__/drawer-width-effect-5-snap.png +0 -0
- package/src/Drawer/__image_snapshots__/drawer-width-snap.png +0 -0
- package/src/Drawer/__image_snapshots__/drawer-without-title-effect-1-snap.png +0 -0
- package/src/Drawer/__image_snapshots__/drawer-without-title-snap.png +0 -0
- package/src/Drawer/index.ts +6 -0
- package/src/Drawer/story/CustomTitle.example.tsx +32 -0
- package/src/Drawer/story/Default.example.tsx +29 -0
- package/src/Drawer/story/DrawerAndNotification.example.tsx +34 -0
- package/src/Drawer/story/Widths.example.tsx +46 -0
- package/src/Drawer/story/WithoutTitle.example.tsx +22 -0
- package/src/Drawer/story/index.jsx +80 -0
- package/src/Drawer/styles.ts +42 -0
- package/src/DrawerTitle/DrawerTitle.tsx +35 -0
- package/src/DrawerTitle/index.ts +1 -0
- package/src/DrawerTitle/styles.ts +12 -0
- package/src/Dropzone/Dropzone.tsx +146 -0
- package/src/Dropzone/__snapshots__/test.tsx.snap +40 -0
- package/src/Dropzone/index.ts +7 -0
- package/src/Dropzone/story/Default.example.tsx +8 -0
- package/src/Dropzone/story/Disabled.example.tsx +25 -0
- package/src/Dropzone/story/Error.example.tsx +16 -0
- package/src/Dropzone/story/Multiple.example.tsx +30 -0
- package/src/Dropzone/story/Uploader.example.tsx +116 -0
- package/src/Dropzone/story/Uploading.example.tsx +16 -0
- package/src/Dropzone/story/index.jsx +85 -0
- package/src/Dropzone/styles.ts +43 -0
- package/src/Dropzone/test.tsx +33 -0
- package/src/Dropzone/types.ts +56 -0
- package/src/EmptyState/EmptyState.tsx +7 -0
- package/src/EmptyState/index.tsx +1 -0
- package/src/EmptyState/story/index.jsx +13 -0
- package/src/EmptyStateCollection/EmptyStateCollection.tsx +56 -0
- package/src/EmptyStateCollection/__image_snapshots__/emptystate-collection-emptystatecollection-snap.png +0 -0
- package/src/EmptyStateCollection/index.tsx +1 -0
- package/src/EmptyStateCollection/story/Default.example.tsx +11 -0
- package/src/EmptyStateCollection/story/index.jsx +20 -0
- package/src/EmptyStateCollection/styles.ts +10 -0
- package/src/EmptyStatePage/EmptyStatePage.tsx +65 -0
- package/src/EmptyStatePage/__image_snapshots__/emptystate-page-emptystatepage-snap.png +0 -0
- package/src/EmptyStatePage/index.tsx +1 -0
- package/src/EmptyStatePage/story/Default.example.tsx +21 -0
- package/src/EmptyStatePage/story/index.jsx +21 -0
- package/src/EmptyStatePage/styles.ts +9 -0
- package/src/Note/Note.tsx +36 -0
- package/src/Note/__snapshots__/test.tsx.snap +37 -0
- package/src/Note/index.ts +6 -0
- package/src/Note/story/Default.example.tsx +14 -0
- package/src/Note/story/index.jsx +23 -0
- package/src/Note/styles.ts +27 -0
- package/src/Note/test.tsx +22 -0
- package/src/NoteContent/NoteContent.tsx +23 -0
- package/src/NoteContent/index.ts +1 -0
- package/src/NoteContent/story/index.jsx +12 -0
- package/src/NoteSubtitle/NoteSubtitle.tsx +25 -0
- package/src/NoteSubtitle/index.ts +1 -0
- package/src/NoteSubtitle/story/index.jsx +12 -0
- package/src/NoteTitle/NoteTitle.tsx +34 -0
- package/src/NoteTitle/index.ts +1 -0
- package/src/NoteTitle/story/index.jsx +12 -0
- package/src/NoteTitle/styles.ts +8 -0
- package/src/OverviewBlock/OverviewBlock.tsx +125 -0
- package/src/OverviewBlock/__image_snapshots__/overviewblock-default-snap.png +0 -0
- package/src/OverviewBlock/__image_snapshots__/overviewblock-multi-line-snap.png +0 -0
- package/src/OverviewBlock/__image_snapshots__/overviewblock-number-snap.png +0 -0
- package/src/OverviewBlock/__image_snapshots__/overviewblock-routing-snap.png +0 -0
- package/src/OverviewBlock/__image_snapshots__/overviewblock-text-snap.png +0 -0
- package/src/OverviewBlock/index.ts +6 -0
- package/src/OverviewBlock/story/Default.example.tsx +35 -0
- package/src/OverviewBlock/story/Multiline.example.tsx +51 -0
- package/src/OverviewBlock/story/Number.example.tsx +20 -0
- package/src/OverviewBlock/story/Routing.example.tsx +40 -0
- package/src/OverviewBlock/story/Text.example.tsx +15 -0
- package/src/OverviewBlock/story/index.jsx +100 -0
- package/src/OverviewBlock/styles.ts +44 -0
- package/src/OverviewBlock/test.tsx +111 -0
- package/src/OverviewBlockGroup/OverviewBlockGroup.tsx +56 -0
- package/src/OverviewBlockGroup/OverviewBlockGroupContext.tsx +21 -0
- package/src/OverviewBlockGroup/__image_snapshots__/visual-variants-of-the-groups-block-width-snap.png +0 -0
- package/src/OverviewBlockGroup/__image_snapshots__/visual-variants-of-the-groups-center-aligned-snap.png +0 -0
- package/src/OverviewBlockGroup/index.ts +1 -0
- package/src/OverviewBlockGroup/settings.ts +2 -0
- package/src/OverviewBlockGroup/story/BlockWidth.example.tsx +38 -0
- package/src/OverviewBlockGroup/story/CenterAligned.example.tsx +17 -0
- package/src/OverviewBlockGroup/story/index.jsx +25 -0
- package/src/OverviewBlockGroup/test.tsx +17 -0
- package/src/OverviewBlockRow/OverviewBlockRow.tsx +22 -0
- package/src/OverviewBlockRow/index.ts +1 -0
- package/src/OverviewBlockRow/story/index.jsx +11 -0
- package/src/OverviewBlockRow/styles.ts +27 -0
- package/src/Section/Section.tsx +163 -0
- package/src/Section/__snapshots__/test.tsx.snap +186 -0
- package/src/Section/index.ts +6 -0
- package/src/Section/story/Actions.example.tsx +85 -0
- package/src/Section/story/Collapsible.example.tsx +113 -0
- package/src/Section/story/Default.example.tsx +77 -0
- package/src/Section/story/TitleSize.example.tsx +34 -0
- package/src/Section/story/Variant.example.tsx +108 -0
- package/src/Section/story/index.jsx +35 -0
- package/src/Section/styles.ts +65 -0
- package/src/Section/test.tsx +115 -0
- package/src/Timeline/Timeline.tsx +25 -0
- package/src/Timeline/__snapshots__/test.tsx.snap +332 -0
- package/src/Timeline/index.ts +6 -0
- package/src/Timeline/story/Dates.example.tsx +52 -0
- package/src/Timeline/story/Default.example.tsx +34 -0
- package/src/Timeline/story/TrimLastConnector.example.tsx +29 -0
- package/src/Timeline/story/index.jsx +27 -0
- package/src/Timeline/test.tsx +101 -0
- package/src/TimelineRow/TimelineRow.tsx +83 -0
- package/src/TimelineRow/index.ts +6 -0
- package/src/TimelineRow/story/index.jsx +11 -0
- package/src/TimelineRow/styles.ts +47 -0
- package/src/TypographyOverflow/TypographyOverflow.tsx +153 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-checkbox-label-effect-1-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-checkbox-label-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-custom-tooltip-content-effect-1-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-custom-tooltip-content-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-default-effect-1-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-default-effect-2-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-default-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-delay-effect-1-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-delay-effect-2-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-delay-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-light-tooltip-background-effect-1-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-light-tooltip-background-effect-2-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-light-tooltip-background-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-multiline-effect-1-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-multiline-effect-2-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-multiline-effect-3-snap.png +0 -0
- package/src/TypographyOverflow/__image_snapshots__/typographyoverflow-multiline-snap.png +0 -0
- package/src/TypographyOverflow/index.ts +6 -0
- package/src/TypographyOverflow/story/CheckboxLabel.example.tsx +21 -0
- package/src/TypographyOverflow/story/CustomTooltip.example.tsx +22 -0
- package/src/TypographyOverflow/story/Default.example.tsx +32 -0
- package/src/TypographyOverflow/story/Delay.example.tsx +29 -0
- package/src/TypographyOverflow/story/GridWithControls.example.tsx +64 -0
- package/src/TypographyOverflow/story/Multiline.example.tsx +59 -0
- package/src/TypographyOverflow/story/TooltipVariants.example.tsx +23 -0
- package/src/TypographyOverflow/story/index.jsx +83 -0
- package/src/TypographyOverflow/styles.ts +29 -0
- package/src/TypographyOverflow/test.tsx +60 -0
- package/src/index.ts +35 -0
- package/src/story/index.jsx +10 -0
- package/tsconfig.build.json +7 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import { OverviewBlock } from '@toptal/picasso-lab'
|
3
|
+
|
4
|
+
const DefaultExample = () => {
|
5
|
+
const handleClick = (title: string) => {
|
6
|
+
window.alert(`${title} clicked`)
|
7
|
+
}
|
8
|
+
|
9
|
+
return (
|
10
|
+
<OverviewBlock.Group>
|
11
|
+
<OverviewBlock
|
12
|
+
value='4249'
|
13
|
+
label='ACH'
|
14
|
+
onClick={() => handleClick('ACH')}
|
15
|
+
/>
|
16
|
+
<OverviewBlock
|
17
|
+
value='19302'
|
18
|
+
label='Credit Card'
|
19
|
+
onClick={() => handleClick('Credit Card')}
|
20
|
+
/>
|
21
|
+
<OverviewBlock
|
22
|
+
value='979'
|
23
|
+
label='PayPal'
|
24
|
+
onClick={() => handleClick('PayPal')}
|
25
|
+
/>
|
26
|
+
<OverviewBlock
|
27
|
+
value='803'
|
28
|
+
label='Wire'
|
29
|
+
onClick={() => handleClick('Wire')}
|
30
|
+
/>
|
31
|
+
</OverviewBlock.Group>
|
32
|
+
)
|
33
|
+
}
|
34
|
+
|
35
|
+
export default DefaultExample
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import { OverviewBlock } from '@toptal/picasso-lab'
|
3
|
+
|
4
|
+
const MultilineExample = () => (
|
5
|
+
<section>
|
6
|
+
<OverviewBlock.Group>
|
7
|
+
<OverviewBlock.Row>
|
8
|
+
<OverviewBlock
|
9
|
+
value='$26,125,123.70'
|
10
|
+
label='Outstanding'
|
11
|
+
variant='label-yellow'
|
12
|
+
/>
|
13
|
+
<OverviewBlock
|
14
|
+
value='$5,837,806.68'
|
15
|
+
label='Overdue'
|
16
|
+
variant='label-red'
|
17
|
+
/>
|
18
|
+
<OverviewBlock
|
19
|
+
value='$1,232,107.99'
|
20
|
+
label='Disputed'
|
21
|
+
variant='label-red'
|
22
|
+
/>
|
23
|
+
<OverviewBlock
|
24
|
+
value='$1,722,076.43'
|
25
|
+
label='Incollections'
|
26
|
+
variant='label-red'
|
27
|
+
/>
|
28
|
+
</OverviewBlock.Row>
|
29
|
+
<OverviewBlock.Row>
|
30
|
+
<OverviewBlock
|
31
|
+
value='$935,590.65'
|
32
|
+
label='Written off'
|
33
|
+
variant='label-red'
|
34
|
+
/>
|
35
|
+
<OverviewBlock value='$5,758,716.46' label='Pending receipt' />
|
36
|
+
<OverviewBlock
|
37
|
+
value='$44,244,163.83'
|
38
|
+
label='Credited'
|
39
|
+
variant='label-green'
|
40
|
+
/>
|
41
|
+
<OverviewBlock
|
42
|
+
value='$585,895,606.35'
|
43
|
+
label='Paid'
|
44
|
+
variant='label-green'
|
45
|
+
/>
|
46
|
+
</OverviewBlock.Row>
|
47
|
+
</OverviewBlock.Group>
|
48
|
+
</section>
|
49
|
+
)
|
50
|
+
|
51
|
+
export default MultilineExample
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import { OverviewBlock } from '@toptal/picasso-lab'
|
3
|
+
|
4
|
+
const NumberExample = () => {
|
5
|
+
return (
|
6
|
+
<OverviewBlock.Group>
|
7
|
+
<OverviewBlock value='63' label='Pending tasks' variant='label-red' />
|
8
|
+
<OverviewBlock value='0' label="Today's tasks" variant='label-red' />
|
9
|
+
<OverviewBlock
|
10
|
+
value='0'
|
11
|
+
label="This week's tasks"
|
12
|
+
variant='label-green'
|
13
|
+
/>
|
14
|
+
<OverviewBlock value='63' label='Total tasks' />
|
15
|
+
<OverviewBlock value='63' label='Playbook tasks' variant='label-yellow' />
|
16
|
+
</OverviewBlock.Group>
|
17
|
+
)
|
18
|
+
}
|
19
|
+
|
20
|
+
export default NumberExample
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import { OverviewBlock } from '@toptal/picasso-lab'
|
3
|
+
import { MemoryRouter as Router, Link, Route, Switch } from 'react-router-dom'
|
4
|
+
|
5
|
+
const Index = () => <h2>Home</h2>
|
6
|
+
const About = () => <h2>About</h2>
|
7
|
+
const Users = () => <h2>Users</h2>
|
8
|
+
|
9
|
+
const RoutingExample = () => (
|
10
|
+
<Router>
|
11
|
+
<div>
|
12
|
+
<OverviewBlock.Group>
|
13
|
+
<OverviewBlock value='10' label='Home' as={Link} to='/' />
|
14
|
+
<OverviewBlock
|
15
|
+
value='11'
|
16
|
+
label='About'
|
17
|
+
variant='label-green'
|
18
|
+
as={Link}
|
19
|
+
to='/about'
|
20
|
+
/>
|
21
|
+
<OverviewBlock
|
22
|
+
value='15'
|
23
|
+
label='Users'
|
24
|
+
variant='label-green'
|
25
|
+
as={Link}
|
26
|
+
to='/users'
|
27
|
+
/>
|
28
|
+
</OverviewBlock.Group>
|
29
|
+
|
30
|
+
<Switch>
|
31
|
+
<Route path='/' exact component={Index} />
|
32
|
+
<Route path='/about' component={About} />
|
33
|
+
<Route path='/users' component={Users} />
|
34
|
+
<Route component={Index} />
|
35
|
+
</Switch>
|
36
|
+
</div>
|
37
|
+
</Router>
|
38
|
+
)
|
39
|
+
|
40
|
+
export default RoutingExample
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import { OverviewBlock } from '@toptal/picasso-lab'
|
3
|
+
|
4
|
+
const TextExample = () => {
|
5
|
+
return (
|
6
|
+
<OverviewBlock.Group>
|
7
|
+
<OverviewBlock value='Active' label='Status' variant='value-green' />
|
8
|
+
<OverviewBlock value='Developers' label='Interested In' />
|
9
|
+
<OverviewBlock value='Ambiguous' label='Priority / Intent' />
|
10
|
+
<OverviewBlock value='1968' label='Days in Funnel' />
|
11
|
+
</OverviewBlock.Group>
|
12
|
+
)
|
13
|
+
}
|
14
|
+
|
15
|
+
export default TextExample
|
@@ -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
|
+
}
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
export { default } from './OverviewBlockGroup'
|
@@ -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
|
+
}
|