@via-profit/ui-kit 0.1.0-rc.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 (171) hide show
  1. package/CHANGELOG.md +0 -0
  2. package/CONTRIBUTING.md +0 -0
  3. package/LICENSE +21 -0
  4. package/README.md +17 -0
  5. package/dist/Autocomplete/index.d.ts +46 -0
  6. package/dist/Autocomplete/index.js +187 -0
  7. package/dist/Autocomplete/popper-options.d.ts +4 -0
  8. package/dist/Autocomplete/popper-options.js +33 -0
  9. package/dist/Button/ButtonAccent.d.ts +10 -0
  10. package/dist/Button/ButtonAccent.js +48 -0
  11. package/dist/Button/ButtonBase.d.ts +4 -0
  12. package/dist/Button/ButtonBase.js +38 -0
  13. package/dist/Button/ButtonStandard.d.ts +19 -0
  14. package/dist/Button/ButtonStandard.js +50 -0
  15. package/dist/Button/index.d.ts +9 -0
  16. package/dist/Button/index.js +27 -0
  17. package/dist/Calendar/CalendarBottomBar.d.ts +4 -0
  18. package/dist/Calendar/CalendarBottomBar.js +28 -0
  19. package/dist/Calendar/CalendarCell.d.ts +8 -0
  20. package/dist/Calendar/CalendarCell.js +61 -0
  21. package/dist/Calendar/CalendarDateContainer.d.ts +6 -0
  22. package/dist/Calendar/CalendarDateContainer.js +13 -0
  23. package/dist/Calendar/CalendarEmptyCell.d.ts +4 -0
  24. package/dist/Calendar/CalendarEmptyCell.js +29 -0
  25. package/dist/Calendar/CalendarMonthControl.d.ts +6 -0
  26. package/dist/Calendar/CalendarMonthControl.js +49 -0
  27. package/dist/Calendar/CalendarPaper.d.ts +6 -0
  28. package/dist/Calendar/CalendarPaper.js +20 -0
  29. package/dist/Calendar/CalendarTopBar.d.ts +4 -0
  30. package/dist/Calendar/CalendarTopBar.js +30 -0
  31. package/dist/Calendar/CalendarWeekDayLabel.d.ts +6 -0
  32. package/dist/Calendar/CalendarWeekDayLabel.js +17 -0
  33. package/dist/Calendar/CalendarWeekDaysBar.d.ts +10 -0
  34. package/dist/Calendar/CalendarWeekDaysBar.js +32 -0
  35. package/dist/Calendar/CalendarWeekRow.d.ts +6 -0
  36. package/dist/Calendar/CalendarWeekRow.js +14 -0
  37. package/dist/Calendar/IconChevronLeft.d.ts +3 -0
  38. package/dist/Calendar/IconChevronLeft.js +9 -0
  39. package/dist/Calendar/IconChevronRight.d.ts +3 -0
  40. package/dist/Calendar/IconChevronRight.js +9 -0
  41. package/dist/Calendar/index.d.ts +18 -0
  42. package/dist/Calendar/index.js +166 -0
  43. package/dist/Calendar/use-calendar.d.ts +50 -0
  44. package/dist/Calendar/use-calendar.js +197 -0
  45. package/dist/DatePicker/index.d.ts +3 -0
  46. package/dist/DatePicker/index.js +8 -0
  47. package/dist/ErrorBoundary/index.d.ts +19 -0
  48. package/dist/ErrorBoundary/index.js +78 -0
  49. package/dist/Image/index.d.ts +7 -0
  50. package/dist/Image/index.js +45 -0
  51. package/dist/MaskedField/index.d.ts +33 -0
  52. package/dist/MaskedField/index.js +63 -0
  53. package/dist/MaskedField/templates.d.ts +11 -0
  54. package/dist/MaskedField/templates.js +81 -0
  55. package/dist/MaskedField/useMasked.d.ts +18 -0
  56. package/dist/MaskedField/useMasked.js +96 -0
  57. package/dist/Menu/MenuItem.d.ts +10 -0
  58. package/dist/Menu/MenuItem.js +47 -0
  59. package/dist/Menu/MenuItemInner.d.ts +7 -0
  60. package/dist/Menu/MenuItemInner.js +48 -0
  61. package/dist/Menu/MenuWrapper.d.ts +10 -0
  62. package/dist/Menu/MenuWrapper.js +77 -0
  63. package/dist/Menu/index.d.ts +196 -0
  64. package/dist/Menu/index.js +452 -0
  65. package/dist/Menu/popper-options.d.ts +4 -0
  66. package/dist/Menu/popper-options.js +33 -0
  67. package/dist/Menu/reducer.d.ts +14 -0
  68. package/dist/Menu/reducer.js +19 -0
  69. package/dist/Modal/CloseIcon.d.ts +3 -0
  70. package/dist/Modal/CloseIcon.js +37 -0
  71. package/dist/Modal/ModalConfirmBox.d.ts +9 -0
  72. package/dist/Modal/ModalConfirmBox.js +148 -0
  73. package/dist/Modal/ModalDialog.d.ts +7 -0
  74. package/dist/Modal/ModalDialog.js +99 -0
  75. package/dist/Modal/ModalDrawer.d.ts +11 -0
  76. package/dist/Modal/ModalDrawer.js +150 -0
  77. package/dist/Modal/ModalMessageBox.d.ts +8 -0
  78. package/dist/Modal/ModalMessageBox.js +147 -0
  79. package/dist/Modal/index.d.ts +12 -0
  80. package/dist/Modal/index.js +54 -0
  81. package/dist/NoSSR/index.d.ts +7 -0
  82. package/dist/NoSSR/index.js +15 -0
  83. package/dist/PhoneField/CountryFlag.d.ts +6 -0
  84. package/dist/PhoneField/CountryFlag.js +52 -0
  85. package/dist/PhoneField/flags/BYFlag.d.ts +3 -0
  86. package/dist/PhoneField/flags/BYFlag.js +44 -0
  87. package/dist/PhoneField/flags/JPFlag.d.ts +3 -0
  88. package/dist/PhoneField/flags/JPFlag.js +34 -0
  89. package/dist/PhoneField/flags/KZFlag.d.ts +3 -0
  90. package/dist/PhoneField/flags/KZFlag.js +45 -0
  91. package/dist/PhoneField/flags/RUFlag.d.ts +3 -0
  92. package/dist/PhoneField/flags/RUFlag.js +32 -0
  93. package/dist/PhoneField/flags/UAFlag.d.ts +3 -0
  94. package/dist/PhoneField/flags/UAFlag.js +31 -0
  95. package/dist/PhoneField/flags/USFlag.d.ts +3 -0
  96. package/dist/PhoneField/flags/USFlag.js +34 -0
  97. package/dist/PhoneField/flags/UnknownFlag.d.ts +3 -0
  98. package/dist/PhoneField/flags/UnknownFlag.js +34 -0
  99. package/dist/PhoneField/index.d.ts +49 -0
  100. package/dist/PhoneField/index.js +82 -0
  101. package/dist/PhoneField/templates.d.ts +3 -0
  102. package/dist/PhoneField/templates.js +18 -0
  103. package/dist/PhoneField/usePhoneUtils.d.ts +65 -0
  104. package/dist/PhoneField/usePhoneUtils.js +157 -0
  105. package/dist/SelectBox/IconChevronDown.d.ts +3 -0
  106. package/dist/SelectBox/IconChevronDown.js +9 -0
  107. package/dist/SelectBox/SelectButton.d.ts +10 -0
  108. package/dist/SelectBox/SelectButton.js +80 -0
  109. package/dist/SelectBox/index.d.ts +40 -0
  110. package/dist/SelectBox/index.js +188 -0
  111. package/dist/SelectBox/popper-options.d.ts +4 -0
  112. package/dist/SelectBox/popper-options.js +33 -0
  113. package/dist/TextField/TextFieldContainer.d.ts +7 -0
  114. package/dist/TextField/TextFieldContainer.js +52 -0
  115. package/dist/TextField/TextFieldErrorText.d.ts +8 -0
  116. package/dist/TextField/TextFieldErrorText.js +75 -0
  117. package/dist/TextField/TextFieldIconWrapper.d.ts +8 -0
  118. package/dist/TextField/TextFieldIconWrapper.js +73 -0
  119. package/dist/TextField/TextFieldInput.d.ts +7 -0
  120. package/dist/TextField/TextFieldInput.js +60 -0
  121. package/dist/TextField/TextFieldLabel.d.ts +7 -0
  122. package/dist/TextField/TextFieldLabel.js +50 -0
  123. package/dist/TextField/TextFieldLabelAsterisk.d.ts +7 -0
  124. package/dist/TextField/TextFieldLabelAsterisk.js +51 -0
  125. package/dist/TextField/TextFieldWrapper.d.ts +14 -0
  126. package/dist/TextField/TextFieldWrapper.js +76 -0
  127. package/dist/TextField/index.d.ts +14 -0
  128. package/dist/TextField/index.js +93 -0
  129. package/dist/ThemeProvider/createTheme.d.ts +36 -0
  130. package/dist/ThemeProvider/createTheme.js +34 -0
  131. package/dist/ThemeProvider/index.d.ts +8 -0
  132. package/dist/ThemeProvider/index.js +12 -0
  133. package/dist/Typography/Base.d.ts +6 -0
  134. package/dist/Typography/Base.js +11 -0
  135. package/dist/Typography/Blockquote.d.ts +6 -0
  136. package/dist/Typography/Blockquote.js +23 -0
  137. package/dist/Typography/Del.d.ts +6 -0
  138. package/dist/Typography/Del.js +10 -0
  139. package/dist/Typography/Em.d.ts +6 -0
  140. package/dist/Typography/Em.js +10 -0
  141. package/dist/Typography/H1.d.ts +6 -0
  142. package/dist/Typography/H1.js +11 -0
  143. package/dist/Typography/H2.d.ts +6 -0
  144. package/dist/Typography/H2.js +11 -0
  145. package/dist/Typography/H3.d.ts +6 -0
  146. package/dist/Typography/H3.js +11 -0
  147. package/dist/Typography/H4.d.ts +6 -0
  148. package/dist/Typography/H4.js +11 -0
  149. package/dist/Typography/H5.d.ts +6 -0
  150. package/dist/Typography/H5.js +11 -0
  151. package/dist/Typography/List.d.ts +14 -0
  152. package/dist/Typography/List.js +17 -0
  153. package/dist/Typography/Paragraph.d.ts +6 -0
  154. package/dist/Typography/Paragraph.js +11 -0
  155. package/dist/Typography/SectionDescription.d.ts +8 -0
  156. package/dist/Typography/SectionDescription.js +17 -0
  157. package/dist/Typography/SectionTitle.d.ts +8 -0
  158. package/dist/Typography/SectionTitle.js +31 -0
  159. package/dist/Typography/Span.d.ts +6 -0
  160. package/dist/Typography/Span.js +10 -0
  161. package/dist/Typography/Strong.d.ts +6 -0
  162. package/dist/Typography/Strong.js +10 -0
  163. package/dist/Typography/U.d.ts +6 -0
  164. package/dist/Typography/U.js +10 -0
  165. package/dist/color/Color.d.ts +44 -0
  166. package/dist/color/Color.js +346 -0
  167. package/dist/color/index.d.ts +3 -0
  168. package/dist/color/index.js +22 -0
  169. package/dist/index.d.ts +4 -0
  170. package/dist/index.js +23 -0
  171. package/package.json +113 -0
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.useCalendar = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const calendarReducer = (state, action) => {
9
+ switch (action.type) {
10
+ case 'partial':
11
+ return Object.assign(Object.assign({}, state), action.payload);
12
+ case 'date': {
13
+ return Object.assign(Object.assign({}, state), { date: action.payload });
14
+ }
15
+ default:
16
+ return state;
17
+ }
18
+ };
19
+ const calendarDefaults = {
20
+ date: new Date(),
21
+ minDate: new Date(new Date().getFullYear() - 100, 0, 1, 0, 0, 0),
22
+ maxDate: new Date(new Date().getFullYear() + 100, 0, 1, 0, 0, 0),
23
+ locale: 'ru-RU',
24
+ weekStartDay: 'monday',
25
+ displayLeadingZero: false,
26
+ };
27
+ const useCalendar = (props) => {
28
+ const [state, dispatch] = react_1.default.useReducer(calendarReducer, Object.assign(Object.assign({}, calendarDefaults), props));
29
+ const { date, minDate, maxDate, locale, weekStartDay, displayLeadingZero } = state;
30
+ const isSameDay = react_1.default.useCallback((a, b) => a.getFullYear() === b.getFullYear() &&
31
+ a.getMonth() === b.getMonth() &&
32
+ a.getDate() === b.getDate(), []);
33
+ const isToday = react_1.default.useCallback((dateValue) => isSameDay(dateValue, new Date()), [isSameDay]);
34
+ const isDisabled = react_1.default.useCallback((dateValue) => {
35
+ const min = minDate.getTime() || 0;
36
+ const max = maxDate.getTime() || Number.MAX_VALUE;
37
+ const current = dateValue.getTime();
38
+ return current > max || current < min;
39
+ }, [maxDate, minDate]);
40
+ const calculateWeekNumber = react_1.default.useCallback((dt) => {
41
+ const tdt = new Date(dt.valueOf());
42
+ const dayn = (dt.getDay() + 6) % 7;
43
+ tdt.setDate(tdt.getDate() - dayn + 3);
44
+ const firstThursday = tdt.valueOf();
45
+ tdt.setMonth(0, 1);
46
+ if (tdt.getDay() !== 4) {
47
+ tdt.setMonth(0, 1 + ((4 - tdt.getDay() + 7) % 7));
48
+ }
49
+ return 1 + Math.ceil((firstThursday - tdt.getTime()) / 604800000);
50
+ }, []);
51
+ const weekDaysMap = react_1.default.useMemo(() => ({
52
+ sunday: 0,
53
+ monday: 1,
54
+ tuesday: 2,
55
+ wednesday: 3,
56
+ thursday: 4,
57
+ friday: 5,
58
+ saturday: 6,
59
+ }), []);
60
+ const weeks = react_1.default.useMemo(() => {
61
+ const list = [];
62
+ const startOfDate = new Date(date.getFullYear(), date.getMonth(), 1, 0, 0, 0, 0);
63
+ const lastOfDate = new Date(date.getFullYear(), date.getMonth() + 1, 0, 0, 0, 0);
64
+ const startDayNum = weekDaysMap[weekStartDay];
65
+ const week = new Set();
66
+ const d = new Date(date);
67
+ for (let dateNum = 1; dateNum < lastOfDate.getDate() + 1; dateNum++) {
68
+ d.setDate(dateNum);
69
+ // if is start of the week then set a new week
70
+ if (d.getDay() === startDayNum) {
71
+ const days = [...week].map(day => ({
72
+ date: day,
73
+ isToday: isToday(day),
74
+ isDisabled: isDisabled(day),
75
+ }));
76
+ if (days.length) {
77
+ list.push({
78
+ weekNumber: calculateWeekNumber(days[0].date),
79
+ days,
80
+ });
81
+ }
82
+ week.clear();
83
+ }
84
+ week.add(new Date(d));
85
+ // if is last of iteration
86
+ if (dateNum === lastOfDate.getDate()) {
87
+ const days = [...week].map(day => ({
88
+ date: day,
89
+ isToday: isToday(day),
90
+ isDisabled: isDisabled(day),
91
+ }));
92
+ if (days.length) {
93
+ list.push({
94
+ weekNumber: calculateWeekNumber(days[0].date),
95
+ days,
96
+ });
97
+ }
98
+ week.clear();
99
+ }
100
+ }
101
+ // Fill the prev days
102
+ if (list[0].days.length < 7) {
103
+ const fillDays = 7 - list[0].days.length;
104
+ const days = list[0].days;
105
+ for (let fillIndex = 0; fillIndex < fillDays; fillIndex++) {
106
+ const day = new Date(startOfDate.getFullYear(), startOfDate.getMonth(), -fillIndex, 0, 0, 0, 0);
107
+ days.unshift({
108
+ date: day,
109
+ isDisabled: isDisabled(day),
110
+ isToday: isToday(day),
111
+ });
112
+ }
113
+ list[0] = {
114
+ days,
115
+ weekNumber: calculateWeekNumber(days[0].date),
116
+ };
117
+ }
118
+ // fill the next days
119
+ if (list[list.length - 1].days.length < 7) {
120
+ const fillDays = 7 - list[list.length - 1].days.length;
121
+ const days = list[list.length - 1].days;
122
+ for (let fillIndex = 0; fillIndex < fillDays; fillIndex++) {
123
+ const day = new Date(lastOfDate.getFullYear(), lastOfDate.getMonth() + 1, fillIndex + 1, 0, 0, 0, 0);
124
+ days.push({
125
+ date: day,
126
+ isDisabled: isDisabled(day),
127
+ isToday: isToday(day),
128
+ });
129
+ }
130
+ list[list.length - 1] = {
131
+ days,
132
+ weekNumber: calculateWeekNumber(days[0].date),
133
+ };
134
+ }
135
+ // if weeks length is 4 only
136
+ // then prepend week
137
+ if (list.length === 4) {
138
+ const fillDays = 7;
139
+ const days = [];
140
+ const firstWeek = list[0];
141
+ const firstDate = firstWeek.days[0].date;
142
+ for (let fillIndex = 0; fillIndex < fillDays; fillIndex++) {
143
+ const day = new Date(firstDate.getFullYear(), firstDate.getMonth(), firstDate.getDate() - fillIndex, 0, 0, 0, 0);
144
+ days.unshift({
145
+ date: day,
146
+ isDisabled: isDisabled(day),
147
+ isToday: isToday(day),
148
+ });
149
+ }
150
+ list.unshift({
151
+ days,
152
+ weekNumber: calculateWeekNumber(days[0].date),
153
+ });
154
+ }
155
+ // if weeks length is 5 only
156
+ // then append week
157
+ if (list.length === 5) {
158
+ const lastWeek = list[list.length - 1];
159
+ const lastDate = lastWeek.days[lastWeek.days.length - 1].date;
160
+ const days = [];
161
+ for (let fillIndex = 0; fillIndex < 7; fillIndex++) {
162
+ const day = new Date(lastDate.getFullYear(), lastDate.getMonth(), lastDate.getDate() + fillIndex + 1, 0, 0, 0, 0);
163
+ days.push({
164
+ date: day,
165
+ isDisabled: isDisabled(day),
166
+ isToday: isToday(day),
167
+ });
168
+ }
169
+ list.push({
170
+ days,
171
+ weekNumber: calculateWeekNumber(days[0].date),
172
+ });
173
+ }
174
+ return list;
175
+ }, [date, weekDaysMap, weekStartDay, isToday, isDisabled, calculateWeekNumber]);
176
+ const setDate = react_1.default.useCallback((value) => {
177
+ dispatch({
178
+ type: 'date',
179
+ payload: value,
180
+ });
181
+ }, []);
182
+ return {
183
+ isSameDay,
184
+ isToday,
185
+ setDate,
186
+ dispatch,
187
+ minDate,
188
+ maxDate,
189
+ weeks,
190
+ weekStartDay,
191
+ locale,
192
+ displayLeadingZero,
193
+ date,
194
+ };
195
+ };
196
+ exports.useCalendar = useCalendar;
197
+ exports.default = exports.useCalendar;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const DatePicker: React.FC;
3
+ export default DatePicker;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const DatePicker = () => react_1.default.createElement(react_1.default.Fragment, null, "Date picker");
8
+ exports.default = DatePicker;
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ export interface ErrorBoundaryComponentProps {
3
+ readonly children: React.ReactNode | readonly React.ReactNode[];
4
+ }
5
+ interface State {
6
+ readonly error: Error | null;
7
+ readonly errorInfo: React.ErrorInfo | null;
8
+ }
9
+ interface Props {
10
+ readonly children: React.ReactNode | React.ReactNode[];
11
+ readonly styles?: React.CSSProperties;
12
+ }
13
+ declare class ErrorBoundary extends React.Component<Props, State> {
14
+ constructor(props: Props);
15
+ static getDerivedStateFromError(error: Error): State;
16
+ componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void;
17
+ render(): React.JSX.Element;
18
+ }
19
+ export default ErrorBoundary;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const styled_1 = __importDefault(require("@emotion/styled"));
8
+ const Container = styled_1.default.div `
9
+ flex: 1;
10
+ width: 100%;
11
+ height: 100%;
12
+ display: flex;
13
+ box-sizing: border-box;
14
+ padding: theme.spacing(1);
15
+ border-radius: inherit;
16
+ border: 1px solid rgb(92, 0, 0);
17
+ background-color: rgb(41, 0, 0);
18
+ `;
19
+ const Inner = styled_1.default.div `
20
+ flex: 1;
21
+ width: 100%;
22
+ height: 100%;
23
+ overflow-y: auto;
24
+ `;
25
+ const Title = styled_1.default.h1 `
26
+ margin-top: 0;
27
+ `;
28
+ const ErrorBox = styled_1.default.div `
29
+ color: rgb(255, 128, 128);
30
+ padding: 1rem;
31
+ `;
32
+ const ErrorMessage = styled_1.default.pre `
33
+ max-height: 300;
34
+ overflow: auto;
35
+ `;
36
+ const CallStack = styled_1.default.pre `
37
+ opacity: 0.8;
38
+ max-height: 300;
39
+ overflow: auto;
40
+ white-space: break-spaces;
41
+ `;
42
+ class ErrorBoundary extends react_1.default.Component {
43
+ constructor(props) {
44
+ super(props);
45
+ this.state = {
46
+ error: null,
47
+ errorInfo: null,
48
+ };
49
+ }
50
+ static getDerivedStateFromError(error) {
51
+ return {
52
+ error,
53
+ errorInfo: null,
54
+ };
55
+ }
56
+ componentDidCatch(error, errorInfo) {
57
+ this.setState({
58
+ error,
59
+ errorInfo,
60
+ });
61
+ }
62
+ render() {
63
+ const { error } = this.state;
64
+ const { children, styles } = this.props;
65
+ if (error) {
66
+ return (react_1.default.createElement(Container, { style: styles },
67
+ react_1.default.createElement(Inner, null, process.env.NODE_ENV === 'development' ? (react_1.default.createElement(ErrorBox, null,
68
+ react_1.default.createElement(Title, null, "Something went wrong"),
69
+ react_1.default.createElement(ErrorMessage, null, error.message),
70
+ react_1.default.createElement("h2", null, "Callstack:"),
71
+ react_1.default.createElement(CallStack, null, error.stack))) : (react_1.default.createElement(ErrorBox, null,
72
+ react_1.default.createElement(Title, null, "It looks like our server has broken down"),
73
+ react_1.default.createElement("p", null, "We're already fixing it. We are waiting for you later"))))));
74
+ }
75
+ return react_1.default.createElement(react_1.default.Fragment, null, children);
76
+ }
77
+ }
78
+ exports.default = ErrorBoundary;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ interface ImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {
3
+ readonly src: string;
4
+ readonly thumb?: string | null;
5
+ }
6
+ declare const _default: React.ForwardRefExoticComponent<ImageProps & React.RefAttributes<HTMLImageElement>>;
7
+ export default _default;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ const react_1 = __importDefault(require("react"));
18
+ const styled_1 = __importDefault(require("@emotion/styled"));
19
+ const Img = styled_1.default.img `
20
+ object-fit: cover;
21
+ object-position: center center;
22
+ filter: ${({ theme }) => (theme.isDark ? 'brightness(0.86)' : 'none')};
23
+ `;
24
+ const Image = (props, ref) => {
25
+ const { src, thumb } = props, otherProps = __rest(props, ["src", "thumb"]);
26
+ const srcRef = react_1.default.useRef(null);
27
+ const [currentSrc, setSrc] = react_1.default.useState(typeof thumb === 'string' ? thumb : src);
28
+ const isMountedRef = react_1.default.useRef(true);
29
+ react_1.default.useEffect(() => {
30
+ isMountedRef.current = true;
31
+ if (typeof thumb === 'string' && srcRef.current !== thumb) {
32
+ srcRef.current = thumb;
33
+ const imageElement = new window.Image();
34
+ imageElement.onload = () => {
35
+ if (isMountedRef.current) {
36
+ setSrc(src);
37
+ }
38
+ };
39
+ imageElement.src = src;
40
+ }
41
+ }, [src, thumb]);
42
+ react_1.default.useEffect(() => () => void (isMountedRef.current = false), []);
43
+ return react_1.default.createElement(Img, Object.assign({ src: currentSrc }, otherProps, { ref: ref }));
44
+ };
45
+ exports.default = react_1.default.forwardRef(Image);
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import { Mask, FormatParsedPayload, ParseInput } from './useMasked';
3
+ import { TextFieldProps } from '../TextField';
4
+ export type GetMask = (input: string) => Mask;
5
+ export interface Payload {
6
+ readonly text: string;
7
+ readonly caret: number;
8
+ readonly isValid: boolean;
9
+ }
10
+ export interface MaskedFieldProps extends Omit<TextFieldProps, 'value' | 'onChange'> {
11
+ /**
12
+ * Field value
13
+ */
14
+ readonly value: string | null;
15
+ /**
16
+ * An array of RegExp or a function that returns an array of RegExp
17
+ */
18
+ readonly mask: Mask | GetMask;
19
+ /**
20
+ * Function will be called when field value was changed
21
+ */
22
+ readonly onChange: (payload: FormatParsedPayload) => void;
23
+ /**
24
+ * If you are not using a simple mask, you can provide a function to analyze the input value
25
+ */
26
+ readonly parseInput?: ParseInput;
27
+ /**
28
+ * You can transform the output value before using it
29
+ */
30
+ readonly transform?: (value: string) => string;
31
+ }
32
+ declare const _default: React.ForwardRefExoticComponent<MaskedFieldProps & React.RefAttributes<HTMLDivElement>>;
33
+ export default _default;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ const react_1 = __importDefault(require("react"));
18
+ const useMasked_1 = require("./useMasked");
19
+ const TextField_1 = __importDefault(require("../TextField"));
20
+ const MaskedField = (props, ref) => {
21
+ const { value: propValue, mask, parseInput, onChange, transform } = props, nativeProps = __rest(props, ["value", "mask", "parseInput", "onChange", "transform"]);
22
+ const textInputRef = react_1.default.useRef(null);
23
+ const decoratorsErrorDisplayed = react_1.default.useRef(false);
24
+ const masked = (0, useMasked_1.useMasked)();
25
+ const parseInputFn = parseInput || masked.parseInput;
26
+ const getMask = react_1.default.useCallback((input) => {
27
+ const currentMask = typeof mask === 'function' ? mask(input) : mask;
28
+ if (!decoratorsErrorDisplayed.current &&
29
+ currentMask.find(elem => typeof elem === 'string' &&
30
+ typeof parseInput === 'undefined' &&
31
+ elem.match(/[0-9a-zа-яё]/i))) {
32
+ decoratorsErrorDisplayed.current = true;
33
+ console.warn(`[MaskedField component] You use symbols as decorators, which should be replaced with RegExp or provide the «parseInput» function instead`);
34
+ }
35
+ return currentMask;
36
+ }, [mask, parseInput]);
37
+ const [inputValue, setInputValue] = react_1.default.useState(() => {
38
+ var _a;
39
+ const mask = getMask(propValue || '');
40
+ const parsed = parseInputFn(propValue || '', mask, ((_a = textInputRef.current) === null || _a === void 0 ? void 0 : _a.selectionStart) || 0);
41
+ const { text } = masked.formatParsedInput(parsed.text, mask, parsed.caret);
42
+ return text;
43
+ });
44
+ const handleOnChange = react_1.default.useCallback(event => {
45
+ var _a;
46
+ const mask = getMask(event.currentTarget.value);
47
+ const parsed = parseInputFn(event.currentTarget.value, mask, ((_a = textInputRef.current) === null || _a === void 0 ? void 0 : _a.selectionStart) || 0);
48
+ const { caret, isValid, text } = masked.formatParsedInput(parsed.text, mask, parsed.caret);
49
+ const transformedText = transform ? transform(text) : text;
50
+ setInputValue(transformedText);
51
+ onChange({
52
+ caret,
53
+ isValid,
54
+ text: transformedText,
55
+ });
56
+ setTimeout(() => {
57
+ var _a;
58
+ (_a = textInputRef.current) === null || _a === void 0 ? void 0 : _a.setSelectionRange(caret, caret);
59
+ }, 15);
60
+ }, [getMask, masked, transform, onChange, parseInputFn]);
61
+ return (react_1.default.createElement(TextField_1.default, Object.assign({ ref: ref }, nativeProps, { inputRef: textInputRef, type: "text", value: inputValue, onChange: handleOnChange })));
62
+ };
63
+ exports.default = react_1.default.forwardRef(MaskedField);
@@ -0,0 +1,11 @@
1
+ export declare const kpp: (string | RegExp)[];
2
+ export declare const snils: (string | RegExp)[];
3
+ /**
4
+ * 13 symbols
5
+ */
6
+ export declare const ogrn: (string | RegExp)[];
7
+ /**
8
+ * 15 symbols
9
+ */
10
+ export declare const ogrnip: (string | RegExp)[];
11
+ export declare const vin: (string | RegExp)[];
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.vin = exports.ogrnip = exports.ogrn = exports.snils = exports.kpp = void 0;
4
+ exports.kpp = [/\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/, /\d/];
5
+ exports.snils = [
6
+ /\d/,
7
+ /\d/,
8
+ /\d/,
9
+ '-',
10
+ /\d/,
11
+ /\d/,
12
+ /\d/,
13
+ '-',
14
+ /\d/,
15
+ /\d/,
16
+ /\d/,
17
+ '-',
18
+ /\d/,
19
+ /\d/,
20
+ ];
21
+ /**
22
+ * 13 symbols
23
+ */
24
+ exports.ogrn = [
25
+ /[1-9]/,
26
+ /\d/,
27
+ /\d/,
28
+ '-',
29
+ /\d/,
30
+ /\d/,
31
+ '-',
32
+ /\d/,
33
+ /\d/,
34
+ '-',
35
+ /\d/,
36
+ /\d/,
37
+ /\d/,
38
+ /\d/,
39
+ /\d/,
40
+ /\d/,
41
+ ];
42
+ /**
43
+ * 15 symbols
44
+ */
45
+ exports.ogrnip = [
46
+ /[1-9]/,
47
+ /\d/,
48
+ /\d/,
49
+ '-',
50
+ /\d/,
51
+ /\d/,
52
+ /\d/,
53
+ /\d/,
54
+ /\d/,
55
+ /\d/,
56
+ /\d/,
57
+ /\d/,
58
+ /\d/,
59
+ /\d/,
60
+ ];
61
+ exports.vin = [
62
+ /[A-HJ-NPR-Z0-9]/i,
63
+ /[A-HJ-NPR-Z0-9]/i,
64
+ /[A-HJ-NPR-Z0-9]/i,
65
+ '-',
66
+ /[A-HJ-NPR-Z0-9]/i,
67
+ /[A-HJ-NPR-Z0-9]/i,
68
+ /[A-HJ-NPR-Z0-9]/i,
69
+ /[A-HJ-NPR-Z0-9]/i,
70
+ /[A-HJ-NPR-Z0-9]/i,
71
+ /[A-HJ-NPR-Z0-9]/i,
72
+ /[A-HJ-NPR-Z0-9]/i,
73
+ /[A-HJ-NPR-Z0-9]/i,
74
+ '-',
75
+ /[A-HJ-NPR-Z0-9]/i,
76
+ /[A-HJ-NPR-Z0-9]/i,
77
+ /[0-9]/i,
78
+ /[0-9]/i,
79
+ /[0-9]/i,
80
+ /[0-9]/i,
81
+ ];
@@ -0,0 +1,18 @@
1
+ export type Mask = (RegExp | string)[];
2
+ export interface ParseInputPayload {
3
+ readonly text: string;
4
+ readonly caret: number;
5
+ }
6
+ export interface FormatParsedPayload {
7
+ readonly text: string;
8
+ readonly caret: number;
9
+ readonly isValid: boolean;
10
+ }
11
+ export type ParseInput = (value: string, mask: Mask, caret?: number) => ParseInputPayload;
12
+ export type FormatParsed = (parsedValue: string, mask: Mask, caret: number) => FormatParsedPayload;
13
+ export declare const useMasked: () => {
14
+ formatParsedInput: FormatParsed;
15
+ parseAndFormat: (inputValue: string, mask: Mask, caret?: number) => FormatParsedPayload;
16
+ parseInput: ParseInput;
17
+ };
18
+ export default useMasked;
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.useMasked = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const useMasked = () => {
9
+ const parseInput = react_1.default.useCallback((value, mask, caret) => {
10
+ const data = {
11
+ text: '',
12
+ caret: 0,
13
+ };
14
+ value
15
+ .replace(/\s/, '')
16
+ .split('')
17
+ .forEach((character, charIndex) => {
18
+ const isMatch = mask.some(pattern => {
19
+ if (typeof pattern === 'string') {
20
+ // return false;
21
+ return character === pattern && character;
22
+ }
23
+ if (pattern instanceof RegExp) {
24
+ return new RegExp(pattern).test(character);
25
+ }
26
+ return false;
27
+ });
28
+ if (isMatch) {
29
+ data.text = `${data.text}${character}`;
30
+ if (charIndex < (caret || 0)) {
31
+ data.caret += 1;
32
+ }
33
+ }
34
+ });
35
+ const result = Object.assign({}, data);
36
+ return result;
37
+ }, []);
38
+ const formatParsedInput = react_1.default.useCallback((parsedValue, mask, caret) => {
39
+ const data = {
40
+ text: '',
41
+ caret,
42
+ isValid: false,
43
+ charIndex: 0,
44
+ };
45
+ if (parsedValue === '') {
46
+ return data;
47
+ }
48
+ for (let patternIndex = 0; patternIndex < mask.length; patternIndex++) {
49
+ if (data.charIndex >= parsedValue.length) {
50
+ break;
51
+ }
52
+ const char = parsedValue[data.charIndex];
53
+ const pattern = mask[patternIndex];
54
+ // If char is correct (matched with Regexp pattern)
55
+ // then accept char into text
56
+ // and increment the charIndex and caret
57
+ if (pattern instanceof RegExp && new RegExp(pattern).test(char)) {
58
+ data.text = `${data.text}${char}`;
59
+ data.charIndex += 1;
60
+ data.caret += 1;
61
+ }
62
+ // If char is correct (equal with pattern string)
63
+ // then accept char into text
64
+ // and increment the charIndex and caret
65
+ if (typeof pattern === 'string' && pattern === char) {
66
+ data.text = `${data.text}${char}`;
67
+ data.charIndex += 1;
68
+ data.caret += 1;
69
+ }
70
+ // If pattern is a string and char is not correct
71
+ // (not equal with pattern string)
72
+ // then accept pattern string into text and increment caret
73
+ if (typeof pattern === 'string' && pattern !== char) {
74
+ data.text = `${data.text}${pattern}`;
75
+ data.caret += 1;
76
+ }
77
+ }
78
+ const result = {
79
+ text: data.text,
80
+ caret: data.caret,
81
+ isValid: data.text.length >= mask.length,
82
+ };
83
+ return result;
84
+ }, []);
85
+ const parseAndFormat = react_1.default.useCallback((inputValue, mask, caret) => {
86
+ const parsed = parseInput(inputValue, mask, caret);
87
+ return formatParsedInput(parsed.text, mask, parsed.caret);
88
+ }, [formatParsedInput, parseInput]);
89
+ return {
90
+ formatParsedInput,
91
+ parseAndFormat,
92
+ parseInput,
93
+ };
94
+ };
95
+ exports.useMasked = useMasked;
96
+ exports.default = exports.useMasked;
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ export interface MenuItemProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ readonly style: React.CSSProperties;
4
+ readonly index: number;
5
+ readonly setRowHeight: (index: number, height: number) => void;
6
+ readonly selected: boolean;
7
+ readonly hovered: boolean;
8
+ }
9
+ declare const _default: React.ForwardRefExoticComponent<MenuItemProps & React.RefAttributes<HTMLDivElement>>;
10
+ export default _default;