@jetbrains/ring-ui 4.1.1 → 4.1.2

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 (314) hide show
  1. package/dist/_helpers/_rollupPluginBabelHelpers.js +34 -0
  2. package/dist/_helpers/anchor.js +32 -0
  3. package/dist/_helpers/badge.js +3 -0
  4. package/dist/_helpers/button-group.js +3 -0
  5. package/dist/_helpers/button-set.js +3 -0
  6. package/dist/_helpers/button-toolbar.js +3 -0
  7. package/dist/_helpers/button__classes.js +39 -0
  8. package/dist/_helpers/card.js +75 -0
  9. package/dist/_helpers/checkbox.js +3 -0
  10. package/dist/_helpers/date-picker.js +3 -0
  11. package/dist/_helpers/dialog__body-scroll-preventer.js +57 -0
  12. package/dist/_helpers/error-message.js +3 -0
  13. package/dist/_helpers/footer.js +121 -0
  14. package/dist/_helpers/grid.js +3 -0
  15. package/dist/_helpers/group.js +3 -0
  16. package/dist/_helpers/header.js +3 -0
  17. package/dist/_helpers/icon.js +3 -0
  18. package/dist/_helpers/inject-styles.js +22 -0
  19. package/dist/_helpers/input.js +3 -0
  20. package/dist/_helpers/island.js +3 -0
  21. package/dist/_helpers/link.js +3 -0
  22. package/dist/_helpers/list.js +3 -0
  23. package/dist/_helpers/loader-screen.js +3 -0
  24. package/dist/_helpers/panel.js +3 -0
  25. package/dist/_helpers/query-assist__suggestions.js +95 -0
  26. package/dist/_helpers/radio.js +3 -0
  27. package/dist/_helpers/select__filter.js +76 -0
  28. package/dist/_helpers/services-link.js +40 -0
  29. package/dist/_helpers/sidebar.js +125 -0
  30. package/dist/_helpers/table.js +3 -0
  31. package/dist/_helpers/tabs.js +3 -0
  32. package/dist/_helpers/title.js +99 -0
  33. package/dist/alert/alert.js +260 -0
  34. package/dist/alert/container.js +48 -0
  35. package/dist/alert-service/alert-service.js +170 -0
  36. package/dist/analytics/analytics.js +116 -0
  37. package/dist/analytics/analytics__custom-plugin.js +127 -0
  38. package/dist/analytics/analytics__fus-plugin.js +101 -0
  39. package/dist/analytics/analytics__ga-plugin.js +66 -0
  40. package/dist/analytics/analytics__plugin-utils.js +79 -0
  41. package/dist/analytics-ng/analytics-ng.js +94 -0
  42. package/dist/auth/auth.js +93 -0
  43. package/dist/auth/auth__core.js +1025 -0
  44. package/dist/auth/background-flow.js +122 -0
  45. package/dist/auth/down-notification.js +114 -0
  46. package/dist/auth/iframe-flow.js +150 -0
  47. package/dist/auth/landing-entry.js +5 -0
  48. package/dist/auth/landing.js +87 -0
  49. package/dist/auth/request-builder.js +75 -0
  50. package/dist/auth/response-parser.js +117 -0
  51. package/dist/auth/storage.js +280 -0
  52. package/dist/auth/token-validator.js +176 -0
  53. package/dist/auth/window-flow.js +133 -0
  54. package/dist/auth-dialog/auth-dialog.js +134 -0
  55. package/dist/auth-dialog-service/auth-dialog-service.js +68 -0
  56. package/dist/auth-ng/auth-ng.js +203 -0
  57. package/dist/auth-ng/auth-ng.mock.js +33 -0
  58. package/dist/autofocus-ng/autofocus-ng.js +50 -0
  59. package/dist/avatar/avatar-example-datauri.js +26 -0
  60. package/dist/avatar/avatar.js +161 -0
  61. package/dist/avatar/fallback-avatar.js +141 -0
  62. package/dist/avatar-editor-ng/avatar-editor-ng.js +164 -0
  63. package/dist/avatar-editor-ng/avatar-editor-ng__template.js +30 -0
  64. package/dist/avatar-ng/avatar-ng.js +18 -0
  65. package/dist/badge/badge.js +50 -0
  66. package/dist/badge-ng/badge-ng.js +16 -0
  67. package/dist/breadcrumb-ng/breadcrumb-ng.js +61 -0
  68. package/dist/button/button.js +123 -0
  69. package/dist/button/button__classes.js +5 -0
  70. package/dist/button-group/button-group.js +30 -0
  71. package/dist/button-group/caption.js +24 -0
  72. package/dist/button-group-ng/button-group-ng.js +38 -0
  73. package/dist/button-ng/button-ng.js +223 -0
  74. package/dist/button-set/button-set.js +26 -0
  75. package/dist/button-set-ng/button-set-ng.js +19 -0
  76. package/dist/button-toolbar/button-toolbar.js +29 -0
  77. package/dist/button-toolbar-ng/button-toolbar-ng.js +23 -0
  78. package/dist/caret/caret.js +264 -0
  79. package/dist/checkbox/checkbox.js +108 -0
  80. package/dist/checkbox-ng/checkbox-ng.js +55 -0
  81. package/dist/code/code.js +136 -0
  82. package/dist/compiler-ng/compiler-ng.js +53 -0
  83. package/dist/confirm/confirm.js +125 -0
  84. package/dist/confirm-ng/confirm-ng.js +66 -0
  85. package/dist/confirm-service/confirm-service.js +114 -0
  86. package/dist/content-layout/content-layout.js +65 -0
  87. package/dist/content-layout/sidebar.js +6 -0
  88. package/dist/contenteditable/contenteditable.js +78 -0
  89. package/dist/data-list/data-list.js +206 -0
  90. package/dist/data-list/data-list.mock.js +190 -0
  91. package/dist/data-list/item.js +227 -0
  92. package/dist/data-list/selection.js +101 -0
  93. package/dist/data-list/title.js +18 -0
  94. package/dist/data-list-ng/data-list-ng.js +59 -0
  95. package/dist/date-picker/consts.js +69 -0
  96. package/dist/date-picker/date-input.js +173 -0
  97. package/dist/date-picker/date-picker.js +365 -0
  98. package/dist/date-picker/date-popup.js +482 -0
  99. package/dist/date-picker/day.js +119 -0
  100. package/dist/date-picker/formats.js +3 -0
  101. package/dist/date-picker/month-names.js +99 -0
  102. package/dist/date-picker/month-slider.js +83 -0
  103. package/dist/date-picker/month.js +54 -0
  104. package/dist/date-picker/months.js +121 -0
  105. package/dist/date-picker/weekdays.js +32 -0
  106. package/dist/date-picker/years.js +109 -0
  107. package/dist/dialog/dialog.js +200 -0
  108. package/dist/dialog/dialog__body-scroll-preventer.js +2 -0
  109. package/dist/dialog-ng/dialog-ng.js +601 -0
  110. package/dist/dialog-ng/dialog-ng__template.js +71 -0
  111. package/dist/docked-panel-ng/docked-panel-ng.js +170 -0
  112. package/dist/dropdown/anchor.js +17 -0
  113. package/dist/dropdown/dropdown.js +234 -0
  114. package/dist/dropdown-menu/dropdown-menu.js +175 -0
  115. package/dist/error-bubble/error-bubble.js +57 -0
  116. package/dist/error-message/error-message.js +55 -0
  117. package/dist/error-message-ng/error-message-ng.js +53 -0
  118. package/dist/footer/footer.js +11 -0
  119. package/dist/footer-ng/footer-ng.js +75 -0
  120. package/dist/form-ng/form-ng.js +169 -0
  121. package/dist/global/angular-component-factory.js +82 -0
  122. package/dist/global/compose.js +9 -0
  123. package/dist/global/composeRefs.js +15 -0
  124. package/dist/global/conic-gradient.js +35 -0
  125. package/dist/global/create-stateful-context.js +54 -0
  126. package/dist/global/data-tests.js +22 -0
  127. package/dist/global/dom.js +124 -0
  128. package/dist/global/focus-sensor-hoc.js +145 -0
  129. package/dist/global/fuzzy-highlight.js +67 -0
  130. package/dist/global/get-event-key.js +111 -0
  131. package/dist/global/get-uid.js +15 -0
  132. package/dist/global/inject-styles.js +17 -0
  133. package/dist/global/linear-function.js +17 -0
  134. package/dist/global/listeners.js +42 -0
  135. package/dist/global/memoize.js +18 -0
  136. package/dist/global/normalize-indent.js +28 -0
  137. package/dist/global/promise-with-timeout.js +13 -0
  138. package/dist/global/radial-gradient-mask.js +49 -0
  139. package/dist/global/react-dom-renderer.js +45 -0
  140. package/dist/global/rerender-hoc.js +51 -0
  141. package/dist/global/ring-angular-component.js +24 -0
  142. package/dist/global/schedule-raf.js +31 -0
  143. package/dist/global/sniffer.js +6 -0
  144. package/dist/global/supports-css.js +20 -0
  145. package/dist/global/theme.js +54 -0
  146. package/dist/global/trivial-template-tag.js +15 -0
  147. package/dist/global/url.js +163 -0
  148. package/dist/global/variables_dark.js +57 -0
  149. package/dist/grid/col.js +60 -0
  150. package/dist/grid/grid.js +33 -0
  151. package/dist/grid/row.js +64 -0
  152. package/dist/group/group.js +31 -0
  153. package/dist/group-ng/group-ng.js +11 -0
  154. package/dist/header/header.js +147 -0
  155. package/dist/header/logo.js +38 -0
  156. package/dist/header/profile.js +217 -0
  157. package/dist/header/services-link.js +11 -0
  158. package/dist/header/services.js +136 -0
  159. package/dist/header/smart-profile.js +230 -0
  160. package/dist/header/smart-services.js +160 -0
  161. package/dist/header/tray-icon.js +45 -0
  162. package/dist/header/tray.js +31 -0
  163. package/dist/heading/heading.js +73 -0
  164. package/dist/http/http.js +216 -0
  165. package/dist/http/http.mock.js +65 -0
  166. package/dist/hub-source/hub-source.js +130 -0
  167. package/dist/hub-source/hub-source__user.js +28 -0
  168. package/dist/hub-source/hub-source__users-groups.js +62 -0
  169. package/dist/icon/icon.js +105 -0
  170. package/dist/icon/icon__constants.js +33 -0
  171. package/dist/icon/icon__svg.js +81 -0
  172. package/dist/icon/index.js +10 -0
  173. package/dist/icon-ng/icon-ng.js +89 -0
  174. package/dist/input/input.js +228 -0
  175. package/dist/input-ng/input-ng.js +166 -0
  176. package/dist/island/adaptive-island-hoc.js +47 -0
  177. package/dist/island/content.js +156 -0
  178. package/dist/island/header.js +83 -0
  179. package/dist/island/island.js +50 -0
  180. package/dist/island-legacy/content-legacy.js +26 -0
  181. package/dist/island-legacy/header-legacy.js +28 -0
  182. package/dist/island-legacy/island-legacy.js +28 -0
  183. package/dist/island-ng/island-content-ng.js +56 -0
  184. package/dist/island-ng/island-header-ng.js +32 -0
  185. package/dist/island-ng/island-ng-class-fixer.js +9 -0
  186. package/dist/island-ng/island-ng.js +31 -0
  187. package/dist/link/clickableLink.js +63 -0
  188. package/dist/link/link.js +114 -0
  189. package/dist/link-ng/link-ng.js +25 -0
  190. package/dist/list/consts.js +26 -0
  191. package/dist/list/list.js +812 -0
  192. package/dist/list/list__custom.js +85 -0
  193. package/dist/list/list__hint.js +26 -0
  194. package/dist/list/list__item.js +204 -0
  195. package/dist/list/list__link.js +64 -0
  196. package/dist/list/list__separator.js +30 -0
  197. package/dist/list/list__title.js +39 -0
  198. package/dist/list/list__users-groups-source.js +128 -0
  199. package/dist/loader/loader.js +70 -0
  200. package/dist/loader/loader__core.js +272 -0
  201. package/dist/loader-inline/inject-styles.js +11 -0
  202. package/dist/loader-inline/loader-inline.js +56 -0
  203. package/dist/loader-inline-ng/loader-inline-ng.js +42 -0
  204. package/dist/loader-ng/loader-ng.js +43 -0
  205. package/dist/loader-screen/loader-screen.js +43 -0
  206. package/dist/loader-screen-ng/loader-screen-ng.js +99 -0
  207. package/dist/login-dialog/login-dialog.js +186 -0
  208. package/dist/login-dialog/service.js +69 -0
  209. package/dist/markdown/code.js +30 -0
  210. package/dist/markdown/heading.js +23 -0
  211. package/dist/markdown/link.js +30 -0
  212. package/dist/markdown/markdown.js +73 -0
  213. package/dist/message/message.js +233 -0
  214. package/dist/message-bundle-ng/message-bundle-ng.js +111 -0
  215. package/dist/old-browsers-message/old-browsers-message.js +100 -0
  216. package/dist/old-browsers-message/old-browsers-message__stop.js +4 -0
  217. package/dist/old-browsers-message/white-list.js +33 -0
  218. package/dist/pager/pager.js +361 -0
  219. package/dist/pager-ng/pager-ng.js +96 -0
  220. package/dist/panel/panel.js +31 -0
  221. package/dist/panel-ng/panel-ng.js +16 -0
  222. package/dist/permissions/permissions.js +200 -0
  223. package/dist/permissions/permissions__cache.js +272 -0
  224. package/dist/permissions-ng/permissions-ng.js +274 -0
  225. package/dist/place-under-ng/place-under-ng.js +157 -0
  226. package/dist/popup/popup.consts.js +41 -0
  227. package/dist/popup/popup.js +389 -0
  228. package/dist/popup/popup.target.js +26 -0
  229. package/dist/popup/position.js +279 -0
  230. package/dist/popup-menu/popup-menu.js +115 -0
  231. package/dist/progress-bar/progress-bar.js +113 -0
  232. package/dist/progress-bar-ng/progress-bar-ng.js +15 -0
  233. package/dist/promised-click-ng/promised-click-ng.js +126 -0
  234. package/dist/proxy-attrs/proxy-attrs.js +19 -0
  235. package/dist/query-assist/query-assist.js +1092 -0
  236. package/dist/query-assist/query-assist__suggestions.js +47 -0
  237. package/dist/query-assist-ng/query-assist-ng.js +82 -0
  238. package/dist/radio/radio.js +41 -0
  239. package/dist/radio/radio__item.js +77 -0
  240. package/dist/radio-ng/radio-ng.js +63 -0
  241. package/dist/save-field-ng/save-field-ng.js +335 -0
  242. package/dist/save-field-ng/save-field-ng__template.js +34 -0
  243. package/dist/select/select.js +1336 -0
  244. package/dist/select/select__filter.js +54 -0
  245. package/dist/select/select__popup.js +546 -0
  246. package/dist/select-ng/select-ng.js +621 -0
  247. package/dist/select-ng/select-ng__lazy.js +150 -0
  248. package/dist/select-ng/select-ng__options.js +145 -0
  249. package/dist/shortcuts/core.js +245 -0
  250. package/dist/shortcuts/shortcut-title.js +51 -0
  251. package/dist/shortcuts/shortcuts-hoc.js +41 -0
  252. package/dist/shortcuts/shortcuts.js +72 -0
  253. package/dist/shortcuts-hint-ng/shortcuts-hint-ng.js +120 -0
  254. package/dist/shortcuts-hint-ng/shortcuts-hint-ng__template.js +50 -0
  255. package/dist/shortcuts-ng/shortcuts-ng.js +261 -0
  256. package/dist/sidebar-ng/sidebar-ng.js +111 -0
  257. package/dist/sidebar-ng/sidebar-ng__button-template.js +20 -0
  258. package/dist/sidebar-ng/sidebar-ng__template.js +12 -0
  259. package/dist/storage/storage.js +56 -0
  260. package/dist/storage/storage__fallback.js +214 -0
  261. package/dist/storage/storage__local.js +151 -0
  262. package/dist/style.css +1 -0
  263. package/dist/tab-trap/tab-trap.js +176 -0
  264. package/dist/table/cell.js +25 -0
  265. package/dist/table/disable-hover-hoc.js +53 -0
  266. package/dist/table/header-cell.js +90 -0
  267. package/dist/table/header.js +191 -0
  268. package/dist/table/multitable.js +140 -0
  269. package/dist/table/row-with-focus-sensor.js +81 -0
  270. package/dist/table/row.js +271 -0
  271. package/dist/table/selection-adapter.js +14 -0
  272. package/dist/table/selection-shortcuts-hoc.js +214 -0
  273. package/dist/table/selection.js +221 -0
  274. package/dist/table/smart-table.js +119 -0
  275. package/dist/table/table.js +404 -0
  276. package/dist/table-legacy-ng/table-legacy-ng.js +501 -0
  277. package/dist/table-legacy-ng/table-legacy-ng__pager.js +122 -0
  278. package/dist/table-legacy-ng/table-legacy-ng__selection-navigate-actions.js +123 -0
  279. package/dist/table-legacy-ng/table-legacy-ng__selection.js +179 -0
  280. package/dist/table-legacy-ng/table-legacy-ng__toolbar.js +56 -0
  281. package/dist/table-ng/smart-table-ng.js +65 -0
  282. package/dist/table-ng/table-ng.js +64 -0
  283. package/dist/tabs/collapsible-more.js +196 -0
  284. package/dist/tabs/collapsible-tab.js +90 -0
  285. package/dist/tabs/collapsible-tabs.js +360 -0
  286. package/dist/tabs/custom-item.js +13 -0
  287. package/dist/tabs/dumb-tabs.js +161 -0
  288. package/dist/tabs/smart-tabs.js +104 -0
  289. package/dist/tabs/tab-link.js +41 -0
  290. package/dist/tabs/tab.js +32 -0
  291. package/dist/tabs/tabs.js +69 -0
  292. package/dist/tabs-ng/tabs-ng.js +193 -0
  293. package/dist/tabs-ng/tabs-ng__template.js +40 -0
  294. package/dist/tag/tag.js +196 -0
  295. package/dist/tags-input/tags-input.js +478 -0
  296. package/dist/tags-input-ng/tags-input-ng.js +89 -0
  297. package/dist/tags-list/tags-list.js +93 -0
  298. package/dist/template-ng/template-ng.js +70 -0
  299. package/dist/text/text.js +36 -0
  300. package/dist/theme-ng/theme-ng.js +44 -0
  301. package/dist/title-ng/title-ng.js +114 -0
  302. package/dist/toggle/toggle.js +77 -0
  303. package/dist/toggle-ng/toggle-ng.js +16 -0
  304. package/dist/tooltip/tooltip.js +207 -0
  305. package/dist/tooltip-ng/tooltip-ng.js +98 -0
  306. package/dist/user-agreement/service.js +409 -0
  307. package/dist/user-agreement/toolbox.eula.js +162 -0
  308. package/dist/user-agreement/user-agreement.js +167 -0
  309. package/dist/user-card/card.js +17 -0
  310. package/dist/user-card/smart-user-card-tooltip.js +112 -0
  311. package/dist/user-card/tooltip.js +93 -0
  312. package/dist/user-card/user-card.js +49 -0
  313. package/dist/user-card-ng/user-card-ng.js +59 -0
  314. package/package.json +2 -2
@@ -0,0 +1,99 @@
1
+ import { a as _extends, _ as _defineProperty } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+ import React, { PureComponent } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import classNames from 'classnames';
5
+ import endOfMonth from 'date-fns/endOfMonth';
6
+ import format from 'date-fns/format';
7
+ import isThisMonth from 'date-fns/isThisMonth';
8
+ import set from 'date-fns/set';
9
+ import startOfDay from 'date-fns/startOfDay';
10
+ import startOfYear from 'date-fns/startOfYear';
11
+ import linearFunction from '../global/linear-function.js';
12
+ import MonthSlider from './month-slider.js';
13
+ import { dateType, YEAR, MIDDLE_DAY, yearScrollSpeed, HALF } from './consts.js';
14
+ import { m as modules_0c7b7d96 } from '../_helpers/date-picker.js';
15
+ import 'date-fns/addYears';
16
+ import 'date-fns/subYears';
17
+ import 'date-fns/add';
18
+
19
+ class MonthName extends PureComponent {
20
+ constructor() {
21
+ super(...arguments);
22
+
23
+ _defineProperty(this, "handleClick", () => {
24
+ const end = endOfMonth(this.props.month);
25
+ this.props.onScrollChange((+this.props.month + +end) * HALF);
26
+ });
27
+ }
28
+
29
+ render() {
30
+ const {
31
+ month,
32
+ locale
33
+ } = this.props;
34
+ return /*#__PURE__*/React.createElement("button", {
35
+ type: "button",
36
+ className: classNames(modules_0c7b7d96.monthName, {
37
+ [modules_0c7b7d96.today]: isThisMonth(month)
38
+ }),
39
+ onClick: this.handleClick
40
+ }, format(month, 'LLL', {
41
+ locale
42
+ }));
43
+ }
44
+
45
+ }
46
+
47
+ MonthName.propTypes = {
48
+ month: dateType,
49
+ onScrollChange: PropTypes.func,
50
+ locale: PropTypes.string
51
+ };
52
+ function MonthNames(props) {
53
+ const {
54
+ scrollDate,
55
+ locale
56
+ } = props;
57
+ const months = [];
58
+
59
+ for (let i = 0; i < YEAR; i++) {
60
+ const middleDay = set(scrollDate, {
61
+ month: i,
62
+ date: MIDDLE_DAY
63
+ });
64
+ months.push(startOfDay(middleDay));
65
+ }
66
+
67
+ const pxToDate = linearFunction(0, startOfYear(scrollDate), yearScrollSpeed);
68
+ let top = 0;
69
+ let bottom = 0;
70
+
71
+ if (props.currentRange) {
72
+ [top, bottom] = props.currentRange.map(date => Math.floor(pxToDate.x(date)));
73
+ }
74
+
75
+ return /*#__PURE__*/React.createElement("div", {
76
+ className: modules_0c7b7d96.monthNames
77
+ }, months.map(month => /*#__PURE__*/React.createElement(MonthName, {
78
+ key: +month,
79
+ month: month,
80
+ onScrollChange: props.onScrollChange,
81
+ locale: locale
82
+ })), props.currentRange && /*#__PURE__*/React.createElement("div", {
83
+ className: modules_0c7b7d96.range,
84
+ style: {
85
+ top: top - 1,
86
+ height: bottom + 1 - (top - 1)
87
+ }
88
+ }), /*#__PURE__*/React.createElement(MonthSlider, _extends({}, props, {
89
+ pxToDate: pxToDate
90
+ })));
91
+ }
92
+ MonthNames.propTypes = {
93
+ scrollDate: dateType,
94
+ onScrollChange: PropTypes.func,
95
+ currentRange: PropTypes.arrayOf(dateType),
96
+ locale: PropTypes.string
97
+ };
98
+
99
+ export { MonthNames as default };
@@ -0,0 +1,83 @@
1
+ import { _ as _defineProperty } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+ import React, { PureComponent } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import classNames from 'classnames';
5
+ import addYears from 'date-fns/addYears';
6
+ import startOfDay from 'date-fns/startOfDay';
7
+ import subYears from 'date-fns/subYears';
8
+ import linearFunction from '../global/linear-function.js';
9
+ import units, { dateType, yearScrollSpeed } from './consts.js';
10
+ import { m as modules_0c7b7d96 } from '../_helpers/date-picker.js';
11
+ import 'date-fns/add';
12
+
13
+ const COVERYEARS = 3;
14
+ class MonthSlider extends PureComponent {
15
+ constructor() {
16
+ super(...arguments);
17
+
18
+ _defineProperty(this, "state", {
19
+ dragging: false
20
+ });
21
+
22
+ _defineProperty(this, "onMouseDown", () => {
23
+ this.setState({
24
+ dragging: true
25
+ });
26
+ });
27
+
28
+ _defineProperty(this, "onMouseUp", () => {
29
+ this.setState({
30
+ dragging: false
31
+ });
32
+ });
33
+
34
+ _defineProperty(this, "onMouseMove", e => {
35
+ this.props.onScroll(linearFunction(0, this.props.scrollDate, yearScrollSpeed).y(e.movementY));
36
+ });
37
+ }
38
+
39
+ componentDidUpdate(prevProps, prevState) {
40
+ if (this.state.dragging && !prevState.dragging) {
41
+ window.addEventListener('mousemove', this.onMouseMove);
42
+ window.addEventListener('mouseup', this.onMouseUp);
43
+ } else if (!this.state.dragging && prevState.dragging) {
44
+ window.removeEventListener('mousemove', this.onMouseMove);
45
+ window.removeEventListener('mouseup', this.onMouseUp);
46
+ }
47
+ }
48
+
49
+ render() {
50
+ let year = subYears(startOfDay(this.props.scrollDate), 1);
51
+ const years = [year];
52
+
53
+ for (let i = 0; i <= COVERYEARS; i++) {
54
+ year = addYears(year, 1);
55
+ years.push(year);
56
+ }
57
+
58
+ const classes = classNames(modules_0c7b7d96.monthSlider, {
59
+ [modules_0c7b7d96.dragging]: this.state.dragging
60
+ });
61
+ return /*#__PURE__*/React.createElement("div", null, years.map(date => /*#__PURE__*/React.createElement("button", {
62
+ type: "button",
63
+ key: +date,
64
+ className: classes,
65
+ style: {
66
+ top: Math.floor(this.props.pxToDate.x(date) - units.cellSize)
67
+ },
68
+ onMouseDown: this.onMouseDown
69
+ })));
70
+ }
71
+
72
+ }
73
+
74
+ _defineProperty(MonthSlider, "propTypes", {
75
+ scrollDate: dateType,
76
+ onScroll: PropTypes.func,
77
+ pxToDate: PropTypes.shape({
78
+ x: PropTypes.func,
79
+ y: PropTypes.func
80
+ })
81
+ });
82
+
83
+ export { MonthSlider as default };
@@ -0,0 +1,54 @@
1
+ import { a as _extends } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+ import React from 'react';
3
+ import addDays from 'date-fns/addDays';
4
+ import endOfMonth from 'date-fns/endOfMonth';
5
+ import format from 'date-fns/format';
6
+ import getDay from 'date-fns/getDay';
7
+ import setDay from 'date-fns/setDay';
8
+ import PropTypes from 'prop-types';
9
+ import Day from './day.js';
10
+ import { dateType, weekdays, WEEK } from './consts.js';
11
+ import { m as modules_0c7b7d96 } from '../_helpers/date-picker.js';
12
+ import 'classnames';
13
+ import 'date-fns/getDate';
14
+ import 'date-fns/isAfter';
15
+ import 'date-fns/isBefore';
16
+ import 'date-fns/isSameDay';
17
+ import 'date-fns/isToday';
18
+ import 'date-fns/startOfDay';
19
+ import 'date-fns/add';
20
+
21
+ function Month(props) {
22
+ const start = props.month;
23
+ const end = endOfMonth(start);
24
+ const {
25
+ locale
26
+ } = props; // pad with empty cells starting from last friday
27
+
28
+ const weekday = getDay(start);
29
+ let day = setDay(start, weekday >= weekdays.FR ? weekdays.FR : weekdays.FR - WEEK);
30
+ const days = [];
31
+
32
+ while (day < end) {
33
+ days.push(day);
34
+ day = addDays(day, 1);
35
+ }
36
+
37
+ return /*#__PURE__*/React.createElement("div", {
38
+ className: modules_0c7b7d96.month
39
+ }, /*#__PURE__*/React.createElement("span", {
40
+ className: modules_0c7b7d96.monthTitle
41
+ }, format(props.month, 'LLLL', {
42
+ locale
43
+ })), days.map(date => /*#__PURE__*/React.createElement(Day, _extends({}, props, {
44
+ day: date,
45
+ empty: date < start,
46
+ key: +date
47
+ }))));
48
+ }
49
+ Month.propTypes = {
50
+ month: dateType,
51
+ locale: PropTypes.string
52
+ };
53
+
54
+ export { Month as default };
@@ -0,0 +1,121 @@
1
+ import { a as _extends } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+ import React from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import addMonths from 'date-fns/addMonths';
5
+ import getDay from 'date-fns/getDay';
6
+ import getDaysInMonth from 'date-fns/getDaysInMonth';
7
+ import set from 'date-fns/set';
8
+ import startOfHour from 'date-fns/startOfHour';
9
+ import startOfMonth from 'date-fns/startOfMonth';
10
+ import subMonths from 'date-fns/subMonths';
11
+ import endOfMonth from 'date-fns/endOfMonth';
12
+ import scheduleRAF from '../global/schedule-raf.js';
13
+ import linearFunction from '../global/linear-function.js';
14
+ import Month from './month.js';
15
+ import MonthNames from './month-names.js';
16
+ import { m as modules_0c7b7d96 } from '../_helpers/date-picker.js';
17
+ import units, { dateType, DOUBLE, HALF, WEEK, weekdays } from './consts.js';
18
+ import 'date-fns/addDays';
19
+ import 'date-fns/format';
20
+ import 'date-fns/setDay';
21
+ import './day.js';
22
+ import 'classnames';
23
+ import 'date-fns/getDate';
24
+ import 'date-fns/isAfter';
25
+ import 'date-fns/isBefore';
26
+ import 'date-fns/isSameDay';
27
+ import 'date-fns/isToday';
28
+ import 'date-fns/startOfDay';
29
+ import 'date-fns/isThisMonth';
30
+ import 'date-fns/startOfYear';
31
+ import './month-slider.js';
32
+ import 'date-fns/addYears';
33
+ import 'date-fns/subYears';
34
+ import 'date-fns/add';
35
+
36
+ const {
37
+ unit,
38
+ cellSize,
39
+ calHeight
40
+ } = units;
41
+ const FridayToSunday = WEEK + weekdays.SU - weekdays.FR;
42
+ const FIVELINES = 31;
43
+ const TALLMONTH = 6;
44
+ const SHORTMONTH = 5;
45
+ const PADDING = 2;
46
+ const MONTHSBACK = 2;
47
+
48
+ function monthHeight(date) {
49
+ const monthStart = startOfMonth(date);
50
+ const daysSinceLastFriday = (getDay(monthStart) + FridayToSunday) % WEEK;
51
+ const monthLines = daysSinceLastFriday + getDaysInMonth(monthStart) > FIVELINES ? TALLMONTH : SHORTMONTH;
52
+ return monthLines * cellSize + unit * PADDING;
53
+ } // in milliseconds per pixel
54
+
55
+
56
+ function scrollSpeed(date) {
57
+ const monthStart = startOfMonth(date);
58
+ const monthEnd = endOfMonth(date);
59
+ return (monthEnd - monthStart) / monthHeight(monthStart);
60
+ }
61
+
62
+ const scrollSchedule = scheduleRAF();
63
+ let dy = 0;
64
+ function Months(props) {
65
+ const {
66
+ scrollDate
67
+ } = props; // prevent switching from april to march because of daylight saving time
68
+
69
+ const monthStart = startOfHour(set(scrollDate, {
70
+ date: 1,
71
+ hours: 1
72
+ }));
73
+ let month = subMonths(monthStart, MONTHSBACK);
74
+ const months = [month];
75
+
76
+ for (let i = 0; i < MONTHSBACK * DOUBLE; i++) {
77
+ month = addMonths(month, 1);
78
+ months.push(month);
79
+ }
80
+
81
+ const currentSpeed = scrollSpeed(scrollDate);
82
+ const pxToDate = linearFunction(0, scrollDate, currentSpeed);
83
+ const offset = pxToDate.x(monthStart); // is a negative number
84
+
85
+ const bottomOffset = monthHeight(scrollDate) + offset;
86
+ return /*#__PURE__*/React.createElement("div", {
87
+ className: modules_0c7b7d96.months,
88
+ onWheel: function handleWheel(e) {
89
+ e.preventDefault();
90
+ dy += e.deltaY;
91
+ scrollSchedule(() => {
92
+ let date; // adjust scroll speed to prevent glitches
93
+
94
+ if (dy < offset) {
95
+ date = pxToDate.y(offset) + (dy - offset) * scrollSpeed(months[1]);
96
+ } else if (dy > bottomOffset) {
97
+ date = pxToDate.y(bottomOffset) + (dy - bottomOffset) * scrollSpeed(months[MONTHSBACK + 1]);
98
+ } else {
99
+ date = pxToDate.y(dy);
100
+ }
101
+
102
+ props.onScroll(date);
103
+ dy = 0;
104
+ });
105
+ }
106
+ }, /*#__PURE__*/React.createElement("div", {
107
+ style: {
108
+ top: Math.floor(calHeight * HALF - monthHeight(months[0]) - monthHeight(months[1]) + offset)
109
+ },
110
+ className: modules_0c7b7d96.days
111
+ }, months.map(date => /*#__PURE__*/React.createElement(Month, _extends({}, props, {
112
+ month: date,
113
+ key: +date
114
+ })))), /*#__PURE__*/React.createElement(MonthNames, props));
115
+ }
116
+ Months.propTypes = {
117
+ onScroll: PropTypes.func,
118
+ scrollDate: dateType
119
+ };
120
+
121
+ export { Months as default };
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import classNames from 'classnames';
3
+ import getDay from 'date-fns/getDay';
4
+ import format from 'date-fns/format';
5
+ import setDay from 'date-fns/setDay';
6
+ import startOfDay from 'date-fns/startOfDay';
7
+ import PropTypes from 'prop-types';
8
+ import { weekdays } from './consts.js';
9
+ import { m as modules_0c7b7d96 } from '../_helpers/date-picker.js';
10
+ import 'date-fns/add';
11
+
12
+ function Weekdays(props) {
13
+ const days = Object.keys(weekdays).map(key => startOfDay(setDay(new Date(), weekdays[key])));
14
+ const {
15
+ locale
16
+ } = props;
17
+ return /*#__PURE__*/React.createElement("div", {
18
+ className: modules_0c7b7d96.weekdays
19
+ }, days.map(day => /*#__PURE__*/React.createElement("span", {
20
+ className: classNames(modules_0c7b7d96.weekday, {
21
+ [modules_0c7b7d96.weekend]: [weekdays.SA, weekdays.SU].includes(getDay(day))
22
+ }),
23
+ key: +day
24
+ }, format(day, 'EEEEEE', {
25
+ locale
26
+ }))));
27
+ }
28
+ Weekdays.propTypes = {
29
+ locale: PropTypes.string
30
+ };
31
+
32
+ export { Weekdays as default };
@@ -0,0 +1,109 @@
1
+ import { _ as _defineProperty } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+ import React, { PureComponent } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import classNames from 'classnames';
5
+ import addYears from 'date-fns/addYears';
6
+ import getYear from 'date-fns/getYear';
7
+ import format from 'date-fns/format';
8
+ import isSameYear from 'date-fns/isSameYear';
9
+ import isThisYear from 'date-fns/isThisYear';
10
+ import setYear from 'date-fns/setYear';
11
+ import startOfYear from 'date-fns/startOfYear';
12
+ import subYears from 'date-fns/subYears';
13
+ import linearFunction from '../global/linear-function.js';
14
+ import { m as modules_0c7b7d96 } from '../_helpers/date-picker.js';
15
+ import units, { dateType, DOUBLE, HALF, yearDuration } from './consts.js';
16
+ import 'date-fns/add';
17
+
18
+ const {
19
+ yearHeight,
20
+ calHeight
21
+ } = units;
22
+ let scrollTO;
23
+ const YEARSBACK = 5;
24
+ const scrollDelay = 100;
25
+ class Years extends PureComponent {
26
+ constructor() {
27
+ super(...arguments);
28
+
29
+ _defineProperty(this, "state", {
30
+ scrollDate: null
31
+ });
32
+ }
33
+
34
+ componentDidUpdate(prevProps, prevState) {
35
+ this.stoppedScrolling = prevState.scrollDate && !this.state.scrollDate;
36
+ }
37
+
38
+ setYear(date) {
39
+ if (scrollTO) {
40
+ window.clearTimeout(scrollTO);
41
+ scrollTO = null;
42
+ }
43
+
44
+ this.setState({
45
+ scrollDate: null
46
+ });
47
+ this.props.onScroll(setYear(this.props.scrollDate, getYear(date)));
48
+ }
49
+
50
+ render() {
51
+ const {
52
+ onScrollChange,
53
+ scrollDate
54
+ } = this.props;
55
+ const date = this.state.scrollDate || scrollDate;
56
+ const yearStart = startOfYear(date);
57
+ let year = subYears(yearStart, YEARSBACK);
58
+ const years = [year];
59
+
60
+ for (let i = 0; i < YEARSBACK * DOUBLE; i++) {
61
+ year = addYears(year, 1);
62
+ years.push(year);
63
+ }
64
+
65
+ const pxToDate = linearFunction(0, years[0], yearDuration / yearHeight);
66
+
67
+ const handleWheel = e => {
68
+ e.preventDefault();
69
+ const newScrollDate = linearFunction(0, date, yearDuration / yearHeight).y(e.deltaY);
70
+ this.setState({
71
+ scrollDate: newScrollDate
72
+ });
73
+
74
+ if (scrollTO) {
75
+ window.clearTimeout(scrollTO);
76
+ }
77
+
78
+ scrollTO = window.setTimeout(() => this.setYear(newScrollDate), scrollDelay);
79
+ };
80
+
81
+ return /*#__PURE__*/React.createElement("div", {
82
+ className: modules_0c7b7d96.years,
83
+ onWheel: handleWheel,
84
+ style: {
85
+ transition: this.stoppedScrolling ? 'top .2s ease-out 0s' : 'none',
86
+ top: Math.floor(calHeight * HALF - pxToDate.x(date))
87
+ }
88
+ }, years.map(item => /*#__PURE__*/React.createElement("button", {
89
+ type: "button",
90
+ key: +item,
91
+ className: classNames(modules_0c7b7d96.year, {
92
+ [modules_0c7b7d96.currentYear]: isSameYear(item, date),
93
+ [modules_0c7b7d96.today]: isThisYear(item)
94
+ }),
95
+ onClick: function handleClick() {
96
+ onScrollChange(setYear(scrollDate, getYear(item)));
97
+ }
98
+ }, format(item, 'yyyy'))));
99
+ }
100
+
101
+ }
102
+
103
+ _defineProperty(Years, "propTypes", {
104
+ scrollDate: dateType,
105
+ onScroll: PropTypes.func,
106
+ onScrollChange: PropTypes.func
107
+ });
108
+
109
+ export { Years as default };
@@ -0,0 +1,200 @@
1
+ import { _ as _defineProperty, a as _extends } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+ import React, { PureComponent } from 'react';
3
+ import { createPortal } from 'react-dom';
4
+ import PropTypes from 'prop-types';
5
+ import classNames from 'classnames';
6
+ import closeIcon from '@jetbrains/icons/close';
7
+ import { AdaptiveIsland } from '../island/island.js';
8
+ import getUID from '../global/get-uid.js';
9
+ import joinDataTestAttributes from '../global/data-tests.js';
10
+ import Shortcuts from '../shortcuts/shortcuts.js';
11
+ import TabTrap from '../tab-trap/tab-trap.js';
12
+ import Button from '../button/button.js';
13
+ import { PopupTarget } from '../popup/popup.target.js';
14
+ import { p as preventerFactory, m as modules_5e9b8c03 } from '../_helpers/dialog__body-scroll-preventer.js';
15
+ import '../island/adaptive-island-hoc.js';
16
+ import '../global/linear-function.js';
17
+ import '../_helpers/island.js';
18
+ import '../island/header.js';
19
+ import '../island/content.js';
20
+ import 'element-resize-detector';
21
+ import '../global/schedule-raf.js';
22
+ import '../shortcuts/core.js';
23
+ import 'combokeys';
24
+ import '../global/sniffer.js';
25
+ import 'sniffr';
26
+ import '../global/dom.js';
27
+ import 'focus-visible';
28
+ import '@jetbrains/icons/chevron-10px';
29
+ import '../icon/icon.js';
30
+ import 'util-deprecate';
31
+ import '../icon/icon__constants.js';
32
+ import '../_helpers/icon.js';
33
+ import '../icon/icon__svg.js';
34
+ import '../global/memoize.js';
35
+ import '../global/theme.js';
36
+ import '../link/clickableLink.js';
37
+ import '../_helpers/button__classes.js';
38
+ import 'scrollbar-width';
39
+
40
+ /**
41
+ * @name Dialog
42
+ */
43
+
44
+ function noop() {}
45
+
46
+ class Dialog extends PureComponent {
47
+ constructor() {
48
+ super(...arguments);
49
+
50
+ _defineProperty(this, "state", {
51
+ shortcutsScope: getUID('ring-dialog-')
52
+ });
53
+
54
+ _defineProperty(this, "scrollPreventer", preventerFactory(getUID('preventer-')));
55
+
56
+ _defineProperty(this, "uid", getUID('dialog-'));
57
+
58
+ _defineProperty(this, "handleClick", event => {
59
+ this.props.onOverlayClick(event);
60
+ this.props.onCloseAttempt(event);
61
+ });
62
+
63
+ _defineProperty(this, "onCloseClick", event => {
64
+ this.props.onCloseClick(event);
65
+ this.props.onCloseAttempt(event);
66
+ });
67
+
68
+ _defineProperty(this, "getShortcutsMap", () => {
69
+ const onEscape = event => {
70
+ if (this.props.show) {
71
+ this.props.onEscPress(event);
72
+ this.props.onCloseAttempt(event);
73
+ }
74
+ };
75
+
76
+ return {
77
+ esc: onEscape
78
+ };
79
+ });
80
+
81
+ _defineProperty(this, "dialogRef", tabTrap => {
82
+ this.dialog = tabTrap && tabTrap.node;
83
+ });
84
+ }
85
+
86
+ componentDidMount() {
87
+ this.toggleScrollPreventer();
88
+ }
89
+
90
+ componentDidUpdate(prevProps) {
91
+ if (prevProps.show !== this.props.show) {
92
+ this.toggleScrollPreventer();
93
+ }
94
+ }
95
+
96
+ componentWillUnmount() {
97
+ this.scrollPreventer.reset();
98
+ }
99
+
100
+ toggleScrollPreventer() {
101
+ if (this.props.show) {
102
+ this.scrollPreventer.prevent();
103
+ } else {
104
+ this.scrollPreventer.reset();
105
+ }
106
+ }
107
+
108
+ render() {
109
+ const {
110
+ show,
111
+ showCloseButton,
112
+ onOverlayClick,
113
+ onCloseAttempt,
114
+ onEscPress,
115
+ onCloseClick,
116
+ children,
117
+ className,
118
+ contentClassName,
119
+ trapFocus,
120
+ 'data-test': dataTest,
121
+ closeButtonInside,
122
+ portalTarget,
123
+ label,
124
+ ...restProps
125
+ } = this.props;
126
+ const classes = classNames(modules_5e9b8c03.container, className);
127
+ const shortcutsMap = this.getShortcutsMap();
128
+ return show && /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(PopupTarget, {
129
+ id: this.uid,
130
+ className: modules_5e9b8c03.popupTarget
131
+ }, target => /*#__PURE__*/React.createElement(TabTrap, _extends({
132
+ trapDisabled: !trapFocus,
133
+ "data-test": joinDataTestAttributes('ring-dialog-container', dataTest),
134
+ ref: this.dialogRef,
135
+ className: classes,
136
+ role: "presentation"
137
+ }, restProps), /*#__PURE__*/React.createElement(Shortcuts, {
138
+ map: shortcutsMap,
139
+ scope: this.state.shortcutsScope
140
+ }), (onOverlayClick !== noop || onCloseAttempt !== noop) && /*#__PURE__*/React.createElement("div", {
141
+ // click handler is duplicated in close button
142
+ role: "presentation",
143
+ className: modules_5e9b8c03.clickableOverlay,
144
+ onClick: this.handleClick
145
+ }), /*#__PURE__*/React.createElement("div", {
146
+ className: modules_5e9b8c03.innerContainer
147
+ }, /*#__PURE__*/React.createElement(AdaptiveIsland, {
148
+ className: classNames(modules_5e9b8c03.content, contentClassName),
149
+ "data-test": "ring-dialog",
150
+ role: "dialog",
151
+ "aria-label": label
152
+ }, children, showCloseButton && /*#__PURE__*/React.createElement(Button, {
153
+ icon: closeIcon,
154
+ "data-test": "ring-dialog-close-button",
155
+ className: classNames(modules_5e9b8c03.closeButton, {
156
+ [modules_5e9b8c03.closeButtonOutside]: !closeButtonInside,
157
+ [modules_5e9b8c03.closeButtonInside]: closeButtonInside
158
+ }),
159
+ iconClassName: modules_5e9b8c03.closeIcon,
160
+ onClick: this.onCloseClick,
161
+ "aria-label": "close dialog"
162
+ }))), target)), portalTarget instanceof HTMLElement ? portalTarget : document.body);
163
+ }
164
+
165
+ }
166
+
167
+ _defineProperty(Dialog, "propTypes", {
168
+ label: PropTypes.string,
169
+ className: PropTypes.string,
170
+ contentClassName: PropTypes.string,
171
+ children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),
172
+ show: PropTypes.bool.isRequired,
173
+ showCloseButton: PropTypes.bool,
174
+ closeButtonInside: PropTypes.bool,
175
+ onOverlayClick: PropTypes.func,
176
+ onEscPress: PropTypes.func,
177
+ onCloseClick: PropTypes.func,
178
+ // onCloseAttempt is a common callback for ESC pressing and overlay clicking.
179
+ // Use it if you don't need different behaviors for this cases.
180
+ onCloseAttempt: PropTypes.func,
181
+ // focusTrap may break popups inside dialog, so use it carefully
182
+ trapFocus: PropTypes.bool,
183
+ portalTarget: PropTypes.instanceOf(HTMLElement),
184
+ autoFocusFirst: PropTypes.bool,
185
+ 'data-test': PropTypes.string
186
+ });
187
+
188
+ _defineProperty(Dialog, "defaultProps", {
189
+ label: 'Dialog',
190
+ onOverlayClick: noop,
191
+ onEscPress: noop,
192
+ onCloseClick: noop,
193
+ onCloseAttempt: noop,
194
+ showCloseButton: false,
195
+ closeButtonInside: false,
196
+ trapFocus: false,
197
+ autoFocusFirst: true
198
+ });
199
+
200
+ export { Dialog as default };