@geenius/docs 0.8.10 → 0.11.0
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/CHANGELOG.md +18 -0
- package/package.json +32 -20
- package/packages/convex/dist/index.d.ts +4 -4
- package/packages/convex/dist/index.js.map +1 -1
- package/packages/react/dist/index.css +2 -0
- package/packages/react/dist/index.css.map +1 -0
- package/packages/react/dist/index.d.ts +67 -49
- package/packages/react/dist/index.js +267 -172
- package/packages/react/dist/index.js.map +1 -1
- package/packages/react-css/dist/index.css +30 -18
- package/packages/react-css/dist/index.css.map +1 -1
- package/packages/react-css/dist/index.d.ts +68 -33
- package/packages/react-css/dist/index.js +61 -38
- package/packages/react-css/dist/index.js.map +1 -1
- package/packages/shared/dist/{chunk-BR2XBF64.js → chunk-QKKVTCRJ.js} +2 -2
- package/packages/shared/dist/{chunk-BR2XBF64.js.map → chunk-QKKVTCRJ.js.map} +1 -1
- package/packages/shared/dist/index.d.ts +55 -10
- package/packages/shared/dist/index.js +52 -6
- package/packages/shared/dist/index.js.map +1 -1
- package/packages/shared/dist/providers.d.ts +4 -4
- package/packages/shared/dist/providers.js +1 -1
- package/packages/shared/dist/providers.js.map +1 -1
- package/packages/shared/dist/{types-n-Ryn258.d.ts → types-D8ITXVwj.d.ts} +1 -1
- package/packages/solidjs/dist/index.css +2 -0
- package/packages/solidjs/dist/index.css.map +1 -0
- package/packages/solidjs/dist/index.d.ts +57 -27
- package/packages/solidjs/dist/index.js +231 -154
- package/packages/solidjs/dist/index.js.map +1 -1
- package/packages/solidjs-css/dist/index.css +30 -18
- package/packages/solidjs-css/dist/index.css.map +1 -1
- package/packages/solidjs-css/dist/index.d.ts +55 -20
- package/packages/solidjs-css/dist/index.js +34 -25
- package/packages/solidjs-css/dist/index.js.map +1 -1
|
@@ -1,21 +1,27 @@
|
|
|
1
1
|
import { For, Show, createSignal, createUniqueId, createMemo, createEffect, children, onCleanup } from 'solid-js';
|
|
2
|
+
import { clsx } from 'clsx';
|
|
3
|
+
import { twMerge } from 'tailwind-merge';
|
|
2
4
|
import { jsx, jsxs, Fragment } from 'solid-js/h/jsx-runtime';
|
|
3
5
|
import remarkGfm from 'remark-gfm';
|
|
6
|
+
import { Dynamic } from 'solid-js/web';
|
|
4
7
|
import { SolidMarkdown } from 'solid-markdown';
|
|
5
8
|
import { AnimatePresence, motion } from '@geenius/motion/solidjs';
|
|
6
9
|
|
|
7
10
|
// src/components/Breadcrumbs.tsx
|
|
11
|
+
function cn(...inputs) {
|
|
12
|
+
return twMerge(clsx(inputs));
|
|
13
|
+
}
|
|
8
14
|
function Breadcrumbs(props) {
|
|
9
15
|
if (props.items.length === 0) {
|
|
10
16
|
return null;
|
|
11
17
|
}
|
|
12
|
-
return /* @__PURE__ */ jsx("nav", { class: "flex items-center gap-1.5 text-sm", "aria-label": "Breadcrumb", children: /* @__PURE__ */ jsx(For, { each: props.items, children: (item, idx) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
13
|
-
/* @__PURE__ */ jsx(Show, { when: idx() > 0, children: /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", class: "h-3.5 w-3.5 shrink-0 text-
|
|
14
|
-
/* @__PURE__ */ jsx(Show, { when: idx() === props.items.length - 1, fallback: /* @__PURE__ */ jsx("a", { href: item.href, class: "truncate text-
|
|
18
|
+
return /* @__PURE__ */ jsx("nav", { class: cn("flex items-center gap-1.5 text-sm", props.class), "aria-label": "Breadcrumb", children: /* @__PURE__ */ jsx(For, { each: props.items, children: (item, idx) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19
|
+
/* @__PURE__ */ jsx(Show, { when: idx() > 0, children: /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", class: "h-3.5 w-3.5 shrink-0 text-foreground/20", viewBox: "0 0 16 16", fill: "none", children: /* @__PURE__ */ jsx("path", { d: "M6 4l4 4-4 4", stroke: "currentColor", "stroke-width": "1.5" }) }) }),
|
|
20
|
+
/* @__PURE__ */ jsx(Show, { when: idx() === props.items.length - 1, fallback: /* @__PURE__ */ jsx("a", { href: item.href, class: "truncate text-foreground/40 transition-colors hover:text-foreground/70", children: item.title }), children: /* @__PURE__ */ jsx("span", { class: "truncate text-foreground/60", children: item.title }) })
|
|
15
21
|
] }) }) });
|
|
16
22
|
}
|
|
17
23
|
|
|
18
|
-
// ../shared/dist/chunk-
|
|
24
|
+
// ../shared/dist/chunk-QKKVTCRJ.js
|
|
19
25
|
function toTocLevel(level) {
|
|
20
26
|
if (level === 2 || level === 3 || level === 4) {
|
|
21
27
|
return level;
|
|
@@ -173,11 +179,11 @@ function createHeading(Tag, className) {
|
|
|
173
179
|
return (props) => {
|
|
174
180
|
const text = getNodeText(props.children);
|
|
175
181
|
const id = slugify(text);
|
|
176
|
-
return /* @__PURE__ */ jsx(
|
|
182
|
+
return /* @__PURE__ */ jsx(Dynamic, { component: Tag, id, class: cn(className), children: /* @__PURE__ */ jsx("a", { href: `#${id}`, class: "transition-colors hover:text-primary", children: props.children }) });
|
|
177
183
|
};
|
|
178
184
|
}
|
|
179
185
|
function DocPage(props) {
|
|
180
|
-
return /* @__PURE__ */ jsx("article", { class: "prose-custom max-w-none", children: /* @__PURE__ */ jsx(
|
|
186
|
+
return /* @__PURE__ */ jsx("article", { class: cn("prose-custom max-w-none", props.class), children: /* @__PURE__ */ jsx(
|
|
181
187
|
SolidMarkdown,
|
|
182
188
|
{
|
|
183
189
|
remarkPlugins: [remarkGfm],
|
|
@@ -185,27 +191,27 @@ function DocPage(props) {
|
|
|
185
191
|
h1: createHeading("h1", "scroll-mt-20 mt-8 mb-4 text-3xl font-bold"),
|
|
186
192
|
h2: createHeading(
|
|
187
193
|
"h2",
|
|
188
|
-
"scroll-mt-20 mt-8 mb-3 border-b border-
|
|
194
|
+
"scroll-mt-20 mt-8 mb-3 border-b border-border/60 pb-2 text-2xl font-bold"
|
|
189
195
|
),
|
|
190
196
|
h3: createHeading("h3", "scroll-mt-20 mt-6 mb-2 text-xl font-semibold"),
|
|
191
197
|
h4: createHeading("h4", "scroll-mt-20 mt-4 mb-2 text-lg font-medium"),
|
|
192
|
-
p: (componentProps) => /* @__PURE__ */ jsx("p", { class: "my-3 leading-relaxed text-
|
|
198
|
+
p: (componentProps) => /* @__PURE__ */ jsx("p", { class: "my-3 leading-relaxed text-foreground/80", children: componentProps.children }),
|
|
193
199
|
a: (componentProps) => /* @__PURE__ */ jsx(
|
|
194
200
|
"a",
|
|
195
201
|
{
|
|
196
202
|
href: componentProps.href,
|
|
197
203
|
target: componentProps.href?.startsWith("/") ? void 0 : "_blank",
|
|
198
204
|
rel: componentProps.href?.startsWith("/") ? void 0 : "noreferrer noopener",
|
|
199
|
-
class: "underline underline-offset-2 transition-colors hover:text-
|
|
205
|
+
class: "underline underline-offset-2 transition-colors hover:text-primary",
|
|
200
206
|
children: componentProps.children
|
|
201
207
|
}
|
|
202
208
|
),
|
|
203
|
-
code: (componentProps) => componentProps.class ? /* @__PURE__ */ jsx("code", { class: componentProps.class, children: componentProps.children }) : /* @__PURE__ */ jsx("code", { class: "rounded bg-
|
|
204
|
-
pre: (componentProps) => /* @__PURE__ */ jsx("pre", { class: "my-4 overflow-x-auto rounded-lg bg-
|
|
205
|
-
blockquote: (componentProps) => /* @__PURE__ */ jsx("blockquote", { class: "my-4 rounded-r-lg border-l-4 border-
|
|
206
|
-
table: (componentProps) => /* @__PURE__ */ jsx("div", { class: "my-4 overflow-x-auto rounded-lg border border-
|
|
207
|
-
th: (componentProps) => /* @__PURE__ */ jsx("th", { class: "border-b border-
|
|
208
|
-
td: (componentProps) => /* @__PURE__ */ jsx("td", { class: "border-b border-
|
|
209
|
+
code: (componentProps) => componentProps.class ? /* @__PURE__ */ jsx("code", { class: componentProps.class, children: componentProps.children }) : /* @__PURE__ */ jsx("code", { class: "rounded bg-foreground/10 px-1.5 py-0.5 text-sm text-primary", children: componentProps.children }),
|
|
210
|
+
pre: (componentProps) => /* @__PURE__ */ jsx("pre", { class: "my-4 overflow-x-auto rounded-lg bg-background/80 p-4 text-sm leading-relaxed", children: componentProps.children }),
|
|
211
|
+
blockquote: (componentProps) => /* @__PURE__ */ jsx("blockquote", { class: "my-4 rounded-r-lg border-l-4 border-primary/40 bg-foreground/5 py-3 pl-4 pr-4 text-foreground/70 italic", children: componentProps.children }),
|
|
212
|
+
table: (componentProps) => /* @__PURE__ */ jsx("div", { class: "my-4 overflow-x-auto rounded-lg border border-border/60", children: /* @__PURE__ */ jsx("table", { class: "w-full text-sm", children: componentProps.children }) }),
|
|
213
|
+
th: (componentProps) => /* @__PURE__ */ jsx("th", { class: "border-b border-border/60 bg-foreground/5 px-4 py-2.5 text-left font-semibold", children: componentProps.children }),
|
|
214
|
+
td: (componentProps) => /* @__PURE__ */ jsx("td", { class: "border-b border-border/40 px-4 py-2 text-foreground/70 last:border-none", children: componentProps.children })
|
|
209
215
|
},
|
|
210
216
|
children: props.page.content
|
|
211
217
|
}
|
|
@@ -259,7 +265,7 @@ function DocSearch(props) {
|
|
|
259
265
|
if (!props.isOpen) {
|
|
260
266
|
return null;
|
|
261
267
|
}
|
|
262
|
-
return /* @__PURE__ */ jsx(AnimatePresence, { children: /* @__PURE__ */ jsxs("div", { class: "fixed inset-0 z-50 flex items-start justify-center pt-[15vh]", children: [
|
|
268
|
+
return /* @__PURE__ */ jsx(AnimatePresence, { children: /* @__PURE__ */ jsxs("div", { class: cn("fixed inset-0 z-50 flex items-start justify-center pt-[15vh]", props.class), children: [
|
|
263
269
|
/* @__PURE__ */ jsx(
|
|
264
270
|
motion.button,
|
|
265
271
|
{
|
|
@@ -268,7 +274,7 @@ function DocSearch(props) {
|
|
|
268
274
|
initial: { opacity: 0 },
|
|
269
275
|
animate: { opacity: 1 },
|
|
270
276
|
exit: { opacity: 0 },
|
|
271
|
-
class: "fixed inset-0 bg-
|
|
277
|
+
class: "fixed inset-0 bg-background/80 backdrop-blur-md",
|
|
272
278
|
onClick: () => {
|
|
273
279
|
props.onClose();
|
|
274
280
|
previousFocus?.focus();
|
|
@@ -283,16 +289,16 @@ function DocSearch(props) {
|
|
|
283
289
|
animate: { opacity: 1, scale: 1, y: 0 },
|
|
284
290
|
exit: { opacity: 0, scale: 0.95, y: -20 },
|
|
285
291
|
transition: { type: "spring", damping: 25, stiffness: 250 },
|
|
286
|
-
class: "relative z-10 w-full max-w-xl overflow-hidden rounded-2xl border border-
|
|
292
|
+
class: "relative z-10 w-full max-w-xl overflow-hidden rounded-2xl border border-border/60 bg-card/40 backdrop-blur-3xl shadow-2xl ring-1 ring-border/40",
|
|
287
293
|
role: "dialog",
|
|
288
294
|
"aria-modal": "true",
|
|
289
295
|
"aria-labelledby": `${dialogId}-title`,
|
|
290
296
|
onKeyDown: handleKeyDown,
|
|
291
297
|
onClick: (e) => e.stopPropagation(),
|
|
292
298
|
children: [
|
|
293
|
-
/* @__PURE__ */ jsxs("div", { class: "flex items-center gap-3 border-b border-
|
|
299
|
+
/* @__PURE__ */ jsxs("div", { class: "flex items-center gap-3 border-b border-border/60 px-5 py-4 bg-foreground/5", children: [
|
|
294
300
|
/* @__PURE__ */ jsx("h2", { id: `${dialogId}-title`, class: "sr-only", children: "Search documentation" }),
|
|
295
|
-
/* @__PURE__ */ jsx("svg", { "aria-hidden": "true", class: "h-5 w-5 shrink-0 text-
|
|
301
|
+
/* @__PURE__ */ jsx("svg", { "aria-hidden": "true", class: "h-5 w-5 shrink-0 text-foreground/40", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { "fill-rule": "evenodd", d: "M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z", "clip-rule": "evenodd" }) }),
|
|
296
302
|
/* @__PURE__ */ jsx(
|
|
297
303
|
"input",
|
|
298
304
|
{
|
|
@@ -304,10 +310,10 @@ function DocSearch(props) {
|
|
|
304
310
|
"aria-label": "Search documentation",
|
|
305
311
|
"aria-controls": `${dialogId}-results`,
|
|
306
312
|
"aria-activedescendant": activeResultId(),
|
|
307
|
-
class: "flex-1 bg-transparent text-sm text-
|
|
313
|
+
class: "flex-1 bg-transparent text-sm text-foreground placeholder:text-muted-foreground outline-none focus-visible:ring-0"
|
|
308
314
|
}
|
|
309
315
|
),
|
|
310
|
-
/* @__PURE__ */ jsx("kbd", { class: "rounded border border-
|
|
316
|
+
/* @__PURE__ */ jsx("kbd", { class: "rounded border border-border/60 bg-foreground/5 px-1.5 py-0.5 text-[11px] text-foreground/30 font-medium", children: "ESC" })
|
|
311
317
|
] }),
|
|
312
318
|
/* @__PURE__ */ jsxs(
|
|
313
319
|
"div",
|
|
@@ -323,7 +329,7 @@ function DocSearch(props) {
|
|
|
323
329
|
initial: { opacity: 0 },
|
|
324
330
|
animate: { opacity: 1 },
|
|
325
331
|
exit: { opacity: 0 },
|
|
326
|
-
class: "flex flex-col items-center py-10 text-center text-
|
|
332
|
+
class: "flex flex-col items-center py-10 text-center text-foreground/30",
|
|
327
333
|
children: [
|
|
328
334
|
/* @__PURE__ */ jsxs("svg", { "aria-hidden": "true", class: "mb-3 h-10 w-10 opacity-50", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: [
|
|
329
335
|
/* @__PURE__ */ jsx("circle", { cx: "11", cy: "11", r: "8", "stroke-width": "1.5" }),
|
|
@@ -344,7 +350,7 @@ function DocSearch(props) {
|
|
|
344
350
|
initial: { opacity: 0 },
|
|
345
351
|
animate: { opacity: 1 },
|
|
346
352
|
exit: { opacity: 0 },
|
|
347
|
-
class: "py-8 text-center text-sm text-
|
|
353
|
+
class: "py-8 text-center text-sm text-foreground/30",
|
|
348
354
|
children: "Start typing to search\u2026"
|
|
349
355
|
}
|
|
350
356
|
) })
|
|
@@ -361,41 +367,44 @@ function DocSearch(props) {
|
|
|
361
367
|
"aria-selected": idx() === activeIndex(),
|
|
362
368
|
onMouseEnter: () => setActiveIndex(idx()),
|
|
363
369
|
onClick: () => props.onSelect(result),
|
|
364
|
-
class:
|
|
370
|
+
class: cn(
|
|
371
|
+
"group relative my-0.5 flex w-full flex-col gap-1 rounded-xl px-4 py-3 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",
|
|
372
|
+
idx() === activeIndex() ? "bg-primary/15 text-foreground ring-1 ring-primary/30" : "text-muted-foreground hover:bg-muted hover:text-foreground"
|
|
373
|
+
),
|
|
365
374
|
children: [
|
|
366
375
|
/* @__PURE__ */ jsx(Show, { when: idx() === activeIndex(), children: /* @__PURE__ */ jsx(
|
|
367
376
|
motion.div,
|
|
368
377
|
{
|
|
369
378
|
layoutId: "search-active-bg",
|
|
370
|
-
class: "absolute inset-0 bg-
|
|
379
|
+
class: "absolute inset-0 rounded-xl bg-primary/10",
|
|
371
380
|
transition: { type: "spring", stiffness: 300, damping: 30 }
|
|
372
381
|
}
|
|
373
382
|
) }),
|
|
374
383
|
/* @__PURE__ */ jsxs("div", { class: "relative z-10 flex items-center gap-2", children: [
|
|
375
|
-
/* @__PURE__ */ jsx("span", { class: "rounded bg-
|
|
384
|
+
/* @__PURE__ */ jsx("span", { class: "rounded bg-primary/20 px-1.5 py-0.5 text-[10px] font-medium text-primary", children: result.sectionTitle }),
|
|
376
385
|
/* @__PURE__ */ jsx("span", { class: "text-sm font-medium", children: result.pageTitle })
|
|
377
386
|
] }),
|
|
378
|
-
/* @__PURE__ */ jsx("p", { class: "relative z-10 truncate text-xs text-
|
|
379
|
-
/* @__PURE__ */ jsx(Show, { when: result.tags.length > 0, children: /* @__PURE__ */ jsx("div", { class: "relative z-10 flex gap-1 mt-1", children: /* @__PURE__ */ jsx(For, { each: result.tags.slice(0, 3), children: (tag) => /* @__PURE__ */ jsx("span", { class: "rounded bg-
|
|
387
|
+
/* @__PURE__ */ jsx("p", { class: "relative z-10 truncate text-xs text-foreground/40", children: highlightMatch(result.highlight, props.query) }),
|
|
388
|
+
/* @__PURE__ */ jsx(Show, { when: result.tags.length > 0, children: /* @__PURE__ */ jsx("div", { class: "relative z-10 flex gap-1 mt-1", children: /* @__PURE__ */ jsx(For, { each: result.tags.slice(0, 3), children: (tag) => /* @__PURE__ */ jsx("span", { class: "rounded border border-border bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground", children: tag }) }) }) })
|
|
380
389
|
]
|
|
381
390
|
}
|
|
382
391
|
) })
|
|
383
392
|
]
|
|
384
393
|
}
|
|
385
394
|
),
|
|
386
|
-
/* @__PURE__ */ jsxs("div", { class: "flex items-center gap-4 border-t border-
|
|
395
|
+
/* @__PURE__ */ jsxs("div", { class: "flex items-center gap-4 border-t border-border/60 px-5 py-2.5 text-[11px] text-foreground/30 bg-background/70", children: [
|
|
387
396
|
/* @__PURE__ */ jsxs("span", { class: "flex items-center gap-1", children: [
|
|
388
|
-
/* @__PURE__ */ jsx("kbd", { class: "rounded border border-
|
|
397
|
+
/* @__PURE__ */ jsx("kbd", { class: "rounded border border-border/60 bg-foreground/5 px-1 pb-0.5 text-[10px]", children: "\u2191" }),
|
|
389
398
|
" ",
|
|
390
|
-
/* @__PURE__ */ jsx("kbd", { class: "rounded border border-
|
|
399
|
+
/* @__PURE__ */ jsx("kbd", { class: "rounded border border-border/60 bg-foreground/5 px-1 pb-0.5 text-[10px]", children: "\u2193" }),
|
|
391
400
|
" navigate"
|
|
392
401
|
] }),
|
|
393
402
|
/* @__PURE__ */ jsxs("span", { class: "flex items-center gap-1", children: [
|
|
394
|
-
/* @__PURE__ */ jsx("kbd", { class: "rounded border border-
|
|
403
|
+
/* @__PURE__ */ jsx("kbd", { class: "rounded border border-border/60 bg-foreground/5 px-1 pb-0.5 text-[10px]", children: "\u21B5" }),
|
|
395
404
|
" select"
|
|
396
405
|
] }),
|
|
397
406
|
/* @__PURE__ */ jsxs("span", { class: "flex items-center gap-1", children: [
|
|
398
|
-
/* @__PURE__ */ jsx("kbd", { class: "rounded border border-
|
|
407
|
+
/* @__PURE__ */ jsx("kbd", { class: "rounded border border-border/60 bg-foreground/5 px-1 pb-0.5 text-[10px]", children: "esc" }),
|
|
399
408
|
" close"
|
|
400
409
|
] })
|
|
401
410
|
] })
|
|
@@ -427,18 +436,22 @@ function DocSidebar(props) {
|
|
|
427
436
|
{
|
|
428
437
|
type: "button",
|
|
429
438
|
onClick: () => toggle(section.id),
|
|
430
|
-
|
|
439
|
+
"aria-expanded": hasContent() ? isExpanded() : void 0,
|
|
440
|
+
class: cn(
|
|
441
|
+
"flex w-full items-center gap-2 rounded-xl px-3 py-2 text-left text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",
|
|
442
|
+
isExpanded() ? "bg-muted text-foreground" : "text-foreground hover:bg-muted/70"
|
|
443
|
+
),
|
|
431
444
|
whileHover: { x: 2 },
|
|
432
445
|
whileTap: { scale: 0.98 },
|
|
433
446
|
children: [
|
|
434
447
|
/* @__PURE__ */ jsx(Show, { when: section.icon, children: /* @__PURE__ */ jsx("span", { class: "text-base", children: section.icon }) }),
|
|
435
|
-
/* @__PURE__ */ jsx("span", { class: "flex-1 truncate
|
|
436
|
-
/* @__PURE__ */ jsx(Show, { when: section.pageCount != null, children: /* @__PURE__ */ jsx("span", { class: "text-xs tabular-nums opacity-50
|
|
448
|
+
/* @__PURE__ */ jsx("span", { class: "flex-1 truncate", children: section.title }),
|
|
449
|
+
/* @__PURE__ */ jsx(Show, { when: section.pageCount != null, children: /* @__PURE__ */ jsx("span", { class: "text-xs tabular-nums opacity-50 text-muted-foreground", children: section.pageCount }) }),
|
|
437
450
|
/* @__PURE__ */ jsx(Show, { when: hasContent(), children: /* @__PURE__ */ jsx(
|
|
438
451
|
motion.svg,
|
|
439
452
|
{
|
|
440
453
|
animate: { rotate: isExpanded() ? 90 : 0 },
|
|
441
|
-
class: "h-3.5 w-3.5 shrink-0 text-
|
|
454
|
+
class: "h-3.5 w-3.5 shrink-0 text-muted-foreground",
|
|
442
455
|
viewBox: "0 0 16 16",
|
|
443
456
|
fill: "currentColor",
|
|
444
457
|
children: /* @__PURE__ */ jsx("path", { d: "M6 4l4 4-4 4", stroke: "currentColor", "stroke-width": "2", fill: "none" })
|
|
@@ -454,7 +467,7 @@ function DocSidebar(props) {
|
|
|
454
467
|
animate: { height: "auto", opacity: 1 },
|
|
455
468
|
exit: { height: 0, opacity: 0 },
|
|
456
469
|
transition: { duration: 0.2, ease: "easeInOut" },
|
|
457
|
-
class: "ml-2 overflow-hidden border-l border-
|
|
470
|
+
class: "ml-2 overflow-hidden border-l border-border pl-2",
|
|
458
471
|
children: [
|
|
459
472
|
/* @__PURE__ */ jsx(For, { each: pages(), children: (page) => /* @__PURE__ */ jsx(
|
|
460
473
|
motion.button,
|
|
@@ -463,7 +476,10 @@ function DocSidebar(props) {
|
|
|
463
476
|
onClick: () => props.onNavigate(page, section),
|
|
464
477
|
whileHover: { x: 2 },
|
|
465
478
|
whileTap: { scale: 0.98 },
|
|
466
|
-
class:
|
|
479
|
+
class: cn(
|
|
480
|
+
"my-0.5 flex w-full items-center gap-2 rounded-lg px-3 py-1.5 text-left text-sm transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",
|
|
481
|
+
props.currentPageId === page.id ? "bg-primary/10 font-semibold text-primary ring-1 ring-primary/20" : "text-muted-foreground hover:bg-muted hover:text-foreground"
|
|
482
|
+
),
|
|
467
483
|
children: /* @__PURE__ */ jsx("span", { class: "truncate", children: page.title })
|
|
468
484
|
}
|
|
469
485
|
) }),
|
|
@@ -473,8 +489,8 @@ function DocSidebar(props) {
|
|
|
473
489
|
) }) })
|
|
474
490
|
] });
|
|
475
491
|
};
|
|
476
|
-
return /* @__PURE__ */ jsxs("nav", { class: "flex flex-col gap-1 py-4", children: [
|
|
477
|
-
/* @__PURE__ */ jsx("div", { class: "px-4 pb-3 text-xs font-bold uppercase tracking-widest text-
|
|
492
|
+
return /* @__PURE__ */ jsxs("nav", { class: cn("flex flex-col gap-1 py-4", props.class), children: [
|
|
493
|
+
/* @__PURE__ */ jsx("div", { class: "px-4 pb-3 text-xs font-bold uppercase tracking-widest text-muted-foreground", children: "Documentation" }),
|
|
478
494
|
/* @__PURE__ */ jsx(For, { each: topLevel(), children: (s) => renderSection(s, 0) })
|
|
479
495
|
] });
|
|
480
496
|
}
|
|
@@ -486,7 +502,10 @@ function TocLink(props) {
|
|
|
486
502
|
motion.a,
|
|
487
503
|
{
|
|
488
504
|
href: `#${props.item.id}`,
|
|
489
|
-
class:
|
|
505
|
+
class: cn(
|
|
506
|
+
"block truncate border-l-2 py-1 text-[13px] transition-all relative",
|
|
507
|
+
isActive() ? "border-primary text-primary font-medium" : "border-transparent text-foreground/40 hover:text-foreground/80 hover:border-border/80"
|
|
508
|
+
),
|
|
490
509
|
style: { "padding-left": `${12 + depth() * 12}px` },
|
|
491
510
|
whileHover: { x: 2 },
|
|
492
511
|
whileTap: { scale: 0.98 },
|
|
@@ -501,8 +520,8 @@ function TableOfContents(props) {
|
|
|
501
520
|
if (props.toc.length === 0) {
|
|
502
521
|
return null;
|
|
503
522
|
}
|
|
504
|
-
return /* @__PURE__ */ jsxs("nav", { class: "sticky top-24", children: [
|
|
505
|
-
/* @__PURE__ */ jsx("h4", { class: "mb-3 text-xs font-semibold uppercase tracking-widest text-
|
|
523
|
+
return /* @__PURE__ */ jsxs("nav", { class: cn("sticky top-24", props.class), children: [
|
|
524
|
+
/* @__PURE__ */ jsx("h4", { class: "mb-3 text-xs font-semibold uppercase tracking-widest text-foreground/40", children: "On this page" }),
|
|
506
525
|
/* @__PURE__ */ jsx(motion.div, { class: "flex flex-col relative", layoutRoot: true, children: /* @__PURE__ */ jsx(AnimatePresence, { children: /* @__PURE__ */ jsx(For, { each: props.toc, children: (item) => /* @__PURE__ */ jsx(motion.div, { initial: { opacity: 0, x: -10 }, animate: { opacity: 1, x: 0 }, children: /* @__PURE__ */ jsx(TocLink, { item, activeId: props.activeId }) }) }) }) })
|
|
507
526
|
] });
|
|
508
527
|
}
|
|
@@ -510,8 +529,8 @@ function DocsLayout(props) {
|
|
|
510
529
|
const resolvedChildren = children(() => props.children);
|
|
511
530
|
const breadcrumbs = () => props.breadcrumbs ?? [];
|
|
512
531
|
const toc = () => props.toc ?? [];
|
|
513
|
-
return /* @__PURE__ */ jsxs("div", { class: "flex min-h-screen bg-
|
|
514
|
-
/* @__PURE__ */ jsx("aside", { class: "sticky top-0 hidden h-screen w-[260px] shrink-0 overflow-y-auto border-r border-
|
|
532
|
+
return /* @__PURE__ */ jsxs("div", { class: cn("flex min-h-screen bg-background text-foreground", props.class), children: [
|
|
533
|
+
/* @__PURE__ */ jsx("aside", { class: "sticky top-0 hidden h-screen w-[260px] shrink-0 overflow-y-auto border-r border-border bg-card lg:block", children: /* @__PURE__ */ jsx(
|
|
515
534
|
DocSidebar,
|
|
516
535
|
{
|
|
517
536
|
sections: props.sections,
|
|
@@ -565,7 +584,10 @@ function EditButton(props) {
|
|
|
565
584
|
href: `${props.editUrl.replace(/\/$/, "")}/${props.pageSlug}.mdx`,
|
|
566
585
|
target: "_blank",
|
|
567
586
|
rel: "noopener noreferrer",
|
|
568
|
-
class:
|
|
587
|
+
class: cn(
|
|
588
|
+
"inline-flex items-center gap-1.5 rounded-lg border border-border/60 px-3 py-1.5 text-xs text-foreground/40 transition-colors hover:border-border/80 hover:text-foreground/60",
|
|
589
|
+
props.class
|
|
590
|
+
),
|
|
569
591
|
children: [
|
|
570
592
|
/* @__PURE__ */ jsx("svg", { "aria-hidden": "true", class: "h-3.5 w-3.5", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M11.5 1.5l3 3-9 9H2.5v-3l9-9z", "stroke-width": "1.5", "stroke-linejoin": "round" }) }),
|
|
571
593
|
"Edit this page"
|
|
@@ -577,14 +599,14 @@ function PageNavigation(props) {
|
|
|
577
599
|
if (!props.prev && !props.next) {
|
|
578
600
|
return null;
|
|
579
601
|
}
|
|
580
|
-
return /* @__PURE__ */ jsxs("div", { class: "mt-12 flex items-stretch gap-4 border-t border-
|
|
581
|
-
/* @__PURE__ */ jsx(Show, { when: props.prev, fallback: /* @__PURE__ */ jsx("div", { class: "flex-1" }), children: (prev) => /* @__PURE__ */ jsxs("a", { href: prev().href, class: "group flex flex-1 flex-col rounded-xl border border-
|
|
582
|
-
/* @__PURE__ */ jsx("span", { class: "text-xs text-
|
|
583
|
-
/* @__PURE__ */ jsx("span", { class: "mt-1 text-sm font-medium text-
|
|
602
|
+
return /* @__PURE__ */ jsxs("div", { class: cn("mt-12 flex items-stretch gap-4 border-t border-border/60 pt-8", props.class), children: [
|
|
603
|
+
/* @__PURE__ */ jsx(Show, { when: props.prev, fallback: /* @__PURE__ */ jsx("div", { class: "flex-1" }), children: (prev) => /* @__PURE__ */ jsxs("a", { href: prev().href, class: "group flex flex-1 flex-col rounded-xl border border-border/60 p-4 transition-all hover:border-primary/40 hover:bg-foreground/5", children: [
|
|
604
|
+
/* @__PURE__ */ jsx("span", { class: "text-xs text-foreground/40 group-hover:text-primary transition-colors", children: "\u2190 Previous" }),
|
|
605
|
+
/* @__PURE__ */ jsx("span", { class: "mt-1 text-sm font-medium text-foreground/80 group-hover:text-foreground transition-colors truncate", children: prev().title })
|
|
584
606
|
] }) }),
|
|
585
|
-
/* @__PURE__ */ jsx(Show, { when: props.next, fallback: /* @__PURE__ */ jsx("div", { class: "flex-1" }), children: (next) => /* @__PURE__ */ jsxs("a", { href: next().href, class: "group flex flex-1 flex-col items-end rounded-xl border border-
|
|
586
|
-
/* @__PURE__ */ jsx("span", { class: "text-xs text-
|
|
587
|
-
/* @__PURE__ */ jsx("span", { class: "mt-1 text-sm font-medium text-
|
|
607
|
+
/* @__PURE__ */ jsx(Show, { when: props.next, fallback: /* @__PURE__ */ jsx("div", { class: "flex-1" }), children: (next) => /* @__PURE__ */ jsxs("a", { href: next().href, class: "group flex flex-1 flex-col items-end rounded-xl border border-border/60 p-4 text-right transition-all hover:border-primary/40 hover:bg-foreground/5", children: [
|
|
608
|
+
/* @__PURE__ */ jsx("span", { class: "text-xs text-foreground/40 group-hover:text-primary transition-colors", children: "Next \u2192" }),
|
|
609
|
+
/* @__PURE__ */ jsx("span", { class: "mt-1 text-sm font-medium text-foreground/80 group-hover:text-foreground transition-colors truncate", children: next().title })
|
|
588
610
|
] }) })
|
|
589
611
|
] });
|
|
590
612
|
}
|
|
@@ -593,13 +615,20 @@ function VersionSelector(props) {
|
|
|
593
615
|
return null;
|
|
594
616
|
}
|
|
595
617
|
const [isOpen, setIsOpen] = createSignal(false);
|
|
596
|
-
|
|
618
|
+
const menuId = createUniqueId();
|
|
619
|
+
return /* @__PURE__ */ jsxs("div", { class: cn("relative", props.class), children: [
|
|
597
620
|
/* @__PURE__ */ jsxs(
|
|
598
621
|
"button",
|
|
599
622
|
{
|
|
600
623
|
type: "button",
|
|
601
624
|
onClick: () => setIsOpen(!isOpen()),
|
|
602
|
-
|
|
625
|
+
"aria-expanded": isOpen(),
|
|
626
|
+
"aria-haspopup": "listbox",
|
|
627
|
+
"aria-controls": menuId,
|
|
628
|
+
class: cn(
|
|
629
|
+
"flex items-center gap-1.5 rounded-lg border border-border bg-card/60 px-3 py-1.5 text-xs font-medium text-muted-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",
|
|
630
|
+
isOpen() && "border-primary/30 text-foreground"
|
|
631
|
+
),
|
|
603
632
|
children: [
|
|
604
633
|
/* @__PURE__ */ jsxs("span", { children: [
|
|
605
634
|
"v",
|
|
@@ -609,7 +638,7 @@ function VersionSelector(props) {
|
|
|
609
638
|
"svg",
|
|
610
639
|
{
|
|
611
640
|
"aria-hidden": "true",
|
|
612
|
-
class:
|
|
641
|
+
class: cn("h-3 w-3 transition-transform", isOpen() && "rotate-180"),
|
|
613
642
|
viewBox: "0 0 16 16",
|
|
614
643
|
children: /* @__PURE__ */ jsx("path", { d: "M4 6l4 4 4-4", stroke: "currentColor", "stroke-width": "2", fill: "none" })
|
|
615
644
|
}
|
|
@@ -617,22 +646,41 @@ function VersionSelector(props) {
|
|
|
617
646
|
]
|
|
618
647
|
}
|
|
619
648
|
),
|
|
620
|
-
/* @__PURE__ */ jsx(Show, { when: isOpen(), children: /* @__PURE__ */ jsx(
|
|
621
|
-
"
|
|
649
|
+
/* @__PURE__ */ jsx(Show, { when: isOpen(), children: /* @__PURE__ */ jsx(
|
|
650
|
+
"div",
|
|
622
651
|
{
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
652
|
+
id: menuId,
|
|
653
|
+
role: "listbox",
|
|
654
|
+
class: "absolute right-0 top-full z-20 mt-1 min-w-[120px] overflow-hidden rounded-lg border border-border bg-popover shadow-xl",
|
|
655
|
+
onKeyDown: (event) => {
|
|
656
|
+
if (event.key === "Escape") {
|
|
657
|
+
event.preventDefault();
|
|
658
|
+
setIsOpen(false);
|
|
659
|
+
}
|
|
627
660
|
},
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
661
|
+
children: /* @__PURE__ */ jsx(For, { each: props.versions, children: (v) => /* @__PURE__ */ jsxs(
|
|
662
|
+
"button",
|
|
663
|
+
{
|
|
664
|
+
type: "button",
|
|
665
|
+
role: "option",
|
|
666
|
+
"aria-selected": v === props.current,
|
|
667
|
+
onClick: () => {
|
|
668
|
+
props.onSelect(v);
|
|
669
|
+
setIsOpen(false);
|
|
670
|
+
},
|
|
671
|
+
class: cn(
|
|
672
|
+
"flex w-full items-center px-3 py-2 text-xs transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring/40",
|
|
673
|
+
v === props.current ? "bg-primary/15 text-primary" : "text-muted-foreground hover:bg-muted hover:text-foreground"
|
|
674
|
+
),
|
|
675
|
+
children: [
|
|
676
|
+
"v",
|
|
677
|
+
v,
|
|
678
|
+
v === props.current && /* @__PURE__ */ jsx("span", { class: "ml-auto text-[10px]", children: "\u2713" })
|
|
679
|
+
]
|
|
680
|
+
}
|
|
681
|
+
) })
|
|
634
682
|
}
|
|
635
|
-
) })
|
|
683
|
+
) })
|
|
636
684
|
] });
|
|
637
685
|
}
|
|
638
686
|
function createDocSearch(searchFn, debounceMs = 250) {
|
|
@@ -681,8 +729,8 @@ function DocSearchPage(props) {
|
|
|
681
729
|
Show,
|
|
682
730
|
{
|
|
683
731
|
when: props.tree() !== void 0,
|
|
684
|
-
fallback: /* @__PURE__ */ jsx("div", { class: "min-h-screen bg-
|
|
685
|
-
children: /* @__PURE__ */ jsx("div", { class: "min-h-screen bg-
|
|
732
|
+
fallback: /* @__PURE__ */ jsx("div", { class: cn("min-h-screen bg-background px-6 py-16", props.class), children: /* @__PURE__ */ jsx("div", { class: "mx-auto max-w-2xl", children: /* @__PURE__ */ jsx("div", { class: "mb-8 h-12 animate-pulse rounded-xl bg-foreground/5" }) }) }),
|
|
733
|
+
children: /* @__PURE__ */ jsx("div", { class: cn("min-h-screen bg-background text-foreground", props.class), children: /* @__PURE__ */ jsxs("div", { class: "mx-auto max-w-2xl px-6 py-16", children: [
|
|
686
734
|
/* @__PURE__ */ jsx("h1", { class: "mb-8 text-2xl font-bold", children: "Search Documentation" }),
|
|
687
735
|
/* @__PURE__ */ jsxs("div", { class: "relative mb-8", children: [
|
|
688
736
|
/* @__PURE__ */ jsx(
|
|
@@ -693,10 +741,11 @@ function DocSearchPage(props) {
|
|
|
693
741
|
onInput: (e) => setQuery(e.currentTarget.value),
|
|
694
742
|
placeholder: "Type to search\u2026",
|
|
695
743
|
autofocus: true,
|
|
696
|
-
|
|
744
|
+
"aria-label": "Search documentation",
|
|
745
|
+
class: "w-full rounded-xl border border-border bg-card/60 py-3.5 pl-12 pr-4 text-sm text-foreground placeholder:text-muted-foreground outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20"
|
|
697
746
|
}
|
|
698
747
|
),
|
|
699
|
-
/* @__PURE__ */ jsx(Show, { when: isSearching(), children: /* @__PURE__ */ jsx("div", { class: "absolute right-4 top-1/2 -translate-y-1/2", children: /* @__PURE__ */ jsx("div", { class: "h-4 w-4 animate-spin rounded-full border-2 border-
|
|
748
|
+
/* @__PURE__ */ jsx(Show, { when: isSearching(), children: /* @__PURE__ */ jsx("div", { class: "absolute right-4 top-1/2 -translate-y-1/2", children: /* @__PURE__ */ jsx("div", { class: "h-4 w-4 animate-spin rounded-full border-2 border-border/60 border-t-primary" }) }) })
|
|
700
749
|
] }),
|
|
701
750
|
/* @__PURE__ */ jsx(Show, { when: results().length > 0, children: /* @__PURE__ */ jsx("div", { class: "space-y-2", children: /* @__PURE__ */ jsx(For, { each: results(), children: (result) => {
|
|
702
751
|
const section = () => sections().find((s) => s.slug === result.sectionSlug);
|
|
@@ -710,24 +759,24 @@ function DocSearchPage(props) {
|
|
|
710
759
|
const s = section();
|
|
711
760
|
if (p && s && props.onSelectPage) props.onSelectPage(p, s);
|
|
712
761
|
},
|
|
713
|
-
class: "flex w-full flex-col gap-1.5 rounded-xl border border-
|
|
762
|
+
class: "flex w-full flex-col gap-1.5 rounded-xl border border-border bg-card/40 p-4 text-left transition-all hover:border-primary/20 hover:bg-card",
|
|
714
763
|
children: [
|
|
715
764
|
/* @__PURE__ */ jsxs("div", { class: "flex items-center gap-2", children: [
|
|
716
|
-
/* @__PURE__ */ jsx("span", { class: "rounded bg-
|
|
717
|
-
/* @__PURE__ */ jsx("span", { class: "text-sm font-medium text-
|
|
765
|
+
/* @__PURE__ */ jsx("span", { class: "rounded bg-primary/20 px-2 py-0.5 text-[10px] font-medium text-primary", children: result.sectionTitle }),
|
|
766
|
+
/* @__PURE__ */ jsx("span", { class: "text-sm font-medium text-foreground/90", children: result.pageTitle })
|
|
718
767
|
] }),
|
|
719
|
-
/* @__PURE__ */ jsx("p", { class: "text-xs leading-relaxed text-
|
|
768
|
+
/* @__PURE__ */ jsx("p", { class: "text-xs leading-relaxed text-foreground/40", children: highlightMatch(result.highlight, query()) })
|
|
720
769
|
]
|
|
721
770
|
}
|
|
722
771
|
);
|
|
723
772
|
} }) }) }),
|
|
724
773
|
/* @__PURE__ */ jsx(Show, { when: query().trim() && results().length === 0 && !isSearching(), children: /* @__PURE__ */ jsxs("div", { class: "flex flex-col items-center py-16 text-center", children: [
|
|
725
774
|
/* @__PURE__ */ jsx("div", { class: "mb-4 text-5xl opacity-30", children: "\u{1F50D}" }),
|
|
726
|
-
/* @__PURE__ */ jsx("h3", { class: "text-lg font-medium text-
|
|
775
|
+
/* @__PURE__ */ jsx("h3", { class: "text-lg font-medium text-foreground/60", children: "No results found" })
|
|
727
776
|
] }) }),
|
|
728
777
|
/* @__PURE__ */ jsx(Show, { when: !query().trim(), children: /* @__PURE__ */ jsxs("div", { class: "flex flex-col items-center py-16 text-center", children: [
|
|
729
778
|
/* @__PURE__ */ jsx("div", { class: "mb-4 text-5xl opacity-20", children: "\u{1F4D6}" }),
|
|
730
|
-
/* @__PURE__ */ jsx("p", { class: "text-sm text-
|
|
779
|
+
/* @__PURE__ */ jsx("p", { class: "text-sm text-foreground/30", children: "Start typing to search across all documentation" })
|
|
731
780
|
] }) })
|
|
732
781
|
] }) })
|
|
733
782
|
}
|
|
@@ -781,18 +830,18 @@ function DocsAdminPage(props) {
|
|
|
781
830
|
Show,
|
|
782
831
|
{
|
|
783
832
|
when: props.tree?.() !== void 0,
|
|
784
|
-
fallback: /* @__PURE__ */ jsx("div", { class: "min-h-screen bg-
|
|
785
|
-
children: /* @__PURE__ */ jsx("div", { class: "min-h-screen bg-
|
|
833
|
+
fallback: /* @__PURE__ */ jsx("div", { class: cn("min-h-screen bg-background px-6 py-12", props.class), children: /* @__PURE__ */ jsx("div", { class: "mx-auto max-w-6xl", children: /* @__PURE__ */ jsx("div", { class: "mb-8 h-10 w-48 animate-pulse rounded bg-muted/60" }) }) }),
|
|
834
|
+
children: /* @__PURE__ */ jsx("div", { class: cn("min-h-screen bg-background text-foreground", props.class), children: /* @__PURE__ */ jsxs("div", { class: "mx-auto max-w-6xl px-6 py-12", children: [
|
|
786
835
|
/* @__PURE__ */ jsx("h1", { class: "mb-8 text-2xl font-bold", children: "Docs Admin" }),
|
|
787
836
|
/* @__PURE__ */ jsxs("div", { class: "grid gap-6 md:grid-cols-2", children: [
|
|
788
|
-
/* @__PURE__ */ jsxs("div", { class: "rounded-xl border border-
|
|
837
|
+
/* @__PURE__ */ jsxs("div", { class: "rounded-xl border border-border bg-card/40 p-5", children: [
|
|
789
838
|
/* @__PURE__ */ jsxs("div", { class: "mb-4 flex items-center justify-between", children: [
|
|
790
|
-
/* @__PURE__ */ jsx("h2", { class: "text-lg font-semibold text-
|
|
791
|
-
/* @__PURE__ */ jsx("button", { type: "button", onClick: () => setShowSF(!showSF()), class: "rounded-lg bg-
|
|
839
|
+
/* @__PURE__ */ jsx("h2", { class: "text-lg font-semibold text-foreground", children: "Sections" }),
|
|
840
|
+
/* @__PURE__ */ jsx("button", { type: "button", onClick: () => setShowSF(!showSF()), class: "rounded-lg bg-primary px-3 py-1.5 text-xs font-medium hover:bg-primary/90", children: "+ Add" })
|
|
792
841
|
] }),
|
|
793
|
-
/* @__PURE__ */ jsx(Show, { when: showSF(), children: /* @__PURE__ */ jsxs("div", { class: "mb-4 space-y-2 rounded-lg border border-
|
|
842
|
+
/* @__PURE__ */ jsx(Show, { when: showSF(), children: /* @__PURE__ */ jsxs("div", { class: "mb-4 space-y-2 rounded-lg border border-border bg-card/60 p-4", children: [
|
|
794
843
|
/* @__PURE__ */ jsxs("label", { class: "block space-y-1", for: "docs-admin-section-title", children: [
|
|
795
|
-
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-
|
|
844
|
+
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-muted-foreground", children: "Title" }),
|
|
796
845
|
/* @__PURE__ */ jsx(
|
|
797
846
|
"input",
|
|
798
847
|
{
|
|
@@ -801,12 +850,12 @@ function DocsAdminPage(props) {
|
|
|
801
850
|
placeholder: "Getting Started",
|
|
802
851
|
value: sectionForm().title,
|
|
803
852
|
onInput: (e) => setSectionForm({ ...sectionForm(), title: e.currentTarget.value }),
|
|
804
|
-
class: "w-full rounded-lg border border-
|
|
853
|
+
class: "w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20"
|
|
805
854
|
}
|
|
806
855
|
)
|
|
807
856
|
] }),
|
|
808
857
|
/* @__PURE__ */ jsxs("label", { class: "block space-y-1", for: "docs-admin-section-slug", children: [
|
|
809
|
-
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-
|
|
858
|
+
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-muted-foreground", children: "Slug" }),
|
|
810
859
|
/* @__PURE__ */ jsx(
|
|
811
860
|
"input",
|
|
812
861
|
{
|
|
@@ -815,12 +864,12 @@ function DocsAdminPage(props) {
|
|
|
815
864
|
placeholder: "getting-started",
|
|
816
865
|
value: sectionForm().slug,
|
|
817
866
|
onInput: (e) => setSectionForm({ ...sectionForm(), slug: e.currentTarget.value }),
|
|
818
|
-
class: "w-full rounded-lg border border-
|
|
867
|
+
class: "w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20"
|
|
819
868
|
}
|
|
820
869
|
)
|
|
821
870
|
] }),
|
|
822
871
|
/* @__PURE__ */ jsxs("label", { class: "block space-y-1", for: "docs-admin-section-icon", children: [
|
|
823
|
-
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-
|
|
872
|
+
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-muted-foreground", children: "Icon" }),
|
|
824
873
|
/* @__PURE__ */ jsx(
|
|
825
874
|
"input",
|
|
826
875
|
{
|
|
@@ -829,12 +878,12 @@ function DocsAdminPage(props) {
|
|
|
829
878
|
placeholder: "\u{1F4DA}",
|
|
830
879
|
value: sectionForm().icon,
|
|
831
880
|
onInput: (e) => setSectionForm({ ...sectionForm(), icon: e.currentTarget.value }),
|
|
832
|
-
class: "w-full rounded-lg border border-
|
|
881
|
+
class: "w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20"
|
|
833
882
|
}
|
|
834
883
|
)
|
|
835
884
|
] }),
|
|
836
885
|
/* @__PURE__ */ jsxs("label", { class: "block space-y-1", for: "docs-admin-section-description", children: [
|
|
837
|
-
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-
|
|
886
|
+
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-muted-foreground", children: "Description" }),
|
|
838
887
|
/* @__PURE__ */ jsx(
|
|
839
888
|
"input",
|
|
840
889
|
{
|
|
@@ -843,19 +892,19 @@ function DocsAdminPage(props) {
|
|
|
843
892
|
placeholder: "Overview pages and onboarding guides.",
|
|
844
893
|
value: sectionForm().description,
|
|
845
894
|
onInput: (e) => setSectionForm({ ...sectionForm(), description: e.currentTarget.value }),
|
|
846
|
-
class: "w-full rounded-lg border border-
|
|
895
|
+
class: "w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20"
|
|
847
896
|
}
|
|
848
897
|
)
|
|
849
898
|
] }),
|
|
850
899
|
/* @__PURE__ */ jsxs("label", { class: "block space-y-1", for: "docs-admin-section-access", children: [
|
|
851
|
-
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-
|
|
900
|
+
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-muted-foreground", children: "Access" }),
|
|
852
901
|
/* @__PURE__ */ jsxs(
|
|
853
902
|
"select",
|
|
854
903
|
{
|
|
855
904
|
id: "docs-admin-section-access",
|
|
856
905
|
value: sectionForm().access,
|
|
857
906
|
onChange: (e) => setSectionForm({ ...sectionForm(), access: toDocAccess(e.currentTarget.value) }),
|
|
858
|
-
class: "w-full rounded-lg border border-
|
|
907
|
+
class: "w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20",
|
|
859
908
|
children: [
|
|
860
909
|
/* @__PURE__ */ jsx("option", { value: "public", children: "Public" }),
|
|
861
910
|
/* @__PURE__ */ jsx("option", { value: "team", children: "Team" }),
|
|
@@ -871,20 +920,28 @@ function DocsAdminPage(props) {
|
|
|
871
920
|
type: "button",
|
|
872
921
|
disabled: !canCreateSection(),
|
|
873
922
|
onClick: async () => {
|
|
874
|
-
await props.admin.createSection({
|
|
923
|
+
await props.admin.createSection({
|
|
924
|
+
...sectionForm(),
|
|
925
|
+
order: sections().length,
|
|
926
|
+
icon: sectionForm().icon || void 0,
|
|
927
|
+
description: sectionForm().description || void 0
|
|
928
|
+
});
|
|
875
929
|
setSectionForm(initialSectionForm());
|
|
876
930
|
setShowSF(false);
|
|
877
931
|
},
|
|
878
|
-
class: "rounded-lg bg-
|
|
932
|
+
class: "rounded-lg bg-primary px-4 py-2 text-xs font-medium disabled:cursor-not-allowed disabled:opacity-40 hover:bg-primary/90",
|
|
879
933
|
children: "Create"
|
|
880
934
|
}
|
|
881
935
|
),
|
|
882
|
-
/* @__PURE__ */ jsx("button", { type: "button", onClick: () => setShowSF(false), class: "rounded-lg border border-
|
|
936
|
+
/* @__PURE__ */ jsx("button", { type: "button", onClick: () => setShowSF(false), class: "rounded-lg border border-border px-4 py-2 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground", children: "Cancel" })
|
|
883
937
|
] })
|
|
884
938
|
] }) }),
|
|
885
939
|
/* @__PURE__ */ jsxs("div", { class: "space-y-1", children: [
|
|
886
|
-
/* @__PURE__ */ jsx(Show, { when: sections().length === 0, children: /* @__PURE__ */ jsx("p", { class: "py-8 text-center text-sm text-
|
|
887
|
-
/* @__PURE__ */ jsx(For, { each: sections(), children: (section) => /* @__PURE__ */ jsxs("div", { class:
|
|
940
|
+
/* @__PURE__ */ jsx(Show, { when: sections().length === 0, children: /* @__PURE__ */ jsx("p", { class: "py-8 text-center text-sm text-muted-foreground", children: "No sections" }) }),
|
|
941
|
+
/* @__PURE__ */ jsx(For, { each: sections(), children: (section) => /* @__PURE__ */ jsxs("div", { class: cn(
|
|
942
|
+
"group flex items-center gap-2 rounded-lg px-3 py-2.5",
|
|
943
|
+
selectedId() === section.id ? "bg-primary/15 text-primary" : "text-muted-foreground hover:bg-muted hover:text-foreground"
|
|
944
|
+
), children: [
|
|
888
945
|
/* @__PURE__ */ jsxs(
|
|
889
946
|
"button",
|
|
890
947
|
{
|
|
@@ -906,7 +963,7 @@ function DocsAdminPage(props) {
|
|
|
906
963
|
e.stopPropagation();
|
|
907
964
|
if (confirm(`Delete "${section.title}"?`)) props.admin.deleteSection(section.id);
|
|
908
965
|
},
|
|
909
|
-
class: "rounded p-1 text-
|
|
966
|
+
class: "rounded p-1 text-muted-foreground/60 opacity-0 transition-opacity group-hover:opacity-100 hover:text-destructive",
|
|
910
967
|
"aria-label": `Delete section ${section.title}`,
|
|
911
968
|
children: "\u2715"
|
|
912
969
|
}
|
|
@@ -914,15 +971,15 @@ function DocsAdminPage(props) {
|
|
|
914
971
|
] }) })
|
|
915
972
|
] })
|
|
916
973
|
] }),
|
|
917
|
-
/* @__PURE__ */ jsxs("div", { class: "rounded-xl border border-
|
|
974
|
+
/* @__PURE__ */ jsxs("div", { class: "rounded-xl border border-border bg-card/40 p-5", children: [
|
|
918
975
|
/* @__PURE__ */ jsxs("div", { class: "mb-4 flex items-center justify-between", children: [
|
|
919
|
-
/* @__PURE__ */ jsx("h2", { class: "text-lg font-semibold text-
|
|
920
|
-
/* @__PURE__ */ jsx(Show, { when: selectedSection(), children: /* @__PURE__ */ jsx("button", { type: "button", onClick: () => setShowPF(!showPF()), class: "rounded-lg bg-
|
|
976
|
+
/* @__PURE__ */ jsx("h2", { class: "text-lg font-semibold text-foreground", children: selectedSection() ? `Pages \u2014 ${selectedSection()?.title}` : "Pages" }),
|
|
977
|
+
/* @__PURE__ */ jsx(Show, { when: selectedSection(), children: /* @__PURE__ */ jsx("button", { type: "button", onClick: () => setShowPF(!showPF()), class: "rounded-lg bg-primary px-3 py-1.5 text-xs font-medium hover:bg-primary/90", children: "+ Add" }) })
|
|
921
978
|
] }),
|
|
922
|
-
/* @__PURE__ */ jsx(Show, { when: !selectedSection(), children: /* @__PURE__ */ jsx("p", { class: "py-16 text-center text-sm text-
|
|
923
|
-
/* @__PURE__ */ jsx(Show, { when: showPF() && selectedSection(), children: /* @__PURE__ */ jsxs("div", { class: "mb-4 space-y-2 rounded-lg border border-
|
|
979
|
+
/* @__PURE__ */ jsx(Show, { when: !selectedSection(), children: /* @__PURE__ */ jsx("p", { class: "py-16 text-center text-sm text-muted-foreground", children: "Select a section" }) }),
|
|
980
|
+
/* @__PURE__ */ jsx(Show, { when: showPF() && selectedSection(), children: /* @__PURE__ */ jsxs("div", { class: "mb-4 space-y-2 rounded-lg border border-border bg-card/60 p-4", children: [
|
|
924
981
|
/* @__PURE__ */ jsxs("label", { class: "block space-y-1", for: "docs-admin-page-title", children: [
|
|
925
|
-
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-
|
|
982
|
+
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-muted-foreground", children: "Title" }),
|
|
926
983
|
/* @__PURE__ */ jsx(
|
|
927
984
|
"input",
|
|
928
985
|
{
|
|
@@ -931,12 +988,12 @@ function DocsAdminPage(props) {
|
|
|
931
988
|
placeholder: "Install the package",
|
|
932
989
|
value: pageForm().title,
|
|
933
990
|
onInput: (e) => setPageForm({ ...pageForm(), title: e.currentTarget.value }),
|
|
934
|
-
class: "w-full rounded-lg border border-
|
|
991
|
+
class: "w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20"
|
|
935
992
|
}
|
|
936
993
|
)
|
|
937
994
|
] }),
|
|
938
995
|
/* @__PURE__ */ jsxs("label", { class: "block space-y-1", for: "docs-admin-page-slug", children: [
|
|
939
|
-
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-
|
|
996
|
+
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-muted-foreground", children: "Slug" }),
|
|
940
997
|
/* @__PURE__ */ jsx(
|
|
941
998
|
"input",
|
|
942
999
|
{
|
|
@@ -945,12 +1002,12 @@ function DocsAdminPage(props) {
|
|
|
945
1002
|
placeholder: "install",
|
|
946
1003
|
value: pageForm().slug,
|
|
947
1004
|
onInput: (e) => setPageForm({ ...pageForm(), slug: e.currentTarget.value }),
|
|
948
|
-
class: "w-full rounded-lg border border-
|
|
1005
|
+
class: "w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20"
|
|
949
1006
|
}
|
|
950
1007
|
)
|
|
951
1008
|
] }),
|
|
952
1009
|
/* @__PURE__ */ jsxs("label", { class: "block space-y-1", for: "docs-admin-page-content", children: [
|
|
953
|
-
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-
|
|
1010
|
+
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-muted-foreground", children: "Content (MDX)" }),
|
|
954
1011
|
/* @__PURE__ */ jsx(
|
|
955
1012
|
"textarea",
|
|
956
1013
|
{
|
|
@@ -959,12 +1016,12 @@ function DocsAdminPage(props) {
|
|
|
959
1016
|
value: pageForm().content,
|
|
960
1017
|
onInput: (e) => setPageForm({ ...pageForm(), content: e.currentTarget.value }),
|
|
961
1018
|
rows: 4,
|
|
962
|
-
class: "w-full rounded-lg border border-
|
|
1019
|
+
class: "w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20 resize-y"
|
|
963
1020
|
}
|
|
964
1021
|
)
|
|
965
1022
|
] }),
|
|
966
1023
|
/* @__PURE__ */ jsxs("label", { class: "block space-y-1", for: "docs-admin-page-tags", children: [
|
|
967
|
-
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-
|
|
1024
|
+
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-muted-foreground", children: "Tags" }),
|
|
968
1025
|
/* @__PURE__ */ jsx(
|
|
969
1026
|
"input",
|
|
970
1027
|
{
|
|
@@ -973,19 +1030,19 @@ function DocsAdminPage(props) {
|
|
|
973
1030
|
placeholder: "setup, install",
|
|
974
1031
|
value: pageForm().tags,
|
|
975
1032
|
onInput: (e) => setPageForm({ ...pageForm(), tags: e.currentTarget.value }),
|
|
976
|
-
class: "w-full rounded-lg border border-
|
|
1033
|
+
class: "w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20"
|
|
977
1034
|
}
|
|
978
1035
|
)
|
|
979
1036
|
] }),
|
|
980
1037
|
/* @__PURE__ */ jsxs("label", { class: "block space-y-1", for: "docs-admin-page-access", children: [
|
|
981
|
-
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-
|
|
1038
|
+
/* @__PURE__ */ jsx("span", { class: "text-xs font-medium text-muted-foreground", children: "Access" }),
|
|
982
1039
|
/* @__PURE__ */ jsxs(
|
|
983
1040
|
"select",
|
|
984
1041
|
{
|
|
985
1042
|
id: "docs-admin-page-access",
|
|
986
1043
|
value: pageForm().access,
|
|
987
1044
|
onChange: (e) => setPageForm({ ...pageForm(), access: toDocAccess(e.currentTarget.value) }),
|
|
988
|
-
class: "w-full rounded-lg border border-
|
|
1045
|
+
class: "w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20",
|
|
989
1046
|
children: [
|
|
990
1047
|
/* @__PURE__ */ jsx("option", { value: "public", children: "Public" }),
|
|
991
1048
|
/* @__PURE__ */ jsx("option", { value: "team", children: "Team" }),
|
|
@@ -1007,25 +1064,25 @@ function DocsAdminPage(props) {
|
|
|
1007
1064
|
setPageForm(initialPageForm());
|
|
1008
1065
|
setShowPF(false);
|
|
1009
1066
|
},
|
|
1010
|
-
class: "rounded-lg bg-
|
|
1067
|
+
class: "rounded-lg bg-primary px-4 py-2 text-xs font-medium disabled:cursor-not-allowed disabled:opacity-40 hover:bg-primary/90",
|
|
1011
1068
|
children: "Create"
|
|
1012
1069
|
}
|
|
1013
1070
|
),
|
|
1014
|
-
/* @__PURE__ */ jsx("button", { type: "button", onClick: () => setShowPF(false), class: "rounded-lg border border-
|
|
1071
|
+
/* @__PURE__ */ jsx("button", { type: "button", onClick: () => setShowPF(false), class: "rounded-lg border border-border px-4 py-2 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground", children: "Cancel" })
|
|
1015
1072
|
] })
|
|
1016
1073
|
] }) }),
|
|
1017
|
-
/* @__PURE__ */ jsx(Show, { when: selectedSection() && sectionPages().length > 0, children: /* @__PURE__ */ jsx("div", { class: "space-y-1", children: /* @__PURE__ */ jsx(For, { each: sectionPages(), children: (page) => /* @__PURE__ */ jsxs("div", { class: "group flex items-center gap-3 rounded-lg px-3 py-2.5 hover:bg-
|
|
1074
|
+
/* @__PURE__ */ jsx(Show, { when: selectedSection() && sectionPages().length > 0, children: /* @__PURE__ */ jsx("div", { class: "space-y-1", children: /* @__PURE__ */ jsx(For, { each: sectionPages(), children: (page) => /* @__PURE__ */ jsxs("div", { class: "group flex items-center gap-3 rounded-lg px-3 py-2.5 transition-colors hover:bg-muted", children: [
|
|
1018
1075
|
/* @__PURE__ */ jsxs("div", { class: "flex-1 min-w-0", children: [
|
|
1019
|
-
/* @__PURE__ */ jsx("p", { class: "text-sm font-medium text-
|
|
1020
|
-
/* @__PURE__ */ jsxs("p", { class: "text-[11px] text-
|
|
1076
|
+
/* @__PURE__ */ jsx("p", { class: "text-sm font-medium text-foreground truncate", children: page.title }),
|
|
1077
|
+
/* @__PURE__ */ jsxs("p", { class: "text-[11px] text-muted-foreground", children: [
|
|
1021
1078
|
"/",
|
|
1022
1079
|
page.slug
|
|
1023
1080
|
] })
|
|
1024
1081
|
] }),
|
|
1025
|
-
/* @__PURE__ */ jsx("span", { class:
|
|
1082
|
+
/* @__PURE__ */ jsx("span", { class: cn("shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium", page.status === "published" ? "bg-success/15 text-success" : page.status === "archived" ? "bg-muted text-muted-foreground" : "bg-warning/15 text-warning"), children: page.status }),
|
|
1026
1083
|
/* @__PURE__ */ jsxs("div", { class: "flex items-center gap-1 opacity-0 group-hover:opacity-100", children: [
|
|
1027
|
-
/* @__PURE__ */ jsx(Show, { when: page.status === "draft", children: /* @__PURE__ */ jsx("button", { type: "button", onClick: () => props.admin.publishPage(page.id), class: "rounded px-2 py-1 text-[11px] text-
|
|
1028
|
-
/* @__PURE__ */ jsx(Show, { when: page.status === "published", children: /* @__PURE__ */ jsx("button", { type: "button", onClick: () => props.admin.archivePage(page.id), class: "rounded px-2 py-1 text-[11px] text-
|
|
1084
|
+
/* @__PURE__ */ jsx(Show, { when: page.status === "draft", children: /* @__PURE__ */ jsx("button", { type: "button", onClick: () => props.admin.publishPage(page.id), class: "rounded px-2 py-1 text-[11px] text-success hover:bg-success/10", children: "Publish" }) }),
|
|
1085
|
+
/* @__PURE__ */ jsx(Show, { when: page.status === "published", children: /* @__PURE__ */ jsx("button", { type: "button", onClick: () => props.admin.archivePage(page.id), class: "rounded px-2 py-1 text-[11px] text-warning hover:bg-warning/10", children: "Archive" }) }),
|
|
1029
1086
|
/* @__PURE__ */ jsx(
|
|
1030
1087
|
"button",
|
|
1031
1088
|
{
|
|
@@ -1033,14 +1090,14 @@ function DocsAdminPage(props) {
|
|
|
1033
1090
|
onClick: () => {
|
|
1034
1091
|
if (confirm(`Delete "${page.title}"?`)) props.admin.deletePage(page.id);
|
|
1035
1092
|
},
|
|
1036
|
-
class: "rounded p-1 text-
|
|
1093
|
+
class: "rounded p-1 text-muted-foreground/60 hover:text-destructive",
|
|
1037
1094
|
"aria-label": `Delete page ${page.title}`,
|
|
1038
1095
|
children: "\u2715"
|
|
1039
1096
|
}
|
|
1040
1097
|
)
|
|
1041
1098
|
] })
|
|
1042
1099
|
] }) }) }) }),
|
|
1043
|
-
/* @__PURE__ */ jsx(Show, { when: selectedSection() && sectionPages().length === 0 && !showPF(), children: /* @__PURE__ */ jsx("p", { class: "py-12 text-center text-sm text-
|
|
1100
|
+
/* @__PURE__ */ jsx(Show, { when: selectedSection() && sectionPages().length === 0 && !showPF(), children: /* @__PURE__ */ jsx("p", { class: "py-12 text-center text-sm text-muted-foreground", children: "No pages in this section" }) })
|
|
1044
1101
|
] })
|
|
1045
1102
|
] })
|
|
1046
1103
|
] }) })
|
|
@@ -1100,34 +1157,44 @@ function DocsIndexPage(props) {
|
|
|
1100
1157
|
Show,
|
|
1101
1158
|
{
|
|
1102
1159
|
when: !docs.isLoading(),
|
|
1103
|
-
fallback: /* @__PURE__ */ jsx("div", { class: "min-h-screen bg-
|
|
1104
|
-
/* @__PURE__ */ jsx("div", { class: "mb-10 h-10 w-64 animate-pulse rounded-lg bg-
|
|
1105
|
-
/* @__PURE__ */ jsx("div", { class: "mb-8 h-12 w-full max-w-xl animate-pulse rounded-xl bg-
|
|
1106
|
-
/* @__PURE__ */ jsx("div", { class: "grid gap-4 md:grid-cols-2 lg:grid-cols-3", children: /* @__PURE__ */ jsx(For, { each: Array(6), children: () => /* @__PURE__ */ jsx("div", { class: "h-36 animate-pulse rounded-xl bg-
|
|
1160
|
+
fallback: /* @__PURE__ */ jsx("div", { class: cn("min-h-screen bg-background px-6 py-16", props.class), children: /* @__PURE__ */ jsxs("div", { class: "mx-auto max-w-5xl", children: [
|
|
1161
|
+
/* @__PURE__ */ jsx("div", { class: "mb-10 h-10 w-64 animate-pulse rounded-lg bg-foreground/5" }),
|
|
1162
|
+
/* @__PURE__ */ jsx("div", { class: "mb-8 h-12 w-full max-w-xl animate-pulse rounded-xl bg-foreground/5" }),
|
|
1163
|
+
/* @__PURE__ */ jsx("div", { class: "grid gap-4 md:grid-cols-2 lg:grid-cols-3", children: /* @__PURE__ */ jsx(For, { each: Array(6), children: () => /* @__PURE__ */ jsx("div", { class: "h-36 animate-pulse rounded-xl bg-foreground/5" }) }) })
|
|
1107
1164
|
] }) }),
|
|
1108
1165
|
children: /* @__PURE__ */ jsx(
|
|
1109
1166
|
Show,
|
|
1110
1167
|
{
|
|
1111
1168
|
when: docs.sections().length > 0,
|
|
1112
|
-
fallback: /* @__PURE__ */ jsxs(
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1169
|
+
fallback: /* @__PURE__ */ jsxs(
|
|
1170
|
+
"div",
|
|
1171
|
+
{
|
|
1172
|
+
class: cn(
|
|
1173
|
+
"flex min-h-screen flex-col items-center justify-center bg-background text-center",
|
|
1174
|
+
props.class
|
|
1175
|
+
),
|
|
1176
|
+
children: [
|
|
1177
|
+
/* @__PURE__ */ jsx("div", { class: "mb-4 text-6xl opacity-30", children: "\u{1F4DA}" }),
|
|
1178
|
+
/* @__PURE__ */ jsx("h2", { class: "mb-2 text-xl font-semibold text-foreground/80", children: "No documentation yet" }),
|
|
1179
|
+
/* @__PURE__ */ jsx("p", { class: "max-w-sm text-sm text-foreground/40", children: "Create your first section and pages to get started." })
|
|
1180
|
+
]
|
|
1181
|
+
}
|
|
1182
|
+
),
|
|
1183
|
+
children: /* @__PURE__ */ jsxs("div", { class: cn("min-h-screen bg-background text-foreground", props.class), children: [
|
|
1118
1184
|
/* @__PURE__ */ jsxs("div", { class: "mx-auto max-w-5xl px-6 py-16", children: [
|
|
1119
1185
|
/* @__PURE__ */ jsx("h1", { class: "mb-2 text-4xl font-bold tracking-tight", children: "Documentation" }),
|
|
1120
|
-
/* @__PURE__ */ jsx("p", { class: "mb-10 text-lg text-
|
|
1186
|
+
/* @__PURE__ */ jsx("p", { class: "mb-10 text-lg text-foreground/50", children: "Browse guides, API references, and tutorials." }),
|
|
1121
1187
|
/* @__PURE__ */ jsxs(
|
|
1122
1188
|
"button",
|
|
1123
1189
|
{
|
|
1124
1190
|
type: "button",
|
|
1125
1191
|
onClick: () => setIsSearchOpen(true),
|
|
1126
|
-
|
|
1192
|
+
"aria-haspopup": "dialog",
|
|
1193
|
+
class: "mb-12 flex w-full max-w-xl items-center gap-3 rounded-xl border border-border bg-card/60 px-5 py-3.5 text-left text-sm text-muted-foreground transition-colors hover:border-primary/20 hover:bg-card",
|
|
1127
1194
|
children: [
|
|
1128
1195
|
/* @__PURE__ */ jsx("svg", { "aria-hidden": "true", class: "h-4.5 w-4.5 shrink-0", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { "fill-rule": "evenodd", d: "M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z", "clip-rule": "evenodd" }) }),
|
|
1129
1196
|
/* @__PURE__ */ jsx("span", { class: "flex-1", children: "Search documentation\u2026" }),
|
|
1130
|
-
/* @__PURE__ */ jsx("kbd", { class: "rounded border border-
|
|
1197
|
+
/* @__PURE__ */ jsx("kbd", { class: "rounded border border-border/60 bg-foreground/5 px-2 py-0.5 text-[11px]", children: "\u2318K" })
|
|
1131
1198
|
]
|
|
1132
1199
|
}
|
|
1133
1200
|
),
|
|
@@ -1139,12 +1206,12 @@ function DocsIndexPage(props) {
|
|
|
1139
1206
|
const fp = section.pages?.[0];
|
|
1140
1207
|
if (fp && props.onSelectPage) props.onSelectPage(fp, section);
|
|
1141
1208
|
},
|
|
1142
|
-
class: "group flex flex-col rounded-xl border border-
|
|
1209
|
+
class: "group flex flex-col rounded-xl border border-border bg-card/40 p-5 text-left transition-all hover:border-primary/30 hover:bg-card",
|
|
1143
1210
|
children: [
|
|
1144
1211
|
/* @__PURE__ */ jsx(Show, { when: section.icon, children: /* @__PURE__ */ jsx("span", { class: "mb-3 text-2xl", children: section.icon }) }),
|
|
1145
|
-
/* @__PURE__ */ jsx("h3", { class: "mb-1.5 text-base font-semibold text-
|
|
1146
|
-
/* @__PURE__ */ jsx(Show, { when: section.description, children: /* @__PURE__ */ jsx("p", { class: "mb-3 flex-1 text-sm leading-relaxed text-
|
|
1147
|
-
/* @__PURE__ */ jsx("div", { class: "text-xs text-
|
|
1212
|
+
/* @__PURE__ */ jsx("h3", { class: "mb-1.5 text-base font-semibold text-foreground/90 group-hover:text-foreground", children: section.title }),
|
|
1213
|
+
/* @__PURE__ */ jsx(Show, { when: section.description, children: /* @__PURE__ */ jsx("p", { class: "mb-3 flex-1 text-sm leading-relaxed text-foreground/40", children: section.description }) }),
|
|
1214
|
+
/* @__PURE__ */ jsx("div", { class: "text-xs text-foreground/25", children: /* @__PURE__ */ jsxs("span", { children: [
|
|
1148
1215
|
section.pageCount ?? 0,
|
|
1149
1216
|
" pages"
|
|
1150
1217
|
] }) })
|
|
@@ -1251,18 +1318,27 @@ function DocViewPage(props) {
|
|
|
1251
1318
|
Show,
|
|
1252
1319
|
{
|
|
1253
1320
|
when: !docs.isLoading() && props.page() !== void 0,
|
|
1254
|
-
fallback: /* @__PURE__ */ jsxs("div", { class: "flex min-h-screen bg-
|
|
1255
|
-
/* @__PURE__ */ jsx("div", { class: "hidden w-[260px] shrink-0 border-r border-
|
|
1256
|
-
/* @__PURE__ */ jsx("div", { class: "flex-1 px-10 py-8", children: /* @__PURE__ */ jsx("div", { class: "mx-auto max-w-3xl space-y-4", children: /* @__PURE__ */ jsx("div", { class: "h-10 w-96 animate-pulse rounded bg-
|
|
1321
|
+
fallback: /* @__PURE__ */ jsxs("div", { class: cn("flex min-h-screen bg-background", props.class), children: [
|
|
1322
|
+
/* @__PURE__ */ jsx("div", { class: "hidden w-[260px] shrink-0 border-r border-border bg-card lg:block", children: /* @__PURE__ */ jsx("div", { class: "space-y-3 p-4", children: Array.from({ length: 8 }).map(() => /* @__PURE__ */ jsx("div", { class: "h-8 animate-pulse rounded-lg bg-foreground/5" })) }) }),
|
|
1323
|
+
/* @__PURE__ */ jsx("div", { class: "flex-1 px-10 py-8", children: /* @__PURE__ */ jsx("div", { class: "mx-auto max-w-3xl space-y-4", children: /* @__PURE__ */ jsx("div", { class: "h-10 w-96 animate-pulse rounded bg-foreground/5" }) }) })
|
|
1257
1324
|
] }),
|
|
1258
1325
|
children: /* @__PURE__ */ jsx(
|
|
1259
1326
|
Show,
|
|
1260
1327
|
{
|
|
1261
1328
|
when: props.page(),
|
|
1262
|
-
fallback: /* @__PURE__ */ jsxs(
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1329
|
+
fallback: /* @__PURE__ */ jsxs(
|
|
1330
|
+
"div",
|
|
1331
|
+
{
|
|
1332
|
+
class: cn(
|
|
1333
|
+
"flex min-h-screen flex-col items-center justify-center bg-background text-center",
|
|
1334
|
+
props.class
|
|
1335
|
+
),
|
|
1336
|
+
children: [
|
|
1337
|
+
/* @__PURE__ */ jsx("div", { class: "mb-4 text-6xl opacity-30", children: "\u{1F50D}" }),
|
|
1338
|
+
/* @__PURE__ */ jsx("h2", { class: "mb-2 text-xl font-semibold text-foreground/80", children: "Page not found" })
|
|
1339
|
+
]
|
|
1340
|
+
}
|
|
1341
|
+
),
|
|
1266
1342
|
children: (page) => /* @__PURE__ */ jsxs(
|
|
1267
1343
|
DocsLayout,
|
|
1268
1344
|
{
|
|
@@ -1272,10 +1348,11 @@ function DocViewPage(props) {
|
|
|
1272
1348
|
breadcrumbs: breadcrumbs(),
|
|
1273
1349
|
currentPageId: page().id,
|
|
1274
1350
|
onNavigate: props.onNavigate,
|
|
1351
|
+
class: props.class,
|
|
1275
1352
|
children: [
|
|
1276
1353
|
/* @__PURE__ */ jsxs("div", { class: "mb-8", children: [
|
|
1277
1354
|
/* @__PURE__ */ jsx("h1", { class: "mb-3 text-3xl font-bold tracking-tight", children: page().title }),
|
|
1278
|
-
/* @__PURE__ */ jsxs("div", { class: "flex flex-wrap items-center gap-4 text-sm text-
|
|
1355
|
+
/* @__PURE__ */ jsxs("div", { class: "flex flex-wrap items-center gap-4 text-sm text-foreground/40", children: [
|
|
1279
1356
|
/* @__PURE__ */ jsx("span", { children: page().author.name }),
|
|
1280
1357
|
/* @__PURE__ */ jsx(Show, { when: page().readingTime > 0, children: /* @__PURE__ */ jsxs("span", { children: [
|
|
1281
1358
|
page().readingTime,
|
|
@@ -1288,7 +1365,7 @@ function DocViewPage(props) {
|
|
|
1288
1365
|
] })
|
|
1289
1366
|
] }),
|
|
1290
1367
|
/* @__PURE__ */ jsx(DocPage, { page: page() }),
|
|
1291
|
-
/* @__PURE__ */ jsx("div", { class: "mt-10 flex items-center justify-between border-t border-
|
|
1368
|
+
/* @__PURE__ */ jsx("div", { class: "mt-10 flex items-center justify-between border-t border-border/40 pt-6", children: /* @__PURE__ */ jsx(EditButton, { pageSlug: page().slug, editUrl: props.editPageUrl }) }),
|
|
1292
1369
|
/* @__PURE__ */ jsx(PageNavigation, { prev: nav().prev, next: nav().next })
|
|
1293
1370
|
]
|
|
1294
1371
|
}
|