@jetbrains/kotlin-web-site-ui 0.0.0-foundation-changes.1

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 (139) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/LICENSE.txt +202 -0
  3. package/README.md +16 -0
  4. package/out/blocks/formik-wrapper/index.css +8 -0
  5. package/out/blocks/formik-wrapper/index.js +4 -0
  6. package/out/blocks/formik-wrapper/input.js +39 -0
  7. package/out/blocks/formik-wrapper/privacy-checkbox.js +48 -0
  8. package/out/blocks/formik-wrapper/privacy-notice.js +40 -0
  9. package/out/blocks/formik-wrapper/privacy-notice.module.pcss.js +6 -0
  10. package/out/blocks/formik-wrapper/submit-button.js +21 -0
  11. package/out/components/breakpoints/constants.js +20 -0
  12. package/out/components/breakpoints/hooks.js +32 -0
  13. package/out/components/breakpoints/index.js +2 -0
  14. package/out/components/breakpoints/media.pcss +14 -0
  15. package/out/components/cta-block/index.css +254 -0
  16. package/out/components/cta-block/index.js +7 -0
  17. package/out/components/cta-block/v1/cta-block.js +29 -0
  18. package/out/components/cta-block/v1/cta-block.module.pcss.js +8 -0
  19. package/out/components/footer/footer.js +55 -0
  20. package/out/components/footer/footer.module.pcss.js +13 -0
  21. package/out/components/footer/index.css +290 -0
  22. package/out/components/footer/index.js +3 -0
  23. package/out/components/footer/logo/jetbrains-logo.svg.js +38 -0
  24. package/out/components/footer/logo/logo.js +12 -0
  25. package/out/components/footer/logo/logo.module.pcss.js +4 -0
  26. package/out/components/footer/nav/nav-data.js +30 -0
  27. package/out/components/footer/nav/nav-item.js +27 -0
  28. package/out/components/footer/nav/nav-item.module.pcss.js +5 -0
  29. package/out/components/footer/nav/nav-list.js +15 -0
  30. package/out/components/footer/nav/nav-list.module.pcss.js +4 -0
  31. package/out/components/footer/social-list/social-data.js +38 -0
  32. package/out/components/footer/social-list/social-item/social-item.js +21 -0
  33. package/out/components/footer/social-list/social-item/social-item.module.pcss.js +5 -0
  34. package/out/components/footer/social-list/social-list.js +13 -0
  35. package/out/components/footer/social-list/social-list.module.pcss.js +4 -0
  36. package/out/components/footer/social-list/svg/github-logo.svg.js +35 -0
  37. package/out/components/footer/social-list/svg/reddit-logo.svg.js +33 -0
  38. package/out/components/footer/social-list/svg/slack-logo.svg.js +33 -0
  39. package/out/components/footer/social-list/svg/stackoverflow-logo.svg.js +36 -0
  40. package/out/components/footer/social-list/svg/twitter-logo.svg.js +33 -0
  41. package/out/components/footer/social-list/svg/youtube-logo.svg.js +35 -0
  42. package/out/components/grid/index.css +1081 -0
  43. package/out/components/grid/index.js +1 -0
  44. package/out/components/header/consts.js +3 -0
  45. package/out/components/header/full-search/chapters/chapters.js +59 -0
  46. package/out/components/header/full-search/chapters/chapters.module.pcss.js +12 -0
  47. package/out/components/header/full-search/empty/empty.js +22 -0
  48. package/out/components/header/full-search/empty/empty.module.pcss.js +6 -0
  49. package/out/components/header/full-search/empty/full-search-empty.svg.js +1539 -0
  50. package/out/components/header/full-search/full-search.js +115 -0
  51. package/out/components/header/full-search/full-search.module.pcss.js +10 -0
  52. package/out/components/header/full-search/hit-list/get-extended-hits.js +55 -0
  53. package/out/components/header/full-search/hit-list/hit-list.js +49 -0
  54. package/out/components/header/full-search/hit-list/hit-list.module.pcss.js +6 -0
  55. package/out/components/header/full-search/loading/loading.js +13 -0
  56. package/out/components/header/full-search/loading/loading.module.pcss.js +4 -0
  57. package/out/components/header/full-search/results-list/results-list.js +25 -0
  58. package/out/components/header/header.js +121 -0
  59. package/out/components/header/header.module.pcss.js +5 -0
  60. package/out/components/header/horizontal-menu/horizontal-menu.js +101 -0
  61. package/out/components/header/horizontal-menu/horizontal-menu.module.pcss.js +16 -0
  62. package/out/components/header/index.css +949 -0
  63. package/out/components/header/index.js +4 -0
  64. package/out/components/header/is-macos.js +5 -0
  65. package/out/components/header/key-codes.js +3 -0
  66. package/out/components/header/logo-large/kotlin-logo-large.svg.js +55 -0
  67. package/out/components/header/logo-large/logo-large.js +34 -0
  68. package/out/components/header/logo-large/logo-large.module.pcss.js +6 -0
  69. package/out/components/header/logo-small/kotlin-logo-small.svg.js +49 -0
  70. package/out/components/header/logo-small/logo-small.js +27 -0
  71. package/out/components/header/logo-small/logo-small.module.pcss.js +7 -0
  72. package/out/components/header/menu-popup/menu-button/menu-button.js +23 -0
  73. package/out/components/header/menu-popup/menu-button/menu-button.module.pcss.js +4 -0
  74. package/out/components/header/menu-popup/menu-list/menu-list.js +33 -0
  75. package/out/components/header/menu-popup/menu-list/menu-list.module.pcss.js +4 -0
  76. package/out/components/header/menu-popup/menu-list-item/menu-list-item.js +28 -0
  77. package/out/components/header/menu-popup/menu-list-item/menu-list-item.module.pcss.js +7 -0
  78. package/out/components/header/menu-popup/menu-popup.js +55 -0
  79. package/out/components/header/menu-popup/menu-popup.module.pcss.js +5 -0
  80. package/out/components/header/nav-scheme.js +133 -0
  81. package/out/components/header/quick-search/empty/empty.js +17 -0
  82. package/out/components/header/quick-search/empty/empty.module.pcss.js +5 -0
  83. package/out/components/header/quick-search/list/list.js +37 -0
  84. package/out/components/header/quick-search/list/list.module.pcss.js +7 -0
  85. package/out/components/header/quick-search/loading/loading.js +14 -0
  86. package/out/components/header/quick-search/loading/loading.module.pcss.js +4 -0
  87. package/out/components/header/quick-search/quick-search.js +48 -0
  88. package/out/components/header/quick-search/quick-search.module.pcss.js +5 -0
  89. package/out/components/header/quick-search/result/result.js +30 -0
  90. package/out/components/header/quick-search/result/result.module.pcss.js +6 -0
  91. package/out/components/header/search-box/search-box.js +76 -0
  92. package/out/components/header/search-box/search-box.module.pcss.js +7 -0
  93. package/out/components/header/search-button/search-button.js +32 -0
  94. package/out/components/header/search-button/search-button.module.pcss.js +5 -0
  95. package/out/components/header/search-button/search.svg.js +34 -0
  96. package/out/components/header/search-wrapper/init-search.js +60 -0
  97. package/out/components/header/search-wrapper/search-const.js +13 -0
  98. package/out/components/header/search-wrapper/search-context.js +18 -0
  99. package/out/components/header/search-wrapper/search-with-algolia.js +58 -0
  100. package/out/components/header/search-wrapper/search-wrapper.js +40 -0
  101. package/out/components/header/search-wrapper/use-search.js +85 -0
  102. package/out/components/layout/index.css +52 -0
  103. package/out/components/layout/index.js +1 -0
  104. package/out/components/popup/index.css +35 -0
  105. package/out/components/popup/index.js +3 -0
  106. package/out/components/popup/popup.js +55 -0
  107. package/out/components/popup/popup.module.pcss.js +6 -0
  108. package/out/components/quotes-slider/index.css +83 -0
  109. package/out/components/quotes-slider/index.js +3 -0
  110. package/out/components/quotes-slider/quote.svg.js +33 -0
  111. package/out/components/quotes-slider/quotes-slider.js +85 -0
  112. package/out/components/quotes-slider/quotes-slider.module.pcss.js +13 -0
  113. package/out/components/top-menu/horizontal-menu/horizontal-menu.js +44 -0
  114. package/out/components/top-menu/horizontal-menu/horizontal-menu.module.pcss.js +6 -0
  115. package/out/components/top-menu/index.css +232 -0
  116. package/out/components/top-menu/index.js +3 -0
  117. package/out/components/top-menu/top-menu.js +54 -0
  118. package/out/components/top-menu/top-menu.module.pcss.js +6 -0
  119. package/out/components/top-menu/vertical-menu/arrow-dropdown-icon.svg.js +34 -0
  120. package/out/components/top-menu/vertical-menu/vertical-menu.js +129 -0
  121. package/out/components/top-menu/vertical-menu/vertical-menu.module.pcss.js +14 -0
  122. package/out/components/typography/create-text-cn.js +26 -0
  123. package/out/components/typography/hooks.js +6 -0
  124. package/out/components/typography/index.css +192 -0
  125. package/out/components/typography/index.js +3 -0
  126. package/out/components/youtube-player/index.css +135 -0
  127. package/out/components/youtube-player/index.js +3 -0
  128. package/out/components/youtube-player/loading_24.svg.js +31 -0
  129. package/out/components/youtube-player/play_24.svg.js +31 -0
  130. package/out/components/youtube-player/utils.js +28 -0
  131. package/out/components/youtube-player/youtube-player.js +145 -0
  132. package/out/components/youtube-player/youtube-player.module.pcss.js +16 -0
  133. package/out/packages/data-services/index.js +9 -0
  134. package/out/packages/data-services/marketo-submiter.js +62 -0
  135. package/out/packages/data-services/privacy-consent-ids.json.js +5 -0
  136. package/out/packages/data-services/privacy-consent-service.js +44 -0
  137. package/out/packages/data-services/urls.js +4 -0
  138. package/out/svg/kotlin_64.svg +10 -0
  139. package/package.json +141 -0
@@ -0,0 +1,129 @@
1
+ import React__default, { useState, useCallback, useEffect, useRef, useLayoutEffect } from 'react';
2
+ import classNames from 'classnames';
3
+ import styles from './vertical-menu.module.pcss.js';
4
+ import { useTextStyles } from '@rescui/typography';
5
+ import SvgArrowDropdownIcon from './arrow-dropdown-icon.svg.js';
6
+ import { useTheme } from '@rescui/ui-contexts';
7
+ import Button from '@rescui/button';
8
+ import { CloseIcon } from '@rescui/icons';
9
+ import { createPortal } from 'react-dom';
10
+ import { RemoveScrollBar } from 'react-remove-scroll-bar';
11
+
12
+ const VerticalMenu = ({
13
+ homeUrl,
14
+ title,
15
+ mobileTitle = 'Overview',
16
+ items,
17
+ activeIndex,
18
+ linkHandler,
19
+ mobileOverview = true,
20
+ topMenuRef
21
+ }) => {
22
+ const textCn = useTextStyles();
23
+
24
+ const _items = (mobileOverview ? [{
25
+ title: mobileTitle,
26
+ url: homeUrl
27
+ }] : []).concat(items);
28
+
29
+ const _activeIndex = mobileOverview ? activeIndex + 1 : activeIndex;
30
+
31
+ const activeItem = _items[_activeIndex];
32
+ const [isExpanded, setIsExpanded] = useState(false);
33
+ const [portalRoot, setPortalRoot] = useState(null);
34
+ const handleOpen = useCallback(() => {
35
+ setIsExpanded(true);
36
+ }, []);
37
+ const handleClose = useCallback(() => {
38
+ setIsExpanded(false);
39
+ }, []);
40
+ useEffect(() => {
41
+ if (typeof document !== `undefined`) {
42
+ setPortalRoot(document.body);
43
+ }
44
+ }, []);
45
+ return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
46
+ className: classNames(styles.dropdownMenu, {
47
+ [styles.dropdownMenuExpanded]: isExpanded
48
+ })
49
+ }, React__default.createElement("button", {
50
+ className: classNames(styles.button),
51
+ "aria-haspopup": "true",
52
+ onClick: handleOpen
53
+ }, React__default.createElement("span", {
54
+ className: textCn('rs-text-2', {
55
+ hardness: 'hard'
56
+ })
57
+ }, activeItem.title), React__default.createElement(SvgArrowDropdownIcon, {
58
+ className: styles.icon
59
+ })), !!portalRoot && isExpanded && createPortal(React__default.createElement(VerticalMenuDropDown, {
60
+ title: title,
61
+ activeIndex: _activeIndex,
62
+ items: _items,
63
+ onClose: handleClose,
64
+ linkHandler: linkHandler,
65
+ topMenuRef: topMenuRef
66
+ }), portalRoot)));
67
+ };
68
+
69
+ const VerticalMenuDropDown = ({
70
+ title,
71
+ onClose,
72
+ items,
73
+ linkHandler,
74
+ activeIndex,
75
+ topMenuRef
76
+ }) => {
77
+ const textCn = useTextStyles();
78
+ const theme = useTheme();
79
+ const navRef = useRef(null);
80
+ const [navStyle, setNavStyle] = useState({});
81
+ const [topMenuSticky, setTopMenuSticky] = useState(false);
82
+ useEffect(() => {
83
+ const topMenuTopOffset = topMenuRef?.current?.getBoundingClientRect().top;
84
+
85
+ if (topMenuTopOffset !== undefined) {
86
+ setTopMenuSticky(topMenuTopOffset === 0);
87
+ }
88
+ }, []);
89
+ useLayoutEffect(() => {
90
+ if (topMenuRef.current) {
91
+ setNavStyle({
92
+ top: topMenuRef.current.getBoundingClientRect().top
93
+ });
94
+ }
95
+ }, [topMenuRef]);
96
+ return React__default.createElement(React__default.Fragment, null, React__default.createElement(RemoveScrollBar, {
97
+ gapMode: "margin"
98
+ }), React__default.createElement("nav", {
99
+ ref: navRef,
100
+ style: navStyle,
101
+ className: classNames(styles.dropdownList, {
102
+ [styles.dropdownListDarkTheme]: theme === 'dark'
103
+ })
104
+ }, React__default.createElement("div", {
105
+ className: classNames(styles.dropdownHeader, {
106
+ [styles.stickyHeader]: topMenuSticky
107
+ })
108
+ }, React__default.createElement("div", {
109
+ className: textCn('rs-text-2')
110
+ }, title), React__default.createElement(Button, {
111
+ mode: 'clear',
112
+ size: 'l',
113
+ icon: React__default.createElement(CloseIcon, null),
114
+ onClick: onClose
115
+ })), items.map((item, index) => React__default.createElement("a", {
116
+ key: item.url,
117
+ href: item.url,
118
+ className: classNames(styles.dropdownItem, textCn('rs-text-1', {
119
+ hardness: 'hard'
120
+ }), {
121
+ [styles.dropdownItemActive]: index === activeIndex
122
+ }),
123
+ onClick: event => linkHandler?.(event, item.url),
124
+ target: item.isExternal ? '_blank' : undefined,
125
+ rel: "noreferrer"
126
+ }, item.title))));
127
+ };
128
+
129
+ export { VerticalMenu };
@@ -0,0 +1,14 @@
1
+ var styles = {
2
+ "verticalMenu": "ktl-vertical-menu-module_vertical-menu_aLIbw",
3
+ "button": "ktl-vertical-menu-module_button_zqr20",
4
+ "buttonText": "ktl-vertical-menu-module_button-text_aXith",
5
+ "icon": "ktl-vertical-menu-module_icon_-Ieat",
6
+ "dropdownHeader": "ktl-vertical-menu-module_dropdown-header_77lTy",
7
+ "stickyHeader": "ktl-vertical-menu-module_sticky-header_BlLzL",
8
+ "dropdownList": "ktl-vertical-menu-module_dropdown-list_N3KWV",
9
+ "dropdownItem": "ktl-vertical-menu-module_dropdown-item_XLfp4",
10
+ "dropdownItemActive": "ktl-vertical-menu-module_dropdown-item-active_iBUbj",
11
+ "verticalMenuExpanded": "ktl-vertical-menu-module_vertical-menu-expanded_kFaaI",
12
+ "dropdownListDarkTheme": "ktl-vertical-menu-module_dropdown-list-dark-theme_A1-Bw"
13
+ };
14
+ export { styles as default };
@@ -0,0 +1,26 @@
1
+ import bemCnFast from 'bem-cn-fast';
2
+
3
+ function createTextCn(theme) {
4
+ if (!theme) {
5
+ throw new TypeError('theme argument is required');
6
+ }
7
+
8
+ function textCn(type = 'ktl-text-1', params = {
9
+ paragraphOffsetAuto: false,
10
+ hardness: undefined,
11
+ external: false,
12
+ mode: undefined
13
+ }) {
14
+ return bemCnFast(type)({
15
+ 'paragraph-offset-auto': params.paragraphOffsetAuto,
16
+ hardness: params.hardness,
17
+ external: params.external,
18
+ mode: params.mode,
19
+ theme
20
+ });
21
+ }
22
+
23
+ return textCn;
24
+ }
25
+
26
+ export { createTextCn };
@@ -0,0 +1,6 @@
1
+ import { useTheme } from '@rescui/ui-contexts';
2
+ import { createTextCn } from './create-text-cn.js';
3
+
4
+ const useTextStyles = theme => createTextCn(useTheme(theme));
5
+
6
+ export { useTextStyles };
@@ -0,0 +1,192 @@
1
+ :root {
2
+ --ktl-light-grey: #f4f4f4;
3
+ --ktl-dark-100: rgba(39, 40, 44, 1);
4
+ --ktl-dark-bg-hard: rgba(27, 27, 27, 1);
5
+ --ktl-icon-color-dark: rgba(39, 40, 44, 0.75);
6
+ --ktl-color-white-light: rgba(255, 255, 255, 0.75);
7
+ --ktl-transition-xfast: 100ms;
8
+ --ktl-transition-fast: 300ms;
9
+ --ktl-color-primary-light-theme: #7f52ff;
10
+ --ktl-color-dark-40: rgba(39, 40, 44, 0.4);
11
+ --ktl-light-text-hard: rgba(39, 40, 44, 1);
12
+ --ktl-light-dark-20: rgba(39, 40, 44, 0.2);
13
+ --ktl-divider-color: rgba(25, 25, 28, .2);
14
+ --ktl-overlay-z-index: 900;
15
+ --ktl-top-menu-z-index: 905;
16
+ --ktl-header-z-index: 906;
17
+ --ktl-mobile-dropdown-list-z-index: 907;
18
+ --ktl-header-height-mobile: 52px;
19
+ --ktl-font-family-inter: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Droid Sans', 'Helvetica Neue', Arial, sans-serif;
20
+ --rs-font-family-ui: var(--ktl-font-family-inter);
21
+ }
22
+
23
+ :root {
24
+ --ktl-box-block-s: 4px;
25
+ --ktl-box-block-m: 8px;
26
+ --ktl-box-block-l: 16px;
27
+
28
+ --ktl-box-section-s: 24px;
29
+ --ktl-box-section-m: 32px;
30
+ --ktl-box-section-l: 48px;
31
+
32
+ --ktl-box-page-s: 64px;
33
+ --ktl-box-page-m: 72px;
34
+ --ktl-box-page-l: 96px;
35
+ }
36
+
37
+ .ktl-hero {
38
+ font-family: var(--ktl-font-family-inter);
39
+ color: var(--ktl-light-text-hard);
40
+ font-weight: normal;
41
+ font-size: 42px;
42
+ line-height: 48px;
43
+ letter-spacing: -1px;
44
+ margin: 0;
45
+ }
46
+
47
+ .ktl-hero_theme_dark {
48
+ color: #fff;
49
+ }
50
+
51
+ @media (min-width: 1200px) {
52
+
53
+ .ktl-hero {
54
+ font-size: 64px;
55
+ line-height: 72px;
56
+ letter-spacing: -3px
57
+ }
58
+ }
59
+
60
+ .ktl-h1 {
61
+ font-family: var(--ktl-font-family-inter);
62
+ color: var(--ktl-light-text-hard);
63
+ font-weight: normal;
64
+ font-size: 36px;
65
+ line-height: 44px;
66
+ letter-spacing: -1px;
67
+ margin: 0;
68
+ }
69
+
70
+ .ktl-h1_theme_dark {
71
+ color: #fff;
72
+ }
73
+
74
+ @media (min-width: 1200px) {
75
+
76
+ .ktl-h1 {
77
+ font-size: 43px;
78
+ line-height: 48px
79
+ }
80
+
81
+ }
82
+
83
+ .ktl-h2 {
84
+ font-family: var(--ktl-font-family-inter);
85
+ color: var(--ktl-light-text-hard);
86
+ font-weight: 500;
87
+ font-size: 24px;
88
+ line-height: 32px;
89
+ letter-spacing: -0.5px;
90
+ margin: 0;
91
+
92
+ }
93
+
94
+ .ktl-h2_theme_dark {
95
+ color: #fff;
96
+ }
97
+
98
+ @media (min-width: 1200px) {
99
+
100
+ .ktl-h2 {
101
+ font-size: 31px;
102
+ line-height: 40px
103
+
104
+ }
105
+
106
+ }
107
+
108
+ .ktl-subtitle {
109
+ font-family: var(--ktl-font-family-inter);
110
+ color: var(--ktl-light-text-hard);
111
+ font-weight: normal;
112
+ font-size: 20px;
113
+ line-height: 32px;
114
+ margin: 0;
115
+ }
116
+
117
+ .ktl-subtitle_theme_dark {
118
+ color: #fff;
119
+ }
120
+
121
+ @media (min-width: 1200px) {
122
+
123
+ .ktl-subtitle {
124
+ font-size: 31px;
125
+ line-height: 40px
126
+ }
127
+ }
128
+
129
+ .ktl-h3 {
130
+ font-family: var(--ktl-font-family-inter);
131
+ color: var(--ktl-light-text-hard);
132
+ font-weight: 600;
133
+ font-size: 20px;
134
+ line-height: 32px;
135
+ margin: 0;
136
+ }
137
+
138
+ .ktl-h3_theme_dark {
139
+ color: #fff;
140
+ }
141
+
142
+ .ktl-h4 {
143
+ font-family: var(--ktl-font-family-inter);
144
+ color: var(--ktl-light-text-hard);
145
+ font-weight: 600;
146
+ font-size: 16px;
147
+ line-height: 24px;
148
+ margin: 0;
149
+ }
150
+
151
+ .ktl-h4_theme_dark {
152
+ color: #fff;
153
+ }
154
+
155
+ .ktl-text-1 {
156
+ font-family: var(--ktl-font-family-inter);
157
+ color: var(--ktl-light-text-hard);
158
+ font-weight: normal;
159
+ font-size: 20px;
160
+ line-height: 32px;
161
+ margin: 0;
162
+ }
163
+
164
+ .ktl-text-1_theme_dark {
165
+ color: #fff;
166
+ }
167
+
168
+ .ktl-text-2 {
169
+ font-family: var(--ktl-font-family-inter);
170
+ color: var(--ktl-light-text-hard);
171
+ font-weight: normal;
172
+ font-size: 16px;
173
+ line-height: 24px;
174
+ margin: 0;
175
+ }
176
+
177
+ .ktl-text-2_theme_dark {
178
+ color: #fff;
179
+ }
180
+
181
+ .ktl-text-3 {
182
+ font-family: var(--ktl-font-family-inter);
183
+ color: var(--ktl-light-text-hard);
184
+ font-weight: normal;
185
+ font-size: 13px;
186
+ line-height: 20px;
187
+ margin: 0;
188
+ }
189
+
190
+ .ktl-text-3_theme_dark {
191
+ color: #fff;
192
+ }
@@ -0,0 +1,3 @@
1
+ import './index.css';
2
+ export { createTextCn } from './create-text-cn.js';
3
+ export { useTextStyles } from './hooks.js';
@@ -0,0 +1,135 @@
1
+ :root {
2
+ --ktl-light-grey: #f4f4f4;
3
+ --ktl-dark-100: rgba(39, 40, 44, 1);
4
+ --ktl-dark-bg-hard: rgba(27, 27, 27, 1);
5
+ --ktl-icon-color-dark: rgba(39, 40, 44, 0.75);
6
+ --ktl-color-white-light: rgba(255, 255, 255, 0.75);
7
+ --ktl-transition-xfast: 100ms;
8
+ --ktl-transition-fast: 300ms;
9
+ --ktl-color-primary-light-theme: #7f52ff;
10
+ --ktl-color-dark-40: rgba(39, 40, 44, 0.4);
11
+ --ktl-light-text-hard: rgba(39, 40, 44, 1);
12
+ --ktl-light-dark-20: rgba(39, 40, 44, 0.2);
13
+ --ktl-divider-color: rgba(25, 25, 28, .2);
14
+ --ktl-overlay-z-index: 900;
15
+ --ktl-top-menu-z-index: 905;
16
+ --ktl-header-z-index: 906;
17
+ --ktl-mobile-dropdown-list-z-index: 907;
18
+ --ktl-header-height-mobile: 52px;
19
+ --ktl-font-family-inter: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Droid Sans', 'Helvetica Neue', Arial, sans-serif;
20
+ --rs-font-family-ui: var(--ktl-font-family-inter);
21
+ }
22
+
23
+ :root {
24
+ --ktl-box-block-s: 4px;
25
+ --ktl-box-block-m: 8px;
26
+ --ktl-box-block-l: 16px;
27
+
28
+ --ktl-box-section-s: 24px;
29
+ --ktl-box-section-m: 32px;
30
+ --ktl-box-section-l: 48px;
31
+
32
+ --ktl-box-page-s: 64px;
33
+ --ktl-box-page-m: 72px;
34
+ --ktl-box-page-l: 96px;
35
+ }
36
+
37
+ .ktl-youtube-player-module_youtube-player_aSb0a {
38
+ position: relative;
39
+ width: 100%;
40
+ height: 100%;
41
+ background: black;
42
+ display: flex;
43
+ justify-content: center;
44
+ align-items: center;
45
+ cursor: pointer;
46
+ }
47
+
48
+ .ktl-youtube-player-module_preview_SuIdr img {
49
+ vertical-align: top;
50
+ }
51
+
52
+ .ktl-youtube-player-module_preview-playlist_k6-Zp {
53
+ width: 100%;
54
+ }
55
+
56
+ .ktl-youtube-player-module_preview-playlist_k6-Zp::before {
57
+ content: "";
58
+ display: block;
59
+ padding-bottom: 56.25%;
60
+ background: var(--ktl-dark-100);
61
+ }
62
+
63
+ .ktl-youtube-player-module_player_nH-tB {
64
+ position: absolute;
65
+ top: 0;
66
+ left: 0;
67
+ right: 0;
68
+ bottom: 0;
69
+ width: 100%;
70
+ height: 100%;
71
+ display: none;
72
+ }
73
+
74
+ .ktl-youtube-player-module_play-button_SNPG7 {
75
+ padding: 12px;
76
+ position: absolute;
77
+ top: calc(50% - 24px);
78
+ left: calc(50% - 24px);
79
+ border-radius: 50%;
80
+ border: none;
81
+ transition: color var(--ktl-transition-fast);
82
+ cursor: pointer;
83
+ outline: none;
84
+ height: 48px;
85
+ }
86
+
87
+ .ktl-youtube-player-module_play-button_white_jsj-J {
88
+ color: var(--ktl-dark-100);
89
+ background-color: #ffffff;
90
+ }
91
+
92
+ .ktl-youtube-player-module_play-button_black_N4JvM {
93
+ color: #ffffff;
94
+ background-color: var(--ktl-dark-100);
95
+ }
96
+
97
+ .ktl-youtube-player-module_play-button_primary_rk5oW {
98
+ color: #ffffff;
99
+ background: var(--ktl-color-primary-light-theme);
100
+ }
101
+
102
+ .ktl-youtube-player-module_hide_w9Dr2 {
103
+ display: none;
104
+ }
105
+
106
+ .ktl-youtube-player-module_image-preview_qXCFf {
107
+ display: block;
108
+ width: 100%;
109
+ }
110
+
111
+ .ktl-youtube-player-module_show-video_Y1Ri- .ktl-youtube-player-module_player_nH-tB {
112
+ display: block;
113
+ }
114
+
115
+ .ktl-youtube-player-module_show-video_Y1Ri- .ktl-youtube-player-module_image-preview_qXCFf {
116
+ opacity: 0;
117
+ }
118
+
119
+ .ktl-youtube-player-module_icon-loading_9jAhI {
120
+ -webkit-animation: ktl-youtube-player-module_icon-rotating_Zyb5v .7s linear infinite;
121
+ animation: ktl-youtube-player-module_icon-rotating_Zyb5v .7s linear infinite;
122
+ transform-origin: center center;
123
+ }
124
+
125
+ @-webkit-keyframes ktl-youtube-player-module_icon-rotating_Zyb5v {
126
+ to {
127
+ transform: rotate(360deg)
128
+ }
129
+ }
130
+
131
+ @keyframes ktl-youtube-player-module_icon-rotating_Zyb5v {
132
+ to {
133
+ transform: rotate(360deg)
134
+ }
135
+ }
@@ -0,0 +1,3 @@
1
+ import './index.css';
2
+ import { YoutubePlayer } from './youtube-player.js';
3
+ export { YoutubePlayer as default } from './youtube-player.js';
@@ -0,0 +1,31 @@
1
+ import * as React from 'react';
2
+
3
+ var _path;
4
+
5
+ function _extends() {
6
+ _extends = Object.assign || function (target) {
7
+ for (var i = 1; i < arguments.length; i++) {
8
+ var source = arguments[i];
9
+
10
+ for (var key in source) {
11
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
12
+ target[key] = source[key];
13
+ }
14
+ }
15
+ }
16
+
17
+ return target;
18
+ };
19
+
20
+ return _extends.apply(this, arguments);
21
+ }
22
+
23
+ const SvgLoading24 = props => /*#__PURE__*/React.createElement("svg", _extends({
24
+ xmlns: "http://www.w3.org/2000/svg",
25
+ width: 24,
26
+ height: 24
27
+ }, props), _path || (_path = /*#__PURE__*/React.createElement("path", {
28
+ d: "M12 3.25A8.76 8.76 0 0 0 3.25 12h1.5A7.25 7.25 0 1 1 12 19.25v1.5a8.75 8.75 0 1 0 0-17.5z"
29
+ })));
30
+
31
+ export { SvgLoading24 as default };
@@ -0,0 +1,31 @@
1
+ import * as React from 'react';
2
+
3
+ var _path;
4
+
5
+ function _extends() {
6
+ _extends = Object.assign || function (target) {
7
+ for (var i = 1; i < arguments.length; i++) {
8
+ var source = arguments[i];
9
+
10
+ for (var key in source) {
11
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
12
+ target[key] = source[key];
13
+ }
14
+ }
15
+ }
16
+
17
+ return target;
18
+ };
19
+
20
+ return _extends.apply(this, arguments);
21
+ }
22
+
23
+ const SvgPlay24 = props => /*#__PURE__*/React.createElement("svg", _extends({
24
+ xmlns: "http://www.w3.org/2000/svg",
25
+ width: 24,
26
+ height: 24
27
+ }, props), _path || (_path = /*#__PURE__*/React.createElement("path", {
28
+ d: "M19 12 8 4v16l11-8z"
29
+ })));
30
+
31
+ export { SvgPlay24 as default };
@@ -0,0 +1,28 @@
1
+ const API_URL = 'https://www.youtube.com/iframe_api';
2
+
3
+ function waitForYouTubePlayerApi() {
4
+ return new Promise(resolve => {
5
+ if (window.YT && window.YT.loaded) {
6
+ resolve();
7
+ } else {
8
+ window.onYouTubeIframeAPIReady = resolve;
9
+ }
10
+ });
11
+ }
12
+
13
+ function loadExternalScript(url) {
14
+ return new Promise((resolve, reject) => {
15
+ const script = document.createElement('script');
16
+ script.type = 'text/javascript';
17
+ script.async = true;
18
+ script.src = url;
19
+
20
+ script.onload = () => resolve();
21
+
22
+ script.onerror = () => reject();
23
+
24
+ document.head.appendChild(script);
25
+ });
26
+ }
27
+
28
+ export { API_URL, loadExternalScript, waitForYouTubePlayerApi };