specra 0.1.0 → 0.1.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/dist/app/docs-page.js +164 -148
- package/dist/app/docs-page.js.map +1 -1
- package/dist/app/docs-page.mjs +3 -3
- package/dist/app/layout.js +84 -5
- package/dist/app/layout.js.map +1 -1
- package/dist/app/layout.mjs +3 -3
- package/dist/{chunk-NXRIAL7T.mjs → chunk-4QHOMV5A.mjs} +8 -5
- package/dist/chunk-4QHOMV5A.mjs.map +1 -0
- package/dist/{chunk-IZFGEAD6.mjs → chunk-5AYOV2KD.mjs} +5 -4
- package/dist/chunk-5AYOV2KD.mjs.map +1 -0
- package/dist/chunk-I3ELVEK2.mjs +56 -0
- package/dist/chunk-I3ELVEK2.mjs.map +1 -0
- package/dist/{chunk-INL2EC72.mjs → chunk-RLMSINLY.mjs} +2 -5
- package/dist/{chunk-INL2EC72.mjs.map → chunk-RLMSINLY.mjs.map} +1 -1
- package/dist/components/index.d.mts +39 -3
- package/dist/components/index.d.ts +39 -3
- package/dist/components/index.js +100 -62
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +83 -48
- package/dist/components/index.mjs.map +1 -1
- package/dist/index.d.mts +39 -3
- package/dist/index.d.ts +39 -3
- package/dist/index.js +129 -94
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10 -4
- package/dist/index.mjs.map +1 -1
- package/dist/lib/index.d.mts +7 -0
- package/dist/lib/index.d.ts +7 -0
- package/dist/lib/index.js +1 -4
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/index.mjs +1 -1
- package/package.json +2 -2
- package/src/app/layout.tsx +6 -3
- package/src/components/docs/header.tsx +7 -3
- package/src/components/docs/index.ts +3 -0
- package/src/lib/config.context.tsx +65 -0
- package/src/lib/config.server.ts +9 -5
- package/src/lib/index.ts +1 -0
- package/dist/chunk-IZFGEAD6.mjs.map +0 -1
- package/dist/chunk-MZJHJ6BV.mjs +0 -21
- package/dist/chunk-MZJHJ6BV.mjs.map +0 -1
- package/dist/chunk-NXRIAL7T.mjs.map +0 -1
package/dist/app/docs-page.js
CHANGED
|
@@ -2707,7 +2707,7 @@ function processContentWithEnv(content, config) {
|
|
|
2707
2707
|
var configInstance = null;
|
|
2708
2708
|
function getConfig() {
|
|
2709
2709
|
if (!configInstance) {
|
|
2710
|
-
|
|
2710
|
+
configInstance = loadConfig({});
|
|
2711
2711
|
}
|
|
2712
2712
|
return configInstance;
|
|
2713
2713
|
}
|
|
@@ -3145,8 +3145,24 @@ function SearchModal({ isOpen, onClose, config }) {
|
|
|
3145
3145
|
|
|
3146
3146
|
// src/components/docs/header.tsx
|
|
3147
3147
|
var import_react16 = require("react");
|
|
3148
|
+
|
|
3149
|
+
// src/lib/config.context.tsx
|
|
3150
|
+
var React2 = __toESM(require("react"));
|
|
3148
3151
|
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
3149
|
-
|
|
3152
|
+
var ConfigContext = React2.createContext(defaultConfig);
|
|
3153
|
+
function useConfig() {
|
|
3154
|
+
const config = React2.useContext(ConfigContext);
|
|
3155
|
+
if (!config) {
|
|
3156
|
+
throw new Error("useConfig must be used within a ConfigProvider");
|
|
3157
|
+
}
|
|
3158
|
+
return config;
|
|
3159
|
+
}
|
|
3160
|
+
|
|
3161
|
+
// src/components/docs/header.tsx
|
|
3162
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
3163
|
+
function Header({ currentVersion, versions, onMenuClick, config: configProp }) {
|
|
3164
|
+
const contextConfig = useConfig();
|
|
3165
|
+
const config = configProp || contextConfig;
|
|
3150
3166
|
const [searchOpen, setSearchOpen] = (0, import_react16.useState)(false);
|
|
3151
3167
|
(0, import_react16.useEffect)(() => {
|
|
3152
3168
|
const handleKeyDown = (e) => {
|
|
@@ -3158,38 +3174,38 @@ function Header({ currentVersion, versions, onMenuClick, config }) {
|
|
|
3158
3174
|
window.addEventListener("keydown", handleKeyDown);
|
|
3159
3175
|
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
3160
3176
|
}, []);
|
|
3161
|
-
return /* @__PURE__ */ (0,
|
|
3162
|
-
/* @__PURE__ */ (0,
|
|
3163
|
-
/* @__PURE__ */ (0,
|
|
3164
|
-
/* @__PURE__ */ (0,
|
|
3177
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("header", { className: "sticky top-0 z-50 w-full border-b border-border bg-background/95 backdrop-blur supports-backdrop-filter:bg-background/60", children: [
|
|
3178
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "container flex h-16 items-center justify-between px-6 mx-auto", children: [
|
|
3179
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
3180
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
3165
3181
|
"button",
|
|
3166
3182
|
{
|
|
3167
3183
|
onClick: onMenuClick,
|
|
3168
3184
|
className: "lg:hidden hover:bg-muted p-2 rounded-md transition-colors",
|
|
3169
3185
|
"aria-label": "Toggle menu",
|
|
3170
|
-
children: /* @__PURE__ */ (0,
|
|
3186
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react19.Menu, { className: "h-5 w-5" })
|
|
3171
3187
|
}
|
|
3172
3188
|
),
|
|
3173
|
-
/* @__PURE__ */ (0,
|
|
3174
|
-
config.site.logo ? /* @__PURE__ */ (0,
|
|
3175
|
-
/* @__PURE__ */ (0,
|
|
3189
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_link5.default, { href: "/", className: "flex items-center gap-2", children: [
|
|
3190
|
+
config.site.logo ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("img", { src: getAssetPath(config.site.logo), alt: config.site.title, className: "h-8 w-auto" }) : /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "h-8 w-8 rounded-xl bg-primary flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "text-primary-foreground font-bold text-lg", children: config.site.title.charAt(0).toUpperCase() }) }),
|
|
3191
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "font-semibold text-lg text-foreground", children: config.site.title ?? "Specra" })
|
|
3176
3192
|
] })
|
|
3177
3193
|
] }),
|
|
3178
|
-
/* @__PURE__ */ (0,
|
|
3179
|
-
config.search?.enabled && /* @__PURE__ */ (0,
|
|
3194
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
3195
|
+
config.search?.enabled && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
|
|
3180
3196
|
"button",
|
|
3181
3197
|
{
|
|
3182
3198
|
onClick: () => setSearchOpen(true),
|
|
3183
3199
|
className: "flex items-center gap-2 px-3 py-2 text-sm text-muted-foreground hover:text-foreground bg-muted rounded-md transition-colors",
|
|
3184
3200
|
children: [
|
|
3185
|
-
/* @__PURE__ */ (0,
|
|
3186
|
-
/* @__PURE__ */ (0,
|
|
3187
|
-
/* @__PURE__ */ (0,
|
|
3201
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react19.Search, { className: "h-4 w-4" }),
|
|
3202
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "hidden sm:inline", children: config.search.placeholder || "Search" }),
|
|
3203
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("kbd", { className: "hidden sm:inline-flex h-5 select-none items-center gap-1 rounded border border-border bg-background px-1.5 font-mono text-xs font-medium", children: "\u2318K" })
|
|
3188
3204
|
]
|
|
3189
3205
|
}
|
|
3190
3206
|
),
|
|
3191
|
-
config.features?.versioning && /* @__PURE__ */ (0,
|
|
3192
|
-
config.social?.github && /* @__PURE__ */ (0,
|
|
3207
|
+
config.features?.versioning && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(VersionSwitcher, { currentVersion, versions }),
|
|
3208
|
+
config.social?.github && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
3193
3209
|
"a",
|
|
3194
3210
|
{
|
|
3195
3211
|
href: config.social.github,
|
|
@@ -3197,10 +3213,10 @@ function Header({ currentVersion, versions, onMenuClick, config }) {
|
|
|
3197
3213
|
rel: "noopener noreferrer",
|
|
3198
3214
|
className: "hidden md:flex items-center justify-center h-9 w-9 rounded-md hover:bg-muted transition-colors",
|
|
3199
3215
|
"aria-label": "GitHub",
|
|
3200
|
-
children: /* @__PURE__ */ (0,
|
|
3216
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react19.Github, { className: "h-4 w-4" })
|
|
3201
3217
|
}
|
|
3202
3218
|
),
|
|
3203
|
-
config.social?.twitter && /* @__PURE__ */ (0,
|
|
3219
|
+
config.social?.twitter && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
3204
3220
|
"a",
|
|
3205
3221
|
{
|
|
3206
3222
|
href: config.social.twitter,
|
|
@@ -3208,10 +3224,10 @@ function Header({ currentVersion, versions, onMenuClick, config }) {
|
|
|
3208
3224
|
rel: "noopener noreferrer",
|
|
3209
3225
|
className: "hidden md:flex items-center justify-center h-9 w-9 rounded-md hover:bg-muted transition-colors",
|
|
3210
3226
|
"aria-label": "Twitter",
|
|
3211
|
-
children: /* @__PURE__ */ (0,
|
|
3227
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react19.Twitter, { className: "h-4 w-4" })
|
|
3212
3228
|
}
|
|
3213
3229
|
),
|
|
3214
|
-
config.social?.discord && /* @__PURE__ */ (0,
|
|
3230
|
+
config.social?.discord && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
3215
3231
|
"a",
|
|
3216
3232
|
{
|
|
3217
3233
|
href: config.social.discord,
|
|
@@ -3219,13 +3235,13 @@ function Header({ currentVersion, versions, onMenuClick, config }) {
|
|
|
3219
3235
|
rel: "noopener noreferrer",
|
|
3220
3236
|
className: "hidden md:flex items-center justify-center h-9 w-9 rounded-md hover:bg-muted transition-colors",
|
|
3221
3237
|
"aria-label": "Discord",
|
|
3222
|
-
children: /* @__PURE__ */ (0,
|
|
3238
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react19.MessageCircle, { className: "h-4 w-4" })
|
|
3223
3239
|
}
|
|
3224
3240
|
),
|
|
3225
|
-
/* @__PURE__ */ (0,
|
|
3241
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(ThemeToggle, {})
|
|
3226
3242
|
] })
|
|
3227
3243
|
] }),
|
|
3228
|
-
/* @__PURE__ */ (0,
|
|
3244
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(SearchModal, { isOpen: searchOpen, onClose: () => setSearchOpen(false), config })
|
|
3229
3245
|
] });
|
|
3230
3246
|
}
|
|
3231
3247
|
|
|
@@ -3237,15 +3253,15 @@ var import_react19 = require("react");
|
|
|
3237
3253
|
|
|
3238
3254
|
// src/components/docs/footer.tsx
|
|
3239
3255
|
var import_link6 = __toESM(require("next/link"));
|
|
3240
|
-
var
|
|
3256
|
+
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
3241
3257
|
function Footer({ config }) {
|
|
3242
3258
|
if (!config.footer) {
|
|
3243
3259
|
return null;
|
|
3244
3260
|
}
|
|
3245
|
-
return /* @__PURE__ */ (0,
|
|
3246
|
-
config.footer.links && config.footer.links.length > 0 && /* @__PURE__ */ (0,
|
|
3247
|
-
/* @__PURE__ */ (0,
|
|
3248
|
-
/* @__PURE__ */ (0,
|
|
3261
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("footer", { className: "bg-muted/30 dark:bg-muted/10 rounded-2xl mt-24", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "px-6 py-12", children: [
|
|
3262
|
+
config.footer.links && config.footer.links.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-8 mb-8", children: config.footer.links.map((column, idx) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { children: [
|
|
3263
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("h3", { className: "font-semibold text-foreground mb-4", children: column.title }),
|
|
3264
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("ul", { className: "space-y-2", children: column.items.map((item, itemIdx) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
3249
3265
|
import_link6.default,
|
|
3250
3266
|
{
|
|
3251
3267
|
href: item.href,
|
|
@@ -3254,14 +3270,14 @@ function Footer({ config }) {
|
|
|
3254
3270
|
}
|
|
3255
3271
|
) }, itemIdx)) })
|
|
3256
3272
|
] }, idx)) }),
|
|
3257
|
-
config.footer.copyright && /* @__PURE__ */ (0,
|
|
3273
|
+
config.footer.copyright && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "pt-8", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("p", { className: "text-sm text-muted-foreground text-center", children: config.footer.copyright }) })
|
|
3258
3274
|
] }) });
|
|
3259
3275
|
}
|
|
3260
3276
|
|
|
3261
3277
|
// src/components/docs/site-banner.tsx
|
|
3262
3278
|
var import_lucide_react20 = require("lucide-react");
|
|
3263
3279
|
var import_react17 = require("react");
|
|
3264
|
-
var
|
|
3280
|
+
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
3265
3281
|
function SiteBanner({ config }) {
|
|
3266
3282
|
const [dismissed, setDismissed] = (0, import_react17.useState)(false);
|
|
3267
3283
|
const [mounted, setMounted] = (0, import_react17.useState)(false);
|
|
@@ -3311,23 +3327,23 @@ function SiteBanner({ config }) {
|
|
|
3311
3327
|
};
|
|
3312
3328
|
const type = banner.type || "info";
|
|
3313
3329
|
const { icon: IconComponent, bg, border, iconColor, textColor } = typeConfig[type];
|
|
3314
|
-
return /* @__PURE__ */ (0,
|
|
3315
|
-
/* @__PURE__ */ (0,
|
|
3316
|
-
/* @__PURE__ */ (0,
|
|
3317
|
-
banner.dismissible && /* @__PURE__ */ (0,
|
|
3330
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: `w-full border-b ${border} ${bg}`, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "container mx-auto px-6 py-3", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
3331
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(IconComponent, { className: `h-5 w-5 shrink-0 ${iconColor}` }),
|
|
3332
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("p", { className: `text-sm font-medium ${textColor}`, children: banner.message }) }),
|
|
3333
|
+
banner.dismissible && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
3318
3334
|
"button",
|
|
3319
3335
|
{
|
|
3320
3336
|
onClick: handleDismiss,
|
|
3321
3337
|
className: `shrink-0 p-1 rounded-md hover:bg-black/5 dark:hover:bg-white/5 transition-colors ${iconColor}`,
|
|
3322
3338
|
"aria-label": "Dismiss banner",
|
|
3323
|
-
children: /* @__PURE__ */ (0,
|
|
3339
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react20.X, { className: "h-4 w-4" })
|
|
3324
3340
|
}
|
|
3325
3341
|
)
|
|
3326
3342
|
] }) }) });
|
|
3327
3343
|
}
|
|
3328
3344
|
|
|
3329
3345
|
// src/components/docs/tab-groups.tsx
|
|
3330
|
-
var
|
|
3346
|
+
var import_jsx_runtime42 = require("react/jsx-runtime");
|
|
3331
3347
|
function TabGroups({ tabGroups, activeTabId, onTabChange }) {
|
|
3332
3348
|
const activeTab = activeTabId || tabGroups[0]?.id || "";
|
|
3333
3349
|
const handleTabChange = (tabId) => {
|
|
@@ -3336,16 +3352,16 @@ function TabGroups({ tabGroups, activeTabId, onTabChange }) {
|
|
|
3336
3352
|
if (!tabGroups || tabGroups.length === 0) {
|
|
3337
3353
|
return null;
|
|
3338
3354
|
}
|
|
3339
|
-
return /* @__PURE__ */ (0,
|
|
3355
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "sticky top-16 z-30 border-b border-border bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "container mx-auto px-6", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("nav", { className: "flex gap-1 overflow-x-auto no-scrollbar", "aria-label": "Documentation tabs", children: tabGroups.map((tab) => {
|
|
3340
3356
|
const isActive = tab.id === activeTab;
|
|
3341
|
-
return /* @__PURE__ */ (0,
|
|
3357
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
|
|
3342
3358
|
"button",
|
|
3343
3359
|
{
|
|
3344
3360
|
onClick: () => handleTabChange(tab.id),
|
|
3345
3361
|
className: `flex items-center gap-2 px-4 py-3 text-sm font-medium whitespace-nowrap transition-all border-b-2 ${isActive ? "border-primary text-primary" : "border-transparent text-muted-foreground hover:text-foreground hover:border-border"}`,
|
|
3346
3362
|
"aria-current": isActive ? "page" : void 0,
|
|
3347
3363
|
children: [
|
|
3348
|
-
tab.icon && /* @__PURE__ */ (0,
|
|
3364
|
+
tab.icon && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Icon, { icon: tab.icon, size: 16, className: "shrink-0" }),
|
|
3349
3365
|
tab.label
|
|
3350
3366
|
]
|
|
3351
3367
|
},
|
|
@@ -3359,7 +3375,7 @@ var import_link7 = __toESM(require("next/link"));
|
|
|
3359
3375
|
var import_navigation4 = require("next/navigation");
|
|
3360
3376
|
var import_lucide_react21 = require("lucide-react");
|
|
3361
3377
|
var import_react18 = require("react");
|
|
3362
|
-
var
|
|
3378
|
+
var import_jsx_runtime43 = require("react/jsx-runtime");
|
|
3363
3379
|
function Sidebar({ docs, version, onLinkClick, config, activeTabGroup }) {
|
|
3364
3380
|
const pathname = (0, import_navigation4.usePathname)();
|
|
3365
3381
|
const [collapsed, setCollapsed] = (0, import_react18.useState)(() => {
|
|
@@ -3464,21 +3480,21 @@ function Sidebar({ docs, version, onLinkClick, config, activeTabGroup }) {
|
|
|
3464
3480
|
const isCollapsed = hasActiveItem || isGroupActive ? false : collapsed[groupKey] ?? group.defaultCollapsed;
|
|
3465
3481
|
const marginLeft = depth > 0 ? "ml-4" : "";
|
|
3466
3482
|
const groupHref = `/docs/${version}/${group.path}`;
|
|
3467
|
-
return /* @__PURE__ */ (0,
|
|
3468
|
-
/* @__PURE__ */ (0,
|
|
3469
|
-
/* @__PURE__ */ (0,
|
|
3483
|
+
return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: `space-y-1 ${marginLeft}`, children: [
|
|
3484
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "flex items-center group", children: [
|
|
3485
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
|
|
3470
3486
|
import_link7.default,
|
|
3471
3487
|
{
|
|
3472
3488
|
href: groupHref,
|
|
3473
3489
|
onClick: onLinkClick,
|
|
3474
3490
|
className: `flex items-center gap-2 flex-1 px-3 py-2 text-sm font-semibold rounded-l-xl transition-all ${isGroupActive ? "bg-primary/10 text-primary" : "text-foreground hover:bg-accent/50"}`,
|
|
3475
3491
|
children: [
|
|
3476
|
-
group.icon ? /* @__PURE__ */ (0,
|
|
3492
|
+
group.icon ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Icon, { icon: group.icon, size: 16, className: "shrink-0" }) : /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react21.FolderOpen, { size: 16, className: "shrink-0" }),
|
|
3477
3493
|
group.label
|
|
3478
3494
|
]
|
|
3479
3495
|
}
|
|
3480
3496
|
),
|
|
3481
|
-
hasContent && group.collapsible && config.navigation?.collapsibleSidebar && /* @__PURE__ */ (0,
|
|
3497
|
+
hasContent && group.collapsible && config.navigation?.collapsibleSidebar && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
|
|
3482
3498
|
"button",
|
|
3483
3499
|
{
|
|
3484
3500
|
onClick: (e) => {
|
|
@@ -3488,11 +3504,11 @@ function Sidebar({ docs, version, onLinkClick, config, activeTabGroup }) {
|
|
|
3488
3504
|
},
|
|
3489
3505
|
className: `p-2 rounded-r-xl transition-all ${isGroupActive ? "hover:bg-primary/20" : "hover:bg-accent/50"}`,
|
|
3490
3506
|
"aria-label": isCollapsed ? "Expand section" : "Collapse section",
|
|
3491
|
-
children: isCollapsed ? /* @__PURE__ */ (0,
|
|
3507
|
+
children: isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react21.ChevronRight, { className: `h-4 w-4 ${isGroupActive ? "text-primary" : "text-muted-foreground"}` }) : /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react21.ChevronDown, { className: `h-4 w-4 ${isGroupActive ? "text-primary" : "text-muted-foreground"}` })
|
|
3492
3508
|
}
|
|
3493
3509
|
)
|
|
3494
3510
|
] }),
|
|
3495
|
-
!isCollapsed && hasContent && /* @__PURE__ */ (0,
|
|
3511
|
+
!isCollapsed && hasContent && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "ml-4 space-y-1", children: (() => {
|
|
3496
3512
|
const merged = [
|
|
3497
3513
|
...sortedChildren.map(([childKey, childGroup]) => ({
|
|
3498
3514
|
type: "group",
|
|
@@ -3513,14 +3529,14 @@ function Sidebar({ docs, version, onLinkClick, config, activeTabGroup }) {
|
|
|
3513
3529
|
} else {
|
|
3514
3530
|
const href = `/docs/${version}/${item.doc.slug}`;
|
|
3515
3531
|
const isActive = pathname === href;
|
|
3516
|
-
return /* @__PURE__ */ (0,
|
|
3532
|
+
return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
|
|
3517
3533
|
import_link7.default,
|
|
3518
3534
|
{
|
|
3519
3535
|
href,
|
|
3520
3536
|
onClick: onLinkClick,
|
|
3521
3537
|
className: `flex items-center gap-2 px-3 py-2 text-sm rounded-xl transition-all ${isActive ? "bg-primary/10 text-primary font-medium" : "text-foreground hover:text-foreground hover:bg-accent/50"}`,
|
|
3522
3538
|
children: [
|
|
3523
|
-
item.doc.meta?.icon && /* @__PURE__ */ (0,
|
|
3539
|
+
item.doc.meta?.icon && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Icon, { icon: item.doc.meta.icon, size: 16, className: "shrink-0" }),
|
|
3524
3540
|
item.doc.title
|
|
3525
3541
|
]
|
|
3526
3542
|
},
|
|
@@ -3535,20 +3551,20 @@ function Sidebar({ docs, version, onLinkClick, config, activeTabGroup }) {
|
|
|
3535
3551
|
const sortedStandalone = sortSidebarItems(standalone);
|
|
3536
3552
|
const stickyTop = hasTabGroups ? "top-[7.5rem]" : "top-24";
|
|
3537
3553
|
const maxHeight = hasTabGroups ? "max-h-[calc(100vh-10rem)]" : "max-h-[calc(100vh-7rem)]";
|
|
3538
|
-
return /* @__PURE__ */ (0,
|
|
3539
|
-
/* @__PURE__ */ (0,
|
|
3540
|
-
/* @__PURE__ */ (0,
|
|
3554
|
+
return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("aside", { className: `w-64 shrink-0 sticky ${stickyTop} self-start`, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: `${maxHeight} overflow-y-auto bg-muted/30 dark:bg-muted/10 rounded-2xl p-4 border border-border/50`, children: [
|
|
3555
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)("h2", { className: "text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-4 px-2", children: "Documentation" }),
|
|
3556
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("nav", { className: "space-y-1", children: [
|
|
3541
3557
|
sortedStandalone.length > 0 && sortedStandalone.map((doc) => {
|
|
3542
3558
|
const href = `/docs/${version}/${doc.slug}`;
|
|
3543
3559
|
const isActive = pathname === href;
|
|
3544
|
-
return /* @__PURE__ */ (0,
|
|
3560
|
+
return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
|
|
3545
3561
|
import_link7.default,
|
|
3546
3562
|
{
|
|
3547
3563
|
href,
|
|
3548
3564
|
onClick: onLinkClick,
|
|
3549
3565
|
className: `flex items-center gap-2 px-3 py-2 text-sm rounded-xl transition-all ${isActive ? "bg-primary/10 text-primary font-medium" : "text-foreground hover:text-foreground hover:bg-accent/50"}`,
|
|
3550
3566
|
children: [
|
|
3551
|
-
doc.meta?.icon && /* @__PURE__ */ (0,
|
|
3567
|
+
doc.meta?.icon && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Icon, { icon: doc.meta.icon, size: 16, className: "shrink-0" }),
|
|
3552
3568
|
doc.title
|
|
3553
3569
|
]
|
|
3554
3570
|
},
|
|
@@ -3561,7 +3577,7 @@ function Sidebar({ docs, version, onLinkClick, config, activeTabGroup }) {
|
|
|
3561
3577
|
}
|
|
3562
3578
|
|
|
3563
3579
|
// src/components/docs/mobile-doc-layout.tsx
|
|
3564
|
-
var
|
|
3580
|
+
var import_jsx_runtime44 = require("react/jsx-runtime");
|
|
3565
3581
|
function MobileDocLayout({ header, docs, version, content, toc, config, activeTabGroup, onTabChange }) {
|
|
3566
3582
|
const [sidebarOpen, setSidebarOpen] = (0, import_react19.useState)(false);
|
|
3567
3583
|
const handleTabChange = (tabId) => {
|
|
@@ -3572,10 +3588,10 @@ function MobileDocLayout({ header, docs, version, content, toc, config, activeTa
|
|
|
3572
3588
|
const headerWithProps = (0, import_react19.isValidElement)(header) ? (0, import_react19.cloneElement)(header, {
|
|
3573
3589
|
onMenuClick: toggleSidebar
|
|
3574
3590
|
}) : header;
|
|
3575
|
-
return /* @__PURE__ */ (0,
|
|
3591
|
+
return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "min-h-screen bg-background", children: [
|
|
3576
3592
|
headerWithProps,
|
|
3577
|
-
/* @__PURE__ */ (0,
|
|
3578
|
-
config.navigation?.tabGroups && config.navigation.tabGroups.length > 0 && /* @__PURE__ */ (0,
|
|
3593
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(SiteBanner, { config }),
|
|
3594
|
+
config.navigation?.tabGroups && config.navigation.tabGroups.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
3579
3595
|
TabGroups,
|
|
3580
3596
|
{
|
|
3581
3597
|
tabGroups: config.navigation.tabGroups,
|
|
@@ -3583,18 +3599,18 @@ function MobileDocLayout({ header, docs, version, content, toc, config, activeTa
|
|
|
3583
3599
|
onTabChange: handleTabChange
|
|
3584
3600
|
}
|
|
3585
3601
|
),
|
|
3586
|
-
sidebarOpen && /* @__PURE__ */ (0,
|
|
3602
|
+
sidebarOpen && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
3587
3603
|
"div",
|
|
3588
3604
|
{
|
|
3589
3605
|
className: "lg:hidden fixed inset-0 bg-background/80 backdrop-blur-sm z-40",
|
|
3590
3606
|
onClick: () => setSidebarOpen(false)
|
|
3591
3607
|
}
|
|
3592
3608
|
),
|
|
3593
|
-
/* @__PURE__ */ (0,
|
|
3609
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
3594
3610
|
"div",
|
|
3595
3611
|
{
|
|
3596
3612
|
className: `lg:hidden fixed top-0 left-0 h-full w-64 bg-background border-r border-border z-40 transform transition-transform duration-300 ease-in-out overflow-y-auto ${sidebarOpen ? "translate-x-0" : "-translate-x-full"}`,
|
|
3597
|
-
children: /* @__PURE__ */ (0,
|
|
3613
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "pt-20 px-4", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
3598
3614
|
Sidebar,
|
|
3599
3615
|
{
|
|
3600
3616
|
docs,
|
|
@@ -3606,8 +3622,8 @@ function MobileDocLayout({ header, docs, version, content, toc, config, activeTa
|
|
|
3606
3622
|
) })
|
|
3607
3623
|
}
|
|
3608
3624
|
),
|
|
3609
|
-
/* @__PURE__ */ (0,
|
|
3610
|
-
/* @__PURE__ */ (0,
|
|
3625
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("main", { className: "container mx-auto px-6 py-8", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "flex", children: [
|
|
3626
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "hidden lg:block", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
3611
3627
|
Sidebar,
|
|
3612
3628
|
{
|
|
3613
3629
|
docs,
|
|
@@ -3616,9 +3632,9 @@ function MobileDocLayout({ header, docs, version, content, toc, config, activeTa
|
|
|
3616
3632
|
activeTabGroup
|
|
3617
3633
|
}
|
|
3618
3634
|
) }),
|
|
3619
|
-
/* @__PURE__ */ (0,
|
|
3635
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "flex flex-col gap-2 px-2 md:px-8", children: [
|
|
3620
3636
|
content,
|
|
3621
|
-
/* @__PURE__ */ (0,
|
|
3637
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Footer, { config })
|
|
3622
3638
|
] }) }),
|
|
3623
3639
|
toc
|
|
3624
3640
|
] }) })
|
|
@@ -3627,7 +3643,7 @@ function MobileDocLayout({ header, docs, version, content, toc, config, activeTa
|
|
|
3627
3643
|
|
|
3628
3644
|
// src/components/docs/tab-context.tsx
|
|
3629
3645
|
var import_react20 = require("react");
|
|
3630
|
-
var
|
|
3646
|
+
var import_jsx_runtime45 = require("react/jsx-runtime");
|
|
3631
3647
|
var TabContext = (0, import_react20.createContext)(void 0);
|
|
3632
3648
|
function useTabContext() {
|
|
3633
3649
|
const context = (0, import_react20.useContext)(TabContext);
|
|
@@ -3638,7 +3654,7 @@ function useTabContext() {
|
|
|
3638
3654
|
}
|
|
3639
3655
|
|
|
3640
3656
|
// src/components/docs/doc-layout-wrapper.tsx
|
|
3641
|
-
var
|
|
3657
|
+
var import_jsx_runtime46 = require("react/jsx-runtime");
|
|
3642
3658
|
function DocLayoutWrapper({ header, docs, version, content, toc, config, currentPageTabGroup }) {
|
|
3643
3659
|
const { activeTabGroup, setActiveTabGroup } = useTabContext();
|
|
3644
3660
|
const lastPageTabGroupRef = (0, import_react21.useRef)(void 0);
|
|
@@ -3655,7 +3671,7 @@ function DocLayoutWrapper({ header, docs, version, content, toc, config, current
|
|
|
3655
3671
|
lastPageTabGroupRef.current = currentPageTabGroup;
|
|
3656
3672
|
}
|
|
3657
3673
|
}, [currentPageTabGroup, setActiveTabGroup]);
|
|
3658
|
-
return /* @__PURE__ */ (0,
|
|
3674
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
3659
3675
|
MobileDocLayout,
|
|
3660
3676
|
{
|
|
3661
3677
|
header,
|
|
@@ -3674,7 +3690,7 @@ function DocLayoutWrapper({ header, docs, version, content, toc, config, current
|
|
|
3674
3690
|
var import_react22 = require("react");
|
|
3675
3691
|
var import_navigation5 = require("next/navigation");
|
|
3676
3692
|
var import_lucide_react22 = require("lucide-react");
|
|
3677
|
-
var
|
|
3693
|
+
var import_jsx_runtime47 = require("react/jsx-runtime");
|
|
3678
3694
|
function HotReloadIndicator() {
|
|
3679
3695
|
const [isReloading, setIsReloading] = (0, import_react22.useState)(false);
|
|
3680
3696
|
const [lastReload, setLastReload] = (0, import_react22.useState)(null);
|
|
@@ -3709,14 +3725,14 @@ function HotReloadIndicator() {
|
|
|
3709
3725
|
};
|
|
3710
3726
|
}, []);
|
|
3711
3727
|
if (process.env.NODE_ENV !== "development") return null;
|
|
3712
|
-
return /* @__PURE__ */ (0,
|
|
3713
|
-
isReloading && /* @__PURE__ */ (0,
|
|
3714
|
-
/* @__PURE__ */ (0,
|
|
3715
|
-
/* @__PURE__ */ (0,
|
|
3728
|
+
return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
|
|
3729
|
+
isReloading && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "fixed bottom-4 right-4 z-50 flex items-center gap-2 px-4 py-2 bg-primary text-primary-foreground rounded-xl shadow-lg animate-in slide-in-from-bottom-2", children: [
|
|
3730
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react22.RefreshCw, { className: "h-4 w-4 animate-spin" }),
|
|
3731
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "text-sm font-medium", children: "Reloading..." })
|
|
3716
3732
|
] }),
|
|
3717
|
-
lastReload && !isReloading && /* @__PURE__ */ (0,
|
|
3718
|
-
/* @__PURE__ */ (0,
|
|
3719
|
-
/* @__PURE__ */ (0,
|
|
3733
|
+
lastReload && !isReloading && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "fixed bottom-4 right-4 z-50 flex items-center gap-2 px-4 py-2 bg-green-500 text-white rounded-xl shadow-lg animate-in slide-in-from-bottom-2", children: [
|
|
3734
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react22.RefreshCw, { className: "h-4 w-4" }),
|
|
3735
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "text-sm font-medium", children: [
|
|
3720
3736
|
"Updated at ",
|
|
3721
3737
|
lastReload.toLocaleTimeString()
|
|
3722
3738
|
] })
|
|
@@ -3727,7 +3743,7 @@ function HotReloadIndicator() {
|
|
|
3727
3743
|
// src/components/docs/dev-mode-badge.tsx
|
|
3728
3744
|
var import_react23 = require("react");
|
|
3729
3745
|
var import_lucide_react23 = require("lucide-react");
|
|
3730
|
-
var
|
|
3746
|
+
var import_jsx_runtime48 = require("react/jsx-runtime");
|
|
3731
3747
|
function DevModeBadge() {
|
|
3732
3748
|
const [isConnected, setIsConnected] = (0, import_react23.useState)(true);
|
|
3733
3749
|
(0, import_react23.useEffect)(() => {
|
|
@@ -3743,10 +3759,10 @@ function DevModeBadge() {
|
|
|
3743
3759
|
};
|
|
3744
3760
|
}, []);
|
|
3745
3761
|
if (process.env.NODE_ENV !== "development") return null;
|
|
3746
|
-
return /* @__PURE__ */ (0,
|
|
3747
|
-
/* @__PURE__ */ (0,
|
|
3748
|
-
/* @__PURE__ */ (0,
|
|
3749
|
-
/* @__PURE__ */ (0,
|
|
3762
|
+
return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "fixed top-20 left-4 z-40 flex items-center gap-2 px-3 py-1.5 bg-orange-500/10 text-orange-600 dark:text-orange-400 border border-orange-500/20 rounded-full text-xs font-medium", children: [
|
|
3763
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react23.Code2, { className: "h-3 w-3" }),
|
|
3764
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { children: "Dev Mode" }),
|
|
3765
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: `h-2 w-2 rounded-full ${isConnected ? "bg-green-500" : "bg-red-500"} animate-pulse` })
|
|
3750
3766
|
] });
|
|
3751
3767
|
}
|
|
3752
3768
|
|
|
@@ -3784,7 +3800,7 @@ var import_lucide_react24 = require("lucide-react");
|
|
|
3784
3800
|
var import_rsc2 = require("next-mdx-remote/rsc");
|
|
3785
3801
|
var import_remark_gfm2 = __toESM(require("remark-gfm"));
|
|
3786
3802
|
var import_rehype_slug2 = __toESM(require("rehype-slug"));
|
|
3787
|
-
var
|
|
3803
|
+
var import_jsx_runtime49 = require("react/jsx-runtime");
|
|
3788
3804
|
function CategoryIndex({ categoryPath, version, allDocs, title, description, content, config }) {
|
|
3789
3805
|
const childDocs = allDocs.filter((doc) => {
|
|
3790
3806
|
const parts = doc.slug.split("/");
|
|
@@ -3798,11 +3814,11 @@ function CategoryIndex({ categoryPath, version, allDocs, title, description, con
|
|
|
3798
3814
|
return "";
|
|
3799
3815
|
};
|
|
3800
3816
|
const sortedDocs = sortSidebarItems(childDocs);
|
|
3801
|
-
return /* @__PURE__ */ (0,
|
|
3802
|
-
/* @__PURE__ */ (0,
|
|
3803
|
-
/* @__PURE__ */ (0,
|
|
3804
|
-
description && /* @__PURE__ */ (0,
|
|
3805
|
-
/* @__PURE__ */ (0,
|
|
3817
|
+
return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
3818
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "mb-8", children: [
|
|
3819
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("h1", { className: "text-4xl font-bold tracking-tight mb-3 text-foreground", children: title }),
|
|
3820
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "text-lg text-muted-foreground leading-relaxed", children: description }),
|
|
3821
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "prose prose-slate dark:prose-invert max-w-none prose-headings:scroll-mt-24 prose-headings:font-semibold prose-h1:text-4xl prose-h2:text-3xl prose-h2:mt-12 prose-h2:mb-4 prose-h3:text-2xl prose-h3:mt-8 prose-h3:mb-3 prose-p:text-base prose-p:leading-7 prose-p:text-muted-foreground prose-p:mb-4 prose-a:font-normal prose-a:transition-all prose-code:text-primary prose-code:bg-muted/50 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded-md prose-code:text-[13px] prose-code:font-mono prose-code:border prose-code:border-border/50 prose-code:before:content-none prose-code:after:content-none prose-pre:bg-transparent prose-pre:p-0 prose-ul:list-disc prose-ul:list-inside prose-ul:space-y-2 prose-ul:mb-4 prose-ol:list-decimal prose-ol:list-inside prose-ol:space-y-2 prose-ol:mb-4 prose-li:leading-7 prose-li:text-muted-foreground prose-strong:text-foreground prose-strong:font-semibold", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
|
|
3806
3822
|
import_rsc2.MDXRemote,
|
|
3807
3823
|
{
|
|
3808
3824
|
source: processedContent(),
|
|
@@ -3818,7 +3834,7 @@ function CategoryIndex({ categoryPath, version, allDocs, title, description, con
|
|
|
3818
3834
|
}
|
|
3819
3835
|
) })
|
|
3820
3836
|
] }),
|
|
3821
|
-
/* @__PURE__ */ (0,
|
|
3837
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "grid grid-cols-1 sm:grid-cols-2 md:grid-cols-2 lg:grid-cols-3 gap-4", children: sortedDocs.map((doc) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
|
|
3822
3838
|
import_link8.default,
|
|
3823
3839
|
{
|
|
3824
3840
|
href: `/docs/${version}/${doc.slug}`,
|
|
@@ -3826,26 +3842,26 @@ function CategoryIndex({ categoryPath, version, allDocs, title, description, con
|
|
|
3826
3842
|
style: {
|
|
3827
3843
|
textDecoration: "none !important"
|
|
3828
3844
|
},
|
|
3829
|
-
children: /* @__PURE__ */ (0,
|
|
3830
|
-
/* @__PURE__ */ (0,
|
|
3831
|
-
/* @__PURE__ */ (0,
|
|
3832
|
-
/* @__PURE__ */ (0,
|
|
3833
|
-
/* @__PURE__ */ (0,
|
|
3845
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-start justify-between gap-4", children: [
|
|
3846
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex-1 min-w-0", children: [
|
|
3847
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [
|
|
3848
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react24.FileText, { className: "h-6 w-6 text-primary shrink-0" }),
|
|
3849
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("h3", { className: "text-lg font-semibold text-foreground group-hover:text-primary transition-colors", children: doc.meta.title || doc.title })
|
|
3834
3850
|
] }),
|
|
3835
|
-
doc.meta.description && /* @__PURE__ */ (0,
|
|
3836
|
-
doc.meta.reading_time && /* @__PURE__ */ (0,
|
|
3851
|
+
doc.meta.description && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "text-sm text-muted-foreground line-clamp-2", children: doc.meta.description }),
|
|
3852
|
+
doc.meta.reading_time && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("p", { className: "text-xs text-muted-foreground mt-2", children: [
|
|
3837
3853
|
doc.meta.reading_time,
|
|
3838
3854
|
" min read"
|
|
3839
3855
|
] })
|
|
3840
3856
|
] }),
|
|
3841
|
-
/* @__PURE__ */ (0,
|
|
3857
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react24.ChevronRight, { className: "h-5 w-5 text-muted-foreground group-hover:text-primary group-hover:translate-x-1 transition-all flex-shrink-0 mt-1" })
|
|
3842
3858
|
] })
|
|
3843
3859
|
},
|
|
3844
3860
|
doc.slug
|
|
3845
3861
|
)) }),
|
|
3846
|
-
sortedDocs.length === 0 && /* @__PURE__ */ (0,
|
|
3847
|
-
/* @__PURE__ */ (0,
|
|
3848
|
-
/* @__PURE__ */ (0,
|
|
3862
|
+
sortedDocs.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "text-center py-12 text-muted-foreground", children: [
|
|
3863
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react24.FileText, { className: "h-12 w-12 mx-auto mb-3 opacity-50" }),
|
|
3864
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { children: "No documents found in this category." })
|
|
3849
3865
|
] })
|
|
3850
3866
|
] });
|
|
3851
3867
|
}
|
|
@@ -3853,43 +3869,43 @@ function CategoryIndex({ categoryPath, version, allDocs, title, description, con
|
|
|
3853
3869
|
// src/components/docs/not-found-content.tsx
|
|
3854
3870
|
var import_link9 = __toESM(require("next/link"));
|
|
3855
3871
|
var import_lucide_react25 = require("lucide-react");
|
|
3856
|
-
var
|
|
3872
|
+
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
3857
3873
|
function NotFoundContent({ version }) {
|
|
3858
|
-
return /* @__PURE__ */ (0,
|
|
3859
|
-
/* @__PURE__ */ (0,
|
|
3860
|
-
/* @__PURE__ */ (0,
|
|
3861
|
-
/* @__PURE__ */ (0,
|
|
3862
|
-
/* @__PURE__ */ (0,
|
|
3874
|
+
return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "flex min-h-[calc(100vh-12rem)] items-center justify-center px-4 py-12", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "w-full max-w-2xl text-center", children: [
|
|
3875
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "mb-6 flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "rounded-full bg-yellow-500/10 p-4", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react25.AlertTriangle, { className: "h-16 w-16 text-yellow-500" }) }) }),
|
|
3876
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("h1", { className: "mb-3 text-5xl font-bold tracking-tight", children: "404" }),
|
|
3877
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("h2", { className: "mb-4 text-2xl font-semibold", children: "Page Not Found" }),
|
|
3878
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("p", { className: "mb-8 text-base text-muted-foreground", children: [
|
|
3863
3879
|
"The documentation page you're looking for doesn't exist or may have been moved.",
|
|
3864
|
-
/* @__PURE__ */ (0,
|
|
3880
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("br", {}),
|
|
3865
3881
|
"Try using the sidebar to find what you're looking for, or return to the documentation home."
|
|
3866
3882
|
] }),
|
|
3867
|
-
/* @__PURE__ */ (0,
|
|
3868
|
-
/* @__PURE__ */ (0,
|
|
3883
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "flex flex-col items-center justify-center gap-3 sm:flex-row", children: [
|
|
3884
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
|
|
3869
3885
|
import_link9.default,
|
|
3870
3886
|
{
|
|
3871
3887
|
href: `/docs/${version}`,
|
|
3872
3888
|
className: "inline-flex items-center gap-2 rounded-lg bg-primary px-6 py-3 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors",
|
|
3873
3889
|
children: [
|
|
3874
|
-
/* @__PURE__ */ (0,
|
|
3890
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react25.ArrowLeft, { className: "h-4 w-4" }),
|
|
3875
3891
|
"Back to Documentation"
|
|
3876
3892
|
]
|
|
3877
3893
|
}
|
|
3878
3894
|
),
|
|
3879
|
-
/* @__PURE__ */ (0,
|
|
3895
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
|
|
3880
3896
|
import_link9.default,
|
|
3881
3897
|
{
|
|
3882
3898
|
href: "/",
|
|
3883
3899
|
className: "inline-flex items-center gap-2 rounded-lg border border-border bg-background px-6 py-3 text-sm font-medium hover:bg-muted transition-colors",
|
|
3884
3900
|
children: [
|
|
3885
|
-
/* @__PURE__ */ (0,
|
|
3901
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react25.Home, { className: "h-4 w-4" }),
|
|
3886
3902
|
"Go to Homepage"
|
|
3887
3903
|
]
|
|
3888
3904
|
}
|
|
3889
3905
|
)
|
|
3890
3906
|
] }),
|
|
3891
|
-
/* @__PURE__ */ (0,
|
|
3892
|
-
/* @__PURE__ */ (0,
|
|
3907
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "mt-12 rounded-lg border border-border bg-muted/30 p-6", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
|
|
3908
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("strong", { className: "font-medium text-foreground", children: "Tip:" }),
|
|
3893
3909
|
" Use the sidebar navigation on the left to browse all available documentation pages."
|
|
3894
3910
|
] }) })
|
|
3895
3911
|
] }) });
|
|
@@ -3899,21 +3915,21 @@ function NotFoundContent({ version }) {
|
|
|
3899
3915
|
var import_react25 = require("react");
|
|
3900
3916
|
|
|
3901
3917
|
// src/components/docs/doc-loading.tsx
|
|
3902
|
-
var
|
|
3918
|
+
var import_jsx_runtime51 = require("react/jsx-runtime");
|
|
3903
3919
|
function DocLoading() {
|
|
3904
|
-
return /* @__PURE__ */ (0,
|
|
3905
|
-
/* @__PURE__ */ (0,
|
|
3906
|
-
/* @__PURE__ */ (0,
|
|
3907
|
-
/* @__PURE__ */ (0,
|
|
3908
|
-
/* @__PURE__ */ (0,
|
|
3909
|
-
/* @__PURE__ */ (0,
|
|
3910
|
-
/* @__PURE__ */ (0,
|
|
3920
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "max-w-4xl mx-auto px-6 py-8", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "animate-pulse space-y-4", children: [
|
|
3921
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "h-8 bg-gray-200 rounded w-3/4" }),
|
|
3922
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "h-4 bg-gray-200 rounded w-1/2" }),
|
|
3923
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "space-y-3 mt-8", children: [
|
|
3924
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "h-4 bg-gray-200 rounded" }),
|
|
3925
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "h-4 bg-gray-200 rounded w-5/6" }),
|
|
3926
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "h-4 bg-gray-200 rounded w-4/6" })
|
|
3911
3927
|
] })
|
|
3912
3928
|
] }) });
|
|
3913
3929
|
}
|
|
3914
3930
|
|
|
3915
3931
|
// src/app/docs-page.tsx
|
|
3916
|
-
var
|
|
3932
|
+
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
3917
3933
|
async function generateMetadata({ params }) {
|
|
3918
3934
|
const { version, slug: slugArray } = await params;
|
|
3919
3935
|
const slug = slugArray.join("/");
|
|
@@ -3973,14 +3989,14 @@ async function DocPage({ params }) {
|
|
|
3973
3989
|
if (!doc && isCategory) {
|
|
3974
3990
|
const categoryDoc = allDocs.find((d) => d.slug.startsWith(slug + "/"));
|
|
3975
3991
|
const categoryTabGroup = categoryDoc?.meta?.tab_group || categoryDoc?.categoryTabGroup;
|
|
3976
|
-
return /* @__PURE__ */ (0,
|
|
3977
|
-
/* @__PURE__ */ (0,
|
|
3992
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_jsx_runtime52.Fragment, { children: [
|
|
3993
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
3978
3994
|
DocLayoutWrapper,
|
|
3979
3995
|
{
|
|
3980
|
-
header: /* @__PURE__ */ (0,
|
|
3996
|
+
header: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Header, { currentVersion: version, versions, config }),
|
|
3981
3997
|
docs: allDocs,
|
|
3982
3998
|
version,
|
|
3983
|
-
content: /* @__PURE__ */ (0,
|
|
3999
|
+
content: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
3984
4000
|
CategoryIndex,
|
|
3985
4001
|
{
|
|
3986
4002
|
categoryPath: slug,
|
|
@@ -3991,47 +4007,47 @@ async function DocPage({ params }) {
|
|
|
3991
4007
|
config
|
|
3992
4008
|
}
|
|
3993
4009
|
),
|
|
3994
|
-
toc: /* @__PURE__ */ (0,
|
|
4010
|
+
toc: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", {}),
|
|
3995
4011
|
config,
|
|
3996
4012
|
currentPageTabGroup: categoryTabGroup
|
|
3997
4013
|
}
|
|
3998
4014
|
),
|
|
3999
|
-
/* @__PURE__ */ (0,
|
|
4000
|
-
/* @__PURE__ */ (0,
|
|
4001
|
-
/* @__PURE__ */ (0,
|
|
4015
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(MdxHotReload, {}),
|
|
4016
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(HotReloadIndicator, {}),
|
|
4017
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(DevModeBadge, {})
|
|
4002
4018
|
] });
|
|
4003
4019
|
}
|
|
4004
4020
|
if (!doc) {
|
|
4005
|
-
return /* @__PURE__ */ (0,
|
|
4006
|
-
/* @__PURE__ */ (0,
|
|
4021
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_jsx_runtime52.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_react25.Suspense, { fallback: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(DocLoading, {}), children: [
|
|
4022
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
4007
4023
|
DocLayoutWrapper,
|
|
4008
4024
|
{
|
|
4009
|
-
header: /* @__PURE__ */ (0,
|
|
4025
|
+
header: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Header, { currentVersion: version, versions, config }),
|
|
4010
4026
|
docs: allDocs,
|
|
4011
4027
|
version,
|
|
4012
|
-
content: /* @__PURE__ */ (0,
|
|
4013
|
-
toc: /* @__PURE__ */ (0,
|
|
4028
|
+
content: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(NotFoundContent, { version }),
|
|
4029
|
+
toc: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", {}),
|
|
4014
4030
|
config,
|
|
4015
4031
|
currentPageTabGroup: void 0
|
|
4016
4032
|
}
|
|
4017
4033
|
),
|
|
4018
|
-
/* @__PURE__ */ (0,
|
|
4019
|
-
/* @__PURE__ */ (0,
|
|
4020
|
-
/* @__PURE__ */ (0,
|
|
4034
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(MdxHotReload, {}),
|
|
4035
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(HotReloadIndicator, {}),
|
|
4036
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(DevModeBadge, {})
|
|
4021
4037
|
] }) });
|
|
4022
4038
|
}
|
|
4023
4039
|
const toc = extractTableOfContents(doc.content);
|
|
4024
4040
|
const { previous, next } = getAdjacentDocs(slug, allDocs);
|
|
4025
4041
|
const showCategoryIndex = isCategory && doc;
|
|
4026
4042
|
const currentPageTabGroup = doc.meta?.tab_group || doc.categoryTabGroup;
|
|
4027
|
-
return /* @__PURE__ */ (0,
|
|
4028
|
-
/* @__PURE__ */ (0,
|
|
4043
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_jsx_runtime52.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_react25.Suspense, { fallback: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(DocLoading, {}), children: [
|
|
4044
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
4029
4045
|
DocLayoutWrapper,
|
|
4030
4046
|
{
|
|
4031
|
-
header: /* @__PURE__ */ (0,
|
|
4047
|
+
header: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Header, { currentVersion: version, versions, config }),
|
|
4032
4048
|
docs: allDocs,
|
|
4033
4049
|
version,
|
|
4034
|
-
content: showCategoryIndex ? /* @__PURE__ */ (0,
|
|
4050
|
+
content: showCategoryIndex ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
4035
4051
|
CategoryIndex,
|
|
4036
4052
|
{
|
|
4037
4053
|
categoryPath: slug,
|
|
@@ -4042,7 +4058,7 @@ async function DocPage({ params }) {
|
|
|
4042
4058
|
content: doc.content,
|
|
4043
4059
|
config
|
|
4044
4060
|
}
|
|
4045
|
-
) : /* @__PURE__ */ (0,
|
|
4061
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
4046
4062
|
DocLayout,
|
|
4047
4063
|
{
|
|
4048
4064
|
meta: doc.meta,
|
|
@@ -4054,14 +4070,14 @@ async function DocPage({ params }) {
|
|
|
4054
4070
|
config
|
|
4055
4071
|
}
|
|
4056
4072
|
),
|
|
4057
|
-
toc: showCategoryIndex ? /* @__PURE__ */ (0,
|
|
4073
|
+
toc: showCategoryIndex ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", {}) : /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(TableOfContents, { items: toc, config }),
|
|
4058
4074
|
config,
|
|
4059
4075
|
currentPageTabGroup
|
|
4060
4076
|
}
|
|
4061
4077
|
),
|
|
4062
|
-
/* @__PURE__ */ (0,
|
|
4063
|
-
/* @__PURE__ */ (0,
|
|
4064
|
-
/* @__PURE__ */ (0,
|
|
4078
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(MdxHotReload, {}),
|
|
4079
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(HotReloadIndicator, {}),
|
|
4080
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(DevModeBadge, {})
|
|
4065
4081
|
] }) });
|
|
4066
4082
|
}
|
|
4067
4083
|
// Annotate the CommonJS export names for ESM import in node:
|