@toptal/picasso 17.3.2 → 18.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Autocomplete/Autocomplete.js +2 -2
- package/Autocomplete/Autocomplete.js.map +1 -1
- package/Calendar/Calendar.d.ts +23 -0
- package/Calendar/Calendar.js +86 -0
- package/Calendar/Calendar.js.map +1 -0
- package/Calendar/index.d.ts +2 -0
- package/Calendar/index.js +3 -0
- package/Calendar/index.js.map +1 -0
- package/Calendar/styles.d.ts +3 -0
- package/Calendar/styles.js +97 -0
- package/Calendar/styles.js.map +1 -0
- package/Calendar/types.d.ts +36 -0
- package/Calendar/types.js +2 -0
- package/Calendar/types.js.map +1 -0
- package/DatePicker/DatePicker.d.ts +62 -0
- package/DatePicker/DatePicker.js +198 -0
- package/DatePicker/DatePicker.js.map +1 -0
- package/DatePicker/constants.d.ts +12 -0
- package/DatePicker/constants.js +13 -0
- package/DatePicker/constants.js.map +1 -0
- package/DatePicker/index.d.ts +5 -0
- package/DatePicker/index.js +4 -0
- package/DatePicker/index.js.map +1 -0
- package/DatePicker/styles.d.ts +2 -0
- package/DatePicker/styles.js +7 -0
- package/DatePicker/styles.js.map +1 -0
- package/DatePicker/types.d.ts +13 -0
- package/DatePicker/types.js +2 -0
- package/DatePicker/types.js.map +1 -0
- package/DatePicker/utils.d.ts +12 -0
- package/DatePicker/utils.js +102 -0
- package/DatePicker/utils.js.map +1 -0
- package/Drawer/Drawer.d.ts +22 -0
- package/Drawer/Drawer.js +55 -0
- package/Drawer/Drawer.js.map +1 -0
- package/Drawer/index.d.ts +4 -0
- package/Drawer/index.js +2 -0
- package/Drawer/index.js.map +1 -0
- package/Drawer/styles.d.ts +2 -0
- package/Drawer/styles.js +40 -0
- package/Drawer/styles.js.map +1 -0
- package/DrawerTitle/DrawerTitle.d.ts +9 -0
- package/DrawerTitle/DrawerTitle.js +20 -0
- package/DrawerTitle/DrawerTitle.js.map +1 -0
- package/DrawerTitle/index.d.ts +1 -0
- package/DrawerTitle/index.js +2 -0
- package/DrawerTitle/index.js.map +1 -0
- package/DrawerTitle/styles.d.ts +3 -0
- package/DrawerTitle/styles.js +11 -0
- package/DrawerTitle/styles.js.map +1 -0
- package/Dropzone/Dropzone.d.ts +37 -0
- package/Dropzone/Dropzone.js +55 -0
- package/Dropzone/Dropzone.js.map +1 -0
- package/Dropzone/index.d.ts +5 -0
- package/Dropzone/index.js +3 -0
- package/Dropzone/index.js.map +1 -0
- package/Dropzone/styles.d.ts +3 -0
- package/Dropzone/styles.js +42 -0
- package/Dropzone/styles.js.map +1 -0
- package/Dropzone/types.d.ts +43 -0
- package/Dropzone/types.js +7 -0
- package/Dropzone/types.js.map +1 -0
- package/EmptyState/EmptyState.d.ts +5 -0
- package/EmptyState/EmptyState.js +7 -0
- package/EmptyState/EmptyState.js.map +1 -0
- package/EmptyState/index.d.ts +1 -0
- package/EmptyState/index.js +2 -0
- package/EmptyState/index.js.map +1 -0
- package/EmptyStateCollection/EmptyStateCollection.d.ts +7 -0
- package/EmptyStateCollection/EmptyStateCollection.js +36 -0
- package/EmptyStateCollection/EmptyStateCollection.js.map +1 -0
- package/EmptyStateCollection/index.d.ts +1 -0
- package/EmptyStateCollection/index.js +2 -0
- package/EmptyStateCollection/index.js.map +1 -0
- package/EmptyStateCollection/styles.d.ts +2 -0
- package/EmptyStateCollection/styles.js +9 -0
- package/EmptyStateCollection/styles.js.map +1 -0
- package/EmptyStatePage/EmptyStatePage.d.ts +9 -0
- package/EmptyStatePage/EmptyStatePage.js +31 -0
- package/EmptyStatePage/EmptyStatePage.js.map +1 -0
- package/EmptyStatePage/index.d.ts +1 -0
- package/EmptyStatePage/index.js +2 -0
- package/EmptyStatePage/index.js.map +1 -0
- package/EmptyStatePage/styles.d.ts +2 -0
- package/EmptyStatePage/styles.js +8 -0
- package/EmptyStatePage/styles.js.map +1 -0
- package/MenuItem/MenuItem.js +6 -1
- package/MenuItem/MenuItem.js.map +1 -1
- package/NonNativeSelect/NonNativeSelect.js +1 -1
- package/NonNativeSelect/NonNativeSelect.js.map +1 -1
- package/NonNativeSelectLoader/NonNativeSelectLoader.js +2 -2
- package/NonNativeSelectLoader/NonNativeSelectLoader.js.map +1 -1
- package/NonNativeSelectOptions/NonNativeSelectOptions.js +3 -3
- package/NonNativeSelectOptions/NonNativeSelectOptions.js.map +1 -1
- package/Note/Note.d.ts +12 -0
- package/Note/Note.js +31 -0
- package/Note/Note.js.map +1 -0
- package/Note/index.d.ts +4 -0
- package/Note/index.js +2 -0
- package/Note/index.js.map +1 -0
- package/Note/styles.d.ts +3 -0
- package/Note/styles.js +23 -0
- package/Note/styles.js.map +1 -0
- package/NoteContent/NoteContent.d.ts +7 -0
- package/NoteContent/NoteContent.js +21 -0
- package/NoteContent/NoteContent.js.map +1 -0
- package/NoteContent/index.d.ts +1 -0
- package/NoteContent/index.js +2 -0
- package/NoteContent/index.js.map +1 -0
- package/NoteSubtitle/NoteSubtitle.d.ts +7 -0
- package/NoteSubtitle/NoteSubtitle.js +23 -0
- package/NoteSubtitle/NoteSubtitle.js.map +1 -0
- package/NoteSubtitle/index.d.ts +1 -0
- package/NoteSubtitle/index.js +2 -0
- package/NoteSubtitle/index.js.map +1 -0
- package/NoteTitle/NoteTitle.d.ts +7 -0
- package/NoteTitle/NoteTitle.js +27 -0
- package/NoteTitle/NoteTitle.js.map +1 -0
- package/NoteTitle/index.d.ts +1 -0
- package/NoteTitle/index.js +2 -0
- package/NoteTitle/index.js.map +1 -0
- package/NoteTitle/styles.d.ts +2 -0
- package/NoteTitle/styles.js +7 -0
- package/NoteTitle/styles.js.map +1 -0
- package/OverviewBlock/OverviewBlock.d.ts +25 -0
- package/OverviewBlock/OverviewBlock.js +54 -0
- package/OverviewBlock/OverviewBlock.js.map +1 -0
- package/OverviewBlock/index.d.ts +4 -0
- package/OverviewBlock/index.js +2 -0
- package/OverviewBlock/index.js.map +1 -0
- package/OverviewBlock/styles.d.ts +3 -0
- package/OverviewBlock/styles.js +42 -0
- package/OverviewBlock/styles.js.map +1 -0
- package/OverviewBlockGroup/OverviewBlockGroup.d.ts +10 -0
- package/OverviewBlockGroup/OverviewBlockGroup.js +36 -0
- package/OverviewBlockGroup/OverviewBlockGroup.js.map +1 -0
- package/OverviewBlockGroup/OverviewBlockGroupContext.d.ts +8 -0
- package/OverviewBlockGroup/OverviewBlockGroupContext.js +10 -0
- package/OverviewBlockGroup/OverviewBlockGroupContext.js.map +1 -0
- package/OverviewBlockGroup/index.d.ts +1 -0
- package/OverviewBlockGroup/index.js +2 -0
- package/OverviewBlockGroup/index.js.map +1 -0
- package/OverviewBlockGroup/settings.d.ts +2 -0
- package/OverviewBlockGroup/settings.js +2 -0
- package/OverviewBlockGroup/settings.js.map +1 -0
- package/OverviewBlockRow/OverviewBlockRow.d.ts +4 -0
- package/OverviewBlockRow/OverviewBlockRow.js +26 -0
- package/OverviewBlockRow/OverviewBlockRow.js.map +1 -0
- package/OverviewBlockRow/index.d.ts +1 -0
- package/OverviewBlockRow/index.js +2 -0
- package/OverviewBlockRow/index.js.map +1 -0
- package/OverviewBlockRow/styles.d.ts +3 -0
- package/OverviewBlockRow/styles.js +26 -0
- package/OverviewBlockRow/styles.js.map +1 -0
- package/PageFooter/PageFooter.d.ts +2 -0
- package/PageFooter/PageFooter.js +5 -4
- package/PageFooter/PageFooter.js.map +1 -1
- package/ScrollMenu/ScrollMenu.js +7 -2
- package/ScrollMenu/ScrollMenu.js.map +1 -1
- package/Section/Section.d.ts +29 -0
- package/Section/Section.js +60 -0
- package/Section/Section.js.map +1 -0
- package/Section/index.d.ts +4 -0
- package/Section/index.js +2 -0
- package/Section/index.js.map +1 -0
- package/Section/styles.d.ts +3 -0
- package/Section/styles.js +62 -0
- package/Section/styles.js.map +1 -0
- package/SelectOptions/SelectOptions.d.ts +6 -0
- package/SelectOptions/SelectOptions.js +33 -0
- package/SelectOptions/SelectOptions.js.map +1 -0
- package/SelectOptions/index.d.ts +4 -0
- package/SelectOptions/index.js +2 -0
- package/SelectOptions/index.js.map +1 -0
- package/SelectOptions/styles.d.ts +3 -0
- package/SelectOptions/styles.js +19 -0
- package/SelectOptions/styles.js.map +1 -0
- package/ShowMore/ShowMore.d.ts +1 -1
- package/ShowMore/ShowMore.js +4 -2
- package/ShowMore/ShowMore.js.map +1 -1
- package/ShowMore/utils.d.ts +1 -0
- package/ShowMore/utils.js +17 -0
- package/ShowMore/utils.js.map +1 -0
- package/Timeline/Timeline.d.ts +23 -0
- package/Timeline/Timeline.js +9 -0
- package/Timeline/Timeline.js.map +1 -0
- package/Timeline/index.d.ts +4 -0
- package/Timeline/index.js +2 -0
- package/Timeline/index.js.map +1 -0
- package/TimelineRow/TimelineRow.d.ts +24 -0
- package/TimelineRow/TimelineRow.js +27 -0
- package/TimelineRow/TimelineRow.js.map +1 -0
- package/TimelineRow/index.d.ts +4 -0
- package/TimelineRow/index.js +2 -0
- package/TimelineRow/index.js.map +1 -0
- package/TimelineRow/styles.d.ts +3 -0
- package/TimelineRow/styles.js +45 -0
- package/TimelineRow/styles.js.map +1 -0
- package/TypographyOverflow/TypographyOverflow.d.ts +26 -0
- package/TypographyOverflow/TypographyOverflow.js +79 -0
- package/TypographyOverflow/TypographyOverflow.js.map +1 -0
- package/TypographyOverflow/index.d.ts +4 -0
- package/TypographyOverflow/index.js +2 -0
- package/TypographyOverflow/index.js.map +1 -0
- package/TypographyOverflow/styles.d.ts +2 -0
- package/TypographyOverflow/styles.js +28 -0
- package/TypographyOverflow/styles.js.map +1 -0
- package/index.d.ts +19 -0
- package/index.js +10 -0
- package/index.js.map +1 -1
- package/package.json +9 -4
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default } from './DatePicker';
|
|
2
|
+
export type { Props as DatePickerProps } from './DatePicker';
|
|
3
|
+
export type { DatePickerValue, DatePickerInputCustomValueParser, DatePickerInputCustomValueParserParameters } from './types';
|
|
4
|
+
export { datePickerParseDateString } from './utils';
|
|
5
|
+
export { DEFAULT_DATE_PICKER_EDIT_DATE_FORMAT, DEFAULT_DATE_PICKER_DISPLAY_DATE_FORMAT } from './constants';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/DatePicker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAE,oCAAoC,EAAE,uCAAuC,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/DatePicker/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,eAAe,GAAG,EAAE,CAClB,YAAY,CAAC;IACX,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM;KAChB;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DateOrDateRangeType } from '../Calendar';
|
|
2
|
+
export declare type DatePickerValue = DateOrDateRangeType | null;
|
|
3
|
+
export declare type DatePickerInputValueParserParameters = {
|
|
4
|
+
customParser?: DatePickerInputCustomValueParser;
|
|
5
|
+
dateFormat: string;
|
|
6
|
+
minDate?: Date;
|
|
7
|
+
maxDate?: Date;
|
|
8
|
+
timezone?: string;
|
|
9
|
+
};
|
|
10
|
+
export declare type DatePickerInputCustomValueParserParameters = {
|
|
11
|
+
timezone?: string;
|
|
12
|
+
};
|
|
13
|
+
export declare type DatePickerInputCustomValueParser = (value: string, params: DatePickerInputCustomValueParserParameters) => Date | null | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/DatePicker/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DatePickerInputValueParserParameters } from './types';
|
|
2
|
+
import { DateOrDateRangeType, DateRangeType } from '../Calendar';
|
|
3
|
+
export declare const timezoneConvert: (date: DateOrDateRangeType, timeZone?: string | undefined) => DateOrDateRangeType;
|
|
4
|
+
export declare const timezoneFormat: (date: Date, timeZone?: string | undefined) => Date;
|
|
5
|
+
export declare const formatDateRange: (dates: DateRangeType, format: string) => string;
|
|
6
|
+
export declare const isDateValid: (date: string, pattern: string) => boolean;
|
|
7
|
+
export declare const isDateAfter: (date: Date, dateToCompare: Date) => boolean;
|
|
8
|
+
export declare const isDateBefore: (date: Date, dateToCompare: Date) => boolean;
|
|
9
|
+
export declare const isDateWithinInterval: (date: Date, minDate: Date | undefined, maxDate: Date | undefined) => boolean;
|
|
10
|
+
export declare const datePickerParseDateString: (value: string, { customParser, dateFormat, timezone, minDate, maxDate }: DatePickerInputValueParserParameters) => Date | undefined;
|
|
11
|
+
export declare const isValidDateValue: (dateValue: DateOrDateRangeType | string) => dateValue is DateOrDateRangeType;
|
|
12
|
+
export declare const getStartOfTheDayDate: (date?: Date | undefined) => Date | undefined;
|
|
@@ -0,0 +1,102 @@
|
|
|
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, toDate } from 'date-fns-tz';
|
|
9
|
+
// Convert date to given timezone. If timezone is undefined, return given date as is.
|
|
10
|
+
export const timezoneConvert = (date, timeZone) => {
|
|
11
|
+
const convert = (dateToConvert) => {
|
|
12
|
+
if (timeZone) {
|
|
13
|
+
/**
|
|
14
|
+
* Prevent invalid IANA timezone error. This is likely to happen
|
|
15
|
+
* when someone is editing properties in a Storybook examples.
|
|
16
|
+
*/
|
|
17
|
+
try {
|
|
18
|
+
return utcToZonedTime(dateToConvert, timeZone);
|
|
19
|
+
}
|
|
20
|
+
catch (_a) {
|
|
21
|
+
return dateToConvert;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return dateToConvert;
|
|
25
|
+
};
|
|
26
|
+
return Array.isArray(date)
|
|
27
|
+
? date.map(convert)
|
|
28
|
+
: convert(date);
|
|
29
|
+
};
|
|
30
|
+
// Format date in given timezone. If timezone is undefined, return given date as is.
|
|
31
|
+
export const timezoneFormat = (date, timeZone) => {
|
|
32
|
+
if (timeZone) {
|
|
33
|
+
/**
|
|
34
|
+
* Prevent invalid IANA timezone error. This is likely to happen
|
|
35
|
+
* when someone is editing properties in a Storybook examples.
|
|
36
|
+
*/
|
|
37
|
+
try {
|
|
38
|
+
/**
|
|
39
|
+
* Maintain the same date and time, but formatted in the given timezone
|
|
40
|
+
* so next time the user edits the date it's not recalculated.
|
|
41
|
+
*/
|
|
42
|
+
return new Date(tzFormat(date, 'MMM dd yyyy HH:mm:ss OOOO', { timeZone }));
|
|
43
|
+
}
|
|
44
|
+
catch (_a) {
|
|
45
|
+
return date;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return date;
|
|
49
|
+
};
|
|
50
|
+
export const formatDateRange = (dates, format) => dates.map(date => formatDate(date, format)).join(' - ');
|
|
51
|
+
export const isDateValid = (date, pattern) => {
|
|
52
|
+
return (date.length === pattern.length && isValid(parse(date, pattern, new Date())));
|
|
53
|
+
};
|
|
54
|
+
export const isDateAfter = (date, dateToCompare) => isEqual(date, dateToCompare) || isAfter(date, dateToCompare);
|
|
55
|
+
export const isDateBefore = (date, dateToCompare) => isEqual(date, dateToCompare) || isBefore(date, dateToCompare);
|
|
56
|
+
// eslint-disable-next-line complexity
|
|
57
|
+
export const isDateWithinInterval = (date, minDate, maxDate) => {
|
|
58
|
+
if (!minDate && !maxDate) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
if (minDate && maxDate) {
|
|
62
|
+
return isWithinInterval(date, {
|
|
63
|
+
start: minDate,
|
|
64
|
+
end: maxDate
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (minDate) {
|
|
68
|
+
return isDateAfter(date, minDate);
|
|
69
|
+
}
|
|
70
|
+
if (maxDate) {
|
|
71
|
+
return isDateBefore(date, maxDate);
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
74
|
+
};
|
|
75
|
+
export const datePickerParseDateString = (value, { customParser, dateFormat, timezone, minDate, maxDate }) => {
|
|
76
|
+
if (!value) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const isValidDateString = isDateValid(value, dateFormat);
|
|
80
|
+
const parsedNextValue = customParser && !isValidDateString
|
|
81
|
+
? customParser(value, { timezone })
|
|
82
|
+
: parse(value, dateFormat, new Date());
|
|
83
|
+
if (!parsedNextValue || !isValid(parsedNextValue)) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const nextTimezoneValue = timezoneFormat(parsedNextValue, timezone);
|
|
87
|
+
if (!isDateWithinInterval(nextTimezoneValue, minDate, maxDate)) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
return nextTimezoneValue;
|
|
91
|
+
};
|
|
92
|
+
export const isValidDateValue = (dateValue) => typeof dateValue !== 'string';
|
|
93
|
+
export const getStartOfTheDayDate = (date) => {
|
|
94
|
+
if (!date) {
|
|
95
|
+
return date;
|
|
96
|
+
}
|
|
97
|
+
// to prevent mutation of the original date
|
|
98
|
+
const clonedDate = toDate(date);
|
|
99
|
+
clonedDate.setHours(0, 0, 0, 0);
|
|
100
|
+
return clonedDate;
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/DatePicker/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BaseProps } from '@toptal/picasso-shared';
|
|
2
|
+
import { FunctionComponent, ReactNode } from 'react';
|
|
3
|
+
declare type AnchorType = 'bottom' | 'left' | 'right' | 'top';
|
|
4
|
+
declare type WidthType = 'narrow' | 'regular' | 'medium' | 'wide' | 'ultra-wide';
|
|
5
|
+
export interface Props extends BaseProps {
|
|
6
|
+
/** Side from which the drawer will appear. */
|
|
7
|
+
anchor?: AnchorType;
|
|
8
|
+
/** Drawer content */
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
/** Disable the portal behavior. The children stay within it's parent DOM hierarchy. */
|
|
11
|
+
disablePortal?: boolean;
|
|
12
|
+
/** Specify if the drawer is opened or not */
|
|
13
|
+
open: boolean;
|
|
14
|
+
/** Specify the drawer title */
|
|
15
|
+
title?: ReactNode;
|
|
16
|
+
/** Callback fired when the component requests to be closed. */
|
|
17
|
+
onClose?: () => void;
|
|
18
|
+
/** Width of Drawer */
|
|
19
|
+
width?: WidthType;
|
|
20
|
+
}
|
|
21
|
+
export declare const Drawer: FunctionComponent<Props>;
|
|
22
|
+
export default Drawer;
|
package/Drawer/Drawer.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import MUIDrawer from '@material-ui/core/Drawer';
|
|
13
|
+
import { makeStyles, useTheme } from '@material-ui/core/styles';
|
|
14
|
+
import cx from 'classnames';
|
|
15
|
+
import { useDrawer, usePicassoRoot } from '@toptal/picasso-provider';
|
|
16
|
+
import { CloseMinor16 } from '@toptal/picasso/Icon';
|
|
17
|
+
import React, { useLayoutEffect } from 'react';
|
|
18
|
+
import styles from './styles';
|
|
19
|
+
import Button from '../Button';
|
|
20
|
+
import Container from '../Container';
|
|
21
|
+
import DrawerTitle from '../DrawerTitle';
|
|
22
|
+
const useStyles = makeStyles(styles, { name: 'PicassoDrawer' });
|
|
23
|
+
export const Drawer = props => {
|
|
24
|
+
const { children, disablePortal, open, onClose, title, width = 'regular' } = props, rest = __rest(props, ["children", "disablePortal", "open", "onClose", "title", "width"]);
|
|
25
|
+
const classes = useStyles();
|
|
26
|
+
const { setHasDrawer } = useDrawer();
|
|
27
|
+
const theme = useTheme();
|
|
28
|
+
const container = usePicassoRoot();
|
|
29
|
+
useLayoutEffect(() => {
|
|
30
|
+
setHasDrawer(open);
|
|
31
|
+
const cleanup = () => {
|
|
32
|
+
setHasDrawer(false);
|
|
33
|
+
};
|
|
34
|
+
return cleanup;
|
|
35
|
+
}, [open, setHasDrawer]);
|
|
36
|
+
const handleOnClose = () => {
|
|
37
|
+
if (onClose) {
|
|
38
|
+
onClose();
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
return (React.createElement(MUIDrawer, Object.assign({}, rest, { open: open, onClose: handleOnClose, disablePortal: disablePortal, container: container, ModalProps: { style: { zIndex: theme.zIndex.drawer } } }),
|
|
42
|
+
React.createElement(Container, { flex: true, direction: 'column', className: cx(classes.container, classes[width]) },
|
|
43
|
+
React.createElement(DrawerTitle, { title: title }),
|
|
44
|
+
React.createElement(Container, { flex: true, className: classes.content }, children),
|
|
45
|
+
React.createElement(Button.Circular, { variant: 'flat', icon: React.createElement(CloseMinor16, null), onClick: handleOnClose, className: classes.closeButton }))));
|
|
46
|
+
};
|
|
47
|
+
Drawer.displayName = 'Drawer';
|
|
48
|
+
Drawer.defaultProps = {
|
|
49
|
+
anchor: 'right',
|
|
50
|
+
disablePortal: false,
|
|
51
|
+
onClose: () => { },
|
|
52
|
+
width: 'regular'
|
|
53
|
+
};
|
|
54
|
+
export default Drawer;
|
|
55
|
+
//# sourceMappingURL=Drawer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Drawer.js","sourceRoot":"","sources":["../../src/Drawer/Drawer.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,SAAS,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAE,UAAU,EAAS,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACtE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,EAAgC,eAAe,EAAE,MAAM,OAAO,CAAA;AAE5E,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,MAAM,MAAM,WAAW,CAAA;AAC9B,OAAO,SAAS,MAAM,cAAc,CAAA;AACpC,OAAO,WAAW,MAAM,gBAAgB,CAAA;AAuBxC,MAAM,SAAS,GAAG,UAAU,CAAQ,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAA;AAEtE,MAAM,CAAC,MAAM,MAAM,GAA6B,KAAK,CAAC,EAAE;IACtD,MAAM,EACJ,QAAQ,EACR,aAAa,EACb,IAAI,EACJ,OAAO,EACP,KAAK,EACL,KAAK,GAAG,SAAS,KAEf,KAAK,EADJ,IAAI,UACL,KAAK,EARH,kEAQL,CAAQ,CAAA;IACT,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAC3B,MAAM,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE,CAAA;IACpC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,SAAS,GAAG,cAAc,EAAE,CAAA;IAElC,eAAe,CAAC,GAAG,EAAE;QACnB,YAAY,CAAC,IAAI,CAAC,CAAA;QAElB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC,CAAA;QAED,OAAO,OAAO,CAAA;IAChB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAA;IAExB,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,OAAO,EAAE;YACX,OAAO,EAAE,CAAA;SACV;IACH,CAAC,CAAA;IAED,OAAO,CACL,oBAAC,SAAS,oBACJ,IAAI,IACR,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;QAEtD,oBAAC,SAAS,IACR,IAAI,QACJ,SAAS,EAAC,QAAQ,EAClB,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAEhD,oBAAC,WAAW,IAAC,KAAK,EAAE,KAAK,GAAI;YAC7B,oBAAC,SAAS,IAAC,IAAI,QAAC,SAAS,EAAE,OAAO,CAAC,OAAO,IACvC,QAAQ,CACC;YACZ,oBAAC,MAAM,CAAC,QAAQ,IACd,OAAO,EAAC,MAAM,EACd,IAAI,EAAE,oBAAC,YAAY,OAAG,EACtB,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,OAAO,CAAC,WAAW,GAC9B,CACQ,CACF,CACb,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAA;AAE7B,MAAM,CAAC,YAAY,GAAG;IACpB,MAAM,EAAE,OAAO;IACf,aAAa,EAAE,KAAK;IACpB,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;IACjB,KAAK,EAAE,SAAS;CACjB,CAAA;AAED,eAAe,MAAM,CAAA"}
|
package/Drawer/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Drawer/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA"}
|
package/Drawer/styles.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { createStyles } from '@material-ui/core/styles';
|
|
2
|
+
import { PicassoProvider } from '@toptal/picasso-provider';
|
|
3
|
+
PicassoProvider.override(() => ({
|
|
4
|
+
MuiDrawer: {
|
|
5
|
+
paper: {
|
|
6
|
+
maxWidth: '100%'
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
}));
|
|
10
|
+
export default () => createStyles({
|
|
11
|
+
container: {
|
|
12
|
+
maxWidth: '100%',
|
|
13
|
+
position: 'relative',
|
|
14
|
+
flex: 1
|
|
15
|
+
},
|
|
16
|
+
content: {
|
|
17
|
+
flex: 1
|
|
18
|
+
},
|
|
19
|
+
closeButton: {
|
|
20
|
+
position: 'absolute',
|
|
21
|
+
right: '1.5rem',
|
|
22
|
+
top: '1rem'
|
|
23
|
+
},
|
|
24
|
+
narrow: {
|
|
25
|
+
width: '27.5rem'
|
|
26
|
+
},
|
|
27
|
+
regular: {
|
|
28
|
+
width: '35rem'
|
|
29
|
+
},
|
|
30
|
+
medium: {
|
|
31
|
+
width: '40rem'
|
|
32
|
+
},
|
|
33
|
+
wide: {
|
|
34
|
+
width: '60rem'
|
|
35
|
+
},
|
|
36
|
+
'ultra-wide': {
|
|
37
|
+
width: '73.75rem'
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/Drawer/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1D,eAAe,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9B,SAAS,EAAE;QACT,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM;SACjB;KACF;CACF,CAAC,CAAC,CAAA;AAEH,eAAe,GAAG,EAAE,CAClB,YAAY,CAAC;IACX,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,CAAC;KACR;IACD,OAAO,EAAE;QACP,IAAI,EAAE,CAAC;KACR;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,MAAM;KACZ;IACD,MAAM,EAAE;QACN,KAAK,EAAE,SAAS;KACjB;IACD,OAAO,EAAE;QACP,KAAK,EAAE,OAAO;KACf;IACD,MAAM,EAAE;QACN,KAAK,EAAE,OAAO;KACf;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,OAAO;KACf;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,UAAU;KAClB;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseProps } from '@toptal/picasso-shared';
|
|
2
|
+
import { DrawerProps } from '../Drawer';
|
|
3
|
+
export interface Props extends BaseProps, Pick<DrawerProps, 'title'> {
|
|
4
|
+
}
|
|
5
|
+
export declare const DrawerTitle: {
|
|
6
|
+
({ title }: Props): JSX.Element | null;
|
|
7
|
+
displayName: string;
|
|
8
|
+
};
|
|
9
|
+
export default DrawerTitle;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
3
|
+
import styles from './styles';
|
|
4
|
+
import Typography from '../Typography';
|
|
5
|
+
import Container from '../Container';
|
|
6
|
+
const useStyles = makeStyles(styles, { name: 'PicassoDrawerTitle' });
|
|
7
|
+
export const DrawerTitle = ({ title }) => {
|
|
8
|
+
const classes = useStyles();
|
|
9
|
+
if (!title) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
if (React.isValidElement(title)) {
|
|
13
|
+
return title;
|
|
14
|
+
}
|
|
15
|
+
return (React.createElement(Container, { flex: true, alignItems: 'center', className: classes.header },
|
|
16
|
+
React.createElement(Typography, { variant: 'heading', size: 'medium', className: classes.title }, title)));
|
|
17
|
+
};
|
|
18
|
+
DrawerTitle.displayName = 'DrawerTitle';
|
|
19
|
+
export default DrawerTitle;
|
|
20
|
+
//# sourceMappingURL=DrawerTitle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DrawerTitle.js","sourceRoot":"","sources":["../../src/DrawerTitle/DrawerTitle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,UAAU,EAAS,MAAM,0BAA0B,CAAA;AAE5D,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,UAAU,MAAM,eAAe,CAAA;AACtC,OAAO,SAAS,MAAM,cAAc,CAAA;AAKpC,MAAM,SAAS,GAAG,UAAU,CAAQ,MAAM,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAA;AAE3E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAS,EAAE,EAAE;IAC9C,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAE3B,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,IAAI,CAAA;KACZ;IAED,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;QAC/B,OAAO,KAAK,CAAA;KACb;IAED,OAAO,CACL,oBAAC,SAAS,IAAC,IAAI,QAAC,UAAU,EAAC,QAAQ,EAAC,SAAS,EAAE,OAAO,CAAC,MAAM;QAC3D,oBAAC,UAAU,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAE,OAAO,CAAC,KAAK,IACjE,KAAK,CACK,CACH,CACb,CAAA;AACH,CAAC,CAAA;AAED,WAAW,CAAC,WAAW,GAAG,aAAa,CAAA;AAEvC,eAAe,WAAW,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './DrawerTitle';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/DrawerTitle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createStyles } from '@material-ui/core/styles';
|
|
2
|
+
export default ({ palette }) => createStyles({
|
|
3
|
+
header: {
|
|
4
|
+
borderBottom: `1px solid ${palette.grey.lighter}`,
|
|
5
|
+
padding: '1rem 1.5rem'
|
|
6
|
+
},
|
|
7
|
+
title: {
|
|
8
|
+
flexGrow: 1
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/DrawerTitle/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,0BAA0B,CAAA;AAE9D,eAAe,CAAC,EAAE,OAAO,EAAS,EAAE,EAAE,CACpC,YAAY,CAAC;IACX,MAAM,EAAE;QACN,YAAY,EAAE,aAAa,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE;QACjD,OAAO,EAAE,aAAa;KACvB;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,CAAC;KACZ;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { BaseProps } from '@toptal/picasso-shared';
|
|
3
|
+
import { FileUpload, DropzoneOptions } from './types';
|
|
4
|
+
export interface Props extends BaseProps {
|
|
5
|
+
/**
|
|
6
|
+
* Set accepted file types. See https://github.com/okonet/attr-accept for more information.
|
|
7
|
+
*/
|
|
8
|
+
accept?: DropzoneOptions['accept'];
|
|
9
|
+
/** Enable/disable the dropzone */
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
/** Maximum file size (in bytes) */
|
|
12
|
+
maxSize?: number;
|
|
13
|
+
/** Minimum file size (in bytes) */
|
|
14
|
+
minSize?: number;
|
|
15
|
+
/** Allow drag 'n' drop (or selection from the file dialog) of multiple files */
|
|
16
|
+
multiple?: boolean;
|
|
17
|
+
/** The text of the hint */
|
|
18
|
+
hint?: string;
|
|
19
|
+
/** Callback invoked when a file item is removed */
|
|
20
|
+
onRemove?: (fileName: string, index: number) => void;
|
|
21
|
+
/** Callback for when the drop event occurs */
|
|
22
|
+
onDropAccepted?: DropzoneOptions['onDropAccepted'];
|
|
23
|
+
/** callback for when the drop event occurs */
|
|
24
|
+
onDropRejected?: DropzoneOptions['onDropRejected'];
|
|
25
|
+
/** callback for when the drop event occurs */
|
|
26
|
+
onDrop?: DropzoneOptions['onDrop'];
|
|
27
|
+
/** Custom validation function */
|
|
28
|
+
validator?: DropzoneOptions['validator'];
|
|
29
|
+
/** Value uses the File interface. */
|
|
30
|
+
value?: FileUpload[];
|
|
31
|
+
/** Reasons why files couldn't be droped into dropzone */
|
|
32
|
+
errorMessages?: string[];
|
|
33
|
+
focused?: boolean;
|
|
34
|
+
hovered?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export declare const Dropzone: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLInputElement>>;
|
|
37
|
+
export default Dropzone;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { useDropzone } from 'react-dropzone';
|
|
3
|
+
import cx from 'classnames';
|
|
4
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
5
|
+
import { Upload24 } from '@toptal/picasso/Icon';
|
|
6
|
+
import FormHint from '../FormHint';
|
|
7
|
+
import FormError from '../FormError';
|
|
8
|
+
import Container from '../Container';
|
|
9
|
+
import FileList from '../FileList';
|
|
10
|
+
import Typography from '../Typography';
|
|
11
|
+
import styles from './styles';
|
|
12
|
+
const useStyles = makeStyles(styles, { name: 'Dropzone' });
|
|
13
|
+
export const Dropzone = forwardRef(function Dropzone(props, ref) {
|
|
14
|
+
const { hint, onRemove, value, className, errorMessages = [], style, 'data-testid': dataTestId, focused, hovered,
|
|
15
|
+
// dropzoneOptions
|
|
16
|
+
accept, minSize, maxSize, multiple, disabled, onDrop, onDropAccepted, onDropRejected, validator } = props;
|
|
17
|
+
const { getRootProps, isDragActive, getInputProps } = useDropzone({
|
|
18
|
+
accept,
|
|
19
|
+
minSize,
|
|
20
|
+
maxSize,
|
|
21
|
+
multiple,
|
|
22
|
+
disabled,
|
|
23
|
+
onDrop,
|
|
24
|
+
onDropAccepted,
|
|
25
|
+
onDropRejected,
|
|
26
|
+
validator
|
|
27
|
+
});
|
|
28
|
+
const classes = useStyles();
|
|
29
|
+
return (React.createElement(Container, { style: style, ref: ref, className: className },
|
|
30
|
+
React.createElement(Container, Object.assign({ flex: true, direction: 'column', alignItems: 'center', "data-testid": dataTestId }, getRootProps({
|
|
31
|
+
className: cx(classes.root, {
|
|
32
|
+
[classes.dragActive]: isDragActive,
|
|
33
|
+
[classes.hovered]: hovered,
|
|
34
|
+
[classes.disabled]: disabled,
|
|
35
|
+
[classes.focused]: focused
|
|
36
|
+
})
|
|
37
|
+
})),
|
|
38
|
+
React.createElement("input", Object.assign({}, getInputProps({ className: classes.nativeInput }))),
|
|
39
|
+
React.createElement(Upload24, { color: 'darkGrey' }),
|
|
40
|
+
React.createElement(Typography, { size: 'medium', color: 'black', weight: 'semibold' }, "Click or drag file to upload"),
|
|
41
|
+
hint && errorMessages.length === 0 && (React.createElement(FormHint, { className: cx(classes.hint) }, hint)),
|
|
42
|
+
errorMessages.length > 0 &&
|
|
43
|
+
errorMessages.map((error, index) => (React.createElement(FormError, { className: classes.error, key: `${error}-${String(index)}` }, error)))),
|
|
44
|
+
value && value.length > 0 && (React.createElement(Container, { top: 'xsmall' },
|
|
45
|
+
React.createElement(FileList, { files: value, onItemRemove: onRemove })))));
|
|
46
|
+
});
|
|
47
|
+
Dropzone.displayName = 'Dropzone';
|
|
48
|
+
Dropzone.defaultProps = {
|
|
49
|
+
disabled: false,
|
|
50
|
+
maxSize: Infinity,
|
|
51
|
+
minSize: 0,
|
|
52
|
+
multiple: true
|
|
53
|
+
};
|
|
54
|
+
export default Dropzone;
|
|
55
|
+
//# sourceMappingURL=Dropzone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dropzone.js","sourceRoot":"","sources":["../../src/Dropzone/Dropzone.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Dropzone/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Theme } from '@material-ui/core/styles';
|
|
2
|
+
declare const _default: ({ palette, sizes, transitions }: Theme) => import("@material-ui/styles").StyleRules<{}, "disabled" | "error" | "root" | "focused" | "hovered" | "hint" | "completed" | "dragActive">;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { createStyles } from '@material-ui/core/styles';
|
|
2
|
+
export default ({ palette, sizes, transitions }) => createStyles({
|
|
3
|
+
root: {
|
|
4
|
+
padding: '20px',
|
|
5
|
+
borderWidth: sizes.borderWidth,
|
|
6
|
+
borderRadius: sizes.borderRadius.medium,
|
|
7
|
+
borderColor: palette.grey.light2,
|
|
8
|
+
borderStyle: 'dashed',
|
|
9
|
+
backgroundColor: palette.common.white,
|
|
10
|
+
color: palette.grey.dark,
|
|
11
|
+
outline: 'none',
|
|
12
|
+
transition: `all ${transitions.duration.short}ms ${transitions.easing.easeOut}`,
|
|
13
|
+
transitionProperty: 'border, background-color',
|
|
14
|
+
gap: '0.5rem',
|
|
15
|
+
'&:hover, &$hovered, &:focus, &$focused, &$dragActive': {
|
|
16
|
+
borderColor: palette.blue.main,
|
|
17
|
+
cursor: 'pointer'
|
|
18
|
+
},
|
|
19
|
+
'&$disabled': {
|
|
20
|
+
backgroundColor: palette.grey.lighter,
|
|
21
|
+
'&:hover': {
|
|
22
|
+
cursor: 'no-drop',
|
|
23
|
+
borderColor: palette.grey.light2
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
hint: {
|
|
28
|
+
margin: 0,
|
|
29
|
+
'& > *': {
|
|
30
|
+
lineHeight: '1rem'
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
completed: {},
|
|
34
|
+
error: {
|
|
35
|
+
margin: 0
|
|
36
|
+
},
|
|
37
|
+
dragActive: {},
|
|
38
|
+
hovered: {},
|
|
39
|
+
disabled: {},
|
|
40
|
+
focused: {}
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/Dropzone/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,0BAA0B,CAAA;AAE9D,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAS,EAAE,EAAE,CACxD,YAAY,CAAC;IACX,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM;QACvC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;QAChC,WAAW,EAAE,QAAQ;QACrB,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;QACrC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;QACxB,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,MAAM,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE;QAC/E,kBAAkB,EAAE,0BAA0B;QAC9C,GAAG,EAAE,QAAQ;QACb,sDAAsD,EAAE;YACtD,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;YAC9B,MAAM,EAAE,SAAS;SAClB;QACD,YAAY,EAAE;YACZ,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO;YACrC,SAAS,EAAE;gBACT,MAAM,EAAE,SAAS;gBACjB,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;aACjC;SACF;KACF;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,CAAC;QACT,OAAO,EAAE;YACP,UAAU,EAAE,MAAM;SACnB;KACF;IACD,SAAS,EAAE,EAAE;IACb,KAAK,EAAE;QACL,MAAM,EAAE,CAAC;KACV;IACD,UAAU,EAAE,EAAE;IACd,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,EAAE;CACZ,CAAC,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export interface FileUpload {
|
|
2
|
+
uploading?: boolean;
|
|
3
|
+
progress?: number;
|
|
4
|
+
error?: string;
|
|
5
|
+
file: File;
|
|
6
|
+
}
|
|
7
|
+
export declare type DropzoneOptions = {
|
|
8
|
+
/**
|
|
9
|
+
* Set accepted file types. See https://github.com/okonet/attr-accept for more information.
|
|
10
|
+
*/
|
|
11
|
+
accept?: string | string[];
|
|
12
|
+
/** Enable/disable the dropzone */
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
/** Maximum file size (in bytes) */
|
|
15
|
+
maxSize?: number;
|
|
16
|
+
/** Minimum file size (in bytes) */
|
|
17
|
+
minSize?: number;
|
|
18
|
+
/** Callback for when the drop event occurs */
|
|
19
|
+
onDrop?: <T extends File>(acceptedFiles: T[], fileRejections: FileRejection[], event: DropEvent) => void;
|
|
20
|
+
/** Callback for when the drop event occurs */
|
|
21
|
+
onDropAccepted?: <T extends File>(files: T[], event: DropEvent) => void;
|
|
22
|
+
/** Callback for when the drop event occurs */
|
|
23
|
+
onDropRejected?: (fileRejections: FileRejection[], event: DropEvent) => void;
|
|
24
|
+
/** Custom validation function */
|
|
25
|
+
validator?: <T extends File>(file: T) => FileError | FileError[] | null;
|
|
26
|
+
};
|
|
27
|
+
export declare type DropEvent = React.DragEvent<HTMLElement> | React.ChangeEvent<HTMLInputElement> | DragEvent | Event;
|
|
28
|
+
export declare const ErrorCode: {
|
|
29
|
+
readonly FileInvalidType: "file-invalid-type";
|
|
30
|
+
readonly FileTooLarge: "file-too-large";
|
|
31
|
+
readonly FileTooSmall: "file-too-small";
|
|
32
|
+
readonly TooManyFiles: "too-many-files";
|
|
33
|
+
};
|
|
34
|
+
declare type ErrorCodeType = typeof ErrorCode[keyof typeof ErrorCode];
|
|
35
|
+
export interface FileError {
|
|
36
|
+
message: string;
|
|
37
|
+
code: ErrorCodeType | string;
|
|
38
|
+
}
|
|
39
|
+
export interface FileRejection {
|
|
40
|
+
file: File;
|
|
41
|
+
errors: FileError[];
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/Dropzone/types.ts"],"names":[],"mappings":"AAsCA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,eAAe,EAAE,mBAAmB;IACpC,YAAY,EAAE,gBAAgB;IAC9B,YAAY,EAAE,gBAAgB;IAC9B,YAAY,EAAE,gBAAgB;CACtB,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
Page: import("react").ForwardRefExoticComponent<import("../EmptyStatePage/EmptyStatePage").Props & import("react").RefAttributes<HTMLDivElement>>;
|
|
3
|
+
Collection: import("react").ForwardRefExoticComponent<import("../EmptyStateCollection/EmptyStateCollection").Props & import("react").RefAttributes<HTMLDivElement>>;
|
|
4
|
+
};
|
|
5
|
+
export default _default;
|