@i-novus/n2o-components 1.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.
Files changed (241) hide show
  1. package/index.js +0 -0
  2. package/lib/display/Alerts/Alert.d.ts +2 -0
  3. package/lib/display/Alerts/Alert.js +121 -0
  4. package/lib/display/Alerts/AlertSection.d.ts +18 -0
  5. package/lib/display/Alerts/AlertSection.js +64 -0
  6. package/lib/display/Alerts/AlertWrapper.d.ts +6 -0
  7. package/lib/display/Alerts/AlertWrapper.js +39 -0
  8. package/lib/display/Alerts/DefaultAlert.d.ts +6 -0
  9. package/lib/display/Alerts/DefaultAlert.js +125 -0
  10. package/lib/display/Alerts/LoaderAlert.d.ts +5 -0
  11. package/lib/display/Alerts/LoaderAlert.js +36 -0
  12. package/lib/display/Alerts/types.d.ts +49 -0
  13. package/lib/display/Alerts/types.js +24 -0
  14. package/lib/display/Alerts/utils.d.ts +15 -0
  15. package/lib/display/Alerts/utils.js +102 -0
  16. package/lib/display/Badge/Badge.d.ts +16 -0
  17. package/lib/display/Badge/Badge.js +77 -0
  18. package/lib/display/Badge/enums.d.ts +9 -0
  19. package/lib/display/Badge/enums.js +23 -0
  20. package/lib/display/Badge/utils.d.ts +9 -0
  21. package/lib/display/Badge/utils.js +49 -0
  22. package/lib/display/Block.d.ts +369 -0
  23. package/lib/display/Block.js +38 -0
  24. package/lib/display/CodeViewer/CodeViewer.d.ts +13 -0
  25. package/lib/display/CodeViewer/CodeViewer.js +96 -0
  26. package/lib/display/Drawer/Drawer.d.ts +25 -0
  27. package/lib/display/Drawer/Drawer.js +99 -0
  28. package/lib/display/DropdownCustomItem.d.ts +7 -0
  29. package/lib/display/DropdownCustomItem.js +23 -0
  30. package/lib/display/Filter/Buttons.d.ts +11 -0
  31. package/lib/display/Filter/Buttons.js +42 -0
  32. package/lib/display/Filter/Filter.d.ts +8 -0
  33. package/lib/display/Filter/Filter.js +38 -0
  34. package/lib/display/HelpPopover.d.ts +16 -0
  35. package/lib/display/HelpPopover.js +104 -0
  36. package/lib/display/Html.d.ts +8 -0
  37. package/lib/display/Html.js +29 -0
  38. package/lib/display/Icon/Icon.d.ts +11 -0
  39. package/lib/display/Icon/Icon.js +42 -0
  40. package/lib/display/Image/Image.d.ts +30 -0
  41. package/lib/display/Image/Image.js +93 -0
  42. package/lib/display/Image/ImageInfo.d.ts +7 -0
  43. package/lib/display/Image/ImageInfo.js +23 -0
  44. package/lib/display/InputIcon.d.ts +13 -0
  45. package/lib/display/InputIcon.js +33 -0
  46. package/lib/display/NavItemImage/NavItemImage.d.ts +9 -0
  47. package/lib/display/NavItemImage/NavItemImage.js +35 -0
  48. package/lib/display/OutputList.d.ts +12 -0
  49. package/lib/display/OutputList.js +46 -0
  50. package/lib/display/OutputListItem.d.ts +10 -0
  51. package/lib/display/OutputListItem.js +58 -0
  52. package/lib/display/OutputText.d.ts +15 -0
  53. package/lib/display/OutputText.js +170 -0
  54. package/lib/display/Pagination/Pagination.d.ts +2 -0
  55. package/lib/display/Pagination/Pagination.js +273 -0
  56. package/lib/display/Pagination/PaginationButton.d.ts +13 -0
  57. package/lib/display/Pagination/PaginationButton.js +53 -0
  58. package/lib/display/Pagination/types.d.ts +62 -0
  59. package/lib/display/Pagination/types.js +36 -0
  60. package/lib/display/PopoverConfirm/PopoverConfirm.d.ts +30 -0
  61. package/lib/display/PopoverConfirm/PopoverConfirm.js +87 -0
  62. package/lib/display/ProgressControl/ProgressControl.d.ts +17 -0
  63. package/lib/display/ProgressControl/ProgressControl.js +68 -0
  64. package/lib/display/Slider.d.ts +23 -0
  65. package/lib/display/Slider.js +107 -0
  66. package/lib/display/Status.d.ts +9 -0
  67. package/lib/display/Status.js +40 -0
  68. package/lib/display/StatusText/StatusText.d.ts +10 -0
  69. package/lib/display/StatusText/StatusText.js +35 -0
  70. package/lib/display/StatusText/types.d.ts +18 -0
  71. package/lib/display/StatusText/types.js +19 -0
  72. package/lib/display/StatusText/utils.d.ts +3 -0
  73. package/lib/display/StatusText/utils.js +29 -0
  74. package/lib/display/Text.d.ts +12 -0
  75. package/lib/display/Text.js +38 -0
  76. package/lib/display/Typography/Base.d.ts +32 -0
  77. package/lib/display/Typography/Base.js +259 -0
  78. package/lib/display/Typography/ContentEditable.d.ts +15 -0
  79. package/lib/display/Typography/ContentEditable.js +86 -0
  80. package/lib/display/Typography/Paragraph.d.ts +4 -0
  81. package/lib/display/Typography/Paragraph.js +23 -0
  82. package/lib/display/Typography/Text.d.ts +9 -0
  83. package/lib/display/Typography/Text.js +37 -0
  84. package/lib/display/Typography/Title.d.ts +7 -0
  85. package/lib/display/Typography/Title.js +28 -0
  86. package/lib/display/Typography/utils.d.ts +13 -0
  87. package/lib/display/Typography/utils.js +75 -0
  88. package/lib/helpers/HelpPopover.d.ts +9 -0
  89. package/lib/helpers/HelpPopover.js +46 -0
  90. package/lib/helpers/withRightPlaceholder.d.ts +9 -0
  91. package/lib/helpers/withRightPlaceholder.js +35 -0
  92. package/lib/inputs/Checkbox/Checkbox.d.ts +29 -0
  93. package/lib/inputs/Checkbox/Checkbox.js +117 -0
  94. package/lib/inputs/Checkbox/CheckboxControl.d.ts +7 -0
  95. package/lib/inputs/Checkbox/CheckboxControl.js +33 -0
  96. package/lib/inputs/CheckboxGroup/CheckboxGroup.d.ts +11 -0
  97. package/lib/inputs/CheckboxGroup/CheckboxGroup.js +84 -0
  98. package/lib/inputs/CodeEditor/CodeEditor.d.ts +21 -0
  99. package/lib/inputs/CodeEditor/CodeEditor.js +85 -0
  100. package/lib/inputs/DatePicker/Calendar.d.ts +65 -0
  101. package/lib/inputs/DatePicker/Calendar.js +556 -0
  102. package/lib/inputs/DatePicker/CalendarHeader.d.ts +26 -0
  103. package/lib/inputs/DatePicker/CalendarHeader.js +213 -0
  104. package/lib/inputs/DatePicker/Clock.d.ts +10 -0
  105. package/lib/inputs/DatePicker/Clock.js +45 -0
  106. package/lib/inputs/DatePicker/DateInput.d.ts +44 -0
  107. package/lib/inputs/DatePicker/DateInput.js +262 -0
  108. package/lib/inputs/DatePicker/DateInputGroup.d.ts +20 -0
  109. package/lib/inputs/DatePicker/DateInputGroup.js +77 -0
  110. package/lib/inputs/DatePicker/DateInterval.d.ts +24 -0
  111. package/lib/inputs/DatePicker/DateInterval.js +92 -0
  112. package/lib/inputs/DatePicker/DatePicker.d.ts +22 -0
  113. package/lib/inputs/DatePicker/DatePicker.js +36 -0
  114. package/lib/inputs/DatePicker/DateTimeControl.d.ts +98 -0
  115. package/lib/inputs/DatePicker/DateTimeControl.js +452 -0
  116. package/lib/inputs/DatePicker/Day.d.ts +14 -0
  117. package/lib/inputs/DatePicker/Day.js +50 -0
  118. package/lib/inputs/DatePicker/PopUp.d.ts +19 -0
  119. package/lib/inputs/DatePicker/PopUp.js +71 -0
  120. package/lib/inputs/DatePicker/types.d.ts +31 -0
  121. package/lib/inputs/DatePicker/types.js +25 -0
  122. package/lib/inputs/DatePicker/utils.d.ts +39 -0
  123. package/lib/inputs/DatePicker/utils.js +304 -0
  124. package/lib/inputs/Input.d.ts +51 -0
  125. package/lib/inputs/Input.js +200 -0
  126. package/lib/inputs/InputMask/InputMask.d.ts +23 -0
  127. package/lib/inputs/InputMask/InputMask.js +310 -0
  128. package/lib/inputs/InputMoney/InputMoney.d.ts +101 -0
  129. package/lib/inputs/InputMoney/InputMoney.js +258 -0
  130. package/lib/inputs/InputNumber/InputNumber.d.ts +29 -0
  131. package/lib/inputs/InputNumber/InputNumber.js +316 -0
  132. package/lib/inputs/InputNumber/index.d.ts +1 -0
  133. package/lib/inputs/InputNumber/index.js +14 -0
  134. package/lib/inputs/InputNumber/types.d.ts +18 -0
  135. package/lib/inputs/InputNumber/types.js +14 -0
  136. package/lib/inputs/InputNumber/utils.d.ts +6 -0
  137. package/lib/inputs/InputNumber/utils.js +86 -0
  138. package/lib/inputs/InputPassword/InputPassword.d.ts +10 -0
  139. package/lib/inputs/InputPassword/InputPassword.js +81 -0
  140. package/lib/inputs/InputSelect/InputAddon.d.ts +17 -0
  141. package/lib/inputs/InputSelect/InputAddon.js +31 -0
  142. package/lib/inputs/InputSelect/InputContent.d.ts +63 -0
  143. package/lib/inputs/InputSelect/InputContent.js +188 -0
  144. package/lib/inputs/InputSelect/InputSelect.d.ts +296 -0
  145. package/lib/inputs/InputSelect/InputSelect.js +795 -0
  146. package/lib/inputs/InputSelect/InputSelectGroup.d.ts +43 -0
  147. package/lib/inputs/InputSelect/InputSelectGroup.js +113 -0
  148. package/lib/inputs/InputSelect/PopupItems.d.ts +55 -0
  149. package/lib/inputs/InputSelect/PopupItems.js +357 -0
  150. package/lib/inputs/InputSelect/PopupList.d.ts +82 -0
  151. package/lib/inputs/InputSelect/PopupList.js +138 -0
  152. package/lib/inputs/InputSelect/SelectedItems.d.ts +17 -0
  153. package/lib/inputs/InputSelect/SelectedItems.js +125 -0
  154. package/lib/inputs/InputSelect/constants.d.ts +4 -0
  155. package/lib/inputs/InputSelect/constants.js +15 -0
  156. package/lib/inputs/InputSelect/types.d.ts +16 -0
  157. package/lib/inputs/InputSelect/types.js +16 -0
  158. package/lib/inputs/InputSelect/utils.d.ts +9 -0
  159. package/lib/inputs/InputSelect/utils.js +142 -0
  160. package/lib/inputs/InputSelectTree/InputSelectTree.d.ts +114 -0
  161. package/lib/inputs/InputSelectTree/InputSelectTree.js +466 -0
  162. package/lib/inputs/InputSelectTree/TreeSelectNode.d.ts +36 -0
  163. package/lib/inputs/InputSelectTree/TreeSelectNode.js +63 -0
  164. package/lib/inputs/InputSelectTree/allProps.d.ts +123 -0
  165. package/lib/inputs/InputSelectTree/allProps.js +48 -0
  166. package/lib/inputs/InputSelectTree/until.d.ts +4 -0
  167. package/lib/inputs/InputSelectTree/until.js +83 -0
  168. package/lib/inputs/InputText.d.ts +41 -0
  169. package/lib/inputs/InputText.js +170 -0
  170. package/lib/inputs/NumberPicker/NumberPicker.d.ts +15 -0
  171. package/lib/inputs/NumberPicker/NumberPicker.js +129 -0
  172. package/lib/inputs/NumberPicker/NumberPickerButton.d.ts +8 -0
  173. package/lib/inputs/NumberPicker/NumberPickerButton.js +64 -0
  174. package/lib/inputs/NumberPicker/index.d.ts +1 -0
  175. package/lib/inputs/NumberPicker/index.js +14 -0
  176. package/lib/inputs/NumberPicker/utils.d.ts +2 -0
  177. package/lib/inputs/NumberPicker/utils.js +31 -0
  178. package/lib/inputs/RadioGroup/default/Group.d.ts +15 -0
  179. package/lib/inputs/RadioGroup/default/Group.js +63 -0
  180. package/lib/inputs/RadioGroup/default/Input.d.ts +17 -0
  181. package/lib/inputs/RadioGroup/default/Input.js +77 -0
  182. package/lib/inputs/RadioGroup/tabs/Group.d.ts +3 -0
  183. package/lib/inputs/RadioGroup/tabs/Group.js +24 -0
  184. package/lib/inputs/RadioGroup/tabs/Input.d.ts +3 -0
  185. package/lib/inputs/RadioGroup/tabs/Input.js +21 -0
  186. package/lib/inputs/Rating/Rating.d.ts +30 -0
  187. package/lib/inputs/Rating/Rating.js +212 -0
  188. package/lib/inputs/Select/Popup.d.ts +31 -0
  189. package/lib/inputs/Select/Popup.js +131 -0
  190. package/lib/inputs/Select/Select.d.ts +225 -0
  191. package/lib/inputs/Select/Select.js +705 -0
  192. package/lib/inputs/Select/SelectInput.d.ts +19 -0
  193. package/lib/inputs/Select/SelectInput.js +85 -0
  194. package/lib/inputs/Select/utils.d.ts +1 -0
  195. package/lib/inputs/Select/utils.js +28 -0
  196. package/lib/inputs/Switch/Switch.d.ts +11 -0
  197. package/lib/inputs/Switch/Switch.js +41 -0
  198. package/lib/inputs/TextArea.d.ts +12 -0
  199. package/lib/inputs/TextArea.js +54 -0
  200. package/lib/inputs/TextEditor/TextEditor.d.ts +11 -0
  201. package/lib/inputs/TextEditor/TextEditor.js +89 -0
  202. package/lib/inputs/TimePicker/TimePicker.d.ts +50 -0
  203. package/lib/inputs/TimePicker/TimePicker.js +398 -0
  204. package/lib/inputs/utils.d.ts +5 -0
  205. package/lib/inputs/utils.js +39 -0
  206. package/lib/layouts/ScrollContainer.d.ts +218 -0
  207. package/lib/layouts/ScrollContainer.js +128 -0
  208. package/lib/layouts/Spinner/CoverSpinner.d.ts +29 -0
  209. package/lib/layouts/Spinner/CoverSpinner.js +153 -0
  210. package/lib/layouts/Spinner/InlineSpinner.d.ts +5 -0
  211. package/lib/layouts/Spinner/InlineSpinner.js +27 -0
  212. package/lib/layouts/Spinner/Spinner.d.ts +31 -0
  213. package/lib/layouts/Spinner/Spinner.js +178 -0
  214. package/lib/styles/components/Calendar.scss +125 -0
  215. package/lib/styles/components/CalendarHeader.scss +75 -0
  216. package/lib/styles/components/DateInputGroup.scss +39 -0
  217. package/lib/styles/components/DatePicker.scss +18 -0
  218. package/lib/styles/components/Day.scss +29 -0
  219. package/lib/styles/components/OutputList.scss +14 -0
  220. package/lib/styles/components/OutputText.scss +50 -0
  221. package/lib/styles/controls/CodeEditor.scss +4 -0
  222. package/lib/styles/controls/InputNumber.scss +36 -0
  223. package/lib/styles/controls/InputPassword.scss +17 -0
  224. package/lib/styles/controls/InputText.scss +59 -0
  225. package/lib/styles/controls/NumberPicker.scss +36 -0
  226. package/lib/styles/controls/ProgressControl.scss +3 -0
  227. package/lib/styles/controls/Slider.scss +32 -0
  228. package/lib/styles/controls/Switch.scss +105 -0
  229. package/lib/styles/controls/TextEditor.scss +23 -0
  230. package/lib/styles/controls/TimePicker.scss +32 -0
  231. package/lib/styles/n2o/variables.scss +328 -0
  232. package/lib/styles/theme/variables.scss +81 -0
  233. package/lib/styles/variables.scss +10 -0
  234. package/lib/types.d.ts +25 -0
  235. package/lib/types.js +6 -0
  236. package/lib/utils/id.d.ts +3 -0
  237. package/lib/utils/id.js +46 -0
  238. package/lib/utils/isEmptyModel.d.ts +1 -0
  239. package/lib/utils/isEmptyModel.js +21 -0
  240. package/lib/utils/parseFormatter.js +153 -0
  241. package/package.json +196 -0
@@ -0,0 +1,556 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.Calendar = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
+
14
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
+
16
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
+
18
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
+
20
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
+
22
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
+
24
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
+
26
+ var _react = _interopRequireDefault(require("react"));
27
+
28
+ var _isNull = _interopRequireDefault(require("lodash/isNull"));
29
+
30
+ var _moment = _interopRequireDefault(require("moment/moment"));
31
+
32
+ var _classnames = _interopRequireDefault(require("classnames"));
33
+
34
+ var _Day = require("./Day");
35
+
36
+ var _CalendarHeader = require("./CalendarHeader");
37
+
38
+ var _utils = require("./utils");
39
+
40
+ var _DateTimeControl = require("./DateTimeControl");
41
+
42
+ var _types = require("./types");
43
+
44
+ require("../../styles/components/Calendar.scss");
45
+
46
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
47
+
48
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
49
+
50
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
51
+
52
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
53
+
54
+ var Calendar = /*#__PURE__*/function (_React$Component) {
55
+ (0, _inherits2["default"])(Calendar, _React$Component);
56
+
57
+ var _super = _createSuper(Calendar);
58
+
59
+ function Calendar(props) {
60
+ var _this;
61
+
62
+ (0, _classCallCheck2["default"])(this, Calendar);
63
+ _this = _super.call(this, props);
64
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "hourRef", null);
65
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "minuteRef", null);
66
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "secondRef", null);
67
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeCalendarType", function (type) {
68
+ _this.setState({
69
+ calendarType: type
70
+ });
71
+ });
72
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "setHourRef", function (el) {
73
+ _this.hourRef = el;
74
+ });
75
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "setMinuteRef", function (el) {
76
+ _this.minuteRef = el;
77
+ });
78
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "setSecondRef", function (el) {
79
+ _this.secondRef = el;
80
+ });
81
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "prevMonth", function () {
82
+ var displayesMonth = _this.state.displayesMonth;
83
+
84
+ _this.setState({
85
+ displayesMonth: displayesMonth.subtract(1, 'months')
86
+ });
87
+ });
88
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "nextMonth", function () {
89
+ var displayesMonth = _this.state.displayesMonth;
90
+
91
+ _this.setState({
92
+ displayesMonth: displayesMonth.add(1, 'months')
93
+ });
94
+ });
95
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "prevYear", function () {
96
+ var displayesMonth = _this.state.displayesMonth;
97
+
98
+ _this.setState({
99
+ displayesMonth: displayesMonth.subtract(1, 'years')
100
+ });
101
+ });
102
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "nextYear", function () {
103
+ var displayesMonth = _this.state.displayesMonth;
104
+
105
+ _this.setState({
106
+ displayesMonth: displayesMonth.add(1, 'years')
107
+ });
108
+ });
109
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "nextDecade", function () {
110
+ var displayesMonth = _this.state.displayesMonth;
111
+
112
+ _this.setState({
113
+ displayesMonth: displayesMonth.add(10, 'years')
114
+ });
115
+ });
116
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "prevDecade", function () {
117
+ var displayesMonth = _this.state.displayesMonth;
118
+
119
+ _this.setState({
120
+ displayesMonth: displayesMonth.subtract(10, 'years')
121
+ });
122
+ });
123
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onItemClick", function (itemType, item, i) {
124
+ if (itemType === 'month-item') {
125
+ _this.setDate('month', i);
126
+ } else {
127
+ _this.setDate('year', item);
128
+ }
129
+
130
+ _this.changeCalendarType(_types.CalendarType.BY_DAYS);
131
+ });
132
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "setTimeUnit", function (value, unit) {
133
+ var tempTimeObj = _this.state.tempTimeObj;
134
+
135
+ _this.setState({
136
+ tempTimeObj: _objectSpread(_objectSpread({}, tempTimeObj), {}, (0, _defineProperty2["default"])({}, unit, value))
137
+ });
138
+ });
139
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "setTime", function () {
140
+ var _this$props = _this.props,
141
+ value = _this$props.value,
142
+ inputName = _this$props.inputName,
143
+ markTimeAsSet = _this$props.markTimeAsSet,
144
+ select = _this$props.select;
145
+ var tempTimeObj = _this.state.tempTimeObj;
146
+
147
+ var _ref = tempTimeObj || {},
148
+ hours = _ref.hours,
149
+ minutes = _ref.minutes,
150
+ seconds = _ref.seconds;
151
+
152
+ var copyValue = value || (0, _moment["default"])();
153
+
154
+ _this.changeCalendarType(_types.CalendarType.BY_DAYS);
155
+
156
+ markTimeAsSet(inputName);
157
+ select((0, _utils.addTime)(copyValue.clone().startOf('day'), hours, minutes, seconds), inputName, false);
158
+ });
159
+ _this.state = {
160
+ displayesMonth: props.value ? props.value.clone().startOf('month') : (0, _moment["default"])().startOf('month'),
161
+ calendarType: _types.CalendarType.BY_DAYS,
162
+ tempTimeObj: props.value ? (0, _utils.objFromTime)(props.value) : props.time
163
+ };
164
+ return _this;
165
+ }
166
+
167
+ (0, _createClass2["default"])(Calendar, [{
168
+ key: "componentWillReceiveProps",
169
+ value: // eslint-disable-next-line react/no-deprecated
170
+ function componentWillReceiveProps(props) {
171
+ if (props.value) {
172
+ this.setState({
173
+ displayesMonth: props.value ? props.value.clone().startOf('month') : (0, _moment["default"])().startOf('month'),
174
+ tempTimeObj: props.value ? (0, _utils.objFromTime)(props.value) : props.time
175
+ });
176
+ }
177
+ }
178
+ }, {
179
+ key: "renderHeader",
180
+ value: function renderHeader() {
181
+ var _this$state = this.state,
182
+ displayesMonth = _this$state.displayesMonth,
183
+ calendarType = _this$state.calendarType;
184
+ var _this$props2 = this.props,
185
+ _this$props2$locale = _this$props2.locale,
186
+ locale = _this$props2$locale === void 0 ? 'ru' : _this$props2$locale,
187
+ t = _this$props2.t;
188
+ var nextMonth = this.nextMonth,
189
+ nextYear = this.nextYear,
190
+ prevMonth = this.prevMonth,
191
+ prevYear = this.prevYear,
192
+ nextDecade = this.nextDecade,
193
+ prevDecade = this.prevDecade,
194
+ changeCalendarType = this.changeCalendarType;
195
+ return /*#__PURE__*/_react["default"].createElement(_CalendarHeader.CalendarHeader, {
196
+ nextMonth: nextMonth,
197
+ nextYear: nextYear,
198
+ prevMonth: prevMonth,
199
+ prevYear: prevYear,
200
+ nextDecade: nextDecade,
201
+ prevDecade: prevDecade,
202
+ displayesMonth: displayesMonth,
203
+ locale: locale,
204
+ calendarType: calendarType,
205
+ changeCalendarType: changeCalendarType,
206
+ t: t
207
+ });
208
+ }
209
+ }, {
210
+ key: "setDate",
211
+ value: function setDate(unit, value) {
212
+ var displayesMonth = this.state.displayesMonth;
213
+ this.setState({
214
+ displayesMonth: displayesMonth.set(unit, Number(value))
215
+ });
216
+ }
217
+ }, {
218
+ key: "renderNameOfDays",
219
+ value: function renderNameOfDays() {
220
+ var _this$props$locale = this.props.locale,
221
+ locale = _this$props$locale === void 0 ? 'ru' : _this$props$locale;
222
+ var nameOfDays = locale === 'ru' ? ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'] : ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
223
+ return /*#__PURE__*/_react["default"].createElement("tr", null, nameOfDays.map(function (day, i) {
224
+ return (
225
+ /*#__PURE__*/
226
+ // eslint-disable-next-line react/no-array-index-key
227
+ _react["default"].createElement("td", {
228
+ key: i
229
+ }, day)
230
+ );
231
+ }));
232
+ }
233
+ }, {
234
+ key: "renderWeeks",
235
+ value: function renderWeeks() {
236
+ var _this2 = this;
237
+
238
+ var _this$state2 = this.state,
239
+ displayesMonth = _this$state2.displayesMonth,
240
+ tempTimeObj = _this$state2.tempTimeObj;
241
+
242
+ var _ref2 = tempTimeObj || {},
243
+ hours = _ref2.hours,
244
+ minutes = _ref2.minutes,
245
+ seconds = _ref2.seconds;
246
+
247
+ var firstDay = (0, _utils.addTime)(displayesMonth.clone().startOf('isoWeek'), hours, minutes, seconds);
248
+ return (0, _utils.weeks)(firstDay).map(function (week, i) {
249
+ return _this2.renderWeek(week, i);
250
+ });
251
+ }
252
+ }, {
253
+ key: "renderWeek",
254
+ value: function renderWeek(week, i) {
255
+ var _this3 = this;
256
+
257
+ return /*#__PURE__*/_react["default"].createElement("tr", {
258
+ key: i
259
+ }, week.map(function (day, i) {
260
+ return _this3.renderDay(day, i);
261
+ }));
262
+ } // eslint-disable-next-line complexity
263
+
264
+ }, {
265
+ key: "renderDay",
266
+ value: function renderDay(day, i) {
267
+ var _this$props3 = this.props,
268
+ min = _this$props3.min,
269
+ max = _this$props3.max,
270
+ value = _this$props3.value,
271
+ select = _this$props3.select,
272
+ inputName = _this$props3.inputName,
273
+ type = _this$props3.type,
274
+ index = _this$props3.index,
275
+ values = _this$props3.values,
276
+ dateFormat = _this$props3.dateFormat;
277
+ var disabled = false;
278
+
279
+ if (min && max) {
280
+ disabled = day.isBefore(min) || day.isAfter(max);
281
+ } else if (min) {
282
+ disabled = day.isBefore(min);
283
+ } else if (max) {
284
+ disabled = day.isAfter(max);
285
+ }
286
+
287
+ if (type === _DateTimeControl.ControlType.DATE_INTERVAL) {
288
+ var begin = values.begin;
289
+
290
+ var disableDaysBefore = function disableDaysBefore(range) {
291
+ return day.isBefore(range);
292
+ };
293
+
294
+ var disableDaysAfter = function disableDaysAfter(range) {
295
+ return day.isAfter(range);
296
+ };
297
+
298
+ var disabledDaysBeyondTheScopeMinMax = disableDaysBefore(min) || disableDaysAfter(max);
299
+ var disabledDaysBeyondTheScopeBeginMax = disableDaysBefore(begin) || disableDaysAfter(max); // eslint-disable-next-line no-unused-vars,no-return-assign, @typescript-eslint/no-unused-vars
300
+
301
+ var rangeMinMax = function rangeMinMax(disabledDays) {
302
+ return disabledDays = disabledDaysBeyondTheScopeMinMax;
303
+ }; // если не выбрана дата(begin) || min or max
304
+
305
+
306
+ var hasMinOrMaxAndNullBegin = (0, _isNull["default"])(begin) && (min || max) || (0, _isNull["default"])(begin) && min && max; // если hasMinOrMaxAndNullBegin, устанавливаем default range (min or max)
307
+
308
+ if (hasMinOrMaxAndNullBegin) {
309
+ rangeMinMax(disabled);
310
+ } else if (min && max) {
311
+ disabled = index === 0 ? disabledDaysBeyondTheScopeMinMax : disabledDaysBeyondTheScopeBeginMax;
312
+ } else if (min) {
313
+ disabled = index === 0 ? disableDaysBefore(min) : index === 1 && disableDaysBefore(begin);
314
+ } else if (max) {
315
+ disabled = index === 0 ? disableDaysAfter(max) : index === 1 && disableDaysAfter(begin);
316
+ } else {
317
+ // не указан range (min, max)
318
+ disabled = index === 1 && disableDaysBefore(begin);
319
+ }
320
+ }
321
+
322
+ var displayesMonth = this.state.displayesMonth;
323
+ var otherMonth = (0, _utils.isDateFromNextMonth)(day, displayesMonth) || (0, _utils.isDateFromPrevMonth)(day, displayesMonth);
324
+ var selected = day.isSame(value);
325
+ var current = day.format('DD.MM.YYYY') === (0, _moment["default"])().format('DD.MM.YYYY');
326
+ var props = {
327
+ day: day,
328
+ otherMonth: otherMonth,
329
+ selected: selected,
330
+ disabled: disabled,
331
+ select: select,
332
+ inputName: inputName,
333
+ current: current,
334
+ dateFormat: dateFormat
335
+ };
336
+ return /*#__PURE__*/_react["default"].createElement(_Day.Day, (0, _extends2["default"])({
337
+ key: i
338
+ }, props));
339
+ }
340
+ }, {
341
+ key: "renderTime",
342
+ value: function renderTime() {
343
+ var _this$props4 = this.props,
344
+ value = _this$props4.value,
345
+ hasDefaultTime = _this$props4.hasDefaultTime,
346
+ timeFormat = _this$props4.timeFormat,
347
+ t = _this$props4.t;
348
+
349
+ if (hasDefaultTime) {
350
+ if (value) {
351
+ return value.format(timeFormat);
352
+ }
353
+
354
+ return '00:00:00';
355
+ }
356
+
357
+ if (t) {
358
+ return t('chooseTime');
359
+ }
360
+
361
+ return null;
362
+ }
363
+ }, {
364
+ key: "renderByDays",
365
+ value: function renderByDays() {
366
+ var _this4 = this;
367
+
368
+ var timeFormat = this.props.timeFormat;
369
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("table", {
370
+ className: "n2o-calendar-table"
371
+ }, /*#__PURE__*/_react["default"].createElement("thead", null, this.renderNameOfDays()), /*#__PURE__*/_react["default"].createElement("tbody", null, this.renderWeeks())), timeFormat && /*#__PURE__*/_react["default"].createElement("a", {
372
+ className: "n2o-calendar-time-container",
373
+ href: "/test",
374
+ onClick: function onClick(e) {
375
+ e.preventDefault();
376
+
377
+ _this4.changeCalendarType(_types.CalendarType.TIME_PICKER);
378
+ }
379
+ }, this.renderTime()));
380
+ }
381
+ }, {
382
+ key: "renderByMonths",
383
+ value: function renderByMonths() {
384
+ var _this$props$locale2 = this.props.locale,
385
+ locale = _this$props$locale2 === void 0 ? 'ru' : _this$props$locale2;
386
+ return /*#__PURE__*/_react["default"].createElement("div", {
387
+ className: "n2o-calendar-body"
388
+ }, this.renderList(_moment["default"].localeData(locale).months(), 'month-item'));
389
+ }
390
+ }, {
391
+ key: "renderList",
392
+ value: function renderList(list, className) {
393
+ var _this5 = this;
394
+
395
+ var value = this.props.value;
396
+
397
+ var isActive = function isActive(className, item, i) {
398
+ if (!value) {
399
+ return false;
400
+ }
401
+
402
+ if (className !== 'month-item') {
403
+ return item === value.year();
404
+ }
405
+
406
+ return i === value.month();
407
+ };
408
+
409
+ var isOtherDecade = function isOtherDecade(i) {
410
+ return className === 'year-item' && (i === 0 || i === 11);
411
+ };
412
+
413
+ return list.map(function (item, i) {
414
+ return /*#__PURE__*/_react["default"].createElement("div", {
415
+ className: (0, _classnames["default"])('n2o-calendar-body-item', className, {
416
+ active: isActive(className, item, i),
417
+ 'other-decade': isOtherDecade(i)
418
+ }),
419
+ onClick: function onClick() {
420
+ return _this5.onItemClick(className, item, i);
421
+ }
422
+ }, item);
423
+ });
424
+ }
425
+ }, {
426
+ key: "renderByYears",
427
+ value: function renderByYears() {
428
+ var displayesMonth = this.state.displayesMonth;
429
+ var decadeStart = parseInt(String(Number(displayesMonth.format('YYYY')) / 10), 10) * 10;
430
+ var years = Array.from(new Array(12), function (val, index) {
431
+ return decadeStart + index - 1;
432
+ });
433
+ return /*#__PURE__*/_react["default"].createElement("div", {
434
+ className: "n2o-calendar-body"
435
+ }, this.renderList(years, 'year-item'));
436
+ }
437
+ }, {
438
+ key: "componentDidUpdate",
439
+ value: function componentDidUpdate() {
440
+ var calendarType = this.state.calendarType;
441
+
442
+ if (calendarType === _types.CalendarType.TIME_PICKER) {
443
+ if (this.minuteRef) {
444
+ this.minuteRef.scrollIntoView();
445
+ }
446
+
447
+ if (this.secondRef) {
448
+ this.secondRef.scrollIntoView();
449
+ }
450
+
451
+ if (this.hourRef) {
452
+ this.hourRef.scrollIntoView();
453
+ }
454
+ }
455
+ }
456
+ }, {
457
+ key: "renderTimePicker",
458
+ value: function renderTimePicker() {
459
+ var _this6 = this;
460
+
461
+ var tempTimeObj = this.state.tempTimeObj;
462
+
463
+ var _ref3 = tempTimeObj || {},
464
+ minutes = _ref3.minutes,
465
+ seconds = _ref3.seconds,
466
+ hours = _ref3.hours;
467
+ /* eslint-disable react/jsx-one-expression-per-line */
468
+
469
+
470
+ return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
471
+ className: "n2o-calendar-timepicker"
472
+ }, /*#__PURE__*/_react["default"].createElement("div", {
473
+ className: "n2o-calendar-picker hour-picker"
474
+ }, Array.from(new Array(24), function (val, index) {
475
+ return /*#__PURE__*/_react["default"].createElement("div", {
476
+ className: (0, _classnames["default"])('n2o-calendar-time-unit', {
477
+ active: index === hours
478
+ }),
479
+ onClick: function onClick() {
480
+ return _this6.setTimeUnit(index, 'hours');
481
+ },
482
+ ref: index === hours ? _this6.setHourRef : null
483
+ }, index);
484
+ })), /*#__PURE__*/_react["default"].createElement("div", {
485
+ className: "n2o-calendar-picker minute-picker"
486
+ }, Array.from(new Array(60), function (val, index) {
487
+ return /*#__PURE__*/_react["default"].createElement("div", {
488
+ className: (0, _classnames["default"])('n2o-calendar-time-unit', {
489
+ active: index === minutes
490
+ }),
491
+ ref: index === minutes ? _this6.setMinuteRef : null,
492
+ onClick: function onClick() {
493
+ return _this6.setTimeUnit(index, 'minutes');
494
+ }
495
+ }, index);
496
+ })), /*#__PURE__*/_react["default"].createElement("div", {
497
+ className: "n2o-calendar-picker second-picker"
498
+ }, Array.from(new Array(60), function (val, index) {
499
+ return /*#__PURE__*/_react["default"].createElement("div", {
500
+ className: (0, _classnames["default"])('n2o-calendar-time-unit', {
501
+ active: index === seconds
502
+ }),
503
+ ref: index === seconds ? _this6.setSecondRef : null,
504
+ onClick: function onClick() {
505
+ return _this6.setTimeUnit(index, 'seconds');
506
+ }
507
+ }, index);
508
+ }))), /*#__PURE__*/_react["default"].createElement("div", {
509
+ className: "n2o-calendar-time-buttons"
510
+ }, /*#__PURE__*/_react["default"].createElement("button", {
511
+ type: "button",
512
+ className: "btn btn-secondary btn-sm",
513
+ onClick: function onClick() {
514
+ return _this6.changeCalendarType(_types.CalendarType.BY_DAYS);
515
+ }
516
+ }, ' ', "\u041D\u0430\u0437\u0430\u0434"), /*#__PURE__*/_react["default"].createElement("button", {
517
+ className: "btn btn-primary btn-sm",
518
+ onClick: this.setTime,
519
+ type: "button"
520
+ }, ' ', "\u0412\u044B\u0431\u0440\u0430\u0442\u044C")));
521
+ }
522
+ }, {
523
+ key: "renderBody",
524
+ value: function renderBody(type) {
525
+ switch (type) {
526
+ case _types.CalendarType.BY_MONTHS:
527
+ return this.renderByMonths();
528
+
529
+ case _types.CalendarType.BY_YEARS:
530
+ return this.renderByYears();
531
+
532
+ case _types.CalendarType.TIME_PICKER:
533
+ return this.renderTimePicker();
534
+
535
+ case _types.CalendarType.BY_DAYS:
536
+ default:
537
+ return this.renderByDays();
538
+ }
539
+ }
540
+ }, {
541
+ key: "render",
542
+ value: function render() {
543
+ var calendarType = this.state.calendarType;
544
+ var timeFormat = this.props.timeFormat;
545
+ return /*#__PURE__*/_react["default"].createElement("div", {
546
+ className: (0, _classnames["default"])('n2o-calendar', {
547
+ time: timeFormat
548
+ })
549
+ }, this.renderHeader(), this.renderBody(calendarType));
550
+ }
551
+ }]);
552
+ return Calendar;
553
+ }(_react["default"].Component);
554
+
555
+ exports.Calendar = Calendar;
556
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbnB1dHMvRGF0ZVBpY2tlci9DYWxlbmRhci50c3giXSwibmFtZXMiOlsiQ2FsZW5kYXIiLCJwcm9wcyIsInR5cGUiLCJzZXRTdGF0ZSIsImNhbGVuZGFyVHlwZSIsImVsIiwiaG91clJlZiIsIm1pbnV0ZVJlZiIsInNlY29uZFJlZiIsImRpc3BsYXllc01vbnRoIiwic3RhdGUiLCJzdWJ0cmFjdCIsImFkZCIsIml0ZW1UeXBlIiwiaXRlbSIsImkiLCJzZXREYXRlIiwiY2hhbmdlQ2FsZW5kYXJUeXBlIiwiQ2FsZW5kYXJUeXBlIiwiQllfREFZUyIsInZhbHVlIiwidW5pdCIsInRlbXBUaW1lT2JqIiwiaW5wdXROYW1lIiwibWFya1RpbWVBc1NldCIsInNlbGVjdCIsImhvdXJzIiwibWludXRlcyIsInNlY29uZHMiLCJjb3B5VmFsdWUiLCJjbG9uZSIsInN0YXJ0T2YiLCJ0aW1lIiwibG9jYWxlIiwidCIsIm5leHRNb250aCIsIm5leHRZZWFyIiwicHJldk1vbnRoIiwicHJldlllYXIiLCJuZXh0RGVjYWRlIiwicHJldkRlY2FkZSIsInNldCIsIk51bWJlciIsIm5hbWVPZkRheXMiLCJtYXAiLCJkYXkiLCJmaXJzdERheSIsIndlZWsiLCJyZW5kZXJXZWVrIiwicmVuZGVyRGF5IiwibWluIiwibWF4IiwiaW5kZXgiLCJ2YWx1ZXMiLCJkYXRlRm9ybWF0IiwiZGlzYWJsZWQiLCJpc0JlZm9yZSIsImlzQWZ0ZXIiLCJDb250cm9sVHlwZSIsIkRBVEVfSU5URVJWQUwiLCJiZWdpbiIsImRpc2FibGVEYXlzQmVmb3JlIiwicmFuZ2UiLCJkaXNhYmxlRGF5c0FmdGVyIiwiZGlzYWJsZWREYXlzQmV5b25kVGhlU2NvcGVNaW5NYXgiLCJkaXNhYmxlZERheXNCZXlvbmRUaGVTY29wZUJlZ2luTWF4IiwicmFuZ2VNaW5NYXgiLCJkaXNhYmxlZERheXMiLCJoYXNNaW5Pck1heEFuZE51bGxCZWdpbiIsIm90aGVyTW9udGgiLCJzZWxlY3RlZCIsImlzU2FtZSIsImN1cnJlbnQiLCJmb3JtYXQiLCJoYXNEZWZhdWx0VGltZSIsInRpbWVGb3JtYXQiLCJyZW5kZXJOYW1lT2ZEYXlzIiwicmVuZGVyV2Vla3MiLCJlIiwicHJldmVudERlZmF1bHQiLCJUSU1FX1BJQ0tFUiIsInJlbmRlclRpbWUiLCJyZW5kZXJMaXN0IiwibW9tZW50IiwibG9jYWxlRGF0YSIsIm1vbnRocyIsImxpc3QiLCJjbGFzc05hbWUiLCJpc0FjdGl2ZSIsInllYXIiLCJtb250aCIsImlzT3RoZXJEZWNhZGUiLCJhY3RpdmUiLCJvbkl0ZW1DbGljayIsImRlY2FkZVN0YXJ0IiwicGFyc2VJbnQiLCJTdHJpbmciLCJ5ZWFycyIsIkFycmF5IiwiZnJvbSIsInZhbCIsInNjcm9sbEludG9WaWV3Iiwic2V0VGltZVVuaXQiLCJzZXRIb3VyUmVmIiwic2V0TWludXRlUmVmIiwic2V0U2Vjb25kUmVmIiwic2V0VGltZSIsIkJZX01PTlRIUyIsInJlbmRlckJ5TW9udGhzIiwiQllfWUVBUlMiLCJyZW5kZXJCeVllYXJzIiwicmVuZGVyVGltZVBpY2tlciIsInJlbmRlckJ5RGF5cyIsInJlbmRlckhlYWRlciIsInJlbmRlckJvZHkiLCJSZWFjdCIsIkNvbXBvbmVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQU1BOztBQUNBOztBQUVBOzs7Ozs7Ozs7O0lBNkJhQSxROzs7OztBQU9ULG9CQUFZQyxLQUFaLEVBQWtDO0FBQUE7O0FBQUE7QUFDOUIsOEJBQU1BLEtBQU47QUFEOEIsZ0dBTk8sSUFNUDtBQUFBLGtHQUpTLElBSVQ7QUFBQSxrR0FGUyxJQUVUO0FBQUEsMkdBV2IsVUFBQ0MsSUFBRCxFQUF3QjtBQUN6QyxZQUFLQyxRQUFMLENBQWM7QUFBRUMsUUFBQUEsWUFBWSxFQUFFRjtBQUFoQixPQUFkO0FBQ0gsS0FiaUM7QUFBQSxtR0EyQnJCLFVBQUNHLEVBQUQsRUFBd0I7QUFD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b3J0IGlzTnVsbCBmcm9tICdsb2Rhc2gvaXNOdWxsJ1xuaW1wb3J0IG1vbWVudCwgeyBNb21lbnQsIE1vbWVudElucHV0LCB1bml0T2ZUaW1lIH0gZnJvbSAnbW9tZW50L21vbWVudCdcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJ1xuXG5pbXBvcnQgeyBEYXkgfSBmcm9tICcuL0RheSdcbmltcG9ydCB7IENhbGVuZGFySGVhZGVyIH0gZnJvbSAnLi9DYWxlbmRhckhlYWRlcidcbmltcG9ydCB7XG4gICAgd2Vla3MsXG4gICAgaXNEYXRlRnJvbVByZXZNb250aCxcbiAgICBpc0RhdGVGcm9tTmV4dE1vbnRoLFxuICAgIGFkZFRpbWUsIG9iakZyb21UaW1lLFxufSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgQ29udHJvbFR5cGUgfSBmcm9tICcuL0RhdGVUaW1lQ29udHJvbCdcbmltcG9ydCB7IENhbGVuZGFyVHlwZSwgVGltZSB9IGZyb20gJy4vdHlwZXMnXG5cbmltcG9ydCAnLi4vLi4vc3R5bGVzL2NvbXBvbmVudHMvQ2FsZW5kYXIuc2NzcydcblxudHlwZSBDYWxlbmRhclByb3BzID0ge1xuICAgIGF1dG8/OiBib29sZWFuLFxuICAgIGRhdGVGb3JtYXQ6IHN0cmluZyxcbiAgICBoYXNEZWZhdWx0VGltZT86IGJvb2xlYW4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnB1dE5hbWU6IHN0cmluZyxcbiAgICBsb2NhbGU6ICdlbicgfCAncnUnLFxuICAgIG1hcmtUaW1lQXNTZXQoc3RyOiBzdHJpbmcpOiB2b2lkLFxuICAgIG1heD86IE1vbWVudCB8IERhdGUgfCBzdHJpbmcsXG4gICAgbWluPzogTW9tZW50IHwgRGF0ZSB8IHN0cmluZyxcbiAgICBzZWxlY3QoZGF5OiBNb21lbnQsIG5hbWU6IHN0cmluZywgdHlwZT86IGJvb2xlYW4pOiB2b2lkLFxuICAgIHNldFBsYWNlbWVudD8oKTogdm9pZCxcbiAgICBzZXRWaXNpYmlsaXR5PygpOiB2b2lkLFxuICAgIHQoa2V5OiBzdHJpbmcpOiBSZWFjdE5vZGUsXG4gICAgdGltZTogVGltZSxcbiAgICB0aW1lRm9ybWF0Pzogc3RyaW5nLFxuICAgIHR5cGU/OiBzdHJpbmcsXG4gICAgdmFsdWU6IE1vbWVudCB8IG51bGwsXG4gICAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBNb21lbnRJbnB1dD5cbn1cblxudHlwZSBDYWxlbmRhclN0YXRlID0ge1xuICAgIGNhbGVuZGFyVHlwZTogQ2FsZW5kYXJUeXBlLFxuICAgIGRpc3BsYXllc01vbnRoOiBNb21lbnQsXG4gICAgdGVtcFRpbWVPYmo6IFRpbWVcbn1cblxuZXhwb3J0IGNsYXNzIENhbGVuZGFyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PENhbGVuZGFyUHJvcHMsIENhbGVuZGFyU3RhdGU+IHtcbiAgICBwcml2YXRlIGhvdXJSZWY6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGxcblxuICAgIHByaXZhdGUgbWludXRlUmVmOiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsXG5cbiAgICBwcml2YXRlIHNlY29uZFJlZjogSFRNTERpdkVsZW1lbnQgfCBudWxsID0gbnVsbFxuXG4gICAgY29uc3RydWN0b3IocHJvcHM6IENhbGVuZGFyUHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBkaXNwbGF5ZXNNb250aDogcHJvcHMudmFsdWVcbiAgICAgICAgICAgICAgICA/IHByb3BzLnZhbHVlLmNsb25lKCkuc3RhcnRPZignbW9udGgnKVxuICAgICAgICAgICAgICAgIDogbW9tZW50KCkuc3RhcnRPZignbW9udGgnKSxcbiAgICAgICAgICAgIGNhbGVuZGFyVHlwZTogQ2FsZW5kYXJUeXBlLkJZX0RBWVMsXG4gICAgICAgICAgICB0ZW1wVGltZU9iajogcHJvcHMudmFsdWUgPyBvYmpGcm9tVGltZShwcm9wcy52YWx1ZSkgOiBwcm9wcy50aW1lLFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlQ2FsZW5kYXJUeXBlID0gKHR5cGU6IENhbGVuZGFyVHlwZSkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgY2FsZW5kYXJUeXBlOiB0eXBlIH0pXG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRlcHJlY2F0ZWRcbiAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHByb3BzOiBDYWxlbmRhclByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZGlzcGxheWVzTW9udGg6IHByb3BzLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgID8gcHJvcHMudmFsdWUuY2xvbmUoKS5zdGFydE9mKCdtb250aCcpXG4gICAgICAgICAgICAgICAgICAgIDogbW9tZW50KCkuc3RhcnRPZignbW9udGgnKSxcbiAgICAgICAgICAgICAgICB0ZW1wVGltZU9iajogcHJvcHMudmFsdWUgPyBvYmpGcm9tVGltZShwcm9wcy52YWx1ZSkgOiBwcm9wcy50aW1lLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEhvdXJSZWYgPSAoZWw6IEhUTUxEaXZFbGVtZW50KSA9PiB7XG4gICAgICAgIHRoaXMuaG91clJlZiA9IGVsXG4gICAgfVxuXG4gICAgc2V0TWludXRlUmVmID0gKGVsOiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgICAgICB0aGlzLm1pbnV0ZVJlZiA9IGVsXG4gICAgfVxuXG4gICAgc2V0U2Vjb25kUmVmID0gKGVsOiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgICAgICB0aGlzLnNlY29uZFJlZiA9IGVsXG4gICAgfVxuXG4gICAgcmVuZGVySGVhZGVyKCkge1xuICAgICAgICBjb25zdCB7IGRpc3BsYXllc01vbnRoLCBjYWxlbmRhclR5cGUgfSA9IHRoaXMuc3RhdGVcbiAgICAgICAgY29uc3QgeyBsb2NhbGUgPSAncnUnLCB0IH0gPSB0aGlzLnByb3BzXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG5leHRNb250aCxcbiAgICAgICAgICAgIG5leHRZZWFyLFxuICAgICAgICAgICAgcHJldk1vbnRoLFxuICAgICAgICAgICAgcHJldlllYXIsXG4gICAgICAgICAgICBuZXh0RGVjYWRlLFxuICAgICAgICAgICAgcHJldkRlY2FkZSxcbiAgICAgICAgICAgIGNoYW5nZUNhbGVuZGFyVHlwZSxcbiAgICAgICAgfSA9IHRoaXNcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPENhbGVuZGFySGVhZGVyXG4gICAgICAgICAgICAgICAgbmV4dE1vbnRoPXtuZXh0TW9udGh9XG4gICAgICAgICAgICAgICAgbmV4dFllYXI9e25leHRZZWFyfVxuICAgICAgICAgICAgICAgIHByZXZNb250aD17cHJldk1vbnRofVxuICAgICAgICAgICAgICAgIHByZXZZZWFyPXtwcmV2WWVhcn1cbiAgICAgICAgICAgICAgICBuZXh0RGVjYWRlPXtuZXh0RGVjYWRlfVxuICAgICAgICAgICAgICAgIHByZXZEZWNhZGU9e3ByZXZEZWNhZGV9XG4gICAgICAgICAgICAgICAgZGlzcGxheWVzTW9udGg9e2Rpc3BsYXllc01vbnRofVxuICAgICAgICAgICAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgICAgICAgICAgIGNhbGVuZGFyVHlwZT17Y2FsZW5kYXJUeXBlfVxuICAgICAgICAgICAgICAgIGNoYW5nZUNhbGVuZGFyVHlwZT17Y2hhbmdlQ2FsZW5kYXJUeXBlfVxuICAgICAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgfVxuXG4gICAgcHJldk1vbnRoID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGRpc3BsYXllc01vbnRoIH0gPSB0aGlzLnN0YXRlXG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGRpc3BsYXllc01vbnRoOiBkaXNwbGF5ZXNNb250aC5zdWJ0cmFjdCgxLCAnbW9udGhzJykgfSlcbiAgICB9XG5cbiAgICBuZXh0TW9udGggPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZGlzcGxheWVzTW9udGggfSA9IHRoaXMuc3RhdGVcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGlzcGxheWVzTW9udGg6IGRpc3BsYXllc01vbnRoLmFkZCgxLCAnbW9udGhzJykgfSlcbiAgICB9XG5cbiAgICBwcmV2WWVhciA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBkaXNwbGF5ZXNNb250aCB9ID0gdGhpcy5zdGF0ZVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBkaXNwbGF5ZXNNb250aDogZGlzcGxheWVzTW9udGguc3VidHJhY3QoMSwgJ3llYXJzJykgfSlcbiAgICB9XG5cbiAgICBuZXh0WWVhciA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBkaXNwbGF5ZXNNb250aCB9ID0gdGhpcy5zdGF0ZVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBkaXNwbGF5ZXNNb250aDogZGlzcGxheWVzTW9udGguYWRkKDEsICd5ZWFycycpIH0pXG4gICAgfVxuXG4gICAgbmV4dERlY2FkZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBkaXNwbGF5ZXNNb250aCB9ID0gdGhpcy5zdGF0ZVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBkaXNwbGF5ZXNNb250aDogZGlzcGxheWVzTW9udGguYWRkKDEwLCAneWVhcnMnKSB9KVxuICAgIH1cblxuICAgIHByZXZEZWNhZGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZGlzcGxheWVzTW9udGggfSA9IHRoaXMuc3RhdGVcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGlzcGxheWVzTW9udGg6IGRpc3BsYXllc01vbnRoLnN1YnRyYWN0KDEwLCAneWVhcnMnKSB9KVxuICAgIH1cblxuICAgIHNldERhdGUodW5pdDogc3RyaW5nLCB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHsgZGlzcGxheWVzTW9udGggfSA9IHRoaXMuc3RhdGVcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGlzcGxheWVzTW9udGg6IGRpc3BsYXllc01vbnRoLnNldCh1bml0IGFzIHVuaXRPZlRpbWUuQWxsLCBOdW1iZXIodmFsdWUpKSB9KVxuICAgIH1cblxuICAgIHJlbmRlck5hbWVPZkRheXMoKSB7XG4gICAgICAgIGNvbnN0IHsgbG9jYWxlID0gJ3J1JyB9ID0gdGhpcy5wcm9wc1xuICAgICAgICBjb25zdCBuYW1lT2ZEYXlzID0gbG9jYWxlID09PSAncnUnXG4gICAgICAgICAgICA/IFsn0J/QvScsICfQktGCJywgJ9Ch0YAnLCAn0KfRgicsICfQn9GCJywgJ9Ch0LEnLCAn0JLRgSddXG4gICAgICAgICAgICA6IFsnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnLCAnU3UnXVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAge25hbWVPZkRheXMubWFwKChkYXksIGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxuICAgICAgICAgICAgICAgICAgICA8dGQga2V5PXtpfT57ZGF5fTwvdGQ+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICApXG4gICAgfVxuXG4gICAgcmVuZGVyV2Vla3MoKSB7XG4gICAgICAgIGNvbnN0IHsgZGlzcGxheWVzTW9udGgsIHRlbXBUaW1lT2JqIH0gPSB0aGlzLnN0YXRlXG4gICAgICAgIGNvbnN0IHsgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgfSA9IHRlbXBUaW1lT2JqIHx8IHt9XG4gICAgICAgIGNvbnN0IGZpcnN0RGF5ID0gYWRkVGltZShcbiAgICAgICAgICAgIGRpc3BsYXllc01vbnRoLmNsb25lKCkuc3RhcnRPZignaXNvV2VlaycpLFxuICAgICAgICAgICAgaG91cnMsXG4gICAgICAgICAgICBtaW51dGVzLFxuICAgICAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgKVxuXG4gICAgICAgIHJldHVybiB3ZWVrcyhmaXJzdERheSkubWFwKCh3ZWVrLCBpKSA9PiB0aGlzLnJlbmRlcldlZWsod2VlaywgaSkpXG4gICAgfVxuXG4gICAgcmVuZGVyV2Vlayh3ZWVrOiBNb21lbnRbXSwgaTogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiA8dHIga2V5PXtpfT57d2Vlay5tYXAoKGRheSwgaSkgPT4gdGhpcy5yZW5kZXJEYXkoZGF5LCBpKSl9PC90cj5cbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICAgIHJlbmRlckRheShkYXk6IE1vbWVudCwgaTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgIG1heCxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgc2VsZWN0LFxuICAgICAgICAgICAgaW5wdXROYW1lLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgdmFsdWVzLFxuICAgICAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgfSA9IHRoaXMucHJvcHNcblxuICAgICAgICBsZXQgZGlzYWJsZWQgPSBmYWxzZVxuXG4gICAgICAgIGlmIChtaW4gJiYgbWF4KSB7XG4gICAgICAgICAgICBkaXNhYmxlZCA9IGRheS5pc0JlZm9yZShtaW4pIHx8IGRheS5pc0FmdGVyKG1heClcbiAgICAgICAgfSBlbHNlIGlmIChtaW4pIHtcbiAgICAgICAgICAgIGRpc2FibGVkID0gZGF5LmlzQmVmb3JlKG1pbilcbiAgICAgICAgfSBlbHNlIGlmIChtYXgpIHtcbiAgICAgICAgICAgIGRpc2FibGVkID0gZGF5LmlzQWZ0ZXIobWF4KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IENvbnRyb2xUeXBlLkRBVEVfSU5URVJWQUwpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgYmVnaW4gfSA9IHZhbHVlc1xuXG4gICAgICAgICAgICBjb25zdCBkaXNhYmxlRGF5c0JlZm9yZSA9IChyYW5nZTogTW9tZW50SW5wdXQpID0+IGRheS5pc0JlZm9yZShyYW5nZSlcbiAgICAgICAgICAgIGNvbnN0IGRpc2FibGVEYXlzQWZ0ZXIgPSAocmFuZ2U6IE1vbWVudElucHV0KSA9PiBkYXkuaXNBZnRlcihyYW5nZSlcblxuICAgICAgICAgICAgY29uc3QgZGlzYWJsZWREYXlzQmV5b25kVGhlU2NvcGVNaW5NYXggPSBkaXNhYmxlRGF5c0JlZm9yZShtaW4pIHx8IGRpc2FibGVEYXlzQWZ0ZXIobWF4KVxuICAgICAgICAgICAgY29uc3QgZGlzYWJsZWREYXlzQmV5b25kVGhlU2NvcGVCZWdpbk1heCA9IGRpc2FibGVEYXlzQmVmb3JlKGJlZ2luKSB8fCBkaXNhYmxlRGF5c0FmdGVyKG1heClcblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLG5vLXJldHVybi1hc3NpZ24sIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgY29uc3QgcmFuZ2VNaW5NYXggPSAoZGlzYWJsZWREYXlzOiBib29sZWFuKSA9PiAoZGlzYWJsZWREYXlzID0gZGlzYWJsZWREYXlzQmV5b25kVGhlU2NvcGVNaW5NYXgpXG5cbiAgICAgICAgICAgIC8vINC10YHQu9C4INC90LUg0LLRi9Cx0YDQsNC90LAg0LTQsNGC0LAoYmVnaW4pIHx8ICBtaW4gb3IgbWF4XG4gICAgICAgICAgICBjb25zdCBoYXNNaW5Pck1heEFuZE51bGxCZWdpbiA9IChpc051bGwoYmVnaW4pICYmIChtaW4gfHwgbWF4KSkgfHwgKGlzTnVsbChiZWdpbikgJiYgKG1pbiAmJiBtYXgpKVxuXG4gICAgICAgICAgICAvLyDQtdGB0LvQuCBoYXNNaW5Pck1heEFuZE51bGxCZWdpbiwg0YPRgdGC0LDQvdCw0LLQu9C40LLQsNC10LwgZGVmYXVsdCByYW5nZSAobWluIG9yIG1heClcbiAgICAgICAgICAgIGlmIChoYXNNaW5Pck1heEFuZE51bGxCZWdpbikge1xuICAgICAgICAgICAgICAgIHJhbmdlTWluTWF4KGRpc2FibGVkKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtaW4gJiYgbWF4KSB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQgPSBpbmRleCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/IGRpc2FibGVkRGF5c0JleW9uZFRoZVNjb3BlTWluTWF4XG4gICAgICAgICAgICAgICAgICAgIDogZGlzYWJsZWREYXlzQmV5b25kVGhlU2NvcGVCZWdpbk1heFxuICAgICAgICAgICAgfSBlbHNlIGlmIChtaW4pIHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZCA9IGluZGV4ID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gZGlzYWJsZURheXNCZWZvcmUobWluKVxuICAgICAgICAgICAgICAgICAgICA6IGluZGV4ID09PSAxICYmIGRpc2FibGVEYXlzQmVmb3JlKGJlZ2luKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXgpIHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZCA9IGluZGV4ID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gZGlzYWJsZURheXNBZnRlcihtYXgpXG4gICAgICAgICAgICAgICAgICAgIDogaW5kZXggPT09IDEgJiYgZGlzYWJsZURheXNBZnRlcihiZWdpbilcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8g0L3QtSDRg9C60LDQt9Cw0L0gcmFuZ2UgKG1pbiwgbWF4KVxuICAgICAgICAgICAgICAgIGRpc2FibGVkID0gaW5kZXggPT09IDEgJiYgZGlzYWJsZURheXNCZWZvcmUoYmVnaW4pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGRpc3BsYXllc01vbnRoIH0gPSB0aGlzLnN0YXRlXG4gICAgICAgIGNvbnN0IG90aGVyTW9udGggPSBpc0RhdGVGcm9tTmV4dE1vbnRoKGRheSwgZGlzcGxheWVzTW9udGgpIHx8XG4gICAgICAgICAgICBpc0RhdGVGcm9tUHJldk1vbnRoKGRheSwgZGlzcGxheWVzTW9udGgpXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZGF5LmlzU2FtZSh2YWx1ZSlcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGRheS5mb3JtYXQoJ0RELk1NLllZWVknKSA9PT0gbW9tZW50KCkuZm9ybWF0KCdERC5NTS5ZWVlZJylcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgICAgICBkYXksXG4gICAgICAgICAgICBvdGhlck1vbnRoLFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgICAgIHNlbGVjdCxcbiAgICAgICAgICAgIGlucHV0TmFtZSxcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxEYXkga2V5PXtpfSB7Li4ucHJvcHN9IC8+XG4gICAgfVxuXG4gICAgcmVuZGVyVGltZSgpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSwgaGFzRGVmYXVsdFRpbWUsIHRpbWVGb3JtYXQsIHQgfSA9IHRoaXMucHJvcHNcblxuICAgICAgICBpZiAoaGFzRGVmYXVsdFRpbWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5mb3JtYXQodGltZUZvcm1hdClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICcwMDowMDowMCdcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0KSB7XG4gICAgICAgICAgICByZXR1cm4gdCgnY2hvb3NlVGltZScpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJlbmRlckJ5RGF5cygpIHtcbiAgICAgICAgY29uc3QgeyB0aW1lRm9ybWF0IH0gPSB0aGlzLnByb3BzXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT1cIm4yby1jYWxlbmRhci10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+e3RoaXMucmVuZGVyTmFtZU9mRGF5cygpfTwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT57dGhpcy5yZW5kZXJXZWVrcygpfTwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICB7dGltZUZvcm1hdCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJuMm8tY2FsZW5kYXItdGltZS1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cIi90ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VDYWxlbmRhclR5cGUoQ2FsZW5kYXJUeXBlLlRJTUVfUElDS0VSKVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMucmVuZGVyVGltZSgpfVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApXG4gICAgfVxuXG4gICAgcmVuZGVyQnlNb250aHMoKSB7XG4gICAgICAgIGNvbnN0IHsgbG9jYWxlID0gJ3J1JyB9ID0gdGhpcy5wcm9wc1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm4yby1jYWxlbmRhci1ib2R5XCI+XG4gICAgICAgICAgICAgICAge3RoaXMucmVuZGVyTGlzdChtb21lbnQubG9jYWxlRGF0YShsb2NhbGUpLm1vbnRocygpLCAnbW9udGgtaXRlbScpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICB9XG5cbiAgICBvbkl0ZW1DbGljayA9IChpdGVtVHlwZTogc3RyaW5nLCBpdGVtOiBzdHJpbmcgfCBudW1iZXIsIGk6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoaXRlbVR5cGUgPT09ICdtb250aC1pdGVtJykge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRlKCdtb250aCcsIGkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoJ3llYXInLCBpdGVtKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlQ2FsZW5kYXJUeXBlKENhbGVuZGFyVHlwZS5CWV9EQVlTKVxuICAgIH1cblxuICAgIHJlbmRlckxpc3QobGlzdDogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiwgY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5wcm9wc1xuXG4gICAgICAgIGNvbnN0IGlzQWN0aXZlID0gKGNsYXNzTmFtZTogc3RyaW5nLCBpdGVtOiBzdHJpbmcgfCBudW1iZXIsIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2UgfVxuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSAhPT0gJ21vbnRoLWl0ZW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPT09IHZhbHVlLnllYXIoKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gaSA9PT0gdmFsdWUubW9udGgoKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzT3RoZXJEZWNhZGUgPSAoaTogbnVtYmVyKSA9PiBjbGFzc05hbWUgPT09ICd5ZWFyLWl0ZW0nICYmIChpID09PSAwIHx8IGkgPT09IDExKVxuXG4gICAgICAgIHJldHVybiBsaXN0Lm1hcCgoaXRlbSwgaSkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goJ24yby1jYWxlbmRhci1ib2R5LWl0ZW0nLCBjbGFzc05hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBpc0FjdGl2ZShjbGFzc05hbWUsIGl0ZW0sIGkpLFxuICAgICAgICAgICAgICAgICAgICAnb3RoZXItZGVjYWRlJzogaXNPdGhlckRlY2FkZShpKSxcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm9uSXRlbUNsaWNrKGNsYXNzTmFtZSwgaXRlbSwgaSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2l0ZW19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSlcbiAgICB9XG5cbiAgICByZW5kZXJCeVllYXJzKCkge1xuICAgICAgICBjb25zdCB7IGRpc3BsYXllc01vbnRoIH0gPSB0aGlzLnN0YXRlXG4gICAgICAgIGNvbnN0IGRlY2FkZVN0YXJ0ID0gcGFyc2VJbnQoU3RyaW5nKE51bWJlcihkaXNwbGF5ZXNNb250aC5mb3JtYXQoJ1lZWVknKSkgLyAxMCksIDEwKSAqIDEwXG4gICAgICAgIGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgIG5ldyBBcnJheSgxMiksXG4gICAgICAgICAgICAodmFsLCBpbmRleCkgPT4gZGVjYWRlU3RhcnQgKyBpbmRleCAtIDEsXG4gICAgICAgIClcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJuMm8tY2FsZW5kYXItYm9keVwiPlxuICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckxpc3QoeWVhcnMsICd5ZWFyLWl0ZW0nKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApXG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgICBjb25zdCB7IGNhbGVuZGFyVHlwZSB9ID0gdGhpcy5zdGF0ZVxuXG4gICAgICAgIGlmIChjYWxlbmRhclR5cGUgPT09IENhbGVuZGFyVHlwZS5USU1FX1BJQ0tFUikge1xuICAgICAgICAgICAgaWYgKHRoaXMubWludXRlUmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5taW51dGVSZWYuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2Vjb25kUmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWNvbmRSZWYuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaG91clJlZikge1xuICAgICAgICAgICAgICAgIHRoaXMuaG91clJlZi5zY3JvbGxJbnRvVmlldygpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRUaW1lVW5pdCA9ICh2YWx1ZTogbnVtYmVyLCB1bml0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgeyB0ZW1wVGltZU9iaiB9ID0gdGhpcy5zdGF0ZVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdGVtcFRpbWVPYmo6IHsgLi4udGVtcFRpbWVPYmosIFt1bml0XTogdmFsdWUgfSxcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZXRUaW1lID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHZhbHVlLCBpbnB1dE5hbWUsIG1hcmtUaW1lQXNTZXQsIHNlbGVjdCB9ID0gdGhpcy5wcm9wc1xuICAgICAgICBjb25zdCB7IHRlbXBUaW1lT2JqIH0gPSB0aGlzLnN0YXRlXG4gICAgICAgIGNvbnN0IHsgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgfSA9IHRlbXBUaW1lT2JqIHx8IHt9XG4gICAgICAgIGNvbnN0IGNvcHlWYWx1ZSA9IHZhbHVlIHx8IG1vbWVudCgpXG5cbiAgICAgICAgdGhpcy5jaGFuZ2VDYWxlbmRhclR5cGUoQ2FsZW5kYXJUeXBlLkJZX0RBWVMpXG4gICAgICAgIG1hcmtUaW1lQXNTZXQoaW5wdXROYW1lKVxuXG4gICAgICAgIHNlbGVjdChcbiAgICAgICAgICAgIGFkZFRpbWUoY29weVZhbHVlLmNsb25lKCkuc3RhcnRPZignZGF5JyksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSxcbiAgICAgICAgICAgIGlucHV0TmFtZSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICApXG4gICAgfVxuXG4gICAgcmVuZGVyVGltZVBpY2tlcigpIHtcbiAgICAgICAgY29uc3QgeyB0ZW1wVGltZU9iaiB9ID0gdGhpcy5zdGF0ZVxuICAgICAgICBjb25zdCB7IG1pbnV0ZXMsIHNlY29uZHMsIGhvdXJzIH0gPSB0ZW1wVGltZU9iaiB8fCB7fVxuXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1vbmUtZXhwcmVzc2lvbi1wZXItbGluZSAqL1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm4yby1jYWxlbmRhci10aW1lcGlja2VyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibjJvLWNhbGVuZGFyLXBpY2tlciBob3VyLXBpY2tlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge0FycmF5LmZyb20obmV3IEFycmF5KDI0KSwgKHZhbCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goJ24yby1jYWxlbmRhci10aW1lLXVuaXQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGluZGV4ID09PSBob3VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuc2V0VGltZVVuaXQoaW5kZXgsICdob3VycycpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY9e2luZGV4ID09PSBob3VycyA/IHRoaXMuc2V0SG91clJlZiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibjJvLWNhbGVuZGFyLXBpY2tlciBtaW51dGUtcGlja2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7QXJyYXkuZnJvbShuZXcgQXJyYXkoNjApLCAodmFsLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeCgnbjJvLWNhbGVuZGFyLXRpbWUtdW5pdCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogaW5kZXggPT09IG1pbnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY9e2luZGV4ID09PSBtaW51dGVzID8gdGhpcy5zZXRNaW51dGVSZWYgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLnNldFRpbWVVbml0KGluZGV4LCAnbWludXRlcycpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm4yby1jYWxlbmRhci1waWNrZXIgc2Vjb25kLXBpY2tlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge0FycmF5LmZyb20obmV3IEFycmF5KDYwKSwgKHZhbCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goJ24yby1jYWxlbmRhci10aW1lLXVuaXQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGluZGV4ID09PSBzZWNvbmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmPXtpbmRleCA9PT0gc2Vjb25kcyA/IHRoaXMuc2V0U2Vjb25kUmVmIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5zZXRUaW1lVW5pdChpbmRleCwgJ3NlY29uZHMnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm4yby1jYWxlbmRhci10aW1lLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5jaGFuZ2VDYWxlbmRhclR5cGUoQ2FsZW5kYXJUeXBlLkJZX0RBWVMpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7JyAnfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICDQndCw0LfQsNC0XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiBvbkNsaWNrPXt0aGlzLnNldFRpbWV9IHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsnICd9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgINCS0YvQsdGA0LDRgtGMXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICB9XG5cbiAgICByZW5kZXJCb2R5KHR5cGU6IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJUeXBlLkJZX01PTlRIUzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJCeU1vbnRocygpXG4gICAgICAgICAgICBjYXNlIENhbGVuZGFyVHlwZS5CWV9ZRUFSUzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJCeVllYXJzKClcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJUeXBlLlRJTUVfUElDS0VSOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlclRpbWVQaWNrZXIoKVxuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclR5cGUuQllfREFZUzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQnlEYXlzKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyBjYWxlbmRhclR5cGUgfSA9IHRoaXMuc3RhdGVcbiAgICAgICAgY29uc3QgeyB0aW1lRm9ybWF0IH0gPSB0aGlzLnByb3BzXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KCduMm8tY2FsZW5kYXInLCB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWU6IHRpbWVGb3JtYXQsXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3RoaXMucmVuZGVySGVhZGVyKCl9XG4gICAgICAgICAgICAgICAge3RoaXMucmVuZGVyQm9keShjYWxlbmRhclR5cGUpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,26 @@
1
+ import React, { ReactNode } from 'react';
2
+ import type { Moment } from 'moment';
3
+ import 'moment/locale/ru';
4
+ import { CalendarType } from './types';
5
+ import '../../styles/components/CalendarHeader.scss';
6
+ declare type CalendarHeaderProps = {
7
+ calendarType: CalendarType;
8
+ changeCalendarType(type?: CalendarType): void;
9
+ displayesMonth: Moment;
10
+ locale: string;
11
+ nextDecade(): void;
12
+ nextMonth(): void;
13
+ nextYear(): void;
14
+ prevDecade(): void;
15
+ prevMonth(): void;
16
+ prevYear(): void;
17
+ t(str: string): ReactNode;
18
+ };
19
+ export declare class CalendarHeader extends React.Component<CalendarHeaderProps> {
20
+ renderHeaderValue(displayesMonth: Moment, locale: string, type?: CalendarType): string | JSX.Element | null;
21
+ static nextType: (type: CalendarType) => CalendarType.BY_MONTHS | CalendarType.BY_YEARS | CalendarType.TIME_PICKER | undefined;
22
+ nextView: (type: CalendarType) => void;
23
+ prevView: (type: CalendarType) => void;
24
+ render(): JSX.Element;
25
+ }
26
+ export {};