@mintlify/msft-sdk 1.1.10 → 1.1.12
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/components/content-components/code-block.js +3 -3
- package/dist/components/content-components/code-block.js.map +1 -1
- package/dist/components/content-components/default-components.js +21 -26
- package/dist/components/content-components/default-components.js.map +1 -1
- package/dist/components/content-components/details/details.js +1 -1
- package/dist/components/content-components/details/details.js.map +1 -1
- package/dist/components/content-components/home.js +3 -278
- package/dist/components/content-components/home.js.map +1 -1
- package/dist/components/content-components/image.js +80 -0
- package/dist/components/content-components/image.js.map +1 -0
- package/dist/components/content-components/param-name.js +1 -1
- package/dist/components/content-components/param-name.js.map +1 -1
- package/dist/components/content-components/zone-pivots/zone-pivot-selector.js +22 -19
- package/dist/components/content-components/zone-pivots/zone-pivot-selector.js.map +1 -1
- package/dist/components/docsLayout.js +60 -0
- package/dist/components/docsLayout.js.map +1 -0
- package/dist/components/docsPage.js +128 -0
- package/dist/components/docsPage.js.map +1 -0
- package/dist/components/nav-tree/index.js +127 -159
- package/dist/components/nav-tree/index.js.map +1 -1
- package/dist/components/nav-tree/mobile-nav.js +21 -23
- package/dist/components/nav-tree/mobile-nav.js.map +1 -1
- package/dist/components/page-context-menu.js +47 -53
- package/dist/components/page-context-menu.js.map +1 -1
- package/dist/components/toc/index.js +5 -5
- package/dist/components/toc/index.js.map +1 -1
- package/dist/index.d.ts +180 -40
- package/dist/index.js +62 -64
- package/dist/index.js.map +1 -1
- package/dist/parser/serialize-mdx.js +27 -22
- package/dist/parser/serialize-mdx.js.map +1 -1
- package/dist/plugins/extract-headings.js +23 -17
- package/dist/plugins/extract-headings.js.map +1 -1
- package/dist/plugins/remark/remark-heading-ids.js +21 -14
- package/dist/plugins/remark/remark-heading-ids.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/dist/components/Api/Api.js +0 -42
- package/dist/components/Api/Api.js.map +0 -1
- package/dist/components/Api/Api.module.css.js +0 -22
- package/dist/components/Api/Api.module.css.js.map +0 -1
- package/dist/components/nav-tree/dropdown-menu.js +0 -75
- package/dist/components/nav-tree/dropdown-menu.js.map +0 -1
- package/dist/components/page.js +0 -120
- package/dist/components/page.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobile-nav.js","sources":["../../../src/components/nav-tree/mobile-nav.tsx"],"sourcesContent":["import { NavTreeData, LinkComponent } from \"../../types\";\nimport { Dialog, DialogBackdrop, DialogPanel } from \"@headlessui/react\";\nimport {
|
|
1
|
+
{"version":3,"file":"mobile-nav.js","sources":["../../../src/components/nav-tree/mobile-nav.tsx"],"sourcesContent":["import { NavTreeData, LinkComponent } from \"../../types\";\nimport { Dialog, DialogBackdrop, DialogPanel } from \"@headlessui/react\";\nimport { NavTree, BottomLinkConfig } from \"./index\";\nimport { Dismiss16Regular } from \"@fluentui/react-icons\";\nimport { ComponentsProvider } from \"../../context/components-context\";\nimport { cn } from \"../../utils/cn\";\nimport \"../../styles.css\";\n\nexport interface MobileNavTreeProps {\n isOpen: boolean;\n setIsOpen: (isOpen: boolean) => void;\n navTree: NavTreeData;\n activeId?: string;\n className?: string;\n theme?: \"light\" | \"dark\" | \"system\";\n activeHref?: string;\n bottomLinks?: BottomLinkConfig[];\n LinkComponent?: LinkComponent;\n}\n\nexport function MobileNavTree({\n isOpen,\n setIsOpen,\n navTree,\n activeId,\n className = \"\",\n theme,\n activeHref,\n bottomLinks,\n LinkComponent,\n}: MobileNavTreeProps) {\n return (\n <ComponentsProvider LinkComponent={LinkComponent}>\n <Dialog\n open={isOpen}\n onClose={() => setIsOpen(false)}\n className={cn(\n \"mint:fixed mint:inset-0 mint:overflow-y-auto mint:z-50 mint:lg:hidden\",\n theme === \"dark\" && \"mint:dark\"\n )}\n >\n <DialogBackdrop\n transition\n className=\"mint:fixed mint:inset-0 mint:bg-black/20 mint:dark:bg-black/80 mint:backdrop-blur mint:transition-opacity mint:duration-300 mint:ease-out mint:data-[closed]:opacity-0\"\n />\n <div className=\"mint:fixed mint:inset-0 mint:flex\">\n {isOpen && <CloseButton setIsOpen={setIsOpen} />}\n <DialogPanel\n id=\"mobile-nav\"\n transition\n className=\"mint:flex mint:flex-col mint:relative mint:bg-white mint:dark:bg-[#0f0f0f] mint:w-[85vw] mint:min-w-[19rem] mint:max-w-[22rem] mint:min-h-full mint:transition-transform mint:duration-100 mint:ease-in-out mint:data-[closed]:-translate-x-full\"\n >\n <div className=\"mint:flex mint:flex-col mint:flex-1 mint:p-4 mint:pt-4 mint:pb-12 mint:overflow-y-auto mint:h-full\">\n <NavTree\n navTree={navTree}\n activeId={activeId}\n className={className}\n activeHref={activeHref}\n theme={theme}\n bottomLinks={bottomLinks}\n />\n </div>\n </DialogPanel>\n </div>\n </Dialog>\n </ComponentsProvider>\n );\n}\n\nconst CloseButton = ({\n setIsOpen,\n}: {\n setIsOpen: (isOpen: boolean) => void;\n}) => {\n return (\n <button\n type=\"button\"\n onClick={() => setIsOpen(false)}\n className=\"mint:absolute mint:bg-white mint:dark:bg-[#0f0f0f] mint:rounded-full mint:top-4 mint:right-4 mint:w-8 mint:h-8 mint:flex mint:items-center mint:justify-center mint:border-none mint:cursor-pointer\"\n >\n <span className=\"mint:absolute mint:w-px mint:h-px mint:p-0 mint:-m-px mint:overflow-hidden mint:whitespace-nowrap mint:border-0 mint:[clip:rect(0,0,0,0)]\">\n Close navigation\n </span>\n <Dismiss16Regular className=\"mint:w-4 mint:h-4 mint:text-[#6b7280] mint:dark:text-[#9ca3af] mint:hover:text-[#4b5563] mint:dark:hover:text-[#d1d5db]\" />\n </button>\n );\n};\n"],"names":["MobileNavTree","isOpen","setIsOpen","navTree","activeId","className","theme","activeHref","bottomLinks","LinkComponent","jsx","ComponentsProvider","jsxs","Dialog","cn","DialogBackdrop","CloseButton","DialogPanel","NavTree","Dismiss16Regular"],"mappings":";;;;;;;AAoBO,SAASA,EAAc;AAAA,EAC5B,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC;AACF,GAAuB;AACrB,SACE,gBAAAC,EAACC,GAAA,EAAmB,eAAeF,GACjC,UAAA,gBAAAG;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAMZ;AAAA,MACN,SAAS,MAAMC,EAAU,EAAK;AAAA,MAC9B,WAAWY;AAAA,QACT;AAAA,QACAR,MAAU,UAAU;AAAA,MAAA;AAAA,MAGtB,UAAA;AAAA,QAAA,gBAAAI;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,YAAU;AAAA,YACV,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAEZ,gBAAAH,EAAC,OAAA,EAAI,WAAU,qCACZ,UAAA;AAAA,UAAAX,KAAU,gBAAAS,EAACM,KAAY,WAAAd,EAAA,CAAsB;AAAA,UAC9C,gBAAAQ;AAAA,YAACO;AAAA,YAAA;AAAA,cACC,IAAG;AAAA,cACH,YAAU;AAAA,cACV,WAAU;AAAA,cAEV,UAAA,gBAAAP,EAAC,OAAA,EAAI,WAAU,sGACb,UAAA,gBAAAA;AAAA,gBAACQ;AAAA,gBAAA;AAAA,kBACC,SAAAf;AAAA,kBACA,UAAAC;AAAA,kBACA,WAAAC;AAAA,kBACA,YAAAE;AAAA,kBACA,OAAAD;AAAA,kBACA,aAAAE;AAAA,gBAAA;AAAA,cAAA,EACF,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AAEA,MAAMQ,IAAc,CAAC;AAAA,EACnB,WAAAd;AACF,MAII,gBAAAU;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,SAAS,MAAMV,EAAU,EAAK;AAAA,IAC9B,WAAU;AAAA,IAEV,UAAA;AAAA,MAAA,gBAAAQ,EAAC,QAAA,EAAK,WAAU,6IAA4I,UAAA,oBAE5J;AAAA,MACA,gBAAAA,EAACS,GAAA,EAAiB,WAAU,0HAAA,CAA0H;AAAA,IAAA;AAAA,EAAA;AAAA;"}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as h, useRef as
|
|
3
|
-
import { CopyRegular as k, MarkdownRegular as
|
|
1
|
+
import { jsxs as m, jsx as e, Fragment as g } from "react/jsx-runtime";
|
|
2
|
+
import { useState as h, useRef as C, useEffect as w } from "react";
|
|
3
|
+
import { CopyRegular as k, MarkdownRegular as F, ChevronDownRegular as T, DocumentOnePageSparkleRegular as I, DocumentOnePageMultipleSparkleRegular as L } from "@fluentui/react-icons";
|
|
4
4
|
import { copyMarkdownToClipboard as S } from "../hooks/useMarkdownCopy.js";
|
|
5
|
-
import { cn as
|
|
6
|
-
const
|
|
5
|
+
import { cn as u } from "../utils/cn.js";
|
|
6
|
+
const z = ({
|
|
7
7
|
className: v,
|
|
8
8
|
pathname: d,
|
|
9
|
-
markdownContent:
|
|
10
|
-
onCopyMarkdown:
|
|
9
|
+
markdownContent: x,
|
|
10
|
+
onCopyMarkdown: i,
|
|
11
11
|
onViewMarkdown: p,
|
|
12
12
|
allPages: N,
|
|
13
13
|
baseUrl: _
|
|
14
14
|
}) => {
|
|
15
|
-
const [r, s] = h(!1), [a,
|
|
15
|
+
const [r, s] = h(!1), [a, f] = h(!1), c = C(null);
|
|
16
16
|
w(() => {
|
|
17
17
|
if (a) {
|
|
18
18
|
const t = setTimeout(() => {
|
|
19
|
-
|
|
19
|
+
f(!1);
|
|
20
20
|
}, 2e3);
|
|
21
21
|
return () => clearTimeout(t);
|
|
22
22
|
}
|
|
@@ -28,70 +28,67 @@ const B = ({
|
|
|
28
28
|
document.removeEventListener("mousedown", t);
|
|
29
29
|
};
|
|
30
30
|
}, [r]);
|
|
31
|
-
const
|
|
32
|
-
|
|
31
|
+
const y = async () => {
|
|
32
|
+
f(!0);
|
|
33
33
|
try {
|
|
34
|
-
if (
|
|
34
|
+
if (x) {
|
|
35
35
|
const t = new ClipboardItem({
|
|
36
|
-
"text/plain": new Blob([
|
|
36
|
+
"text/plain": new Blob([x], { type: "text/plain" })
|
|
37
37
|
});
|
|
38
|
-
await navigator.clipboard.write([t]),
|
|
38
|
+
await navigator.clipboard.write([t]), i == null || i();
|
|
39
39
|
} else
|
|
40
40
|
S({
|
|
41
41
|
pathname: d,
|
|
42
42
|
onSuccess: () => {
|
|
43
|
-
|
|
43
|
+
i == null || i();
|
|
44
44
|
}
|
|
45
45
|
});
|
|
46
46
|
} catch (t) {
|
|
47
47
|
console.error("Failed to copy markdown:", t);
|
|
48
48
|
}
|
|
49
|
-
},
|
|
49
|
+
}, R = () => {
|
|
50
50
|
p ? p(d) : window.open(`${d}.md`, "_blank");
|
|
51
|
-
}, L = () => {
|
|
52
|
-
window.open("/docs/llms.txt", "_blank");
|
|
53
51
|
}, O = () => {
|
|
52
|
+
window.open("/docs/llms.txt", "_blank");
|
|
53
|
+
}, P = () => {
|
|
54
54
|
window.open("/docs/llms-full.txt", "_blank");
|
|
55
55
|
}, l = (t) => () => {
|
|
56
56
|
s(!1), t();
|
|
57
|
-
},
|
|
57
|
+
}, n = [
|
|
58
58
|
{
|
|
59
59
|
id: "copy",
|
|
60
60
|
title: "Copy Page",
|
|
61
61
|
description: "Copy page as markdown",
|
|
62
62
|
icon: k,
|
|
63
|
-
action: l(
|
|
63
|
+
action: l(y)
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
66
|
id: "view",
|
|
67
67
|
title: "View as Markdown",
|
|
68
68
|
description: "View this page as plain text",
|
|
69
|
-
icon:
|
|
70
|
-
action: l(
|
|
71
|
-
externalLink: !0
|
|
69
|
+
icon: F,
|
|
70
|
+
action: l(R)
|
|
72
71
|
}
|
|
73
72
|
];
|
|
74
|
-
N && _ && (
|
|
73
|
+
N && _ && (n.push({
|
|
75
74
|
id: "llms",
|
|
76
75
|
title: "View llms.txt",
|
|
77
76
|
description: "View generated llms.txt file",
|
|
78
|
-
icon:
|
|
79
|
-
action: l(
|
|
80
|
-
|
|
81
|
-
}), m.push({
|
|
77
|
+
icon: I,
|
|
78
|
+
action: l(O)
|
|
79
|
+
}), n.push({
|
|
82
80
|
id: "llms-full",
|
|
83
81
|
title: "View llms-full.txt",
|
|
84
82
|
description: "Generated llms-full.txt file",
|
|
85
|
-
icon:
|
|
86
|
-
action: l(
|
|
87
|
-
externalLink: !0
|
|
83
|
+
icon: L,
|
|
84
|
+
action: l(P)
|
|
88
85
|
}));
|
|
89
|
-
const o =
|
|
90
|
-
return /* @__PURE__ */
|
|
86
|
+
const o = n[0];
|
|
87
|
+
return /* @__PURE__ */ m(
|
|
91
88
|
"div",
|
|
92
89
|
{
|
|
93
|
-
className:
|
|
94
|
-
"mint:flex mint:items-center mint:
|
|
90
|
+
className: u(
|
|
91
|
+
"mint:flex mint:items-center mint:justify-end mint:shrink-0 mint:w-[160px]",
|
|
95
92
|
v
|
|
96
93
|
),
|
|
97
94
|
ref: c,
|
|
@@ -99,33 +96,33 @@ const B = ({
|
|
|
99
96
|
/* @__PURE__ */ e(
|
|
100
97
|
"button",
|
|
101
98
|
{
|
|
102
|
-
className:
|
|
103
|
-
"mint:rounded-
|
|
104
|
-
|
|
99
|
+
className: u(
|
|
100
|
+
"mint:rounded-full mint:py-1.5 mint:px-3 mint:border mint:border-[#e5e7eb] mint:dark:border-[rgba(255,255,255,0.07)] mint:bg-white mint:dark:bg-[#1a1a1a] mint:text-[#374151] mint:dark:text-[#d1d5db] mint:cursor-pointer mint:flex mint:items-center mint:gap-2 mint:text-sm mint:font-medium mint:hover:bg-[rgba(75,85,99,0.05)] mint:dark:hover:bg-[rgba(229,231,235,0.05)]",
|
|
101
|
+
n.length > 1 && "mint:rounded-tr-none mint:rounded-br-none mint:border-r-0",
|
|
105
102
|
a && "mint:text-[#6b7280] mint:dark:text-[#9ca3af]"
|
|
106
103
|
),
|
|
107
104
|
onClick: () => {
|
|
108
105
|
o.action();
|
|
109
106
|
},
|
|
110
|
-
children: /* @__PURE__ */ e("div", { className: "mint:flex mint:items-center mint:gap-2 mint:text-sm mint:font-medium mint:text-[#242424] mint:dark:text-[#dbdbdb]", children: o.id === "copy" ? /* @__PURE__ */
|
|
107
|
+
children: /* @__PURE__ */ e("div", { className: "mint:flex mint:items-center mint:gap-2 mint:text-sm mint:font-medium mint:text-[#242424] mint:dark:text-[#dbdbdb]", children: o.id === "copy" ? /* @__PURE__ */ m(g, { children: [
|
|
111
108
|
/* @__PURE__ */ e(k, { className: "mint:w-5 mint:h-5 mint:text-[#424242] mint:dark:text-[#b2b2b2]" }),
|
|
112
|
-
/* @__PURE__ */ e("span", { children: a ? "Copied" : "Copy Page" })
|
|
113
|
-
] }) : /* @__PURE__ */
|
|
109
|
+
/* @__PURE__ */ e("span", { className: "mint:font-semibold", children: a ? "Copied" : "Copy Page" })
|
|
110
|
+
] }) : /* @__PURE__ */ m(g, { children: [
|
|
114
111
|
/* @__PURE__ */ e(o.icon, { className: "mint:w-5 mint:h-5 mint:text-[#424242] mint:dark:text-[#b2b2b2]" }),
|
|
115
112
|
/* @__PURE__ */ e("span", { children: o.title })
|
|
116
113
|
] }) })
|
|
117
114
|
}
|
|
118
115
|
),
|
|
119
|
-
|
|
116
|
+
n.length > 1 && /* @__PURE__ */ m("div", { className: "mint:relative", children: [
|
|
120
117
|
/* @__PURE__ */ e(
|
|
121
118
|
"button",
|
|
122
119
|
{
|
|
123
|
-
className: "mint:rounded-none mint:rounded-tr-
|
|
120
|
+
className: "mint:rounded-none mint:rounded-tr-full mint:rounded-br-full mint:py-1.5 mint:px-2 mint:border mint:border-[#e5e7eb] mint:dark:border-[rgba(255,255,255,0.07)] mint:bg-white mint:dark:bg-[#1a1a1a] mint:text-[#374151] mint:dark:text-[#d1d5db] mint:cursor-pointer mint:hover:bg-[rgba(75,85,99,0.05)] mint:dark:hover:bg-[rgba(229,231,235,0.05)]",
|
|
124
121
|
onClick: () => s(!r),
|
|
125
122
|
children: /* @__PURE__ */ e(
|
|
126
|
-
|
|
123
|
+
T,
|
|
127
124
|
{
|
|
128
|
-
className:
|
|
125
|
+
className: u(
|
|
129
126
|
"mint:w-4 mint:h-4 mint:transition-transform mint:duration-150",
|
|
130
127
|
r && "mint:rotate-180"
|
|
131
128
|
)
|
|
@@ -133,18 +130,15 @@ const B = ({
|
|
|
133
130
|
)
|
|
134
131
|
}
|
|
135
132
|
),
|
|
136
|
-
r && /* @__PURE__ */ e("div", { className: "mint:absolute mint:right-0 mint:top-full mint:mt-1 mint:z-50 mint:max-h-[420px] mint:
|
|
133
|
+
r && /* @__PURE__ */ e("div", { className: "mint:absolute mint:right-0 mint:top-full mint:mt-1 mint:z-50 mint:max-h-[420px] mint:p-1 mint:min-w-[240px] mint:border mint:border-[#e5e7eb] mint:dark:border-[rgba(255,255,255,0.07)] mint:bg-white mint:dark:bg-[#1a1a1a] mint:rounded-2xl mint:shadow-[0_20px_25px_-5px_rgba(0,0,0,0.1),0_10px_10px_-5px_rgba(0,0,0,0.04)] mint:overflow-y-auto", children: n.map((t, b) => /* @__PURE__ */ m(
|
|
137
134
|
"button",
|
|
138
135
|
{
|
|
139
136
|
onClick: t.action,
|
|
140
137
|
className: "mint:w-full mint:flex mint:items-center mint:gap-3 mint:py-2 mint:px-2.5 mint:cursor-pointer mint:rounded-xl mint:transition-colors mint:duration-150 mint:border-none mint:bg-none mint:hover:bg-[rgba(75,85,99,0.05)] mint:dark:hover:bg-[rgba(229,231,235,0.05)]",
|
|
141
138
|
children: [
|
|
142
|
-
/* @__PURE__ */ e("div", { className: "mint:border mint:border-[#e5e7eb] mint:dark:border-[rgba(255,255,255,0.07)] mint:rounded-lg mint:p-1 mint:
|
|
143
|
-
/* @__PURE__ */
|
|
144
|
-
/* @__PURE__ */
|
|
145
|
-
t.title,
|
|
146
|
-
t.externalLink && /* @__PURE__ */ e(T, { className: "mint:w-3 mint:h-3 mint:text-[#6b7280] mint:dark:text-[#9ca3af] mint:flex-shrink-0" })
|
|
147
|
-
] }),
|
|
139
|
+
/* @__PURE__ */ e("div", { className: "mint:border mint:border-[#e5e7eb] mint:dark:border-[rgba(255,255,255,0.07)] mint:rounded-lg mint:p-1 mint:shrink-0", children: /* @__PURE__ */ e(t.icon, { className: "mint:w-5 mint:h-5 mint:text-[#424242] mint:dark:text-[#b2b2b2]" }) }),
|
|
140
|
+
/* @__PURE__ */ m("div", { className: "mint:flex mint:flex-col mint:flex-1 mint:min-w-0 mint:text-left", children: [
|
|
141
|
+
/* @__PURE__ */ e("div", { className: "mint:text-sm mint:font-medium mint:text-[#1f2937] mint:dark:text-[#d1d5db] mint:flex mint:items-center mint:gap-1.5", children: t.title }),
|
|
148
142
|
/* @__PURE__ */ e("div", { className: "mint:text-xs mint:text-[#6b7280] mint:dark:text-[#9ca3af] mint:mt-0.5", children: t.description })
|
|
149
143
|
] })
|
|
150
144
|
]
|
|
@@ -157,6 +151,6 @@ const B = ({
|
|
|
157
151
|
);
|
|
158
152
|
};
|
|
159
153
|
export {
|
|
160
|
-
|
|
154
|
+
z as PageContextMenu
|
|
161
155
|
};
|
|
162
156
|
//# sourceMappingURL=page-context-menu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-context-menu.js","sources":["../../src/components/page-context-menu.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from \"react\";\nimport {\n CopyRegular,\n MarkdownRegular,\n ChevronDownRegular,\n ArrowUpRightRegular,\n DocumentTextRegular,\n DocumentOnePageSparkleRegular,\n DocumentOnePageMultipleSparkleRegular,\n} from \"@fluentui/react-icons\";\nimport { copyMarkdownToClipboard } from \"../hooks/useMarkdownCopy\";\nimport type { LlmsPageConfig } from \"../utils/generate-llms-txt\";\nimport { cn } from \"../utils/cn\";\n\nexport type ContextualOption = {\n id: string;\n title: string;\n description: string;\n icon: React.ElementType;\n action: () => void;\n externalLink?: boolean;\n};\n\nexport interface PageContextMenuProps {\n className?: string;\n pathname: string;\n markdownContent?: string;\n onCopyMarkdown?: () => void;\n onViewMarkdown?: (pathname: string) => void;\n allPages?: LlmsPageConfig[];\n baseUrl?: string;\n}\n\nexport const PageContextMenu = ({\n className,\n pathname,\n markdownContent,\n onCopyMarkdown,\n onViewMarkdown,\n allPages,\n baseUrl,\n}: PageContextMenuProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const [isCopied, setIsCopied] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (isCopied) {\n const timeout = setTimeout(() => {\n setIsCopied(false);\n }, 2000);\n return () => clearTimeout(timeout);\n }\n }, [isCopied]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpen]);\n\n const copyPageAsMarkdown = async () => {\n setIsCopied(true);\n try {\n if (markdownContent) {\n const clipboardItem = new ClipboardItem({\n \"text/plain\": new Blob([markdownContent], { type: \"text/plain\" }),\n });\n await navigator.clipboard.write([clipboardItem]);\n onCopyMarkdown?.();\n } else {\n copyMarkdownToClipboard({\n pathname,\n onSuccess: () => {\n onCopyMarkdown?.();\n },\n });\n }\n } catch (error) {\n console.error(\"Failed to copy markdown:\", error);\n }\n };\n\n const viewAsMarkdown = () => {\n if (onViewMarkdown) {\n onViewMarkdown(pathname);\n } else {\n window.open(`${pathname}.md`, \"_blank\");\n }\n };\n\n const viewLlmsTxtFile = () => {\n window.open(\"/docs/llms.txt\", \"_blank\");\n };\n\n const viewLlmsFullTxtFile = () => {\n window.open(\"/docs/llms-full.txt\", \"_blank\");\n };\n\n const wrapAction = (actionFn: () => void) => {\n return () => {\n setIsOpen(false);\n actionFn();\n };\n };\n\n const options: ContextualOption[] = [\n {\n id: \"copy\",\n title: \"Copy Page\",\n description: \"Copy page as markdown\",\n icon: CopyRegular,\n action: wrapAction(copyPageAsMarkdown),\n },\n {\n id: \"view\",\n title: \"View as Markdown\",\n description: \"View this page as plain text\",\n icon: MarkdownRegular,\n action: wrapAction(viewAsMarkdown),\n externalLink: true,\n },\n ];\n\n if (allPages && baseUrl) {\n options.push({\n id: \"llms\",\n title: \"View llms.txt\",\n description: \"View generated llms.txt file\",\n icon: DocumentOnePageSparkleRegular,\n action: wrapAction(viewLlmsTxtFile),\n externalLink: true,\n });\n options.push({\n id: \"llms-full\",\n title: \"View llms-full.txt\",\n description: \"Generated llms-full.txt file\",\n icon: DocumentOnePageMultipleSparkleRegular,\n action: wrapAction(viewLlmsFullTxtFile),\n externalLink: true,\n });\n }\n\n const firstOption = options[0];\n\n return (\n <div\n className={cn(\n \"mint:flex mint:items-center mint:flex-shrink-0\",\n className\n )}\n ref={dropdownRef}\n >\n <button\n className={cn(\n \"mint:rounded-xl mint:py-1.5 mint:px-3 mint:border mint:border-[#e5e7eb] mint:dark:border-[rgba(255,255,255,0.07)] mint:bg-white mint:dark:bg-[#1a1a1a] mint:text-[#374151] mint:dark:text-[#d1d5db] mint:cursor-pointer mint:flex mint:items-center mint:gap-2 mint:text-sm mint:font-medium mint:hover:bg-[rgba(75,85,99,0.05)] mint:dark:hover:bg-[rgba(229,231,235,0.05)]\",\n options.length > 1 &&\n \"mint:rounded-tr-none mint:rounded-br-none mint:border-r-0\",\n isCopied && \"mint:text-[#6b7280] mint:dark:text-[#9ca3af]\"\n )}\n onClick={() => {\n void firstOption.action();\n }}\n >\n <div className=\"mint:flex mint:items-center mint:gap-2 mint:text-sm mint:font-medium mint:text-[#242424] mint:dark:text-[#dbdbdb]\">\n {firstOption.id === \"copy\" ? (\n <>\n <CopyRegular className=\"mint:w-5 mint:h-5 mint:text-[#424242] mint:dark:text-[#b2b2b2]\" />\n <span>{isCopied ? \"Copied\" : \"Copy Page\"}</span>\n </>\n ) : (\n <>\n <firstOption.icon className=\"mint:w-5 mint:h-5 mint:text-[#424242] mint:dark:text-[#b2b2b2]\" />\n <span>{firstOption.title}</span>\n </>\n )}\n </div>\n </button>\n\n {options.length > 1 && (\n <div className=\"mint:relative\">\n <button\n className=\"mint:rounded-none mint:rounded-tr-xl mint:rounded-br-xl mint:py-1.5 mint:px-2 mint:border mint:border-[#e5e7eb] mint:dark:border-[rgba(255,255,255,0.07)] mint:bg-white mint:dark:bg-[#1a1a1a] mint:text-[#374151] mint:dark:text-[#d1d5db] mint:cursor-pointer mint:hover:bg-[rgba(75,85,99,0.05)] mint:dark:hover:bg-[rgba(229,231,235,0.05)]\"\n onClick={() => setIsOpen(!isOpen)}\n >\n <ChevronDownRegular\n className={cn(\n \"mint:w-4 mint:h-4 mint:transition-transform mint:duration-150\",\n isOpen && \"mint:rotate-180\"\n )}\n />\n </button>\n\n {isOpen && (\n <div className=\"mint:absolute mint:right-0 mint:top-full mint:mt-1 mint:z-50 mint:max-h-[420px] mint:py-1.5 mint:min-w-[240px] mint:border mint:border-[#e5e7eb] mint:dark:border-[rgba(255,255,255,0.07)] mint:bg-white mint:dark:bg-[#1a1a1a] mint:rounded-xl mint:shadow-[0_20px_25px_-5px_rgba(0,0,0,0.1),0_10px_10px_-5px_rgba(0,0,0,0.04)] mint:overflow-y-auto\">\n {options.map((option, index) => (\n <button\n key={option.id + index}\n onClick={option.action}\n className=\"mint:w-full mint:flex mint:items-center mint:gap-3 mint:py-2 mint:px-2.5 mint:cursor-pointer mint:rounded-xl mint:transition-colors mint:duration-150 mint:border-none mint:bg-none mint:hover:bg-[rgba(75,85,99,0.05)] mint:dark:hover:bg-[rgba(229,231,235,0.05)]\"\n >\n <div className=\"mint:border mint:border-[#e5e7eb] mint:dark:border-[rgba(255,255,255,0.07)] mint:rounded-lg mint:p-1 mint:flex-shrink-0\">\n <option.icon className=\"mint:w-5 mint:h-5 mint:text-[#424242] mint:dark:text-[#b2b2b2]\" />\n </div>\n <div className=\"mint:flex mint:flex-col mint:flex-1 mint:min-w-0 mint:text-left\">\n <div className=\"mint:text-sm mint:font-medium mint:text-[#1f2937] mint:dark:text-[#d1d5db] mint:flex mint:items-center mint:gap-1.5\">\n {option.title}\n {option.externalLink && (\n <ArrowUpRightRegular className=\"mint:w-3 mint:h-3 mint:text-[#6b7280] mint:dark:text-[#9ca3af] mint:flex-shrink-0\" />\n )}\n </div>\n <div className=\"mint:text-xs mint:text-[#6b7280] mint:dark:text-[#9ca3af] mint:mt-0.5\">\n {option.description}\n </div>\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n"],"names":["PageContextMenu","className","pathname","markdownContent","onCopyMarkdown","onViewMarkdown","allPages","baseUrl","isOpen","setIsOpen","useState","isCopied","setIsCopied","dropdownRef","useRef","useEffect","timeout","handleClickOutside","event","copyPageAsMarkdown","clipboardItem","copyMarkdownToClipboard","error","viewAsMarkdown","viewLlmsTxtFile","viewLlmsFullTxtFile","wrapAction","actionFn","options","CopyRegular","MarkdownRegular","DocumentOnePageSparkleRegular","DocumentOnePageMultipleSparkleRegular","firstOption","jsxs","cn","jsx","Fragment","ChevronDownRegular","option","index","ArrowUpRightRegular"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"page-context-menu.js","sources":["../../src/components/page-context-menu.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from \"react\";\nimport {\n CopyRegular,\n MarkdownRegular,\n ChevronDownRegular,\n DocumentOnePageSparkleRegular,\n DocumentOnePageMultipleSparkleRegular,\n} from \"@fluentui/react-icons\";\nimport { copyMarkdownToClipboard } from \"../hooks/useMarkdownCopy\";\nimport type { LlmsPageConfig } from \"../utils/generate-llms-txt\";\nimport { cn } from \"../utils/cn\";\n\nexport type ContextualOption = {\n id: string;\n title: string;\n description: string;\n icon: React.ElementType;\n action: () => void;\n};\n\nexport interface PageContextMenuProps {\n className?: string;\n pathname: string;\n markdownContent?: string;\n onCopyMarkdown?: () => void;\n onViewMarkdown?: (pathname: string) => void;\n allPages?: LlmsPageConfig[];\n baseUrl?: string;\n}\n\nexport const PageContextMenu = ({\n className,\n pathname,\n markdownContent,\n onCopyMarkdown,\n onViewMarkdown,\n allPages,\n baseUrl,\n}: PageContextMenuProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const [isCopied, setIsCopied] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (isCopied) {\n const timeout = setTimeout(() => {\n setIsCopied(false);\n }, 2000);\n return () => clearTimeout(timeout);\n }\n }, [isCopied]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpen]);\n\n const copyPageAsMarkdown = async () => {\n setIsCopied(true);\n try {\n if (markdownContent) {\n const clipboardItem = new ClipboardItem({\n \"text/plain\": new Blob([markdownContent], { type: \"text/plain\" }),\n });\n await navigator.clipboard.write([clipboardItem]);\n onCopyMarkdown?.();\n } else {\n copyMarkdownToClipboard({\n pathname,\n onSuccess: () => {\n onCopyMarkdown?.();\n },\n });\n }\n } catch (error) {\n console.error(\"Failed to copy markdown:\", error);\n }\n };\n\n const viewAsMarkdown = () => {\n if (onViewMarkdown) {\n onViewMarkdown(pathname);\n } else {\n window.open(`${pathname}.md`, \"_blank\");\n }\n };\n\n const viewLlmsTxtFile = () => {\n window.open(\"/docs/llms.txt\", \"_blank\");\n };\n\n const viewLlmsFullTxtFile = () => {\n window.open(\"/docs/llms-full.txt\", \"_blank\");\n };\n\n const wrapAction = (actionFn: () => void) => {\n return () => {\n setIsOpen(false);\n actionFn();\n };\n };\n\n const options: ContextualOption[] = [\n {\n id: \"copy\",\n title: \"Copy Page\",\n description: \"Copy page as markdown\",\n icon: CopyRegular,\n action: wrapAction(copyPageAsMarkdown),\n },\n {\n id: \"view\",\n title: \"View as Markdown\",\n description: \"View this page as plain text\",\n icon: MarkdownRegular,\n action: wrapAction(viewAsMarkdown),\n },\n ];\n\n if (allPages && baseUrl) {\n options.push({\n id: \"llms\",\n title: \"View llms.txt\",\n description: \"View generated llms.txt file\",\n icon: DocumentOnePageSparkleRegular,\n action: wrapAction(viewLlmsTxtFile),\n });\n options.push({\n id: \"llms-full\",\n title: \"View llms-full.txt\",\n description: \"Generated llms-full.txt file\",\n icon: DocumentOnePageMultipleSparkleRegular,\n action: wrapAction(viewLlmsFullTxtFile),\n });\n }\n\n const firstOption = options[0];\n\n return (\n <div\n className={cn(\n \"mint:flex mint:items-center mint:justify-end mint:shrink-0 mint:w-[160px]\",\n className\n )}\n ref={dropdownRef}\n >\n <button\n className={cn(\n \"mint:rounded-full mint:py-1.5 mint:px-3 mint:border mint:border-[#e5e7eb] mint:dark:border-[rgba(255,255,255,0.07)] mint:bg-white mint:dark:bg-[#1a1a1a] mint:text-[#374151] mint:dark:text-[#d1d5db] mint:cursor-pointer mint:flex mint:items-center mint:gap-2 mint:text-sm mint:font-medium mint:hover:bg-[rgba(75,85,99,0.05)] mint:dark:hover:bg-[rgba(229,231,235,0.05)]\",\n options.length > 1 &&\n \"mint:rounded-tr-none mint:rounded-br-none mint:border-r-0\",\n isCopied && \"mint:text-[#6b7280] mint:dark:text-[#9ca3af]\"\n )}\n onClick={() => {\n void firstOption.action();\n }}\n >\n <div className=\"mint:flex mint:items-center mint:gap-2 mint:text-sm mint:font-medium mint:text-[#242424] mint:dark:text-[#dbdbdb]\">\n {firstOption.id === \"copy\" ? (\n <>\n <CopyRegular className=\"mint:w-5 mint:h-5 mint:text-[#424242] mint:dark:text-[#b2b2b2]\" />\n <span className=\"mint:font-semibold\">{isCopied ? \"Copied\" : \"Copy Page\"}</span>\n </>\n ) : (\n <>\n <firstOption.icon className=\"mint:w-5 mint:h-5 mint:text-[#424242] mint:dark:text-[#b2b2b2]\" />\n <span>{firstOption.title}</span>\n </>\n )}\n </div>\n </button>\n\n {options.length > 1 && (\n <div className=\"mint:relative\">\n <button\n className=\"mint:rounded-none mint:rounded-tr-full mint:rounded-br-full mint:py-1.5 mint:px-2 mint:border mint:border-[#e5e7eb] mint:dark:border-[rgba(255,255,255,0.07)] mint:bg-white mint:dark:bg-[#1a1a1a] mint:text-[#374151] mint:dark:text-[#d1d5db] mint:cursor-pointer mint:hover:bg-[rgba(75,85,99,0.05)] mint:dark:hover:bg-[rgba(229,231,235,0.05)]\"\n onClick={() => setIsOpen(!isOpen)}\n >\n <ChevronDownRegular\n className={cn(\n \"mint:w-4 mint:h-4 mint:transition-transform mint:duration-150\",\n isOpen && \"mint:rotate-180\"\n )}\n />\n </button>\n\n {isOpen && (\n <div className=\"mint:absolute mint:right-0 mint:top-full mint:mt-1 mint:z-50 mint:max-h-[420px] mint:p-1 mint:min-w-[240px] mint:border mint:border-[#e5e7eb] mint:dark:border-[rgba(255,255,255,0.07)] mint:bg-white mint:dark:bg-[#1a1a1a] mint:rounded-2xl mint:shadow-[0_20px_25px_-5px_rgba(0,0,0,0.1),0_10px_10px_-5px_rgba(0,0,0,0.04)] mint:overflow-y-auto\">\n {options.map((option, index) => (\n <button\n key={option.id + index}\n onClick={option.action}\n className=\"mint:w-full mint:flex mint:items-center mint:gap-3 mint:py-2 mint:px-2.5 mint:cursor-pointer mint:rounded-xl mint:transition-colors mint:duration-150 mint:border-none mint:bg-none mint:hover:bg-[rgba(75,85,99,0.05)] mint:dark:hover:bg-[rgba(229,231,235,0.05)]\"\n >\n <div className=\"mint:border mint:border-[#e5e7eb] mint:dark:border-[rgba(255,255,255,0.07)] mint:rounded-lg mint:p-1 mint:shrink-0\">\n <option.icon className=\"mint:w-5 mint:h-5 mint:text-[#424242] mint:dark:text-[#b2b2b2]\" />\n </div>\n <div className=\"mint:flex mint:flex-col mint:flex-1 mint:min-w-0 mint:text-left\">\n <div className=\"mint:text-sm mint:font-medium mint:text-[#1f2937] mint:dark:text-[#d1d5db] mint:flex mint:items-center mint:gap-1.5\">\n {option.title}\n </div>\n <div className=\"mint:text-xs mint:text-[#6b7280] mint:dark:text-[#9ca3af] mint:mt-0.5\">\n {option.description}\n </div>\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n"],"names":["PageContextMenu","className","pathname","markdownContent","onCopyMarkdown","onViewMarkdown","allPages","baseUrl","isOpen","setIsOpen","useState","isCopied","setIsCopied","dropdownRef","useRef","useEffect","timeout","handleClickOutside","event","copyPageAsMarkdown","clipboardItem","copyMarkdownToClipboard","error","viewAsMarkdown","viewLlmsTxtFile","viewLlmsFullTxtFile","wrapAction","actionFn","options","CopyRegular","MarkdownRegular","DocumentOnePageSparkleRegular","DocumentOnePageMultipleSparkleRegular","firstOption","jsxs","cn","jsx","Fragment","ChevronDownRegular","option","index"],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ function j({ toc: i }) {
|
|
|
21
21
|
if (!e) return (p = i[0]) == null ? void 0 : p.slug;
|
|
22
22
|
const r = window.getComputedStyle(document.documentElement), E = parseFloat(
|
|
23
23
|
r.getPropertyValue("--scroll-mt") || "0"
|
|
24
|
-
),
|
|
24
|
+
), k = parseFloat(r.fontSize), R = E * k + 100, h = e.scrollTop, f = i.map((s) => {
|
|
25
25
|
const v = document.getElementById(s.slug);
|
|
26
26
|
if (!v) return null;
|
|
27
27
|
const C = v.getBoundingClientRect(), I = e.getBoundingClientRect(), L = C.top - I.top + h;
|
|
@@ -30,7 +30,7 @@ function j({ toc: i }) {
|
|
|
30
30
|
if (f.length === 0) return (b = i[0]) == null ? void 0 : b.slug;
|
|
31
31
|
let a = f[0];
|
|
32
32
|
for (const s of f)
|
|
33
|
-
h +
|
|
33
|
+
h + R >= s.top && (a = s);
|
|
34
34
|
return a == null ? void 0 : a.id;
|
|
35
35
|
}, l = () => {
|
|
36
36
|
if (o.current) return;
|
|
@@ -47,14 +47,14 @@ function j({ toc: i }) {
|
|
|
47
47
|
}, [i]), /* @__PURE__ */ d("ul", { className: "mint:flex mint:flex-col mint:gap-1 mint:text-sm mint:text-[#6b7280] mint:dark:text-[#9ca3af] mint:font-medium mint:relative mint:pl-[0.15rem] mint:before:content-[''] mint:before:absolute mint:before:left-[0.15rem] mint:before:top-0 mint:before:bottom-0 mint:before:w-[3px] mint:before:bg-[#f2f3f3] mint:dark:before:bg-[#222223] mint:before:rounded-full", children: i.map((n, m) => {
|
|
48
48
|
const e = x === n.slug;
|
|
49
49
|
return /* @__PURE__ */ S("li", { className: "mint:relative", children: [
|
|
50
|
-
e && /* @__PURE__ */ d("div", { className: "mint:absolute mint:left-0 mint:top-0 mint:bottom-0 mint:w-[3px] mint:rounded-full mint:bg-[#643fb2] mint:dark:bg-[#c9aaf9] mint:z-
|
|
50
|
+
e && /* @__PURE__ */ d("div", { className: "mint:absolute mint:left-0 mint:top-0 mint:bottom-0 mint:w-[3px] mint:rounded-full mint:bg-[#643fb2] mint:dark:bg-[#c9aaf9] mint:z-1" }),
|
|
51
51
|
/* @__PURE__ */ d(
|
|
52
52
|
"a",
|
|
53
53
|
{
|
|
54
54
|
href: `#${n.slug}`,
|
|
55
55
|
className: A(
|
|
56
|
-
"mint:block mint:pl-6 mint:leading-relaxed mint:
|
|
57
|
-
e ? "mint:text-[#643fb2] mint:dark:text-[#c9aaf9] font-semibold" : "mint:text-[#424242] mint:hover:text-[#111827] mint:dark:hover:text-[#d1d5db]"
|
|
56
|
+
"mint:block mint:pl-6 mint:leading-relaxed mint:no-underline",
|
|
57
|
+
e ? "mint:text-[#643fb2] mint:dark:text-[#c9aaf9] font-semibold" : "mint:text-[#424242] mint:dark:text-[#d6d6d6] mint:hover:text-[#111827] mint:dark:hover:text-[#d1d5db]"
|
|
58
58
|
),
|
|
59
59
|
children: n.title
|
|
60
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/toc/index.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport type { TocItem } from \"../../types\";\nimport { cn } from \"../../utils/cn\";\n\ninterface TableOfContentsProps {\n toc: TocItem[];\n}\n\nexport function TableOfContents({ toc }: TableOfContentsProps) {\n const [activeId, setActiveId] = useState(\"\");\n const ignoreScrollRef = useRef(false);\n const ignoreTimeoutRef = useRef<NodeJS.Timeout>();\n\n useEffect(() => {\n if (toc.length === 0) return;\n\n ignoreScrollRef.current = false;\n if (ignoreTimeoutRef.current) {\n clearTimeout(ignoreTimeoutRef.current);\n }\n\n const hash = window.location.hash.slice(1);\n if (hash) {\n setActiveId(hash);\n ignoreScrollRef.current = true;\n ignoreTimeoutRef.current = setTimeout(() => {\n ignoreScrollRef.current = false;\n }, 1000);\n } else {\n setActiveId(toc[0]?.slug || \"\");\n }\n\n const handleHashChange = () => {\n const hash = window.location.hash.slice(1);\n if (hash) {\n setActiveId(hash);\n ignoreScrollRef.current = true;\n if (ignoreTimeoutRef.current) {\n clearTimeout(ignoreTimeoutRef.current);\n }\n ignoreTimeoutRef.current = setTimeout(() => {\n ignoreScrollRef.current = false;\n }, 1000);\n }\n };\n\n const scrollContainer = document.getElementById(\"main-content\");\n\n const getActiveHeading = () => {\n if (!scrollContainer) return toc[0]?.slug;\n\n const style = window.getComputedStyle(document.documentElement);\n const scrollMtRem = parseFloat(\n style.getPropertyValue(\"--scroll-mt\") || \"0\"\n );\n const fontSize = parseFloat(style.fontSize);\n const scrollOffset = scrollMtRem * fontSize + 100;\n\n const scrollY = scrollContainer.scrollTop;\n\n const headingPositions = toc\n .map((item) => {\n const element = document.getElementById(item.slug);\n if (!element) return null;\n\n const rect = element.getBoundingClientRect();\n const containerRect = scrollContainer.getBoundingClientRect();\n const relativeTop = rect.top - containerRect.top + scrollY;\n\n return { id: item.slug, top: relativeTop };\n })\n .filter(Boolean) as Array<{ id: string; top: number }>;\n\n if (headingPositions.length === 0) return toc[0]?.slug;\n\n let currentHeading = headingPositions[0];\n for (const heading of headingPositions) {\n if (scrollY + scrollOffset >= heading.top) {\n currentHeading = heading;\n }\n }\n\n return currentHeading?.id;\n };\n\n const handleScroll = () => {\n if (ignoreScrollRef.current) return;\n\n const newActiveId = getActiveHeading();\n if (newActiveId) {\n setActiveId(newActiveId);\n }\n };\n\n window.addEventListener(\"hashchange\", handleHashChange);\n\n if (scrollContainer) {\n scrollContainer.addEventListener(\"scroll\", handleScroll, {\n passive: true,\n });\n } else {\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n }\n\n let timeoutId: NodeJS.Timeout | undefined;\n if (!hash) {\n timeoutId = setTimeout(handleScroll, 100);\n }\n\n return () => {\n if (timeoutId) clearTimeout(timeoutId);\n if (ignoreTimeoutRef.current) clearTimeout(ignoreTimeoutRef.current);\n window.removeEventListener(\"hashchange\", handleHashChange);\n if (scrollContainer) {\n scrollContainer.removeEventListener(\"scroll\", handleScroll);\n } else {\n window.removeEventListener(\"scroll\", handleScroll);\n }\n };\n }, [toc]);\n\n return (\n <ul className=\"mint:flex mint:flex-col mint:gap-1 mint:text-sm mint:text-[#6b7280] mint:dark:text-[#9ca3af] mint:font-medium mint:relative mint:pl-[0.15rem] mint:before:content-[''] mint:before:absolute mint:before:left-[0.15rem] mint:before:top-0 mint:before:bottom-0 mint:before:w-[3px] mint:before:bg-[#f2f3f3] mint:dark:before:bg-[#222223] mint:before:rounded-full\">\n {toc.map((item, index) => {\n const isActive = activeId === item.slug;\n return (\n <li key={`${item.slug}-${index}`} className=\"mint:relative\">\n {isActive && (\n <div className=\"mint:absolute mint:left-0 mint:top-0 mint:bottom-0 mint:w-[3px] mint:rounded-full mint:bg-[#643fb2] mint:dark:bg-[#c9aaf9] mint:z-
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/toc/index.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport type { TocItem } from \"../../types\";\nimport { cn } from \"../../utils/cn\";\n\ninterface TableOfContentsProps {\n toc: TocItem[];\n}\n\nexport function TableOfContents({ toc }: TableOfContentsProps) {\n const [activeId, setActiveId] = useState(\"\");\n const ignoreScrollRef = useRef(false);\n const ignoreTimeoutRef = useRef<NodeJS.Timeout>();\n\n useEffect(() => {\n if (toc.length === 0) return;\n\n ignoreScrollRef.current = false;\n if (ignoreTimeoutRef.current) {\n clearTimeout(ignoreTimeoutRef.current);\n }\n\n const hash = window.location.hash.slice(1);\n if (hash) {\n setActiveId(hash);\n ignoreScrollRef.current = true;\n ignoreTimeoutRef.current = setTimeout(() => {\n ignoreScrollRef.current = false;\n }, 1000);\n } else {\n setActiveId(toc[0]?.slug || \"\");\n }\n\n const handleHashChange = () => {\n const hash = window.location.hash.slice(1);\n if (hash) {\n setActiveId(hash);\n ignoreScrollRef.current = true;\n if (ignoreTimeoutRef.current) {\n clearTimeout(ignoreTimeoutRef.current);\n }\n ignoreTimeoutRef.current = setTimeout(() => {\n ignoreScrollRef.current = false;\n }, 1000);\n }\n };\n\n const scrollContainer = document.getElementById(\"main-content\");\n\n const getActiveHeading = () => {\n if (!scrollContainer) return toc[0]?.slug;\n\n const style = window.getComputedStyle(document.documentElement);\n const scrollMtRem = parseFloat(\n style.getPropertyValue(\"--scroll-mt\") || \"0\"\n );\n const fontSize = parseFloat(style.fontSize);\n const scrollOffset = scrollMtRem * fontSize + 100;\n\n const scrollY = scrollContainer.scrollTop;\n\n const headingPositions = toc\n .map((item) => {\n const element = document.getElementById(item.slug);\n if (!element) return null;\n\n const rect = element.getBoundingClientRect();\n const containerRect = scrollContainer.getBoundingClientRect();\n const relativeTop = rect.top - containerRect.top + scrollY;\n\n return { id: item.slug, top: relativeTop };\n })\n .filter(Boolean) as Array<{ id: string; top: number }>;\n\n if (headingPositions.length === 0) return toc[0]?.slug;\n\n let currentHeading = headingPositions[0];\n for (const heading of headingPositions) {\n if (scrollY + scrollOffset >= heading.top) {\n currentHeading = heading;\n }\n }\n\n return currentHeading?.id;\n };\n\n const handleScroll = () => {\n if (ignoreScrollRef.current) return;\n\n const newActiveId = getActiveHeading();\n if (newActiveId) {\n setActiveId(newActiveId);\n }\n };\n\n window.addEventListener(\"hashchange\", handleHashChange);\n\n if (scrollContainer) {\n scrollContainer.addEventListener(\"scroll\", handleScroll, {\n passive: true,\n });\n } else {\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n }\n\n let timeoutId: NodeJS.Timeout | undefined;\n if (!hash) {\n timeoutId = setTimeout(handleScroll, 100);\n }\n\n return () => {\n if (timeoutId) clearTimeout(timeoutId);\n if (ignoreTimeoutRef.current) clearTimeout(ignoreTimeoutRef.current);\n window.removeEventListener(\"hashchange\", handleHashChange);\n if (scrollContainer) {\n scrollContainer.removeEventListener(\"scroll\", handleScroll);\n } else {\n window.removeEventListener(\"scroll\", handleScroll);\n }\n };\n }, [toc]);\n\n return (\n <ul className=\"mint:flex mint:flex-col mint:gap-1 mint:text-sm mint:text-[#6b7280] mint:dark:text-[#9ca3af] mint:font-medium mint:relative mint:pl-[0.15rem] mint:before:content-[''] mint:before:absolute mint:before:left-[0.15rem] mint:before:top-0 mint:before:bottom-0 mint:before:w-[3px] mint:before:bg-[#f2f3f3] mint:dark:before:bg-[#222223] mint:before:rounded-full\">\n {toc.map((item, index) => {\n const isActive = activeId === item.slug;\n return (\n <li key={`${item.slug}-${index}`} className=\"mint:relative\">\n {isActive && (\n <div className=\"mint:absolute mint:left-0 mint:top-0 mint:bottom-0 mint:w-[3px] mint:rounded-full mint:bg-[#643fb2] mint:dark:bg-[#c9aaf9] mint:z-1\" />\n )}\n <a\n href={`#${item.slug}`}\n className={cn(\n \"mint:block mint:pl-6 mint:leading-relaxed mint:no-underline\",\n isActive\n ? \"mint:text-[#643fb2] mint:dark:text-[#c9aaf9] font-semibold\"\n : \"mint:text-[#424242] mint:dark:text-[#d6d6d6] mint:hover:text-[#111827] mint:dark:hover:text-[#d1d5db]\"\n )}\n >\n {item.title}\n </a>\n </li>\n );\n })}\n </ul>\n );\n}\n"],"names":["TableOfContents","toc","activeId","setActiveId","useState","ignoreScrollRef","useRef","ignoreTimeoutRef","useEffect","hash","_a","handleHashChange","scrollContainer","getActiveHeading","style","scrollMtRem","fontSize","scrollOffset","scrollY","headingPositions","item","element","rect","containerRect","relativeTop","_b","currentHeading","heading","handleScroll","newActiveId","timeoutId","jsx","index","isActive","jsxs","cn"],"mappings":"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"}
|