@itcase/ui 1.0.10 → 1.0.11

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.
@@ -0,0 +1,218 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var clsx = require('clsx');
5
+ var reactDateRange = require('react-date-range');
6
+ var luxon = require('luxon');
7
+ var index$1 = require('../index-738f53f6.js');
8
+ var index$2 = require('./Button.js');
9
+ var Modal = require('../Modal-375ef8c3.js');
10
+ require('./Loader.js');
11
+ var index = require('./Input.js');
12
+ require('../typeof-6dd323c6.js');
13
+ require('prop-types');
14
+ require('../constants/componentProps/borderType.js');
15
+ require('../constants/componentProps/fill.js');
16
+ require('../constants/componentProps/horizontalResizeMode.js');
17
+ require('../constants/componentProps/shape.js');
18
+ require('../constants/componentProps/size.js');
19
+ require('../constants/componentProps/type.js');
20
+ require('../constants/componentProps/width.js');
21
+ require('./Icon.js');
22
+ require('react-inlinesvg');
23
+ require('../constants/componentProps/iconSize.js');
24
+ require('../constants/componentProps/strokeColor.js');
25
+ require('./Link.js');
26
+ require('../useStyles-e4accb53.js');
27
+ require('lodash/camelCase');
28
+ require('lodash/maxBy');
29
+ require('lodash/upperFirst');
30
+ require('../hooks/styleAttributes.js');
31
+ require('../context/UIContext.js');
32
+ require('../hooks/useMediaQueries.js');
33
+ require('react-responsive');
34
+ require('../constants/componentProps/textColor.js');
35
+ require('../constants/componentProps/textGradient.js');
36
+ require('../constants/componentProps/textStyle.js');
37
+ require('../constants/componentProps/textWeight.js');
38
+ require('../constants/componentProps/underline.js');
39
+ require('../hooks/useDeviceTargetClass.js');
40
+ require('lodash/castArray');
41
+ require('./Text.js');
42
+ require('../constants/componentProps/textColorActive.js');
43
+ require('../constants/componentProps/textColorHover.js');
44
+ require('react-dom');
45
+ require('./Fader.js');
46
+ require('../constants/componentProps/fillGradient.js');
47
+
48
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
49
+
50
+ var React__default = /*#__PURE__*/_interopDefault(React);
51
+ var clsx__default = /*#__PURE__*/_interopDefault(clsx);
52
+
53
+ var DateRangePickerInput = /*#__PURE__*/React__default.default.forwardRef(function (props, ref) {
54
+ var onChange = props.onChange,
55
+ onFocus = props.onFocus,
56
+ toFormat = props.toFormat,
57
+ value = props.value,
58
+ _props$initialDate = props.initialDate,
59
+ initialDate = _props$initialDate === void 0 ? new Date() : _props$initialDate,
60
+ modalIsOpen = props.modalIsOpen,
61
+ modalIsFader = props.modalIsFader,
62
+ modalIsOutsideClose = props.modalIsOutsideClose,
63
+ modalShape = props.modalShape,
64
+ modalElevation = props.modalElevation,
65
+ modalPadding = props.modalPadding,
66
+ dateRangeProps = props.dateRangeProps,
67
+ primaryButtonShape = props.primaryButtonShape,
68
+ secondaryButtonShape = props.secondaryButtonShape,
69
+ primaryButtonFill = props.primaryButtonFill,
70
+ primaryButtonFillHover = props.primaryButtonFillHover,
71
+ primaryButtonSize = props.primaryButtonSize,
72
+ primaryButtonLabelTextColor = props.primaryButtonLabelTextColor,
73
+ primaryButtonLabelSize = props.primaryButtonLabelSize,
74
+ primaryButtonLabelTextWeight = props.primaryButtonLabelTextWeight,
75
+ primaryButtonLabel = props.primaryButtonLabel,
76
+ secondaryButtonFill = props.secondaryButtonFill,
77
+ secondaryButtonFillHover = props.secondaryButtonFillHover,
78
+ secondaryButtonSize = props.secondaryButtonSize,
79
+ secondaryButtonLabelTextColor = props.secondaryButtonLabelTextColor,
80
+ secondaryButtonLabelSize = props.secondaryButtonLabelSize,
81
+ secondaryButtonLabelTextWeight = props.secondaryButtonLabelTextWeight,
82
+ secondaryButtonLabel = props.secondaryButtonLabel,
83
+ placeholder = props.placeholder,
84
+ inputProps = props.inputProps;
85
+ var rangeRef = React.useRef(null);
86
+ var modalRef = React.useRef(null);
87
+ var onClickSave = React.useCallback(function () {
88
+ var _rangeRef$current;
89
+ var value = (_rangeRef$current = rangeRef.current) == null ? void 0 : _rangeRef$current.value;
90
+ if (onChange) {
91
+ onChange(value);
92
+ }
93
+ modalRef.current.closeModal();
94
+ }, [onChange]);
95
+ var onClickCancel = React.useCallback(function () {
96
+ modalRef.current.closeModal();
97
+ }, []);
98
+
99
+ // Create JS Date object for Calendar component
100
+ var _useState = React.useState(function () {
101
+ var startDate = initialDate.startDate,
102
+ endDate = initialDate.endDate;
103
+ if (typeof initialDate === 'string' && initialDate.includes('-')) {
104
+ var _initialDate$split = initialDate.split(' - ');
105
+ startDate = _initialDate$split[0];
106
+ endDate = _initialDate$split[1];
107
+ }
108
+ var state = {
109
+ startDate: null,
110
+ endDate: null,
111
+ key: 'date'
112
+ };
113
+ if (!startDate && !endDate) {
114
+ return state;
115
+ }
116
+ if (typeof startDate === 'string' && typeof endDate === 'string') {
117
+ state.startDate = luxon.DateTime.fromISO(startDate).toJSDate();
118
+ state.endDate = luxon.DateTime.fromISO(endDate).toJSDate();
119
+ }
120
+ if (startDate instanceof Date && endDate instanceof Date) {
121
+ state.startDate = startDate;
122
+ state.endDate = endDate;
123
+ }
124
+ return state;
125
+ }),
126
+ dateRanges = _useState[0],
127
+ setDateRanges = _useState[1];
128
+ React.useImperativeHandle(ref, function () {
129
+ var startDate = luxon.DateTime.fromJSDate(dateRanges.startDate).toISODate();
130
+ var endDate = luxon.DateTime.fromJSDate(dateRanges.endDate).toISODate();
131
+ return {
132
+ value: startDate + " - " + endDate
133
+ };
134
+ });
135
+ var onChangeDate = React.useCallback(function (range) {
136
+ setDateRanges(function (prevState) {
137
+ var _range$date, _range$date2;
138
+ return Object.assign({}, prevState, {
139
+ startDate: (_range$date = range.date) == null ? void 0 : _range$date.startDate,
140
+ endDate: (_range$date2 = range.date) == null ? void 0 : _range$date2.endDate
141
+ });
142
+ });
143
+ }, []);
144
+ var onFocusInput = React.useCallback(function () {
145
+ onFocus && onFocus();
146
+ modalRef.current.openModal();
147
+ }, [onFocus]);
148
+ return /*#__PURE__*/React__default.default.createElement(React__default.default.Fragment, null, /*#__PURE__*/React__default.default.createElement(index.Input, Object.assign({
149
+ readonly: "true",
150
+ type: "text",
151
+ onFocus: onFocusInput,
152
+ value: value
153
+ // onBlur={input.onBlur}
154
+ ,
155
+ onChange: function onChange() {
156
+ /* set empty function for disable react warning */
157
+ },
158
+ placeholder: placeholder
159
+ }, inputProps)), /*#__PURE__*/React__default.default.createElement(Modal.Modal, {
160
+ ref: modalRef,
161
+ isOpen: modalIsOpen,
162
+ isFader: modalIsFader,
163
+ isOutsideClose: modalIsOutsideClose,
164
+ shape: modalShape,
165
+ elevation: modalElevation,
166
+ padding: modalPadding
167
+ }, /*#__PURE__*/React__default.default.createElement(reactDateRange.DateRange, Object.assign({
168
+ locale: index$1.ru,
169
+ className: clsx__default.default('date-range-picker'),
170
+ ranges: [dateRanges],
171
+ toFormat: toFormat,
172
+ weekdayDisplayFormat: "EEEEEE",
173
+ dayDisplayFormat: "d",
174
+ showDateDisplay: false,
175
+ onChange: onChangeDate
176
+ }, dateRangeProps)), /*#__PURE__*/React__default.default.createElement(index$2.Button, {
177
+ width: "fill",
178
+ fill: primaryButtonFill,
179
+ fillHover: primaryButtonFillHover,
180
+ size: primaryButtonSize,
181
+ labelTextColor: primaryButtonLabelTextColor,
182
+ labelSize: primaryButtonLabelSize,
183
+ labelTextWeight: primaryButtonLabelTextWeight,
184
+ label: primaryButtonLabel,
185
+ shape: primaryButtonShape,
186
+ onClick: onClickSave
187
+ }), /*#__PURE__*/React__default.default.createElement(index$2.Button, {
188
+ width: "fill",
189
+ fill: secondaryButtonFill,
190
+ fillHover: secondaryButtonFillHover,
191
+ size: secondaryButtonSize,
192
+ labelTextColor: secondaryButtonLabelTextColor,
193
+ labelSize: secondaryButtonLabelSize,
194
+ shape: secondaryButtonShape,
195
+ labelTextWeight: secondaryButtonLabelTextWeight,
196
+ label: secondaryButtonLabel,
197
+ onClick: onClickCancel
198
+ })));
199
+ });
200
+ DateRangePickerInput.displayName = 'DateRangePickerInput';
201
+ DateRangePickerInput.defaultProps = {
202
+ primaryButtonFill: 'accentPrimary',
203
+ primaryButtonFillHover: 'accentPrimaryHover',
204
+ primaryButtonSize: 'xl',
205
+ primaryButtonShape: 'rounded',
206
+ primaryButtonLabelTextColor: 'accentTextPrimary',
207
+ primaryButtonLabelSize: 'l',
208
+ primaryButtonLabel: 'OK',
209
+ secondaryButtonFill: 'surfaceSecondary',
210
+ secondaryButtonFillHover: 'surfaceSecondaryHover',
211
+ secondaryButtonSize: 'xl',
212
+ secondaryButtonShape: 'rounded',
213
+ secondaryButtonLabelTextColor: 'surfaceTextPrimary',
214
+ secondaryButtonLabelSize: 'l',
215
+ secondaryButtonLabel: 'Отмена'
216
+ };
217
+
218
+ exports.DateRangePickerInput = DateRangePickerInput;
@@ -37,7 +37,8 @@ require('../constants/componentProps/textGradient.js');
37
37
  require('../constants/componentProps/type.js');
38
38
  require('../constants/componentProps/underline.js');
39
39
  require('react-select');
40
- require('../objectWithoutProperties-ea190611.js');
40
+ require('../defineProperty-72768a50.js');
41
+ require('../typeof-6dd323c6.js');
41
42
  require('react-dom');
42
43
 
43
44
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -33,6 +33,7 @@ function Input(props) {
33
33
  value = props.value,
34
34
  onBlur = props.onBlur,
35
35
  onChange = props.onChange,
36
+ onFocus = props.onFocus,
36
37
  onKeyDown = props.onKeyDown;
37
38
  var fillClass = useDeviceTargetClass.useDeviceTargetClass(props, {
38
39
  prefix: 'fill_',
@@ -87,6 +88,7 @@ function Input(props) {
87
88
  value: value,
88
89
  onBlur: onBlur,
89
90
  onChange: onChange,
91
+ onFocus: onFocus,
90
92
  onKeyDown: onKeyDown
91
93
  });
92
94
  }
@@ -14,14 +14,14 @@ require('../constants/componentProps/textStyle.js');
14
14
  require('../constants/componentProps/textWeight.js');
15
15
  require('../constants/componentProps/type.js');
16
16
  require('../constants/componentProps/underline.js');
17
- require('lodash/castArray');
18
17
  require('lodash/camelCase');
19
- require('../context/UIContext.js');
20
- require('../hooks/useMediaQueries.js');
21
- require('react-responsive');
22
18
  require('lodash/maxBy');
23
19
  require('lodash/upperFirst');
24
20
  require('../hooks/styleAttributes.js');
21
+ require('../context/UIContext.js');
22
+ require('../hooks/useMediaQueries.js');
23
+ require('react-responsive');
24
+ require('lodash/castArray');
25
25
 
26
26
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
27
27
 
@@ -1,20 +1,21 @@
1
1
  'use strict';
2
2
 
3
+ var Modal = require('../Modal-375ef8c3.js');
3
4
  var React = require('react');
4
- var PropTypes = require('prop-types');
5
- var require$$2 = require('react-dom');
6
- var clsx = require('clsx');
7
- var index = require('./Fader.js');
8
- var useStyles = require('../useStyles-e4accb53.js');
9
- var useDeviceTargetClass = require('../hooks/useDeviceTargetClass.js');
10
- var index$1 = require('./Loader.js');
5
+ var index = require('./Loader.js');
6
+ require('prop-types');
7
+ require('react-dom');
8
+ require('clsx');
9
+ require('./Fader.js');
11
10
  require('../constants/componentProps/fill.js');
12
11
  require('../constants/componentProps/fillGradient.js');
12
+ require('../hooks/useDeviceTargetClass.js');
13
13
  require('lodash/castArray');
14
14
  require('lodash/camelCase');
15
15
  require('../context/UIContext.js');
16
16
  require('../hooks/useMediaQueries.js');
17
17
  require('react-responsive');
18
+ require('../useStyles-e4accb53.js');
18
19
  require('lodash/maxBy');
19
20
  require('lodash/upperFirst');
20
21
  require('../hooks/styleAttributes.js');
@@ -29,233 +30,14 @@ require('../constants/componentProps/textWeight.js');
29
30
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
30
31
 
31
32
  var React__default = /*#__PURE__*/_interopDefault(React);
32
- var PropTypes__default = /*#__PURE__*/_interopDefault(PropTypes);
33
- var require$$2__default = /*#__PURE__*/_interopDefault(require$$2);
34
- var clsx__default = /*#__PURE__*/_interopDefault(clsx);
35
-
36
- var getOrCreateModalElement = function getOrCreateModalElement(modalQuerySelector, className) {
37
- if (className === void 0) {
38
- className = '';
39
- }
40
- // prettier-ignore
41
- var classList = className && typeof className === 'string' ? className.split(' ').filter(Boolean) : [];
42
- var modalElement = document.querySelector(modalQuerySelector);
43
- if (!modalElement) {
44
- // Add modal element into the DOM on mount.
45
- modalElement = document.createElement('div');
46
- modalElement.setAttribute('id', 'modal-global');
47
- modalElement.classList.add('modal');
48
- if (classList.length) {
49
- var _modalElement$classLi;
50
- (_modalElement$classLi = modalElement.classList).add.apply(_modalElement$classLi, classList);
51
- }
52
- document.body.prepend(modalElement);
53
- }
54
- return modalElement;
55
- };
56
-
57
- // Modal component that is an abstraction around the portal API.
58
- var Modal = /*#__PURE__*/React__default.default.forwardRef(function Modal(props, ref) {
59
- var children = props.children,
60
- className = props.className,
61
- closeButton = props.closeButton,
62
- contentClassName = props.contentClassName,
63
- id = props.id,
64
- isFader = props.isFader,
65
- faderFill = props.faderFill,
66
- faderFillGradient = props.faderFillGradient,
67
- faderOpacity = props.faderOpacity,
68
- initialIsOpen = props.isOpen,
69
- isScrollOnOpen = props.isScrollOnOpen,
70
- isSetFocusOnOpen = props.isSetFocusOnOpen,
71
- modalQuerySelector = props.modalQuerySelector,
72
- isOutsideClose = props.isOutsideClose,
73
- onCloseModal = props.onCloseModal,
74
- onOpenModal = props.onOpenModal;
75
-
76
- // Query DOM element
77
- var _useState = React.useState(null),
78
- modalElement = _useState[0],
79
- setModalElement = _useState[1];
80
- React.useLayoutEffect(function () {
81
- var element = getOrCreateModalElement(modalQuerySelector, className);
82
- setModalElement(element);
83
- if (element) {
84
- addModalProps(element);
85
- }
86
- }, []);
87
- var modalContentRef = React.useRef(null);
88
- var modalFaderRef = React.useRef(null);
89
- var _useState2 = React.useState(initialIsOpen),
90
- isOpen = _useState2[0],
91
- setIsOpen = _useState2[1];
92
- var addModalProps = React.useCallback(function (element) {
93
- // Change class need in "useEffect"
94
- if (isOpen) {
95
- // Show modal
96
- element.classList.add('modal_state_visible');
97
- // Scroll to opened modal
98
- if (isScrollOnOpen) {
99
- // modalContentRef.current.style.top = `${window.visualViewport.pageTop}px`
100
- element.scrollIntoView({
101
- block: 'center',
102
- behavior: 'smooth'
103
- });
104
- }
105
-
106
- // "setTimeout" in this implementation is needs for set focus on modal
107
- // after "onMouseDown" event on button
108
- if (isSetFocusOnOpen) {
109
- setTimeout(function () {
110
- return modalContentRef.current.focus();
111
- }, 0);
112
- }
113
- } else if (!element.children.length) {
114
- // Hide modal if has no children
115
- element.classList.remove('modal_state_visible');
116
- }
117
- }, [isOpen, isSetFocusOnOpen]);
118
- React.useEffect(function () {
119
- if (!modalElement) {
120
- return;
121
- }
122
- addModalProps(modalElement);
123
- }, [isOpen]); // eslint-disable-line
124
-
125
- // Show modal with children content
126
- var openModal = React.useCallback(function () {
127
- setIsOpen(true);
128
-
129
- // Callback
130
- if (typeof onOpenModal === 'function') {
131
- onOpenModal();
132
- }
133
-
134
- /* SHOW TARGET POPUP ABOVE OTHERS POPUPS IF TARGET ALREADY OPENED
135
- // If current modal is already opened
136
- // Move content to end of modal root container. For order in DOM.
137
- const modalContentElement = modalContentRef.current
138
- if (modalContentElement) {
139
- modalContentElement.parentNode.appendChild(modalContentElement)
140
- }
141
- // Also move fader to end of modal root container after container
142
- const modalFaderElement = modalFaderRef.current
143
- if (modalFaderElement) {
144
- modalFaderElement.parentNode.appendChild(modalFaderElement)
145
- }
146
- */
147
- }, [onOpenModal]);
148
-
149
- // Hide modal and unmount children content
150
- var closeModal = React.useCallback(function (event) {
151
- if (event === void 0) {
152
- event = {};
153
- }
154
- var hasRelatedTarget = event.relatedTarget && modalElement.contains(event.relatedTarget);
155
- if (hasRelatedTarget) {
156
- return event;
157
- }
158
- setIsOpen(false);
159
-
160
- // Callback
161
- if (typeof onCloseModal === 'function') {
162
- onCloseModal();
163
- }
164
- }, [modalElement, onCloseModal]);
165
-
166
- // Save ref things
167
- React.useImperativeHandle(ref, function () {
168
- return {
169
- isOpen: isOpen,
170
- openModal: openModal,
171
- closeModal: closeModal,
172
- modalElement: modalElement
173
- };
174
- });
175
- var contentFillClass = useDeviceTargetClass.useDeviceTargetClass(props, {
176
- prefix: 'fill_',
177
- propsKey: 'contentFill'
178
- });
179
- var shapeClass = useDeviceTargetClass.useDeviceTargetClass(props, {
180
- prefix: 'modal-shape_',
181
- propsKey: 'shape'
182
- });
183
- var borderColorClass = useDeviceTargetClass.useDeviceTargetClass(props, {
184
- prefix: 'border-color_',
185
- propsKey: 'borderColor'
186
- });
187
- var borderWidthClass = useDeviceTargetClass.useDeviceTargetClass(props, {
188
- prefix: 'border-width_',
189
- propsKey: 'borderWidth'
190
- });
191
- var borderTypeClass = useDeviceTargetClass.useDeviceTargetClass(props, {
192
- prefix: 'border-type_',
193
- propsKey: 'borderType'
194
- });
195
- var elevationClass = useDeviceTargetClass.useDeviceTargetClass(props, {
196
- prefix: 'elevation_',
197
- propsKey: 'elevation'
198
- });
199
- var _useStyles = useStyles.useStyles(props),
200
- modalStyles = _useStyles.styles;
201
-
202
- // Use a portal to render the children into the element
203
- return modalElement && /*#__PURE__*/require$$2__default.default.createPortal(
204
- // Any valid React child: JSX, strings, arrays, etc.
205
- isOpen ? /*#__PURE__*/React__default.default.createElement(React__default.default.Fragment, null, /*#__PURE__*/React__default.default.createElement("div", {
206
- className: clsx__default.default('modal-content', contentClassName, contentFillClass, shapeClass, borderColorClass, borderWidthClass, borderTypeClass, elevationClass),
207
- id: id,
208
- ref: modalContentRef,
209
- tabIndex: 0,
210
- onBlur: isOutsideClose ? undefined : closeModal,
211
- style: modalStyles
212
- }, closeButton && /*#__PURE__*/React__default.default.createElement("div", {
213
- className: "modal-content__close",
214
- onClick: closeModal
215
- }, closeButton), children), /*#__PURE__*/React__default.default.createElement(index.Fader, {
216
- ref: modalFaderRef,
217
- fill: faderFill,
218
- fillGradient: faderFillGradient,
219
- opacity: faderOpacity,
220
- className: "modal__fader",
221
- isFader: isFader
222
- })) : null,
223
- // A DOM element
224
- modalElement);
225
- });
226
- Modal.propTypes = {
227
- children: PropTypes__default.default.any,
228
- className: PropTypes__default.default.string,
229
- closeIcon: PropTypes__default.default.string,
230
- closeText: PropTypes__default.default.string,
231
- faderFill: PropTypes__default.default.string,
232
- faderFillGradient: PropTypes__default.default.string,
233
- faderOpacity: PropTypes__default.default.string,
234
- contentClassName: PropTypes__default.default.string,
235
- id: PropTypes__default.default.string,
236
- isFader: PropTypes__default.default.bool,
237
- isScrollOnOpen: PropTypes__default.default.bool,
238
- isSetFocusOnOpen: PropTypes__default.default.bool,
239
- modalQuerySelector: PropTypes__default.default.string,
240
- isOutsideClose: PropTypes__default.default.bool,
241
- onCloseModal: PropTypes__default.default.func,
242
- onOpenModal: PropTypes__default.default.func
243
- };
244
- Modal.defaultProps = {
245
- isFader: true,
246
- isOpen: false,
247
- isScrollOnOpen: true,
248
- isSetFocusOnOpen: true,
249
- modalQuerySelector: '#modal-global'
250
- };
251
33
 
252
34
  function ModalLoader(props) {
253
35
  return /*#__PURE__*/React__default.default.createElement("div", {
254
36
  className: "modal-loading"
255
37
  }, /*#__PURE__*/React__default.default.createElement("div", {
256
38
  className: "modal-loading__inner"
257
- }, /*#__PURE__*/React__default.default.createElement(index$1.Loader, null)));
39
+ }, /*#__PURE__*/React__default.default.createElement(index.Loader, null)));
258
40
  }
259
41
 
260
- exports.Modal = Modal;
42
+ exports.Modal = Modal.Modal;
261
43
  exports.ModalLoader = ModalLoader;