@sanity/tsdoc
Version:
Generate API reference docs from TypeScript projects and store in a Sanity-friendly JSON format. Render a static frontend, or as React components.
1,072 lines (1,066 loc) • 131 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: !0 });
var jsxRuntime = require("react/jsx-runtime"), ui = require("@sanity/ui"), react = require("react"), color = require("@sanity/color"), styledComponents = require("styled-components"), icons = require("@sanity/icons"), react$1 = require("@portabletext/react"), Refractor = require("react-refractor"), store = require("@sanity/tsdoc/store"), history = require("history"), client = require("react-dom/client");
function _interopDefaultCompat(e) {
return e && typeof e == "object" && "default" in e ? e : { default: e };
}
var Refractor__default = /* @__PURE__ */ _interopDefaultCompat(Refractor);
function parsePath(path, options = {}) {
const { basePath = "", version = "0.0.0" } = options, baseSegments = basePath.split("/").filter(Boolean), segments = path.split("/").filter(Boolean).slice(baseSegments.length);
let packageScope = null, packageName = null, releaseVersion = null, exportPath = null, memberSlug = null;
return packageName = segments.shift() || null, packageName?.startsWith("@") && (packageScope = packageName, packageName = segments.shift() || null), packageName && (releaseVersion = version), releaseVersion && (segments.length > 1 ? (memberSlug = segments.pop() || null, exportPath = `./${segments.join("/")}`) : segments.length === 1 && (memberSlug = segments.pop() || null, exportPath = ".")), {
exportPath,
packageName,
packageScope,
releaseVersion,
memberSlug
};
}
const SyntaxText = styledComponents.styled.code(
({ $deprecated, $syntax, theme }) => {
const { color: color2 } = theme.sanity;
return styledComponents.css`
&& {
background-color: transparent;
color: ${$syntax ? overrideSyntaxColors(color2, $syntax) : void 0};
text-decoration: ${$deprecated ? "line-through" : void 0};
}
`;
}
), overrideSyntaxColors = (color$1, $syntax) => {
const isDarkMode = color$1.dark;
switch ($syntax) {
case "function":
return isDarkMode ? color$1.syntax[$syntax] : color.green[700].hex;
case "string":
return isDarkMode ? color$1.syntax[$syntax] : color.yellow[700].hex;
case "className":
return isDarkMode ? color$1.syntax[$syntax] : color.cyan[700].hex;
default:
return color$1.syntax[$syntax];
}
};
function isArray(val) {
return Array.isArray(val);
}
const LevelContext = react.createContext(null);
function useLevel() {
return react.useContext(LevelContext) || 1;
}
function addResponsiveProp(a, b) {
const _a = isArray(a) ? a : [a], _b = isArray(b) ? b : [b], len = Math.max(_a.length, _b.length), ret = [];
for (let i = 0; i < len; i += 1) {
const aSize = _a[i] ?? _a[_a.length - 1] ?? 0, bSize = _b[i] ?? _b[_b.length - 1] ?? 0;
ret.push(aSize + bSize);
}
return ret;
}
const SizeContext = react.createContext(2);
function useSize(props) {
const { min = 0, max = 1 / 0, size = 0 } = props || {}, delta = react.useContext(SizeContext) ?? 0, __cache_key__ = JSON.stringify([size, delta]);
return react.useMemo(
() => addResponsiveProp(size, delta).map((s) => Math.min(Math.max(s, min), max)),
// Improve performance: Keep object identify for a given hash of the value
// eslint-disable-next-line react-hooks/exhaustive-deps
[__cache_key__]
);
}
function useHeadingSize(size) {
const { fonts } = ui.useTheme().sanity, level = useLevel(), levelSize = react.useMemo(() => (isArray(size) ? size : [size]).map((v) => v - level + 2), [level, size]);
return useSize({ size: levelSize, min: 0, max: fonts.heading.sizes.length - 1 });
}
function useSpace(size) {
const { space } = ui.useTheme().sanity;
return useSize({ size, min: 0, max: space.length - 1 });
}
function H(props) {
const { size: sizeProp = 0, ...restProps } = props, level = useLevel();
return /* @__PURE__ */ jsxRuntime.jsx(
ui.Box,
{
marginTop: useSpace(level === 1 ? [1, 1, 2, 3] : [2, 2, 3, 4]),
marginBottom: useSpace([2, 2, 2, 3]),
children: /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { as: `h${level}`, ...restProps, size: useHeadingSize(sizeProp) })
}
);
}
function Level(props) {
const { children } = props, level = useLevel();
return /* @__PURE__ */ jsxRuntime.jsx(LevelContext.Provider, { value: level + 1, children });
}
function useTextSize(size) {
const { fonts } = ui.useTheme().sanity;
return useSize({ size, min: 0, max: fonts.text.sizes.length - 1 });
}
function P(props) {
const { size: sizeProp = 0, ...restProps } = props;
return /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { "data-ui": "P", marginTop: useSpace([-1, -1, -1]), children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { as: "p", ...restProps, size: useTextSize(sizeProp) }) });
}
function Size(props) {
const { delta, children } = props, size = react.useContext(SizeContext) + delta;
return /* @__PURE__ */ jsxRuntime.jsx(SizeContext.Provider, { value: size, children });
}
const TSDocContext = react.createContext(null);
function useTSDoc() {
const tsdoc = react.useContext(TSDocContext);
if (!tsdoc) throw new Error("TSDoc: missing context value");
return tsdoc;
}
function useExports() {
const { params, store: store2 } = useTSDoc(), [data, setData] = react.useState(null), [error, setError] = react.useState(null), [loading, setLoading] = react.useState(!1);
return react.useEffect(() => {
if (!params.packageName || !params.releaseVersion) {
setData(null);
return;
}
const queryParams = {
packageScope: params.packageScope,
packageName: params.packageName,
releaseVersion: params.releaseVersion
};
let cancelled = !1;
async function run() {
try {
setLoading(!0), setData(null);
const data2 = await store2.exports.get(queryParams);
cancelled || setData(data2);
} catch (err) {
err instanceof Error && !cancelled && setError(err);
} finally {
cancelled || setLoading(!1);
}
}
return run(), () => {
cancelled = !0;
};
}, [params.packageScope, params.packageName, params.releaseVersion, store2]), { data, error, loading };
}
function usePackages() {
const { store: store2 } = useTSDoc(), [data, setData] = react.useState(null), [error, setError] = react.useState(null), [loading, setLoading] = react.useState(!0);
return react.useEffect(() => {
let cancelled = !1;
async function run() {
try {
setData(null);
const data2 = await store2.packages.get();
cancelled || setData(data2);
} catch (err) {
err instanceof Error && !cancelled && setError(err);
} finally {
cancelled || setLoading(!1);
}
}
return run(), () => {
cancelled = !0;
};
}, [store2]), { data, error, loading };
}
const BoxSticky = react.memo(styledComponents.styled(ui.Box)`
position: sticky;
top: 0;
`);
function getGroupedMembers(members) {
const components2 = members.filter(
(mem) => (mem._type === "api.class" || mem._type === "api.function" || mem._type === "api.variable") && mem.isReactComponentType
), hooks = members.filter(
(mem) => mem._type === "api.function" && mem.isReactHook
), classes = members.filter(
(mem) => !components2.includes(mem) && mem._type === "api.class"
), enums = members.filter((mem) => mem._type === "api.enum"), functions = members.filter(
(mem) => !components2.includes(mem) && !hooks.includes(mem) && mem._type === "api.function"
), interfaces = members.filter((mem) => mem._type === "api.interface"), namespaces = members.filter((mem) => mem._type === "api.namespace"), typeAliases = members.filter((mem) => mem._type === "api.typeAlias"), variables = members.filter(
(mem) => !components2.includes(mem) && mem._type === "api.variable"
);
return {
classes,
enums,
functions,
interfaces,
namespaces,
reactComponents: components2,
reactHooks: hooks,
typeAliases,
variables
};
}
const UnformattedCode = styledComponents.styled.code(({ $deprecated }) => styledComponents.css`
&& {
background-color: transparent;
color: inherit;
text-decoration: ${$deprecated ? "line-through" : void 0};
}
`);
function TSDocMemberTitle(props) {
const { data } = props, isDeprecated = !!data.comment?.deprecated;
return "isReactComponentType" in data && data.isReactComponentType ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
/* @__PURE__ */ jsxRuntime.jsx(UnformattedCode, { children: "<" }),
/* @__PURE__ */ jsxRuntime.jsx(SyntaxText, { $deprecated: isDeprecated, $syntax: "className", children: data.name }),
/* @__PURE__ */ jsxRuntime.jsx(UnformattedCode, { $deprecated: isDeprecated, children: " />" })
] }) : data._type === "api.class" ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(SyntaxText, { $deprecated: isDeprecated, $syntax: "className", children: data.name }) }) : data._type === "api.enum" ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(SyntaxText, { $deprecated: isDeprecated, $syntax: "className", children: data.name }) }) : data._type === "api.function" ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
/* @__PURE__ */ jsxRuntime.jsx(SyntaxText, { $deprecated: isDeprecated, $syntax: "function", children: data.name }),
/* @__PURE__ */ jsxRuntime.jsx(UnformattedCode, { $deprecated: isDeprecated, children: "()" })
] }) : data._type === "api.interface" ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(SyntaxText, { $deprecated: isDeprecated, $syntax: "className", children: data.name }) }) : data._type === "api.namespace" ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(SyntaxText, { $deprecated: isDeprecated, $syntax: "className", children: data.name }) }) : data._type === "api.typeAlias" ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(SyntaxText, { $deprecated: isDeprecated, $syntax: "className", children: data.name }) }) : data._type === "api.variable" ? /* @__PURE__ */ jsxRuntime.jsx(UnformattedCode, { $deprecated: isDeprecated, children: data.name }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: "Uknown" });
}
function compilePath(params) {
const segments = [];
return params.packageName && (params.packageScope && segments.push(params.packageScope), segments.push(params.packageName), params.releaseVersion && params.exportPath && (params.exportPath !== "." && segments.push(params.exportPath.slice(2)), params.memberSlug && segments.push(params.memberSlug))), `/${segments.join("/")}`;
}
function useMemberLink(props) {
const { params } = props, { basePath, onPathChange } = useTSDoc(), path = params && compilePath(params), href = react.useMemo(() => `${basePath}${path || ""}`, [basePath, path]), onClick = react.useCallback(
(event) => {
path && (event.preventDefault(), onPathChange(path));
},
[onPathChange, path]
);
return { href, onClick };
}
const SyntaxTreeItem = react.memo(
styledComponents.styled(ui.TreeItem)(({ theme }) => {
const isThemeDark = theme.sanity.color.dark, activeBackground = color.blue[50].hex, focusBackground = theme.sanity.color.selectable.default.enabled.bg2, color$1 = theme.sanity.color.selectable.default.hovered.fg, selectedLight = isThemeDark ? "" : `&[data-selected] > [role='treeitem'] {
background-color: ${activeBackground} !important
}`;
return `
// solely on changing the "()" color
&:focus code,
& > a:focus code {
color: ${color$1} !important;
}
${selectedLight}
// change focus for api items trees
& > a:focus {
background-color: ${focusBackground} !important;
}
`;
})
);
function MemberLink(props) {
const { data, namespace } = props, { basePath, path } = useTSDoc(), fontSize = useSize(), params = react.useMemo(
() => ({
exportPath: data.export?.path || namespace?.export.path || ".",
memberName: data.name,
packageName: data.package.name,
packageScope: data.package.scope || null,
releaseVersion: data.release.version,
memberSlug: data.slug.current
}),
[data, namespace]
), linkProps = useMemberLink({ params }), tone = react.useMemo(() => {
if (data.releaseTag === "beta") return "caution";
if (data.releaseTag === "alpha") return "critical";
}, [data.releaseTag]), tag = react.useMemo(() => data.releaseTag === "beta" ? /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { children: /* @__PURE__ */ jsxRuntime.jsx(SyntaxText, { $syntax: "string", children: "@beta" }) }) : data.releaseTag === "alpha" ? /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { children: /* @__PURE__ */ jsxRuntime.jsx(SyntaxText, { $syntax: "builtin", children: "@alpha" }) }) : null, [data.releaseTag]), isSelected = `${basePath}${path}` === linkProps.href;
return /* @__PURE__ */ jsxRuntime.jsx(
SyntaxTreeItem,
{
...linkProps,
fontSize,
padding: 2,
selected: isSelected,
text: /* @__PURE__ */ jsxRuntime.jsxs(ui.Flex, { gap: 1, children: [
/* @__PURE__ */ jsxRuntime.jsx(ui.Box, { flex: 1, children: /* @__PURE__ */ jsxRuntime.jsx(TSDocMemberTitle, { data }) }),
tag
] }),
tone
}
);
}
const TreeItemFocus = react.memo(
styledComponents.styled(ui.TreeItem)(({ theme }) => `
&:focus > [data-ui='TreeItem__box'],
&:focus > [data-ui="TreeItem"] {
background-color: transparent !important;
& svg, & code, & [data-ui="Text"] {
color: ${theme.sanity.color.selectable.default.enabled.fg} !important;
}
}
`)
);
function GroupedMembersTree(props) {
const { exp, expandSubPackages } = props, { params } = useTSDoc(), fontSize = useSize();
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
exp.reactComponents.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
TreeItemFocus,
{
expanded: expandSubPackages || exp.reactComponents.some((m) => m.name === params.memberName),
fontSize,
padding: 2,
text: "Components",
weight: "semibold",
children: exp.reactComponents.map((member) => /* @__PURE__ */ jsxRuntime.jsx(MemberLink, { data: member }, member.name))
}
),
exp.reactHooks.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
TreeItemFocus,
{
expanded: expandSubPackages || exp.reactHooks.some((m) => m.name === params.memberName),
fontSize,
padding: 2,
text: "Hooks",
weight: "semibold",
children: exp.reactHooks.map((member) => /* @__PURE__ */ jsxRuntime.jsx(MemberLink, { data: member }, member.name))
}
),
exp.classes.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
TreeItemFocus,
{
expanded: expandSubPackages || exp.classes.some((m) => m.name === params.memberName),
fontSize,
padding: 2,
text: "Classes",
weight: "semibold",
children: exp.classes.map((member) => /* @__PURE__ */ jsxRuntime.jsx(MemberLink, { data: member }, member.name))
}
),
exp.functions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
TreeItemFocus,
{
expanded: expandSubPackages || exp.functions.some((m) => m.name === params.memberName),
fontSize,
padding: 2,
text: "Functions",
weight: "semibold",
children: exp.functions.map((member) => /* @__PURE__ */ jsxRuntime.jsx(MemberLink, { data: member }, member.name))
}
),
exp.variables.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
TreeItemFocus,
{
expanded: expandSubPackages || exp.variables.some((m) => m.name === params.memberName),
fontSize,
padding: 2,
text: "Variables",
weight: "semibold",
children: exp.variables.map((member) => /* @__PURE__ */ jsxRuntime.jsx(MemberLink, { data: member }, member.name))
}
),
exp.enums.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
TreeItemFocus,
{
expanded: expandSubPackages || exp.enums.some((m) => m.name === params.memberName),
fontSize,
padding: 2,
text: "Enumerations",
weight: "semibold",
children: exp.enums.map((member) => /* @__PURE__ */ jsxRuntime.jsx(MemberLink, { data: member }, member.name))
}
),
exp.interfaces.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
TreeItemFocus,
{
expanded: expandSubPackages || exp.interfaces.some((m) => m.name === params.memberName),
fontSize,
padding: 2,
text: "Interfaces",
weight: "semibold",
children: exp.interfaces.map((member) => /* @__PURE__ */ jsxRuntime.jsx(MemberLink, { data: member }, member.name))
}
),
exp.namespaces.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
TreeItemFocus,
{
expanded: expandSubPackages || exp.namespaces.some((m) => m.name === params.memberName),
fontSize,
padding: 2,
text: "Namespaces",
weight: "semibold",
children: exp.namespaces.map((member) => /* @__PURE__ */ jsxRuntime.jsx(MemberLink, { data: member }, member.name))
}
),
exp.typeAliases.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
TreeItemFocus,
{
expanded: expandSubPackages || exp.typeAliases.some((m) => m.name === params.memberName),
fontSize,
padding: 2,
text: "Type aliases",
weight: "semibold",
children: exp.typeAliases.map((member) => /* @__PURE__ */ jsxRuntime.jsx(MemberLink, { data: member }, member.name))
}
)
] });
}
const SyntaxMenuItem = react.memo(styledComponents.styled(ui.MenuItem)`
&:focus code,
& > a:focus code {
color: inherit !important;
}
& > a:focus {
background: transparent !important;
}
`);
function PackageMenuButton(props) {
const { currentPkg, packages } = props, { updateParams } = useTSDoc(), fontSize = useSize();
return /* @__PURE__ */ jsxRuntime.jsx(
ui.MenuButton,
{
button: /* @__PURE__ */ jsxRuntime.jsx(
ui.Button,
{
fontSize,
iconRight: icons.SelectIcon,
mode: "bleed",
padding: 2,
text: /* @__PURE__ */ jsxRuntime.jsx(SyntaxText, { children: [currentPkg.scope, currentPkg.name].filter(Boolean).join("/") })
}
),
id: "package-menu",
menu: /* @__PURE__ */ jsxRuntime.jsx(ui.Menu, { children: packages.map((p) => /* @__PURE__ */ jsxRuntime.jsx(
SyntaxMenuItem,
{
fontSize,
onClick: () => {
updateParams((prev) => ({
...prev,
exportPath: null,
packageScope: p.scope || null,
packageName: p.name,
releaseVersion: p.latestRelease.version,
memberName: null
}));
},
padding: 2,
text: /* @__PURE__ */ jsxRuntime.jsx(SyntaxText, { children: [p.scope, p.name].filter(Boolean).join("/") })
},
p.name
)) }),
popover: {
constrainSize: !0,
matchReferenceWidth: !0,
portal: !0
}
}
);
}
function PackageTreeItem(props) {
const { pkg, ...restProps } = props, { params, updateParams } = useTSDoc(), href = compilePath({
...params,
packageScope: pkg.scope || null,
packageName: pkg.name,
releaseVersion: pkg.latestRelease.version
}), handleClick = react.useCallback(
(event) => {
event.preventDefault(), updateParams((prev) => ({
...prev,
packageScope: pkg.scope || null,
packageName: pkg.name,
releaseVersion: pkg.latestRelease.version
}));
},
[pkg, updateParams]
);
return /* @__PURE__ */ jsxRuntime.jsx(
SyntaxTreeItem,
{
...restProps,
href,
onClick: handleClick,
text: /* @__PURE__ */ jsxRuntime.jsx(SyntaxText, { children: [pkg.scope, pkg.name].filter(Boolean).join("/") })
}
);
}
function ReleaseMenuButton(props) {
const { currentPkg, currentRelease } = props, { updateParams } = useTSDoc(), fontSize = useSize();
return /* @__PURE__ */ jsxRuntime.jsx(
ui.MenuButton,
{
button: /* @__PURE__ */ jsxRuntime.jsx(
ui.Button,
{
fontSize,
iconRight: icons.SelectIcon,
mode: "bleed",
padding: 2,
text: /* @__PURE__ */ jsxRuntime.jsx(SyntaxText, { $syntax: "className", children: currentRelease.version })
}
),
id: "version-menu",
menu: /* @__PURE__ */ jsxRuntime.jsx(ui.Menu, { children: currentPkg.releases.map((r) => /* @__PURE__ */ jsxRuntime.jsx(
SyntaxMenuItem,
{
fontSize,
onClick: () => updateParams((prev) => ({ ...prev, releaseVersion: r.version })),
padding: 2,
selected: currentRelease.version === r.version,
text: /* @__PURE__ */ jsxRuntime.jsx(SyntaxText, { $syntax: "className", children: r.version })
},
r.version
)) }),
popover: {
constrainSize: !0,
matchReferenceWidth: !0,
portal: !0
}
}
);
}
const SearchWrapper = react.memo(styledComponents.styled(ui.Box)`
background-color: var(--card-bg-color);
`), TreeNav = react.memo(styledComponents.styled(ui.Tree)`
overflow: auto;
height: 100vh;
`), DEBOUNCE_MS = 150;
function useSymbolSearch(props) {
const { query } = props, { params, store: store2 } = useTSDoc(), [data, setData] = react.useState([]), [error, setError] = react.useState(null), [loading, setLoading] = react.useState(!1), [debouncedQuery, setDebouncedQuery] = react.useState(query), timeoutRef = react.useRef(null);
return react.useEffect(() => {
let cancelled = !1;
async function run() {
if (!debouncedQuery || !params.packageName) {
setData([]);
return;
}
try {
setLoading(!0);
const data2 = await store2.symbol.search({
query: debouncedQuery,
packageName: params.packageName,
packageScope: params.packageScope
});
cancelled || (setLoading(!1), setData(data2));
} catch (err) {
err instanceof Error && !cancelled && setError(err);
} finally {
cancelled || setLoading(!1);
}
setLoading(!1);
}
return run(), () => {
cancelled = !0;
};
}, [debouncedQuery, params.packageName, params.packageScope, store2]), react.useEffect(() => {
timeoutRef.current && clearTimeout(timeoutRef.current), timeoutRef.current = setTimeout(() => {
setDebouncedQuery(query), timeoutRef.current = null;
}, DEBOUNCE_MS);
}, [query]), { data, error, loading };
}
function TSDocSearch() {
const [query, setQuery] = react.useState(null), { data, loading } = useSymbolSearch({ query }), [value, setValue] = react.useState(), autocompletePopoverReferenceElementRef = react.useRef(null), options = react.useMemo(
() => data.map((result) => ({ value: result._id, symbol: result })),
[data]
), filterOption = react.useCallback(() => !0, []), handleSelect = react.useCallback((value2) => {
setValue(value2), setTimeout(() => setValue(""), 0);
}, []), renderOption = react.useCallback((option) => /* @__PURE__ */ jsxRuntime.jsx(SearchOption, { symbol: option.symbol }), []), renderValue = react.useCallback(() => "", []), renderPopover = react.useCallback(
({ content, hidden }) => query ? /* @__PURE__ */ jsxRuntime.jsx(
ui.Popover,
{
arrow: !1,
open: !loading && !hidden,
overflow: "auto",
placement: "bottom-start",
matchReferenceWidth: !0,
radius: 0,
content: content || /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { padding: 4, children: /* @__PURE__ */ jsxRuntime.jsx(ui.Flex, { align: "center", height: "fill", justify: "center", children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Text, { align: "center", muted: !0, children: [
"No results for ",
/* @__PURE__ */ jsxRuntime.jsxs("strong", { children: [
"\u201C",
query,
"\u201D"
] })
] }) }) }),
referenceElement: autocompletePopoverReferenceElementRef.current
}
) : null,
[loading, query]
);
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: autocompletePopoverReferenceElementRef, children: /* @__PURE__ */ jsxRuntime.jsx(
ui.Autocomplete,
{
filterOption,
icon: icons.SearchIcon,
id: "tsdoc-search",
loading,
onQueryChange: setQuery,
onSelect: handleSelect,
options,
padding: 3,
placeholder: "Search for API members",
radius: 2,
renderOption,
renderValue,
renderPopover,
value
}
) });
}
const SearchOption = react.forwardRef(function(props, ref) {
const { symbol, ...restProps } = props, latestMember = symbol.members[0], params = react.useMemo(
() => ({
exportPath: latestMember ? latestMember.exportPath : ".",
packageName: symbol.package.name,
packageScope: symbol.package.scope || null,
memberName: symbol.name,
releaseVersion: latestMember ? latestMember.releaseVersion : "0.0.0",
memberSlug: latestMember ? latestMember.slug.current : ""
}),
[latestMember, symbol]
), link = useMemberLink({ params });
return /* @__PURE__ */ jsxRuntime.jsx(
ui.Card,
{
...restProps,
as: "a",
href: link.href,
onClick: link.onClick,
padding: 3,
radius: 2,
ref,
children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Stack, { space: 3, children: [
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: 1, weight: "medium", children: /* @__PURE__ */ jsxRuntime.jsx(UnformattedCode, { children: symbol.name }) }),
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { muted: !0, size: 1, children: /* @__PURE__ */ jsxRuntime.jsx(UnformattedCode, { children: [
[
symbol.package.scope,
symbol.package.name,
latestMember?.exportPath === "." ? void 0 : latestMember?.exportPath.replace("./", "/")
].filter(Boolean)
] }) })
] })
}
);
});
function TSDocNav(props) {
return /* @__PURE__ */ jsxRuntime.jsx(Size, { delta: -1, children: /* @__PURE__ */ jsxRuntime.jsx(TSDocNavView, { ...props }) });
}
function TSDocNavView(props) {
const { params } = useTSDoc(), _exports = useExports(), packages = usePackages(), fontSize = useSize(), { showVersionMenu, expandPackages, expandSubPackages } = props, currentPkg = packages.data?.find(
(p) => p.scope === params.packageScope && p.name === params.packageName
), currentRelease = currentPkg?.releases.length ? currentPkg?.releases.find(
(r) => params.releaseVersion ? r.version === params.releaseVersion : r.version == currentPkg.latestRelease.version
) : currentPkg?.latestRelease, currentVersion = currentRelease?.version, currentExportName = currentPkg && params.exportPath && [currentPkg.scope, currentPkg.name, params.exportPath].filter(Boolean).join("/"), exports2 = react.useMemo(() => {
if (!_exports.data) return [];
const items = [];
for (const exp of _exports.data) {
if (exp.members.length === 0)
continue;
const { members, name, package: pkg, ...restExp } = exp, item = items.find(
(e) => e.packageScope === pkg.scope && e.packageName === pkg.name && e.name === exp.name
), data = {
name,
package: pkg,
...restExp,
...getGroupedMembers(members)
};
item ? item.versions.push(data) : items.push({
packageScope: pkg.scope,
packageName: pkg.name,
name,
versions: [data]
});
}
return items || [];
}, [_exports.data]);
return /* @__PURE__ */ jsxRuntime.jsx(BoxSticky, { paddingTop: 3, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Flex, { direction: "column", height: "fill", overflow: "hidden", children: [
!currentPkg && !packages.loading && /* @__PURE__ */ jsxRuntime.jsx(ui.Card, { overflow: "auto", padding: 3, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Stack, { space: 1, children: [
/* @__PURE__ */ jsxRuntime.jsx(ui.Box, { padding: 2, children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: fontSize, weight: "bold", children: "Choose package" }) }),
/* @__PURE__ */ jsxRuntime.jsx(ui.Tree, { children: packages.data?.map((pkg) => /* @__PURE__ */ jsxRuntime.jsx(PackageTreeItem, { pkg, fontSize, padding: 2 }, pkg.name)) })
] }) }),
currentPkg && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
showVersionMenu && /* @__PURE__ */ jsxRuntime.jsx(ui.Layer, { style: { flex: "none", position: "sticky", top: 0 }, children: /* @__PURE__ */ jsxRuntime.jsx(ui.Card, { padding: [2, 2, 3], shadow: 1, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Flex, { gap: 1, children: [
packages.data && /* @__PURE__ */ jsxRuntime.jsx(ui.Stack, { flex: 1, children: /* @__PURE__ */ jsxRuntime.jsx(PackageMenuButton, { currentPkg, packages: packages.data }) }),
currentRelease && /* @__PURE__ */ jsxRuntime.jsx(ui.Stack, { flex: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
ReleaseMenuButton,
{
currentPkg,
currentRelease
}
) })
] }) }) }),
_exports.loading && /* @__PURE__ */ jsxRuntime.jsx(ui.Flex, { align: "center", height: "fill", justify: "center", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Spinner, { muted: !0 }) }),
!_exports.loading && /* @__PURE__ */ jsxRuntime.jsxs(ui.Stack, { flex: 1, overflow: "auto", children: [
currentPkg && /* @__PURE__ */ jsxRuntime.jsx(SearchWrapper, { padding: 1, children: /* @__PURE__ */ jsxRuntime.jsx(TSDocSearch, {}) }),
exports2.length === 1 ? /* @__PURE__ */ jsxRuntime.jsx(SingleExportTree, { currentVersion, exp: exports2[0] }) : /* @__PURE__ */ jsxRuntime.jsx(
MultiExportTree,
{
currentExportName,
currentVersion,
exports: exports2,
fontSize,
expandPackages,
expandSubPackages
}
)
] })
] })
] }) });
}
function SingleExportTree(props) {
const { currentVersion, exp } = props, versionedExports = react.useMemo(
() => exp.versions.filter((d) => d.release.version === currentVersion),
[currentVersion, exp]
);
return /* @__PURE__ */ jsxRuntime.jsx(TreeNav, { children: versionedExports.map((exp2) => /* @__PURE__ */ jsxRuntime.jsx(GroupedMembersTree, { exp: exp2 }, exp2.release.version)) });
}
function MultiExportTree(props) {
const { currentExportName, currentVersion, fontSize, exports: exports2, expandPackages, expandSubPackages } = props, versionedExports = react.useMemo(
() => exports2.filter((data) => data.versions.some((v) => v.release.version === currentVersion)),
[currentVersion, exports2]
);
return /* @__PURE__ */ jsxRuntime.jsx(TreeNav, { children: versionedExports.map((data) => /* @__PURE__ */ jsxRuntime.jsx(
TreeItemFocus,
{
expanded: expandPackages || data.name === currentExportName,
tabIndex: 0,
fontSize,
padding: 2,
text: /* @__PURE__ */ jsxRuntime.jsx(SyntaxText, { children: data.name }),
weight: "semibold",
children: data.versions.filter((d) => d.release.version === currentVersion).map((exp) => /* @__PURE__ */ jsxRuntime.jsx(
GroupedMembersTree,
{
exp,
expandSubPackages
},
exp.release.version
))
},
data.name
)) });
}
const CommentBox = styledComponents.styled(ui.Box)`
/* border-top: 1px solid var(--card-border-color); */
& > *:first-child {
margin-top: 0 !important;
}
& > *:last-child {
margin-bottom: 0 !important;
}
`, CODE_LANGUAGES = {
sh: "bash",
tsx: "typescript",
ts: "typescript"
};
function PortableText(props) {
const { blocks } = props;
return /* @__PURE__ */ jsxRuntime.jsx(react$1.PortableText, { components, value: blocks });
}
const components = {
block: {
blockquote: BlockquoteBlock,
h1: H1Block,
h2: H2Block,
h3: H3Block,
h4: H4Block,
h5: H5Block,
h6: H6Block,
normal: NormalBlock
},
types: {
code: CodeBlock
},
marks: {
link: Link
}
};
function CodeBlock(props) {
const { code, language = "typescript" } = props.value;
return /* @__PURE__ */ jsxRuntime.jsx(
ui.Card,
{
border: !0,
marginY: useSpace([1, 1, 2, 3]),
overflow: "auto",
padding: 4,
radius: 3,
tone: "inherit",
children: /* @__PURE__ */ jsxRuntime.jsx(
ui.Code,
{
language: CODE_LANGUAGES[language] || language || "typescript",
size: useTextSize([-1, -1, 0]),
children: code
}
)
}
);
}
function H1Block({ children }) {
return /* @__PURE__ */ jsxRuntime.jsx(H, { size: [-1, 0, 1, 2], children });
}
function H2Block({ children }) {
return /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(H, { size: [-1, 0, 1, 2], children }) });
}
function H3Block({ children }) {
return /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(H, { size: [-1, 0, 1, 2], children }) }) });
}
function H4Block({ children }) {
return /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(H, { size: [-1, 0, 1, 2], children }) }) }) });
}
function H5Block({ children }) {
return /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(H, { size: [-1, 0, 1, 2], children }) }) }) }) });
}
function H6Block({ children }) {
return /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(H, { size: [-1, 0, 1, 2], children }) }) }) }) }) });
}
function BlockquoteBlock({ children }) {
return /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { as: "blockquote", children: /* @__PURE__ */ jsxRuntime.jsx(P, { muted: !0, size: [-1, 0, 1], children }) });
}
function NormalBlock({ children }) {
return /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { marginBottom: 4, children: /* @__PURE__ */ jsxRuntime.jsx(P, { muted: !0, children }) });
}
function isValidUrl(url) {
try {
return !!new URL(url);
} catch {
return !1;
}
}
function getInternalHref({
url,
packageName,
exportPath
}) {
const urlSegments = url.split("/");
return urlSegments.length === 1 ? `/${packageName}${exportPath?.replace(".", "")}/${url}` : `/${packageName}/${urlSegments.join("/")}`;
}
function Link(props) {
const { basePath, onPathChange, params } = useTSDoc(), { value, text } = props, { packageName, exportPath } = params, url = value?.href, isExternalUrl = isValidUrl(url), path = !isExternalUrl && getInternalHref({ url, packageName, exportPath }), href = isExternalUrl ? url : `${basePath}${path}`, handleClick = react.useCallback(
(e) => {
isExternalUrl || !path || (e.preventDefault(), onPathChange(path));
},
[isExternalUrl, onPathChange, path]
);
return /* @__PURE__ */ jsxRuntime.jsx("a", { href, onClick: handleClick, children: text });
}
function CommentDeprecatedCallout(props) {
const { data } = props, { deprecated } = data, textSize = useTextSize([0, 0, 1]);
return deprecated?.content ? /* @__PURE__ */ jsxRuntime.jsx(ui.Card, { padding: 4, radius: 3, shadow: 1, tone: "critical", children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Flex, { align: "flex-start", children: [
/* @__PURE__ */ jsxRuntime.jsx(ui.Box, { flex: "none", marginRight: 3, children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: textSize, children: /* @__PURE__ */ jsxRuntime.jsx(icons.WarningOutlineIcon, {}) }) }),
/* @__PURE__ */ jsxRuntime.jsx(ui.Stack, { flex: 1, space: 2, children: /* @__PURE__ */ jsxRuntime.jsxs(CommentBox, { children: [
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: textSize, weight: "semibold", children: "Deprecated" }),
/* @__PURE__ */ jsxRuntime.jsx(Size, { delta: -1, children: /* @__PURE__ */ jsxRuntime.jsx(PortableText, { blocks: deprecated.content }) })
] }) })
] }) }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
}
function CommentExampleBlocks(props) {
const { data } = props, { exampleBlocks } = data;
if (!exampleBlocks || exampleBlocks.length === 0) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
const showPerExampleHeader = exampleBlocks.length > 1;
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
/* @__PURE__ */ jsxRuntime.jsx(H, { size: [-1, 0, 1, 2], children: "Examples" }),
exampleBlocks.map((exampleBlock, idx) => /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(CommentExampleBlock, { data: exampleBlock, index: idx, showHeader: showPerExampleHeader }) }, exampleBlock._key))
] });
}
function CommentExampleBlock(props) {
const { data, index, showHeader } = props;
return data.content ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
showHeader && /* @__PURE__ */ jsxRuntime.jsxs(H, { size: [-1, 0, 1, 2], children: [
"Example #",
index + 1
] }),
/* @__PURE__ */ jsxRuntime.jsx(PortableText, { blocks: data.content })
] }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
}
function CommentRemarks(props) {
const { data } = props, { remarks } = data;
return remarks?.content ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
/* @__PURE__ */ jsxRuntime.jsx(H, { size: [-1, 0, 1, 2], children: "Remarks" }),
/* @__PURE__ */ jsxRuntime.jsx(PortableText, { blocks: remarks.content })
] }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
}
function CommentReturnType(props) {
const { returns } = props.data;
return returns?.content ? /* @__PURE__ */ jsxRuntime.jsx(CommentBox, { children: /* @__PURE__ */ jsxRuntime.jsx(PortableText, { blocks: returns.content }) }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
}
function CommentSummary(props) {
const { summary } = props.data;
return summary ? /* @__PURE__ */ jsxRuntime.jsx(PortableText, { blocks: summary }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
}
function _compileTypeParameters(typeParameters) {
return !typeParameters || typeParameters.length === 0 ? "" : `<${typeParameters.map((p) => {
let code = `${p.name}`;
return p.constraintType?.length && (code += ` extends ${p.constraintType.map((t) => t.text).join("")}`), p.defaultType?.length && (code += ` = ${p.defaultType.map((t) => t.text).join("")}`), code;
}).join(", ")}>`;
}
function _compileClassDefinition(data) {
let code = `class ${data.name}${_compileTypeParameters(data.typeParameters)} `;
code += "{";
for (const m of data.members)
m._type === "api.constructor" ? code += `
constructor()` : m._type === "api.property" ? code += `
${m.name}${m.isOptional ? "?" : ""}: ${m.type.map((t) => t.text).join("")}` : m._type === "api.method" && (code += `
${m.name}${m.isOptional ? "?" : ""}(): ${m.returnType.map((t) => t.text).join("")}`);
return code += `
}`, code;
}
function _compileFunctionDefinition(data) {
let code = `function ${data.name}${_compileTypeParameters(data.typeParameters)}`;
const parameters = data.parameters.map((p) => `${p.name}: ${p.type.map((t) => t.text).join("")}`);
return parameters.length ? code += `(
${parameters.join(`,
`)}
): ` : code += "(): ", code += data.returnType.map((t) => t.text).join(""), code;
}
function _compileTokens(tokens) {
return tokens.map((t) => t.text).join("").replace(/History_2/g, "History").replace(/React_2/g, "React");
}
function _compileInterfaceDefinition(data) {
let code = `interface ${data.name}${_compileTypeParameters(data.typeParameters)}`;
if (data.extends.length && (data.extends.length === 1 ? code += ` extends ${data.extends.map((e) => _compileTokens(e.type)).join(", ")}` : code += `
extends ${data.extends.map((e) => _compileTokens(e.type)).join(`,
`)}`), data.members.length) {
code += " {";
for (const m of data.members)
m._type === "api.propertySignature" ? code += `
${m.name}${m.isOptional ? "?" : ""}: ${_compileTokens(m.type)}` : m._type === "api.callSignature" ? code += `
(${m.parameters.map((p) => `${p.name}: ${_compileTokens(p.type)}`).join(", ")}) => ${_compileTokens(m.returnType)}` : m._type === "api.indexSignature" ? (code += `
[`, code += m.parameters.map((p) => `${p.name}: ${_compileTokens(p.type)}`), code += `]: ${_compileTokens(m.returnType)}`) : code += `
// @todo: _type=${m._type}`;
code += `
}`;
} else
code += " {}";
return code;
}
function _compileTypeAliasDefinition(data) {
let code = `type ${data.name}${_compileTypeParameters(data.typeParameters)} = `;
return code += data.type?.map((t) => t.text).join(""), code;
}
function _compileVariableDefinition(data) {
let code = `const ${data.name}: `;
return code += data.type.map((t) => t.text).join(""), code;
}
function ClassTooltipContent(props) {
const { data } = props;
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
/* @__PURE__ */ jsxRuntime.jsx(ui.Box, { padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(
ui.Code,
{
language: "typescript",
size: useTextSize([-1, 0, 1]),
children: `import {${data.name}} from '${data.export.name}'`
}
) }),
/* @__PURE__ */ jsxRuntime.jsx(ui.Card, { borderTop: !0, padding: 3, overflow: "auto", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Code, { language: "typescript", size: useTextSize([-1, 0, 1]), children: _compileClassDefinition(data) }) }),
data.comment?.summary && /* @__PURE__ */ jsxRuntime.jsx(CommentBox, { padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(CommentSummary, { data: data.comment }) })
] });
}
function EnumTooltipContent(props) {
const { data } = props;
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
/* @__PURE__ */ jsxRuntime.jsx(ui.Box, { padding: 3, style: { borderBottom: "1px solid var(--card-border-color)" }, children: /* @__PURE__ */ jsxRuntime.jsx(
ui.Code,
{
language: "typescript",
size: useTextSize([-1, 0, 1]),
children: `import {${data.name}} from '${data.export.name}'`
}
) }),
/* @__PURE__ */ jsxRuntime.jsx(ui.Box, { padding: 3, overflow: "auto", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Code, { language: "typescript", size: useTextSize([-1, 0, 1]) }) }),
data.comment?.summary && /* @__PURE__ */ jsxRuntime.jsx(CommentBox, { padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(CommentSummary, { data: data.comment }) })
] });
}
function _getMembers(data) {
if (!("members" in data))
return [];
let mems = data.members;
if ("extends" in data)
for (const ext of data.extends)
for (const tok of ext.type) {
const member = tok.member;
member && "members" in member && (mems = mems.concat(
member.members.map((mem) => ({
...mem,
inheritedFrom: { name: member.name, slug: member.name }
}))
));
}
return mems.sort((a, b) => {
const aName = "name" in a ? a.name : "", bName = "name" in b ? b.name : "";
return aName < bName ? -1 : aName > bName ? 1 : 0;
}), mems;
}
function FunctionTooltipContent(props) {
const { data } = props, { propsType } = data, propsTypeMembers = react.useMemo(() => propsType && _getMembers(propsType), [propsType]), propsTypeLinkParams = react.useMemo(
() => propsType && {
exportPath: propsType.export?.path,
packageName: propsType.package?.name,
packageScope: propsType.package?.scope || null,
memberName: propsType.name,
releaseVersion: propsType.release?.version,
memberSlug: propsType.slug.current
},
[propsType]
), propsTypeLink = useMemberLink({
params: propsTypeLinkParams || null
});
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
/* @__PURE__ */ jsxRuntime.jsx(ui.Box, { overflow: "auto", padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(
ui.Code,
{
language: "typescript",
size: useTextSize([-1, 0, 1]),
children: `import {${data.name}} from '${data.export.name}'`
}
) }),
/* @__PURE__ */ jsxRuntime.jsx(ui.Box, { padding: 3, overflow: "auto", style: { borderTop: "1px solid var(--card-border-color)" }, children: /* @__PURE__ */ jsxRuntime.jsx(ui.Code, { language: "typescript", size: useTextSize([-1, 0, 1]), children: _compileFunctionDefinition(data) }) }),
propsType && propsTypeMembers && propsTypeMembers.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(CommentBox, { padding: 3, children: [
/* @__PURE__ */ jsxRuntime.jsx(H, { size: [-1, 0, 1, 2], children: "Props" }),
/* @__PURE__ */ jsxRuntime.jsxs(P, { size: [-1, 0, 1], children: [
"Defined by the",
" ",
/* @__PURE__ */ jsxRuntime.jsx("code", { children: /* @__PURE__ */ jsxRuntime.jsx("a", { href: propsTypeLink.href, onClick: propsTypeLink?.onClick, children: propsType.name }) }),
" ",
"interface."
] }),
propsTypeMembers.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Members, { data: propsTypeMembers, member: data })
] }),
data.comment?.summary && /* @__PURE__ */ jsxRuntime.jsx(CommentBox, { padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(CommentSummary, { data: data.comment }) })
] });
}
function InterfaceTooltipContent(props) {
const { data } = props;
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
/* @__PURE__ */ jsxRuntime.jsx(ui.Box, { padding: 3, style: { borderBottom: "1px solid var(--card-border-color)" }, children: /* @__PURE__ */ jsxRuntime.jsx(
ui.Code,
{
language: "typescript",
size: useTextSize([-1, 0, 1]),
children: `import {${data.name}} from '${data.export.name}'`
}
) }),
/* @__PURE__ */ jsxRuntime.jsx(ui.Box, { padding: 3, overflow: "auto", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Code, { language: "typescript", size: useTextSize([-1, 0, 1]), children: _compileInterfaceDefinition(data) }) }),
data.comment?.summary && /* @__PURE__ */ jsxRuntime.jsx(CommentBox, { padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(CommentSummary, { data: data.comment }) })
] });
}
function TypeAliasTooltipContent(props) {
const { data } = props;
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
/* @__PURE__ */ jsxRuntime.jsx(ui.Box, { padding: 3, style: { borderBottom: "1px solid var(--card-border-color)" }, children: /* @__PURE__ */ jsxRuntime.jsx(
ui.Code,
{
language: "typescript",
size: useTextSize([-1, 0, 1]),
children: `import {${data.name}} from '${data.export.name}'`
}
) }),
/* @__PURE__ */ jsxRuntime.jsx(ui.Box, { padding: 3, overflow: "auto", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Code, { language: "typescript", size: useTextSize([-1, 0, 1]), children: _compileTypeAliasDefinition(data) }) }),
data.comment?.summary && /* @__PURE__ */ jsxRuntime.jsx(CommentBox, { padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(CommentSummary, { data: data.comment }) })
] });
}
function VariableTooltipContent(props) {
const { data } = props;
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
/* @__PURE__ */ jsxRuntime.jsx(ui.Box, { padding: 3, style: { borderBottom: "1px solid var(--card-border-color)" }, children: /* @__PURE__ */ jsxRuntime.jsx(
ui.Code,
{
language: "typescript",
size: useTextSize([-1, 0, 1]),
children: `import {${data.name}} from '${data.export.name}'`
}
) }),
/* @__PURE__ */ jsxRuntime.jsx(ui.Box, { padding: 3, overflow: "auto", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Code, { language: "typescript", size: useTextSize([-1, 0, 1]), children: _compileVariableDefinition(data) }) }),
data.comment?.summary && /* @__PURE__ */ jsxRuntime.jsx(CommentBox, { padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(CommentSummary, { data: data.comment }) })
] });
}
function ReferenceTooltip(props) {
const { children, member } = props;
return /* @__PURE__ */ jsxRuntime.jsx(
ui.Tooltip,
{
content: /* @__PURE__ */ jsxRuntime.jsx(Size, { delta: -1, children: /* @__PURE__ */ jsxRuntime.jsx(Level, { children: /* @__PURE__ */ jsxRuntime.jsx(ReferenceTooltipContent, { data: member }) }) }),
placement: "top",
portal: !0,
children
}
);
}
function ReferenceTooltipContent(props) {
const { data } = props, textSize = useTextSize([-1, 0, 1]);
return data._type === "api.class" ? /* @__PURE__ */ jsxRuntime.jsx(ClassTooltipContent, { data }) : data._type === "api.enum" ? /* @__PURE__ */ jsxRuntime.jsx(EnumTooltipContent, { data }) : data._type === "api.function" ? /* @__PURE__ */ jsxRuntime.jsx(FunctionTooltipContent, { data }) : data._type === "api.interface" ? /* @__PURE__ */ jsxRuntime.jsx(InterfaceTooltipContent, { data }) : data._type === "api.typeAlias" ? /* @__PURE__ */ jsxRuntime.jsx(TypeAliasTooltipContent, { data }) : data._type === "api.variable" ? /* @__PURE__ */ jsxRuntime.jsx(VariableTooltipContent, { data }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Box, { padding: 3, children: /* @__PURE__ */ jsxRuntime.jsxs(u