@redocly/theme 0.67.0-next.3 → 0.67.0-next.5
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/BreadcrumbDropdown.d.ts +2 -1
- package/lib/components/Breadcrumbs/BreadcrumbDropdown.js +9 -10
- package/lib/components/Breadcrumbs/Breadcrumbs.js +5 -22
- package/lib/components/Buttons/AIAssistantButton.js +2 -6
- package/lib/components/Buttons/EditPageButton.js +2 -1
- package/lib/components/Catalog/CatalogCardView/CatalogCard.js +1 -1
- package/lib/components/CatalogClassic/CatalogClassicActions.js +3 -1
- package/lib/components/CatalogClassic/CatalogClassicCard.js +1 -1
- package/lib/components/CatalogClassic/CatalogClassicInfoBlock.js +2 -1
- package/lib/components/Dropdown/Dropdown.d.ts +2 -0
- package/lib/components/Dropdown/Dropdown.js +8 -2
- package/lib/components/Feedback/ReportDialog.js +4 -1
- package/lib/components/Filter/FilterCheckboxes.js +3 -1
- package/lib/components/Footer/FooterItem.js +1 -1
- package/lib/components/LanguagePicker/LanguagePicker.js +3 -1
- package/lib/components/Logo/Logo.js +2 -1
- package/lib/components/Menu/MenuContainer.js +1 -0
- package/lib/components/Menu/MenuItem.js +21 -7
- package/lib/components/Navbar/Navbar.js +6 -2
- package/lib/components/Navbar/NavbarItem.js +3 -1
- package/lib/components/Search/SearchAiMessage.js +23 -5
- package/lib/components/Search/SearchDialog.js +5 -33
- package/lib/components/Search/SearchInput.js +4 -1
- package/lib/components/Search/SearchRecent.js +3 -1
- package/lib/components/SidebarActions/SidebarActions.js +10 -3
- package/lib/components/TableOfContent/TableOfContent.js +1 -1
- package/lib/components/UserMenu/LoginButton.js +2 -1
- package/lib/components/UserMenu/LogoutMenuItem.js +2 -1
- package/lib/core/hooks/search/use-search-dialog.js +7 -2
- package/lib/core/hooks/use-banner-telemetry.js +2 -11
- package/lib/core/hooks/use-color-switcher.js +2 -1
- package/lib/core/hooks/use-page-actions.js +12 -21
- package/lib/core/hooks/use-product-picker.js +14 -4
- package/lib/core/hooks/use-telemetry-fallback.d.ts +45 -37
- package/lib/core/hooks/use-telemetry-fallback.js +47 -39
- package/lib/core/types/search.d.ts +2 -1
- package/lib/core/types/search.js +1 -0
- package/lib/core/utils/index.d.ts +2 -0
- package/lib/core/utils/index.js +2 -0
- package/lib/core/utils/telemetry/generate-before-after-context.d.ts +37 -0
- package/lib/core/utils/telemetry/generate-before-after-context.js +32 -0
- package/lib/core/utils/telemetry/generate-resource-urn.d.ts +7 -0
- package/lib/core/utils/telemetry/generate-resource-urn.js +13 -0
- package/lib/core/utils/telemetry/get-base-data-attributes.d.ts +14 -0
- package/lib/core/utils/telemetry/get-base-data-attributes.js +17 -0
- package/package.json +3 -3
- package/src/components/Breadcrumbs/BreadcrumbDropdown.tsx +18 -4
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +5 -6
- package/src/components/Buttons/AIAssistantButton.tsx +2 -3
- package/src/components/Buttons/EditPageButton.tsx +4 -1
- package/src/components/Catalog/CatalogCardView/CatalogCard.tsx +2 -2
- package/src/components/CatalogClassic/CatalogClassicActions.tsx +4 -2
- package/src/components/CatalogClassic/CatalogClassicCard.tsx +9 -2
- package/src/components/CatalogClassic/CatalogClassicInfoBlock.tsx +2 -1
- package/src/components/Dropdown/Dropdown.tsx +8 -1
- package/src/components/Feedback/ReportDialog.tsx +4 -1
- package/src/components/Filter/FilterCheckboxes.tsx +4 -2
- package/src/components/Footer/FooterItem.tsx +4 -2
- package/src/components/LanguagePicker/LanguagePicker.tsx +9 -2
- package/src/components/Logo/Logo.tsx +7 -1
- package/src/components/Menu/MenuContainer.tsx +1 -0
- package/src/components/Menu/MenuItem.tsx +35 -4
- package/src/components/Navbar/Navbar.tsx +7 -3
- package/src/components/Navbar/NavbarItem.tsx +7 -1
- package/src/components/Search/SearchAiMessage.tsx +25 -5
- package/src/components/Search/SearchDialog.tsx +6 -13
- package/src/components/Search/SearchInput.tsx +4 -1
- package/src/components/Search/SearchRecent.tsx +4 -2
- package/src/components/SidebarActions/SidebarActions.tsx +10 -3
- package/src/components/TableOfContent/TableOfContent.tsx +7 -2
- package/src/components/UserMenu/LoginButton.tsx +4 -1
- package/src/components/UserMenu/LogoutMenuItem.tsx +2 -1
- package/src/core/hooks/search/use-search-dialog.ts +13 -2
- package/src/core/hooks/use-banner-telemetry.ts +5 -4
- package/src/core/hooks/use-color-switcher.ts +7 -1
- package/src/core/hooks/use-page-actions.ts +17 -28
- package/src/core/hooks/use-product-picker.ts +19 -5
- package/src/core/hooks/use-telemetry-fallback.ts +47 -39
- package/src/core/types/search.ts +1 -0
- package/src/core/utils/index.ts +2 -0
- package/src/core/utils/telemetry/generate-before-after-context.ts +59 -0
- package/src/core/utils/telemetry/generate-resource-urn.ts +9 -0
- package/src/core/utils/telemetry/get-base-data-attributes.ts +27 -0
|
@@ -65,7 +65,7 @@ function TableOfContent(props) {
|
|
|
65
65
|
const href = '#' + heading.id;
|
|
66
66
|
return (React.createElement(TableOfContentMenuItem, { key: href + idx, href: href, $depth: heading.depth - leastDepth + 1 || 0, className: activeHeading === heading.id ? 'active' : '', dangerouslySetInnerHTML: { __html: heading.value || '' }, "data-testid": `toc-${heading.value}`, onClick: (e) => {
|
|
67
67
|
e.preventDefault();
|
|
68
|
-
telemetry.sendTocItemClickedMessage();
|
|
68
|
+
telemetry.sendTocItemClickedMessage([(0, utils_1.getBaseDataAttributes)('tocItem', 'toc')]);
|
|
69
69
|
handleHeadingClick(heading.id);
|
|
70
70
|
} }));
|
|
71
71
|
}))));
|
|
@@ -7,12 +7,13 @@ exports.LoginButton = LoginButton;
|
|
|
7
7
|
const react_1 = __importDefault(require("react"));
|
|
8
8
|
const hooks_1 = require("../../core/hooks");
|
|
9
9
|
const Button_1 = require("../../components/Button/Button");
|
|
10
|
+
const utils_1 = require("../../core/utils");
|
|
10
11
|
function LoginButton({ href, className, variant = 'primary', size = 'medium', label, labelTranslationKey = 'userMenu.login', 'data-component-name': componentName = 'UserMenu/LoginButton', }) {
|
|
11
12
|
const { useTranslate, useTelemetry } = (0, hooks_1.useThemeHooks)();
|
|
12
13
|
const { translate } = useTranslate();
|
|
13
14
|
const telemetry = useTelemetry();
|
|
14
15
|
const buttonLabel = label || translate(labelTranslationKey, 'Login');
|
|
15
16
|
return (react_1.default.createElement("span", { "data-component-name": componentName, className: className },
|
|
16
|
-
react_1.default.createElement(Button_1.Button, { "data-translation-key": label ? undefined : labelTranslationKey, to: href, languageInsensitive: true, onClick: () => telemetry.
|
|
17
|
+
react_1.default.createElement(Button_1.Button, { "data-translation-key": label ? undefined : labelTranslationKey, to: href, languageInsensitive: true, onClick: () => telemetry.sendLoginClickedMessage([(0, utils_1.getBaseDataAttributes)('login', 'button')]), "data-testid": "login-btn", extraClass: className, variant: variant, size: size }, buttonLabel)));
|
|
17
18
|
}
|
|
18
19
|
//# sourceMappingURL=LoginButton.js.map
|
|
@@ -8,13 +8,14 @@ const react_1 = __importDefault(require("react"));
|
|
|
8
8
|
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
|
+
const utils_1 = require("../../core/utils");
|
|
11
12
|
function LogoutMenuItem({ iconOnly, className }) {
|
|
12
13
|
const { useTranslate, useTelemetry, useUserMenu } = (0, hooks_1.useThemeHooks)();
|
|
13
14
|
const { handleLogout } = useUserMenu();
|
|
14
15
|
const telemetry = useTelemetry();
|
|
15
16
|
const { translate } = useTranslate();
|
|
16
17
|
const handleClick = () => {
|
|
17
|
-
telemetry.
|
|
18
|
+
telemetry.sendLogoutClickedMessage([(0, utils_1.getBaseDataAttributes)('logoutItem', 'userMenu')]);
|
|
18
19
|
handleLogout();
|
|
19
20
|
};
|
|
20
21
|
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')));
|
|
@@ -10,6 +10,7 @@ const hotkeys_js_1 = __importDefault(require("hotkeys-js"));
|
|
|
10
10
|
const use_theme_hooks_1 = require("../use-theme-hooks");
|
|
11
11
|
const use_theme_config_1 = require("../use-theme-config");
|
|
12
12
|
const contexts_1 = require("../../contexts");
|
|
13
|
+
const utils_1 = require("../../utils");
|
|
13
14
|
function useSearchDialog() {
|
|
14
15
|
var _a;
|
|
15
16
|
var _b;
|
|
@@ -25,7 +26,9 @@ function useSearchDialog() {
|
|
|
25
26
|
if (hotKeys) {
|
|
26
27
|
(0, hotkeys_js_1.default)(hotKeys, (ev) => {
|
|
27
28
|
setIsOpen(true);
|
|
28
|
-
telemetry.sendSearchOpenedMessage([
|
|
29
|
+
telemetry.sendSearchOpenedMessage([
|
|
30
|
+
Object.assign(Object.assign({}, (0, utils_1.getBaseDataAttributes)('searchDialogId', 'search')), { method: 'shortcut' }),
|
|
31
|
+
]);
|
|
29
32
|
ev.preventDefault();
|
|
30
33
|
});
|
|
31
34
|
return () => hotkeys_js_1.default.unbind(hotKeys);
|
|
@@ -33,7 +36,9 @@ function useSearchDialog() {
|
|
|
33
36
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
34
37
|
}, [hotKeys]);
|
|
35
38
|
const onOpen = (0, react_1.useCallback)(function () {
|
|
36
|
-
telemetry.sendSearchOpenedMessage([
|
|
39
|
+
telemetry.sendSearchOpenedMessage([
|
|
40
|
+
Object.assign(Object.assign({}, (0, utils_1.getBaseDataAttributes)('searchDialogId', 'search')), { method: 'click' }),
|
|
41
|
+
]);
|
|
37
42
|
setIsOpen(true);
|
|
38
43
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
39
44
|
}, []);
|
|
@@ -14,6 +14,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
14
14
|
exports.useBannerTelemetry = useBannerTelemetry;
|
|
15
15
|
const react_1 = require("react");
|
|
16
16
|
const use_theme_hooks_1 = require("./use-theme-hooks");
|
|
17
|
+
const get_base_data_attributes_1 = require("../utils/telemetry/get-base-data-attributes");
|
|
17
18
|
const noop = () => { };
|
|
18
19
|
const noopLink = (_href) => { };
|
|
19
20
|
function useBannerTelemetry(displayBanner) {
|
|
@@ -27,17 +28,7 @@ function useBannerTelemetry(displayBanner) {
|
|
|
27
28
|
sendBannerLinkClickedMessage: noopLink,
|
|
28
29
|
};
|
|
29
30
|
}
|
|
30
|
-
const
|
|
31
|
-
const payload = {
|
|
32
|
-
id: 'banner-id',
|
|
33
|
-
object: 'banner',
|
|
34
|
-
uri: bannerUri,
|
|
35
|
-
trackingId: displayBanner.trackingId,
|
|
36
|
-
hash: displayBanner.hash,
|
|
37
|
-
color: displayBanner.color,
|
|
38
|
-
target: displayBanner.target,
|
|
39
|
-
dismissible: displayBanner.dismissible,
|
|
40
|
-
};
|
|
31
|
+
const payload = Object.assign(Object.assign({}, (0, get_base_data_attributes_1.getBaseDataAttributes)('bannerId', 'banner')), { trackingId: displayBanner.trackingId, hash: displayBanner.hash, color: displayBanner.color, target: displayBanner.target, dismissible: displayBanner.dismissible });
|
|
41
32
|
return {
|
|
42
33
|
sendBannerViewedMessage: () => {
|
|
43
34
|
telemetry.sendBannerViewedMessage([payload]);
|
|
@@ -7,6 +7,7 @@ const use_theme_config_1 = require("./use-theme-config");
|
|
|
7
7
|
const use_theme_hooks_1 = require("./use-theme-hooks");
|
|
8
8
|
const use_store_1 = require("./use-store");
|
|
9
9
|
const constants_1 = require("../constants");
|
|
10
|
+
const utils_1 = require("../utils");
|
|
10
11
|
const COLOR_MODE_KEY = 'colorSchema';
|
|
11
12
|
const colorModeStore = (0, use_store_1.createStore)({
|
|
12
13
|
storageKey: COLOR_MODE_KEY,
|
|
@@ -36,7 +37,7 @@ const useColorSwitcher = () => {
|
|
|
36
37
|
root.classList.remove('notransition');
|
|
37
38
|
});
|
|
38
39
|
telemetry.sendColorModeSwitchedMessage([
|
|
39
|
-
|
|
40
|
+
...(0, utils_1.generateBeforeAfterContext)('colorMode', 'button', { mode: activeColorMode }, { mode: newMode }),
|
|
40
41
|
]);
|
|
41
42
|
setActiveColorMode(newMode);
|
|
42
43
|
};
|
|
@@ -24,13 +24,7 @@ const clipboard_service_1 = require("../utils/clipboard-service");
|
|
|
24
24
|
const dom_1 = require("../utils/dom");
|
|
25
25
|
const mcp_1 = require("../utils/mcp");
|
|
26
26
|
const urls_1 = require("../utils/urls");
|
|
27
|
-
|
|
28
|
-
return {
|
|
29
|
-
id: pageSlug,
|
|
30
|
-
object: 'page',
|
|
31
|
-
uri: pageUrl,
|
|
32
|
-
};
|
|
33
|
-
}
|
|
27
|
+
const get_base_data_attributes_1 = require("../utils/telemetry/get-base-data-attributes");
|
|
34
28
|
const DEFAULT_ENABLED_ACTIONS = [
|
|
35
29
|
'copy',
|
|
36
30
|
'view',
|
|
@@ -55,19 +49,17 @@ function usePageActions(pageSlug, mcpUrl, actions) {
|
|
|
55
49
|
? { serverName: mcpConfig.serverName, url: mcpUrl || '' }
|
|
56
50
|
: { serverName: mcpConfig.serverName, url: mcpConfig.serverUrl || '' };
|
|
57
51
|
const isDocsMcp = !requiresMcpUrl;
|
|
58
|
-
const origin = dom_1.IS_BROWSER ? window.location.origin : '';
|
|
59
|
-
const pageUrl = `${origin}${pageSlug}`;
|
|
60
52
|
return createMCPAction({
|
|
61
53
|
clientType,
|
|
62
54
|
mcpConfig: config,
|
|
63
55
|
translate,
|
|
64
56
|
onClickCallback: isDocsMcp
|
|
65
|
-
? () => telemetry.
|
|
66
|
-
Object.assign(Object.assign({},
|
|
57
|
+
? () => telemetry.sendPageActionsClickedMessage([
|
|
58
|
+
Object.assign(Object.assign({}, (0, get_base_data_attributes_1.getBaseDataAttributes)('pageActions', 'button')), { actionType: `docs-mcp-${clientType}` }),
|
|
67
59
|
])
|
|
68
60
|
: undefined,
|
|
69
61
|
});
|
|
70
|
-
}, [mcpUrl, mcpConfig, translate, telemetry
|
|
62
|
+
}, [mcpUrl, mcpConfig, translate, telemetry]);
|
|
71
63
|
const result = (0, react_1.useMemo)(() => {
|
|
72
64
|
var _a, _b;
|
|
73
65
|
var _c;
|
|
@@ -83,7 +75,6 @@ function usePageActions(pageSlug, mcpUrl, actions) {
|
|
|
83
75
|
? window.location.origin
|
|
84
76
|
: ((_c = globalThis['SSR_HOSTNAME']) !== null && _c !== void 0 ? _c : '');
|
|
85
77
|
const pathname = (0, urls_1.addTrailingSlash)(pageSlug);
|
|
86
|
-
const pageUrl = (0, urls_1.combineUrls)(origin, pathname);
|
|
87
78
|
const isRoot = (0, urls_1.withoutPathPrefix)(pathname) === '/';
|
|
88
79
|
const mdPageUrl = isRoot
|
|
89
80
|
? (0, urls_1.combineUrls)(origin, pathname, 'index.html.md')
|
|
@@ -106,8 +97,8 @@ function usePageActions(pageSlug, mcpUrl, actions) {
|
|
|
106
97
|
}
|
|
107
98
|
const text = yield result.text();
|
|
108
99
|
clipboard_service_1.ClipboardService.copyCustom(text);
|
|
109
|
-
telemetry.
|
|
110
|
-
Object.assign(Object.assign({},
|
|
100
|
+
telemetry.sendPageActionsClickedMessage([
|
|
101
|
+
Object.assign(Object.assign({}, (0, get_base_data_attributes_1.getBaseDataAttributes)('pageActions', 'button')), { actionType: 'copy' }),
|
|
111
102
|
]);
|
|
112
103
|
}
|
|
113
104
|
catch (error) {
|
|
@@ -122,8 +113,8 @@ function usePageActions(pageSlug, mcpUrl, actions) {
|
|
|
122
113
|
iconComponent: MarkdownFullIcon_1.MarkdownFullIcon,
|
|
123
114
|
link: mdPageUrl,
|
|
124
115
|
onClick: () => {
|
|
125
|
-
telemetry.
|
|
126
|
-
Object.assign(Object.assign({},
|
|
116
|
+
telemetry.sendPageActionsClickedMessage([
|
|
117
|
+
Object.assign(Object.assign({}, (0, get_base_data_attributes_1.getBaseDataAttributes)('pageActions', 'button')), { actionType: 'view' }),
|
|
127
118
|
]);
|
|
128
119
|
},
|
|
129
120
|
}),
|
|
@@ -136,8 +127,8 @@ function usePageActions(pageSlug, mcpUrl, actions) {
|
|
|
136
127
|
iconComponent: ChatGptIcon_1.ChatGptIcon,
|
|
137
128
|
link,
|
|
138
129
|
onClick: () => {
|
|
139
|
-
telemetry.
|
|
140
|
-
Object.assign(Object.assign({},
|
|
130
|
+
telemetry.sendPageActionsClickedMessage([
|
|
131
|
+
Object.assign(Object.assign({}, (0, get_base_data_attributes_1.getBaseDataAttributes)('pageActions', 'button')), { actionType: 'chatgpt' }),
|
|
141
132
|
]);
|
|
142
133
|
window.location.href = link;
|
|
143
134
|
},
|
|
@@ -152,8 +143,8 @@ function usePageActions(pageSlug, mcpUrl, actions) {
|
|
|
152
143
|
iconComponent: ClaudeIcon_1.ClaudeIcon,
|
|
153
144
|
link,
|
|
154
145
|
onClick: () => {
|
|
155
|
-
telemetry.
|
|
156
|
-
Object.assign(Object.assign({},
|
|
146
|
+
telemetry.sendPageActionsClickedMessage([
|
|
147
|
+
Object.assign(Object.assign({}, (0, get_base_data_attributes_1.getBaseDataAttributes)('pageActions', 'button')), { actionType: 'claude' }),
|
|
157
148
|
]);
|
|
158
149
|
window.location.href = link;
|
|
159
150
|
},
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.useProductPicker = useProductPicker;
|
|
4
|
+
const react_1 = require("react");
|
|
4
5
|
const react_router_dom_1 = require("react-router-dom");
|
|
5
6
|
const utils_1 = require("../../components/Product/utils");
|
|
6
7
|
const use_theme_hooks_1 = require("./use-theme-hooks");
|
|
@@ -12,20 +13,29 @@ function useProductPicker() {
|
|
|
12
13
|
const telemetry = useTelemetry();
|
|
13
14
|
const navigate = (0, react_router_dom_1.useNavigate)();
|
|
14
15
|
const loadAndNavigate = useLoadAndNavigate();
|
|
16
|
+
// An open dropdown can fire a menu item's onAction from an earlier render, so `product.link`
|
|
17
|
+
// may be stale (e.g. after a locale switch); resolve the live product via a ref.
|
|
18
|
+
const productsRef = (0, react_1.useRef)(products);
|
|
19
|
+
productsRef.current = products;
|
|
15
20
|
function setProduct(product) {
|
|
21
|
+
var _a;
|
|
16
22
|
if (!product)
|
|
17
23
|
return;
|
|
18
|
-
|
|
24
|
+
// match on `name` (locale-stable; link/slug are re-localized)
|
|
25
|
+
const freshProduct = (_a = productsRef.current.find((p) => p.name === product.name)) !== null && _a !== void 0 ? _a : product;
|
|
26
|
+
telemetry.sendProductPickerChangedMessage([
|
|
27
|
+
...(0, utils_2.generateBeforeAfterContext)('productPicker', 'dropdown', { product: (currentProduct === null || currentProduct === void 0 ? void 0 : currentProduct.slug) || '' }, { product: freshProduct.slug }),
|
|
28
|
+
]);
|
|
19
29
|
if (typeof document === 'undefined')
|
|
20
30
|
return;
|
|
21
|
-
if (
|
|
31
|
+
if (freshProduct.name) {
|
|
22
32
|
const root = document.documentElement;
|
|
23
33
|
Array.from(root.classList)
|
|
24
34
|
.filter((c) => c.startsWith('product-'))
|
|
25
35
|
.forEach((c) => root.classList.remove(c));
|
|
26
|
-
root.classList.add((0, utils_1.getProductClassName)(
|
|
36
|
+
root.classList.add((0, utils_1.getProductClassName)(freshProduct.name));
|
|
27
37
|
}
|
|
28
|
-
loadAndNavigate({ navigate, to: (0, utils_2.withPathPrefix)(
|
|
38
|
+
loadAndNavigate({ navigate, to: (0, utils_2.withPathPrefix)(freshProduct.link) });
|
|
29
39
|
}
|
|
30
40
|
return {
|
|
31
41
|
currentProduct,
|
|
@@ -1,48 +1,59 @@
|
|
|
1
1
|
export declare const useTelemetryFallback: () => {
|
|
2
2
|
send: () => void;
|
|
3
|
-
sendPageViewedMessage: () => void;
|
|
4
|
-
sendPageActionsButtonClickedMessage: () => void;
|
|
5
3
|
sendErrorMessage: () => void;
|
|
6
4
|
sendClientErrorMessage: () => void;
|
|
5
|
+
sendCatalogEntitiesFilterCheckboxToggledMessage: () => void;
|
|
6
|
+
sendCatalogEntitiesCopyDataSchemaClickedMessage: () => void;
|
|
7
|
+
sendCatalogEntitiesViewModeChangedMessage: () => void;
|
|
8
|
+
sendCatalogEntitiesRelatedEntitiesListSearchQueryMessage: () => void;
|
|
9
|
+
sendCatalogEntitiesRelatedEntitiesListSearchResultClickMessage: () => void;
|
|
10
|
+
sendCatalogEntitiesListSearchQueryMessage: () => void;
|
|
11
|
+
sendCatalogEntitiesListSearchResultClickedMessage: () => void;
|
|
12
|
+
sendRedirectMessage: () => void;
|
|
13
|
+
sendCustomMessage: () => void;
|
|
14
|
+
sendSearchAIQueryMessage: () => void;
|
|
15
|
+
sendSearchAiOpenedMessage: () => void;
|
|
16
|
+
sendSearchAIFeedbackMessage: () => void;
|
|
17
|
+
sendLoginClickedMessage: () => void;
|
|
18
|
+
sendLoginProviderClickedMessage: () => void;
|
|
19
|
+
sendLogoutClickedMessage: () => void;
|
|
20
|
+
sendBannerViewedMessage: () => void;
|
|
21
|
+
sendBannerLinkClickedMessage: () => void;
|
|
22
|
+
sendBannerDismissedMessage: () => void;
|
|
7
23
|
sendBreadcrumbClickedMessage: () => void;
|
|
8
|
-
|
|
9
|
-
sendSidebarItemClickedMessage: () => void;
|
|
10
|
-
sendSidebarItemExpandedMessage: () => void;
|
|
11
|
-
sendSidebarItemCollapsedMessage: () => void;
|
|
12
|
-
sendChangeLayoutButtonClickedMessage: () => void;
|
|
13
|
-
sendEditPageLinkClickedMessage: () => void;
|
|
14
|
-
sendCodeSnippetReportedMessage: () => void;
|
|
15
|
-
sendNavbarMenuItemClickedMessage: () => void;
|
|
16
|
-
sendLoginButtonClickedMessage: () => void;
|
|
17
|
-
sendLoginProviderButtonClickedMessage: () => void;
|
|
18
|
-
sendLogoutMenuItemClickedMessage: () => void;
|
|
19
|
-
sendLogoClickedMessage: () => void;
|
|
20
|
-
sendTocItemClickedMessage: () => void;
|
|
24
|
+
sendCatalogActionsClickedMessage: () => void;
|
|
21
25
|
sendCatalogFilterChangedMessage: () => void;
|
|
22
26
|
sendCatalogItemClickedMessage: () => void;
|
|
23
27
|
sendScorecardLinkClickedMessage: () => void;
|
|
24
|
-
|
|
25
|
-
|
|
28
|
+
sendFilterCheckboxToggledMessage: () => void;
|
|
29
|
+
sendFeedbackMessage: () => void;
|
|
26
30
|
sendFooterItemClickedMessage: () => void;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
sendNavbarMenuItemClickedMessage: () => void;
|
|
32
|
+
sendColorModeSwitchedMessage: () => void;
|
|
33
|
+
sendLanguagePickerChangedMessage: () => void;
|
|
34
|
+
sendProductPickerChangedMessage: () => void;
|
|
35
|
+
sendLogoClickedMessage: () => void;
|
|
36
|
+
sendCodeSnippetReportedMessage: () => void;
|
|
37
|
+
sendMobileMenuClosedMessage: () => void;
|
|
38
|
+
sendMobileMenuOpenedMessage: () => void;
|
|
39
|
+
sendPageViewedMessage: () => void;
|
|
40
|
+
sendPageTimeMessage: () => void;
|
|
41
|
+
sendPageActionsClickedMessage: () => void;
|
|
42
|
+
sendPageEditClickedMessage: () => void;
|
|
43
|
+
sendSidebarDrilldownBackClickedMessage: () => void;
|
|
44
|
+
sendSidebarItemClickedMessage: () => void;
|
|
45
|
+
sendSidebarExpandedMessage: () => void;
|
|
46
|
+
sendSidebarCollapsedMessage: () => void;
|
|
47
|
+
sendChangeLayoutClickedMessage: () => void;
|
|
48
|
+
sendRequestApiAccessClickedMessage: () => void;
|
|
49
|
+
sendVersionPickerChangedMessage: () => void;
|
|
50
|
+
sendSearchInputResetClickedMessage: () => void;
|
|
51
|
+
sendSearchResultClickedMessage: () => void;
|
|
52
|
+
sendSearchRecentRemoveClickedMessage: () => void;
|
|
32
53
|
sendSearchRecentClickedMessage: () => void;
|
|
33
|
-
sendRequestApiAccessButtonClickedMessage: () => void;
|
|
34
|
-
sendVersionPickerSelectionChangeMessage: () => void;
|
|
35
|
-
sendProductPickedMessage: () => void;
|
|
36
|
-
sendFilterCheckboxToggledMessage: () => void;
|
|
37
|
-
sendLanguagePickerLocaleChangedMessage: () => void;
|
|
38
54
|
sendSearchOpenedMessage: () => void;
|
|
39
55
|
sendSearchQueryMessage: () => void;
|
|
40
|
-
|
|
41
|
-
sendSearchAIQueryMessage: () => void;
|
|
42
|
-
sendSearchAIFeedbackMessage: () => void;
|
|
43
|
-
sendFeedbackMessage: () => void;
|
|
44
|
-
sendSearchResultClickedMessage: () => void;
|
|
45
|
-
sendRedirectMessage: () => void;
|
|
56
|
+
sendTocItemClickedMessage: () => void;
|
|
46
57
|
sendOpenapiDocsMessage: () => void;
|
|
47
58
|
sendCopyCodeSnippetClickedMessage: () => void;
|
|
48
59
|
sendViewedMessage: () => void;
|
|
@@ -65,10 +76,7 @@ export declare const useTelemetryFallback: () => {
|
|
|
65
76
|
sendAsyncapiDocsReferencedInClickedMessage: () => void;
|
|
66
77
|
sendGraphqlDocsViewedMessage: () => void;
|
|
67
78
|
sendGraphqlDocsPerformanceMetricsMessage: () => void;
|
|
79
|
+
sendGraphqlDocsDownloadDefinitionClickedMessage: () => void;
|
|
68
80
|
sendGraphqlDocsReferencedInLinkClickedMessage: () => void;
|
|
69
81
|
sendGraphqlDocsRequiredScopesModalOpenedMessage: () => void;
|
|
70
|
-
sendGraphqlDocsDownloadDefinitionClickedMessage: () => void;
|
|
71
|
-
sendBannerViewedMessage: () => void;
|
|
72
|
-
sendBannerLinkClickedMessage: () => void;
|
|
73
|
-
sendBannerDismissedMessage: () => void;
|
|
74
82
|
};
|
|
@@ -1,53 +1,64 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.useTelemetryFallback = void 0;
|
|
4
|
-
//
|
|
5
|
-
//
|
|
4
|
+
// Fallback no-op telemetry used by `useThemeHooks` when no ThemeDataContext
|
|
5
|
+
// provider supplies real hooks.
|
|
6
6
|
const useTelemetryFallback = () => ({
|
|
7
7
|
send: () => { },
|
|
8
|
-
sendPageViewedMessage: () => { },
|
|
9
|
-
sendPageActionsButtonClickedMessage: () => { },
|
|
10
8
|
sendErrorMessage: () => { },
|
|
11
9
|
sendClientErrorMessage: () => { },
|
|
10
|
+
sendCatalogEntitiesFilterCheckboxToggledMessage: () => { },
|
|
11
|
+
sendCatalogEntitiesCopyDataSchemaClickedMessage: () => { },
|
|
12
|
+
sendCatalogEntitiesViewModeChangedMessage: () => { },
|
|
13
|
+
sendCatalogEntitiesRelatedEntitiesListSearchQueryMessage: () => { },
|
|
14
|
+
sendCatalogEntitiesRelatedEntitiesListSearchResultClickMessage: () => { },
|
|
15
|
+
sendCatalogEntitiesListSearchQueryMessage: () => { },
|
|
16
|
+
sendCatalogEntitiesListSearchResultClickedMessage: () => { },
|
|
17
|
+
sendRedirectMessage: () => { },
|
|
18
|
+
sendCustomMessage: () => { },
|
|
19
|
+
sendSearchAIQueryMessage: () => { },
|
|
20
|
+
sendSearchAiOpenedMessage: () => { },
|
|
21
|
+
sendSearchAIFeedbackMessage: () => { },
|
|
22
|
+
sendLoginClickedMessage: () => { },
|
|
23
|
+
sendLoginProviderClickedMessage: () => { },
|
|
24
|
+
sendLogoutClickedMessage: () => { },
|
|
25
|
+
sendBannerViewedMessage: () => { },
|
|
26
|
+
sendBannerLinkClickedMessage: () => { },
|
|
27
|
+
sendBannerDismissedMessage: () => { },
|
|
12
28
|
sendBreadcrumbClickedMessage: () => { },
|
|
13
|
-
|
|
14
|
-
sendSidebarItemClickedMessage: () => { },
|
|
15
|
-
sendSidebarItemExpandedMessage: () => { },
|
|
16
|
-
sendSidebarItemCollapsedMessage: () => { },
|
|
17
|
-
sendChangeLayoutButtonClickedMessage: () => { },
|
|
18
|
-
sendEditPageLinkClickedMessage: () => { },
|
|
19
|
-
sendCodeSnippetReportedMessage: () => { },
|
|
20
|
-
sendNavbarMenuItemClickedMessage: () => { },
|
|
21
|
-
sendLoginButtonClickedMessage: () => { },
|
|
22
|
-
sendLoginProviderButtonClickedMessage: () => { },
|
|
23
|
-
sendLogoutMenuItemClickedMessage: () => { },
|
|
24
|
-
sendLogoClickedMessage: () => { },
|
|
25
|
-
sendTocItemClickedMessage: () => { },
|
|
29
|
+
sendCatalogActionsClickedMessage: () => { },
|
|
26
30
|
sendCatalogFilterChangedMessage: () => { },
|
|
27
31
|
sendCatalogItemClickedMessage: () => { },
|
|
28
32
|
sendScorecardLinkClickedMessage: () => { },
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
sendFilterCheckboxToggledMessage: () => { },
|
|
34
|
+
sendFeedbackMessage: () => { },
|
|
31
35
|
sendFooterItemClickedMessage: () => { },
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
sendNavbarMenuItemClickedMessage: () => { },
|
|
37
|
+
sendColorModeSwitchedMessage: () => { },
|
|
38
|
+
sendLanguagePickerChangedMessage: () => { },
|
|
39
|
+
sendProductPickerChangedMessage: () => { },
|
|
40
|
+
sendLogoClickedMessage: () => { },
|
|
41
|
+
sendCodeSnippetReportedMessage: () => { },
|
|
42
|
+
sendMobileMenuClosedMessage: () => { },
|
|
43
|
+
sendMobileMenuOpenedMessage: () => { },
|
|
44
|
+
sendPageViewedMessage: () => { },
|
|
45
|
+
sendPageTimeMessage: () => { },
|
|
46
|
+
sendPageActionsClickedMessage: () => { },
|
|
47
|
+
sendPageEditClickedMessage: () => { },
|
|
48
|
+
sendSidebarDrilldownBackClickedMessage: () => { },
|
|
49
|
+
sendSidebarItemClickedMessage: () => { },
|
|
50
|
+
sendSidebarExpandedMessage: () => { },
|
|
51
|
+
sendSidebarCollapsedMessage: () => { },
|
|
52
|
+
sendChangeLayoutClickedMessage: () => { },
|
|
53
|
+
sendRequestApiAccessClickedMessage: () => { },
|
|
54
|
+
sendVersionPickerChangedMessage: () => { },
|
|
55
|
+
sendSearchInputResetClickedMessage: () => { },
|
|
56
|
+
sendSearchResultClickedMessage: () => { },
|
|
57
|
+
sendSearchRecentRemoveClickedMessage: () => { },
|
|
37
58
|
sendSearchRecentClickedMessage: () => { },
|
|
38
|
-
sendRequestApiAccessButtonClickedMessage: () => { },
|
|
39
|
-
sendVersionPickerSelectionChangeMessage: () => { },
|
|
40
|
-
sendProductPickedMessage: () => { },
|
|
41
|
-
sendFilterCheckboxToggledMessage: () => { },
|
|
42
|
-
sendLanguagePickerLocaleChangedMessage: () => { },
|
|
43
59
|
sendSearchOpenedMessage: () => { },
|
|
44
60
|
sendSearchQueryMessage: () => { },
|
|
45
|
-
|
|
46
|
-
sendSearchAIQueryMessage: () => { },
|
|
47
|
-
sendSearchAIFeedbackMessage: () => { },
|
|
48
|
-
sendFeedbackMessage: () => { },
|
|
49
|
-
sendSearchResultClickedMessage: () => { },
|
|
50
|
-
sendRedirectMessage: () => { },
|
|
61
|
+
sendTocItemClickedMessage: () => { },
|
|
51
62
|
sendOpenapiDocsMessage: () => { },
|
|
52
63
|
sendCopyCodeSnippetClickedMessage: () => { },
|
|
53
64
|
sendViewedMessage: () => { },
|
|
@@ -70,12 +81,9 @@ const useTelemetryFallback = () => ({
|
|
|
70
81
|
sendAsyncapiDocsReferencedInClickedMessage: () => { },
|
|
71
82
|
sendGraphqlDocsViewedMessage: () => { },
|
|
72
83
|
sendGraphqlDocsPerformanceMetricsMessage: () => { },
|
|
84
|
+
sendGraphqlDocsDownloadDefinitionClickedMessage: () => { },
|
|
73
85
|
sendGraphqlDocsReferencedInLinkClickedMessage: () => { },
|
|
74
86
|
sendGraphqlDocsRequiredScopesModalOpenedMessage: () => { },
|
|
75
|
-
sendGraphqlDocsDownloadDefinitionClickedMessage: () => { },
|
|
76
|
-
sendBannerViewedMessage: () => { },
|
|
77
|
-
sendBannerLinkClickedMessage: () => { },
|
|
78
|
-
sendBannerDismissedMessage: () => { },
|
|
79
87
|
});
|
|
80
88
|
exports.useTelemetryFallback = useTelemetryFallback;
|
|
81
89
|
//# sourceMappingURL=use-telemetry-fallback.js.map
|
|
@@ -124,5 +124,6 @@ export declare enum ToolCallName {
|
|
|
124
124
|
GetEndpoints = "get-endpoints",
|
|
125
125
|
GetEndpointInfo = "get-endpoint-info",
|
|
126
126
|
GetSecuritySchemes = "get-security-schemes",
|
|
127
|
-
GetFullApiDescription = "get-full-api-description"
|
|
127
|
+
GetFullApiDescription = "get-full-api-description",
|
|
128
|
+
Execute = "execute"
|
|
128
129
|
}
|
package/lib/core/types/search.js
CHANGED
|
@@ -14,5 +14,6 @@ var ToolCallName;
|
|
|
14
14
|
ToolCallName["GetEndpointInfo"] = "get-endpoint-info";
|
|
15
15
|
ToolCallName["GetSecuritySchemes"] = "get-security-schemes";
|
|
16
16
|
ToolCallName["GetFullApiDescription"] = "get-full-api-description";
|
|
17
|
+
ToolCallName["Execute"] = "execute";
|
|
17
18
|
})(ToolCallName || (exports.ToolCallName = ToolCallName = {}));
|
|
18
19
|
//# sourceMappingURL=search.js.map
|
|
@@ -46,3 +46,5 @@ export * from './content-segments';
|
|
|
46
46
|
export * from './custom-catalog-options-casing';
|
|
47
47
|
export * from './get-auto-dismiss-duration';
|
|
48
48
|
export * from './tooltip-placement';
|
|
49
|
+
export * from './telemetry/get-base-data-attributes';
|
|
50
|
+
export * from './telemetry/generate-before-after-context';
|
package/lib/core/utils/index.js
CHANGED
|
@@ -62,4 +62,6 @@ __exportStar(require("./content-segments"), exports);
|
|
|
62
62
|
__exportStar(require("./custom-catalog-options-casing"), exports);
|
|
63
63
|
__exportStar(require("./get-auto-dismiss-duration"), exports);
|
|
64
64
|
__exportStar(require("./tooltip-placement"), exports);
|
|
65
|
+
__exportStar(require("./telemetry/get-base-data-attributes"), exports);
|
|
66
|
+
__exportStar(require("./telemetry/generate-before-after-context"), exports);
|
|
65
67
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { AsyncApiRealmUI } from '@redocly/realm-asyncapi-sdk';
|
|
2
|
+
type UITelemetryClient = AsyncApiRealmUI.Telemetry;
|
|
3
|
+
type UITelemetryClientMethods = {
|
|
4
|
+
[K in keyof UITelemetryClient]: UITelemetryClient[K] extends (...args: any) => any ? UITelemetryClient[K] : never;
|
|
5
|
+
};
|
|
6
|
+
type UITelemetryClientMethodKeys = {
|
|
7
|
+
[K in keyof UITelemetryClientMethods]: Parameters<UITelemetryClientMethods[K]>[0] extends readonly [any, any, ...any[]] ? K : never;
|
|
8
|
+
}[keyof UITelemetryClientMethods];
|
|
9
|
+
type EventSchemaProps<T extends UITelemetryClientMethodKeys> = Parameters<UITelemetryClientMethods[T]>[0];
|
|
10
|
+
type EventAfterContext<T extends UITelemetryClientMethodKeys> = EventSchemaProps<T>[0];
|
|
11
|
+
type EventBeforeContext<T extends UITelemetryClientMethodKeys> = EventSchemaProps<T>[1];
|
|
12
|
+
/**
|
|
13
|
+
* Builds a typed `[after, before]` tuple for Realm UI telemetry events whose AsyncAPI
|
|
14
|
+
* contract lists the updated state first, then the prior state (per CloudEvents styleguide).
|
|
15
|
+
*
|
|
16
|
+
* Each slice merges {@link getBaseDataAttributes} (`id`, `object`, `uri`) with the
|
|
17
|
+
* corresponding partial payload and sets `context` to `'after'` or `'before'`.
|
|
18
|
+
*
|
|
19
|
+
* @template T - Telemetry client method key whose `data` tuple is
|
|
20
|
+
* `[after, before, ...]` (for example `'sendLanguagePickerChangedMessage'`).
|
|
21
|
+
* @param id - Stable resource identifier passed to {@link getBaseDataAttributes}
|
|
22
|
+
* and included on both payloads.
|
|
23
|
+
* @param object - Resource kind passed to {@link getBaseDataAttributes}
|
|
24
|
+
* and included on both payloads (for example `'dropdown'` or `'button'`).
|
|
25
|
+
* @param before - Event-specific fields for the prior state, excluding `id`, `object`,
|
|
26
|
+
* `uri`, and `context` (filled by this helper).
|
|
27
|
+
* @param after - Event-specific fields for the updated state, excluding `id`, `object`,
|
|
28
|
+
* `uri`, and `context` (filled by this helper).
|
|
29
|
+
* @returns A two-tuple in send order: the fully merged after payload, then the fully
|
|
30
|
+
* merged before payload. Spread into the matching `send*Message` call.
|
|
31
|
+
*/
|
|
32
|
+
export declare function generateBeforeAfterContext<T extends UITelemetryClientMethodKeys>(id: EventAfterContext<T>['id'], object: EventAfterContext<T>['object'], before: Omit<EventBeforeContext<T>, 'id' | 'object' | 'uri' | 'context'>, after: Omit<EventAfterContext<T>, 'id' | 'object' | 'uri' | 'context'>): [EventAfterContext<T> & {
|
|
33
|
+
context: 'after';
|
|
34
|
+
}, EventBeforeContext<T> & {
|
|
35
|
+
context: 'before';
|
|
36
|
+
}];
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateBeforeAfterContext = generateBeforeAfterContext;
|
|
4
|
+
const get_base_data_attributes_1 = require("./get-base-data-attributes");
|
|
5
|
+
/**
|
|
6
|
+
* Builds a typed `[after, before]` tuple for Realm UI telemetry events whose AsyncAPI
|
|
7
|
+
* contract lists the updated state first, then the prior state (per CloudEvents styleguide).
|
|
8
|
+
*
|
|
9
|
+
* Each slice merges {@link getBaseDataAttributes} (`id`, `object`, `uri`) with the
|
|
10
|
+
* corresponding partial payload and sets `context` to `'after'` or `'before'`.
|
|
11
|
+
*
|
|
12
|
+
* @template T - Telemetry client method key whose `data` tuple is
|
|
13
|
+
* `[after, before, ...]` (for example `'sendLanguagePickerChangedMessage'`).
|
|
14
|
+
* @param id - Stable resource identifier passed to {@link getBaseDataAttributes}
|
|
15
|
+
* and included on both payloads.
|
|
16
|
+
* @param object - Resource kind passed to {@link getBaseDataAttributes}
|
|
17
|
+
* and included on both payloads (for example `'dropdown'` or `'button'`).
|
|
18
|
+
* @param before - Event-specific fields for the prior state, excluding `id`, `object`,
|
|
19
|
+
* `uri`, and `context` (filled by this helper).
|
|
20
|
+
* @param after - Event-specific fields for the updated state, excluding `id`, `object`,
|
|
21
|
+
* `uri`, and `context` (filled by this helper).
|
|
22
|
+
* @returns A two-tuple in send order: the fully merged after payload, then the fully
|
|
23
|
+
* merged before payload. Spread into the matching `send*Message` call.
|
|
24
|
+
*/
|
|
25
|
+
function generateBeforeAfterContext(id, object, before, after) {
|
|
26
|
+
const baseAttributes = (0, get_base_data_attributes_1.getBaseDataAttributes)(id, object);
|
|
27
|
+
return [
|
|
28
|
+
Object.assign(Object.assign(Object.assign({}, baseAttributes), { context: 'after' }), after),
|
|
29
|
+
Object.assign(Object.assign(Object.assign({}, baseAttributes), { context: 'before' }), before),
|
|
30
|
+
];
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=generate-before-after-context.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateResourceUrn = generateResourceUrn;
|
|
4
|
+
/**
|
|
5
|
+
* Generates a resource URN for Realm UI telemetry.
|
|
6
|
+
* @param object - The object type.
|
|
7
|
+
* @param id - The resource ID.
|
|
8
|
+
* @returns The resource URN.
|
|
9
|
+
*/
|
|
10
|
+
function generateResourceUrn(object, id) {
|
|
11
|
+
return `urn:redocly:realm:ui:${object}:${id}`;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=generate-resource-urn.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type BaseDataAttributes<T, K, U> = {
|
|
2
|
+
/** Resource identifier (e.g. UI key, or page URL when tracking navigation). */
|
|
3
|
+
id: T;
|
|
4
|
+
/** Object kind used for telemetry categorization (e.g. `'button'`, `'page'`). */
|
|
5
|
+
object: K;
|
|
6
|
+
/** Resolved URI: the optional `url` when provided, otherwise a Realm UI resource URN. */
|
|
7
|
+
uri: U;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Builds the base fields for Realm UI telemetry payloads: `id`, `object`, and `uri`.
|
|
11
|
+
* When `url` is omitted, {@link generateResourceUrn} derives `uri` as
|
|
12
|
+
* `urn:redocly:realm:ui:{object}:{id}`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getBaseDataAttributes<T, K, U>(id: T, object: K, url?: U): BaseDataAttributes<T, K, U>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getBaseDataAttributes = getBaseDataAttributes;
|
|
4
|
+
const generate_resource_urn_1 = require("./generate-resource-urn");
|
|
5
|
+
/**
|
|
6
|
+
* Builds the base fields for Realm UI telemetry payloads: `id`, `object`, and `uri`.
|
|
7
|
+
* When `url` is omitted, {@link generateResourceUrn} derives `uri` as
|
|
8
|
+
* `urn:redocly:realm:ui:{object}:{id}`.
|
|
9
|
+
*/
|
|
10
|
+
function getBaseDataAttributes(id, object, url) {
|
|
11
|
+
return {
|
|
12
|
+
id,
|
|
13
|
+
object,
|
|
14
|
+
uri: url !== null && url !== void 0 ? url : (0, generate_resource_urn_1.generateResourceUrn)(object, id),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=get-base-data-attributes.js.map
|