@mintlify/msft-sdk 1.1.8 → 1.1.10

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.
Files changed (57) hide show
  1. package/dist/components/Api/Api.js +42 -0
  2. package/dist/components/Api/Api.js.map +1 -0
  3. package/dist/components/Api/Api.module.css.js +22 -0
  4. package/dist/components/Api/Api.module.css.js.map +1 -0
  5. package/dist/components/Api/ApiReferenceProvider.js +19 -0
  6. package/dist/components/Api/ApiReferenceProvider.js.map +1 -0
  7. package/dist/components/Api/MethodPill.js +21 -0
  8. package/dist/components/Api/MethodPill.js.map +1 -0
  9. package/dist/components/Api/colors.js +117 -0
  10. package/dist/components/Api/colors.js.map +1 -0
  11. package/dist/components/content-components/code-block.js +94 -66
  12. package/dist/components/content-components/code-block.js.map +1 -1
  13. package/dist/components/content-components/default-components.js +8 -8
  14. package/dist/components/content-components/default-components.js.map +1 -1
  15. package/dist/components/content-components/details/details.js +1 -1
  16. package/dist/components/content-components/details/details.js.map +1 -1
  17. package/dist/components/content-components/home.js +14 -14
  18. package/dist/components/content-components/home.js.map +1 -1
  19. package/dist/components/content-components/param-name.js +1 -1
  20. package/dist/components/content-components/param-name.js.map +1 -1
  21. package/dist/components/content-components/table/index.js +1 -1
  22. package/dist/components/content-components/table/table-modal.js.map +1 -1
  23. package/dist/components/content-components/tabs/tab.js.map +1 -1
  24. package/dist/components/content-components/tabs/tabs.js +26 -22
  25. package/dist/components/content-components/tabs/tabs.js.map +1 -1
  26. package/dist/components/nav-tree/dropdown-menu.js +1 -1
  27. package/dist/components/nav-tree/dropdown-menu.js.map +1 -1
  28. package/dist/components/nav-tree/index.js +157 -90
  29. package/dist/components/nav-tree/index.js.map +1 -1
  30. package/dist/components/nav-tree/mobile-nav.js +2 -2
  31. package/dist/components/nav-tree/mobile-nav.js.map +1 -1
  32. package/dist/components/page-context-menu.js +72 -78
  33. package/dist/components/page-context-menu.js.map +1 -1
  34. package/dist/components/page.js +120 -0
  35. package/dist/components/page.js.map +1 -0
  36. package/dist/components/plain-text-page.js.map +1 -1
  37. package/dist/components/toc/index.js +8 -8
  38. package/dist/components/toc/index.js.map +1 -1
  39. package/dist/index.d.ts +238 -186
  40. package/dist/index.js +118 -36
  41. package/dist/index.js.map +1 -1
  42. package/dist/parser/convert-html-to-mdx.js +7 -6
  43. package/dist/parser/convert-html-to-mdx.js.map +1 -1
  44. package/dist/plugins/extract-headings.js +28 -0
  45. package/dist/plugins/extract-headings.js.map +1 -0
  46. package/dist/plugins/sanitize/rehype-unwrap-image-links.js +12 -0
  47. package/dist/plugins/sanitize/rehype-unwrap-image-links.js.map +1 -0
  48. package/dist/styles.css +1 -1
  49. package/dist/utils/cn.js +5 -5
  50. package/dist/utils/cn.js.map +1 -1
  51. package/package.json +21 -2
  52. package/dist/components/docsLayout.js +0 -62
  53. package/dist/components/docsLayout.js.map +0 -1
  54. package/dist/components/docsPage.js +0 -133
  55. package/dist/components/docsPage.js.map +0 -1
  56. package/dist/node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/dist/bundle-mjs.js +0 -2732
  57. package/dist/node_modules/.pnpm/tailwind-merge@3.3.1/node_modules/tailwind-merge/dist/bundle-mjs.js.map +0 -1
@@ -1,161 +1,155 @@
1
- import { jsxs as n, jsx as e, Fragment as N } from "react/jsx-runtime";
2
- import { useState as _, useRef as E, useEffect as R } from "react";
3
- import { CopyRegular as O, MarkdownRegular as T, ChevronDownRegular as j, ArrowUpRightRegular as y, DocumentOnePageSparkleRegular as V, DocumentOnePageMultipleSparkleRegular as z } from "@fluentui/react-icons";
4
- import { copyMarkdownToClipboard as B } from "../hooks/useMarkdownCopy.js";
5
- import { cn as u } from "../utils/cn.js";
6
- const J = ({
7
- className: L,
1
+ import { jsxs as i, jsx as e, Fragment as f } from "react/jsx-runtime";
2
+ import { useState as h, useRef as P, useEffect as w } from "react";
3
+ import { CopyRegular as k, MarkdownRegular as C, ChevronDownRegular as F, ArrowUpRightRegular as T, DocumentOnePageSparkleRegular as A, DocumentOnePageMultipleSparkleRegular as I } from "@fluentui/react-icons";
4
+ import { copyMarkdownToClipboard as S } from "../hooks/useMarkdownCopy.js";
5
+ import { cn as x } from "../utils/cn.js";
6
+ const B = ({
7
+ className: v,
8
8
  pathname: d,
9
- markdownContent: p,
10
- onCopyMarkdown: i,
11
- onCopyPage: f,
12
- onViewMarkdown: g,
13
- onViewLlmsTxt: h,
14
- onViewLlmsFullTxt: k,
15
- allPages: P,
16
- baseUrl: F,
17
- customActions: w
9
+ markdownContent: u,
10
+ onCopyMarkdown: n,
11
+ onViewMarkdown: p,
12
+ allPages: N,
13
+ baseUrl: _
18
14
  }) => {
19
- const [m, o] = _(!1), [a, v] = _(!1), c = E(null);
20
- R(() => {
15
+ const [r, s] = h(!1), [a, g] = h(!1), c = P(null);
16
+ w(() => {
21
17
  if (a) {
22
18
  const t = setTimeout(() => {
23
- v(!1);
19
+ g(!1);
24
20
  }, 2e3);
25
21
  return () => clearTimeout(t);
26
22
  }
27
- }, [a]), R(() => {
28
- const t = (x) => {
29
- c.current && !c.current.contains(x.target) && o(!1);
23
+ }, [a]), w(() => {
24
+ const t = (b) => {
25
+ c.current && !c.current.contains(b.target) && s(!1);
30
26
  };
31
- return m && document.addEventListener("mousedown", t), () => {
27
+ return r && document.addEventListener("mousedown", t), () => {
32
28
  document.removeEventListener("mousedown", t);
33
29
  };
34
- }, [m]);
35
- const I = async () => {
36
- v(!0);
30
+ }, [r]);
31
+ const R = async () => {
32
+ g(!0);
37
33
  try {
38
- if (f)
39
- await f(), i == null || i();
40
- else if (p) {
34
+ if (u) {
41
35
  const t = new ClipboardItem({
42
- "text/plain": new Blob([p], { type: "text/plain" })
36
+ "text/plain": new Blob([u], { type: "text/plain" })
43
37
  });
44
- await navigator.clipboard.write([t]), i == null || i();
38
+ await navigator.clipboard.write([t]), n == null || n();
45
39
  } else
46
- B({
40
+ S({
47
41
  pathname: d,
48
42
  onSuccess: () => {
49
- i == null || i();
43
+ n == null || n();
50
44
  }
51
45
  });
52
46
  } catch (t) {
53
47
  console.error("Failed to copy markdown:", t);
54
48
  }
55
- }, S = () => {
56
- g ? g(d) : window.open(`${d}.md`, "_blank");
57
- }, A = () => {
58
- h ? h() : window.open("/docs/llms.txt", "_blank");
59
- }, D = () => {
60
- k ? k() : window.open("/docs/llms-full.txt", "_blank");
61
- }, r = (t) => () => {
62
- o(!1), t();
63
- }, b = [
49
+ }, y = () => {
50
+ p ? p(d) : window.open(`${d}.md`, "_blank");
51
+ }, L = () => {
52
+ window.open("/docs/llms.txt", "_blank");
53
+ }, O = () => {
54
+ window.open("/docs/llms-full.txt", "_blank");
55
+ }, l = (t) => () => {
56
+ s(!1), t();
57
+ }, m = [
64
58
  {
65
59
  id: "copy",
66
60
  title: "Copy Page",
67
61
  description: "Copy page as markdown",
68
- icon: O,
69
- action: r(I)
62
+ icon: k,
63
+ action: l(R)
70
64
  },
71
65
  {
72
66
  id: "view",
73
67
  title: "View as Markdown",
74
68
  description: "View this page as plain text",
75
- icon: T,
76
- action: r(S),
69
+ icon: C,
70
+ action: l(y),
77
71
  externalLink: !0
78
72
  }
79
73
  ];
80
- P && F && (b.push({
74
+ N && _ && (m.push({
81
75
  id: "llms",
82
76
  title: "View llms.txt",
83
77
  description: "View generated llms.txt file",
84
- icon: V,
85
- action: r(A),
78
+ icon: A,
79
+ action: l(L),
86
80
  externalLink: !0
87
- }), b.push({
81
+ }), m.push({
88
82
  id: "llms-full",
89
83
  title: "View llms-full.txt",
90
84
  description: "Generated llms-full.txt file",
91
- icon: z,
92
- action: r(D),
85
+ icon: I,
86
+ action: l(O),
93
87
  externalLink: !0
94
88
  }));
95
- const l = w ? w.map((t) => ({
96
- ...t,
97
- action: r(t.action)
98
- })) : b, s = l[0];
99
- return /* @__PURE__ */ n(
89
+ const o = m[0];
90
+ return /* @__PURE__ */ i(
100
91
  "div",
101
92
  {
102
- className: u("mint:flex mint:items-center mint:shrink-0", L),
93
+ className: x(
94
+ "mint:flex mint:items-center mint:flex-shrink-0",
95
+ v
96
+ ),
103
97
  ref: c,
104
98
  children: [
105
99
  /* @__PURE__ */ e(
106
100
  "button",
107
101
  {
108
- className: u(
102
+ className: x(
109
103
  "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)]",
110
- l.length > 1 && "mint:rounded-tr-none mint:rounded-br-none mint:border-r-0",
104
+ m.length > 1 && "mint:rounded-tr-none mint:rounded-br-none mint:border-r-0",
111
105
  a && "mint:text-[#6b7280] mint:dark:text-[#9ca3af]"
112
106
  ),
113
107
  onClick: () => {
114
- s.action();
108
+ o.action();
115
109
  },
116
- 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: s.id === "copy" ? /* @__PURE__ */ n(N, { children: [
117
- /* @__PURE__ */ e(O, { className: "mint:w-5 mint:h-5 mint:text-[#424242] mint:dark:text-[#b2b2b2]" }),
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__ */ i(f, { children: [
111
+ /* @__PURE__ */ e(k, { className: "mint:w-5 mint:h-5 mint:text-[#424242] mint:dark:text-[#b2b2b2]" }),
118
112
  /* @__PURE__ */ e("span", { children: a ? "Copied" : "Copy Page" })
119
- ] }) : /* @__PURE__ */ n(N, { children: [
120
- /* @__PURE__ */ e(s.icon, { className: "mint:w-5 mint:h-5 mint:text-[#424242] mint:dark:text-[#b2b2b2]" }),
121
- /* @__PURE__ */ e("span", { children: s.title })
113
+ ] }) : /* @__PURE__ */ i(f, { children: [
114
+ /* @__PURE__ */ e(o.icon, { className: "mint:w-5 mint:h-5 mint:text-[#424242] mint:dark:text-[#b2b2b2]" }),
115
+ /* @__PURE__ */ e("span", { children: o.title })
122
116
  ] }) })
123
117
  }
124
118
  ),
125
- l.length > 1 && /* @__PURE__ */ n("div", { className: "mint:relative", children: [
119
+ m.length > 1 && /* @__PURE__ */ i("div", { className: "mint:relative", children: [
126
120
  /* @__PURE__ */ e(
127
121
  "button",
128
122
  {
129
123
  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)]",
130
- onClick: () => o(!m),
124
+ onClick: () => s(!r),
131
125
  children: /* @__PURE__ */ e(
132
- j,
126
+ F,
133
127
  {
134
- className: u(
128
+ className: x(
135
129
  "mint:w-4 mint:h-4 mint:transition-transform mint:duration-150",
136
- m && "mint:rotate-180"
130
+ r && "mint:rotate-180"
137
131
  )
138
132
  }
139
133
  )
140
134
  }
141
135
  ),
142
- m && /* @__PURE__ */ e("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", children: l.map((t, x) => /* @__PURE__ */ n(
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: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", children: m.map((t, b) => /* @__PURE__ */ i(
143
137
  "button",
144
138
  {
145
139
  onClick: t.action,
146
140
  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)]",
147
141
  children: [
148
- /* @__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]" }) }),
149
- /* @__PURE__ */ n("div", { className: "mint:flex mint:flex-col mint:flex-1 mint:min-w-0 mint:text-left", children: [
150
- /* @__PURE__ */ 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", 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:flex-shrink-0", children: /* @__PURE__ */ e(t.icon, { className: "mint:w-5 mint:h-5 mint:text-[#424242] mint:dark:text-[#b2b2b2]" }) }),
143
+ /* @__PURE__ */ i("div", { className: "mint:flex mint:flex-col mint:flex-1 mint:min-w-0 mint:text-left", children: [
144
+ /* @__PURE__ */ i("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: [
151
145
  t.title,
152
- t.externalLink && /* @__PURE__ */ e(y, { className: "mint:w-3 mint:h-3 mint:text-[#6b7280] mint:dark:text-[#9ca3af] mint:shrink-0" })
146
+ t.externalLink && /* @__PURE__ */ e(T, { className: "mint:w-3 mint:h-3 mint:text-[#6b7280] mint:dark:text-[#9ca3af] mint:flex-shrink-0" })
153
147
  ] }),
154
148
  /* @__PURE__ */ e("div", { className: "mint:text-xs mint:text-[#6b7280] mint:dark:text-[#9ca3af] mint:mt-0.5", children: t.description })
155
149
  ] })
156
150
  ]
157
151
  },
158
- t.id + x
152
+ t.id + b
159
153
  )) })
160
154
  ] })
161
155
  ]
@@ -163,6 +157,6 @@ const J = ({
163
157
  );
164
158
  };
165
159
  export {
166
- J as PageContextMenu
160
+ B as PageContextMenu
167
161
  };
168
162
  //# 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 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 /** Callback fired after markdown is successfully copied */\n onCopyMarkdown?: () => void;\n /** Custom handler for \"Copy Page\" action. If provided, replaces default copy behavior. */\n onCopyPage?: () => void | Promise<void>;\n /** Custom handler for \"View as Markdown\" action. If provided, replaces default view behavior. */\n onViewMarkdown?: (pathname: string) => void;\n /** Custom handler for \"View llms.txt\" action. If provided, replaces default behavior. */\n onViewLlmsTxt?: () => void;\n /** Custom handler for \"View llms-full.txt\" action. If provided, replaces default behavior. */\n onViewLlmsFullTxt?: () => void;\n allPages?: LlmsPageConfig[];\n baseUrl?: string;\n customActions?: ContextualOption[];\n}\n\nexport const PageContextMenu = ({\n className,\n pathname,\n markdownContent,\n onCopyMarkdown,\n onCopyPage,\n onViewMarkdown,\n onViewLlmsTxt,\n onViewLlmsFullTxt,\n allPages,\n baseUrl,\n customActions,\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 // Use custom copy handler if provided\n if (onCopyPage) {\n await onCopyPage();\n onCopyMarkdown?.();\n } else 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 if (onViewLlmsTxt) {\n onViewLlmsTxt();\n } else {\n window.open(\"/docs/llms.txt\", \"_blank\");\n }\n };\n\n const viewLlmsFullTxtFile = () => {\n if (onViewLlmsFullTxt) {\n onViewLlmsFullTxt();\n } else {\n window.open(\"/docs/llms-full.txt\", \"_blank\");\n }\n };\n\n const wrapAction = (actionFn: () => void) => {\n return () => {\n setIsOpen(false);\n actionFn();\n };\n };\n\n const defaultOptions: 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 defaultOptions.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 defaultOptions.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 // Use custom actions if provided, otherwise use default options\n const options: ContextualOption[] = customActions\n ? customActions.map((action) => ({\n ...action,\n action: wrapAction(action.action),\n }))\n : defaultOptions;\n\n const firstOption = options[0];\n\n return (\n <div\n className={cn(\"mint:flex mint:items-center mint:shrink-0\", className)}\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: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: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","onCopyPage","onViewMarkdown","onViewLlmsTxt","onViewLlmsFullTxt","allPages","baseUrl","customActions","isOpen","setIsOpen","useState","isCopied","setIsCopied","dropdownRef","useRef","useEffect","timeout","handleClickOutside","event","copyPageAsMarkdown","clipboardItem","copyMarkdownToClipboard","error","viewAsMarkdown","viewLlmsTxtFile","viewLlmsFullTxtFile","wrapAction","actionFn","defaultOptions","CopyRegular","MarkdownRegular","DocumentOnePageSparkleRegular","DocumentOnePageMultipleSparkleRegular","options","action","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 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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"}
@@ -0,0 +1,120 @@
1
+ import { jsx as t, jsxs as m } from "react/jsx-runtime";
2
+ import { MDXRenderer as P } from "./mdx-renderer.js";
3
+ import { NavTree as C } from "./nav-tree/index.js";
4
+ import { TableOfContents as T } from "./toc/index.js";
5
+ import { PivotAwareTOC as j } from "./toc/pivot-aware-toc.js";
6
+ import { TextAlignLeftFilled as z } from "@fluentui/react-icons";
7
+ import { PageContextMenu as O } from "./page-context-menu.js";
8
+ import { ComponentsProvider as A } from "../context/components-context.js";
9
+ import { cn as l } from "../utils/cn.js";
10
+ /* empty css */
11
+ import { ZonePivotProvider as D } from "./content-components/zone-pivots/zone-pivot-context.js";
12
+ import { ZonePivotSelector as E } from "./content-components/zone-pivots/zone-pivot-selector.js";
13
+ function B({
14
+ payload: i,
15
+ toc: n,
16
+ navTree: a,
17
+ dropdown: h,
18
+ activeHref: f,
19
+ theme: x,
20
+ className: p = "",
21
+ pathname: o,
22
+ markdownContent: g,
23
+ allPages: v,
24
+ baseUrl: w,
25
+ bottomLinks: k,
26
+ LinkComponent: u
27
+ }) {
28
+ var c, d;
29
+ const N = i.serializedContent, e = ((c = i.mdxExtracts) == null ? void 0 : c.zonePivotGroups) || [], r = (d = i.mdxExtracts) == null ? void 0 : d.pivotTocItems, s = !i.title;
30
+ return /* @__PURE__ */ t(A, { LinkComponent: u, children: /* @__PURE__ */ t("div", { className: l(x === "dark" && "mint:dark", p), children: /* @__PURE__ */ m(
31
+ "div",
32
+ {
33
+ id: "page-container",
34
+ className: "mint:pr-2 mint:bg-[#f0f0f0] mint:dark:bg-[#0f0f0f]",
35
+ children: [
36
+ a && /* @__PURE__ */ t(
37
+ "aside",
38
+ {
39
+ className: "mint:fixed mint:z-10 mint:left-0 mint:top-14 mint:bottom-0 mint:w-66 mint:overflow-hidden mint:max-lg:hidden mint:lg:block",
40
+ "aria-label": "Sidebar navigation",
41
+ children: /* @__PURE__ */ t("div", { className: "mint:p-4 mint:h-full mint:flex mint:flex-col", children: /* @__PURE__ */ t(
42
+ C,
43
+ {
44
+ navTree: a,
45
+ dropdown: h,
46
+ activeHref: f,
47
+ bottomLinks: k
48
+ }
49
+ ) })
50
+ }
51
+ ),
52
+ /* @__PURE__ */ t("div", { className: "mint:flex mint:rounded-2xl mint:h-[calc(100vh-4.5rem)]", children: /* @__PURE__ */ t(
53
+ "div",
54
+ {
55
+ id: "main-content",
56
+ className: l(
57
+ "mint:flex-1 mint:p-8 mint:overflow-y-auto mint:overflow-x-hidden mint:rounded-2xl mint:bg-white mint:dark:bg-[#1f1f1f] mint:border mint:border-[rgba(229,231,235,0.7)] mint:dark:border-[rgba(255,255,255,0.07)] [scrollbar-gutter:stable] mint:overscroll-contain mint:lg:ml-[16.5rem] mint:lg:px-16 mint:lg:pt-12 [scrollbar-width:thin] [scrollbar-color:rgba(0,0,0,0.2)_transparent] dark:[scrollbar-color:rgba(255,255,255,0.2)_transparent] mint:[&::-webkit-scrollbar]:w-1 mint:[&::-webkit-scrollbar-track]:bg-transparent mint:[&::-webkit-scrollbar-thumb]:bg-black/20 mint:dark:[&::-webkit-scrollbar-thumb]:bg-white/20 mint:[&::-webkit-scrollbar-thumb]:rounded mint:[&::-webkit-scrollbar-thumb:hover]:bg-black/30 mint:dark:[&::-webkit-scrollbar-thumb:hover]:bg-white/30",
58
+ s && "!mint:pt-0"
59
+ ),
60
+ children: /* @__PURE__ */ t(D, { groups: e, children: /* @__PURE__ */ m("div", { className: "mint:flex mint:flex-row-reverse mint:gap-12 mint:justify-center mint:mx-auto mint:w-full", children: [
61
+ n && n.length > 0 && /* @__PURE__ */ t("aside", { className: "mint:w-64 mint:shrink-0 mint:ml-8 mint:max-xl:hidden mint:xl:block", children: /* @__PURE__ */ m("div", { className: "mint:sticky mint:top-2 mint:p-2 mint:pb-6 mint:max-h-[calc(100vh-3.5rem)] mint:overflow-y-auto", children: [
62
+ /* @__PURE__ */ m("div", { className: "mint:flex mint:items-center mint:gap-2 mint:mb-4", children: [
63
+ /* @__PURE__ */ t(z, { className: "mint:w-4 mint:h-4 mint:text-[#4b5563] mint:dark:text-[#9ca3af]" }),
64
+ /* @__PURE__ */ t("h2", { className: "mint:text-sm mint:font-semibold mint:text-[#141414] mint:dark:text-white", children: "On this page" })
65
+ ] }),
66
+ r && Object.keys(r).length > 0 ? /* @__PURE__ */ t(
67
+ j,
68
+ {
69
+ baseToc: n,
70
+ pivotTocItems: r
71
+ }
72
+ ) : /* @__PURE__ */ t(T, { toc: n })
73
+ ] }) }),
74
+ /* @__PURE__ */ m(
75
+ "div",
76
+ {
77
+ className: l(
78
+ "mint:w-full mint:overflow-x-visible mint:max-w-2xl",
79
+ s && "!mint:max-w-none"
80
+ ),
81
+ children: [
82
+ i.title && /* @__PURE__ */ t("header", { className: "mint:mb-8", children: /* @__PURE__ */ m("div", { className: "mint:mb-4", children: [
83
+ /* @__PURE__ */ m("div", { className: "mint:flex mint:flex-col mint:gap-2 mint:items-start mint:sm:flex-row mint:sm:items-center mint:sm:gap-4", children: [
84
+ /* @__PURE__ */ t("h1", { className: "mint:text-[1.875rem] mint:font-bold mint:text-[#141414] mint:dark:text-white mint:m-0 mint:leading-[1.2]", children: i.title }),
85
+ o && /* @__PURE__ */ t(
86
+ O,
87
+ {
88
+ className: "mint:ml-auto mint:max-sm:ml-0",
89
+ pathname: o,
90
+ markdownContent: g,
91
+ allPages: v,
92
+ baseUrl: w
93
+ }
94
+ )
95
+ ] }),
96
+ i.description && /* @__PURE__ */ t("p", { className: "mint:text-lg mint:text-[#4b5563] mint:dark:text-[#d1d5db]", children: i.description })
97
+ ] }) }),
98
+ e.length > 0 && /* @__PURE__ */ t("div", { className: "mint:mb-6 mint:flex mint:flex-wrap mint:gap-4", children: e.map((b) => /* @__PURE__ */ t(
99
+ E,
100
+ {
101
+ group: b,
102
+ className: "mint:flex mint:items-center mint:gap-2 mint:text-sm"
103
+ },
104
+ b.id
105
+ )) }),
106
+ /* @__PURE__ */ t("div", { className: "mint:pt-4", children: /* @__PURE__ */ t(P, { children: /* @__PURE__ */ t(N, {}) }) })
107
+ ]
108
+ }
109
+ )
110
+ ] }) })
111
+ }
112
+ ) })
113
+ ]
114
+ }
115
+ ) }) });
116
+ }
117
+ export {
118
+ B as DocsPage
119
+ };
120
+ //# sourceMappingURL=page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.js","sources":["../../src/components/page.tsx"],"sourcesContent":["import { MDXRenderer } from \"./mdx-renderer\";\nimport { NavTree } from \"./nav-tree\";\nimport type { DocsPageProps } from \"../types\";\nimport { TableOfContents } from \"./toc\";\nimport { PivotAwareTOC } from \"./toc/pivot-aware-toc\";\nimport { TextAlignLeftFilled } from \"@fluentui/react-icons\";\nimport {\n ZonePivotProvider,\n ZonePivotSelector,\n} from \"./content-components/zone-pivots\";\nimport { PageContextMenu } from \"./page-context-menu\";\nimport { ComponentsProvider } from \"../context/components-context\";\nimport { cn } from \"../utils/cn\";\nimport \"../styles.css\";\n\nexport function DocsPage({\n payload,\n toc,\n navTree,\n dropdown,\n activeHref,\n theme,\n className = \"\",\n pathname,\n markdownContent,\n allPages,\n baseUrl,\n bottomLinks,\n LinkComponent,\n}: DocsPageProps) {\n const Content = payload.serializedContent;\n const zonePivotGroups = payload.mdxExtracts?.zonePivotGroups || [];\n const pivotTocItems = payload.mdxExtracts?.pivotTocItems;\n\n // Check if we should use full width (no title means likely a custom component like Home)\n const isFullWidth = !payload.title;\n\n return (\n <ComponentsProvider LinkComponent={LinkComponent}>\n <div className={cn(theme === \"dark\" && \"mint:dark\", className)}>\n <div\n id=\"page-container\"\n className=\"mint:pr-2 mint:bg-[#f0f0f0] mint:dark:bg-[#0f0f0f]\"\n >\n {navTree && (\n <aside\n className=\"mint:fixed mint:z-10 mint:left-0 mint:top-14 mint:bottom-0 mint:w-66 mint:overflow-hidden mint:max-lg:hidden mint:lg:block\"\n aria-label=\"Sidebar navigation\"\n >\n <div className=\"mint:p-4 mint:h-full mint:flex mint:flex-col\">\n <NavTree\n navTree={navTree}\n dropdown={dropdown}\n activeHref={activeHref}\n bottomLinks={bottomLinks}\n />\n </div>\n </aside>\n )}\n\n <div className=\"mint:flex mint:rounded-2xl mint:h-[calc(100vh-4.5rem)]\">\n <div\n id=\"main-content\"\n className={cn(\n \"mint:flex-1 mint:p-8 mint:overflow-y-auto mint:overflow-x-hidden mint:rounded-2xl mint:bg-white mint:dark:bg-[#1f1f1f] mint:border mint:border-[rgba(229,231,235,0.7)] mint:dark:border-[rgba(255,255,255,0.07)] [scrollbar-gutter:stable] mint:overscroll-contain mint:lg:ml-[16.5rem] mint:lg:px-16 mint:lg:pt-12 [scrollbar-width:thin] [scrollbar-color:rgba(0,0,0,0.2)_transparent] dark:[scrollbar-color:rgba(255,255,255,0.2)_transparent] mint:[&::-webkit-scrollbar]:w-1 mint:[&::-webkit-scrollbar-track]:bg-transparent mint:[&::-webkit-scrollbar-thumb]:bg-black/20 mint:dark:[&::-webkit-scrollbar-thumb]:bg-white/20 mint:[&::-webkit-scrollbar-thumb]:rounded mint:[&::-webkit-scrollbar-thumb:hover]:bg-black/30 mint:dark:[&::-webkit-scrollbar-thumb:hover]:bg-white/30\",\n isFullWidth && \"!mint:pt-0\"\n )}\n >\n <ZonePivotProvider groups={zonePivotGroups}>\n <div className=\"mint:flex mint:flex-row-reverse mint:gap-12 mint:justify-center mint:mx-auto mint:w-full\">\n {toc && toc.length > 0 && (\n <aside className=\"mint:w-64 mint:shrink-0 mint:ml-8 mint:max-xl:hidden mint:xl:block\">\n <div className=\"mint:sticky mint:top-2 mint:p-2 mint:pb-6 mint:max-h-[calc(100vh-3.5rem)] mint:overflow-y-auto\">\n <div className=\"mint:flex mint:items-center mint:gap-2 mint:mb-4\">\n <TextAlignLeftFilled className=\"mint:w-4 mint:h-4 mint:text-[#4b5563] mint:dark:text-[#9ca3af]\" />\n <h2 className=\"mint:text-sm mint:font-semibold mint:text-[#141414] mint:dark:text-white\">\n On this page\n </h2>\n </div>\n {pivotTocItems &&\n Object.keys(pivotTocItems).length > 0 ? (\n <PivotAwareTOC\n baseToc={toc}\n pivotTocItems={pivotTocItems}\n />\n ) : (\n <TableOfContents toc={toc} />\n )}\n </div>\n </aside>\n )}\n\n <div\n className={cn(\n \"mint:w-full mint:overflow-x-visible mint:max-w-2xl\",\n isFullWidth && \"!mint:max-w-none\"\n )}\n >\n {payload.title && (\n <header className=\"mint:mb-8\">\n <div className=\"mint:mb-4\">\n <div className=\"mint:flex mint:flex-col mint:gap-2 mint:items-start mint:sm:flex-row mint:sm:items-center mint:sm:gap-4\">\n <h1 className=\"mint:text-[1.875rem] mint:font-bold mint:text-[#141414] mint:dark:text-white mint:m-0 mint:leading-[1.2]\">\n {payload.title}\n </h1>\n {pathname && (\n <PageContextMenu\n className=\"mint:ml-auto mint:max-sm:ml-0\"\n pathname={pathname}\n markdownContent={markdownContent}\n allPages={allPages}\n baseUrl={baseUrl}\n />\n )}\n </div>\n {payload.description && (\n <p className=\"mint:text-lg mint:text-[#4b5563] mint:dark:text-[#d1d5db]\">\n {payload.description}\n </p>\n )}\n </div>\n </header>\n )}\n\n {zonePivotGroups.length > 0 && (\n <div className=\"mint:mb-6 mint:flex mint:flex-wrap mint:gap-4\">\n {zonePivotGroups.map((group) => (\n <ZonePivotSelector\n key={group.id}\n group={group}\n className=\"mint:flex mint:items-center mint:gap-2 mint:text-sm\"\n />\n ))}\n </div>\n )}\n\n <div className=\"mint:pt-4\">\n <MDXRenderer>\n <Content />\n </MDXRenderer>\n </div>\n </div>\n </div>\n </ZonePivotProvider>\n </div>\n </div>\n </div>\n </div>\n </ComponentsProvider>\n );\n}\n"],"names":["DocsPage","payload","toc","navTree","dropdown","activeHref","theme","className","pathname","markdownContent","allPages","baseUrl","bottomLinks","LinkComponent","Content","zonePivotGroups","_a","pivotTocItems","_b","isFullWidth","jsx","ComponentsProvider","cn","jsxs","NavTree","ZonePivotProvider","TextAlignLeftFilled","PivotAwareTOC","TableOfContents","PageContextMenu","group","ZonePivotSelector","MDXRenderer"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plain-text-page.js","sources":["../../src/components/plain-text-page.tsx"],"sourcesContent":["import { useEffect } from \"react\";\n\nexport interface PlainTextPageProps {\n content: string;\n}\n\nexport function PlainTextPage({ content }: PlainTextPageProps) {\n useEffect(() => {\n document.body.style.backgroundColor = \"#121212\";\n document.body.style.margin = \"0\";\n document.body.style.overflowX = \"hidden\";\n document.documentElement.style.backgroundColor = \"#121212\";\n\n return () => {\n document.body.style.backgroundColor = \"\";\n document.body.style.margin = \"\";\n document.body.style.overflowX = \"\";\n document.documentElement.style.backgroundColor = \"\";\n };\n }, []);\n\n return (\n <div className=\"mint:min-h-screen mint:w-full mint:bg-[#121212] mint:overflow-x-hidden\">\n <pre className=\"mint:px-3 mint:pb-3 mint:pt-2 mint:m-0 mint:whitespace-pre-wrap mint:text-sm mint:text-white mint:font-[ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation_Mono','Courier_New',monospace]\">\n {content}\n </pre>\n </div>\n );\n}\n"],"names":["PlainTextPage","content","useEffect","jsx"],"mappings":";;AAMO,SAASA,EAAc,EAAE,SAAAC,KAA+B;AAC7D,SAAAC,EAAU,OACR,SAAS,KAAK,MAAM,kBAAkB,WACtC,SAAS,KAAK,MAAM,SAAS,KAC7B,SAAS,KAAK,MAAM,YAAY,UAChC,SAAS,gBAAgB,MAAM,kBAAkB,WAE1C,MAAM;AACX,aAAS,KAAK,MAAM,kBAAkB,IACtC,SAAS,KAAK,MAAM,SAAS,IAC7B,SAAS,KAAK,MAAM,YAAY,IAChC,SAAS,gBAAgB,MAAM,kBAAkB;AAAA,EACnD,IACC,CAAA,CAAE,GAGH,gBAAAC,EAAC,SAAI,WAAU,0EACb,4BAAC,OAAA,EAAI,WAAU,wMACZ,UAAAF,EAAA,CACH,EAAA,CACF;AAEJ;"}
1
+ {"version":3,"file":"plain-text-page.js","sources":["../../src/components/plain-text-page.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport interface PlainTextPageProps {\n content: string;\n}\n\nexport function PlainTextPage({ content }: PlainTextPageProps) {\n useEffect(() => {\n document.body.style.backgroundColor = \"#121212\";\n document.body.style.margin = \"0\";\n document.body.style.overflowX = \"hidden\";\n document.documentElement.style.backgroundColor = \"#121212\";\n\n return () => {\n document.body.style.backgroundColor = \"\";\n document.body.style.margin = \"\";\n document.body.style.overflowX = \"\";\n document.documentElement.style.backgroundColor = \"\";\n };\n }, []);\n\n return (\n <div className=\"mint:min-h-screen mint:w-full mint:bg-[#121212] mint:overflow-x-hidden\">\n <pre className=\"mint:px-3 mint:pb-3 mint:pt-2 mint:m-0 mint:whitespace-pre-wrap mint:text-sm mint:text-white mint:font-[ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation_Mono','Courier_New',monospace]\">\n {content}\n </pre>\n </div>\n );\n}\n"],"names":["PlainTextPage","content","useEffect","jsx"],"mappings":";;AAOO,SAASA,EAAc,EAAE,SAAAC,KAA+B;AAC7D,SAAAC,EAAU,OACR,SAAS,KAAK,MAAM,kBAAkB,WACtC,SAAS,KAAK,MAAM,SAAS,KAC7B,SAAS,KAAK,MAAM,YAAY,UAChC,SAAS,gBAAgB,MAAM,kBAAkB,WAE1C,MAAM;AACX,aAAS,KAAK,MAAM,kBAAkB,IACtC,SAAS,KAAK,MAAM,SAAS,IAC7B,SAAS,KAAK,MAAM,YAAY,IAChC,SAAS,gBAAgB,MAAM,kBAAkB;AAAA,EACnD,IACC,CAAA,CAAE,GAGH,gBAAAC,EAAC,SAAI,WAAU,0EACb,4BAAC,OAAA,EAAI,WAAU,wMACZ,UAAAF,EAAA,CACH,EAAA,CACF;AAEJ;"}
@@ -1,4 +1,4 @@
1
- import { jsx as d, jsxs as k } from "react/jsx-runtime";
1
+ import { jsx as d, jsxs as S } from "react/jsx-runtime";
2
2
  import { useState as y, useRef as w, useEffect as B } from "react";
3
3
  import { cn as A } from "../../utils/cn.js";
4
4
  function j({ toc: i }) {
@@ -21,16 +21,16 @@ 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
- ), R = parseFloat(r.fontSize), C = E * R + 100, h = e.scrollTop, f = i.map((s) => {
24
+ ), R = parseFloat(r.fontSize), k = E * R + 100, h = e.scrollTop, f = i.map((s) => {
25
25
  const v = document.getElementById(s.slug);
26
26
  if (!v) return null;
27
- const I = v.getBoundingClientRect(), L = e.getBoundingClientRect(), S = I.top - L.top + h;
28
- return { id: s.slug, top: S };
27
+ const C = v.getBoundingClientRect(), I = e.getBoundingClientRect(), L = C.top - I.top + h;
28
+ return { id: s.slug, top: L };
29
29
  }).filter(Boolean);
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 + C >= s.top && (a = s);
33
+ h + k >= s.top && (a = s);
34
34
  return a == null ? void 0 : a.id;
35
35
  }, l = () => {
36
36
  if (o.current) return;
@@ -44,10 +44,10 @@ function j({ toc: i }) {
44
44
  return n || (u = setTimeout(l, 100)), () => {
45
45
  u && clearTimeout(u), t.current && clearTimeout(t.current), window.removeEventListener("hashchange", m), e ? e.removeEventListener("scroll", l) : window.removeEventListener("scroll", l);
46
46
  };
47
- }, [i]), /* @__PURE__ */ d("ul", { className: "mint:flex mint:flex-col mint:gap-2 mint:text-sm mint:font-medium mint:relative mint:pl-[0.15rem] mint:before:content-[''] mint:before:absolute 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) => {
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
- return /* @__PURE__ */ k("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-1" }),
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-[1]" }),
51
51
  /* @__PURE__ */ d(
52
52
  "a",
53
53
  {
@@ -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-2 mint:text-sm mint:font-medium mint:relative mint:pl-[0.15rem] mint:before:content-[''] mint:before:absolute 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:transition-colors mint:duration-150 mint:no-underline\",\n isActive\n ? \"mint:text-[#643fb2] mint:dark:text-[#c9aaf9] font-semibold\"\n : \"mint:text-[#424242] 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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"}
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:transition-colors mint:duration-150 mint:no-underline\",\n isActive\n ? \"mint:text-[#643fb2] mint:dark:text-[#c9aaf9] font-semibold\"\n : \"mint:text-[#424242] 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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"}