@diplodoc/components 5.22.0 → 5.23.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 (143) hide show
  1. package/build/cjs/components/BackToTop/BackToTop.css.map +1 -1
  2. package/build/cjs/components/BookmarkButton/BookmarkButton.css.map +1 -1
  3. package/build/cjs/components/Breadcrumbs/Breadcrumbs.css.map +1 -1
  4. package/build/cjs/components/ContributorAvatars/ContributorAvatars.css.map +1 -1
  5. package/build/cjs/components/Contributors/Contributors.css.map +1 -1
  6. package/build/cjs/components/Control/Control.css.map +1 -1
  7. package/build/cjs/components/Controls/Controls.css.map +1 -1
  8. package/build/cjs/components/Controls/Controls.d.ts +2 -0
  9. package/build/cjs/components/Controls/Controls.js +3 -1
  10. package/build/cjs/components/Controls/Controls.js.map +2 -2
  11. package/build/cjs/components/Controls/single-controls/DividerControl/DividerControl.css.map +1 -1
  12. package/build/cjs/components/Controls/single-controls/LangControl/LangControl.css.map +1 -1
  13. package/build/cjs/components/Controls/single-controls/MarkdownControl.d.ts +3 -1
  14. package/build/cjs/components/Controls/single-controls/MarkdownControl.js +110 -27
  15. package/build/cjs/components/Controls/single-controls/MarkdownControl.js.map +3 -3
  16. package/build/cjs/components/Controls/single-controls/SettingsControl/SettingsControl.css.map +1 -1
  17. package/build/cjs/components/Controls/single-controls/SettingsControl/SettingsControl.js +2 -2
  18. package/build/cjs/components/Controls/single-controls/SettingsControl/SettingsControl.js.map +2 -2
  19. package/build/cjs/components/Controls/single-controls/markdown-url.d.ts +4 -0
  20. package/build/cjs/components/Controls/single-controls/markdown-url.js +56 -0
  21. package/build/cjs/components/Controls/single-controls/markdown-url.js.map +7 -0
  22. package/build/cjs/components/DocLayout/DocLayout.css.map +1 -1
  23. package/build/cjs/components/DocLeadingPage/DocLeadingPage.css.map +1 -1
  24. package/build/cjs/components/DocPage/DocPage.css.map +1 -1
  25. package/build/cjs/components/DocPage/DocPage.js +6 -1
  26. package/build/cjs/components/DocPage/DocPage.js.map +2 -2
  27. package/build/cjs/components/DocPageTitle/DocPageTitle.css.map +1 -1
  28. package/build/cjs/components/ErrorPage/ErrorPage.css.map +1 -1
  29. package/build/cjs/components/Feedback/Feedback.css.map +1 -1
  30. package/build/cjs/components/Gallery/Gallery.css.map +1 -1
  31. package/build/cjs/components/Mark/Mark.css.map +1 -1
  32. package/build/cjs/components/MiniToc/MiniToc.css.map +1 -1
  33. package/build/cjs/components/MobileControls/MobileControl/MobileControl.css.map +1 -1
  34. package/build/cjs/components/MobileControls/MobileControlSheet/MobileControlSheet.css.map +1 -1
  35. package/build/cjs/components/MobileControls/MobileControls.css.map +1 -1
  36. package/build/cjs/components/NeuroExpertModal/NeuroExpertModal.css.map +1 -1
  37. package/build/cjs/components/Notification/Notification.css.map +1 -1
  38. package/build/cjs/components/Paginator/Paginator.css.map +1 -1
  39. package/build/cjs/components/SearchBar/SearchBar.css.map +1 -1
  40. package/build/cjs/components/SearchItem/SearchItem.css.map +1 -1
  41. package/build/cjs/components/SearchPage/SearchPage.css.map +1 -1
  42. package/build/cjs/components/SearchSuggest/index.css.map +1 -1
  43. package/build/cjs/components/ShareButton/ShareButton.css.map +1 -1
  44. package/build/cjs/components/SubNavigation/SubNavigation.css.map +1 -1
  45. package/build/cjs/components/Subscribe/Subscribe.css.map +1 -1
  46. package/build/cjs/components/Summary/Summary.css.map +1 -1
  47. package/build/cjs/components/Tags/Tags.css.map +1 -1
  48. package/build/cjs/components/TagsFilter/TagsFilter.css.map +1 -1
  49. package/build/cjs/components/Toc/Toc.css.map +1 -1
  50. package/build/cjs/components/TocItem/TocItem.css.map +1 -1
  51. package/build/cjs/components/TocLable/TocLabel.css.map +1 -1
  52. package/build/cjs/components/TocNavPanel/TocNavPanel.css.map +1 -1
  53. package/build/cjs/components/ToggleArrow/ToggleArrow.css.map +1 -1
  54. package/build/cjs/components/UpdatedAtDate/UpdatedAtDate.css.map +1 -1
  55. package/build/cjs/components/Widgets/Widgets.css.map +1 -1
  56. package/build/cjs/components/constants.d.ts +1 -0
  57. package/build/cjs/components/navigation/CustomFooter/CustomFooter.css.map +1 -1
  58. package/build/cjs/components/navigation/CustomNavigation/CustomNavigation.css.map +1 -1
  59. package/build/cjs/components/navigation/DropdownContent/Column/Column.css.map +1 -1
  60. package/build/cjs/components/navigation/DropdownContent/DropdownContent.css.map +1 -1
  61. package/build/cjs/components/navigation/DropdownContent/Section/Section.css.map +1 -1
  62. package/build/cjs/components/navigation/Label/Label.css.map +1 -1
  63. package/build/cjs/components/navigation/MobileDropdown/MobileDropdown.css.map +1 -1
  64. package/build/cjs/components/navigation/NavigationDropdown/NavigationDropdown.css.map +1 -1
  65. package/build/cjs/components/navigation/Sidebar/Sidebar.css.map +1 -1
  66. package/build/cjs/components/navigation/SidebarContent/SidebarContent.css.map +1 -1
  67. package/build/cjs/components/navigation/SidebarNavigation/SidebarNavigation.css.map +1 -1
  68. package/build/cjs/components/navigation/ToMainMenu/ToMainMenu.css.map +1 -1
  69. package/build/cjs/contexts/InterfaceContext.d.ts +5 -1
  70. package/build/cjs/contexts/InterfaceContext.js.map +2 -2
  71. package/build/esm/components/BackToTop/BackToTop.css.map +1 -1
  72. package/build/esm/components/BookmarkButton/BookmarkButton.css.map +1 -1
  73. package/build/esm/components/Breadcrumbs/Breadcrumbs.css.map +1 -1
  74. package/build/esm/components/ContributorAvatars/ContributorAvatars.css.map +1 -1
  75. package/build/esm/components/Contributors/Contributors.css.map +1 -1
  76. package/build/esm/components/Control/Control.css.map +1 -1
  77. package/build/esm/components/Controls/Controls.css.map +1 -1
  78. package/build/esm/components/Controls/Controls.d.ts +2 -0
  79. package/build/esm/components/Controls/Controls.js +3 -1
  80. package/build/esm/components/Controls/Controls.js.map +2 -2
  81. package/build/esm/components/Controls/single-controls/DividerControl/DividerControl.css.map +1 -1
  82. package/build/esm/components/Controls/single-controls/LangControl/LangControl.css.map +1 -1
  83. package/build/esm/components/Controls/single-controls/MarkdownControl.d.ts +3 -1
  84. package/build/esm/components/Controls/single-controls/MarkdownControl.js +103 -30
  85. package/build/esm/components/Controls/single-controls/MarkdownControl.js.map +3 -3
  86. package/build/esm/components/Controls/single-controls/SettingsControl/SettingsControl.css.map +1 -1
  87. package/build/esm/components/Controls/single-controls/SettingsControl/SettingsControl.js +2 -2
  88. package/build/esm/components/Controls/single-controls/SettingsControl/SettingsControl.js.map +2 -2
  89. package/build/esm/components/Controls/single-controls/markdown-url.d.ts +4 -0
  90. package/build/esm/components/Controls/single-controls/markdown-url.js +35 -0
  91. package/build/esm/components/Controls/single-controls/markdown-url.js.map +7 -0
  92. package/build/esm/components/DocLayout/DocLayout.css.map +1 -1
  93. package/build/esm/components/DocLeadingPage/DocLeadingPage.css.map +1 -1
  94. package/build/esm/components/DocPage/DocPage.css.map +1 -1
  95. package/build/esm/components/DocPage/DocPage.js +6 -1
  96. package/build/esm/components/DocPage/DocPage.js.map +2 -2
  97. package/build/esm/components/DocPageTitle/DocPageTitle.css.map +1 -1
  98. package/build/esm/components/ErrorPage/ErrorPage.css.map +1 -1
  99. package/build/esm/components/Feedback/Feedback.css.map +1 -1
  100. package/build/esm/components/Gallery/Gallery.css.map +1 -1
  101. package/build/esm/components/Mark/Mark.css.map +1 -1
  102. package/build/esm/components/MiniToc/MiniToc.css.map +1 -1
  103. package/build/esm/components/MobileControls/MobileControl/MobileControl.css.map +1 -1
  104. package/build/esm/components/MobileControls/MobileControlSheet/MobileControlSheet.css.map +1 -1
  105. package/build/esm/components/MobileControls/MobileControls.css.map +1 -1
  106. package/build/esm/components/NeuroExpertModal/NeuroExpertModal.css.map +1 -1
  107. package/build/esm/components/Notification/Notification.css.map +1 -1
  108. package/build/esm/components/Paginator/Paginator.css.map +1 -1
  109. package/build/esm/components/SearchBar/SearchBar.css.map +1 -1
  110. package/build/esm/components/SearchItem/SearchItem.css.map +1 -1
  111. package/build/esm/components/SearchPage/SearchPage.css.map +1 -1
  112. package/build/esm/components/SearchSuggest/index.css.map +1 -1
  113. package/build/esm/components/ShareButton/ShareButton.css.map +1 -1
  114. package/build/esm/components/SubNavigation/SubNavigation.css.map +1 -1
  115. package/build/esm/components/Subscribe/Subscribe.css.map +1 -1
  116. package/build/esm/components/Summary/Summary.css.map +1 -1
  117. package/build/esm/components/Tags/Tags.css.map +1 -1
  118. package/build/esm/components/TagsFilter/TagsFilter.css.map +1 -1
  119. package/build/esm/components/Toc/Toc.css.map +1 -1
  120. package/build/esm/components/TocItem/TocItem.css.map +1 -1
  121. package/build/esm/components/TocLable/TocLabel.css.map +1 -1
  122. package/build/esm/components/TocNavPanel/TocNavPanel.css.map +1 -1
  123. package/build/esm/components/ToggleArrow/ToggleArrow.css.map +1 -1
  124. package/build/esm/components/UpdatedAtDate/UpdatedAtDate.css.map +1 -1
  125. package/build/esm/components/Widgets/Widgets.css.map +1 -1
  126. package/build/esm/components/constants.d.ts +1 -0
  127. package/build/esm/components/navigation/CustomFooter/CustomFooter.css.map +1 -1
  128. package/build/esm/components/navigation/CustomNavigation/CustomNavigation.css.map +1 -1
  129. package/build/esm/components/navigation/DropdownContent/Column/Column.css.map +1 -1
  130. package/build/esm/components/navigation/DropdownContent/DropdownContent.css.map +1 -1
  131. package/build/esm/components/navigation/DropdownContent/Section/Section.css.map +1 -1
  132. package/build/esm/components/navigation/Label/Label.css.map +1 -1
  133. package/build/esm/components/navigation/MobileDropdown/MobileDropdown.css.map +1 -1
  134. package/build/esm/components/navigation/NavigationDropdown/NavigationDropdown.css.map +1 -1
  135. package/build/esm/components/navigation/Sidebar/Sidebar.css.map +1 -1
  136. package/build/esm/components/navigation/SidebarContent/SidebarContent.css.map +1 -1
  137. package/build/esm/components/navigation/SidebarNavigation/SidebarNavigation.css.map +1 -1
  138. package/build/esm/components/navigation/ToMainMenu/ToMainMenu.css.map +1 -1
  139. package/build/esm/contexts/InterfaceContext.d.ts +5 -1
  140. package/build/esm/contexts/InterfaceContext.js.map +2 -2
  141. package/build/index.css.map +1 -1
  142. package/build/themes/common/index.css.map +1 -1
  143. package/package.json +1 -1
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,58 +17,102 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
 
20
30
  // src/components/Controls/single-controls/MarkdownControl.tsx
21
31
  var MarkdownControl_exports = {};
22
32
  __export(MarkdownControl_exports, {
23
33
  default: () => MarkdownControl_default,
24
- getMarkdownUrl: () => getMarkdownUrl
34
+ getMarkdownUrl: () => import_markdown_url2.getMarkdownUrl
25
35
  });
26
36
  module.exports = __toCommonJS(MarkdownControl_exports);
27
- var import_react = require("react");
37
+ var import_react = __toESM(require("react"));
28
38
  var import_icons = require("@gravity-ui/icons");
29
39
  var import_uikit = require("@gravity-ui/uikit");
30
40
  var import_hooks = require("../../../hooks");
31
41
  var import_analytics = require("../../../shared/libs/analytics");
32
42
  var import_ControlsLayout = require("../ControlsLayout");
43
+ var import_markdown_url = require("./markdown-url");
44
+ var import_markdown_url2 = require("./markdown-url");
33
45
  var import_jsx_runtime = require("react/jsx-runtime");
34
- function getMarkdownUrl(currentUrl) {
35
- const markdownUrl = new URL(currentUrl);
36
- if (markdownUrl.pathname.endsWith("/")) {
37
- markdownUrl.pathname += "index.md";
38
- } else {
39
- markdownUrl.pathname = markdownUrl.pathname.replace(/\.(?:html?|md)$/i, "") + ".md";
40
- }
41
- return markdownUrl.toString();
42
- }
43
- var MarkdownControl = ({ mdDocsUrl, onClick }) => {
46
+ var COPY_SUCCESS_TIMEOUT = 2e3;
47
+ var MarkdownControl = ({
48
+ mode = "dropdown",
49
+ mdDocsUrl,
50
+ onClick
51
+ }) => {
44
52
  const { t } = (0, import_hooks.useTranslation)("markdown-button");
45
53
  const analytics = (0, import_analytics.useAnalytics)();
46
54
  const { controlClassName, controlSize } = (0, import_react.useContext)(import_ControlsLayout.ControlsLayoutContext);
55
+ const [copyState, setCopyState] = (0, import_react.useState)("idle");
56
+ const [dropdownOpen, setDropdownOpen] = (0, import_react.useState)(false);
57
+ const ignoreNextClose = (0, import_react.useRef)(false);
58
+ const copySuccessTimer = (0, import_react.useRef)(void 0);
47
59
  const resolveMarkdownUrl = (0, import_react.useCallback)(
48
- () => mdDocsUrl || getMarkdownUrl(window.location.href),
60
+ (action) => {
61
+ if (!mdDocsUrl) {
62
+ return (0, import_markdown_url.getMarkdownUrl)(window.location.href, action);
63
+ }
64
+ return (0, import_markdown_url.resolveMarkdownActionUrl)(mdDocsUrl, window.location.href, action);
65
+ },
49
66
  [mdDocsUrl]
50
67
  );
68
+ (0, import_react.useEffect)(
69
+ () => () => {
70
+ if (copySuccessTimer.current) {
71
+ clearTimeout(copySuccessTimer.current);
72
+ }
73
+ },
74
+ []
75
+ );
51
76
  const copyMarkdown = (0, import_react.useCallback)(async () => {
52
77
  var _a;
78
+ if (copyState === "pending") {
79
+ return;
80
+ }
53
81
  analytics.track(import_analytics.CommonAnalyticsEvent.DOCS_COPY_AS_MARKDOWN_CLICK);
54
- const response = await fetch(resolveMarkdownUrl(), {
55
- credentials: "same-origin",
56
- headers: { Accept: "text/markdown" }
57
- });
58
- if (!response.ok || !((_a = response.headers.get("content-type")) == null ? void 0 : _a.includes("text/markdown"))) {
59
- throw new Error(`Failed to load Markdown: ${response.status}`);
82
+ if (copySuccessTimer.current) {
83
+ clearTimeout(copySuccessTimer.current);
84
+ copySuccessTimer.current = void 0;
60
85
  }
61
- await navigator.clipboard.writeText(await response.text());
62
- }, [analytics, resolveMarkdownUrl]);
86
+ setCopyState("pending");
87
+ try {
88
+ const response = await fetch(resolveMarkdownUrl("copy"), {
89
+ credentials: "same-origin",
90
+ headers: { Accept: "text/markdown" }
91
+ });
92
+ if (!response.ok || !((_a = response.headers.get("content-type")) == null ? void 0 : _a.includes("text/markdown"))) {
93
+ throw new Error(`Failed to load Markdown: ${response.status}`);
94
+ }
95
+ await navigator.clipboard.writeText(await response.text());
96
+ setCopyState("success");
97
+ copySuccessTimer.current = setTimeout(() => {
98
+ copySuccessTimer.current = void 0;
99
+ setCopyState("idle");
100
+ }, COPY_SUCCESS_TIMEOUT);
101
+ } catch (e) {
102
+ setCopyState("idle");
103
+ }
104
+ }, [analytics, copyState, resolveMarkdownUrl]);
105
+ const handleCopy = (0, import_react.useCallback)(() => {
106
+ ignoreNextClose.current = mode === "dropdown";
107
+ copyMarkdown();
108
+ }, [copyMarkdown, mode]);
63
109
  const viewMarkdown = (0, import_react.useCallback)(
64
110
  (event) => {
65
111
  analytics.track(import_analytics.CommonAnalyticsEvent.DOCS_VIEW_AS_MARKDOWN_CLICK);
66
112
  if ("nativeEvent" in event) {
67
113
  onClick == null ? void 0 : onClick(event);
68
114
  }
69
- window.open(resolveMarkdownUrl(), "_blank", "noopener,noreferrer");
115
+ window.open(resolveMarkdownUrl("view"), "_blank", "noopener,noreferrer");
70
116
  },
71
117
  [analytics, onClick, resolveMarkdownUrl]
72
118
  );
@@ -74,10 +120,10 @@ var MarkdownControl = ({ mdDocsUrl, onClick }) => {
74
120
  () => [
75
121
  {
76
122
  text: t("copy-as-markdown"),
77
- iconStart: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_uikit.Icon, { data: import_icons.Copy, size: 16 }),
78
- action: () => {
79
- copyMarkdown().catch(() => void 0);
80
- }
123
+ iconStart: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_uikit.Icon, { data: copyState === "success" ? import_icons.SquareCheck : import_icons.Copy, size: 16 }),
124
+ disabled: copyState === "pending",
125
+ className: `dc-markdown-control__copy_${copyState}`,
126
+ action: handleCopy
81
127
  },
82
128
  {
83
129
  text: t("view-in-markdown"),
@@ -85,12 +131,49 @@ var MarkdownControl = ({ mdDocsUrl, onClick }) => {
85
131
  action: viewMarkdown
86
132
  }
87
133
  ],
88
- [copyMarkdown, t, viewMarkdown]
134
+ [copyState, handleCopy, t, viewMarkdown]
89
135
  );
136
+ const handleDropdownToggle = (0, import_react.useCallback)((open) => {
137
+ if (!open && ignoreNextClose.current) {
138
+ ignoreNextClose.current = false;
139
+ return;
140
+ }
141
+ setDropdownOpen(open);
142
+ }, []);
143
+ if (mode === "visible") {
144
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react.default.Fragment, { children: [
145
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_uikit.ActionTooltip, { title: t("copy-as-markdown"), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
146
+ import_uikit.Button,
147
+ {
148
+ "aria-label": t("copy-as-markdown"),
149
+ className: `${controlClassName || ""} dc-markdown-control__copy_${copyState}`.trim(),
150
+ size: controlSize,
151
+ view: "flat-secondary",
152
+ disabled: copyState === "pending",
153
+ "data-copy-state": copyState,
154
+ onClick: handleCopy,
155
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_uikit.Button.Icon, { children: copyState === "success" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.SquareCheck, {}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.Copy, {}) })
156
+ }
157
+ ) }),
158
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_uikit.ActionTooltip, { title: t("view-in-markdown"), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
159
+ import_uikit.Button,
160
+ {
161
+ "aria-label": t("view-in-markdown"),
162
+ className: controlClassName,
163
+ size: controlSize,
164
+ view: "flat-secondary",
165
+ onClick: viewMarkdown,
166
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_uikit.Button.Icon, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.LogoMarkdown, {}) })
167
+ }
168
+ ) })
169
+ ] });
170
+ }
90
171
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
91
172
  import_uikit.DropdownMenu,
92
173
  {
93
174
  items,
175
+ open: dropdownOpen,
176
+ onOpenToggle: handleDropdownToggle,
94
177
  size: controlSize,
95
178
  switcherWrapperClassName: controlClassName,
96
179
  defaultSwitcherProps: {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/components/Controls/single-controls/MarkdownControl.tsx"],
4
- "sourcesContent": ["import type {DropdownMenuItem} from '@gravity-ui/uikit';\n\nimport React, {useCallback, useContext, useMemo} from 'react';\nimport {Copy, LogoMarkdown} from '@gravity-ui/icons';\nimport {DropdownMenu, Icon} from '@gravity-ui/uikit';\n\nimport {useTranslation} from '../../../hooks';\nimport {CommonAnalyticsEvent, useAnalytics} from '../../../shared/libs/analytics';\nimport {ControlsLayoutContext} from '../ControlsLayout';\n\nexport function getMarkdownUrl(currentUrl: string) {\n const markdownUrl = new URL(currentUrl);\n\n if (markdownUrl.pathname.endsWith('/')) {\n markdownUrl.pathname += 'index.md';\n } else {\n markdownUrl.pathname = markdownUrl.pathname.replace(/\\.(?:html?|md)$/i, '') + '.md';\n }\n\n return markdownUrl.toString();\n}\n\nexport interface MarkdownControlProps {\n mdDocsUrl?: string;\n onClick?: React.MouseEventHandler<HTMLElement>;\n}\n\nconst MarkdownControl: React.FC<MarkdownControlProps> = ({mdDocsUrl, onClick}) => {\n const {t} = useTranslation('markdown-button');\n const analytics = useAnalytics();\n const {controlClassName, controlSize} = useContext(ControlsLayoutContext);\n const resolveMarkdownUrl = useCallback(\n () => mdDocsUrl || getMarkdownUrl(window.location.href),\n [mdDocsUrl],\n );\n\n const copyMarkdown = useCallback(async () => {\n analytics.track(CommonAnalyticsEvent.DOCS_COPY_AS_MARKDOWN_CLICK);\n\n const response = await fetch(resolveMarkdownUrl(), {\n credentials: 'same-origin',\n headers: {Accept: 'text/markdown'},\n });\n\n if (!response.ok || !response.headers.get('content-type')?.includes('text/markdown')) {\n throw new Error(`Failed to load Markdown: ${response.status}`);\n }\n\n await navigator.clipboard.writeText(await response.text());\n }, [analytics, resolveMarkdownUrl]);\n\n const viewMarkdown = useCallback<NonNullable<DropdownMenuItem<unknown>['action']>>(\n (event) => {\n analytics.track(CommonAnalyticsEvent.DOCS_VIEW_AS_MARKDOWN_CLICK);\n\n if ('nativeEvent' in event) {\n onClick?.(event);\n }\n\n window.open(resolveMarkdownUrl(), '_blank', 'noopener,noreferrer');\n },\n [analytics, onClick, resolveMarkdownUrl],\n );\n\n const items = useMemo<DropdownMenuItem<unknown>[]>(\n () => [\n {\n text: t('copy-as-markdown'),\n iconStart: <Icon data={Copy} size={16} />,\n action: () => {\n copyMarkdown().catch(() => undefined);\n },\n },\n {\n text: t('view-in-markdown'),\n iconStart: <Icon data={LogoMarkdown} size={16} />,\n action: viewMarkdown,\n },\n ],\n [copyMarkdown, t, viewMarkdown],\n );\n\n return (\n <DropdownMenu\n items={items}\n size={controlSize}\n switcherWrapperClassName={controlClassName}\n defaultSwitcherProps={{\n 'aria-label': t('markdown-actions'),\n view: 'flat-secondary',\n }}\n popupProps={{placement: ['bottom-end', 'top-end']}}\n />\n );\n};\n\nexport default MarkdownControl;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAsD;AACtD,mBAAiC;AACjC,mBAAiC;AAEjC,mBAA6B;AAC7B,uBAAiD;AACjD,4BAAoC;AA4DT;AA1DpB,SAAS,eAAe,YAAoB;AAC/C,QAAM,cAAc,IAAI,IAAI,UAAU;AAEtC,MAAI,YAAY,SAAS,SAAS,GAAG,GAAG;AACpC,gBAAY,YAAY;AAAA,EAC5B,OAAO;AACH,gBAAY,WAAW,YAAY,SAAS,QAAQ,oBAAoB,EAAE,IAAI;AAAA,EAClF;AAEA,SAAO,YAAY,SAAS;AAChC;AAOA,IAAM,kBAAkD,CAAC,EAAC,WAAW,QAAO,MAAM;AAC9E,QAAM,EAAC,EAAC,QAAI,6BAAe,iBAAiB;AAC5C,QAAM,gBAAY,+BAAa;AAC/B,QAAM,EAAC,kBAAkB,YAAW,QAAI,yBAAW,2CAAqB;AACxE,QAAM,yBAAqB;AAAA,IACvB,MAAM,aAAa,eAAe,OAAO,SAAS,IAAI;AAAA,IACtD,CAAC,SAAS;AAAA,EACd;AAEA,QAAM,mBAAe,0BAAY,YAAY;AApCjD;AAqCQ,cAAU,MAAM,sCAAqB,2BAA2B;AAEhE,UAAM,WAAW,MAAM,MAAM,mBAAmB,GAAG;AAAA,MAC/C,aAAa;AAAA,MACb,SAAS,EAAC,QAAQ,gBAAe;AAAA,IACrC,CAAC;AAED,QAAI,CAAC,SAAS,MAAM,GAAC,cAAS,QAAQ,IAAI,cAAc,MAAnC,mBAAsC,SAAS,mBAAkB;AAClF,YAAM,IAAI,MAAM,4BAA4B,SAAS,MAAM,EAAE;AAAA,IACjE;AAEA,UAAM,UAAU,UAAU,UAAU,MAAM,SAAS,KAAK,CAAC;AAAA,EAC7D,GAAG,CAAC,WAAW,kBAAkB,CAAC;AAElC,QAAM,mBAAe;AAAA,IACjB,CAAC,UAAU;AACP,gBAAU,MAAM,sCAAqB,2BAA2B;AAEhE,UAAI,iBAAiB,OAAO;AACxB,2CAAU;AAAA,MACd;AAEA,aAAO,KAAK,mBAAmB,GAAG,UAAU,qBAAqB;AAAA,IACrE;AAAA,IACA,CAAC,WAAW,SAAS,kBAAkB;AAAA,EAC3C;AAEA,QAAM,YAAQ;AAAA,IACV,MAAM;AAAA,MACF;AAAA,QACI,MAAM,EAAE,kBAAkB;AAAA,QAC1B,WAAW,4CAAC,qBAAK,MAAM,mBAAM,MAAM,IAAI;AAAA,QACvC,QAAQ,MAAM;AACV,uBAAa,EAAE,MAAM,MAAM,MAAS;AAAA,QACxC;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM,EAAE,kBAAkB;AAAA,QAC1B,WAAW,4CAAC,qBAAK,MAAM,2BAAc,MAAM,IAAI;AAAA,QAC/C,QAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,IACA,CAAC,cAAc,GAAG,YAAY;AAAA,EAClC;AAEA,SACI;AAAA,IAAC;AAAA;AAAA,MACG;AAAA,MACA,MAAM;AAAA,MACN,0BAA0B;AAAA,MAC1B,sBAAsB;AAAA,QAClB,cAAc,EAAE,kBAAkB;AAAA,QAClC,MAAM;AAAA,MACV;AAAA,MACA,YAAY,EAAC,WAAW,CAAC,cAAc,SAAS,EAAC;AAAA;AAAA,EACrD;AAER;AAEA,IAAO,0BAAQ;",
6
- "names": []
4
+ "sourcesContent": ["import type {DropdownMenuItem} from '@gravity-ui/uikit';\nimport type {MarkdownActionsMode} from '../../../contexts/InterfaceContext';\n\nimport React, {useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react';\nimport {Copy, LogoMarkdown, SquareCheck} from '@gravity-ui/icons';\nimport {ActionTooltip, Button, DropdownMenu, Icon} from '@gravity-ui/uikit';\n\nimport {useTranslation} from '../../../hooks';\nimport {CommonAnalyticsEvent, useAnalytics} from '../../../shared/libs/analytics';\nimport {ControlsLayoutContext} from '../ControlsLayout';\n\nimport {type MarkdownAction, getMarkdownUrl, resolveMarkdownActionUrl} from './markdown-url';\n\nconst COPY_SUCCESS_TIMEOUT = 2000;\n\nexport {getMarkdownUrl} from './markdown-url';\n\ntype CopyState = 'idle' | 'pending' | 'success';\n\nexport interface MarkdownControlProps {\n mode?: Exclude<MarkdownActionsMode, 'none'>;\n mdDocsUrl?: string;\n onClick?: React.MouseEventHandler<HTMLElement>;\n}\n\nconst MarkdownControl: React.FC<MarkdownControlProps> = ({\n mode = 'dropdown',\n mdDocsUrl,\n onClick,\n}) => {\n const {t} = useTranslation('markdown-button');\n const analytics = useAnalytics();\n const {controlClassName, controlSize} = useContext(ControlsLayoutContext);\n const [copyState, setCopyState] = useState<CopyState>('idle');\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const ignoreNextClose = useRef(false);\n const copySuccessTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n const resolveMarkdownUrl = useCallback(\n (action: MarkdownAction) => {\n if (!mdDocsUrl) {\n return getMarkdownUrl(window.location.href, action);\n }\n\n return resolveMarkdownActionUrl(mdDocsUrl, window.location.href, action);\n },\n [mdDocsUrl],\n );\n\n useEffect(\n () => () => {\n if (copySuccessTimer.current) {\n clearTimeout(copySuccessTimer.current);\n }\n },\n [],\n );\n\n const copyMarkdown = useCallback(async () => {\n if (copyState === 'pending') {\n return;\n }\n\n analytics.track(CommonAnalyticsEvent.DOCS_COPY_AS_MARKDOWN_CLICK);\n if (copySuccessTimer.current) {\n clearTimeout(copySuccessTimer.current);\n copySuccessTimer.current = undefined;\n }\n setCopyState('pending');\n\n try {\n const response = await fetch(resolveMarkdownUrl('copy'), {\n credentials: 'same-origin',\n headers: {Accept: 'text/markdown'},\n });\n\n if (!response.ok || !response.headers.get('content-type')?.includes('text/markdown')) {\n throw new Error(`Failed to load Markdown: ${response.status}`);\n }\n\n await navigator.clipboard.writeText(await response.text());\n setCopyState('success');\n\n copySuccessTimer.current = setTimeout(() => {\n copySuccessTimer.current = undefined;\n setCopyState('idle');\n }, COPY_SUCCESS_TIMEOUT);\n } catch {\n setCopyState('idle');\n }\n }, [analytics, copyState, resolveMarkdownUrl]);\n\n const handleCopy = useCallback(() => {\n ignoreNextClose.current = mode === 'dropdown';\n copyMarkdown();\n }, [copyMarkdown, mode]);\n\n const viewMarkdown = useCallback<NonNullable<DropdownMenuItem<unknown>['action']>>(\n (event) => {\n analytics.track(CommonAnalyticsEvent.DOCS_VIEW_AS_MARKDOWN_CLICK);\n\n if ('nativeEvent' in event) {\n onClick?.(event);\n }\n\n window.open(resolveMarkdownUrl('view'), '_blank', 'noopener,noreferrer');\n },\n [analytics, onClick, resolveMarkdownUrl],\n );\n\n const items = useMemo<DropdownMenuItem<unknown>[]>(\n () => [\n {\n text: t('copy-as-markdown'),\n iconStart: <Icon data={copyState === 'success' ? SquareCheck : Copy} size={16} />,\n disabled: copyState === 'pending',\n className: `dc-markdown-control__copy_${copyState}`,\n action: handleCopy,\n },\n {\n text: t('view-in-markdown'),\n iconStart: <Icon data={LogoMarkdown} size={16} />,\n action: viewMarkdown,\n },\n ],\n [copyState, handleCopy, t, viewMarkdown],\n );\n\n const handleDropdownToggle = useCallback((open: boolean) => {\n if (!open && ignoreNextClose.current) {\n ignoreNextClose.current = false;\n return;\n }\n\n setDropdownOpen(open);\n }, []);\n\n if (mode === 'visible') {\n return (\n <React.Fragment>\n <ActionTooltip title={t('copy-as-markdown')}>\n <Button\n aria-label={t('copy-as-markdown')}\n className={`${controlClassName || ''} dc-markdown-control__copy_${copyState}`.trim()}\n size={controlSize}\n view=\"flat-secondary\"\n disabled={copyState === 'pending'}\n data-copy-state={copyState}\n onClick={handleCopy}\n >\n <Button.Icon>\n {copyState === 'success' ? <SquareCheck /> : <Copy />}\n </Button.Icon>\n </Button>\n </ActionTooltip>\n <ActionTooltip title={t('view-in-markdown')}>\n <Button\n aria-label={t('view-in-markdown')}\n className={controlClassName}\n size={controlSize}\n view=\"flat-secondary\"\n onClick={viewMarkdown}\n >\n <Button.Icon>\n <LogoMarkdown />\n </Button.Icon>\n </Button>\n </ActionTooltip>\n </React.Fragment>\n );\n }\n\n return (\n <DropdownMenu\n items={items}\n open={dropdownOpen}\n onOpenToggle={handleDropdownToggle}\n size={controlSize}\n switcherWrapperClassName={controlClassName}\n defaultSwitcherProps={{\n 'aria-label': t('markdown-actions'),\n view: 'flat-secondary',\n }}\n popupProps={{placement: ['bottom-end', 'top-end']}}\n />\n );\n};\n\nexport default MarkdownControl;\n"],
5
+ "mappings": "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",
6
+ "names": ["import_markdown_url", "React"]
7
7
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../../../src/components/Controls/single-controls/SettingsControl/SettingsControl.scss", "../../../../../../src/components/Controls/single-controls/SettingsControl/%3Cinput css btXWP2%3E", "../../../../../../src/styles/mixins.scss"],
3
+ "sources": ["../../../../../../src/components/Controls/single-controls/SettingsControl/SettingsControl.scss", "../../../../../../src/components/Controls/single-controls/SettingsControl/%3Cinput css bG9VO3%3E", "../../../../../../src/styles/mixins.scss"],
4
4
  "sourcesContent": ["@use 'sass:map';\n@use '../../../../styles/mixins';\n@use '../../../../styles/variables';\n\n.dc-settings-control {\n &__text-size-control {\n display: flex;\n align-items: center;\n }\n\n &__text-size-button {\n &_s {\n @include mixins.text-size(body-1);\n }\n &_m {\n @include mixins.text-size(body-2);\n }\n &_l {\n @include mixins.text-size(body-3);\n }\n }\n\n &__text-size-button-icon {\n &_active {\n color: var(--g-color-base-brand);\n }\n }\n\n &__popup {\n width: 230px;\n @include mixins.text-size(body-1);\n }\n\n &__popup-tooltip-content {\n padding: 0;\n }\n\n &__list {\n padding: 4px 0;\n width: 230px;\n\n .g-list__item_active {\n background: transparent;\n }\n }\n\n &__list-icon {\n margin-right: 8px;\n }\n\n &__list-item {\n display: flex;\n padding: 12px;\n width: 100%;\n }\n\n &__list-item-description {\n color: var(--g-color-text-secondary);\n }\n\n &__list-item-control {\n display: flex;\n align-items: center;\n margin-left: auto;\n\n [dir='rtl'] & {\n margin: 0 auto 0 0;\n }\n\n [dir='rtl'] & > label {\n transform: rotate(180deg);\n }\n }\n\n @media (max-width: map.get(variables.$screenBreakpoints, 'md')) {\n &__popup {\n width: 100vw;\n }\n\n &__popup-tooltip {\n position: fixed;\n /* stylelint-disable-next-line declaration-no-important */\n inset: var(--header-height) 0px auto 0px !important;\n /* stylelint-disable-next-line declaration-no-important */\n transform: translate3d(0, 0, 0) !important;\n }\n\n &__popup-tooltip-content {\n max-width: 100%;\n }\n\n &__list {\n width: 100%;\n }\n }\n}\n", ".dc-settings-control__text-size-control {\n display: flex;\n align-items: center;\n}\n.dc-settings-control__text-size-button_s {\n font-size: var(--g-text-body-1-font-size);\n line-height: var(--g-text-body-1-line-height);\n}\n.dc-settings-control__text-size-button_m {\n font-size: var(--g-text-body-2-font-size);\n line-height: var(--g-text-body-2-line-height);\n}\n.dc-settings-control__text-size-button_l {\n font-size: var(--g-text-body-3-font-size);\n line-height: var(--g-text-body-3-line-height);\n}\n.dc-settings-control__text-size-button-icon_active {\n color: var(--g-color-base-brand);\n}\n.dc-settings-control__popup {\n width: 230px;\n font-size: var(--g-text-body-1-font-size);\n line-height: var(--g-text-body-1-line-height);\n}\n.dc-settings-control__popup-tooltip-content {\n padding: 0;\n}\n.dc-settings-control__list {\n padding: 4px 0;\n width: 230px;\n}\n.dc-settings-control__list .g-list__item_active {\n background: transparent;\n}\n.dc-settings-control__list-icon {\n margin-right: 8px;\n}\n.dc-settings-control__list-item {\n display: flex;\n padding: 12px;\n width: 100%;\n}\n.dc-settings-control__list-item-description {\n color: var(--g-color-text-secondary);\n}\n.dc-settings-control__list-item-control {\n display: flex;\n align-items: center;\n margin-left: auto;\n}\n[dir=rtl] .dc-settings-control__list-item-control {\n margin: 0 auto 0 0;\n}\n[dir=rtl] .dc-settings-control__list-item-control > label {\n transform: rotate(180deg);\n}\n@media (max-width: 769px) {\n .dc-settings-control__popup {\n width: 100vw;\n }\n .dc-settings-control__popup-tooltip {\n position: fixed;\n /* stylelint-disable-next-line declaration-no-important */\n inset: var(--header-height) 0px auto 0px !important;\n /* stylelint-disable-next-line declaration-no-important */\n transform: translate3d(0, 0, 0) !important;\n }\n .dc-settings-control__popup-tooltip-content {\n max-width: 100%;\n }\n .dc-settings-control__list {\n width: 100%;\n }\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvY29tcG9uZW50cy9jb21wb25lbnRzL3NyYy9jb21wb25lbnRzL0NvbnRyb2xzL3NpbmdsZS1jb250cm9scy9TZXR0aW5nc0NvbnRyb2wiLCJzb3VyY2VzIjpbIlNldHRpbmdzQ29udHJvbC5zY3NzIiwiLi4vLi4vLi4vLi4vc3R5bGVzL21peGlucy5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtJO0VBQ0k7RUFDQTs7QUFJQTtFQ1BKO0VBQ0E7O0FEU0k7RUNWSjtFQUNBOztBRFlJO0VDYko7RUFDQTs7QURrQkk7RUFDSTs7QUFJUjtFQUNJO0VDekJKO0VBQ0E7O0FENEJBO0VBQ0k7O0FBR0o7RUFDSTtFQUNBOztBQUVBO0VBQ0k7O0FBSVI7RUFDSTs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7QUFHSjtFQUNJOztBQUdKO0VBQ0k7RUFDQTtFQUNBOztBQUVBO0VBQ0k7O0FBR0o7RUFDSTs7QUFJUjtFQUNJO0lBQ0k7O0VBR0o7SUFDSTtBQUNBO0lBQ0E7QUFDQTtJQUNBOztFQUdKO0lBQ0k7O0VBR0o7SUFDSSIsInNvdXJjZXNDb250ZW50IjpbIkB1c2UgJ3Nhc3M6bWFwJztcbkB1c2UgJy4uLy4uLy4uLy4uL3N0eWxlcy9taXhpbnMnO1xuQHVzZSAnLi4vLi4vLi4vLi4vc3R5bGVzL3ZhcmlhYmxlcyc7XG5cbi5kYy1zZXR0aW5ncy1jb250cm9sIHtcbiAgICAmX190ZXh0LXNpemUtY29udHJvbCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgJl9fdGV4dC1zaXplLWJ1dHRvbiB7XG4gICAgICAgICZfcyB7XG4gICAgICAgICAgICBAaW5jbHVkZSBtaXhpbnMudGV4dC1zaXplKGJvZHktMSk7XG4gICAgICAgIH1cbiAgICAgICAgJl9tIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1peGlucy50ZXh0LXNpemUoYm9keS0yKTtcbiAgICAgICAgfVxuICAgICAgICAmX2wge1xuICAgICAgICAgICAgQGluY2x1ZGUgbWl4aW5zLnRleHQtc2l6ZShib2R5LTMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGV4dC1zaXplLWJ1dHRvbi1pY29uIHtcbiAgICAgICAgJl9hY3RpdmUge1xuICAgICAgICAgICAgY29sb3I6IHZhcigtLWctY29sb3ItYmFzZS1icmFuZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmX19wb3B1cCB7XG4gICAgICAgIHdpZHRoOiAyMzBweDtcbiAgICAgICAgQGluY2x1ZGUgbWl4aW5zLnRleHQtc2l6ZShib2R5LTEpO1xuICAgIH1cblxuICAgICZfX3BvcHVwLXRvb2x0aXAtY29udGVudCB7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgfVxuXG4gICAgJl9fbGlzdCB7XG4gICAgICAgIHBhZGRpbmc6IDRweCAwO1xuICAgICAgICB3aWR0aDogMjMwcHg7XG5cbiAgICAgICAgLmctbGlzdF9faXRlbV9hY3RpdmUge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmX19saXN0LWljb24ge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICB9XG5cbiAgICAmX19saXN0LWl0ZW0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBwYWRkaW5nOiAxMnB4O1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAmX19saXN0LWl0ZW0tZGVzY3JpcHRpb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0tZy1jb2xvci10ZXh0LXNlY29uZGFyeSk7XG4gICAgfVxuXG4gICAgJl9fbGlzdC1pdGVtLWNvbnRyb2wge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBtYXJnaW4tbGVmdDogYXV0bztcblxuICAgICAgICBbZGlyPSdydGwnXSAmIHtcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvIDAgMDtcbiAgICAgICAgfVxuXG4gICAgICAgIFtkaXI9J3J0bCddICYgPiBsYWJlbCB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IG1hcC5nZXQodmFyaWFibGVzLiRzY3JlZW5CcmVha3BvaW50cywgJ21kJykpIHtcbiAgICAgICAgJl9fcG9wdXAge1xuICAgICAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICB9XG5cbiAgICAgICAgJl9fcG9wdXAtdG9vbHRpcCB7XG4gICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgICAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4gICAgICAgICAgICBpbnNldDogdmFyKC0taGVhZGVyLWhlaWdodCkgMHB4IGF1dG8gMHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAmX19wb3B1cC10b29sdGlwLWNvbnRlbnQge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgJl9fbGlzdCB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkB1c2UgJ3Nhc3M6bWFwJztcbkB1c2UgJ3ZhcmlhYmxlcyc7XG5cbkBtaXhpbiB0ZXh0LXNpemUoJG5hbWUpIHtcbiAgICBmb250LXNpemU6IHZhcigtLWctdGV4dC0jeyRuYW1lfS1mb250LXNpemUpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1nLXRleHQtI3skbmFtZX0tbGluZS1oZWlnaHQpO1xufVxuXG5AbWl4aW4gcmVzZXQtbGlzdC1zdHlsZSgpIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xufVxuXG5AbWl4aW4gZml4QW5jaG9yUG9zaXRpb24oJG9mZnNldDogMHB4KSB7XG4gICAgcGFkZGluZy10b3A6IGNhbGModmFyKC0tZGMtaGVhZGVyLWhlaWdodCwgI3t2YXJpYWJsZXMuJGhlYWRlckhlaWdodH0pKTtcbiAgICBtYXJnaW4tdG9wOiBjYWxjKCN7JG9mZnNldH0gLSB2YXIoLS1kYy1oZWFkZXItaGVpZ2h0LCAje3ZhcmlhYmxlcy4kaGVhZGVySGVpZ2h0fSkpO1xufVxuXG5AbWl4aW4gcmVzZXQtbGluay1zdHlsZSgpIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbkBtaXhpbiBpc2xhbmRzLWZvY3VzKCkge1xuICAgIG91dGxpbmU6IG5vbmU7XG5cbiAgICAudXRpbGl0eWZvY3VzICY6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiAycHggc29saWQgI2ZmZGI0ZDtcbiAgICB9XG59XG5cbkBtaXhpbiBmb2N1c2FibGUoJG9mZnNldDogMCwgJG1vZGU6ICdvdXRsaW5lJykge1xuICAgIEBpZiAkbW9kZSA9PSAnb3V0bGluZScge1xuICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1nLWNvbG9yLWxpbmUtZm9jdXMpO1xuICAgICAgICAgICAgb3V0bGluZS1vZmZzZXQ6ICRvZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgJjpmb2N1czpub3QoOmZvY3VzLXZpc2libGUpIHtcbiAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgJG1vZGUgPT0gJ2JveC1zaGFkb3cnIHtcbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZy1jb2xvci1saW5lLWZvY3VzKTtcbiAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgIH1cbiAgICAgICAgJjpmb2N1czpub3QoOmZvY3VzLXZpc2libGUpIHtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBsaW5rKCkge1xuICAgIGNvbG9yOiB2YXIoLS1nLWNvbG9yLXRleHQtbGluayk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1nLWZvY3VzLWJvcmRlci1yYWRpdXMpO1xuXG4gICAgQGluY2x1ZGUgaXNsYW5kcy1mb2N1cygpO1xuXG4gICAgQGluY2x1ZGUgZm9jdXNhYmxlKDAsICdib3gtc2hhZG93Jyk7XG5cbiAgICAmOmhvdmVyLFxuICAgICY6YWN0aXZlIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWctY29sb3ItdGV4dC1saW5rLWhvdmVyKTtcbiAgICB9XG59XG5cbkBtaXhpbiBoZWFkaW5nMSgpIHtcbiAgICBmb250LXdlaWdodDogNTAwO1xuXG4gICAgQGluY2x1ZGUgdGV4dC1zaXplKGRpc3BsYXktMyk7XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogbWFwLmdldCh2YXJpYWJsZXMuJHNjcmVlbkJyZWFrcG9pbnRzLCAnbWQnKSAtIDEpIHtcbiAgICAgICAgQGluY2x1ZGUgdGV4dC1zaXplKGRpc3BsYXktMik7XG4gICAgfVxufVxuXG5AbWl4aW4gaGVhZGluZzIoKSB7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcblxuICAgIEBpbmNsdWRlIHRleHQtc2l6ZShkaXNwbGF5LTEpO1xufVxuXG5AbWl4aW4gaGVhZGluZzMoKSB7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcblxuICAgIEBpbmNsdWRlIHRleHQtc2l6ZShoZWFkZXItMik7XG59XG5cbkBtaXhpbiBoZWFkaW5nNCgpIHtcbiAgICBmb250LXdlaWdodDogNTAwO1xuXG4gICAgQGluY2x1ZGUgdGV4dC1zaXplKGhlYWRlci0xKTtcbn1cblxuQG1peGluIGhlYWRpbmc1KCkge1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG5cbiAgICBAaW5jbHVkZSB0ZXh0LXNpemUoYm9keS0zKTtcbn1cblxuQG1peGluIGhlYWRpbmc2KCkge1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG5cbiAgICBAaW5jbHVkZSB0ZXh0LXNpemUoYm9keS0zKTtcbn1cblxuQG1peGluIGNvbnRyaWJ1dG9ycy10ZXh0KCkge1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbn1cblxuQG1peGluIHRleHQtYm9keS0xKCkge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZy10ZXh0LWJvZHktMS1mb250LXNpemUpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1nLXRleHQtYm9keS0xLWxpbmUtaGVpZ2h0KTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZy10ZXh0LWJvZHktZm9udC13ZWlnaHQpO1xufVxuXG5AbWl4aW4gZGVza3RvcC1vbmx5KCkge1xuICAgIEBtZWRpYSAobWF4LXdpZHRoOiBtYXAuZ2V0KHZhcmlhYmxlcy4kc2NyZWVuQnJlYWtwb2ludHMsICdtZCcpIC0gMSkge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbn1cblxuQG1peGluIGRlc2t0b3AtdGFibGV0LW9ubHkoKSB7XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IG1hcC5nZXQodmFyaWFibGVzLiRzY3JlZW5CcmVha3BvaW50cywgJ3NtJykgLSAxKSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxufVxuXG5AbWl4aW4gbW9iaWxlLXRhYmxldC1vbmx5KCkge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiBtYXAuZ2V0KHZhcmlhYmxlcy4kc2NyZWVuQnJlYWtwb2ludHMsICdtZCcpKSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxufVxuXG5AbWl4aW4gbW9iaWxlLW9ubHkoKSB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IG1hcC5nZXQodmFyaWFibGVzLiRzY3JlZW5CcmVha3BvaW50cywgJ3NtJykpIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG59XG5cbkBtaXhpbiBncmF2aXR5LXVpLXRleHQtc2l6ZXMoJGRlbHRhKSB7XG4gICAgLS1nLXRleHQtYm9keS0xLWZvbnQtc2l6ZTogI3sxM3B4ICsgJGRlbHRhfTtcbiAgICAtLWctdGV4dC1ib2R5LTEtbGluZS1oZWlnaHQ6ICN7MThweCArICRkZWx0YX07XG4gICAgLS1nLXRleHQtYm9keS0yLWZvbnQtc2l6ZTogI3sxNXB4ICsgJGRlbHRhfTtcbiAgICAtLWctdGV4dC1ib2R5LTItbGluZS1oZWlnaHQ6ICN7MjBweCArICRkZWx0YX07XG4gICAgLS1nLXRleHQtYm9keS0zLWZvbnQtc2l6ZTogI3sxN3B4ICsgJGRlbHRhfTtcbiAgICAtLWctdGV4dC1ib2R5LTMtbGluZS1oZWlnaHQ6ICN7MjRweCArICRkZWx0YX07XG4gICAgLS1nLXRleHQtYm9keS1zaG9ydC1mb250LXNpemU6ICN7MTNweCArICRkZWx0YX07XG4gICAgLS1nLXRleHQtY2FwdGlvbi0xLWZvbnQtc2l6ZTogI3s5cHggKyAkZGVsdGF9O1xuICAgIC0tZy10ZXh0LWNhcHRpb24tMi1mb250LXNpemU6ICN7MTFweCArICRkZWx0YX07XG4gICAgLS1nLXRleHQtaGVhZGVyLTEtZm9udC1zaXplOiAjezIwcHggKyAkZGVsdGF9O1xuICAgIC0tZy10ZXh0LWhlYWRlci0yLWZvbnQtc2l6ZTogI3syNHB4ICsgJGRlbHRhfTtcbiAgICAtLWctdGV4dC1zdWJoZWFkZXItMS1mb250LXNpemU6ICN7MTNweCArICRkZWx0YX07XG4gICAgLS1nLXRleHQtc3ViaGVhZGVyLTItZm9udC1zaXplOiAjezE1cHggKyAkZGVsdGF9O1xuICAgIC0tZy10ZXh0LXN1YmhlYWRlci0zLWZvbnQtc2l6ZTogI3sxN3B4ICsgJGRlbHRhfTtcbiAgICAtLWctdGV4dC1kaXNwbGF5LTEtZm9udC1zaXplOiAjezI4cHggKyAkZGVsdGF9O1xuICAgIC0tZy10ZXh0LWRpc3BsYXktMi1mb250LXNpemU6ICN7MzJweCArICRkZWx0YX07XG4gICAgLS1nLXRleHQtZGlzcGxheS0zLWZvbnQtc2l6ZTogI3s0MHB4ICsgJGRlbHRhfTtcbiAgICAtLWctdGV4dC1kaXNwbGF5LTQtZm9udC1zaXplOiAjezQ4cHggKyAkZGVsdGF9O1xuICAgIC0tZy10ZXh0LWNvZGUtMS1mb250LXNpemU6ICN7MTJweCArICRkZWx0YX07XG4gICAgLS1nLXRleHQtY29kZS0yLWZvbnQtc2l6ZTogI3sxNHB4ICsgJGRlbHRhfTtcbiAgICAtLWctdGV4dC1jb2RlLTMtZm9udC1zaXplOiAjezE2cHggKyAkZGVsdGF9O1xuICAgIC0tZy10ZXh0LWNvZGUtaW5saW5lLTEtZm9udC1zaXplOiAjezEycHggKyAkZGVsdGF9O1xuICAgIC0tZy10ZXh0LWNvZGUtaW5saW5lLTItZm9udC1zaXplOiAjezE0cHggKyAkZGVsdGF9O1xuICAgIC0tZy10ZXh0LWNvZGUtaW5saW5lLTMtZm9udC1zaXplOiAjezE2cHggKyAkZGVsdGF9O1xuXG4gICAgLS15Zm0tZm9udC1zaXplOiB2YXIoLS1nLXRleHQtYm9keS0yLWZvbnQtc2l6ZSk7XG4gICAgLS15Zm0tZm9udC1saW5lLWhlaWdodDogdmFyKC0tZy10ZXh0LWJvZHktMi1saW5lLWhlaWdodCk7XG4gICAgLS15Zm0tZm9udC1zaXplLWgyOiB2YXIoLS1nLXRleHQtaGVhZGVyLTItZm9udC1zaXplKTtcbiAgICAtLXlmbS1mb250LXNpemUtaDM6IHZhcigtLWctdGV4dC1oZWFkZXItMS1mb250LXNpemUpO1xuICAgIC0teWZtLWZvbnQtc2l6ZS1oNDogdmFyKC0tZy10ZXh0LXN1YmhlYWRlci0zLWZvbnQtc2l6ZSk7XG4gICAgLS15Zm0tZm9udC1zaXplLWg1OiB2YXIoLS1nLXRleHQtc3ViaGVhZGVyLTItZm9udC1zaXplKTtcbiAgICAtLXlmbS1mb250LXNpemUtaDY6IHZhcigtLWctdGV4dC1zdWJoZWFkZXItMS1mb250LXNpemUpO1xufVxuIl19 */", "@use 'sass:map';\n@use 'variables';\n\n@mixin text-size($name) {\n font-size: var(--g-text-#{$name}-font-size);\n line-height: var(--g-text-#{$name}-line-height);\n}\n\n@mixin reset-list-style() {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n@mixin fixAnchorPosition($offset: 0px) {\n padding-top: calc(var(--dc-header-height, #{variables.$headerHeight}));\n margin-top: calc(#{$offset} - var(--dc-header-height, #{variables.$headerHeight}));\n}\n\n@mixin reset-link-style() {\n color: inherit;\n text-decoration: none;\n}\n\n@mixin islands-focus() {\n outline: none;\n\n .utilityfocus &:focus {\n outline: 2px solid #ffdb4d;\n }\n}\n\n@mixin focusable($offset: 0, $mode: 'outline') {\n @if $mode == 'outline' {\n &:focus {\n outline: 2px solid var(--g-color-line-focus);\n outline-offset: $offset;\n }\n &:focus:not(:focus-visible) {\n outline: 0;\n }\n }\n\n @if $mode == 'box-shadow' {\n &:focus {\n box-shadow: 0 0 0 2px var(--g-color-line-focus);\n outline: 0;\n }\n &:focus:not(:focus-visible) {\n box-shadow: none;\n }\n }\n}\n\n@mixin link() {\n color: var(--g-color-text-link);\n text-decoration: none;\n cursor: pointer;\n border-radius: var(--g-focus-border-radius);\n\n @include islands-focus();\n\n @include focusable(0, 'box-shadow');\n\n &:hover,\n &:active {\n color: var(--g-color-text-link-hover);\n }\n}\n\n@mixin heading1() {\n font-weight: 500;\n\n @include text-size(display-3);\n\n @media (max-width: map.get(variables.$screenBreakpoints, 'md') - 1) {\n @include text-size(display-2);\n }\n}\n\n@mixin heading2() {\n font-weight: 500;\n\n @include text-size(display-1);\n}\n\n@mixin heading3() {\n font-weight: 500;\n\n @include text-size(header-2);\n}\n\n@mixin heading4() {\n font-weight: 500;\n\n @include text-size(header-1);\n}\n\n@mixin heading5() {\n font-weight: 500;\n\n @include text-size(body-3);\n}\n\n@mixin heading6() {\n font-weight: 400;\n\n @include text-size(body-3);\n}\n\n@mixin contributors-text() {\n font-size: 13px;\n font-weight: 400;\n margin-right: 5px;\n align-self: center;\n}\n\n@mixin text-body-1() {\n font-size: var(--g-text-body-1-font-size);\n line-height: var(--g-text-body-1-line-height);\n font-weight: var(--g-text-body-font-weight);\n}\n\n@mixin desktop-only() {\n @media (max-width: map.get(variables.$screenBreakpoints, 'md') - 1) {\n display: none;\n }\n}\n\n@mixin desktop-tablet-only() {\n @media (max-width: map.get(variables.$screenBreakpoints, 'sm') - 1) {\n display: none;\n }\n}\n\n@mixin mobile-tablet-only() {\n @media (min-width: map.get(variables.$screenBreakpoints, 'md')) {\n display: none;\n }\n}\n\n@mixin mobile-only() {\n @media (min-width: map.get(variables.$screenBreakpoints, 'sm')) {\n display: none;\n }\n}\n\n@mixin gravity-ui-text-sizes($delta) {\n --g-text-body-1-font-size: #{13px + $delta};\n --g-text-body-1-line-height: #{18px + $delta};\n --g-text-body-2-font-size: #{15px + $delta};\n --g-text-body-2-line-height: #{20px + $delta};\n --g-text-body-3-font-size: #{17px + $delta};\n --g-text-body-3-line-height: #{24px + $delta};\n --g-text-body-short-font-size: #{13px + $delta};\n --g-text-caption-1-font-size: #{9px + $delta};\n --g-text-caption-2-font-size: #{11px + $delta};\n --g-text-header-1-font-size: #{20px + $delta};\n --g-text-header-2-font-size: #{24px + $delta};\n --g-text-subheader-1-font-size: #{13px + $delta};\n --g-text-subheader-2-font-size: #{15px + $delta};\n --g-text-subheader-3-font-size: #{17px + $delta};\n --g-text-display-1-font-size: #{28px + $delta};\n --g-text-display-2-font-size: #{32px + $delta};\n --g-text-display-3-font-size: #{40px + $delta};\n --g-text-display-4-font-size: #{48px + $delta};\n --g-text-code-1-font-size: #{12px + $delta};\n --g-text-code-2-font-size: #{14px + $delta};\n --g-text-code-3-font-size: #{16px + $delta};\n --g-text-code-inline-1-font-size: #{12px + $delta};\n --g-text-code-inline-2-font-size: #{14px + $delta};\n --g-text-code-inline-3-font-size: #{16px + $delta};\n\n --yfm-font-size: var(--g-text-body-2-font-size);\n --yfm-font-line-height: var(--g-text-body-2-line-height);\n --yfm-font-size-h2: var(--g-text-header-2-font-size);\n --yfm-font-size-h3: var(--g-text-header-1-font-size);\n --yfm-font-size-h4: var(--g-text-subheader-3-font-size);\n --yfm-font-size-h5: var(--g-text-subheader-2-font-size);\n --yfm-font-size-h6: var(--g-text-subheader-1-font-size);\n}\n"],
5
5
  "mappings": ";AAKI,CAAA;AACI,WAAA;AACA,eAAA;ACJR;ADQQ,CAAA;AEPJ,aAAA,IAAA;AACA,eAAA,IAAA;ADEJ;ADOQ,CAAA;AEVJ,aAAA,IAAA;AACA,eAAA,IAAA;ADMJ;ADMQ,CAAA;AEbJ,aAAA,IAAA;AACA,eAAA,IAAA;ADUJ;ADQQ,CAAA;AACI,SAAA,IAAA;ACNZ;ADUI,CAAA;AACI,SAAA;AEzBJ,aAAA,IAAA;AACA,eAAA,IAAA;ADkBJ;ADUI,CAAA;AACI,WAAA;ACRR;ADWI,CAAA;AACI,WAAA,IAAA;AACA,SAAA;ACTR;ADWQ,CAJJ,0BAII,CAAA;AACI,cAAA;ACTZ;ADaI,CAAA;AACI,gBAAA;ACXR;ADcI,CAAA;AACI,WAAA;AACA,WAAA;AACA,SAAA;ACZR;ADeI,CAAA;AACI,SAAA,IAAA;ACbR;ADgBI,CAAA;AACI,WAAA;AACA,eAAA;AACA,eAAA;ACdR;ADgBQ,CAAA,SAAA,CALJ;AAMQ,UAAA,EAAA,KAAA,EAAA;ACdZ;ADiBQ,CAAA,SAAA,CATJ,uCASI,EAAA;AACI,aAAA,OAAA;ACfZ;ADmBI,QAAA,WAAA;AACI,GA/CJ;AAgDQ,WAAA;ACjBV;ADoBM,GAAA;AACI,cAAA;AAEA,SAAA,IAAA;AAAA,WAAA;AAAA,YAAA;AAAA,UAAA;AAEA,eAAA,YAAA,CAAA,EAAA,CAAA,EAAA;AClBV;ADqBM,GAtDJ;AAuDQ,eAAA;ACnBV;ADsBM,GAtDJ;AAuDQ,WAAA;ACpBV;AACF;",
6
6
  "names": []
@@ -138,12 +138,12 @@ var SettingsControl = (props) => {
138
138
  )
139
139
  } : null,
140
140
  onChangeTheme ? {
141
- text: t("label_dark_theme"),
141
+ text: t("full_label_dark_theme"),
142
142
  description: import_models.Theme.Light === theme ? t("description_disabled_dark_theme") : t("description_enabled_dark_theme"),
143
143
  control: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
144
144
  import_uikit.Switch,
145
145
  {
146
- title: t("label_dark_theme"),
146
+ title: t("full_label_dark_theme"),
147
147
  checked: theme === import_models.Theme.Dark,
148
148
  onChange: _onChangeTheme
149
149
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/Controls/single-controls/SettingsControl/SettingsControl.tsx"],
4
- "sourcesContent": ["import type {ReactElement} from 'react';\n\nimport {useCallback, useContext, useRef} from 'react';\nimport {Gear} from '@gravity-ui/icons';\nimport {Button, List, Popover, Switch, useDirection} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\n\nimport {usePopupState, useTranslation} from '../../../../hooks';\nimport {TextSizes, Theme} from '../../../../models';\nimport {getPopupPosition} from '../../../../utils';\nimport {Control} from '../../../Control';\nimport {ControlsLayoutContext} from '../../ControlsLayout';\nimport {CommonAnalyticsEvent, useAnalytics} from '../../../../shared/libs/analytics';\n\nimport './SettingsControl.scss';\n\nconst ITEM_HEIGHT = 48;\nconst b = cn('dc-settings-control');\n\ninterface ControlProps {\n fullScreen?: boolean;\n singlePage?: boolean;\n wideFormat?: boolean;\n showMiniToc?: boolean;\n theme?: Theme;\n textSize?: TextSizes;\n onChangeWideFormat?: (value: boolean) => void;\n onChangeShowMiniToc?: (value: boolean) => void;\n onChangeTheme?: (theme: Theme) => void;\n onChangeTextSize?: (textSize: TextSizes) => void;\n}\n\ninterface SettingControlItem {\n text: string;\n description: string;\n control: ReactElement;\n}\n\nconst SettingsControl = (props: ControlProps) => {\n const {t} = useTranslation('controls');\n const analytics = useAnalytics();\n const {controlClassName, controlSize, isVerticalView, isWideView, isMobileView, popupPosition} =\n useContext(ControlsLayoutContext);\n const {\n textSize,\n theme,\n wideFormat,\n showMiniToc,\n fullScreen,\n singlePage,\n onChangeTheme,\n onChangeWideFormat,\n onChangeShowMiniToc,\n onChangeTextSize,\n } = props;\n\n const controlRef = useRef<HTMLButtonElement | null>(null);\n const direction = useDirection();\n\n const popupState = usePopupState();\n\n const handleOpenChange = useCallback(\n (opened: boolean) => {\n if (opened) {\n analytics.track(CommonAnalyticsEvent.DOCS_HEADER_SETTINGS_CLICK);\n\n popupState.open();\n } else {\n popupState.close();\n }\n },\n [analytics, popupState],\n );\n\n const _onChangeTextSize = useCallback(\n (textSizeKey: TextSizes) => () => {\n analytics.track(CommonAnalyticsEvent.DOCS_FONTSIZE_MODE_CLICK);\n\n if (onChangeTextSize) {\n onChangeTextSize(textSizeKey);\n }\n },\n [onChangeTextSize, analytics],\n );\n const _onChangeTheme = useCallback(() => {\n if (onChangeTheme) {\n onChangeTheme(theme === Theme.Dark ? Theme.Light : Theme.Dark);\n }\n }, [theme, onChangeTheme]);\n const _onChangeWideFormat = useCallback(() => {\n analytics.track(CommonAnalyticsEvent.DOCS_WIDESCREEN_MODE_CLICK);\n\n if (onChangeWideFormat) {\n onChangeWideFormat(!wideFormat);\n }\n }, [wideFormat, onChangeWideFormat, analytics]);\n const _onChangeShowMiniToc = useCallback(() => {\n analytics.track(CommonAnalyticsEvent.DOCS_HIDE_PAGE_NAV_CLICK);\n\n if (onChangeShowMiniToc) {\n onChangeShowMiniToc(!showMiniToc);\n }\n }, [showMiniToc, onChangeShowMiniToc, analytics]);\n\n const getSettingsItems = useCallback(() => {\n const allTextSizes = Object.values(TextSizes);\n const showMiniTocDisabled = fullScreen || singlePage;\n\n return [\n onChangeWideFormat\n ? {\n text: t('label_wide_format'),\n description: t(\n `description_wide_format_${wideFormat ? 'enabled' : 'disabled'}`,\n ),\n control: (\n <Switch\n title={t('label_wide_format')}\n checked={wideFormat}\n onChange={_onChangeWideFormat}\n />\n ),\n }\n : null,\n onChangeShowMiniToc\n ? {\n text: t('label_show_mini_toc'),\n description: t(\n `description_show_mini_toc_${showMiniToc ? 'enabled' : 'disabled'}`,\n t(`description_show_mini_toc`),\n ),\n control: (\n <Switch\n title={t('label_show_mini_toc')}\n disabled={showMiniTocDisabled}\n checked={showMiniToc}\n onChange={_onChangeShowMiniToc}\n />\n ),\n }\n : null,\n onChangeTheme\n ? {\n text: t('label_dark_theme'),\n description:\n Theme.Light === theme\n ? t('description_disabled_dark_theme')\n : t('description_enabled_dark_theme'),\n control: (\n <Switch\n title={t('label_dark_theme')}\n checked={theme === Theme.Dark}\n onChange={_onChangeTheme}\n />\n ),\n }\n : null,\n onChangeTextSize\n ? {\n text: t('label_text_size'),\n description: t(`description_${textSize}_text_size`),\n control: (\n <div className={b('text-size-control')}>\n {allTextSizes.map((textSizeKey) => (\n <Button\n key={textSizeKey}\n className={b('text-size-button', {\n [textSizeKey]: true,\n })}\n view=\"flat\"\n onClick={_onChangeTextSize(textSizeKey)}\n title={`${t('label_text_size')} ${t(`description_${textSizeKey}_text_size`)}`}\n >\n <Button.Icon\n className={b('text-size-button-icon', {\n active: textSize === textSizeKey,\n })}\n >\n <span aria-hidden={true}>A</span>\n </Button.Icon>\n </Button>\n ))}\n </div>\n ),\n }\n : null,\n ].filter(Boolean) as unknown as SettingControlItem[];\n }, [\n t,\n textSize,\n theme,\n wideFormat,\n showMiniToc,\n fullScreen,\n singlePage,\n _onChangeTheme,\n _onChangeWideFormat,\n _onChangeShowMiniToc,\n _onChangeTextSize,\n onChangeWideFormat,\n onChangeShowMiniToc,\n onChangeTheme,\n onChangeTextSize,\n ]);\n\n const settingsItems = getSettingsItems();\n\n return (\n <Popover\n open={popupState.visible}\n onOpenChange={handleOpenChange}\n trigger=\"click\"\n strategy=\"fixed\"\n placement={getPopupPosition(isVerticalView, direction)}\n hasArrow={!isMobileView}\n returnFocus={true}\n content={\n <div className={b('popup', {tooltip: true, 'tooltip-content': true})}>\n <List\n role={'list'}\n items={settingsItems}\n className={b('list')}\n itemHeight={ITEM_HEIGHT}\n itemsHeight={ITEM_HEIGHT * settingsItems.length}\n filterable={false}\n renderItem={(item: SettingControlItem) => {\n return (\n <div className={b('list-item')}>\n <div className={b('list-item-content')}>\n <div className={b('list-item-text')}>{item.text}</div>\n <div className={b('list-item-description')}>\n {item.description}\n </div>\n </div>\n <div className={b('list-item-control')}>{item.control}</div>\n </div>\n );\n }}\n />\n </div>\n }\n >\n <Control\n ref={controlRef}\n className={controlClassName}\n size={controlSize}\n isWideView={isWideView}\n isVerticalView={isVerticalView}\n tooltipText={t('settings-text')}\n popupPosition={popupPosition}\n icon={Gear}\n isTooltipHidden={popupState.visible}\n />\n </Popover>\n );\n};\n\nexport default SettingsControl;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type {ReactElement} from 'react';\n\nimport {useCallback, useContext, useRef} from 'react';\nimport {Gear} from '@gravity-ui/icons';\nimport {Button, List, Popover, Switch, useDirection} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\n\nimport {usePopupState, useTranslation} from '../../../../hooks';\nimport {TextSizes, Theme} from '../../../../models';\nimport {getPopupPosition} from '../../../../utils';\nimport {Control} from '../../../Control';\nimport {ControlsLayoutContext} from '../../ControlsLayout';\nimport {CommonAnalyticsEvent, useAnalytics} from '../../../../shared/libs/analytics';\n\nimport './SettingsControl.scss';\n\nconst ITEM_HEIGHT = 48;\nconst b = cn('dc-settings-control');\n\ninterface ControlProps {\n fullScreen?: boolean;\n singlePage?: boolean;\n wideFormat?: boolean;\n showMiniToc?: boolean;\n theme?: Theme;\n textSize?: TextSizes;\n onChangeWideFormat?: (value: boolean) => void;\n onChangeShowMiniToc?: (value: boolean) => void;\n onChangeTheme?: (theme: Theme) => void;\n onChangeTextSize?: (textSize: TextSizes) => void;\n}\n\ninterface SettingControlItem {\n text: string;\n description: string;\n control: ReactElement;\n}\n\nconst SettingsControl = (props: ControlProps) => {\n const {t} = useTranslation('controls');\n const analytics = useAnalytics();\n const {controlClassName, controlSize, isVerticalView, isWideView, isMobileView, popupPosition} =\n useContext(ControlsLayoutContext);\n const {\n textSize,\n theme,\n wideFormat,\n showMiniToc,\n fullScreen,\n singlePage,\n onChangeTheme,\n onChangeWideFormat,\n onChangeShowMiniToc,\n onChangeTextSize,\n } = props;\n\n const controlRef = useRef<HTMLButtonElement | null>(null);\n const direction = useDirection();\n\n const popupState = usePopupState();\n\n const handleOpenChange = useCallback(\n (opened: boolean) => {\n if (opened) {\n analytics.track(CommonAnalyticsEvent.DOCS_HEADER_SETTINGS_CLICK);\n\n popupState.open();\n } else {\n popupState.close();\n }\n },\n [analytics, popupState],\n );\n\n const _onChangeTextSize = useCallback(\n (textSizeKey: TextSizes) => () => {\n analytics.track(CommonAnalyticsEvent.DOCS_FONTSIZE_MODE_CLICK);\n\n if (onChangeTextSize) {\n onChangeTextSize(textSizeKey);\n }\n },\n [onChangeTextSize, analytics],\n );\n const _onChangeTheme = useCallback(() => {\n if (onChangeTheme) {\n onChangeTheme(theme === Theme.Dark ? Theme.Light : Theme.Dark);\n }\n }, [theme, onChangeTheme]);\n const _onChangeWideFormat = useCallback(() => {\n analytics.track(CommonAnalyticsEvent.DOCS_WIDESCREEN_MODE_CLICK);\n\n if (onChangeWideFormat) {\n onChangeWideFormat(!wideFormat);\n }\n }, [wideFormat, onChangeWideFormat, analytics]);\n const _onChangeShowMiniToc = useCallback(() => {\n analytics.track(CommonAnalyticsEvent.DOCS_HIDE_PAGE_NAV_CLICK);\n\n if (onChangeShowMiniToc) {\n onChangeShowMiniToc(!showMiniToc);\n }\n }, [showMiniToc, onChangeShowMiniToc, analytics]);\n\n const getSettingsItems = useCallback(() => {\n const allTextSizes = Object.values(TextSizes);\n const showMiniTocDisabled = fullScreen || singlePage;\n\n return [\n onChangeWideFormat\n ? {\n text: t('label_wide_format'),\n description: t(\n `description_wide_format_${wideFormat ? 'enabled' : 'disabled'}`,\n ),\n control: (\n <Switch\n title={t('label_wide_format')}\n checked={wideFormat}\n onChange={_onChangeWideFormat}\n />\n ),\n }\n : null,\n onChangeShowMiniToc\n ? {\n text: t('label_show_mini_toc'),\n description: t(\n `description_show_mini_toc_${showMiniToc ? 'enabled' : 'disabled'}`,\n t(`description_show_mini_toc`),\n ),\n control: (\n <Switch\n title={t('label_show_mini_toc')}\n disabled={showMiniTocDisabled}\n checked={showMiniToc}\n onChange={_onChangeShowMiniToc}\n />\n ),\n }\n : null,\n onChangeTheme\n ? {\n text: t('full_label_dark_theme'),\n description:\n Theme.Light === theme\n ? t('description_disabled_dark_theme')\n : t('description_enabled_dark_theme'),\n control: (\n <Switch\n title={t('full_label_dark_theme')}\n checked={theme === Theme.Dark}\n onChange={_onChangeTheme}\n />\n ),\n }\n : null,\n onChangeTextSize\n ? {\n text: t('label_text_size'),\n description: t(`description_${textSize}_text_size`),\n control: (\n <div className={b('text-size-control')}>\n {allTextSizes.map((textSizeKey) => (\n <Button\n key={textSizeKey}\n className={b('text-size-button', {\n [textSizeKey]: true,\n })}\n view=\"flat\"\n onClick={_onChangeTextSize(textSizeKey)}\n title={`${t('label_text_size')} ${t(`description_${textSizeKey}_text_size`)}`}\n >\n <Button.Icon\n className={b('text-size-button-icon', {\n active: textSize === textSizeKey,\n })}\n >\n <span aria-hidden={true}>A</span>\n </Button.Icon>\n </Button>\n ))}\n </div>\n ),\n }\n : null,\n ].filter(Boolean) as unknown as SettingControlItem[];\n }, [\n t,\n textSize,\n theme,\n wideFormat,\n showMiniToc,\n fullScreen,\n singlePage,\n _onChangeTheme,\n _onChangeWideFormat,\n _onChangeShowMiniToc,\n _onChangeTextSize,\n onChangeWideFormat,\n onChangeShowMiniToc,\n onChangeTheme,\n onChangeTextSize,\n ]);\n\n const settingsItems = getSettingsItems();\n\n return (\n <Popover\n open={popupState.visible}\n onOpenChange={handleOpenChange}\n trigger=\"click\"\n strategy=\"fixed\"\n placement={getPopupPosition(isVerticalView, direction)}\n hasArrow={!isMobileView}\n returnFocus={true}\n content={\n <div className={b('popup', {tooltip: true, 'tooltip-content': true})}>\n <List\n role={'list'}\n items={settingsItems}\n className={b('list')}\n itemHeight={ITEM_HEIGHT}\n itemsHeight={ITEM_HEIGHT * settingsItems.length}\n filterable={false}\n renderItem={(item: SettingControlItem) => {\n return (\n <div className={b('list-item')}>\n <div className={b('list-item-content')}>\n <div className={b('list-item-text')}>{item.text}</div>\n <div className={b('list-item-description')}>\n {item.description}\n </div>\n </div>\n <div className={b('list-item-control')}>{item.control}</div>\n </div>\n );\n }}\n />\n </div>\n }\n >\n <Control\n ref={controlRef}\n className={controlClassName}\n size={controlSize}\n isWideView={isWideView}\n isVerticalView={isVerticalView}\n tooltipText={t('settings-text')}\n popupPosition={popupPosition}\n icon={Gear}\n isTooltipHidden={popupState.visible}\n />\n </Popover>\n );\n};\n\nexport default SettingsControl;\n"],
5
+ "mappings": "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",
6
6
  "names": ["cn"]
7
7
  }
@@ -0,0 +1,4 @@
1
+ export type MarkdownAction = 'copy' | 'view';
2
+ export declare function setMarkdownAction(url: URL, action: MarkdownAction): string;
3
+ export declare function resolveMarkdownActionUrl(sourceUrl: string, baseUrl: string, action: MarkdownAction): string;
4
+ export declare function getMarkdownUrl(currentUrl: string, action?: MarkdownAction): string;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/components/Controls/single-controls/markdown-url.ts
21
+ var markdown_url_exports = {};
22
+ __export(markdown_url_exports, {
23
+ getMarkdownUrl: () => getMarkdownUrl,
24
+ resolveMarkdownActionUrl: () => resolveMarkdownActionUrl,
25
+ setMarkdownAction: () => setMarkdownAction
26
+ });
27
+ module.exports = __toCommonJS(markdown_url_exports);
28
+ var COPY_ACTION_QUERY_PARAM = "__mdAction";
29
+ function setMarkdownAction(url, action) {
30
+ url.hash = "";
31
+ if (action === "copy") {
32
+ url.searchParams.set(COPY_ACTION_QUERY_PARAM, action);
33
+ } else {
34
+ url.searchParams.delete(COPY_ACTION_QUERY_PARAM);
35
+ }
36
+ return url.toString();
37
+ }
38
+ function resolveMarkdownActionUrl(sourceUrl, baseUrl, action) {
39
+ const markdownUrl = new URL(sourceUrl, baseUrl);
40
+ const resolvedUrl = setMarkdownAction(markdownUrl, action);
41
+ if (/^[a-z][a-z\d+.-]*:/iu.test(sourceUrl)) {
42
+ return resolvedUrl;
43
+ }
44
+ const [relativePath] = sourceUrl.split(/[?#]/u, 1);
45
+ return `${relativePath}${markdownUrl.search}`;
46
+ }
47
+ function getMarkdownUrl(currentUrl, action = "view") {
48
+ const markdownUrl = new URL(currentUrl);
49
+ if (markdownUrl.pathname.endsWith("/")) {
50
+ markdownUrl.pathname += "index.md";
51
+ } else {
52
+ markdownUrl.pathname = markdownUrl.pathname.replace(/\.(?:html?|md)$/i, "") + ".md";
53
+ }
54
+ return setMarkdownAction(markdownUrl, action);
55
+ }
56
+ //# sourceMappingURL=markdown-url.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/components/Controls/single-controls/markdown-url.ts"],
4
+ "sourcesContent": ["export type MarkdownAction = 'copy' | 'view';\n\nconst COPY_ACTION_QUERY_PARAM = '__mdAction';\n\nexport function setMarkdownAction(url: URL, action: MarkdownAction) {\n url.hash = '';\n\n if (action === 'copy') {\n url.searchParams.set(COPY_ACTION_QUERY_PARAM, action);\n } else {\n url.searchParams.delete(COPY_ACTION_QUERY_PARAM);\n }\n\n return url.toString();\n}\n\nexport function resolveMarkdownActionUrl(\n sourceUrl: string,\n baseUrl: string,\n action: MarkdownAction,\n) {\n const markdownUrl = new URL(sourceUrl, baseUrl);\n const resolvedUrl = setMarkdownAction(markdownUrl, action);\n\n if (/^[a-z][a-z\\d+.-]*:/iu.test(sourceUrl)) {\n return resolvedUrl;\n }\n\n const [relativePath] = sourceUrl.split(/[?#]/u, 1);\n\n return `${relativePath}${markdownUrl.search}`;\n}\n\nexport function getMarkdownUrl(currentUrl: string, action: MarkdownAction = 'view') {\n const markdownUrl = new URL(currentUrl);\n\n if (markdownUrl.pathname.endsWith('/')) {\n markdownUrl.pathname += 'index.md';\n } else {\n markdownUrl.pathname = markdownUrl.pathname.replace(/\\.(?:html?|md)$/i, '') + '.md';\n }\n\n return setMarkdownAction(markdownUrl, action);\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,IAAM,0BAA0B;AAEzB,SAAS,kBAAkB,KAAU,QAAwB;AAChE,MAAI,OAAO;AAEX,MAAI,WAAW,QAAQ;AACnB,QAAI,aAAa,IAAI,yBAAyB,MAAM;AAAA,EACxD,OAAO;AACH,QAAI,aAAa,OAAO,uBAAuB;AAAA,EACnD;AAEA,SAAO,IAAI,SAAS;AACxB;AAEO,SAAS,yBACZ,WACA,SACA,QACF;AACE,QAAM,cAAc,IAAI,IAAI,WAAW,OAAO;AAC9C,QAAM,cAAc,kBAAkB,aAAa,MAAM;AAEzD,MAAI,uBAAuB,KAAK,SAAS,GAAG;AACxC,WAAO;AAAA,EACX;AAEA,QAAM,CAAC,YAAY,IAAI,UAAU,MAAM,SAAS,CAAC;AAEjD,SAAO,GAAG,YAAY,GAAG,YAAY,MAAM;AAC/C;AAEO,SAAS,eAAe,YAAoB,SAAyB,QAAQ;AAChF,QAAM,cAAc,IAAI,IAAI,UAAU;AAEtC,MAAI,YAAY,SAAS,SAAS,GAAG,GAAG;AACpC,gBAAY,YAAY;AAAA,EAC5B,OAAO;AACH,gBAAY,WAAW,YAAY,SAAS,QAAQ,oBAAoB,EAAE,IAAI;AAAA,EAClF;AAEA,SAAO,kBAAkB,aAAa,MAAM;AAChD;",
6
+ "names": []
7
+ }