@redocly/theme 0.54.3 → 0.55.0-next.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.
- package/lib/components/Breadcrumbs/Breadcrumbs.js +3 -3
- package/lib/components/Button/Button.d.ts +0 -1
- package/lib/components/Buttons/EditPageButton.js +3 -3
- package/lib/components/CatalogClassic/CatalogClassicActions.js +3 -3
- package/lib/components/CatalogClassic/CatalogClassicCard.js +3 -3
- package/lib/components/CatalogClassic/CatalogClassicInfoBlock.js +3 -3
- package/lib/components/CodeBlock/CodeBlockControls.js +3 -3
- package/lib/components/Feedback/Feedback.js +3 -3
- package/lib/components/Feedback/ReportDialog.js +3 -3
- package/lib/components/Filter/FilterCheckboxes.js +3 -3
- package/lib/components/Footer/FooterItem.js +7 -4
- package/lib/components/LanguagePicker/LanguagePicker.js +3 -3
- package/lib/components/Logo/Logo.js +3 -3
- package/lib/components/Menu/MenuItem.js +3 -3
- package/lib/components/Navbar/Navbar.js +4 -4
- package/lib/components/Navbar/NavbarItem.js +3 -3
- package/lib/components/Search/SearchDialog.js +5 -5
- package/lib/components/Search/SearchInput.js +3 -3
- package/lib/components/Search/SearchRecent.js +3 -3
- package/lib/components/Search/SearchTrigger.js +4 -2
- package/lib/components/SidebarActions/SidebarActions.js +5 -5
- package/lib/components/TableOfContent/TableOfContent.js +3 -3
- package/lib/components/UserMenu/LoginButton.js +3 -3
- package/lib/components/UserMenu/LogoutMenuItem.js +3 -3
- package/lib/core/hooks/__mocks__/use-theme-hooks.d.ts +0 -3
- package/lib/core/hooks/__mocks__/use-theme-hooks.js +0 -3
- package/lib/core/hooks/index.d.ts +2 -0
- package/lib/core/hooks/index.js +2 -0
- package/lib/core/hooks/search/use-search-dialog.js +5 -5
- package/lib/core/hooks/use-color-switcher.js +3 -3
- package/lib/core/hooks/use-input-key-commands.js +2 -1
- package/lib/core/hooks/use-page-active-version.d.ts +1 -0
- package/lib/core/hooks/use-page-active-version.js +11 -0
- package/lib/core/hooks/use-page-versions.d.ts +7 -0
- package/lib/core/hooks/use-page-versions.js +15 -0
- package/lib/core/hooks/use-product-picker.js +3 -3
- package/lib/core/hooks/use-theme-hooks.js +4 -1
- package/lib/core/styles/dark.js +14 -3
- package/lib/core/styles/global.js +9 -6
- package/lib/core/types/hooks.d.ts +0 -5
- package/lib/core/types/l10n.d.ts +1 -1
- package/lib/core/utils/get-user-agent.d.ts +4 -0
- package/lib/core/utils/get-user-agent.js +15 -0
- package/lib/core/utils/index.d.ts +1 -0
- package/lib/core/utils/index.js +1 -0
- package/lib/markdoc/components/Tabs/TabList.d.ts +4 -1
- package/lib/markdoc/components/Tabs/TabList.js +36 -16
- package/lib/markdoc/components/Tabs/Tabs.js +7 -3
- package/package.json +3 -3
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +3 -3
- package/src/components/Button/Button.tsx +1 -1
- package/src/components/Buttons/EditPageButton.tsx +3 -3
- package/src/components/CatalogClassic/CatalogClassicActions.tsx +3 -3
- package/src/components/CatalogClassic/CatalogClassicCard.tsx +3 -3
- package/src/components/CatalogClassic/CatalogClassicInfoBlock.tsx +3 -3
- package/src/components/CodeBlock/CodeBlockControls.tsx +3 -3
- package/src/components/Feedback/Feedback.tsx +3 -3
- package/src/components/Feedback/ReportDialog.tsx +3 -3
- package/src/components/Filter/FilterCheckboxes.tsx +3 -3
- package/src/components/Footer/FooterItem.tsx +12 -4
- package/src/components/LanguagePicker/LanguagePicker.tsx +3 -3
- package/src/components/Logo/Logo.tsx +3 -3
- package/src/components/Menu/MenuItem.tsx +3 -3
- package/src/components/Navbar/Navbar.tsx +4 -4
- package/src/components/Navbar/NavbarItem.tsx +3 -3
- package/src/components/Search/SearchDialog.tsx +5 -5
- package/src/components/Search/SearchInput.tsx +3 -3
- package/src/components/Search/SearchRecent.tsx +3 -3
- package/src/components/Search/SearchTrigger.tsx +9 -3
- package/src/components/SidebarActions/SidebarActions.tsx +5 -5
- package/src/components/TableOfContent/TableOfContent.tsx +3 -3
- package/src/components/UserMenu/LoginButton.tsx +3 -3
- package/src/components/UserMenu/LogoutMenuItem.tsx +3 -3
- package/src/core/hooks/__mocks__/use-theme-hooks.ts +0 -3
- package/src/core/hooks/index.ts +2 -0
- package/src/core/hooks/search/use-search-dialog.ts +5 -5
- package/src/core/hooks/use-color-switcher.ts +3 -3
- package/src/core/hooks/use-input-key-commands.ts +3 -1
- package/src/core/hooks/use-page-active-version.ts +9 -0
- package/src/core/hooks/use-page-versions.ts +20 -0
- package/src/core/hooks/use-product-picker.ts +3 -3
- package/src/core/hooks/use-theme-hooks.ts +4 -1
- package/src/core/styles/dark.ts +15 -3
- package/src/core/styles/global.ts +9 -6
- package/src/core/types/hooks.ts +1 -4
- package/src/core/types/l10n.ts +1 -1
- package/src/core/utils/get-user-agent.ts +13 -0
- package/src/core/utils/index.ts +1 -0
- package/src/markdoc/components/Tabs/TabList.tsx +69 -38
- package/src/markdoc/components/Tabs/Tabs.tsx +7 -3
- package/src/settings.yaml +1 -0
|
@@ -9,8 +9,8 @@ const styled_components_1 = __importDefault(require("styled-components"));
|
|
|
9
9
|
const hooks_1 = require("../../core/hooks");
|
|
10
10
|
const Breadcrumb_1 = require("../../components/Breadcrumbs/Breadcrumb");
|
|
11
11
|
function Breadcrumbs(props) {
|
|
12
|
-
const { useBreadcrumbs,
|
|
13
|
-
const
|
|
12
|
+
const { useBreadcrumbs, useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
13
|
+
const telemetry = useTelemetry();
|
|
14
14
|
const breadcrumbs = useBreadcrumbs();
|
|
15
15
|
if (breadcrumbs.length === 0) {
|
|
16
16
|
return null;
|
|
@@ -19,7 +19,7 @@ function Breadcrumbs(props) {
|
|
|
19
19
|
const isLast = idx === breadcrumbs.length - 1;
|
|
20
20
|
return (react_1.default.createElement(react_1.default.Fragment, { key: idx },
|
|
21
21
|
react_1.default.createElement(Breadcrumb_1.Breadcrumb, { link: breadcrumb.link, label: breadcrumb.label, isActive: isLast, onClick: () => {
|
|
22
|
-
|
|
22
|
+
telemetry.send({
|
|
23
23
|
type: 'breadcrumb.clicked',
|
|
24
24
|
payload: {
|
|
25
25
|
link: breadcrumb.link,
|
|
@@ -18,7 +18,6 @@ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElemen
|
|
|
18
18
|
title?: string;
|
|
19
19
|
tabIndex?: number;
|
|
20
20
|
onClick?: (e?: any) => void;
|
|
21
|
-
ref?: React.Ref<HTMLButtonElement>;
|
|
22
21
|
type?: 'button' | 'submit' | 'reset';
|
|
23
22
|
}
|
|
24
23
|
export declare function generateClassName({ variant, tone, size, extraClass, }: ButtonProps): string;
|
|
@@ -10,10 +10,10 @@ const hooks_1 = require("../../core/hooks");
|
|
|
10
10
|
const EditIcon_1 = require("../../icons/EditIcon/EditIcon");
|
|
11
11
|
const Link_1 = require("../../components/Link/Link");
|
|
12
12
|
function EditPageButton({ to }) {
|
|
13
|
-
const { useTranslate,
|
|
13
|
+
const { useTranslate, useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
14
14
|
const { translate } = useTranslate();
|
|
15
|
-
const
|
|
16
|
-
return (react_1.default.createElement(EditPageButtonWrapper, { "data-component-name": "Buttons/EditPageButton", target: "_blank", to: to, onClick: () =>
|
|
15
|
+
const telemetry = useTelemetry();
|
|
16
|
+
return (react_1.default.createElement(EditPageButtonWrapper, { "data-component-name": "Buttons/EditPageButton", target: "_blank", to: to, onClick: () => telemetry.send({ type: 'edit_page_link.clicked' }) },
|
|
17
17
|
react_1.default.createElement(ButtonIcon, null),
|
|
18
18
|
react_1.default.createElement(ButtonText, { "data-translation-key": "markdown.editPage.text" }, translate('markdown.editPage.text', 'Edit'))));
|
|
19
19
|
}
|
|
@@ -45,13 +45,13 @@ function CatalogClassicActions(props) {
|
|
|
45
45
|
activeFilters++;
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
const { useTranslate,
|
|
48
|
+
const { useTranslate, useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
49
49
|
const { translate } = useTranslate();
|
|
50
|
-
const
|
|
50
|
+
const telemetry = useTelemetry();
|
|
51
51
|
return (React.createElement(CatalogActionsWrapper, { "data-component-name": "CatalogClassic/CatalogClassicActions" },
|
|
52
52
|
React.createElement(Button_1.Button, { variant: "ghost", size: "small", icon: React.createElement(FilterIcon_1.FilterIcon, null), iconPosition: "left", onClick: () => {
|
|
53
53
|
onOpenFilter();
|
|
54
|
-
|
|
54
|
+
telemetry.send({ type: 'catalog_actions_button.clicked' });
|
|
55
55
|
}, "data-translation-key": "catalog.filters.title" }, translate('catalog.filters.title', 'Filters')),
|
|
56
56
|
activeFilters > 0 ? React.createElement(CounterTag_1.CounterTag, { borderless: true }, activeFilters) : null));
|
|
57
57
|
}
|
|
@@ -51,10 +51,10 @@ function stripHtmlTags(text) {
|
|
|
51
51
|
}
|
|
52
52
|
function CatalogClassicCard({ item }) {
|
|
53
53
|
var _a, _b;
|
|
54
|
-
const {
|
|
55
|
-
const
|
|
54
|
+
const { useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
55
|
+
const telemetry = useTelemetry();
|
|
56
56
|
return (React.createElement(Link_1.Link, { key: item.docsLink || item.link, to: item.docsLink || item.link },
|
|
57
|
-
React.createElement(StyledCard, { "data-component-name": "CatalogClassic/CatalogClassicCard", onClick: () =>
|
|
57
|
+
React.createElement(StyledCard, { "data-component-name": "CatalogClassic/CatalogClassicCard", onClick: () => telemetry.send({ type: 'catalog_item.clicked' }) },
|
|
58
58
|
React.createElement(CardContent, null,
|
|
59
59
|
React.createElement(CardTitleWrapper, null,
|
|
60
60
|
React.createElement(CardTitle, null,
|
|
@@ -18,10 +18,10 @@ function CatalogClassicInfoBlock(props) {
|
|
|
18
18
|
}
|
|
19
19
|
function ScorecardBadge(props) {
|
|
20
20
|
const { level, slug, colorVariable } = props;
|
|
21
|
-
const {
|
|
22
|
-
const
|
|
21
|
+
const { useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
22
|
+
const telemetry = useTelemetry();
|
|
23
23
|
return (react_1.default.createElement(Link_1.Link, { to: slug },
|
|
24
|
-
react_1.default.createElement(Tag_1.Tag, { onClick: () =>
|
|
24
|
+
react_1.default.createElement(Tag_1.Tag, { onClick: () => telemetry.send({ type: 'scorecard_link.clicked', payload: { action: 'click' } }), withStatusDot: true, statusDotColor: `var(${colorVariable})` }, level)));
|
|
25
25
|
}
|
|
26
26
|
const CatalogInfoBlockWrapper = styled_components_1.default.div `
|
|
27
27
|
position: relative;
|
|
@@ -19,8 +19,8 @@ const Button_1 = require("../../components/Button/Button");
|
|
|
19
19
|
function CodeBlockControls({ children, className, title, controls, tabs, }) {
|
|
20
20
|
var _a, _b, _c, _d, _e;
|
|
21
21
|
const { codeSnippet } = (0, hooks_1.useThemeConfig)();
|
|
22
|
-
const {
|
|
23
|
-
const
|
|
22
|
+
const { useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
23
|
+
const telemetry = useTelemetry();
|
|
24
24
|
const controlsType = (codeSnippet === null || codeSnippet === void 0 ? void 0 : codeSnippet.elementFormat) || 'icon';
|
|
25
25
|
const { copy, expand, collapse, select, deselect, report } = controls || {
|
|
26
26
|
copy: null,
|
|
@@ -48,7 +48,7 @@ function CodeBlockControls({ children, className, title, controls, tabs, }) {
|
|
|
48
48
|
(_a = copy === null || copy === void 0 ? void 0 : copy.onClick) === null || _a === void 0 ? void 0 : _a.call(copy);
|
|
49
49
|
}
|
|
50
50
|
else {
|
|
51
|
-
|
|
51
|
+
telemetry.send({
|
|
52
52
|
type: 'openapi_docs.copy_code_snippet.clicked',
|
|
53
53
|
payload: { snippet_type: 'copy' },
|
|
54
54
|
});
|
|
@@ -46,9 +46,9 @@ const feedbackComponents = {
|
|
|
46
46
|
};
|
|
47
47
|
function Feedback(props) {
|
|
48
48
|
var _a;
|
|
49
|
-
const { useSubmitFeedback,
|
|
49
|
+
const { useSubmitFeedback, useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
50
50
|
const { submitFeedback } = useSubmitFeedback();
|
|
51
|
-
const
|
|
51
|
+
const telemetry = useTelemetry();
|
|
52
52
|
const { pathname } = (0, react_router_dom_1.useLocation)();
|
|
53
53
|
const { feedback: themeFeedbackConf } = (0, hooks_1.useThemeConfig)();
|
|
54
54
|
const feedbackConf = Object.assign(Object.assign({}, themeFeedbackConf), { path: props === null || props === void 0 ? void 0 : props.path, type: (props === null || props === void 0 ? void 0 : props.type) || (themeFeedbackConf === null || themeFeedbackConf === void 0 ? void 0 : themeFeedbackConf.type) || constants_1.DEFAULT_FEEDBACK_TYPE, settings: (props === null || props === void 0 ? void 0 : props.settings) || (themeFeedbackConf === null || themeFeedbackConf === void 0 ? void 0 : themeFeedbackConf.settings) || {}, hide: (_a = props.hide) !== null && _a !== void 0 ? _a : themeFeedbackConf === null || themeFeedbackConf === void 0 ? void 0 : themeFeedbackConf.hide });
|
|
@@ -64,7 +64,7 @@ function Feedback(props) {
|
|
|
64
64
|
return (React.createElement(FeedbackWrapper, { "data-component-name": "Feedback/Feedback" },
|
|
65
65
|
React.createElement(FeedbackComponent, { settings: settings, onSubmit: (values) => {
|
|
66
66
|
submitFeedback({ type, values, path });
|
|
67
|
-
|
|
67
|
+
telemetry.send({ type: 'feedback.sent', payload: { feedback_type: type } });
|
|
68
68
|
} })));
|
|
69
69
|
};
|
|
70
70
|
return React.createElement(React.Fragment, { key: pathname }, renderFeedbackComponent());
|
|
@@ -21,9 +21,9 @@ const Comment_1 = require("../../components/Feedback/Comment");
|
|
|
21
21
|
const Portal_1 = require("../../components/Portal/Portal");
|
|
22
22
|
function ReportDialog({ location, settings, onSubmit, onCancel, submitFeedback, lang, }) {
|
|
23
23
|
const { label } = settings;
|
|
24
|
-
const {
|
|
24
|
+
const { useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
25
25
|
const { pathname } = (0, react_router_dom_1.useLocation)();
|
|
26
|
-
const
|
|
26
|
+
const telemetry = useTelemetry();
|
|
27
27
|
return (react_1.default.createElement(Portal_1.Portal, null,
|
|
28
28
|
react_1.default.createElement(ReportDialogWrapper, { className: "scroll-lock", "data-component-name": "Feedback/ReportDialog" },
|
|
29
29
|
react_1.default.createElement(Comment_1.Comment, { settings: { label }, onSubmit: (value) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -34,7 +34,7 @@ function ReportDialog({ location, settings, onSubmit, onCancel, submitFeedback,
|
|
|
34
34
|
path: pathname,
|
|
35
35
|
lang,
|
|
36
36
|
});
|
|
37
|
-
|
|
37
|
+
telemetry.send({ type: 'code_snippet.reported' });
|
|
38
38
|
onSubmit();
|
|
39
39
|
}), isDialog: true, onCancel: onCancel }))));
|
|
40
40
|
}
|
|
@@ -15,16 +15,16 @@ const CheckboxIcon_1 = require("../../icons/CheckboxIcon/CheckboxIcon");
|
|
|
15
15
|
const CounterTag_1 = require("../../components/Tags/CounterTag");
|
|
16
16
|
const utils_1 = require("../../core/utils");
|
|
17
17
|
function FilterCheckboxes({ filter, filterValuesCasing }) {
|
|
18
|
-
const { useTranslate,
|
|
18
|
+
const { useTranslate, useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
19
19
|
const { translate } = useTranslate();
|
|
20
|
-
const
|
|
20
|
+
const telemetry = useTelemetry();
|
|
21
21
|
return (react_1.default.createElement(FilterCheckboxesWrapper, { "data-component-name": "Filter/FilterCheckboxes" },
|
|
22
22
|
react_1.default.createElement(FilterTitle_1.FilterTitle, { "data-translation-key": filter.titleTranslationKey }, translate(filter.titleTranslationKey, filter.title)),
|
|
23
23
|
react_1.default.createElement(FilterOptions_1.FilterOptions, null, filter.filteredOptions.map(({ value, count }) => {
|
|
24
24
|
const id = 'filter--' + filter.property + '--' + value;
|
|
25
25
|
return (react_1.default.createElement(FilterCheckboxOption, { key: id, role: "link", onClick: () => {
|
|
26
26
|
filter.toggleOption(value);
|
|
27
|
-
|
|
27
|
+
telemetry.send({ type: 'filter_checkbox.toggled', payload: { id } });
|
|
28
28
|
} },
|
|
29
29
|
react_1.default.createElement(CheckboxIcon_1.CheckboxIcon, { checked: filter.selectedOptions.has(value) }),
|
|
30
30
|
react_1.default.createElement(FilterOptionLabel_1.FilterOptionLabel, { "data-translation-key": value }, (0, utils_1.changeTextCasing)(translate(value), filterValuesCasing)),
|
|
@@ -12,17 +12,20 @@ const Link_1 = require("../../components/Link/Link");
|
|
|
12
12
|
const Image_1 = require("../../components/Image/Image");
|
|
13
13
|
const utils_1 = require("../../core/utils");
|
|
14
14
|
function FooterItem({ item, iconsOnly, className }) {
|
|
15
|
-
|
|
16
|
-
const
|
|
15
|
+
var _a, _b;
|
|
16
|
+
const { useTranslate, useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
17
|
+
const telemetry = useTelemetry();
|
|
17
18
|
const { translate } = useTranslate();
|
|
18
19
|
if (item.type === 'error') {
|
|
19
20
|
return null;
|
|
20
21
|
}
|
|
21
22
|
const hasIcon = Boolean(item.icon || item.srcSet);
|
|
22
23
|
const iconWithoutLabel = Boolean(item.label === item.link && hasIcon);
|
|
23
|
-
return (react_1.default.createElement(FooterItemWrapper, { className: className, "data-component-name": "Footer/FooterItem", iconsOnly: iconsOnly, item: item }, item.type === 'separator' ? (react_1.default.createElement(FooterSeparator, { "data-translation-key": item.labelTranslationKey }, translate(item.labelTranslationKey, item.label))) : (react_1.default.createElement(FooterLink, { to: item.link, external: item.external, target: item.target, "data-testid": item.label, onClick: () =>
|
|
24
|
+
return (react_1.default.createElement(FooterItemWrapper, { className: className, "data-component-name": "Footer/FooterItem", iconsOnly: iconsOnly, item: item }, item.type === 'separator' ? (react_1.default.createElement(FooterSeparator, { "data-translation-key": item.labelTranslationKey }, translate(item.labelTranslationKey, item.label))) : (react_1.default.createElement(FooterLink, { to: item.link, external: item.external, target: item.target, "data-testid": item.label, onClick: () => telemetry.send({ type: 'footer_item.clicked' }), "data-translation-key": item.labelTranslationKey },
|
|
24
25
|
hasIcon ? (react_1.default.createElement(FooterLinkIcon, { iconsOnly: iconsOnly },
|
|
25
|
-
react_1.default.createElement(Image_1.Image, { src: item.icon, srcSet: item.srcSet
|
|
26
|
+
react_1.default.createElement(Image_1.Image, { src: item.icon, srcSet: item.srcSet, alt: item.label && item.label !== item.link
|
|
27
|
+
? `${item.label} icon`
|
|
28
|
+
: `${(_b = (_a = (item.icon || item.srcSet)) === null || _a === void 0 ? void 0 : _a.split('/').pop()) === null || _b === void 0 ? void 0 : _b.split('.')[0]} icon` }))) : null,
|
|
26
29
|
!iconWithoutLabel ? translate(item.labelTranslationKey, item.label) : null,
|
|
27
30
|
item.external ? react_1.default.createElement(LaunchIcon_1.LaunchIcon, { size: "10px" }) : null))));
|
|
28
31
|
}
|
|
@@ -15,8 +15,8 @@ const Dropdown_1 = require("../../components/Dropdown/Dropdown");
|
|
|
15
15
|
const CheckmarkIcon_1 = require("../../icons/CheckmarkIcon/CheckmarkIcon");
|
|
16
16
|
function LanguagePicker(props) {
|
|
17
17
|
const { currentLocale, locales, setLocale } = (0, hooks_1.useLanguagePicker)();
|
|
18
|
-
const {
|
|
19
|
-
const
|
|
18
|
+
const { useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
19
|
+
const telemetry = useTelemetry();
|
|
20
20
|
if (locales.length < 2 || !currentLocale) {
|
|
21
21
|
return null;
|
|
22
22
|
}
|
|
@@ -26,7 +26,7 @@ function LanguagePicker(props) {
|
|
|
26
26
|
onAction: () => {
|
|
27
27
|
setLocale(locale.code);
|
|
28
28
|
props.onChangeLanguage(locale.code);
|
|
29
|
-
|
|
29
|
+
telemetry.send({
|
|
30
30
|
type: 'language_picker_locale.changed',
|
|
31
31
|
payload: { locale: locale.code },
|
|
32
32
|
});
|
|
@@ -22,13 +22,13 @@ const Link_1 = require("../../components/Link/Link");
|
|
|
22
22
|
const Image_1 = require("../../components/Image/Image");
|
|
23
23
|
function Logo(_a) {
|
|
24
24
|
var { config, className } = _a, otherProps = __rest(_a, ["config", "className"]);
|
|
25
|
-
const {
|
|
26
|
-
const
|
|
25
|
+
const { useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
26
|
+
const telemetry = useTelemetry();
|
|
27
27
|
if (!(config === null || config === void 0 ? void 0 : config.image) && !(config === null || config === void 0 ? void 0 : config.srcSet)) {
|
|
28
28
|
return null;
|
|
29
29
|
}
|
|
30
30
|
const image = (react_1.default.createElement(Image_1.Image, { className: className, src: config.image, srcSet: config.srcSet, alt: config.altText }));
|
|
31
|
-
return (react_1.default.createElement(LogoWrapper, Object.assign({ "data-component-name": "Logo/Logo", className: className }, otherProps), config.link ? (react_1.default.createElement(Link_1.Link, { to: config.link, onClick: () =>
|
|
31
|
+
return (react_1.default.createElement(LogoWrapper, Object.assign({ "data-component-name": "Logo/Logo", className: className }, otherProps), config.link ? (react_1.default.createElement(Link_1.Link, { to: config.link, onClick: () => telemetry.send({ type: 'logo.clicked' }) }, image)) : (image)));
|
|
32
32
|
}
|
|
33
33
|
const LogoWrapper = styled_components_1.default.div `
|
|
34
34
|
max-width: var(--logo-max-width);
|
|
@@ -39,7 +39,7 @@ const Badge_1 = require("../../components/Badge/Badge");
|
|
|
39
39
|
function MenuItem(props) {
|
|
40
40
|
var _a;
|
|
41
41
|
const { item, depth, className, onClick } = props;
|
|
42
|
-
const { useTranslate,
|
|
42
|
+
const { useTranslate, useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
43
43
|
const { translate } = useTranslate();
|
|
44
44
|
const type = (0, utils_1.getMenuItemType)(item);
|
|
45
45
|
const nestedMenuRef = (0, react_1.useRef)(null);
|
|
@@ -47,14 +47,14 @@ function MenuItem(props) {
|
|
|
47
47
|
const { isExpanded, canUnmount, style, handleExpand } = (0, hooks_1.useNestedMenu)(Object.assign(Object.assign({}, props), { type,
|
|
48
48
|
labelRef,
|
|
49
49
|
nestedMenuRef }));
|
|
50
|
-
const
|
|
50
|
+
const telemetry = useTelemetry();
|
|
51
51
|
const isDrilldown = type === constants_1.MenuItemType.DrillDown;
|
|
52
52
|
const isSeparator = type === constants_1.MenuItemType.Separator;
|
|
53
53
|
const isNested = type === constants_1.MenuItemType.Group;
|
|
54
54
|
const hasChevron = isNested && !isDrilldown;
|
|
55
55
|
const hasHttpTag = !!item.httpVerb || type === constants_1.MenuItemType.Operation;
|
|
56
56
|
const handleOnClick = () => {
|
|
57
|
-
|
|
57
|
+
telemetry.send({
|
|
58
58
|
type: 'sidebar.item_clicked',
|
|
59
59
|
payload: {
|
|
60
60
|
label: item.label,
|
|
@@ -23,9 +23,9 @@ function Navbar({ className }) {
|
|
|
23
23
|
var _a;
|
|
24
24
|
const { isOpen, closeMobileMenu, openMobileMenu } = (0, hooks_1.useMobileMenu)(false);
|
|
25
25
|
const themeConfig = (0, hooks_1.useThemeConfig)();
|
|
26
|
-
const { useL10n,
|
|
26
|
+
const { useL10n, useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
27
27
|
const { changeLanguage } = useL10n();
|
|
28
|
-
const
|
|
28
|
+
const telemetry = useTelemetry();
|
|
29
29
|
const menu = (_a = themeConfig.navbar) === null || _a === void 0 ? void 0 : _a.items;
|
|
30
30
|
const { search: searchSettings, navbar, userMenu: userMenuSettings, logo } = themeConfig;
|
|
31
31
|
if (navbar === null || navbar === void 0 ? void 0 : navbar.hide) {
|
|
@@ -45,11 +45,11 @@ function Navbar({ className }) {
|
|
|
45
45
|
react_1.default.createElement(MobileMenuButton, { variant: "text", "data-testid": "mobile-menu-button", onClick: isOpen
|
|
46
46
|
? () => {
|
|
47
47
|
closeMobileMenu();
|
|
48
|
-
|
|
48
|
+
telemetry.send({ type: 'mobile_menu_button_close.clicked' });
|
|
49
49
|
}
|
|
50
50
|
: () => {
|
|
51
51
|
openMobileMenu();
|
|
52
|
-
|
|
52
|
+
telemetry.send({ type: 'mobile_menu_button_open.clicked' });
|
|
53
53
|
}, icon: isOpen ? react_1.default.createElement(CloseIcon_1.CloseIcon, null) : react_1.default.createElement(MenuIcon_1.MenuIcon, null) }),
|
|
54
54
|
hideUserMenu ? null : react_1.default.createElement(UserMenu_1.UserMenu, null))));
|
|
55
55
|
}
|
|
@@ -39,17 +39,17 @@ const Link_1 = require("../../components/Link/Link");
|
|
|
39
39
|
const Dropdown_1 = require("../../components/Dropdown/Dropdown");
|
|
40
40
|
function NavbarItem({ navItem, className }) {
|
|
41
41
|
const { pathname } = (0, react_router_dom_1.useLocation)();
|
|
42
|
-
const { useTranslate, useL10nConfig,
|
|
42
|
+
const { useTranslate, useL10nConfig, useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
43
43
|
const { translate } = useTranslate();
|
|
44
44
|
const { defaultLocale, currentLocale, locales } = useL10nConfig();
|
|
45
|
-
const
|
|
45
|
+
const telemetry = useTelemetry();
|
|
46
46
|
if (navItem.type !== 'link' && !navItem.items)
|
|
47
47
|
return null;
|
|
48
48
|
const item = navItem;
|
|
49
49
|
const normalizedPath = (item.link && item.link !== '/' ? (0, utils_1.removeTrailingSlash)(item.link) : item.link) || '';
|
|
50
50
|
const isActive = pathname ===
|
|
51
51
|
(0, utils_1.withPathPrefix)((0, utils_1.getPathnameForLocale)(normalizedPath, defaultLocale, currentLocale, locales));
|
|
52
|
-
const itemContent = (react_1.default.createElement(NavbarMenuItem, { as: item.link ? Link_1.Link : undefined, active: isActive, className: className, onClick: () =>
|
|
52
|
+
const itemContent = (react_1.default.createElement(NavbarMenuItem, { as: item.link ? Link_1.Link : undefined, active: isActive, className: className, onClick: () => telemetry.send({ type: 'navbar.menu_item_clicked', payload: { type: item.type } }), external: item.external, target: item.target, to: item.link },
|
|
53
53
|
react_1.default.createElement(NavbarIcon, { url: item.icon }),
|
|
54
54
|
react_1.default.createElement(NavbarLabel, { "data-translation-key": item.labelTranslationKey }, translate(item.labelTranslationKey, item.label)),
|
|
55
55
|
item.external ? react_1.default.createElement(ExternalLinkIcon, { size: "10px" }) : null));
|
|
@@ -51,8 +51,8 @@ const ChevronLeftIcon_1 = require("../../icons/ChevronLeftIcon/ChevronLeftIcon")
|
|
|
51
51
|
const EditIcon_1 = require("../../icons/EditIcon/EditIcon");
|
|
52
52
|
const AiStarsGradientIcon_1 = require("../../icons/AiStarsGradientIcon/AiStarsGradientIcon");
|
|
53
53
|
function SearchDialog({ onClose, className }) {
|
|
54
|
-
const { useTranslate, useCurrentProduct, useSearch, useProducts, useAiSearch,
|
|
55
|
-
const
|
|
54
|
+
const { useTranslate, useCurrentProduct, useSearch, useProducts, useAiSearch, useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
55
|
+
const telemetry = useTelemetry();
|
|
56
56
|
const products = useProducts();
|
|
57
57
|
const currentProduct = useCurrentProduct();
|
|
58
58
|
const [product, setProduct] = (0, react_1.useState)(currentProduct);
|
|
@@ -110,7 +110,7 @@ function SearchDialog({ onClose, className }) {
|
|
|
110
110
|
}
|
|
111
111
|
return (react_1.default.createElement(SearchItem_1.SearchItem, { key: `${index}-${item.document.id}`, item: item, product: itemProduct, innerRef: innerRef, onClick: () => {
|
|
112
112
|
addSearchHistoryItem(query);
|
|
113
|
-
|
|
113
|
+
telemetry.send({
|
|
114
114
|
type: 'search.result.clicked',
|
|
115
115
|
payload: {
|
|
116
116
|
query,
|
|
@@ -122,7 +122,7 @@ function SearchDialog({ onClose, className }) {
|
|
|
122
122
|
});
|
|
123
123
|
onClose();
|
|
124
124
|
} }));
|
|
125
|
-
}, [onClose, product, products, addSearchHistoryItem, query,
|
|
125
|
+
}, [onClose, product, products, addSearchHistoryItem, query, telemetry, mode]);
|
|
126
126
|
const showLoadMore = (0, react_1.useCallback)((groupKey, currentCount = 0) => {
|
|
127
127
|
const groupFacet = facets.find((facet) => facet.field === groupField);
|
|
128
128
|
let needLoadMore = false;
|
|
@@ -223,7 +223,7 @@ function SearchDialog({ onClose, className }) {
|
|
|
223
223
|
translate('search.loading', 'Loading...'))) : (react_1.default.createElement(SearchMessage, { "data-translation-key": "search.noResults" },
|
|
224
224
|
react_1.default.createElement("b", null, translate('search.noResults.title', 'No results'))))) : (react_1.default.createElement(react_1.default.Fragment, null,
|
|
225
225
|
react_1.default.createElement(SearchRecent_1.SearchRecent, { onSelect: (query, index) => {
|
|
226
|
-
|
|
226
|
+
telemetry.send({
|
|
227
227
|
type: 'search.recent.clicked',
|
|
228
228
|
payload: {
|
|
229
229
|
query,
|
|
@@ -13,9 +13,9 @@ const hooks_1 = require("../../core/hooks");
|
|
|
13
13
|
const CloseFilledIcon_1 = require("../../icons/CloseFilledIcon/CloseFilledIcon");
|
|
14
14
|
const ChevronLeftIcon_1 = require("../../icons/ChevronLeftIcon/ChevronLeftIcon");
|
|
15
15
|
function SearchInput({ placeholder, value, onChange, isLoading, showReturnButton, inputRef, onReturn, onSubmit, className, }) {
|
|
16
|
-
const {
|
|
16
|
+
const { useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
17
17
|
const { addSearchHistoryItem } = (0, hooks_1.useRecentSearches)();
|
|
18
|
-
const
|
|
18
|
+
const telemetry = useTelemetry();
|
|
19
19
|
const { onKeyDown } = (0, hooks_1.useInputKeyCommands)({
|
|
20
20
|
onEnter: (event) => onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(event),
|
|
21
21
|
onClear: () => addSearchHistoryItem(value),
|
|
@@ -27,7 +27,7 @@ function SearchInput({ placeholder, value, onChange, isLoading, showReturnButton
|
|
|
27
27
|
const handleOnReset = () => {
|
|
28
28
|
onChange('');
|
|
29
29
|
addSearchHistoryItem(value);
|
|
30
|
-
|
|
30
|
+
telemetry.send({ type: 'search_input_reset_button.clicked' });
|
|
31
31
|
};
|
|
32
32
|
return (react_1.default.createElement(SearchInputWrapper, { "data-component-name": "Search/SearchInput", className: className },
|
|
33
33
|
showReturnButton ? (react_1.default.createElement(Button_1.Button, { icon: react_1.default.createElement(ChevronLeftIcon_1.ChevronLeftIcon, null), onClick: onReturn })) : value && isLoading ? (react_1.default.createElement(Spinner_1.Spinner, { size: "24px", color: "--search-input-icon-color" })) : (react_1.default.createElement(SearchIcon_1.SearchIcon, { size: "24px", color: "--search-input-icon-color" })),
|
|
@@ -36,15 +36,15 @@ const RecentlyViewedIcon_1 = require("../../icons/RecentlyViewedIcon/RecentlyVie
|
|
|
36
36
|
const Button_1 = require("../../components/Button/Button");
|
|
37
37
|
function SearchRecent({ onSelect, className }) {
|
|
38
38
|
const { items, removeSearchHistoryItem } = (0, hooks_1.useRecentSearches)();
|
|
39
|
-
const { useTranslate,
|
|
39
|
+
const { useTranslate, useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
40
40
|
const { translate } = useTranslate();
|
|
41
|
-
const
|
|
41
|
+
const telemetry = useTelemetry();
|
|
42
42
|
if (!items || !items.length)
|
|
43
43
|
return null;
|
|
44
44
|
const handleOnRemove = (e, item) => {
|
|
45
45
|
e.stopPropagation();
|
|
46
46
|
removeSearchHistoryItem(item);
|
|
47
|
-
|
|
47
|
+
telemetry.send({ type: 'search_recent_remove_button.clicked' });
|
|
48
48
|
};
|
|
49
49
|
const handleKeyDown = (e, item, index) => {
|
|
50
50
|
if (e.key === 'Enter') {
|
|
@@ -38,7 +38,8 @@ function SearchTrigger({ onClick, className }) {
|
|
|
38
38
|
const themeSettings = (0, hooks_1.useThemeConfig)();
|
|
39
39
|
const { useTranslate } = (0, hooks_1.useThemeHooks)();
|
|
40
40
|
const { translate } = useTranslate();
|
|
41
|
-
const
|
|
41
|
+
const defaultKeyShortcut = '⌘+K,CTRL+K';
|
|
42
|
+
const keyShortcuts = (_b = (_a = themeSettings === null || themeSettings === void 0 ? void 0 : themeSettings.search) === null || _a === void 0 ? void 0 : _a.shortcuts) !== null && _b !== void 0 ? _b : [defaultKeyShortcut];
|
|
42
43
|
let mainShortcutKey = null;
|
|
43
44
|
if (keyShortcuts) {
|
|
44
45
|
if (Array.isArray(keyShortcuts)) {
|
|
@@ -49,12 +50,13 @@ function SearchTrigger({ onClick, className }) {
|
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
52
|
mainShortcutKey = mainShortcutKey === null || mainShortcutKey === void 0 ? void 0 : mainShortcutKey.toUpperCase();
|
|
53
|
+
const isMac = (0, utils_1.getUserAgent)().includes('Mac');
|
|
52
54
|
return (React.createElement(SearchTriggerWrapper, { onClick: onClick, className: className, "data-component-name": "Search/SearchTrigger" },
|
|
53
55
|
React.createElement(SearchTriggerButton, { "data-testid": "search-trigger-button", variant: "text", size: "medium", icon: React.createElement(SearchIcon_1.SearchIcon, null) }),
|
|
54
56
|
React.createElement(SearchTriggerInput, { "data-testid": "search-trigger-input", "data-translation-key": "search.navbar.label" },
|
|
55
57
|
React.createElement(SearchIcon_1.SearchIcon, null),
|
|
56
58
|
translate('search.navbar.label', 'Search'),
|
|
57
|
-
mainShortcutKey
|
|
59
|
+
mainShortcutKey === defaultKeyShortcut ? (React.createElement("span", null, isMac ? '⌘K' : 'Ctrl+K')) : (React.createElement("span", null, mainShortcutKey)))));
|
|
58
60
|
}
|
|
59
61
|
const SearchTriggerWrapper = styled_components_1.default.div `
|
|
60
62
|
color: var(--search-trigger-color);
|
|
@@ -14,17 +14,17 @@ const SidePanelCloseIcon_1 = require("../../icons/SidePanelCloseIcon/SidePanelCl
|
|
|
14
14
|
const SidePanelOpenIcon_1 = require("../../icons/SidePanelOpenIcon/SidePanelOpenIcon");
|
|
15
15
|
const styled_1 = require("../../components/SidebarActions/styled");
|
|
16
16
|
const SidebarActions = ({ layout, hideCollapseSidebarButton = false, collapsedSidebar, isApiDocs, onChangeViewClick, onChangeCollapseSidebarClick, requestAccessButton, className, }) => {
|
|
17
|
-
const {
|
|
17
|
+
const { useTelemetry, useTranslate } = (0, hooks_1.useThemeHooks)();
|
|
18
18
|
const { translate } = useTranslate();
|
|
19
|
-
const
|
|
19
|
+
const telemetry = useTelemetry();
|
|
20
20
|
return (react_1.default.createElement(styled_1.ControlsWrap, { className: className, isCollapsed: collapsedSidebar, "data-component-name": "Sidebar/SidebarActions" },
|
|
21
21
|
!hideCollapseSidebarButton && (react_1.default.createElement(Button_1.Button, { onClick: () => {
|
|
22
22
|
onChangeCollapseSidebarClick();
|
|
23
23
|
if (collapsedSidebar) {
|
|
24
|
-
|
|
24
|
+
telemetry.send({ type: 'sidebar.item_expanded' });
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
27
|
-
|
|
27
|
+
telemetry.send({ type: 'sidebar.item_collapsed' });
|
|
28
28
|
}
|
|
29
29
|
}, title: collapsedSidebar
|
|
30
30
|
? translate('sidebar.actions.show', 'Show sidebar')
|
|
@@ -32,7 +32,7 @@ const SidebarActions = ({ layout, hideCollapseSidebarButton = false, collapsedSi
|
|
|
32
32
|
isApiDocs && (react_1.default.createElement(styled_1.ControlsWrapChangeLayoutButtons, { isCollapsed: collapsedSidebar },
|
|
33
33
|
react_1.default.createElement(ChangeViewButton_1.ChangeViewButton, { collapsedSidebar: collapsedSidebar, layout: layout, onClick: () => {
|
|
34
34
|
onChangeViewClick();
|
|
35
|
-
|
|
35
|
+
telemetry.send({ type: 'change_layout_button.clicked' });
|
|
36
36
|
} }))),
|
|
37
37
|
!collapsedSidebar && requestAccessButton));
|
|
38
38
|
};
|
|
@@ -33,9 +33,9 @@ const hooks_1 = require("../../core/hooks");
|
|
|
33
33
|
const utils_1 = require("../../core/utils");
|
|
34
34
|
function TableOfContent(props) {
|
|
35
35
|
const { headings, contentWrapper, className } = props;
|
|
36
|
-
const { useTranslate,
|
|
36
|
+
const { useTranslate, useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
37
37
|
const { translate } = useTranslate();
|
|
38
|
-
const
|
|
38
|
+
const telemetry = useTelemetry();
|
|
39
39
|
const sidebar = React.useRef(null);
|
|
40
40
|
(0, hooks_1.useFullHeight)(sidebar);
|
|
41
41
|
const { markdown: { toc = {} } = {} } = (0, hooks_1.useThemeConfig)();
|
|
@@ -54,7 +54,7 @@ function TableOfContent(props) {
|
|
|
54
54
|
return null;
|
|
55
55
|
}
|
|
56
56
|
const href = '#' + heading.id;
|
|
57
|
-
return (React.createElement(TableOfContentMenuItem, { key: href + idx, href: href, depth: heading.depth - leastDepth + 1 || 0, className: activeHeadingId === heading.id ? 'active' : '', dangerouslySetInnerHTML: { __html: heading.value || '' }, "data-testid": `toc-${heading.value}`, onClick: () =>
|
|
57
|
+
return (React.createElement(TableOfContentMenuItem, { key: href + idx, href: href, depth: heading.depth - leastDepth + 1 || 0, className: activeHeadingId === heading.id ? 'active' : '', dangerouslySetInnerHTML: { __html: heading.value || '' }, "data-testid": `toc-${heading.value}`, onClick: () => telemetry.send({ type: 'toc_item.clicked' }) }));
|
|
58
58
|
})))));
|
|
59
59
|
}
|
|
60
60
|
const TableOfContentMenu = styled_components_1.default.aside `
|
|
@@ -8,10 +8,10 @@ const react_1 = __importDefault(require("react"));
|
|
|
8
8
|
const hooks_1 = require("../../core/hooks");
|
|
9
9
|
const Button_1 = require("../../components/Button/Button");
|
|
10
10
|
function LoginButton({ href, className }) {
|
|
11
|
-
const { useTranslate,
|
|
11
|
+
const { useTranslate, useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
12
12
|
const { translate } = useTranslate();
|
|
13
|
-
const
|
|
13
|
+
const telemetry = useTelemetry();
|
|
14
14
|
return (react_1.default.createElement("div", { "data-component-name": "UserMenu/LoginButton", className: className },
|
|
15
|
-
react_1.default.createElement(Button_1.Button, { "data-translation-key": "userMenu.login", to: href, onClick: () =>
|
|
15
|
+
react_1.default.createElement(Button_1.Button, { "data-translation-key": "userMenu.login", to: href, onClick: () => telemetry.send({ type: 'login_button.clicked' }), "data-testid": "login-btn", extraClass: className, variant: "primary", size: "medium" }, translate('userMenu.login', 'Login'))));
|
|
16
16
|
}
|
|
17
17
|
//# sourceMappingURL=LoginButton.js.map
|
|
@@ -9,12 +9,12 @@ const hooks_1 = require("../../core/hooks");
|
|
|
9
9
|
const LogoutIcon_1 = require("../../icons/LogoutIcon/LogoutIcon");
|
|
10
10
|
const DropdownMenuItem_1 = require("../../components/Dropdown/DropdownMenuItem");
|
|
11
11
|
function LogoutMenuItem({ iconOnly, className }) {
|
|
12
|
-
const { useTranslate,
|
|
12
|
+
const { useTranslate, useTelemetry, useUserMenu } = (0, hooks_1.useThemeHooks)();
|
|
13
13
|
const { handleLogout } = useUserMenu();
|
|
14
|
-
const
|
|
14
|
+
const telemetry = useTelemetry();
|
|
15
15
|
const { translate } = useTranslate();
|
|
16
16
|
const handleClick = () => {
|
|
17
|
-
|
|
17
|
+
telemetry.send({ type: 'logout_menu_item.clicked' });
|
|
18
18
|
handleLogout();
|
|
19
19
|
};
|
|
20
20
|
return (react_1.default.createElement(DropdownMenuItem_1.DropdownMenuItem, { className: className, dangerous: true, "data-component-name": "UserMenu/LogoutMenuItem", onAction: handleClick, "data-translation-key": "userMenu.logout", prefix: react_1.default.createElement(LogoutIcon_1.LogoutIcon, null), style: { width: iconOnly ? 'fit-content' : '100%' } }, iconOnly ? null : translate('userMenu.logout', 'Log out')));
|
|
@@ -5,9 +5,6 @@ export declare const useThemeHooks: jest.Mock<{
|
|
|
5
5
|
useTelemetry: jest.Mock<{
|
|
6
6
|
send: jest.Mock<any, any, any>;
|
|
7
7
|
}, [], any>;
|
|
8
|
-
useOtelTelemetry: jest.Mock<{
|
|
9
|
-
send: jest.Mock<any, any, any>;
|
|
10
|
-
}, [], any>;
|
|
11
8
|
useBreadcrumbs: jest.Mock<any, any, any>;
|
|
12
9
|
usePageSharedData: jest.Mock<any, any, any>;
|
|
13
10
|
useCatalogClassic: jest.Mock<{
|
|
@@ -12,9 +12,6 @@ exports.useThemeHooks = jest.fn(() => ({
|
|
|
12
12
|
useTelemetry: jest.fn(() => ({
|
|
13
13
|
send: jest.fn(),
|
|
14
14
|
})),
|
|
15
|
-
useOtelTelemetry: jest.fn(() => ({
|
|
16
|
-
send: jest.fn(),
|
|
17
|
-
})),
|
|
18
15
|
useBreadcrumbs: jest.fn().mockReturnValue([]),
|
|
19
16
|
usePageSharedData: jest.fn().mockReturnValue({}),
|
|
20
17
|
useCatalogClassic: jest.fn(() => ({
|
|
@@ -36,3 +36,5 @@ export * from '../../core/hooks/code-walkthrough/use-renderable-files';
|
|
|
36
36
|
export * from '../../core/hooks/use-element-size';
|
|
37
37
|
export * from '../../core/hooks/use-time-ago';
|
|
38
38
|
export * from '../../core/hooks/use-input-key-commands';
|
|
39
|
+
export * from '../../core/hooks/use-page-active-version';
|
|
40
|
+
export * from '../../core/hooks/use-page-versions';
|
package/lib/core/hooks/index.js
CHANGED
|
@@ -52,4 +52,6 @@ __exportStar(require("../../core/hooks/code-walkthrough/use-renderable-files"),
|
|
|
52
52
|
__exportStar(require("../../core/hooks/use-element-size"), exports);
|
|
53
53
|
__exportStar(require("../../core/hooks/use-time-ago"), exports);
|
|
54
54
|
__exportStar(require("../../core/hooks/use-input-key-commands"), exports);
|
|
55
|
+
__exportStar(require("../../core/hooks/use-page-active-version"), exports);
|
|
56
|
+
__exportStar(require("../../core/hooks/use-page-versions"), exports);
|
|
55
57
|
//# sourceMappingURL=index.js.map
|
|
@@ -13,15 +13,15 @@ function useSearchDialog() {
|
|
|
13
13
|
const [isOpen, setIsOpen] = (0, react_1.useState)(false);
|
|
14
14
|
const themeSettings = (0, hooks_1.useThemeConfig)();
|
|
15
15
|
const location = (0, react_router_dom_1.useLocation)();
|
|
16
|
-
const {
|
|
17
|
-
const
|
|
18
|
-
const keyShortcuts = (_b = (_a = themeSettings === null || themeSettings === void 0 ? void 0 : themeSettings.search) === null || _a === void 0 ? void 0 : _a.shortcuts) !== null && _b !== void 0 ? _b : ['
|
|
16
|
+
const { useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
17
|
+
const telemetry = useTelemetry();
|
|
18
|
+
const keyShortcuts = (_b = (_a = themeSettings === null || themeSettings === void 0 ? void 0 : themeSettings.search) === null || _a === void 0 ? void 0 : _a.shortcuts) !== null && _b !== void 0 ? _b : ['⌘+K,CTRL+K'];
|
|
19
19
|
const hotKeys = keyShortcuts === null || keyShortcuts === void 0 ? void 0 : keyShortcuts.join(',');
|
|
20
20
|
(0, react_1.useEffect)(() => {
|
|
21
21
|
if (hotKeys) {
|
|
22
22
|
(0, hotkeys_js_1.default)(hotKeys, (ev) => {
|
|
23
23
|
setIsOpen(true);
|
|
24
|
-
|
|
24
|
+
telemetry.send({ type: 'search.opened', payload: { method: 'shortcut' } });
|
|
25
25
|
ev.preventDefault();
|
|
26
26
|
});
|
|
27
27
|
return () => hotkeys_js_1.default.unbind(hotKeys);
|
|
@@ -29,7 +29,7 @@ function useSearchDialog() {
|
|
|
29
29
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
30
30
|
}, [hotKeys]);
|
|
31
31
|
const onOpen = (0, react_1.useCallback)(function () {
|
|
32
|
-
|
|
32
|
+
telemetry.send({ type: 'search.opened', payload: { method: 'click' } });
|
|
33
33
|
setIsOpen(true);
|
|
34
34
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35
35
|
}, []);
|
|
@@ -5,8 +5,8 @@ const react_1 = require("react");
|
|
|
5
5
|
const hooks_1 = require("../../core/hooks");
|
|
6
6
|
const useColorSwitcher = () => {
|
|
7
7
|
const themeSettings = (0, hooks_1.useThemeConfig)();
|
|
8
|
-
const {
|
|
9
|
-
const
|
|
8
|
+
const { useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
9
|
+
const telemetry = useTelemetry();
|
|
10
10
|
const colorMode = themeSettings.colorMode;
|
|
11
11
|
const modes = (colorMode === null || colorMode === void 0 ? void 0 : colorMode.modes) || ['light', 'dark'];
|
|
12
12
|
const defaultColor = modes[0] || 'light';
|
|
@@ -27,7 +27,7 @@ const useColorSwitcher = () => {
|
|
|
27
27
|
window.requestAnimationFrame(() => {
|
|
28
28
|
document.documentElement.classList.remove('notransition');
|
|
29
29
|
});
|
|
30
|
-
|
|
30
|
+
telemetry.send({
|
|
31
31
|
type: 'color_mode.switched',
|
|
32
32
|
payload: { from: activeColorMode, to: newMode },
|
|
33
33
|
});
|