@alfalab/core-components-modal 7.0.15 → 8.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 (145) hide show
  1. package/Component.desktop.d.ts +0 -1
  2. package/Component.desktop.js +1 -2
  3. package/Component.js +3 -3
  4. package/Component.mobile.d.ts +0 -1
  5. package/Component.mobile.js +1 -2
  6. package/Component.responsive.d.ts +0 -1
  7. package/Component.responsive.js +1 -2
  8. package/components/content/Component.js +3 -3
  9. package/components/content/desktop.css +7 -7
  10. package/components/content/index.css +4 -4
  11. package/components/content/mobile.css +3 -3
  12. package/components/footer/Component.js +4 -4
  13. package/components/footer/desktop.css +9 -9
  14. package/components/footer/index.css +4 -4
  15. package/components/footer/layout.css +29 -29
  16. package/components/footer/mobile.css +3 -3
  17. package/components/header/Component.js +3 -3
  18. package/components/header/desktop.css +15 -15
  19. package/components/header/index.css +4 -4
  20. package/components/header/mobile.css +4 -4
  21. package/cssm/Component.desktop.d.ts +0 -1
  22. package/cssm/Component.desktop.js +1 -2
  23. package/cssm/Component.mobile.d.ts +0 -1
  24. package/cssm/Component.mobile.js +1 -2
  25. package/cssm/Component.responsive.d.ts +0 -1
  26. package/cssm/Component.responsive.js +1 -2
  27. package/cssm/desktop.d.ts +1 -1
  28. package/cssm/desktop.js +1 -1
  29. package/cssm/index.d.ts +2 -3
  30. package/cssm/index.js +4 -5
  31. package/cssm/mobile.d.ts +1 -1
  32. package/cssm/mobile.js +1 -1
  33. package/cssm/shared.d.ts +1 -0
  34. package/cssm/shared.js +10 -0
  35. package/desktop.css +9 -9
  36. package/desktop.d.ts +1 -1
  37. package/desktop.js +1 -1
  38. package/esm/Component.desktop.d.ts +0 -1
  39. package/esm/Component.desktop.js +1 -2
  40. package/esm/Component.js +3 -3
  41. package/esm/Component.mobile.d.ts +0 -1
  42. package/esm/Component.mobile.js +1 -2
  43. package/esm/Component.responsive.d.ts +0 -1
  44. package/esm/Component.responsive.js +1 -2
  45. package/esm/components/content/Component.js +3 -3
  46. package/esm/components/content/desktop.css +7 -7
  47. package/esm/components/content/index.css +4 -4
  48. package/esm/components/content/mobile.css +3 -3
  49. package/esm/components/footer/Component.js +4 -4
  50. package/esm/components/footer/desktop.css +9 -9
  51. package/esm/components/footer/index.css +4 -4
  52. package/esm/components/footer/layout.css +29 -29
  53. package/esm/components/footer/mobile.css +3 -3
  54. package/esm/components/header/Component.js +3 -3
  55. package/esm/components/header/desktop.css +15 -15
  56. package/esm/components/header/index.css +4 -4
  57. package/esm/components/header/mobile.css +4 -4
  58. package/esm/desktop.css +9 -9
  59. package/esm/desktop.d.ts +1 -1
  60. package/esm/desktop.js +1 -1
  61. package/esm/index.d.ts +2 -3
  62. package/esm/index.js +4 -4
  63. package/esm/mobile.css +2 -2
  64. package/esm/mobile.d.ts +1 -1
  65. package/esm/mobile.js +1 -1
  66. package/esm/shared.d.ts +1 -0
  67. package/esm/shared.js +2 -0
  68. package/esm/transitions.css +8 -8
  69. package/index.d.ts +2 -3
  70. package/index.js +4 -5
  71. package/mobile.css +2 -2
  72. package/mobile.d.ts +1 -1
  73. package/mobile.js +1 -1
  74. package/modern/Component.desktop.d.ts +0 -1
  75. package/modern/Component.desktop.js +1 -2
  76. package/modern/Component.js +3 -3
  77. package/modern/Component.mobile.d.ts +0 -1
  78. package/modern/Component.mobile.js +1 -2
  79. package/modern/Component.responsive.d.ts +0 -1
  80. package/modern/Component.responsive.js +1 -2
  81. package/modern/components/content/Component.js +3 -3
  82. package/modern/components/content/desktop.css +7 -7
  83. package/modern/components/content/index.css +4 -4
  84. package/modern/components/content/mobile.css +3 -3
  85. package/modern/components/footer/Component.js +4 -4
  86. package/modern/components/footer/desktop.css +9 -9
  87. package/modern/components/footer/index.css +4 -4
  88. package/modern/components/footer/layout.css +29 -29
  89. package/modern/components/footer/mobile.css +3 -3
  90. package/modern/components/header/Component.js +3 -3
  91. package/modern/components/header/desktop.css +15 -15
  92. package/modern/components/header/index.css +4 -4
  93. package/modern/components/header/mobile.css +4 -4
  94. package/modern/desktop.css +9 -9
  95. package/modern/desktop.d.ts +1 -1
  96. package/modern/desktop.js +1 -1
  97. package/modern/index.d.ts +2 -3
  98. package/modern/index.js +4 -4
  99. package/modern/mobile.css +2 -2
  100. package/modern/mobile.d.ts +1 -1
  101. package/modern/mobile.js +1 -1
  102. package/modern/shared.d.ts +1 -0
  103. package/modern/shared.js +2 -0
  104. package/modern/transitions.css +8 -8
  105. package/package.json +27 -3
  106. package/shared.d.ts +1 -0
  107. package/shared.js +10 -0
  108. package/src/Component.desktop.tsx +20 -0
  109. package/src/Component.mobile.tsx +17 -0
  110. package/src/Component.responsive.tsx +35 -0
  111. package/src/Component.tsx +93 -0
  112. package/src/Context.tsx +3 -0
  113. package/src/ResponsiveContext.tsx +8 -0
  114. package/src/components/content/Component.tsx +29 -0
  115. package/src/components/content/desktop.module.css +13 -0
  116. package/src/components/content/index.module.css +16 -0
  117. package/src/components/content/mobile.module.css +9 -0
  118. package/src/components/footer/Component.tsx +69 -0
  119. package/src/components/footer/desktop.module.css +22 -0
  120. package/src/components/footer/index.module.css +17 -0
  121. package/src/components/footer/layout.module.css +86 -0
  122. package/src/components/footer/mobile.module.css +9 -0
  123. package/src/components/header/Component.tsx +60 -0
  124. package/src/components/header/desktop.module.css +42 -0
  125. package/src/components/header/index.module.css +15 -0
  126. package/src/components/header/mobile.module.css +18 -0
  127. package/src/desktop.module.css +38 -0
  128. package/src/desktop.ts +2 -0
  129. package/src/index.ts +2 -0
  130. package/src/mobile.module.css +7 -0
  131. package/src/mobile.ts +2 -0
  132. package/src/shared.ts +1 -0
  133. package/src/transitions.module.css +24 -0
  134. package/src/typings.ts +63 -0
  135. package/src/utils.ts +90 -0
  136. package/src/vars.css +47 -0
  137. package/transitions.css +8 -8
  138. package/cssm/responsive.d.ts +0 -2
  139. package/cssm/responsive.js +0 -35
  140. package/esm/responsive.d.ts +0 -2
  141. package/esm/responsive.js +0 -14
  142. package/modern/responsive.d.ts +0 -2
  143. package/modern/responsive.js +0 -13
  144. package/responsive.d.ts +0 -2
  145. package/responsive.js +0 -22
package/src/utils.ts ADDED
@@ -0,0 +1,90 @@
1
+ export function isScrolledToTop(target: HTMLElement) {
2
+ return target.scrollTop === 0;
3
+ }
4
+
5
+ export function isScrolledToBottom(target: HTMLElement) {
6
+ return target.scrollHeight - target.offsetHeight === target.scrollTop;
7
+ }
8
+
9
+ export function hasScrollbar(target: HTMLElement) {
10
+ return target.scrollHeight > target.clientHeight;
11
+ }
12
+
13
+ const getScrollbarSize = () => {
14
+ const scrollDiv = document.createElement('div');
15
+
16
+ scrollDiv.style.width = '99px';
17
+ scrollDiv.style.height = '99px';
18
+ scrollDiv.style.position = 'absolute';
19
+ scrollDiv.style.top = '-9999px';
20
+ scrollDiv.style.overflow = 'scroll';
21
+
22
+ document.body.appendChild(scrollDiv);
23
+ const scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
24
+
25
+ document.body.removeChild(scrollDiv);
26
+
27
+ return scrollbarSize;
28
+ };
29
+
30
+ const isOverflowing = (container: Element) => {
31
+ if (document.body === container) {
32
+ return window.innerWidth > document.documentElement.clientWidth;
33
+ }
34
+
35
+ return container.scrollHeight > container.clientHeight;
36
+ };
37
+
38
+ const getPaddingRight = (node: Element) =>
39
+ parseInt(window.getComputedStyle(node).paddingRight, 10) || 0;
40
+
41
+ export const handleContainer = (container: HTMLElement) => {
42
+ const restoreStyle: Array<{
43
+ value: string;
44
+ key: string;
45
+ el: HTMLElement;
46
+ }> = [];
47
+
48
+ if (isOverflowing(container)) {
49
+ // Вычисляет размер до применения `overflow hidden` для избежания скачков
50
+ const scrollbarSize = getScrollbarSize();
51
+
52
+ restoreStyle.push({
53
+ value: container.style.paddingRight,
54
+ key: 'padding-right',
55
+ el: container,
56
+ });
57
+ // Вычисляем стили, чтобы получить реальный `padding` c шириной сколлбара
58
+ // eslint-disable-next-line no-param-reassign
59
+ container.style.paddingRight = `${getPaddingRight(container) + scrollbarSize}px`;
60
+ }
61
+
62
+ const parent = container.parentElement;
63
+ const scrollContainer =
64
+ // TODO: заменить на optional chaining
65
+ parent &&
66
+ parent.nodeName === 'HTML' &&
67
+ window.getComputedStyle(parent).overflowY === 'scroll'
68
+ ? parent
69
+ : container;
70
+
71
+ // Блокируем скролл даже если отсутствует скроллбар
72
+ if (scrollContainer.style.overflow !== 'hidden') {
73
+ restoreStyle.push({
74
+ value: scrollContainer.style.overflow,
75
+ key: 'overflow',
76
+ el: scrollContainer,
77
+ });
78
+ }
79
+ scrollContainer.style.overflow = 'hidden';
80
+
81
+ return () => {
82
+ restoreStyle.forEach(({ value, el, key }) => {
83
+ if (value) {
84
+ el.style.setProperty(key, value);
85
+ } else {
86
+ el.style.removeProperty(key);
87
+ }
88
+ });
89
+ };
90
+ };
package/src/vars.css ADDED
@@ -0,0 +1,47 @@
1
+ @import '@alfalab/core-components-themes/src/default.css';
2
+
3
+ :root {
4
+ --modal-border-radius: var(--border-radius-l);
5
+ --modal-vertical-padding: var(--gap-3xl);
6
+ --modal-header-background: var(--color-light-bg-primary);
7
+ --modal-footer-background: var(--color-light-bg-primary);
8
+ --modal-footer-default-gap: var(--gap-m);
9
+
10
+ /* sizes */
11
+ --modal-s-width: 500px;
12
+ --modal-m-width: 600px;
13
+ --modal-l-width: 800px;
14
+ --modal-xl-width: 1140px;
15
+
16
+ /* paddings */
17
+ --modal-s-header-paddings: 28px 28px 0;
18
+ --modal-s-content-paddings: var(--gap-3xl) var(--gap-3xl) 0;
19
+ --modal-s-content-only-bottom-padding: var(--gap-3xl);
20
+ --modal-s-footer-paddings: var(--gap-xl) var(--gap-3xl) var(--gap-3xl);
21
+
22
+ /* scroll */
23
+ --modal-header-highlight-background: var(--color-light-bg-primary);
24
+ --modal-footer-highlight-background: var(--color-light-bg-primary);
25
+ --modal-header-highlight-box-shadow: 0 1px 0 0 var(--color-light-border-secondary);
26
+ --modal-footer-highlight-box-shadow: 0 -1px 0 0 var(--color-light-border-secondary);
27
+
28
+ /* desktop */
29
+ --modal-s-header-desktop-content-paddings: var(--gap-s);
30
+ --modal-s-header-desktop-font-size: 20px;
31
+ --modal-s-header-desktop-line-height: 26px;
32
+ --modal-l-header-desktop-content-paddings: 6px var(--gap-s) var(--gap-m);
33
+ --modal-l-header-desktop-font-size: 30px;
34
+ --modal-l-header-desktop-line-height: 36px;
35
+ --modal-header-desktop-font-weight: bold;
36
+ --modal-header-desktop-font-family: var(--font-family-system);
37
+
38
+ /* mobile */
39
+ --modal-header-mobile-content-paddings: var(--gap-s) var(--gap-xs);
40
+ --modal-header-mobile-font-size: 18px;
41
+ --modal-header-mobile-line-height: 24px;
42
+ --modal-header-mobile-font-family: var(--font-family-system);
43
+ --modal-header-mobile-font-weight: bold;
44
+
45
+ /* paddings */
46
+ --modal-header-mobile-paddings: var(--gap-2xs) var(--gap-xs);
47
+ }
package/transitions.css CHANGED
@@ -1,24 +1,24 @@
1
- /* hash: j3bwr */
2
- .modal__appear_moxsl,
3
- .modal__enter_moxsl {
1
+ /* hash: 14o36 */
2
+ .modal__appear_e1pnc,
3
+ .modal__enter_e1pnc {
4
4
  opacity: 0;
5
5
  transform: translateY(15px);
6
6
  }
7
7
 
8
- .modal__appearActive_moxsl,
9
- .modal__enterActive_moxsl {
8
+ .modal__appearActive_e1pnc,
9
+ .modal__enterActive_e1pnc {
10
10
  opacity: 1;
11
11
  transform: translateY(0);
12
12
  transition: opacity 200ms ease-in, transform 200ms ease-in;
13
13
  }
14
14
 
15
- .modal__exit_moxsl {
15
+ .modal__exit_e1pnc {
16
16
  opacity: 1;
17
17
  transform: translateY(0);
18
18
  }
19
19
 
20
- .modal__exitActive_moxsl,
21
- .modal__exitDone_moxsl {
20
+ .modal__exitActive_e1pnc,
21
+ .modal__exitDone_e1pnc {
22
22
  opacity: 0;
23
23
  transform: translateY(15px);
24
24
  transition: opacity 200ms ease-out, transform 200ms ease-out;
@@ -1,2 +0,0 @@
1
- export * from "./Component.responsive";
2
- export {};
@@ -1,35 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var Component_responsive = require('./Component.responsive.js');
6
- require('tslib');
7
- require('react');
8
- require('@alfalab/core-components-navigation-bar/cssm');
9
- require('@alfalab/hooks');
10
- require('./components/content/Component.js');
11
- require('classnames');
12
- require('./Context.js');
13
- require('@alfalab/core-components-base-modal/cssm');
14
- require('./ResponsiveContext.js');
15
- require('./components/content/desktop.module.css');
16
- require('./components/content/index.module.css');
17
- require('./components/content/mobile.module.css');
18
- require('./components/footer/Component.js');
19
- require('./components/footer/desktop.module.css');
20
- require('./components/footer/index.module.css');
21
- require('./components/footer/layout.module.css');
22
- require('./components/footer/mobile.module.css');
23
- require('./components/header/Component.js');
24
- require('./components/header/desktop.module.css');
25
- require('./components/header/index.module.css');
26
- require('./components/header/mobile.module.css');
27
- require('./Component.js');
28
- require('react-merge-refs');
29
- require('./desktop.module.css');
30
- require('./mobile.module.css');
31
- require('./transitions.module.css');
32
-
33
-
34
-
35
- exports.ModalResponsive = Component_responsive.ModalResponsive;
@@ -1,2 +0,0 @@
1
- export * from "./Component.responsive";
2
- export {};
package/esm/responsive.js DELETED
@@ -1,14 +0,0 @@
1
- export { ModalResponsive } from './Component.responsive.js';
2
- import 'tslib';
3
- import 'react';
4
- import '@alfalab/core-components-navigation-bar/esm';
5
- import '@alfalab/hooks';
6
- import './components/content/Component.js';
7
- import 'classnames';
8
- import './Context.js';
9
- import '@alfalab/core-components-base-modal/esm';
10
- import './ResponsiveContext.js';
11
- import './components/footer/Component.js';
12
- import './components/header/Component.js';
13
- import './Component.js';
14
- import 'react-merge-refs';
@@ -1,2 +0,0 @@
1
- export * from "./Component.responsive";
2
- export {};
@@ -1,13 +0,0 @@
1
- export { ModalResponsive } from './Component.responsive.js';
2
- import 'react';
3
- import '@alfalab/core-components-navigation-bar/modern';
4
- import '@alfalab/hooks';
5
- import './components/content/Component.js';
6
- import 'classnames';
7
- import './Context.js';
8
- import '@alfalab/core-components-base-modal/modern';
9
- import './ResponsiveContext.js';
10
- import './components/footer/Component.js';
11
- import './components/header/Component.js';
12
- import './Component.js';
13
- import 'react-merge-refs';
package/responsive.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from "./Component.responsive";
2
- export {};
package/responsive.js DELETED
@@ -1,22 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var Component_responsive = require('./Component.responsive.js');
6
- require('tslib');
7
- require('react');
8
- require('@alfalab/core-components-navigation-bar');
9
- require('@alfalab/hooks');
10
- require('./components/content/Component.js');
11
- require('classnames');
12
- require('./Context.js');
13
- require('@alfalab/core-components-base-modal');
14
- require('./ResponsiveContext.js');
15
- require('./components/footer/Component.js');
16
- require('./components/header/Component.js');
17
- require('./Component.js');
18
- require('react-merge-refs');
19
-
20
-
21
-
22
- exports.ModalResponsive = Component_responsive.ModalResponsive;