@salutejs/plasma-new-hope 0.337.1-canary.2276.18280051462.0 → 0.338.0-canary.2254.18336605490.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 (94) hide show
  1. package/cjs/components/Combobox/ComboboxNew/Combobox.js +1 -1
  2. package/cjs/components/Combobox/ComboboxNew/Combobox.js.map +1 -1
  3. package/cjs/components/Modal/Modal.css +2 -2
  4. package/cjs/components/Modal/Modal.js +4 -5
  5. package/cjs/components/Modal/Modal.js.map +1 -1
  6. package/cjs/components/Select/Select.js +1 -1
  7. package/cjs/components/Select/Select.js.map +1 -1
  8. package/emotion/cjs/components/Combobox/ComboboxNew/Combobox.js +1 -1
  9. package/emotion/cjs/components/Modal/Modal.js +6 -7
  10. package/emotion/cjs/components/Scrollbar/Scrollbar.js +423 -0
  11. package/emotion/cjs/components/Scrollbar/Scrollbar.styles.js +59 -0
  12. package/emotion/cjs/components/Scrollbar/Scrollbar.tokens.js +39 -0
  13. package/emotion/cjs/components/Scrollbar/Scrollbar.types.js +4 -0
  14. package/emotion/cjs/components/Scrollbar/index.js +26 -0
  15. package/emotion/cjs/components/Scrollbar/utils.js +87 -0
  16. package/emotion/cjs/components/Scrollbar/variations/_size/base.js +12 -0
  17. package/emotion/cjs/components/Scrollbar/variations/_view/base.js +12 -0
  18. package/emotion/cjs/components/Select/Select.js +1 -1
  19. package/emotion/cjs/examples/components/Scrollbar/Scrollbar.config.js +27 -0
  20. package/emotion/cjs/examples/components/Scrollbar/Scrollbar.js +15 -0
  21. package/emotion/cjs/mixins/addScrollbar.js +24 -0
  22. package/emotion/es/components/Combobox/ComboboxNew/Combobox.js +1 -1
  23. package/emotion/es/components/Modal/Modal.js +5 -6
  24. package/emotion/es/components/Scrollbar/Scrollbar.js +359 -0
  25. package/emotion/es/components/Scrollbar/Scrollbar.styles.js +24 -0
  26. package/emotion/es/components/Scrollbar/Scrollbar.tokens.js +21 -0
  27. package/emotion/es/components/Scrollbar/Scrollbar.types.js +1 -0
  28. package/emotion/es/components/Scrollbar/index.js +2 -0
  29. package/emotion/es/components/Scrollbar/utils.js +69 -0
  30. package/emotion/es/components/Scrollbar/variations/_size/base.js +2 -0
  31. package/emotion/es/components/Scrollbar/variations/_view/base.js +2 -0
  32. package/emotion/es/components/Select/Select.js +1 -1
  33. package/emotion/es/examples/components/Scrollbar/Scrollbar.config.js +17 -0
  34. package/emotion/es/examples/components/Scrollbar/Scrollbar.js +5 -0
  35. package/emotion/es/mixins/addScrollbar.js +6 -0
  36. package/es/components/Combobox/ComboboxNew/Combobox.js +1 -1
  37. package/es/components/Combobox/ComboboxNew/Combobox.js.map +1 -1
  38. package/es/components/Modal/Modal.css +2 -2
  39. package/es/components/Modal/Modal.js +4 -5
  40. package/es/components/Modal/Modal.js.map +1 -1
  41. package/es/components/Select/Select.js +1 -1
  42. package/es/components/Select/Select.js.map +1 -1
  43. package/package.json +2 -2
  44. package/styled-components/cjs/components/Combobox/ComboboxNew/Combobox.js +1 -1
  45. package/styled-components/cjs/components/Modal/Modal.js +6 -7
  46. package/styled-components/cjs/components/Scrollbar/Scrollbar.js +423 -0
  47. package/styled-components/cjs/components/Scrollbar/Scrollbar.styles.js +121 -0
  48. package/styled-components/cjs/components/Scrollbar/Scrollbar.tokens.js +39 -0
  49. package/styled-components/cjs/components/Scrollbar/Scrollbar.types.js +4 -0
  50. package/styled-components/cjs/components/Scrollbar/index.js +26 -0
  51. package/styled-components/cjs/components/Scrollbar/utils.js +87 -0
  52. package/styled-components/cjs/components/Scrollbar/variations/_size/base.js +14 -0
  53. package/styled-components/cjs/components/Scrollbar/variations/_view/base.js +14 -0
  54. package/styled-components/cjs/components/Select/Select.js +1 -1
  55. package/styled-components/cjs/examples/components/Scrollbar/Scrollbar.config.js +45 -0
  56. package/styled-components/cjs/examples/components/Scrollbar/Scrollbar.js +15 -0
  57. package/styled-components/cjs/mixins/addScrollbar.js +24 -0
  58. package/styled-components/es/components/Combobox/ComboboxNew/Combobox.js +1 -1
  59. package/styled-components/es/components/Modal/Modal.js +5 -6
  60. package/styled-components/es/components/Scrollbar/Scrollbar.js +359 -0
  61. package/styled-components/es/components/Scrollbar/Scrollbar.styles.js +51 -0
  62. package/styled-components/es/components/Scrollbar/Scrollbar.tokens.js +21 -0
  63. package/styled-components/es/components/Scrollbar/Scrollbar.types.js +1 -0
  64. package/styled-components/es/components/Scrollbar/index.js +2 -0
  65. package/styled-components/es/components/Scrollbar/utils.js +69 -0
  66. package/styled-components/es/components/Scrollbar/variations/_size/base.js +4 -0
  67. package/styled-components/es/components/Scrollbar/variations/_view/base.js +4 -0
  68. package/styled-components/es/components/Select/Select.js +1 -1
  69. package/styled-components/es/examples/components/Scrollbar/Scrollbar.config.js +35 -0
  70. package/styled-components/es/examples/components/Scrollbar/Scrollbar.js +5 -0
  71. package/styled-components/es/mixins/addScrollbar.js +6 -0
  72. package/types/components/Modal/Modal.d.ts.map +1 -1
  73. package/types/components/Scrollbar/Scrollbar.d.ts +23 -0
  74. package/types/components/Scrollbar/Scrollbar.d.ts.map +1 -0
  75. package/types/components/Scrollbar/Scrollbar.styles.d.ts +7 -0
  76. package/types/components/Scrollbar/Scrollbar.styles.d.ts.map +1 -0
  77. package/types/components/Scrollbar/Scrollbar.tokens.d.ts +22 -0
  78. package/types/components/Scrollbar/Scrollbar.tokens.d.ts.map +1 -0
  79. package/types/components/Scrollbar/Scrollbar.types.d.ts +52 -0
  80. package/types/components/Scrollbar/Scrollbar.types.d.ts.map +1 -0
  81. package/types/components/Scrollbar/index.d.ts +4 -0
  82. package/types/components/Scrollbar/index.d.ts.map +1 -0
  83. package/types/components/Scrollbar/utils.d.ts +7 -0
  84. package/types/components/Scrollbar/utils.d.ts.map +1 -0
  85. package/types/components/Scrollbar/variations/_size/base.d.ts +2 -0
  86. package/types/components/Scrollbar/variations/_size/base.d.ts.map +1 -0
  87. package/types/components/Scrollbar/variations/_view/base.d.ts +2 -0
  88. package/types/components/Scrollbar/variations/_view/base.d.ts.map +1 -0
  89. package/types/examples/components/Scrollbar/Scrollbar.config.d.ts +16 -0
  90. package/types/examples/components/Scrollbar/Scrollbar.config.d.ts.map +1 -0
  91. package/types/examples/components/Scrollbar/Scrollbar.d.ts +10 -0
  92. package/types/examples/components/Scrollbar/Scrollbar.d.ts.map +1 -0
  93. package/types/mixins/addScrollbar.d.ts +3 -0
  94. package/types/mixins/addScrollbar.d.ts.map +1 -0
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get calculateScrollbar () {
13
+ return calculateScrollbar;
14
+ },
15
+ get parseOffset () {
16
+ return parseOffset;
17
+ }
18
+ });
19
+ var parseOffset = function(offset) {
20
+ if (!offset) {
21
+ return {
22
+ top: '0',
23
+ right: '0',
24
+ bottom: '0',
25
+ left: '0'
26
+ };
27
+ }
28
+ var offsetString = typeof offset === 'number' ? "".concat(offset, "px") : offset;
29
+ var parts = offsetString.split(/\s+/).filter(Boolean);
30
+ switch(parts.length){
31
+ case 1:
32
+ return {
33
+ top: parts[0],
34
+ right: parts[0],
35
+ bottom: parts[0],
36
+ left: parts[0]
37
+ };
38
+ case 2:
39
+ return {
40
+ top: parts[0],
41
+ right: parts[1],
42
+ bottom: parts[0],
43
+ left: parts[1]
44
+ };
45
+ case 3:
46
+ return {
47
+ top: parts[0],
48
+ right: parts[1],
49
+ bottom: parts[2],
50
+ left: parts[1]
51
+ };
52
+ case 4:
53
+ return {
54
+ top: parts[0],
55
+ right: parts[1],
56
+ bottom: parts[2],
57
+ left: parts[3]
58
+ };
59
+ default:
60
+ return {
61
+ top: '0',
62
+ right: '0',
63
+ bottom: '0',
64
+ left: '0'
65
+ };
66
+ }
67
+ };
68
+ var calculateScrollbar = function(container, parsedOffset) {
69
+ var minScrollbarTrackHeight = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 20;
70
+ if (!container) {
71
+ return {
72
+ thumbHeight: 0,
73
+ thumbPosition: 0
74
+ };
75
+ }
76
+ var scrollTop = container.scrollTop, scrollHeight = container.scrollHeight, clientHeight = container.clientHeight;
77
+ var topOffset = parseFloat(parsedOffset.top) || 0;
78
+ var bottomOffset = parseFloat(parsedOffset.bottom) || 0;
79
+ var trackHeight = clientHeight - topOffset - bottomOffset;
80
+ var thumbHeight = Math.max(trackHeight / scrollHeight * trackHeight, minScrollbarTrackHeight);
81
+ var maxScroll = scrollHeight - clientHeight;
82
+ var thumbPosition = maxScroll > 0 ? scrollTop / maxScroll * (trackHeight - thumbHeight) : 0;
83
+ return {
84
+ thumbHeight: thumbHeight,
85
+ thumbPosition: thumbPosition
86
+ };
87
+ };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "base", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return base;
9
+ }
10
+ });
11
+ var _styledcomponents = require("styled-components");
12
+ var base = (0, _styledcomponents.css)([
13
+ ""
14
+ ]);
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "base", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return base;
9
+ }
10
+ });
11
+ var _styledcomponents = require("styled-components");
12
+ var base = (0, _styledcomponents.css)([
13
+ ""
14
+ ]);
@@ -459,7 +459,7 @@ var selectRoot = function(Root) {
459
459
  // В данном эффекте мы следим за изменениями value снаружи и вносим коррективы в дерево чекбоксов.
460
460
  // Пример: когда юзер очистил value извне, тогда нужно пройтись по элементам и выключить все чекбоксы.
461
461
  (0, _react.useLayoutEffect)(function() {
462
- var checkedCopy = new Map(checked);
462
+ var checkedCopy = new Map(valueToCheckedMap);
463
463
  checkedCopy.forEach(function(_, key) {
464
464
  checkedCopy.set(key, false);
465
465
  });
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "config", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return config;
9
+ }
10
+ });
11
+ var _styledcomponents = require("styled-components");
12
+ var _Scrollbar = require("../../../components/Scrollbar");
13
+ var config = {
14
+ defaults: {
15
+ view: 'default',
16
+ size: 's'
17
+ },
18
+ variations: {
19
+ view: {
20
+ default: (0, _styledcomponents.css)([
21
+ "",
22
+ ":var(--surface-transparent-primary);",
23
+ ":var(--surface-transparent-tertiary);",
24
+ ":var(--surface-transparent-tertiary-hover);",
25
+ ":var(--surface-transparent-tertiary-active);"
26
+ ], _Scrollbar.scrollbarTokens.trackColor, _Scrollbar.scrollbarTokens.thumbColor, _Scrollbar.scrollbarTokens.thumbColorHover, _Scrollbar.scrollbarTokens.thumbColorActive)
27
+ },
28
+ size: {
29
+ m: (0, _styledcomponents.css)([
30
+ "",
31
+ ":0.25rem;",
32
+ ":0.25rem;",
33
+ ":0.25rem;",
34
+ ":0.25rem;"
35
+ ], _Scrollbar.scrollbarTokens.width, _Scrollbar.scrollbarTokens.trackWidth, _Scrollbar.scrollbarTokens.trackBorderRadius, _Scrollbar.scrollbarTokens.thumbBorderRadius),
36
+ s: (0, _styledcomponents.css)([
37
+ "",
38
+ ":0.125rem;",
39
+ ":0.125rem;",
40
+ ":0.125rem;",
41
+ ":0.125rem;"
42
+ ], _Scrollbar.scrollbarTokens.width, _Scrollbar.scrollbarTokens.trackWidth, _Scrollbar.scrollbarTokens.trackBorderRadius, _Scrollbar.scrollbarTokens.thumbBorderRadius)
43
+ }
44
+ }
45
+ };
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "Scrollbar", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return Scrollbar;
9
+ }
10
+ });
11
+ var _Scrollbar = require("../../../components/Scrollbar");
12
+ var _engines = require("../../../engines");
13
+ var _Scrollbarconfig = require("./Scrollbar.config");
14
+ var mergedConfig = (0, _engines.mergeConfig)(_Scrollbar.scrollbarConfig, _Scrollbarconfig.config);
15
+ var Scrollbar = (0, _engines.component)(mergedConfig);
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get scrollbarLarge () {
13
+ return scrollbarLarge;
14
+ },
15
+ get scrollbarSmall () {
16
+ return scrollbarSmall;
17
+ }
18
+ });
19
+ var scrollbarLarge = function() {
20
+ return "\n &::-webkit-scrollbar {\n width: 0.25rem;\n height: 0.25rem;\n }\n\n &::-webkit-scrollbar-track {\n background-color: var(--surface-transparent-primary);\n border-radius: 0.25rem;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: var(--surface-transparent-tertiary);\n border-radius: 0.25rem;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: var(--surface-transparent-tertiary-hover);\n }\n\n &:active {\n background-color: var(--surface-transparent-tertiary-active);\n }\n }\n\n /* scrollbar-width: thin;\n scrollbar-color: var(--surface-transparent-tertiary) var(--surface-transparent-primary); */\n";
21
+ };
22
+ var scrollbarSmall = function() {
23
+ return "\n &::-webkit-scrollbar {\n width: 0.125rem;\n height: 0.125rem;\n }\n\n &::-webkit-scrollbar-track {\n background-color: var(--surface-transparent-primary);\n border-radius: 0.125rem;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: var(--surface-transparent-tertiary);\n border-radius: 0.125rem;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: var(--surface-transparent-tertiary-hover);\n }\n\n &:active {\n background-color: var(--surface-transparent-tertiary-active);\n }\n }\n\n /* scrollbar-width: thin;\n scrollbar-color: var(--surface-transparent-tertiary) var(--surface-transparent-primary); */\n";
24
+ };
@@ -481,7 +481,7 @@ import { Context } from "./Combobox.context";
481
481
  // В данном эффекте мы следим за изменениями value снаружи и вносим коррективы в дерево чекбоксов.
482
482
  // Пример: когда юзер очистил value извне, тогда нужно пройтись по элементам и выключить все чекбоксы.
483
483
  useLayoutEffect(function() {
484
- var checkedCopy = new Map(checked);
484
+ var checkedCopy = new Map(valueToCheckedMap);
485
485
  checkedCopy.forEach(function(_, key) {
486
486
  checkedCopy.set(key, false);
487
487
  });
@@ -58,10 +58,10 @@ import { useForkRef } from "@salutejs/plasma-core";
58
58
  import { safeUseId } from "../../utils";
59
59
  import { component } from "../../engines";
60
60
  import { useFocusTrap } from "../../hooks";
61
- import { IconClose } from "../_Icon";
62
61
  import { popupConfig, usePopupContext } from "../Popup";
63
62
  import { Overlay } from "../Overlay";
64
63
  import { DEFAULT_Z_INDEX } from "../Popup/utils";
64
+ import { IconClose } from "../_Icon/Icons/IconClose";
65
65
  import { classes, tokens } from "./Modal.tokens";
66
66
  import { useModal } from "./hooks";
67
67
  import { base as viewCSS } from "./variations/_view/base";
@@ -74,7 +74,7 @@ var Popup = component(popupConfig);
74
74
  * Управляет показом/скрытием, подложкой и анимацией визуальной части модального окна.
75
75
  */ export var modalRoot = function(Root) {
76
76
  return /*#__PURE__*/ forwardRef(function(_param, outerRootRef) {
77
- var id = _param.id, withAnimation = _param.withAnimation, onClose = _param.onClose, onOverlayClick = _param.onOverlayClick, onEscKeyDown = _param.onEscKeyDown, _param_closeOnEsc = _param.closeOnEsc, closeOnEsc = _param_closeOnEsc === void 0 ? true : _param_closeOnEsc, _param_closeOnOverlayClick = _param.closeOnOverlayClick, closeOnOverlayClick = _param_closeOnOverlayClick === void 0 ? true : _param_closeOnOverlayClick, withBlur = _param.withBlur, _param_isFocusTrapped = _param.isFocusTrapped, isFocusTrapped = _param_isFocusTrapped === void 0 ? true : _param_isFocusTrapped, initialFocusRef = _param.initialFocusRef, focusAfterRef = _param.focusAfterRef, zIndex = _param.zIndex, popupInfo = _param.popupInfo, children = _param.children, view = _param.view, opened = _param.opened, isOpen = _param.isOpen, hasBody = _param.hasBody, hasClose = _param.hasClose, resizable = _param.resizable, draggable = _param.draggable, overlay = _param.overlay, rest = _object_without_properties(_param, [
77
+ var id = _param.id, withAnimation = _param.withAnimation, onClose = _param.onClose, onOverlayClick = _param.onOverlayClick, onEscKeyDown = _param.onEscKeyDown, _param_closeOnEsc = _param.closeOnEsc, closeOnEsc = _param_closeOnEsc === void 0 ? true : _param_closeOnEsc, _param_closeOnOverlayClick = _param.closeOnOverlayClick, closeOnOverlayClick = _param_closeOnOverlayClick === void 0 ? true : _param_closeOnOverlayClick, withBlur = _param.withBlur, _param_isFocusTrapped = _param.isFocusTrapped, isFocusTrapped = _param_isFocusTrapped === void 0 ? true : _param_isFocusTrapped, initialFocusRef = _param.initialFocusRef, focusAfterRef = _param.focusAfterRef, zIndex = _param.zIndex, popupInfo = _param.popupInfo, children = _param.children, view = _param.view, opened = _param.opened, isOpen = _param.isOpen, hasBody = _param.hasBody, hasClose = _param.hasClose, resizable = _param.resizable, draggable = _param.draggable, rest = _object_without_properties(_param, [
78
78
  "id",
79
79
  "withAnimation",
80
80
  "onClose",
@@ -95,8 +95,7 @@ var Popup = component(popupConfig);
95
95
  "hasBody",
96
96
  "hasClose",
97
97
  "resizable",
98
- "draggable",
99
- "overlay"
98
+ "draggable"
100
99
  ]);
101
100
  var innerIsOpen = Boolean(isOpen || opened);
102
101
  var innerHasClose = hasClose === undefined && hasBody || hasClose;
@@ -149,9 +148,9 @@ var Popup = component(popupConfig);
149
148
  popupInfo: modalInfo,
150
149
  withAnimation: withAnimation,
151
150
  zIndex: zIndex,
152
- overlay: /*#__PURE__*/ React.createElement(Root, {
151
+ overlay: hasBody ? overlayNode : /*#__PURE__*/ React.createElement(Root, {
153
152
  view: view
154
- }, overlay || overlayNode),
153
+ }, overlayNode),
155
154
  draggable: draggable,
156
155
  resizable: resizable
157
156
  }, rest), hasBody ? /*#__PURE__*/ React.createElement(Root, {
@@ -0,0 +1,359 @@
1
+ /* eslint-disable */ function _array_like_to_array(arr, len) {
2
+ if (len == null || len > arr.length) len = arr.length;
3
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
4
+ return arr2;
5
+ }
6
+ function _array_with_holes(arr) {
7
+ if (Array.isArray(arr)) return arr;
8
+ }
9
+ function _define_property(obj, key, value) {
10
+ if (key in obj) {
11
+ Object.defineProperty(obj, key, {
12
+ value: value,
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true
16
+ });
17
+ } else {
18
+ obj[key] = value;
19
+ }
20
+ return obj;
21
+ }
22
+ function _iterable_to_array_limit(arr, i) {
23
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
24
+ if (_i == null) return;
25
+ var _arr = [];
26
+ var _n = true;
27
+ var _d = false;
28
+ var _s, _e;
29
+ try {
30
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
31
+ _arr.push(_s.value);
32
+ if (i && _arr.length === i) break;
33
+ }
34
+ } catch (err) {
35
+ _d = true;
36
+ _e = err;
37
+ } finally{
38
+ try {
39
+ if (!_n && _i["return"] != null) _i["return"]();
40
+ } finally{
41
+ if (_d) throw _e;
42
+ }
43
+ }
44
+ return _arr;
45
+ }
46
+ function _non_iterable_rest() {
47
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
48
+ }
49
+ function _object_spread(target) {
50
+ for(var i = 1; i < arguments.length; i++){
51
+ var source = arguments[i] != null ? arguments[i] : {};
52
+ var ownKeys = Object.keys(source);
53
+ if (typeof Object.getOwnPropertySymbols === "function") {
54
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
55
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
56
+ }));
57
+ }
58
+ ownKeys.forEach(function(key) {
59
+ _define_property(target, key, source[key]);
60
+ });
61
+ }
62
+ return target;
63
+ }
64
+ function ownKeys(object, enumerableOnly) {
65
+ var keys = Object.keys(object);
66
+ if (Object.getOwnPropertySymbols) {
67
+ var symbols = Object.getOwnPropertySymbols(object);
68
+ if (enumerableOnly) {
69
+ symbols = symbols.filter(function(sym) {
70
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
71
+ });
72
+ }
73
+ keys.push.apply(keys, symbols);
74
+ }
75
+ return keys;
76
+ }
77
+ function _object_spread_props(target, source) {
78
+ source = source != null ? source : {};
79
+ if (Object.getOwnPropertyDescriptors) {
80
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
81
+ } else {
82
+ ownKeys(Object(source)).forEach(function(key) {
83
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
84
+ });
85
+ }
86
+ return target;
87
+ }
88
+ function _object_without_properties(source, excluded) {
89
+ if (source == null) return {};
90
+ var target = _object_without_properties_loose(source, excluded);
91
+ var key, i;
92
+ if (Object.getOwnPropertySymbols) {
93
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
94
+ for(i = 0; i < sourceSymbolKeys.length; i++){
95
+ key = sourceSymbolKeys[i];
96
+ if (excluded.indexOf(key) >= 0) continue;
97
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
98
+ target[key] = source[key];
99
+ }
100
+ }
101
+ return target;
102
+ }
103
+ function _object_without_properties_loose(source, excluded) {
104
+ if (source == null) return {};
105
+ var target = {};
106
+ var sourceKeys = Object.keys(source);
107
+ var key, i;
108
+ for(i = 0; i < sourceKeys.length; i++){
109
+ key = sourceKeys[i];
110
+ if (excluded.indexOf(key) >= 0) continue;
111
+ target[key] = source[key];
112
+ }
113
+ return target;
114
+ }
115
+ function _sliced_to_array(arr, i) {
116
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
117
+ }
118
+ function _unsupported_iterable_to_array(o, minLen) {
119
+ if (!o) return;
120
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
121
+ var n = Object.prototype.toString.call(o).slice(8, -1);
122
+ if (n === "Object" && o.constructor) n = o.constructor.name;
123
+ if (n === "Map" || n === "Set") return Array.from(n);
124
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
125
+ }
126
+ import React, { forwardRef, useRef, useState, useEffect } from "react";
127
+ import cls from "classnames";
128
+ import { base as sizeCSS } from "./variations/_size/base";
129
+ import { base as viewCSS } from "./variations/_view/base";
130
+ import { base, StyledScrollBar, StyledContainer, StyledContent, StyledTrack, StyledThumb } from "./Scrollbar.styles";
131
+ import { classes } from "./Scrollbar.tokens";
132
+ import { parseOffset, calculateScrollbar } from "./utils";
133
+ var MIN_SCROLLBAR_TRACK_HEIGHT = 20;
134
+ export var scrollbarRoot = function(Root) {
135
+ return /*#__PURE__*/ forwardRef(function(_param, ref) {
136
+ var className = _param.className, _param_view = _param.view, view = _param_view === void 0 ? 'default' : _param_view, _param_size = _param.size, size = _param_size === void 0 ? 'm' : _param_size, _param_placement = _param.placement, placement = _param_placement === void 0 ? 'right' : _param_placement, _param_offset = _param.offset, offset = _param_offset === void 0 ? '4px' : _param_offset, _param_autoHide = _param.autoHide, autoHide = _param_autoHide === void 0 ? true : _param_autoHide, _param_autoHideDelay = _param.autoHideDelay, autoHideDelay = _param_autoHideDelay === void 0 ? 2000 : _param_autoHideDelay, style = _param.style, children = _param.children, rest = _object_without_properties(_param, [
137
+ "className",
138
+ "view",
139
+ "size",
140
+ "placement",
141
+ "offset",
142
+ "autoHide",
143
+ "autoHideDelay",
144
+ "style",
145
+ "children"
146
+ ]);
147
+ var containerRef = useRef(null);
148
+ var contentRef = useRef(null);
149
+ var trackRef = useRef(null);
150
+ var thumbRef = useRef(null);
151
+ var hideTimeoutRef = useRef(null);
152
+ var isInitializedRef = useRef(false);
153
+ var _useState = _sliced_to_array(useState({
154
+ isVisible: false,
155
+ thumbHeight: 0,
156
+ thumbPosition: 0,
157
+ isDragging: false
158
+ }), 2), scrollbarState = _useState[0], setScrollbarState = _useState[1];
159
+ var parsedOffset = parseOffset(offset);
160
+ var updateScrollbar = function() {
161
+ var show = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
162
+ var container = containerRef.current;
163
+ if (!container) return;
164
+ var _calculateScrollbar = calculateScrollbar(container, parsedOffset, MIN_SCROLLBAR_TRACK_HEIGHT), thumbHeight = _calculateScrollbar.thumbHeight, thumbPosition = _calculateScrollbar.thumbPosition;
165
+ setScrollbarState(function(prevState) {
166
+ if (prevState.thumbHeight === thumbHeight && prevState.thumbPosition === thumbPosition && prevState.isVisible === (show || prevState.isVisible)) {
167
+ return prevState;
168
+ }
169
+ return _object_spread_props(_object_spread({}, prevState), {
170
+ thumbHeight: thumbHeight,
171
+ thumbPosition: thumbPosition,
172
+ isVisible: show || prevState.isVisible
173
+ });
174
+ });
175
+ };
176
+ var clearHideTimeout = function() {
177
+ if (hideTimeoutRef.current) {
178
+ clearTimeout(hideTimeoutRef.current);
179
+ hideTimeoutRef.current = null;
180
+ }
181
+ };
182
+ var showScrollbarWithDelay = function() {
183
+ clearHideTimeout();
184
+ updateScrollbar(true);
185
+ if (autoHide) {
186
+ hideTimeoutRef.current = window.setTimeout(function() {
187
+ setScrollbarState(function(prevState) {
188
+ return _object_spread_props(_object_spread({}, prevState), {
189
+ isVisible: false
190
+ });
191
+ });
192
+ }, autoHideDelay);
193
+ }
194
+ };
195
+ var handleScroll = function() {
196
+ showScrollbarWithDelay();
197
+ updateScrollbar();
198
+ };
199
+ var handleMouseEnter = function() {
200
+ showScrollbarWithDelay();
201
+ };
202
+ var handleScrollbarDrag = function(e) {
203
+ e.preventDefault();
204
+ e.stopPropagation();
205
+ var thumb = e.currentTarget;
206
+ var track = thumb.parentElement;
207
+ var container = containerRef.current;
208
+ if (!container || !track) return;
209
+ clearHideTimeout();
210
+ var startY = e.clientY;
211
+ var startThumbPosition = parseFloat(thumb.style.top || '0');
212
+ var trackRect = track.getBoundingClientRect();
213
+ var trackHeight = trackRect.height;
214
+ var thumbHeight = thumb.offsetHeight;
215
+ var scrollHeight = container.scrollHeight, clientHeight = container.clientHeight;
216
+ var maxScroll = scrollHeight - clientHeight;
217
+ var handleMouseMove = function(moveEvent) {
218
+ var deltaY = moveEvent.clientY - startY;
219
+ var newThumbPosition = Math.max(0, Math.min(trackHeight - thumbHeight, startThumbPosition + deltaY));
220
+ var scrollPercentage = newThumbPosition / (trackHeight - thumbHeight);
221
+ var newScrollTop = scrollPercentage * maxScroll;
222
+ container.scrollTop = newScrollTop;
223
+ setScrollbarState(function(prevState) {
224
+ return _object_spread_props(_object_spread({}, prevState), {
225
+ thumbPosition: newThumbPosition,
226
+ isDragging: true,
227
+ isVisible: true
228
+ });
229
+ });
230
+ };
231
+ var handleMouseUp = function() {
232
+ document.removeEventListener('mousemove', handleMouseMove);
233
+ document.removeEventListener('mouseup', handleMouseUp);
234
+ setScrollbarState(function(prevState) {
235
+ return _object_spread_props(_object_spread({}, prevState), {
236
+ isDragging: false
237
+ });
238
+ });
239
+ showScrollbarWithDelay();
240
+ };
241
+ document.addEventListener('mousemove', handleMouseMove);
242
+ document.addEventListener('mouseup', handleMouseUp);
243
+ };
244
+ var handleTrackClick = function(e) {
245
+ e.preventDefault();
246
+ e.stopPropagation();
247
+ var track = e.currentTarget;
248
+ var container = containerRef.current;
249
+ if (!container || !track) return;
250
+ if (thumbRef.current && thumbRef.current.contains(e.target)) {
251
+ return;
252
+ }
253
+ clearHideTimeout();
254
+ var trackRect = track.getBoundingClientRect();
255
+ var clickY = e.clientY - trackRect.top;
256
+ var trackHeight = trackRect.height;
257
+ var thumbHeight = scrollbarState.thumbHeight;
258
+ var scrollHeight = container.scrollHeight, clientHeight = container.clientHeight;
259
+ var maxScroll = scrollHeight - clientHeight;
260
+ if (maxScroll <= 0) return;
261
+ var newThumbPosition = clickY - thumbHeight / 2;
262
+ newThumbPosition = Math.max(0, Math.min(trackHeight - thumbHeight, newThumbPosition));
263
+ var scrollPercentage = newThumbPosition / (trackHeight - thumbHeight);
264
+ var newScrollTop = scrollPercentage * maxScroll;
265
+ container.scrollTop = newScrollTop;
266
+ setScrollbarState(function(prevState) {
267
+ return _object_spread_props(_object_spread({}, prevState), {
268
+ thumbPosition: newThumbPosition,
269
+ isVisible: true
270
+ });
271
+ });
272
+ showScrollbarWithDelay();
273
+ };
274
+ useEffect(function() {
275
+ var container = containerRef.current;
276
+ if (!container) return;
277
+ if (!isInitializedRef.current) {
278
+ updateScrollbar();
279
+ isInitializedRef.current = true;
280
+ }
281
+ container.addEventListener('scroll', handleScroll);
282
+ container.addEventListener('mouseenter', handleMouseEnter);
283
+ var resizeObserver = new ResizeObserver(function() {
284
+ updateScrollbar();
285
+ });
286
+ if (contentRef.current) {
287
+ resizeObserver.observe(contentRef.current);
288
+ }
289
+ return function() {
290
+ container.removeEventListener('scroll', handleScroll);
291
+ container.removeEventListener('mouseenter', handleMouseEnter);
292
+ resizeObserver.disconnect();
293
+ clearHideTimeout();
294
+ };
295
+ }, []);
296
+ useEffect(function() {
297
+ updateScrollbar();
298
+ }, [
299
+ children,
300
+ offset
301
+ ]);
302
+ var _obj;
303
+ return /*#__PURE__*/ React.createElement(Root, _object_spread({
304
+ view: view,
305
+ size: size,
306
+ className: cls(classes.scrollBarRoot, className),
307
+ ref: ref
308
+ }, rest), /*#__PURE__*/ React.createElement(StyledScrollBar, {
309
+ className: cls((_obj = {}, _define_property(_obj, classes.scrollBarVisible, scrollbarState.isVisible), _define_property(_obj, classes.scrollBarDragging, scrollbarState.isDragging), _obj)),
310
+ style: _object_spread_props(_object_spread({}, style), {
311
+ '--scrollbar-offset-top': parsedOffset.top,
312
+ '--scrollbar-offset-right': parsedOffset.right,
313
+ '--scrollbar-offset-bottom': parsedOffset.bottom,
314
+ '--scrollbar-offset-left': parsedOffset.left
315
+ }),
316
+ "data-placement": placement,
317
+ "data-size": size,
318
+ "data-view": view
319
+ }, /*#__PURE__*/ React.createElement(StyledContainer, {
320
+ ref: containerRef,
321
+ className: classes.scrollBarContainer,
322
+ "data-placement": placement
323
+ }, /*#__PURE__*/ React.createElement(StyledContent, {
324
+ ref: contentRef,
325
+ className: classes.scrollBarContent
326
+ }, children)), /*#__PURE__*/ React.createElement(StyledTrack, {
327
+ ref: trackRef,
328
+ className: cls(classes.scrollBarTrack, _define_property({}, classes.scrollBarTrackVisible, scrollbarState.isVisible)),
329
+ "data-placement": placement,
330
+ onMouseDown: handleTrackClick
331
+ }, /*#__PURE__*/ React.createElement(StyledThumb, {
332
+ ref: thumbRef,
333
+ className: classes.scrollBarThumb,
334
+ style: {
335
+ height: "".concat(scrollbarState.thumbHeight, "px"),
336
+ top: "".concat(scrollbarState.thumbPosition, "px")
337
+ },
338
+ onMouseDown: handleScrollbarDrag
339
+ }))));
340
+ });
341
+ };
342
+ export var scrollbarConfig = {
343
+ name: 'Scrollbar',
344
+ tag: 'div',
345
+ layout: scrollbarRoot,
346
+ base: base,
347
+ variations: {
348
+ view: {
349
+ css: viewCSS
350
+ },
351
+ size: {
352
+ css: sizeCSS
353
+ }
354
+ },
355
+ defaults: {
356
+ size: 'm',
357
+ view: 'default'
358
+ }
359
+ };