@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.
Files changed (45) hide show
  1. package/dist/components/content-components/code-block.js +3 -3
  2. package/dist/components/content-components/code-block.js.map +1 -1
  3. package/dist/components/content-components/default-components.js +21 -26
  4. package/dist/components/content-components/default-components.js.map +1 -1
  5. package/dist/components/content-components/details/details.js +1 -1
  6. package/dist/components/content-components/details/details.js.map +1 -1
  7. package/dist/components/content-components/home.js +3 -278
  8. package/dist/components/content-components/home.js.map +1 -1
  9. package/dist/components/content-components/image.js +80 -0
  10. package/dist/components/content-components/image.js.map +1 -0
  11. package/dist/components/content-components/param-name.js +1 -1
  12. package/dist/components/content-components/param-name.js.map +1 -1
  13. package/dist/components/content-components/zone-pivots/zone-pivot-selector.js +22 -19
  14. package/dist/components/content-components/zone-pivots/zone-pivot-selector.js.map +1 -1
  15. package/dist/components/docsLayout.js +60 -0
  16. package/dist/components/docsLayout.js.map +1 -0
  17. package/dist/components/docsPage.js +128 -0
  18. package/dist/components/docsPage.js.map +1 -0
  19. package/dist/components/nav-tree/index.js +127 -159
  20. package/dist/components/nav-tree/index.js.map +1 -1
  21. package/dist/components/nav-tree/mobile-nav.js +21 -23
  22. package/dist/components/nav-tree/mobile-nav.js.map +1 -1
  23. package/dist/components/page-context-menu.js +47 -53
  24. package/dist/components/page-context-menu.js.map +1 -1
  25. package/dist/components/toc/index.js +5 -5
  26. package/dist/components/toc/index.js.map +1 -1
  27. package/dist/index.d.ts +180 -40
  28. package/dist/index.js +62 -64
  29. package/dist/index.js.map +1 -1
  30. package/dist/parser/serialize-mdx.js +27 -22
  31. package/dist/parser/serialize-mdx.js.map +1 -1
  32. package/dist/plugins/extract-headings.js +23 -17
  33. package/dist/plugins/extract-headings.js.map +1 -1
  34. package/dist/plugins/remark/remark-heading-ids.js +21 -14
  35. package/dist/plugins/remark/remark-heading-ids.js.map +1 -1
  36. package/dist/styles.css +1 -1
  37. package/package.json +1 -1
  38. package/dist/components/Api/Api.js +0 -42
  39. package/dist/components/Api/Api.js.map +0 -1
  40. package/dist/components/Api/Api.module.css.js +0 -22
  41. package/dist/components/Api/Api.module.css.js.map +0 -1
  42. package/dist/components/nav-tree/dropdown-menu.js +0 -75
  43. package/dist/components/nav-tree/dropdown-menu.js.map +0 -1
  44. package/dist/components/page.js +0 -120
  45. package/dist/components/page.js.map +0 -1
@@ -0,0 +1,80 @@
1
+ import { jsxs as d, Fragment as u, jsx as l } from "react/jsx-runtime";
2
+ import { useState as f, useRef as o, useEffect as r } from "react";
3
+ import { cn as v } from "../../utils/cn.js";
4
+ function w({ isOpen: e, onClose: n, src: i, alt: m }) {
5
+ const c = o(null), a = o(null);
6
+ return r(() => {
7
+ var t;
8
+ return e ? (a.current = document.activeElement, document.body.style.overflow = "hidden") : (document.body.style.overflow = "unset", (t = a.current) == null || t.focus()), () => {
9
+ document.body.style.overflow = "unset";
10
+ };
11
+ }, [e]), r(() => {
12
+ const t = (s) => {
13
+ s.key === "Escape" && n();
14
+ };
15
+ return e && window.addEventListener("keydown", t), () => {
16
+ window.removeEventListener("keydown", t);
17
+ };
18
+ }, [e, n]), e ? /* @__PURE__ */ l(
19
+ "div",
20
+ {
21
+ className: "mint:fixed mint:inset-0 mint:flex mint:items-center mint:justify-center mint:p-4 mint:bg-black/80 mint:backdrop-blur-sm",
22
+ onClick: n,
23
+ role: "dialog",
24
+ "aria-modal": "true",
25
+ "aria-label": "Expanded image view",
26
+ style: { zIndex: 9999 },
27
+ children: /* @__PURE__ */ l(
28
+ "div",
29
+ {
30
+ ref: c,
31
+ className: "mint:relative mint:max-w-[95vw] mint:max-h-[95vh] mint:flex mint:items-center mint:justify-center",
32
+ onClick: (t) => t.stopPropagation(),
33
+ children: /* @__PURE__ */ l(
34
+ "img",
35
+ {
36
+ src: i,
37
+ alt: m,
38
+ className: "mint:max-w-full mint:max-h-[95vh] mint:object-contain mint:rounded-lg"
39
+ }
40
+ )
41
+ }
42
+ )
43
+ }
44
+ ) : null;
45
+ }
46
+ function g(e) {
47
+ const [n, i] = f(!1);
48
+ return /* @__PURE__ */ d(u, { children: [
49
+ /* @__PURE__ */ l(
50
+ "img",
51
+ {
52
+ ...e,
53
+ className: v(
54
+ "mint:max-w-full mint:h-auto mint:object-contain mint:cursor-zoom-in mint:rounded-lg",
55
+ e.className
56
+ ),
57
+ onClick: () => i(!0),
58
+ onKeyDown: (m) => {
59
+ (m.key === "Enter" || m.key === " ") && (m.preventDefault(), i(!0));
60
+ },
61
+ tabIndex: 0,
62
+ role: "button",
63
+ "aria-label": `${e.alt || "Image"} - Click to enlarge`
64
+ }
65
+ ),
66
+ e.src && /* @__PURE__ */ l(
67
+ w,
68
+ {
69
+ isOpen: n,
70
+ onClose: () => i(!1),
71
+ src: e.src,
72
+ alt: e.alt || ""
73
+ }
74
+ )
75
+ ] });
76
+ }
77
+ export {
78
+ g as Image
79
+ };
80
+ //# sourceMappingURL=image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.js","sources":["../../../src/components/content-components/image.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\n\ninterface ImageModalProps {\n isOpen: boolean;\n onClose: () => void;\n src: string;\n alt: string;\n}\n\nfunction ImageModal({ isOpen, onClose, src, alt }: ImageModalProps) {\n const modalRef = useRef<HTMLDivElement>(null);\n const previousActiveElement = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (isOpen) {\n previousActiveElement.current = document.activeElement as HTMLElement;\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"unset\";\n previousActiveElement.current?.focus();\n }\n\n return () => {\n document.body.style.overflow = \"unset\";\n };\n }, [isOpen]);\n\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n }\n };\n\n if (isOpen) {\n window.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => {\n window.removeEventListener(\"keydown\", handleEscape);\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n return (\n <div\n className=\"mint:fixed mint:inset-0 mint:flex mint:items-center mint:justify-center mint:p-4 mint:bg-black/80 mint:backdrop-blur-sm\"\n onClick={onClose}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Expanded image view\"\n style={{ zIndex: 9999 }}\n >\n <div\n ref={modalRef}\n className=\"mint:relative mint:max-w-[95vw] mint:max-h-[95vh] mint:flex mint:items-center mint:justify-center\"\n onClick={(e) => e.stopPropagation()}\n >\n <img\n src={src}\n alt={alt}\n className=\"mint:max-w-full mint:max-h-[95vh] mint:object-contain mint:rounded-lg\"\n />\n </div>\n </div>\n );\n}\n\nexport function Image(props: React.ImgHTMLAttributes<HTMLImageElement>) {\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n return (\n <>\n <img\n {...props}\n className={cn(\n \"mint:max-w-full mint:h-auto mint:object-contain mint:cursor-zoom-in mint:rounded-lg\",\n props.className\n )}\n onClick={() => setIsModalOpen(true)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setIsModalOpen(true);\n }\n }}\n tabIndex={0}\n role=\"button\"\n aria-label={`${props.alt || \"Image\"} - Click to enlarge`}\n />\n {props.src && (\n <ImageModal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n src={props.src}\n alt={props.alt || \"\"}\n />\n )}\n </>\n );\n}\n"],"names":["ImageModal","isOpen","onClose","src","alt","modalRef","useRef","previousActiveElement","useEffect","_a","handleEscape","e","jsx","Image","props","isModalOpen","setIsModalOpen","useState","jsxs","Fragment","cn"],"mappings":";;;AAUA,SAASA,EAAW,EAAE,QAAAC,GAAQ,SAAAC,GAAS,KAAAC,GAAK,KAAAC,KAAwB;AAClE,QAAMC,IAAWC,EAAuB,IAAI,GACtCC,IAAwBD,EAA2B,IAAI;AAgC7D,SA9BAE,EAAU,MAAM;;AACd,WAAIP,KACFM,EAAsB,UAAU,SAAS,eACzC,SAAS,KAAK,MAAM,WAAW,aAE/B,SAAS,KAAK,MAAM,WAAW,UAC/BE,IAAAF,EAAsB,YAAtB,QAAAE,EAA+B,UAG1B,MAAM;AACX,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAAA,EACF,GAAG,CAACR,CAAM,CAAC,GAEXO,EAAU,MAAM;AACd,UAAME,IAAe,CAACC,MAAqB;AACzC,MAAIA,EAAE,QAAQ,YACZT,EAAA;AAAA,IAEJ;AAEA,WAAID,KACF,OAAO,iBAAiB,WAAWS,CAAY,GAG1C,MAAM;AACX,aAAO,oBAAoB,WAAWA,CAAY;AAAA,IACpD;AAAA,EACF,GAAG,CAACT,GAAQC,CAAO,CAAC,GAEfD,IAGH,gBAAAW;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,SAASV;AAAA,MACT,MAAK;AAAA,MACL,cAAW;AAAA,MACX,cAAW;AAAA,MACX,OAAO,EAAE,QAAQ,KAAA;AAAA,MAEjB,UAAA,gBAAAU;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKP;AAAA,UACL,WAAU;AAAA,UACV,SAAS,CAACM,MAAMA,EAAE,gBAAA;AAAA,UAElB,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAAT;AAAA,cACA,KAAAC;AAAA,cACA,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QACZ;AAAA,MAAA;AAAA,IACF;AAAA,EAAA,IArBgB;AAwBtB;AAEO,SAASS,EAAMC,GAAkD;AACtE,QAAM,CAACC,GAAaC,CAAc,IAAIC,EAAS,EAAK;AAEpD,SACE,gBAAAC,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAP;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGE;AAAA,QACJ,WAAWM;AAAA,UACT;AAAA,UACAN,EAAM;AAAA,QAAA;AAAA,QAER,SAAS,MAAME,EAAe,EAAI;AAAA,QAClC,WAAW,CAACL,MAAM;AAChB,WAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SACjCA,EAAE,eAAA,GACFK,EAAe,EAAI;AAAA,QAEvB;AAAA,QACA,UAAU;AAAA,QACV,MAAK;AAAA,QACL,cAAY,GAAGF,EAAM,OAAO,OAAO;AAAA,MAAA;AAAA,IAAA;AAAA,IAEpCA,EAAM,OACL,gBAAAF;AAAA,MAACZ;AAAA,MAAA;AAAA,QACC,QAAQe;AAAA,QACR,SAAS,MAAMC,EAAe,EAAK;AAAA,QACnC,KAAKF,EAAM;AAAA,QACX,KAAKA,EAAM,OAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EACpB,GAEJ;AAEJ;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as m } from "react/jsx-runtime";
2
2
  function i({ children: n }) {
3
- return /* @__PURE__ */ m("span", { className: "mint:not-prose mint:inline-block mint:mt-2 mint:mr-1 mint:px-1.5 mint:py-0.5 mint:text-sm mint:font-semibold mint:font-mono mint:rounded mint:bg-gray-100 mint:dark:bg-[#2d2d2d]", children: n });
3
+ return /* @__PURE__ */ m("span", { className: "not-prose mint:inline-block mint:mt-2 mint:mr-1 mint:px-1.5 mint:py-0.5 mint:text-sm mint:font-semibold mint:font-mono mint:rounded mint:bg-gray-100 mint:dark:bg-[#2d2d2d]", children: n });
4
4
  }
5
5
  export {
6
6
  i as ParamName
@@ -1 +1 @@
1
- {"version":3,"file":"param-name.js","sources":["../../../src/components/content-components/param-name.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn\";\ninterface ParamNameProps {\n children: React.ReactNode;\n}\n\nexport function ParamName({ children }: ParamNameProps) {\n return (\n <span className=\"mint:not-prose mint:inline-block mint:mt-2 mint:mr-1 mint:px-1.5 mint:py-0.5 mint:text-sm mint:font-semibold mint:font-mono mint:rounded mint:bg-gray-100 mint:dark:bg-[#2d2d2d]\">\n {children}\n </span>\n );\n}\n"],"names":["ParamName","children","jsx"],"mappings":";AAKO,SAASA,EAAU,EAAE,UAAAC,KAA4B;AACtD,SACE,gBAAAC,EAAC,QAAA,EAAK,WAAU,oLACb,UAAAD,EAAA,CACH;AAEJ;"}
1
+ {"version":3,"file":"param-name.js","sources":["../../../src/components/content-components/param-name.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn\";\ninterface ParamNameProps {\n children: React.ReactNode;\n}\n\nexport function ParamName({ children }: ParamNameProps) {\n return (\n <span className=\"not-prose mint:inline-block mint:mt-2 mint:mr-1 mint:px-1.5 mint:py-0.5 mint:text-sm mint:font-semibold mint:font-mono mint:rounded mint:bg-gray-100 mint:dark:bg-[#2d2d2d]\">\n {children}\n </span>\n );\n}\n"],"names":["ParamName","children","jsx"],"mappings":";AAKO,SAASA,EAAU,EAAE,UAAAC,KAA4B;AACtD,SACE,gBAAAC,EAAC,QAAA,EAAK,WAAU,+KACb,UAAAD,EAAA,CACH;AAEJ;"}
@@ -1,13 +1,13 @@
1
- import { jsx as d } from "react/jsx-runtime";
2
- import { useRef as w } from "react";
1
+ import { jsx as r, jsxs as w } from "react/jsx-runtime";
2
+ import { useRef as p } from "react";
3
3
  import { useZonePivotContext as u } from "./zone-pivot-context.js";
4
- import { cn as p } from "../../../utils/cn.js";
5
- function P({
4
+ import { cn as k } from "../../../utils/cn.js";
5
+ function g({
6
6
  group: e,
7
7
  className: h
8
8
  }) {
9
- var l;
10
- const { activePivots: b, setActivePivot: s } = u(), m = w(null), c = (l = e.pivots.find((t) => b.has(t.id))) == null ? void 0 : l.id, v = e.pivots.findIndex((t) => t.id === c), x = (t) => {
9
+ var c;
10
+ const { activePivots: b, setActivePivot: d } = u(), m = p(null), l = (c = e.pivots.find((t) => b.has(t.id))) == null ? void 0 : c.id, v = e.pivots.findIndex((t) => t.id === l), x = (t) => {
11
11
  var f;
12
12
  const { key: i } = t, n = v;
13
13
  let o = n;
@@ -29,16 +29,16 @@ function P({
29
29
  default:
30
30
  return;
31
31
  }
32
- const r = e.pivots[o];
33
- if (r) {
34
- s(e.id, r.id);
32
+ const s = e.pivots[o];
33
+ if (s) {
34
+ d(e.id, s.id);
35
35
  const a = (f = m.current) == null ? void 0 : f.querySelector(
36
- `[data-pivot-id="${r.id}"]`
36
+ `[data-pivot-id="${s.id}"]`
37
37
  );
38
38
  a == null || a.focus();
39
39
  }
40
40
  };
41
- return /* @__PURE__ */ d("div", { className: h, "data-zone-pivot-group": e.id, children: /* @__PURE__ */ d(
41
+ return /* @__PURE__ */ r("div", { className: h, "data-zone-pivot-group": e.id, children: /* @__PURE__ */ r(
42
42
  "div",
43
43
  {
44
44
  ref: m,
@@ -46,8 +46,8 @@ function P({
46
46
  "aria-label": e.prompt,
47
47
  className: "mint:inline-flex mint:items-center mint:gap-1 mint:p-1 mint:bg-gray-100 mint:rounded-lg mint:dark:bg-white/5",
48
48
  children: e.pivots.map((t) => {
49
- const i = t.id === c;
50
- return /* @__PURE__ */ d(
49
+ const i = t.id === l;
50
+ return /* @__PURE__ */ w(
51
51
  "button",
52
52
  {
53
53
  id: `tab-${e.id}-${t.id}`,
@@ -57,13 +57,16 @@ function P({
57
57
  "aria-selected": i,
58
58
  "aria-controls": `panel-${e.id}-${t.id}`,
59
59
  tabIndex: i ? 0 : -1,
60
- onClick: () => s(e.id, t.id),
60
+ onClick: () => d(e.id, t.id),
61
61
  onKeyDown: x,
62
- className: p(
63
- "mint:relative mint:px-3 mint:py-1.5 mint:text-sm mint:font-medium mint:rounded-md mint:bg-transparent mint:border-none mint:cursor-pointer mint:transition-all mint:duration-150 mint:focus:outline-none mint:focus-visible:shadow-[0_0_0_2px_#3b82f6] mint:focus-visible:outline-offset-2",
64
- i ? "mint:bg-white mint:text-[#141414] mint:shadow-sm mint:dark:bg-white/10 mint:dark:text-white" : "mint:text-gray-600 mint:hover:text-[#141414] mint:hover:bg-white/50 mint:dark:text-gray-400 mint:dark:hover:text-white mint:dark:hover:bg-white/10"
62
+ className: k(
63
+ "mint:relative mint:px-3 mint:py-1.5 mint:text-sm mint:rounded-md mint:bg-transparent mint:border-none mint:cursor-pointer mint:focus:outline-none mint:focus-visible:shadow-[0_0_0_2px_#3b82f6] mint:focus-visible:outline-offset-2",
64
+ i ? "mint:bg-white mint:text-[#141414] mint:shadow-sm mint:dark:bg-white/10 mint:dark:text-white mint:font-semibold" : "mint:text-gray-600 mint:hover:text-[#141414] mint:hover:bg-white/50 mint:dark:text-gray-400 mint:dark:hover:text-white mint:dark:hover:bg-white/10 mint:font-medium"
65
65
  ),
66
- children: t.title
66
+ children: [
67
+ /* @__PURE__ */ r("span", { className: "mint:invisible mint:font-semibold mint:block mint:h-0 mint:overflow-hidden", "aria-hidden": "true", children: t.title }),
68
+ /* @__PURE__ */ r("span", { className: "mint:block", children: t.title })
69
+ ]
67
70
  },
68
71
  t.id
69
72
  );
@@ -72,6 +75,6 @@ function P({
72
75
  ) });
73
76
  }
74
77
  export {
75
- P as ZonePivotSelector
78
+ g as ZonePivotSelector
76
79
  };
77
80
  //# sourceMappingURL=zone-pivot-selector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zone-pivot-selector.js","sources":["../../../../src/components/content-components/zone-pivots/zone-pivot-selector.tsx"],"sourcesContent":["import React, { useRef } from \"react\";\nimport { useZonePivotContext } from \"./zone-pivot-context\";\nimport type { ZonePivotGroup } from \"../../../types/page\";\nimport { cn } from \"../../../utils/cn\";\n\nexport interface ZonePivotSelectorProps {\n group: ZonePivotGroup;\n className?: string;\n}\n\nexport function ZonePivotSelector({\n group,\n className,\n}: ZonePivotSelectorProps) {\n const { activePivots, setActivePivot } = useZonePivotContext();\n const tabListRef = useRef<HTMLDivElement>(null);\n\n const selectedPivotId = group.pivots.find((p) => activePivots.has(p.id))?.id;\n const selectedIndex = group.pivots.findIndex((p) => p.id === selectedPivotId);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n const { key } = event;\n const currentIndex = selectedIndex;\n let nextIndex = currentIndex;\n\n switch (key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n event.preventDefault();\n nextIndex =\n currentIndex > 0 ? currentIndex - 1 : group.pivots.length - 1;\n break;\n case \"ArrowRight\":\n case \"ArrowDown\":\n event.preventDefault();\n nextIndex =\n currentIndex < group.pivots.length - 1 ? currentIndex + 1 : 0;\n break;\n case \"Home\":\n event.preventDefault();\n nextIndex = 0;\n break;\n case \"End\":\n event.preventDefault();\n nextIndex = group.pivots.length - 1;\n break;\n default:\n return;\n }\n\n const nextPivot = group.pivots[nextIndex];\n if (nextPivot) {\n setActivePivot(group.id, nextPivot.id);\n const button = tabListRef.current?.querySelector(\n `[data-pivot-id=\"${nextPivot.id}\"]`\n ) as HTMLButtonElement;\n button?.focus();\n }\n };\n\n return (\n <div className={className} data-zone-pivot-group={group.id}>\n <div\n ref={tabListRef}\n role=\"tablist\"\n aria-label={group.prompt}\n className=\"mint:inline-flex mint:items-center mint:gap-1 mint:p-1 mint:bg-gray-100 mint:rounded-lg mint:dark:bg-white/5\"\n >\n {group.pivots.map((pivot) => {\n const isSelected = pivot.id === selectedPivotId;\n return (\n <button\n key={pivot.id}\n id={`tab-${group.id}-${pivot.id}`}\n role=\"tab\"\n type=\"button\"\n data-pivot-id={pivot.id}\n aria-selected={isSelected}\n aria-controls={`panel-${group.id}-${pivot.id}`}\n tabIndex={isSelected ? 0 : -1}\n onClick={() => setActivePivot(group.id, pivot.id)}\n onKeyDown={handleKeyDown}\n className={cn(\n \"mint:relative mint:px-3 mint:py-1.5 mint:text-sm mint:font-medium mint:rounded-md mint:bg-transparent mint:border-none mint:cursor-pointer mint:transition-all mint:duration-150 mint:focus:outline-none mint:focus-visible:shadow-[0_0_0_2px_#3b82f6] mint:focus-visible:outline-offset-2\",\n isSelected\n ? \"mint:bg-white mint:text-[#141414] mint:shadow-sm mint:dark:bg-white/10 mint:dark:text-white\"\n : \"mint:text-gray-600 mint:hover:text-[#141414] mint:hover:bg-white/50 mint:dark:text-gray-400 mint:dark:hover:text-white mint:dark:hover:bg-white/10\"\n )}\n >\n {pivot.title}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n"],"names":["ZonePivotSelector","group","className","activePivots","setActivePivot","useZonePivotContext","tabListRef","useRef","selectedPivotId","_a","p","selectedIndex","handleKeyDown","event","key","currentIndex","nextIndex","nextPivot","button","jsx","pivot","isSelected","cn"],"mappings":";;;;AAUO,SAASA,EAAkB;AAAA,EAChC,OAAAC;AAAA,EACA,WAAAC;AACF,GAA2B;;AACzB,QAAM,EAAE,cAAAC,GAAc,gBAAAC,EAAA,IAAmBC,EAAA,GACnCC,IAAaC,EAAuB,IAAI,GAExCC,KAAkBC,IAAAR,EAAM,OAAO,KAAK,CAACS,MAAMP,EAAa,IAAIO,EAAE,EAAE,CAAC,MAA/C,gBAAAD,EAAkD,IACpEE,IAAgBV,EAAM,OAAO,UAAU,CAACS,MAAMA,EAAE,OAAOF,CAAe,GAEtEI,IAAgB,CAACC,MAAkD;;AACvE,UAAM,EAAE,KAAAC,MAAQD,GACVE,IAAeJ;AACrB,QAAIK,IAAYD;AAEhB,YAAQD,GAAA;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AACH,QAAAD,EAAM,eAAA,GACNG,IACED,IAAe,IAAIA,IAAe,IAAId,EAAM,OAAO,SAAS;AAC9D;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,QAAAY,EAAM,eAAA,GACNG,IACED,IAAed,EAAM,OAAO,SAAS,IAAIc,IAAe,IAAI;AAC9D;AAAA,MACF,KAAK;AACH,QAAAF,EAAM,eAAA,GACNG,IAAY;AACZ;AAAA,MACF,KAAK;AACH,QAAAH,EAAM,eAAA,GACNG,IAAYf,EAAM,OAAO,SAAS;AAClC;AAAA,MACF;AACE;AAAA,IAAA;AAGJ,UAAMgB,IAAYhB,EAAM,OAAOe,CAAS;AACxC,QAAIC,GAAW;AACb,MAAAb,EAAeH,EAAM,IAAIgB,EAAU,EAAE;AACrC,YAAMC,KAAST,IAAAH,EAAW,YAAX,gBAAAG,EAAoB;AAAA,QACjC,mBAAmBQ,EAAU,EAAE;AAAA;AAEjC,MAAAC,KAAA,QAAAA,EAAQ;AAAA,IACV;AAAA,EACF;AAEA,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAAjB,GAAsB,yBAAuBD,EAAM,IACtD,UAAA,gBAAAkB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKb;AAAA,MACL,MAAK;AAAA,MACL,cAAYL,EAAM;AAAA,MAClB,WAAU;AAAA,MAET,UAAAA,EAAM,OAAO,IAAI,CAACmB,MAAU;AAC3B,cAAMC,IAAaD,EAAM,OAAOZ;AAChC,eACE,gBAAAW;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,IAAI,OAAOlB,EAAM,EAAE,IAAImB,EAAM,EAAE;AAAA,YAC/B,MAAK;AAAA,YACL,MAAK;AAAA,YACL,iBAAeA,EAAM;AAAA,YACrB,iBAAeC;AAAA,YACf,iBAAe,SAASpB,EAAM,EAAE,IAAImB,EAAM,EAAE;AAAA,YAC5C,UAAUC,IAAa,IAAI;AAAA,YAC3B,SAAS,MAAMjB,EAAeH,EAAM,IAAImB,EAAM,EAAE;AAAA,YAChD,WAAWR;AAAA,YACX,WAAWU;AAAA,cACT;AAAA,cACAD,IACI,gGACA;AAAA,YAAA;AAAA,YAGL,UAAAD,EAAM;AAAA,UAAA;AAAA,UAjBFA,EAAM;AAAA,QAAA;AAAA,MAoBjB,CAAC;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;"}
1
+ {"version":3,"file":"zone-pivot-selector.js","sources":["../../../../src/components/content-components/zone-pivots/zone-pivot-selector.tsx"],"sourcesContent":["import React, { useRef } from \"react\";\nimport { useZonePivotContext } from \"./zone-pivot-context\";\nimport type { ZonePivotGroup } from \"../../../types/page\";\nimport { cn } from \"../../../utils/cn\";\n\nexport interface ZonePivotSelectorProps {\n group: ZonePivotGroup;\n className?: string;\n}\n\nexport function ZonePivotSelector({\n group,\n className,\n}: ZonePivotSelectorProps) {\n const { activePivots, setActivePivot } = useZonePivotContext();\n const tabListRef = useRef<HTMLDivElement>(null);\n\n const selectedPivotId = group.pivots.find((p) => activePivots.has(p.id))?.id;\n const selectedIndex = group.pivots.findIndex((p) => p.id === selectedPivotId);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n const { key } = event;\n const currentIndex = selectedIndex;\n let nextIndex = currentIndex;\n\n switch (key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n event.preventDefault();\n nextIndex =\n currentIndex > 0 ? currentIndex - 1 : group.pivots.length - 1;\n break;\n case \"ArrowRight\":\n case \"ArrowDown\":\n event.preventDefault();\n nextIndex =\n currentIndex < group.pivots.length - 1 ? currentIndex + 1 : 0;\n break;\n case \"Home\":\n event.preventDefault();\n nextIndex = 0;\n break;\n case \"End\":\n event.preventDefault();\n nextIndex = group.pivots.length - 1;\n break;\n default:\n return;\n }\n\n const nextPivot = group.pivots[nextIndex];\n if (nextPivot) {\n setActivePivot(group.id, nextPivot.id);\n const button = tabListRef.current?.querySelector(\n `[data-pivot-id=\"${nextPivot.id}\"]`\n ) as HTMLButtonElement;\n button?.focus();\n }\n };\n\n return (\n <div className={className} data-zone-pivot-group={group.id}>\n <div\n ref={tabListRef}\n role=\"tablist\"\n aria-label={group.prompt}\n className=\"mint:inline-flex mint:items-center mint:gap-1 mint:p-1 mint:bg-gray-100 mint:rounded-lg mint:dark:bg-white/5\"\n >\n {group.pivots.map((pivot) => {\n const isSelected = pivot.id === selectedPivotId;\n return (\n <button\n key={pivot.id}\n id={`tab-${group.id}-${pivot.id}`}\n role=\"tab\"\n type=\"button\"\n data-pivot-id={pivot.id}\n aria-selected={isSelected}\n aria-controls={`panel-${group.id}-${pivot.id}`}\n tabIndex={isSelected ? 0 : -1}\n onClick={() => setActivePivot(group.id, pivot.id)}\n onKeyDown={handleKeyDown}\n className={cn(\n \"mint:relative mint:px-3 mint:py-1.5 mint:text-sm mint:rounded-md mint:bg-transparent mint:border-none mint:cursor-pointer mint:focus:outline-none mint:focus-visible:shadow-[0_0_0_2px_#3b82f6] mint:focus-visible:outline-offset-2\",\n isSelected\n ? \"mint:bg-white mint:text-[#141414] mint:shadow-sm mint:dark:bg-white/10 mint:dark:text-white mint:font-semibold\"\n : \"mint:text-gray-600 mint:hover:text-[#141414] mint:hover:bg-white/50 mint:dark:text-gray-400 mint:dark:hover:text-white mint:dark:hover:bg-white/10 mint:font-medium\"\n )}\n >\n <span className=\"mint:invisible mint:font-semibold mint:block mint:h-0 mint:overflow-hidden\" aria-hidden=\"true\">\n {pivot.title}\n </span>\n <span className=\"mint:block\">{pivot.title}</span>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n"],"names":["ZonePivotSelector","group","className","activePivots","setActivePivot","useZonePivotContext","tabListRef","useRef","selectedPivotId","_a","p","selectedIndex","handleKeyDown","event","key","currentIndex","nextIndex","nextPivot","button","jsx","pivot","isSelected","jsxs","cn"],"mappings":";;;;AAUO,SAASA,EAAkB;AAAA,EAChC,OAAAC;AAAA,EACA,WAAAC;AACF,GAA2B;;AACzB,QAAM,EAAE,cAAAC,GAAc,gBAAAC,EAAA,IAAmBC,EAAA,GACnCC,IAAaC,EAAuB,IAAI,GAExCC,KAAkBC,IAAAR,EAAM,OAAO,KAAK,CAACS,MAAMP,EAAa,IAAIO,EAAE,EAAE,CAAC,MAA/C,gBAAAD,EAAkD,IACpEE,IAAgBV,EAAM,OAAO,UAAU,CAACS,MAAMA,EAAE,OAAOF,CAAe,GAEtEI,IAAgB,CAACC,MAAkD;;AACvE,UAAM,EAAE,KAAAC,MAAQD,GACVE,IAAeJ;AACrB,QAAIK,IAAYD;AAEhB,YAAQD,GAAA;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AACH,QAAAD,EAAM,eAAA,GACNG,IACED,IAAe,IAAIA,IAAe,IAAId,EAAM,OAAO,SAAS;AAC9D;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,QAAAY,EAAM,eAAA,GACNG,IACED,IAAed,EAAM,OAAO,SAAS,IAAIc,IAAe,IAAI;AAC9D;AAAA,MACF,KAAK;AACH,QAAAF,EAAM,eAAA,GACNG,IAAY;AACZ;AAAA,MACF,KAAK;AACH,QAAAH,EAAM,eAAA,GACNG,IAAYf,EAAM,OAAO,SAAS;AAClC;AAAA,MACF;AACE;AAAA,IAAA;AAGJ,UAAMgB,IAAYhB,EAAM,OAAOe,CAAS;AACxC,QAAIC,GAAW;AACb,MAAAb,EAAeH,EAAM,IAAIgB,EAAU,EAAE;AACrC,YAAMC,KAAST,IAAAH,EAAW,YAAX,gBAAAG,EAAoB;AAAA,QACjC,mBAAmBQ,EAAU,EAAE;AAAA;AAEjC,MAAAC,KAAA,QAAAA,EAAQ;AAAA,IACV;AAAA,EACF;AAEA,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAAjB,GAAsB,yBAAuBD,EAAM,IACtD,UAAA,gBAAAkB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKb;AAAA,MACL,MAAK;AAAA,MACL,cAAYL,EAAM;AAAA,MAClB,WAAU;AAAA,MAET,UAAAA,EAAM,OAAO,IAAI,CAACmB,MAAU;AAC3B,cAAMC,IAAaD,EAAM,OAAOZ;AAChC,eACE,gBAAAc;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,IAAI,OAAOrB,EAAM,EAAE,IAAImB,EAAM,EAAE;AAAA,YAC/B,MAAK;AAAA,YACL,MAAK;AAAA,YACL,iBAAeA,EAAM;AAAA,YACrB,iBAAeC;AAAA,YACf,iBAAe,SAASpB,EAAM,EAAE,IAAImB,EAAM,EAAE;AAAA,YAC5C,UAAUC,IAAa,IAAI;AAAA,YAC3B,SAAS,MAAMjB,EAAeH,EAAM,IAAImB,EAAM,EAAE;AAAA,YAChD,WAAWR;AAAA,YACX,WAAWW;AAAA,cACT;AAAA,cACAF,IACI,mHACA;AAAA,YAAA;AAAA,YAGN,UAAA;AAAA,cAAA,gBAAAF,EAAC,UAAK,WAAU,8EAA6E,eAAY,QACtG,YAAM,OACT;AAAA,cACA,gBAAAA,EAAC,QAAA,EAAK,WAAU,cAAc,YAAM,MAAA,CAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UApBrCC,EAAM;AAAA,QAAA;AAAA,MAuBjB,CAAC;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;"}
@@ -0,0 +1,60 @@
1
+ import { jsx as i, jsxs as u } from "react/jsx-runtime";
2
+ import { NavTree as b } from "./nav-tree/index.js";
3
+ import { ComponentsProvider as p } from "../context/components-context.js";
4
+ import { cn as l } from "../utils/cn.js";
5
+ /* empty css */
6
+ const y = ({
7
+ navTree: t,
8
+ children: m,
9
+ activeHref: e,
10
+ activeId: r,
11
+ theme: a = "light",
12
+ className: o = "",
13
+ bottomLinks: d,
14
+ LinkComponent: f,
15
+ localization: s,
16
+ telemetry: v,
17
+ showSidebar: c = !0,
18
+ sidebarClassName: h
19
+ }) => {
20
+ const n = a === "dark" ? "dark" : "light", x = { ...{
21
+ sidebarAriaLabel: "Sidebar navigation"
22
+ }, ...s };
23
+ return /* @__PURE__ */ i(p, { LinkComponent: f, children: /* @__PURE__ */ i(
24
+ "div",
25
+ {
26
+ className: l(
27
+ "mint:flex mint:min-h-0 mint:flex-1",
28
+ n === "dark" && "dark",
29
+ o
30
+ ),
31
+ children: /* @__PURE__ */ u("div", { className: "mint:isolate mint:flex mint:flex-row mint:flex-nowrap mint:w-full mint:h-full mint:overflow-hidden mint:bg-[#f0f0f0] mint:dark:bg-[#0f0f0f]", children: [
32
+ c && t && /* @__PURE__ */ i(
33
+ "aside",
34
+ {
35
+ "aria-label": x.sidebarAriaLabel,
36
+ className: l(
37
+ "mint:flex mint:flex-col mint:shrink-0 mint:w-58 mint:h-full mint:[&_ul]:pl-2",
38
+ h ?? "mint:max-lg:hidden"
39
+ ),
40
+ children: /* @__PURE__ */ i(
41
+ b,
42
+ {
43
+ navTree: t,
44
+ activeId: r ?? e,
45
+ activeHref: e,
46
+ theme: n,
47
+ bottomLinks: d
48
+ }
49
+ )
50
+ }
51
+ ),
52
+ /* @__PURE__ */ i("div", { className: "mint:flex mint:flex-1 mint:flex-col mint:min-w-0 mint:h-full mint:overflow-hidden mint:rounded-tl-[var(--borderRadiusXXLarge,1.5rem)]", children: m })
53
+ ] })
54
+ }
55
+ ) });
56
+ };
57
+ export {
58
+ y as DocsLayout
59
+ };
60
+ //# sourceMappingURL=docsLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docsLayout.js","sources":["../../src/components/docsLayout.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { NavTreeData } from \"../types\";\nimport type { BottomLinkConfig } from \"./nav-tree\";\nimport type { LinkComponent } from \"../types\";\nimport { NavTree } from \"./nav-tree\";\nimport { ComponentsProvider } from \"../context/components-context\";\nimport { cn } from \"../utils/cn\";\nimport \"../styles.css\";\n\n/**\n * Localization strings for DocsLayout\n */\nexport interface DocsLayoutLocalization {\n /** Aria label for the sidebar navigation. Default: \"Sidebar navigation\" */\n sidebarAriaLabel?: string;\n}\n\n/**\n * Telemetry configuration for DocsLayout\n */\nexport interface DocsLayoutTelemetry {\n /** Activity name for bottom link clicks */\n bottomLinkActivity?: string;\n /** Phase for bottom link clicks (e.g., \"Start\", \"Complete\") */\n bottomLinkPhase?: string;\n}\n\n/**\n * Props for the DocsLayout component\n */\nexport interface DocsLayoutProps {\n /** Navigation tree data structure */\n navTree: NavTreeData;\n\n /** The main content to render in the layout */\n children: ReactNode;\n\n /** Currently active href for navigation highlighting */\n activeHref?: string;\n\n /** Currently active ID for navigation highlighting */\n activeId?: string;\n\n /** Theme for the layout */\n theme?: \"light\" | \"dark\";\n\n /** Additional CSS classes for the outer container */\n className?: string;\n\n /** Bottom links configuration (e.g., blog, GitHub, feedback) */\n bottomLinks?: BottomLinkConfig[];\n\n /** Custom Link component for navigation (e.g., React Router Link, Next.js Link) */\n LinkComponent?: LinkComponent;\n\n /** Localization strings */\n localization?: DocsLayoutLocalization;\n\n /** Telemetry configuration */\n telemetry?: DocsLayoutTelemetry;\n\n /** Whether to show the sidebar. Default: true */\n showSidebar?: boolean;\n\n /** Custom className for the sidebar to control responsive behavior.\n * Default: \"mint:max-lg:hidden\" (hidden below lg breakpoint) */\n sidebarClassName?: string;\n}\n\n/**\n * DocsLayout component provides a complete documentation layout with sidebar navigation\n * and main content area. It's designed to be scalable, customizable, and tree-shakable.\n *\n * @example\n * ```tsx\n * <DocsLayout\n * navTree={{ items: [...] }}\n * activeHref=\"/docs/getting-started\"\n * theme=\"dark\"\n * bottomLinks={[\n * { href: \"https://blog.com\", label: \"Blog\", icon: BlogIcon }\n * ]}\n * LinkComponent={Link}\n * >\n * <YourPageContent />\n * </DocsLayout>\n * ```\n */\nexport const DocsLayout = ({\n navTree,\n children,\n activeHref,\n activeId,\n theme = \"light\",\n className = \"\",\n bottomLinks,\n LinkComponent,\n localization,\n telemetry,\n showSidebar = true,\n sidebarClassName,\n}: DocsLayoutProps) => {\n const resolvedTheme = theme === \"dark\" ? \"dark\" : \"light\";\n\n // Default localization\n const defaultLocalization: Required<DocsLayoutLocalization> = {\n sidebarAriaLabel: \"Sidebar navigation\",\n };\n\n const loc = { ...defaultLocalization, ...localization };\n\n return (\n <ComponentsProvider LinkComponent={LinkComponent}>\n <div\n className={cn(\n \"mint:flex mint:min-h-0 mint:flex-1\",\n resolvedTheme === \"dark\" && \"dark\",\n className\n )}\n >\n <div className=\"mint:isolate mint:flex mint:flex-row mint:flex-nowrap mint:w-full mint:h-full mint:overflow-hidden mint:bg-[#f0f0f0] mint:dark:bg-[#0f0f0f]\">\n {showSidebar && navTree && (\n <aside\n aria-label={loc.sidebarAriaLabel}\n className={cn(\n \"mint:flex mint:flex-col mint:shrink-0 mint:w-58 mint:h-full mint:[&_ul]:pl-2\",\n sidebarClassName ?? \"mint:max-lg:hidden\"\n )}\n >\n <NavTree\n navTree={navTree}\n activeId={activeId ?? activeHref}\n activeHref={activeHref}\n theme={resolvedTheme}\n bottomLinks={bottomLinks}\n />\n </aside>\n )}\n\n <div className=\"mint:flex mint:flex-1 mint:flex-col mint:min-w-0 mint:h-full mint:overflow-hidden mint:rounded-tl-[var(--borderRadiusXXLarge,1.5rem)]\">\n {children}\n </div>\n </div>\n </div>\n </ComponentsProvider>\n );\n};\n"],"names":["DocsLayout","navTree","children","activeHref","activeId","theme","className","bottomLinks","LinkComponent","localization","telemetry","showSidebar","sidebarClassName","resolvedTheme","loc","jsx","ComponentsProvider","cn","jsxs","NavTree"],"mappings":";;;;;AAwFO,MAAMA,IAAa,CAAC;AAAA,EACzB,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,WAAAC,IAAY;AAAA,EACZ,aAAAC;AAAA,EACA,eAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,kBAAAC;AACF,MAAuB;AACrB,QAAMC,IAAgBR,MAAU,SAAS,SAAS,SAO5CS,IAAM,EAAE,GAJgD;AAAA,IAC5D,kBAAkB;AAAA,EAAA,GAGkB,GAAGL,EAAA;AAEzC,SACE,gBAAAM,EAACC,KAAmB,eAAAR,GAClB,UAAA,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWE;AAAA,QACT;AAAA,QACAJ,MAAkB,UAAU;AAAA,QAC5BP;AAAA,MAAA;AAAA,MAGF,UAAA,gBAAAY,EAAC,OAAA,EAAI,WAAU,+IACZ,UAAA;AAAA,QAAAP,KAAeV,KACd,gBAAAc;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,cAAYD,EAAI;AAAA,YAChB,WAAWG;AAAA,cACT;AAAA,cACAL,KAAoB;AAAA,YAAA;AAAA,YAGtB,UAAA,gBAAAG;AAAA,cAACI;AAAA,cAAA;AAAA,gBACC,SAAAlB;AAAA,gBACA,UAAUG,KAAYD;AAAA,gBACtB,YAAAA;AAAA,gBACA,OAAOU;AAAA,gBACP,aAAAN;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,QAIJ,gBAAAQ,EAAC,OAAA,EAAI,WAAU,yIACZ,UAAAb,EAAA,CACH;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;"}
@@ -0,0 +1,128 @@
1
+ import { jsx as t, jsxs as e } from "react/jsx-runtime";
2
+ import { MDXRenderer as N } from "./mdx-renderer.js";
3
+ import { TableOfContents as P } from "./toc/index.js";
4
+ import { PivotAwareTOC as T } from "./toc/pivot-aware-toc.js";
5
+ import { TextAlignLeftFilled as C } from "@fluentui/react-icons";
6
+ import { PageContextMenu as z } from "./page-context-menu.js";
7
+ import { ComponentsProvider as L } from "../context/components-context.js";
8
+ import { cn as o } from "../utils/cn.js";
9
+ /* empty css */
10
+ import { ZonePivotProvider as j } from "./content-components/zone-pivots/zone-pivot-context.js";
11
+ import { ZonePivotSelector as F } from "./content-components/zone-pivots/zone-pivot-selector.js";
12
+ function B({
13
+ payload: i,
14
+ toc: m,
15
+ navTree: O,
16
+ activeHref: E,
17
+ theme: f,
18
+ className: h = "",
19
+ pathname: a,
20
+ markdownContent: b,
21
+ allPages: x,
22
+ baseUrl: g,
23
+ bottomLinks: y,
24
+ LinkComponent: w,
25
+ localization: p,
26
+ telemetry: A,
27
+ contextMenu: n
28
+ }) {
29
+ var s, d;
30
+ const v = i.serializedContent, r = ((s = i.mdxExtracts) == null ? void 0 : s.zonePivotGroups) || [], l = (d = i.mdxExtracts) == null ? void 0 : d.pivotTocItems, k = !i.title, u = { ...{
31
+ onThisPage: "On this page",
32
+ loading: "Loading...",
33
+ errorTitle: "Error",
34
+ errorMessage: "Something went wrong",
35
+ notFoundTitle: "Page not found",
36
+ notFoundMessage: "The page you're looking for doesn't exist"
37
+ }, ...p };
38
+ return /* @__PURE__ */ t(L, { LinkComponent: w, children: /* @__PURE__ */ t(
39
+ "div",
40
+ {
41
+ className: o(
42
+ f === "dark" && "dark",
43
+ h,
44
+ "mint:flex mint:flex-col mint:flex-1 mint:min-h-0 mint:h-full mint:overflow-hidden"
45
+ ),
46
+ children: /* @__PURE__ */ t(
47
+ "div",
48
+ {
49
+ id: "page-container",
50
+ className: "mint:bg-[#f0f0f0] mint:dark:bg-[#0f0f0f] mint:flex-1 mint:min-h-0 mint:h-full mint:flex mint:flex-col mint:overflow-hidden",
51
+ children: /* @__PURE__ */ t(
52
+ "div",
53
+ {
54
+ id: "page-wrapper",
55
+ className: "mint:flex mint:rounded-tl-2xl mint:flex-1 mint:min-h-0 mint:h-full mint:overflow-hidden",
56
+ children: /* @__PURE__ */ t(
57
+ "div",
58
+ {
59
+ id: "main-content",
60
+ className: o(
61
+ "mint:flex-1 mint:p-8 mint:overflow-y-auto mint:overflow-x-hidden mint:rounded-tl-2xl mint:bg-white mint:dark:bg-[#1f1f1f] [scrollbar-gutter:stable] mint:overscroll-contain 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"
62
+ ),
63
+ children: /* @__PURE__ */ t(j, { groups: r, children: /* @__PURE__ */ e("div", { className: "mint:flex mint:flex-row-reverse mint:gap-12 mint:justify-center mint:mx-auto mint:w-full", children: [
64
+ m && m.length > 0 && /* @__PURE__ */ t("aside", { className: "mint:w-64 mint:shrink-0 mint:ml-8 mint:max-xl:hidden mint:xl:block", children: /* @__PURE__ */ e("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: [
65
+ /* @__PURE__ */ e("div", { className: "mint:flex mint:items-center mint:gap-2 mint:mb-4", children: [
66
+ /* @__PURE__ */ t(C, { className: "mint:w-4 mint:h-4 mint:text-[#4b5563] mint:dark:text-[#9ca3af]" }),
67
+ /* @__PURE__ */ t("h2", { className: "mint:text-sm mint:font-semibold mint:text-[#141414] mint:dark:text-white", children: u.onThisPage })
68
+ ] }),
69
+ l && Object.keys(l).length > 0 ? /* @__PURE__ */ t(
70
+ T,
71
+ {
72
+ baseToc: m,
73
+ pivotTocItems: l
74
+ }
75
+ ) : /* @__PURE__ */ t(P, { toc: m })
76
+ ] }) }),
77
+ /* @__PURE__ */ e(
78
+ "div",
79
+ {
80
+ className: o(
81
+ "mint:w-full mint:overflow-x-visible mint:max-w-[42rem]",
82
+ k && "!mint:max-w-none"
83
+ ),
84
+ children: [
85
+ i.title && /* @__PURE__ */ t("header", { className: "mint:mb-8", children: /* @__PURE__ */ e("div", { className: "mint:mb-4", children: [
86
+ /* @__PURE__ */ e("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: [
87
+ /* @__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 }),
88
+ a && /* @__PURE__ */ t(
89
+ z,
90
+ {
91
+ className: "mint:ml-auto mint:max-sm:ml-0",
92
+ pathname: a,
93
+ markdownContent: b,
94
+ allPages: x,
95
+ baseUrl: g,
96
+ onCopyMarkdown: n == null ? void 0 : n.onCopyMarkdown,
97
+ onViewMarkdown: n == null ? void 0 : n.onViewMarkdown
98
+ }
99
+ )
100
+ ] }),
101
+ i.description && /* @__PURE__ */ t("p", { className: "mint:text-lg mint:text-[#4b5563] mint:dark:text-[#d1d5db]", children: i.description })
102
+ ] }) }),
103
+ r.length > 0 && /* @__PURE__ */ t("div", { className: "mint:mb-6 mint:flex mint:flex-wrap mint:gap-4", children: r.map((c) => /* @__PURE__ */ t(
104
+ F,
105
+ {
106
+ group: c,
107
+ className: "mint:flex mint:items-center mint:gap-2 mint:text-sm"
108
+ },
109
+ c.id
110
+ )) }),
111
+ /* @__PURE__ */ t("div", { className: "mint:pt-4", children: /* @__PURE__ */ t(N, { children: /* @__PURE__ */ t(v, {}) }) })
112
+ ]
113
+ }
114
+ )
115
+ ] }) })
116
+ }
117
+ )
118
+ }
119
+ )
120
+ }
121
+ )
122
+ }
123
+ ) });
124
+ }
125
+ export {
126
+ B as DocsPage
127
+ };
128
+ //# sourceMappingURL=docsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docsPage.js","sources":["../../src/components/docsPage.tsx"],"sourcesContent":["import { MDXRenderer } from \"./mdx-renderer\";\nimport type { DocsPageProps, PayloadData } 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, type ContextualOption } from \"./page-context-menu\";\nimport { ComponentsProvider } from \"../context/components-context\";\nimport { cn } from \"../utils/cn\";\nimport \"../styles.css\";\n\n/**\n * Localization strings for DocsPage component\n */\nexport interface DocsPageLocalization {\n /** Text for \"On this page\" heading. Default: \"On this page\" */\n onThisPage?: string;\n /** Loading message. Default: \"Loading...\" */\n loading?: string;\n /** Error title. Default: \"Error\" */\n errorTitle?: string;\n /** Generic error message. Default: \"Something went wrong\" */\n errorMessage?: string;\n /** Not found title. Default: \"Page not found\" */\n notFoundTitle?: string;\n /** Not found message. Default: \"The page you're looking for doesn't exist\" */\n notFoundMessage?: string;\n}\n\n/**\n * Telemetry configuration for DocsPage\n */\nexport interface DocsPageTelemetry {\n /** Activity name for page context menu interactions */\n contextMenuActivity?: string;\n /** Phase for context menu interactions */\n contextMenuPhase?: string;\n /** Activity name for TOC link clicks */\n tocLinkActivity?: string;\n /** Phase for TOC link clicks */\n tocLinkPhase?: string;\n /** Activity name for zone pivot selector changes */\n zonePivotActivity?: string;\n /** Phase for zone pivot changes */\n zonePivotPhase?: string;\n}\n\n/**\n * Configuration for the page context menu\n */\nexport interface PageContextMenuConfig {\n /** Custom actions for the page context menu. If provided, these will replace the default actions. */\n customActions?: ContextualOption[];\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}\n\n/**\n * Enhanced DocsPageProps with localization and telemetry support\n */\nexport interface EnhancedDocsPageProps extends DocsPageProps {\n /** Localization strings */\n localization?: DocsPageLocalization;\n /** Telemetry configuration */\n telemetry?: DocsPageTelemetry;\n /** Context menu configuration */\n contextMenu?: PageContextMenuConfig;\n}\n\n/**\n * DocsPage component renders a documentation page with MDX content, table of contents,\n * zone pivot selectors, and page context menu. It supports full customization through\n * props for localization, telemetry, and custom components.\n *\n * @example\n * ```tsx\n * <DocsPage\n * payload={{\n * content: \"...\",\n * serializedContent: Content,\n * title: \"Getting Started\",\n * description: \"Learn how to get started\"\n * }}\n * toc={[{ title: \"Introduction\", slug: \"intro\", level: 2 }]}\n * theme=\"dark\"\n * pathname=\"/docs/getting-started\"\n * LinkComponent={Link}\n * localization={{\n * onThisPage: \"In this article\"\n * }}\n * telemetry={{\n * contextMenuActivity: \"DocsPageContextMenu\",\n * contextMenuPhase: \"Start\"\n * }}\n * />\n * ```\n */\nexport function DocsPage({\n payload,\n toc,\n navTree,\n activeHref,\n theme,\n className = \"\",\n pathname,\n markdownContent,\n allPages,\n baseUrl,\n bottomLinks,\n LinkComponent,\n localization,\n telemetry,\n contextMenu,\n}: EnhancedDocsPageProps) {\n const Content = payload.serializedContent;\n const zonePivotGroups = payload.mdxExtracts?.zonePivotGroups || [];\n const pivotTocItems = payload.mdxExtracts?.pivotTocItems;\n const isFullWidth = !payload.title;\n\n // Default localization\n const defaultLocalization: Required<DocsPageLocalization> = {\n onThisPage: \"On this page\",\n loading: \"Loading...\",\n errorTitle: \"Error\",\n errorMessage: \"Something went wrong\",\n notFoundTitle: \"Page not found\",\n notFoundMessage: \"The page you're looking for doesn't exist\",\n };\n\n const loc = { ...defaultLocalization, ...localization };\n\n return (\n <ComponentsProvider LinkComponent={LinkComponent}>\n <div\n className={cn(\n theme === \"dark\" && \"dark\",\n className,\n \"mint:flex mint:flex-col mint:flex-1 mint:min-h-0 mint:h-full mint:overflow-hidden\"\n )}\n >\n <div\n id=\"page-container\"\n className=\"mint:bg-[#f0f0f0] mint:dark:bg-[#0f0f0f] mint:flex-1 mint:min-h-0 mint:h-full mint:flex mint:flex-col mint:overflow-hidden\"\n >\n <div\n id=\"page-wrapper\"\n className=\"mint:flex mint:rounded-tl-2xl mint:flex-1 mint:min-h-0 mint:h-full mint:overflow-hidden\"\n >\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-tl-2xl mint:bg-white mint:dark:bg-[#1f1f1f] [scrollbar-gutter:stable] mint:overscroll-contain 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 )}\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 {loc.onThisPage}\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-[42rem]\",\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 onCopyMarkdown={contextMenu?.onCopyMarkdown}\n onViewMarkdown={contextMenu?.onViewMarkdown}\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\nexport type { DocsPageProps, PayloadData } from \"../types\";\n\nexport type { EnhancedDocsPageProps as DocsPagePropsWithCustomization };\n\nexport type { ContextualOption };\n"],"names":["DocsPage","payload","toc","navTree","activeHref","theme","className","pathname","markdownContent","allPages","baseUrl","bottomLinks","LinkComponent","localization","telemetry","contextMenu","Content","zonePivotGroups","_a","pivotTocItems","_b","isFullWidth","loc","jsx","ComponentsProvider","cn","ZonePivotProvider","jsxs","TextAlignLeftFilled","PivotAwareTOC","TableOfContents","PageContextMenu","group","ZonePivotSelector","MDXRenderer"],"mappings":"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"}