@clarify-labs/renderer 0.9.4 → 0.10.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/output/{ClarifyShell-D2P0iZ_m.js → ClarifyShell-1LuBliwt.js} +124 -40
- package/output/ClarifyShell-1LuBliwt.js.map +1 -0
- package/output/{ClarifyShell-7r92MZg9.cjs → ClarifyShell-C6li72Ce.cjs} +138 -54
- package/output/ClarifyShell-C6li72Ce.cjs.map +1 -0
- package/output/MermaidViewer-B6-BMCJG.cjs +101 -0
- package/output/MermaidViewer-B6-BMCJG.cjs.map +1 -0
- package/output/MermaidViewer-dXsomvM7.js +98 -0
- package/output/MermaidViewer-dXsomvM7.js.map +1 -0
- package/output/{OpenApiOperation-Dhlz3JSx.js → OpenApiOperation-CqNM-no4.js} +274 -206
- package/output/OpenApiOperation-CqNM-no4.js.map +1 -0
- package/output/{OpenApiOperation-CyyPlZL6.cjs → OpenApiOperation-DK46w2dq.cjs} +305 -225
- package/output/OpenApiOperation-DK46w2dq.cjs.map +1 -0
- package/output/{PageActions-CTn2XkPg.cjs → PageActions-BjB6PYmL.cjs} +76 -735
- package/output/PageActions-BjB6PYmL.cjs.map +1 -0
- package/output/{PageActions-D0PA8Zv5.js → PageActions-D7K9LDGf.js} +67 -678
- package/output/PageActions-D7K9LDGf.js.map +1 -0
- package/output/SearchDialog-CIPvXMT3.cjs +414 -0
- package/output/SearchDialog-CIPvXMT3.cjs.map +1 -0
- package/output/SearchDialog-CxYLjRi5.js +411 -0
- package/output/SearchDialog-CxYLjRi5.js.map +1 -0
- package/output/app/AppShell.d.ts +2 -2
- package/output/app/SectionHashSync.d.ts +6 -0
- package/output/client.cjs +3 -3
- package/output/client.js +3 -3
- package/output/components/MermaidViewer.d.ts +7 -0
- package/output/context.d.ts +1 -1
- package/output/core/context.d.ts +3 -4
- package/output/core/i18n.d.ts +1 -1
- package/output/core/index.d.ts +1 -1
- package/output/core/types.d.ts +36 -19
- package/output/i18n-DnqZHFT7.js +247 -0
- package/output/i18n-DnqZHFT7.js.map +1 -0
- package/output/i18n-b4iTLeia.cjs +294 -0
- package/output/i18n-b4iTLeia.cjs.map +1 -0
- package/output/index.cjs +91 -94
- package/output/index.cjs.map +1 -1
- package/output/index.d.ts +5 -5
- package/output/index.js +83 -86
- package/output/index.js.map +1 -1
- package/output/markdown.cjs +1 -1
- package/output/openapi/components/EndpointSections.d.ts +3 -1
- package/output/openapi/components/ExamplePanels.d.ts +3 -1
- package/output/openapi/components/OpenApiOperation.d.ts +3 -1
- package/output/openapi/components/OpenApiOperation.state.d.ts +3 -3
- package/output/openapi/components/SchemaProperties.d.ts +1 -0
- package/output/openapi/components/helpers.d.ts +2 -2
- package/output/openapi/entry.d.ts +0 -1
- package/output/openapi/lib/helpers.d.ts +5 -3
- package/output/openapi/lib/request-code.d.ts +2 -1
- package/output/openapi/lib/spec-path.d.ts +6 -1
- package/output/openapi/lib/utils.d.ts +10 -4
- package/output/preview.cjs +7 -5
- package/output/preview.cjs.map +1 -1
- package/output/preview.js +5 -3
- package/output/preview.js.map +1 -1
- package/output/remark-Dd2WU50s.js.map +1 -1
- package/output/{remark-Dv3owbSH.cjs → remark-zSQT0MBv.cjs} +3 -3
- package/output/{remark-Dv3owbSH.cjs.map → remark-zSQT0MBv.cjs.map} +1 -1
- package/output/{render-CwSsfrs7.js → render-DKj24Jqw.js} +15 -8
- package/output/render-DKj24Jqw.js.map +1 -0
- package/output/{render-DXDSIfZ8.cjs → render-Di5B6Zc0.cjs} +15 -8
- package/output/render-Di5B6Zc0.cjs.map +1 -0
- package/output/renderer.css +55 -1
- package/output/runtime/ClarifyShell.d.ts +5 -6
- package/output/server.cjs +4 -4
- package/output/server.cjs.map +1 -1
- package/output/server.js +4 -4
- package/output/server.js.map +1 -1
- package/output/shell/Navigation.d.ts +1 -0
- package/output/shell/search/SearchDialog.d.ts +1 -1
- package/output/slots/RuntimeSlot.d.ts +7 -7
- package/output/slots/context.d.ts +5 -5
- package/output/slots/index.d.ts +2 -2
- package/output/slots/types.d.ts +1 -1
- package/output/utils/path.d.ts +1 -1
- package/package.json +10 -10
- package/output/ClarifyShell-7r92MZg9.cjs.map +0 -1
- package/output/ClarifyShell-D2P0iZ_m.js.map +0 -1
- package/output/OpenApiOperation-CyyPlZL6.cjs.map +0 -1
- package/output/OpenApiOperation-Dhlz3JSx.js.map +0 -1
- package/output/PageActions-CTn2XkPg.cjs.map +0 -1
- package/output/PageActions-D0PA8Zv5.js.map +0 -1
- package/output/render-CwSsfrs7.js.map +0 -1
- package/output/render-DXDSIfZ8.cjs.map +0 -1
- /package/output/{chunk-DakpK96I.cjs → rolldown-runtime-DakpK96I.cjs} +0 -0
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
import { t as useBuiltInText } from "./i18n-DnqZHFT7.js";
|
|
2
|
+
import { T as prefixHref } from "./PageActions-D7K9LDGf.js";
|
|
3
|
+
import clsx from "clsx";
|
|
4
|
+
import { Fragment, forwardRef, useEffect, useId, useMemo, useRef, useState } from "react";
|
|
5
|
+
import { useLocation, useNavigate } from "react-router-dom";
|
|
6
|
+
import { Dialog, DialogBackdrop, DialogPanel } from "@headlessui/react";
|
|
7
|
+
import { LoaderCircle, Search, SearchX } from "lucide-react";
|
|
8
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
//#region source/shell/search/items.ts
|
|
10
|
+
function routeGroupTitles(navigation) {
|
|
11
|
+
const titles = /* @__PURE__ */ new Map();
|
|
12
|
+
for (const node of navigation) if (node.children?.length) for (const child of node.children) titles.set(child.path, node.title);
|
|
13
|
+
else titles.set(node.path, node.title);
|
|
14
|
+
return titles;
|
|
15
|
+
}
|
|
16
|
+
function buildSearchItems(routes, navigation) {
|
|
17
|
+
const groupTitles = routeGroupTitles(navigation);
|
|
18
|
+
return routes.flatMap((route) => {
|
|
19
|
+
if (route.isBareAlias) return [];
|
|
20
|
+
const groupTitle = groupTitles.get(route.path);
|
|
21
|
+
return [{
|
|
22
|
+
title: route.title,
|
|
23
|
+
pageTitle: route.title,
|
|
24
|
+
sectionTitle: groupTitle,
|
|
25
|
+
url: route.path,
|
|
26
|
+
keywords: [
|
|
27
|
+
groupTitle,
|
|
28
|
+
route.title,
|
|
29
|
+
route.path,
|
|
30
|
+
route.kind
|
|
31
|
+
].filter(Boolean).join(" ").toLowerCase()
|
|
32
|
+
}, ...route.sections?.map((section) => ({
|
|
33
|
+
title: section.title,
|
|
34
|
+
pageTitle: route.title,
|
|
35
|
+
sectionTitle: groupTitle,
|
|
36
|
+
url: `${route.path}#${section.id}`,
|
|
37
|
+
keywords: [
|
|
38
|
+
groupTitle,
|
|
39
|
+
route.title,
|
|
40
|
+
section.title,
|
|
41
|
+
route.path,
|
|
42
|
+
section.id
|
|
43
|
+
].filter(Boolean).join(" ").toLowerCase()
|
|
44
|
+
})) ?? []];
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//#endregion
|
|
48
|
+
//#region source/shell/search/pagefind.ts
|
|
49
|
+
var pagefindPromises = /* @__PURE__ */ new Map();
|
|
50
|
+
function pagefindCacheKey(routePrefix, locale) {
|
|
51
|
+
return `${routePrefix || "/"}:${locale || "default"}`;
|
|
52
|
+
}
|
|
53
|
+
function loadPagefind(routePrefix, locale) {
|
|
54
|
+
if (typeof window === "undefined") return Promise.resolve(null);
|
|
55
|
+
const language = locale ?? document.documentElement.lang;
|
|
56
|
+
const cacheKey = pagefindCacheKey(routePrefix, language);
|
|
57
|
+
const cachedPagefind = pagefindPromises.get(cacheKey);
|
|
58
|
+
if (cachedPagefind) return cachedPagefind;
|
|
59
|
+
const pagefindPromise = import(
|
|
60
|
+
/* @vite-ignore */
|
|
61
|
+
prefixHref("/pagefind/pagefind.js", routePrefix)
|
|
62
|
+
).then(async (module) => {
|
|
63
|
+
const previousLanguage = document.documentElement.lang;
|
|
64
|
+
if (language) document.documentElement.lang = language;
|
|
65
|
+
const pagefind = module.createInstance();
|
|
66
|
+
if (previousLanguage && previousLanguage !== language) document.documentElement.lang = previousLanguage;
|
|
67
|
+
await pagefind.init?.();
|
|
68
|
+
return pagefind;
|
|
69
|
+
}).catch((error) => {
|
|
70
|
+
pagefindPromises.delete(cacheKey);
|
|
71
|
+
console.warn("[clarify:search] Pagefind instance failed", {
|
|
72
|
+
cacheKey,
|
|
73
|
+
language,
|
|
74
|
+
error
|
|
75
|
+
});
|
|
76
|
+
return null;
|
|
77
|
+
});
|
|
78
|
+
pagefindPromises.set(cacheKey, pagefindPromise);
|
|
79
|
+
return pagefindPromise;
|
|
80
|
+
}
|
|
81
|
+
function normalizePagefindUrl(url, routePrefix) {
|
|
82
|
+
const parsedUrl = new URL(url, typeof window === "undefined" ? "http://localhost" : window.location.origin);
|
|
83
|
+
let pathname = parsedUrl.pathname;
|
|
84
|
+
const prefix = routePrefix && routePrefix !== "/" ? `/${routePrefix.replace(/^\/+|\/+$/g, "")}` : "";
|
|
85
|
+
if (prefix && (pathname === prefix || pathname.startsWith(`${prefix}/`))) pathname = pathname.slice(prefix.length) || "/";
|
|
86
|
+
return `${pathname}${parsedUrl.search}${parsedUrl.hash}`;
|
|
87
|
+
}
|
|
88
|
+
//#endregion
|
|
89
|
+
//#region source/shell/search/SearchInput.tsx
|
|
90
|
+
var SearchInput = forwardRef(function SearchInput(arg0, inputRef) {
|
|
91
|
+
const { query, setQuery, onClose, onSubmit, activeDescendantId, loading = false } = arg0;
|
|
92
|
+
const t = useBuiltInText();
|
|
93
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
94
|
+
className: "clarify-search-input group relative flex h-12",
|
|
95
|
+
children: [/* @__PURE__ */ jsx(loading ? LoaderCircle : Search, {
|
|
96
|
+
"aria-hidden": "true",
|
|
97
|
+
className: clsx("pointer-events-none absolute top-0 left-3 h-full w-5 stroke-(--clarify-theme-tokens-colors-muted)", loading && "animate-spin")
|
|
98
|
+
}), /* @__PURE__ */ jsx("input", {
|
|
99
|
+
ref: inputRef,
|
|
100
|
+
"data-autofocus": true,
|
|
101
|
+
role: "combobox",
|
|
102
|
+
"aria-expanded": query !== "",
|
|
103
|
+
"aria-controls": "clarify-search-results",
|
|
104
|
+
"aria-activedescendant": activeDescendantId,
|
|
105
|
+
value: query,
|
|
106
|
+
onChange: (event) => setQuery(event.currentTarget.value),
|
|
107
|
+
onKeyDown: (event) => {
|
|
108
|
+
if (event.key === "Escape") if (query) setQuery("");
|
|
109
|
+
else onClose();
|
|
110
|
+
if (event.key === "Enter") {
|
|
111
|
+
event.preventDefault();
|
|
112
|
+
onSubmit();
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
placeholder: t("search.placeholder"),
|
|
116
|
+
className: "clarify-search-field flex-auto appearance-none bg-transparent pr-4 pl-10 outline-hidden focus:w-full focus:flex-none [&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden [&::-webkit-search-results-button]:hidden [&::-webkit-search-results-decoration]:hidden"
|
|
117
|
+
})]
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
//#endregion
|
|
121
|
+
//#region source/shell/search/Highlight.tsx
|
|
122
|
+
function stripHtml(value) {
|
|
123
|
+
if (typeof document === "undefined") return value.replace(/<[^>]*>/g, "");
|
|
124
|
+
const template = document.createElement("template");
|
|
125
|
+
template.innerHTML = value;
|
|
126
|
+
return template.content.textContent ?? "";
|
|
127
|
+
}
|
|
128
|
+
function escapeRegExp(value) {
|
|
129
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
130
|
+
}
|
|
131
|
+
function HighlightQuery(arg0) {
|
|
132
|
+
const { text, query } = arg0;
|
|
133
|
+
if (!query) return text;
|
|
134
|
+
return /* @__PURE__ */ jsx(Fragment$1, { children: text.split(new RegExp(`(${escapeRegExp(query)})`, "ig")).map((part, index) => part.toLowerCase() === query.toLowerCase() ? /* @__PURE__ */ jsx("mark", {
|
|
135
|
+
className: "bg-transparent text-(--clarify-theme-tokens-colors-primary) underline",
|
|
136
|
+
children: part
|
|
137
|
+
}, index) : /* @__PURE__ */ jsx(Fragment, { children: part }, index)) });
|
|
138
|
+
}
|
|
139
|
+
function renderExcerptNode(node, key) {
|
|
140
|
+
if (node.nodeType === Node.TEXT_NODE) return node.textContent;
|
|
141
|
+
if (node.nodeType !== Node.ELEMENT_NODE) return null;
|
|
142
|
+
const element = node;
|
|
143
|
+
const children = Array.from(element.childNodes).map((child, index) => renderExcerptNode(child, `${key}-${index}`));
|
|
144
|
+
if (element.tagName.toLowerCase() === "mark") return /* @__PURE__ */ jsx("mark", {
|
|
145
|
+
className: "bg-transparent text-(--clarify-theme-tokens-colors-primary) underline",
|
|
146
|
+
children
|
|
147
|
+
}, key);
|
|
148
|
+
return /* @__PURE__ */ jsx(Fragment, { children }, key);
|
|
149
|
+
}
|
|
150
|
+
function HighlightExcerpt(arg0) {
|
|
151
|
+
const { excerpt, query } = arg0;
|
|
152
|
+
if (typeof document === "undefined" || !excerpt.includes("<mark")) return /* @__PURE__ */ jsx(HighlightQuery, {
|
|
153
|
+
text: stripHtml(excerpt),
|
|
154
|
+
query
|
|
155
|
+
});
|
|
156
|
+
const template = document.createElement("template");
|
|
157
|
+
template.innerHTML = excerpt;
|
|
158
|
+
return /* @__PURE__ */ jsx(Fragment$1, { children: Array.from(template.content.childNodes).map((node, index) => renderExcerptNode(node, String(index))) });
|
|
159
|
+
}
|
|
160
|
+
//#endregion
|
|
161
|
+
//#region source/shell/search/SearchResult.tsx
|
|
162
|
+
function SearchResult(arg0) {
|
|
163
|
+
const { result, query, active, onActive, onSelect } = arg0;
|
|
164
|
+
const id = useId();
|
|
165
|
+
const hierarchy = result.type === "quick" ? [result.sectionTitle, result.pageTitle].filter((value) => typeof value === "string") : [];
|
|
166
|
+
return /* @__PURE__ */ jsxs("li", {
|
|
167
|
+
id,
|
|
168
|
+
className: clsx("clarify-search-result group block cursor-pointer px-4 py-3", active && "clarify-search-result-active"),
|
|
169
|
+
"aria-selected": active,
|
|
170
|
+
onMouseEnter: onActive,
|
|
171
|
+
onMouseMove: onActive,
|
|
172
|
+
onMouseDown: (event) => {
|
|
173
|
+
event.preventDefault();
|
|
174
|
+
onSelect();
|
|
175
|
+
},
|
|
176
|
+
children: [
|
|
177
|
+
/* @__PURE__ */ jsx("div", {
|
|
178
|
+
className: "clarify-search-result-title",
|
|
179
|
+
children: /* @__PURE__ */ jsx(HighlightQuery, {
|
|
180
|
+
text: result.title,
|
|
181
|
+
query
|
|
182
|
+
})
|
|
183
|
+
}),
|
|
184
|
+
hierarchy.length > 0 ? /* @__PURE__ */ jsx("div", {
|
|
185
|
+
className: "clarify-search-result-hierarchy mt-1 truncate whitespace-nowrap",
|
|
186
|
+
children: hierarchy.map((item, itemIndex, items) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(HighlightQuery, {
|
|
187
|
+
text: item,
|
|
188
|
+
query
|
|
189
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
190
|
+
className: itemIndex === items.length - 1 ? "sr-only" : "clarify-search-result-separator mx-2",
|
|
191
|
+
children: "/"
|
|
192
|
+
})] }, `${item}-${itemIndex}`))
|
|
193
|
+
}) : null,
|
|
194
|
+
result.type === "full-text" && result.excerpt ? /* @__PURE__ */ jsx("p", {
|
|
195
|
+
className: "clarify-search-result-excerpt mt-1 line-clamp-2 text-xs leading-5 text-(--clarify-theme-tokens-colors-muted)",
|
|
196
|
+
children: /* @__PURE__ */ jsx(HighlightExcerpt, {
|
|
197
|
+
excerpt: result.excerpt,
|
|
198
|
+
query
|
|
199
|
+
})
|
|
200
|
+
}) : null
|
|
201
|
+
]
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
//#endregion
|
|
205
|
+
//#region source/shell/search/SearchDialog.tsx
|
|
206
|
+
function useSearchDialogLifecycle(arg0) {
|
|
207
|
+
const { open, setOpen } = arg0;
|
|
208
|
+
const location = useLocation();
|
|
209
|
+
useEffect(() => {
|
|
210
|
+
setOpen(false);
|
|
211
|
+
}, [
|
|
212
|
+
location.pathname,
|
|
213
|
+
location.search,
|
|
214
|
+
location.hash,
|
|
215
|
+
setOpen
|
|
216
|
+
]);
|
|
217
|
+
useEffect(() => {
|
|
218
|
+
if (typeof window === "undefined") return void 0;
|
|
219
|
+
if (open) return void 0;
|
|
220
|
+
function onKeyDown(event) {
|
|
221
|
+
if (event.key === "k" && (event.metaKey || event.ctrlKey)) {
|
|
222
|
+
event.preventDefault();
|
|
223
|
+
setOpen(true);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
window.addEventListener("keydown", onKeyDown);
|
|
227
|
+
return () => window.removeEventListener("keydown", onKeyDown);
|
|
228
|
+
}, [open, setOpen]);
|
|
229
|
+
}
|
|
230
|
+
function useSearchData(arg0) {
|
|
231
|
+
const { query, searchItems, routePrefix, currentLocale } = arg0;
|
|
232
|
+
const [fullTextState, setFullTextState] = useState(null);
|
|
233
|
+
const [pagefindState, setPagefindState] = useState(null);
|
|
234
|
+
const quickResults = useMemo(() => {
|
|
235
|
+
const normalizedQuery = query.trim().toLowerCase();
|
|
236
|
+
if (!normalizedQuery) return [];
|
|
237
|
+
return searchItems.filter((item) => item.keywords.includes(normalizedQuery)).slice(0, 8).map((item) => ({
|
|
238
|
+
...item,
|
|
239
|
+
type: "quick"
|
|
240
|
+
}));
|
|
241
|
+
}, [query, searchItems]);
|
|
242
|
+
const pagefindKey = pagefindCacheKey(routePrefix, currentLocale);
|
|
243
|
+
const activePagefindState = pagefindState?.key === pagefindKey ? pagefindState : null;
|
|
244
|
+
const pagefind = activePagefindState?.pagefind ?? null;
|
|
245
|
+
const pagefindAvailable = activePagefindState?.available ?? null;
|
|
246
|
+
const trimmedQuery = query.trim();
|
|
247
|
+
const fullTextKey = `${pagefindKey}:${trimmedQuery}`;
|
|
248
|
+
const results = (fullTextState?.key === fullTextKey ? fullTextState.results : null) ?? quickResults;
|
|
249
|
+
const searchInputLoading = pagefindAvailable === null || Boolean(trimmedQuery && pagefind && fullTextState?.key !== fullTextKey);
|
|
250
|
+
const showNoResults = Boolean(query.trim()) && results.length === 0 && pagefindAvailable !== null;
|
|
251
|
+
useEffect(() => {
|
|
252
|
+
let cancelled = false;
|
|
253
|
+
loadPagefind(routePrefix, currentLocale).then((loadedPagefind) => {
|
|
254
|
+
if (cancelled) return;
|
|
255
|
+
setPagefindState({
|
|
256
|
+
key: pagefindKey,
|
|
257
|
+
pagefind: loadedPagefind,
|
|
258
|
+
available: Boolean(loadedPagefind)
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
return () => {
|
|
262
|
+
cancelled = true;
|
|
263
|
+
};
|
|
264
|
+
}, [
|
|
265
|
+
currentLocale,
|
|
266
|
+
pagefindKey,
|
|
267
|
+
routePrefix
|
|
268
|
+
]);
|
|
269
|
+
useEffect(() => {
|
|
270
|
+
let cancelled = false;
|
|
271
|
+
if (!trimmedQuery || !pagefind) return void 0;
|
|
272
|
+
Promise.resolve().then(async () => {
|
|
273
|
+
if (cancelled) return;
|
|
274
|
+
try {
|
|
275
|
+
const search = await pagefind.search(trimmedQuery, { limit: 8 });
|
|
276
|
+
const data = await Promise.all(search.results.map(async (result) => ({
|
|
277
|
+
id: result.id,
|
|
278
|
+
data: await result.data()
|
|
279
|
+
})));
|
|
280
|
+
if (cancelled) return;
|
|
281
|
+
setFullTextState({
|
|
282
|
+
key: fullTextKey,
|
|
283
|
+
results: data.map(({ id, data }) => ({
|
|
284
|
+
type: "full-text",
|
|
285
|
+
id,
|
|
286
|
+
title: data.meta.title || data.url,
|
|
287
|
+
url: normalizePagefindUrl(data.url, routePrefix),
|
|
288
|
+
excerpt: data.excerpt
|
|
289
|
+
}))
|
|
290
|
+
});
|
|
291
|
+
} catch (error) {
|
|
292
|
+
console.warn("[clarify:search] Pagefind search failed", {
|
|
293
|
+
currentLocale,
|
|
294
|
+
query: trimmedQuery,
|
|
295
|
+
error
|
|
296
|
+
});
|
|
297
|
+
if (!cancelled) setFullTextState({
|
|
298
|
+
key: fullTextKey,
|
|
299
|
+
results: null
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
return () => {
|
|
304
|
+
cancelled = true;
|
|
305
|
+
};
|
|
306
|
+
}, [
|
|
307
|
+
currentLocale,
|
|
308
|
+
fullTextKey,
|
|
309
|
+
pagefind,
|
|
310
|
+
routePrefix,
|
|
311
|
+
trimmedQuery
|
|
312
|
+
]);
|
|
313
|
+
return {
|
|
314
|
+
results,
|
|
315
|
+
searchInputLoading,
|
|
316
|
+
showNoResults
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
function SearchDialog(arg0) {
|
|
320
|
+
const { open, setOpen, routes, navigation, routePrefix = "/", currentLocale, className, onNavigate = () => {} } = arg0;
|
|
321
|
+
const t = useBuiltInText();
|
|
322
|
+
const navigate = useNavigate();
|
|
323
|
+
const inputRef = useRef(null);
|
|
324
|
+
const [query, setQuery] = useState("");
|
|
325
|
+
const [activeIndex, setActiveIndex] = useState(0);
|
|
326
|
+
const searchItems = useMemo(() => buildSearchItems(routes, navigation), [navigation, routes]);
|
|
327
|
+
useSearchDialogLifecycle({
|
|
328
|
+
open,
|
|
329
|
+
setOpen
|
|
330
|
+
});
|
|
331
|
+
const { results, searchInputLoading, showNoResults } = useSearchData({
|
|
332
|
+
query,
|
|
333
|
+
searchItems,
|
|
334
|
+
routePrefix,
|
|
335
|
+
currentLocale
|
|
336
|
+
});
|
|
337
|
+
const updateQuery = (value) => {
|
|
338
|
+
setQuery(value);
|
|
339
|
+
setActiveIndex(0);
|
|
340
|
+
};
|
|
341
|
+
function closeDialog() {
|
|
342
|
+
updateQuery("");
|
|
343
|
+
setOpen(false);
|
|
344
|
+
}
|
|
345
|
+
function selectResult(result = results[activeIndex]) {
|
|
346
|
+
if (!result) return;
|
|
347
|
+
navigate(result.url);
|
|
348
|
+
onNavigate();
|
|
349
|
+
closeDialog();
|
|
350
|
+
}
|
|
351
|
+
function renderResultsPanel() {
|
|
352
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
353
|
+
className: "border-t border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-background) empty:hidden dark:border-zinc-100/5 dark:bg-white/2.5",
|
|
354
|
+
children: [showNoResults ? /* @__PURE__ */ jsxs("div", {
|
|
355
|
+
className: "p-6 text-center",
|
|
356
|
+
children: [/* @__PURE__ */ jsx(SearchX, { className: "mx-auto h-5 w-5 stroke-(--clarify-theme-tokens-colors-foreground) dark:stroke-zinc-600" }), /* @__PURE__ */ jsx("p", {
|
|
357
|
+
className: "mt-2 text-xs text-(--clarify-theme-tokens-colors-muted) dark:text-zinc-400",
|
|
358
|
+
children: t("search.noResults", { query })
|
|
359
|
+
})]
|
|
360
|
+
}) : null, results.length ? /* @__PURE__ */ jsx("ul", {
|
|
361
|
+
id: "clarify-search-results",
|
|
362
|
+
className: "clarify-search-results",
|
|
363
|
+
role: "listbox",
|
|
364
|
+
children: results.map((result, resultIndex) => /* @__PURE__ */ jsx(SearchResult, {
|
|
365
|
+
result,
|
|
366
|
+
query,
|
|
367
|
+
active: resultIndex === activeIndex,
|
|
368
|
+
onActive: () => setActiveIndex(resultIndex),
|
|
369
|
+
onSelect: () => selectResult(result)
|
|
370
|
+
}, result.type === "full-text" ? result.id : result.url))
|
|
371
|
+
}) : null]
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
return /* @__PURE__ */ jsxs(Dialog, {
|
|
375
|
+
open,
|
|
376
|
+
onClose: closeDialog,
|
|
377
|
+
className: clsx("clarify-search-dialog fixed inset-0 z-50", className),
|
|
378
|
+
children: [/* @__PURE__ */ jsx(DialogBackdrop, {
|
|
379
|
+
transition: true,
|
|
380
|
+
className: "clarify-search-backdrop clarify-ui-backdrop fixed inset-0 backdrop-blur-xs data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in"
|
|
381
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
382
|
+
className: "fixed inset-0 overflow-y-auto px-4 py-4 sm:px-6 sm:py-20 md:py-32 lg:px-8 lg:py-(--clarify-search-dialog-padding-block-lg)",
|
|
383
|
+
children: /* @__PURE__ */ jsxs(DialogPanel, {
|
|
384
|
+
transition: true,
|
|
385
|
+
className: "clarify-search-panel mx-auto transform-gpu overflow-hidden rounded-(--clarify-theme-tokens-radius-lg) bg-(--clarify-theme-tokens-colors-surface) shadow-xl ring-1 ring-(--clarify-theme-tokens-colors-border) data-closed:scale-95 data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in sm:max-w-xl dark:bg-zinc-900 dark:ring-zinc-800",
|
|
386
|
+
onKeyDown: (event) => {
|
|
387
|
+
if (event.key === "ArrowDown") {
|
|
388
|
+
event.preventDefault();
|
|
389
|
+
setActiveIndex((index) => results.length ? (index + 1) % results.length : 0);
|
|
390
|
+
}
|
|
391
|
+
if (event.key === "ArrowUp") {
|
|
392
|
+
event.preventDefault();
|
|
393
|
+
setActiveIndex((index) => results.length ? (index - 1 + results.length) % results.length : 0);
|
|
394
|
+
}
|
|
395
|
+
},
|
|
396
|
+
children: [/* @__PURE__ */ jsx(SearchInput, {
|
|
397
|
+
ref: inputRef,
|
|
398
|
+
query,
|
|
399
|
+
setQuery: updateQuery,
|
|
400
|
+
onClose: closeDialog,
|
|
401
|
+
onSubmit: () => selectResult(),
|
|
402
|
+
loading: searchInputLoading
|
|
403
|
+
}), renderResultsPanel()]
|
|
404
|
+
})
|
|
405
|
+
})]
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
//#endregion
|
|
409
|
+
export { SearchDialog, SearchDialog as default };
|
|
410
|
+
|
|
411
|
+
//# sourceMappingURL=SearchDialog-CxYLjRi5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchDialog-CxYLjRi5.js","names":[],"sources":["../source/shell/search/items.ts","../source/shell/search/pagefind.ts","../source/shell/search/SearchInput.tsx","../source/shell/search/Highlight.tsx","../source/shell/search/SearchResult.tsx","../source/shell/search/SearchDialog.tsx"],"sourcesContent":["import type { NavigationNode, RouteItem } from '../../types'\n\nimport type { SearchItem } from './types'\n\nfunction routeGroupTitles(navigation: NavigationNode[]) {\n const titles = new Map<string, string>()\n\n for (const node of navigation) {\n if (node.children?.length) {\n for (const child of node.children) {\n titles.set(child.path, node.title)\n }\n } else {\n titles.set(node.path, node.title)\n }\n }\n\n return titles\n}\n\nexport function buildSearchItems(routes: RouteItem[], navigation: NavigationNode[]): SearchItem[] {\n const groupTitles = routeGroupTitles(navigation)\n\n return routes.flatMap((route) => {\n // Skip bare alias routes (e.g., /path) from search to avoid duplicates in multilingual sites\n if (route.isBareAlias) return []\n \n const groupTitle = groupTitles.get(route.path)\n const pageItem: SearchItem = {\n title: route.title,\n pageTitle: route.title,\n sectionTitle: groupTitle,\n url: route.path,\n keywords: [groupTitle, route.title, route.path, route.kind].filter(Boolean).join(' ').toLowerCase(),\n }\n\n const sectionItems = route.sections?.map((section) => ({\n title: section.title,\n pageTitle: route.title,\n sectionTitle: groupTitle,\n url: `${route.path}#${section.id}`,\n keywords: [groupTitle, route.title, section.title, route.path, section.id].filter(Boolean).join(' ').toLowerCase(),\n })) ?? []\n\n return [pageItem, ...sectionItems]\n })\n}\n","import { prefixHref } from '../../utils/href'\n\nimport type { Pagefind } from './types'\n\ntype PagefindModule = {\n createInstance: () => Pagefind\n}\n\nconst pagefindPromises = new Map<string, Promise<Pagefind | null>>()\n\nexport function pagefindCacheKey(routePrefix: string, locale: string | undefined) {\n return `${routePrefix || '/'}:${locale || 'default'}`\n}\n\nexport function loadPagefind(routePrefix: string, locale: string | undefined): Promise<Pagefind | null> {\n if (typeof window === 'undefined') return Promise.resolve(null)\n\n const language = locale ?? document.documentElement.lang\n const cacheKey = pagefindCacheKey(routePrefix, language)\n const cachedPagefind = pagefindPromises.get(cacheKey)\n if (cachedPagefind) {\n return cachedPagefind\n }\n\n const pagefindUrl = prefixHref('/pagefind/pagefind.js', routePrefix)\n const pagefindPromise = import(/* @vite-ignore */ pagefindUrl)\n .then(async (module: PagefindModule) => {\n const previousLanguage = document.documentElement.lang\n if (language) document.documentElement.lang = language\n const pagefind = module.createInstance()\n if (previousLanguage && previousLanguage !== language) document.documentElement.lang = previousLanguage\n await pagefind.init?.()\n return pagefind\n })\n .catch((error: unknown) => {\n pagefindPromises.delete(cacheKey)\n console.warn('[clarify:search] Pagefind instance failed', { cacheKey, language, error })\n return null\n })\n\n pagefindPromises.set(cacheKey, pagefindPromise)\n return pagefindPromise\n}\n\nexport function normalizePagefindUrl(url: string, routePrefix: string): string {\n const parsedUrl = new URL(url, typeof window === 'undefined' ? 'http://localhost' : window.location.origin)\n let pathname = parsedUrl.pathname\n const prefix = routePrefix && routePrefix !== '/' ? `/${routePrefix.replace(/^\\/+|\\/+$/g, '')}` : ''\n\n if (prefix && (pathname === prefix || pathname.startsWith(`${prefix}/`))) {\n pathname = pathname.slice(prefix.length) || '/'\n }\n\n return `${pathname}${parsedUrl.search}${parsedUrl.hash}`\n}\n","import clsx from 'clsx'\nimport { LoaderCircle, Search as SearchIcon } from 'lucide-react'\nimport { forwardRef } from 'react'\n\nimport { useBuiltInText } from '../../i18n'\n\nexport const SearchInput = forwardRef<\n React.ElementRef<'input'>,\n {\n query: string\n setQuery: (query: string) => void\n onClose: () => void\n onSubmit: () => void\n activeDescendantId?: string\n loading?: boolean\n }\n>(function SearchInput(arg0, inputRef) {\n const { query, setQuery, onClose, onSubmit, activeDescendantId, loading = false } = arg0\n const t = useBuiltInText()\n const Icon = loading ? LoaderCircle : SearchIcon\n\n return (\n <div className=\"clarify-search-input group relative flex h-12\">\n <Icon\n aria-hidden=\"true\"\n className={clsx(\n 'pointer-events-none absolute top-0 left-3 h-full w-5 stroke-(--clarify-theme-tokens-colors-muted)',\n loading && 'animate-spin',\n )}\n />\n <input\n ref={inputRef}\n data-autofocus\n role=\"combobox\"\n aria-expanded={query !== ''}\n aria-controls=\"clarify-search-results\"\n aria-activedescendant={activeDescendantId}\n value={query}\n onChange={(event) => setQuery(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n if (query) setQuery('')\n else onClose()\n }\n if (event.key === 'Enter') {\n event.preventDefault()\n onSubmit()\n }\n }}\n placeholder={t('search.placeholder')}\n className=\"clarify-search-field flex-auto appearance-none bg-transparent pr-4 pl-10 outline-hidden focus:w-full focus:flex-none [&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden [&::-webkit-search-results-button]:hidden [&::-webkit-search-results-decoration]:hidden\"\n />\n </div>\n )\n})\n","import { Fragment } from 'react'\nimport type { ReactNode } from 'react'\n\nfunction stripHtml(value: string): string {\n if (typeof document === 'undefined') return value.replace(/<[^>]*>/g, '')\n const template = document.createElement('template')\n template.innerHTML = value\n return template.content.textContent ?? ''\n}\n\nfunction escapeRegExp(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\ntype HighlightQueryProps = { text: string; query: string }\n\nexport function HighlightQuery(arg0: HighlightQueryProps) {\n const { text, query } = arg0\n\n if (!query) return text\n\n const parts = text.split(new RegExp(`(${escapeRegExp(query)})`, 'ig'))\n\n return (\n <>\n {parts.map((part, index) =>\n part.toLowerCase() === query.toLowerCase() ? (\n <mark key={index} className=\"bg-transparent text-(--clarify-theme-tokens-colors-primary) underline\">\n {part}\n </mark>\n ) : (\n <Fragment key={index}>{part}</Fragment>\n ),\n )}\n </>\n )\n}\n\nfunction renderExcerptNode(node: ChildNode, key: string): ReactNode {\n if (node.nodeType === Node.TEXT_NODE) return node.textContent\n if (node.nodeType !== Node.ELEMENT_NODE) return null\n\n const element = node as HTMLElement\n const children = Array.from(element.childNodes).map((child, index) => renderExcerptNode(child, `${key}-${index}`))\n\n if (element.tagName.toLowerCase() === 'mark') {\n return (\n <mark key={key} className=\"bg-transparent text-(--clarify-theme-tokens-colors-primary) underline\">\n {children}\n </mark>\n )\n }\n\n return <Fragment key={key}>{children}</Fragment>\n}\n\ntype HighlightExcerptProps = { excerpt: string; query: string }\n\nexport function HighlightExcerpt(arg0: HighlightExcerptProps) {\n const { excerpt, query } = arg0\n\n if (typeof document === 'undefined' || !excerpt.includes('<mark')) {\n return <HighlightQuery text={stripHtml(excerpt)} query={query} />\n }\n\n const template = document.createElement('template')\n template.innerHTML = excerpt\n\n return <>{Array.from(template.content.childNodes).map((node, index) => renderExcerptNode(node, String(index)))}</>\n}\n","import clsx from 'clsx'\nimport { Fragment, useId } from 'react'\n\nimport { HighlightExcerpt, HighlightQuery } from './Highlight'\nimport type { SearchDisplayItem } from './types'\n\ntype SearchResultProps = {\n result: SearchDisplayItem\n query: string\n active: boolean\n onActive: () => void\n onSelect: () => void\n}\n\nexport function SearchResult(arg0: SearchResultProps) {\n const { result, query, active, onActive, onSelect } = arg0\n const id = useId()\n const hierarchy = result.type === 'quick'\n ? [result.sectionTitle, result.pageTitle].filter((value): value is string => typeof value === 'string')\n : []\n\n return (\n <li\n id={id}\n className={clsx('clarify-search-result group block cursor-pointer px-4 py-3', active && 'clarify-search-result-active')}\n aria-selected={active}\n onMouseEnter={onActive}\n onMouseMove={onActive}\n onMouseDown={(event) => {\n event.preventDefault()\n onSelect()\n }}\n >\n <div className=\"clarify-search-result-title\">\n <HighlightQuery text={result.title} query={query} />\n </div>\n {hierarchy.length > 0 ? (\n <div className=\"clarify-search-result-hierarchy mt-1 truncate whitespace-nowrap\">\n {hierarchy.map((item, itemIndex, items) => (\n <Fragment key={`${item}-${itemIndex}`}>\n <HighlightQuery text={item} query={query} />\n <span className={itemIndex === items.length - 1 ? 'sr-only' : 'clarify-search-result-separator mx-2'}>/</span>\n </Fragment>\n ))}\n </div>\n ) : null}\n {result.type === 'full-text' && result.excerpt ? (\n <p className=\"clarify-search-result-excerpt mt-1 line-clamp-2 text-xs leading-5 text-(--clarify-theme-tokens-colors-muted)\">\n <HighlightExcerpt excerpt={result.excerpt} query={query} />\n </p>\n ) : null}\n </li>\n )\n}\n","import { Dialog, DialogBackdrop, DialogPanel } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { SearchX } from 'lucide-react'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { useLocation, useNavigate } from 'react-router-dom'\n\nimport { useBuiltInText } from '../../i18n'\nimport type { NavigationNode, RouteItem } from '../../types'\n\nimport { buildSearchItems } from './items'\nimport { loadPagefind, normalizePagefindUrl, pagefindCacheKey } from './pagefind'\nimport { SearchInput } from './SearchInput'\nimport { SearchResult } from './SearchResult'\nimport type { FullTextSearchItem, Pagefind, SearchDisplayItem } from './types'\n\ntype SearchDialogProps = {\n open: boolean\n setOpen: (open: boolean) => void\n routes: RouteItem[]\n navigation: NavigationNode[]\n routePrefix?: string\n currentLocale?: string\n className?: string\n onNavigate?: () => void\n}\n\ntype PagefindState = {\n key: string\n pagefind: Pagefind | null\n available: boolean\n}\n\ntype FullTextSearchState = {\n key: string\n results: FullTextSearchItem[] | null\n}\n\ntype UseSearchDialogLifecycleArgs = {\n open: boolean\n setOpen: (open: boolean) => void\n}\n\nfunction useSearchDialogLifecycle(arg0: UseSearchDialogLifecycleArgs) {\n const { open, setOpen } = arg0\n const location = useLocation()\n\n useEffect(() => {\n setOpen(false)\n }, [location.pathname, location.search, location.hash, setOpen])\n\n useEffect(() => {\n if (typeof window === 'undefined') return undefined\n if (open) return undefined\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key === 'k' && (event.metaKey || event.ctrlKey)) {\n event.preventDefault()\n setOpen(true)\n }\n }\n\n window.addEventListener('keydown', onKeyDown)\n return () => window.removeEventListener('keydown', onKeyDown)\n }, [open, setOpen])\n}\n\ntype UseSearchDataArgs = {\n query: string\n searchItems: ReturnType<typeof buildSearchItems>\n routePrefix: string\n currentLocale?: string\n}\n\ntype SearchDataState = {\n results: SearchDisplayItem[]\n searchInputLoading: boolean\n showNoResults: boolean\n}\n\nfunction useSearchData(arg0: UseSearchDataArgs): SearchDataState {\n const { query, searchItems, routePrefix, currentLocale } = arg0\n const [fullTextState, setFullTextState] = useState<FullTextSearchState | null>(null)\n const [pagefindState, setPagefindState] = useState<PagefindState | null>(null)\n\n const quickResults = useMemo(() => {\n const normalizedQuery = query.trim().toLowerCase()\n if (!normalizedQuery) return []\n return searchItems.filter((item) => item.keywords.includes(normalizedQuery)).slice(0, 8).map((item) => ({ ...item, type: 'quick' as const }))\n }, [query, searchItems])\n\n const pagefindKey = pagefindCacheKey(routePrefix, currentLocale)\n const activePagefindState = pagefindState?.key === pagefindKey ? pagefindState : null\n const pagefind = activePagefindState?.pagefind ?? null\n const pagefindAvailable = activePagefindState?.available ?? null\n const trimmedQuery = query.trim()\n const fullTextKey = `${pagefindKey}:${trimmedQuery}`\n const fullTextResults = fullTextState?.key === fullTextKey ? fullTextState.results : null\n const results: SearchDisplayItem[] = fullTextResults ?? quickResults\n const searchInputLoading = pagefindAvailable === null || Boolean(trimmedQuery && pagefind && fullTextState?.key !== fullTextKey)\n const showNoResults = Boolean(query.trim()) && results.length === 0 && pagefindAvailable !== null\n\n useEffect(() => {\n let cancelled = false\n\n loadPagefind(routePrefix, currentLocale).then((loadedPagefind) => {\n if (cancelled) return\n setPagefindState({ key: pagefindKey, pagefind: loadedPagefind, available: Boolean(loadedPagefind) })\n })\n\n return () => {\n cancelled = true\n }\n }, [currentLocale, pagefindKey, routePrefix])\n\n useEffect(() => {\n let cancelled = false\n if (!trimmedQuery || !pagefind) return undefined\n\n Promise.resolve().then(async () => {\n if (cancelled) return\n\n try {\n const search = await pagefind.search(trimmedQuery, { limit: 8 })\n const data = await Promise.all(search.results.map(async (result) => ({ id: result.id, data: await result.data() })))\n if (cancelled) return\n setFullTextState({\n key: fullTextKey,\n results: data.map(({ id, data }) => ({\n type: 'full-text',\n id,\n title: data.meta.title || data.url,\n url: normalizePagefindUrl(data.url, routePrefix),\n excerpt: data.excerpt,\n })),\n })\n } catch (error: unknown) {\n console.warn('[clarify:search] Pagefind search failed', { currentLocale, query: trimmedQuery, error })\n if (!cancelled) setFullTextState({ key: fullTextKey, results: null })\n }\n })\n\n return () => {\n cancelled = true\n }\n }, [currentLocale, fullTextKey, pagefind, routePrefix, trimmedQuery])\n\n return {\n results,\n searchInputLoading,\n showNoResults,\n }\n}\n\nexport function SearchDialog(arg0: SearchDialogProps) {\n const {\n open,\n setOpen,\n routes,\n navigation,\n routePrefix = '/',\n currentLocale,\n className,\n onNavigate = () => {},\n } = arg0\n\n const t = useBuiltInText()\n const navigate = useNavigate()\n const inputRef = useRef<React.ElementRef<typeof SearchInput>>(null)\n const [query, setQuery] = useState('')\n const [activeIndex, setActiveIndex] = useState(0)\n const searchItems = useMemo(() => buildSearchItems(routes, navigation), [navigation, routes])\n\n useSearchDialogLifecycle({ open, setOpen })\n const { results, searchInputLoading, showNoResults } = useSearchData({ query, searchItems, routePrefix, currentLocale })\n\n const updateQuery = (value: string) => {\n setQuery(value)\n setActiveIndex(0)\n }\n\n function closeDialog() {\n updateQuery('')\n setOpen(false)\n }\n\n function selectResult(result = results[activeIndex]) {\n if (!result) return\n navigate(result.url)\n onNavigate()\n closeDialog()\n }\n\n function renderResultsPanel() {\n return (\n <div className=\"border-t border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-background) empty:hidden dark:border-zinc-100/5 dark:bg-white/2.5\">\n {showNoResults ? (\n <div className=\"p-6 text-center\">\n <SearchX className=\"mx-auto h-5 w-5 stroke-(--clarify-theme-tokens-colors-foreground) dark:stroke-zinc-600\" />\n <p className=\"mt-2 text-xs text-(--clarify-theme-tokens-colors-muted) dark:text-zinc-400\">\n {t('search.noResults', { query })}\n </p>\n </div>\n ) : null}\n {results.length ? (\n <ul id=\"clarify-search-results\" className=\"clarify-search-results\" role=\"listbox\">\n {results.map((result, resultIndex) => (\n <SearchResult\n key={result.type === 'full-text' ? result.id : result.url}\n result={result}\n query={query}\n active={resultIndex === activeIndex}\n onActive={() => setActiveIndex(resultIndex)}\n onSelect={() => selectResult(result)}\n />\n ))}\n </ul>\n ) : null}\n </div>\n )\n }\n\n return (\n <Dialog open={open} onClose={closeDialog} className={clsx('clarify-search-dialog fixed inset-0 z-50', className)}>\n <DialogBackdrop\n transition\n className=\"clarify-search-backdrop clarify-ui-backdrop fixed inset-0 backdrop-blur-xs data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in\"\n />\n\n <div className=\"fixed inset-0 overflow-y-auto px-4 py-4 sm:px-6 sm:py-20 md:py-32 lg:px-8 lg:py-(--clarify-search-dialog-padding-block-lg)\">\n <DialogPanel\n transition\n className=\"clarify-search-panel mx-auto transform-gpu overflow-hidden rounded-(--clarify-theme-tokens-radius-lg) bg-(--clarify-theme-tokens-colors-surface) shadow-xl ring-1 ring-(--clarify-theme-tokens-colors-border) data-closed:scale-95 data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in sm:max-w-xl dark:bg-zinc-900 dark:ring-zinc-800\"\n onKeyDown={(event) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n setActiveIndex((index) => (results.length ? (index + 1) % results.length : 0))\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n setActiveIndex((index) => (results.length ? (index - 1 + results.length) % results.length : 0))\n }\n }}\n >\n <SearchInput\n ref={inputRef}\n query={query}\n setQuery={updateQuery}\n onClose={closeDialog}\n onSubmit={() => selectResult()}\n loading={searchInputLoading}\n />\n {renderResultsPanel()}\n </DialogPanel>\n </div>\n </Dialog>\n )\n}\n\nexport default SearchDialog\n"],"mappings":"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"}
|
package/output/app/AppShell.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RuntimeSlotRegistry } from '../slots';
|
|
2
2
|
import { RouteItem, Config, NavigationTree } from '../types';
|
|
3
3
|
export type AppShellProps = {
|
|
4
4
|
config: Config;
|
|
5
5
|
routes: RouteItem[];
|
|
6
6
|
navigation: NavigationTree;
|
|
7
|
-
runtimeSlots?:
|
|
7
|
+
runtimeSlots?: RuntimeSlotRegistry;
|
|
8
8
|
};
|
|
9
9
|
export declare function AppShell(arg0: AppShellProps): import("react").JSX.Element;
|
package/output/client.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const require_render = require("./render-
|
|
2
|
+
const require_ClarifyShell = require("./ClarifyShell-C6li72Ce.cjs");
|
|
3
|
+
const require_PageActions = require("./PageActions-BjB6PYmL.cjs");
|
|
4
|
+
const require_render = require("./render-Di5B6Zc0.cjs");
|
|
5
5
|
exports.ThemeEditor = require_ClarifyShell.ThemeEditor;
|
|
6
6
|
exports.applyThemeVariables = require_ClarifyShell.applyThemeVariables;
|
|
7
7
|
exports.getStoredLocalePreference = require_PageActions.getStoredLocalePreference;
|
package/output/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { t as render } from "./render-
|
|
1
|
+
import { a as themeBootstrapScript, i as themeEditorPresets, n as ThemeEditor, r as applyThemeVariables, s as themeStorageKey } from "./ClarifyShell-1LuBliwt.js";
|
|
2
|
+
import { S as themeCookieName, _ as getStoredThemePreference, b as storeLocalePreference, g as getStoredLocalePreference, v as localeCookieName, x as storeThemePreference, y as readLocaleCookie } from "./PageActions-D7K9LDGf.js";
|
|
3
|
+
import { t as render } from "./render-DKj24Jqw.js";
|
|
4
4
|
export { ThemeEditor, applyThemeVariables, getStoredLocalePreference, getStoredThemePreference, localeCookieName, readLocaleCookie, render, storeLocalePreference, storeThemePreference, themeBootstrapScript, themeCookieName, themeEditorPresets, themeStorageKey };
|
package/output/context.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { LocaleContext,
|
|
1
|
+
export { LocaleContext, OpenApiSpecsContext, useLocale, useOpenApiSpecs } from './core/context';
|
package/output/core/context.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Config } from './types';
|
|
1
|
+
import { Config, OpenApiRegistry } from './types';
|
|
3
2
|
export declare const ConfigContext: import('react').Context<Config | null>;
|
|
4
3
|
export declare const LocaleContext: import('react').Context<string | undefined>;
|
|
5
|
-
export declare const
|
|
4
|
+
export declare const OpenApiSpecsContext: import('react').Context<OpenApiRegistry>;
|
|
6
5
|
export declare function useConfig(): Config;
|
|
7
6
|
export declare function useConfigOptional(): Config | null;
|
|
8
7
|
export declare function useLocale(): string | undefined;
|
|
9
|
-
export declare function
|
|
8
|
+
export declare function useOpenApiSpecs(): OpenApiRegistry;
|
package/output/core/i18n.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type BuiltInLocale = 'en' | 'zh-CN';
|
|
2
|
-
export type BuiltInTextKey = 'actions.code' | 'actions.copy' | 'actions.copied' | 'builtWith.label' | 'builtWith.prefix' | 'callout.danger' | 'callout.info' | 'callout.note' | 'callout.success' | 'callout.tip' | 'callout.warning' | 'contentActions.copyContent' | 'contentActions.copyContentDescription' | 'contentActions.copyLink' | 'contentActions.copyLinkDescription' | 'contentActions.copyLlms' | 'contentActions.copyLlmsDescription' | 'contentActions.copiedLlms' | 'contentActions.editPage' | 'contentActions.editPageDescription' | 'contentActions.copyOptions' | 'contentActions.copiedContent' | 'contentActions.copiedLink' | 'contentActions.viewMarkdown' | 'contentActions.viewMarkdownDescription' | 'contentActions.viewOpenApi' | 'contentActions.viewOpenApiDescription' | 'feedback.no' | 'feedback.prompt' | 'feedback.thanks' | 'feedback.yes' | 'navigation.documentation' | 'navigation.next' | 'navigation.previous' | 'navigation.previousNext' | 'navigation.toggle' | 'navbar.home' | 'navbar.openLinks' | 'navbar.sections' | 'notFound.description' | 'notFound.home' | 'notFound.label' | 'notFound.title' | 'openapi.apiDocumentation' | 'openapi.bodyProperties' | 'openapi.collapse' | 'openapi.endpointNotFound' | 'openapi.example' | 'openapi.expand' | 'openapi.headers' | 'openapi.language' | 'openapi.client' | 'openapi.mediaType' | 'openapi.none' | 'openapi.openApiReference' | 'openapi.operationParameter' | 'openapi.optional' | 'openapi.parameter' | 'openapi.pathParameters' | 'openapi.queryParameters' | 'openapi.request' | 'openapi.requestBody' | 'openapi.responseBodyProperties' | 'openapi.required' | 'openapi.requiredBadge' | 'openapi.response' | 'openapi.responses' | 'openapi.schemaExample' | 'openapi.scrollExamplesLeft' | 'openapi.scrollExamplesRight' | 'openapi.specNotFound' | 'openapi.specPathMissing' | 'openapi.status' | 'openapi.version' | 'search.button' | 'search.noResults' | 'search.placeholder' | 'search.shortcutCtrl' | 'renderError.componentStack' | 'renderError.description' | 'renderError.details' | 'renderError.message' | 'renderError.path' | 'renderError.reload' | 'renderError.stack' | 'renderError.title' | 'renderError.version' | 'renderError.type' | 'theme.switchToDark' | 'theme.switchToLight' | 'theme.switchToSystem' | 'language.switch' | 'mermaid.zoomIn' | 'mermaid.zoomOut' | 'mermaid.resetZoom' | 'mermaid.renderError' | 'mermaid.scrollHint';
|
|
2
|
+
export type BuiltInTextKey = 'actions.code' | 'actions.copy' | 'actions.copied' | 'builtWith.label' | 'builtWith.prefix' | 'callout.danger' | 'callout.info' | 'callout.note' | 'callout.success' | 'callout.tip' | 'callout.warning' | 'contentActions.copyContent' | 'contentActions.copyContentDescription' | 'contentActions.copyLink' | 'contentActions.copyLinkDescription' | 'contentActions.copyLlms' | 'contentActions.copyLlmsDescription' | 'contentActions.copiedLlms' | 'contentActions.editPage' | 'contentActions.editPageDescription' | 'contentActions.copyOptions' | 'contentActions.copiedContent' | 'contentActions.copiedLink' | 'contentActions.viewMarkdown' | 'contentActions.viewMarkdownDescription' | 'contentActions.viewOpenApi' | 'contentActions.viewOpenApiDescription' | 'feedback.no' | 'feedback.prompt' | 'feedback.thanks' | 'feedback.yes' | 'navigation.documentation' | 'navigation.next' | 'navigation.previous' | 'navigation.previousNext' | 'navigation.toggle' | 'navbar.home' | 'navbar.openLinks' | 'navbar.sections' | 'notFound.description' | 'notFound.home' | 'notFound.label' | 'notFound.title' | 'openapi.apiDocumentation' | 'openapi.bodyProperties' | 'openapi.collapse' | 'openapi.endpointNotFound' | 'openapi.example' | 'openapi.expand' | 'openapi.headers' | 'openapi.language' | 'openapi.client' | 'openapi.loading' | 'openapi.mediaType' | 'openapi.none' | 'openapi.openApiReference' | 'openapi.operationParameter' | 'openapi.optional' | 'openapi.parameter' | 'openapi.pathParameters' | 'openapi.queryParameters' | 'openapi.request' | 'openapi.requestBody' | 'openapi.requestBodyEmpty' | 'openapi.responseBodyProperties' | 'openapi.required' | 'openapi.requiredBadge' | 'openapi.response' | 'openapi.responses' | 'openapi.schemaExample' | 'openapi.scrollExamplesLeft' | 'openapi.scrollExamplesRight' | 'openapi.specNotFound' | 'openapi.specPathMissing' | 'openapi.status' | 'openapi.version' | 'openapi.webhookResponse' | 'openapi.webhookResponses' | 'search.button' | 'search.noResults' | 'search.placeholder' | 'search.shortcutCtrl' | 'renderError.componentStack' | 'renderError.description' | 'renderError.details' | 'renderError.message' | 'renderError.path' | 'renderError.reload' | 'renderError.stack' | 'renderError.title' | 'renderError.version' | 'renderError.type' | 'theme.switchToDark' | 'theme.switchToLight' | 'theme.switchToSystem' | 'language.switch' | 'mermaid.zoomIn' | 'mermaid.zoomOut' | 'mermaid.resetZoom' | 'mermaid.renderError' | 'mermaid.scrollHint';
|
|
3
3
|
export declare function resolveBuiltInLocale(locale?: string): BuiltInLocale;
|
|
4
4
|
export declare function translateBuiltInText(locale: string | undefined, key: BuiltInTextKey, replacements?: Record<string, string>): string;
|
|
5
5
|
export declare function useBuiltInText(locale?: string): (key: BuiltInTextKey, replacements?: Record<string, string>) => string;
|
package/output/core/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { ConfigContext, LocaleContext,
|
|
1
|
+
export { ConfigContext, LocaleContext, OpenApiSpecsContext, useConfig, useOpenApiSpecs } from './context';
|
|
2
2
|
export { resolveBuiltInLocale, translateBuiltInText, useBuiltInText } from './i18n';
|
|
3
3
|
export type * from './types';
|