@farming-labs/theme 0.2.45 → 0.2.47

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.
@@ -3,6 +3,10 @@ import { CopyMarkdownFormat, DocsFeedbackData, ReadingTimeFormat } from "@farmin
3
3
  import * as react_jsx_runtime0 from "react/jsx-runtime";
4
4
 
5
5
  //#region src/docs-page-client.d.ts
6
+ interface PageNavigationItem {
7
+ name: string;
8
+ url: string;
9
+ }
6
10
  /** Serializable provider — icon is an HTML string, not JSX. */
7
11
  interface SerializedProvider {
8
12
  name: string;
@@ -55,6 +59,8 @@ interface DocsPageClientProps {
55
59
  readingTime?: number | null;
56
60
  /** Reading-time label style. */
57
61
  readingTimeFormat?: ReadingTimeFormat;
62
+ previousPage?: PageNavigationItem | null;
63
+ nextPage?: PageNavigationItem | null;
58
64
  /** Map of pathname → serialized Schema.org JSON-LD. */
59
65
  structuredDataMap?: Record<string, string>;
60
66
  /** Direct serialized Schema.org JSON-LD override for the current page. */
@@ -119,6 +125,8 @@ declare function DocsPageClient({
119
125
  readingTimeMap,
120
126
  readingTime: readingTimeProp,
121
127
  readingTimeFormat,
128
+ previousPage,
129
+ nextPage,
122
130
  structuredDataMap,
123
131
  structuredData: structuredDataProp,
124
132
  readingTimeEnabled,
@@ -255,7 +255,7 @@ function findThreadlineTocActionsContainer() {
255
255
  }
256
256
  return toc.parentElement ?? toc;
257
257
  }
258
- function DocsPageClient({ tocEnabled, tocStyle = "default", breadcrumbEnabled = true, changelogBasePath, entry = "docs", publicPath, locale, copyMarkdown = false, copyMarkdownFormat, copyMarkdownIncludeTitle, copyMarkdownLabel, copyMarkdownCopiedLabel, openDocs = false, openDocsProviders, openDocsTarget, openDocsPrompt, pageActionsPosition = "below-title", pageActionsAlignment = "left", githubUrl, contentDir, githubBranch = "main", githubDirectory, editOnGithubUrl, lastModifiedMap, lastModified: lastModifiedProp, readingTimeMap, readingTime: readingTimeProp, readingTimeFormat = "long", structuredDataMap, structuredData: structuredDataProp, readingTimeEnabled = false, lastUpdatedEnabled = true, lastUpdatedLabel = "Last updated", lastUpdatedPosition = "footer", llmsTxtEnabled = false, descriptionMap, description, feedbackEnabled = false, feedbackQuestion, feedbackPlaceholder, feedbackRequireComment, feedbackPositiveLabel, feedbackNegativeLabel, feedbackSubmitLabel, feedbackSuccessMessage, feedbackErrorMessage, feedbackOnFeedback, analytics = false, children }) {
258
+ function DocsPageClient({ tocEnabled, tocStyle = "default", breadcrumbEnabled = true, changelogBasePath, entry = "docs", publicPath, locale, copyMarkdown = false, copyMarkdownFormat, copyMarkdownIncludeTitle, copyMarkdownLabel, copyMarkdownCopiedLabel, openDocs = false, openDocsProviders, openDocsTarget, openDocsPrompt, pageActionsPosition = "below-title", pageActionsAlignment = "left", githubUrl, contentDir, githubBranch = "main", githubDirectory, editOnGithubUrl, lastModifiedMap, lastModified: lastModifiedProp, readingTimeMap, readingTime: readingTimeProp, readingTimeFormat = "long", previousPage, nextPage, structuredDataMap, structuredData: structuredDataProp, readingTimeEnabled = false, lastUpdatedEnabled = true, lastUpdatedLabel = "Last updated", lastUpdatedPosition = "footer", llmsTxtEnabled = false, descriptionMap, description, feedbackEnabled = false, feedbackQuestion, feedbackPlaceholder, feedbackRequireComment, feedbackPositiveLabel, feedbackNegativeLabel, feedbackSubmitLabel, feedbackSuccessMessage, feedbackErrorMessage, feedbackOnFeedback, analytics = false, children }) {
259
259
  const fdTocStyle = tocStyle === "directional" ? "clerk" : void 0;
260
260
  const [toc, setToc] = useState([]);
261
261
  const [titlePortalHost, setTitlePortalHost] = useState(null);
@@ -437,6 +437,15 @@ function DocsPageClient({ tocEnabled, tocStyle = "default", breadcrumbEnabled =
437
437
  const lastUpdatedLabelText = lastUpdatedLabel.trim();
438
438
  const lastUpdatedText = lastUpdatedLabelText && lastModified ? `${lastUpdatedLabelText} ${lastModified}` : lastModified;
439
439
  const showFooter = !isChangelogRoute && (!!githubFileUrl || showLastUpdatedInFooter || llmsTxtEnabled);
440
+ const localizedPreviousPage = previousPage?.url ? {
441
+ ...previousPage,
442
+ url: withLangInUrl(previousPage.url, activeLocale)
443
+ } : null;
444
+ const localizedNextPage = nextPage?.url ? {
445
+ ...nextPage,
446
+ url: withLangInUrl(nextPage.url, activeLocale)
447
+ } : null;
448
+ const showPageNavigation = !isChangelogRoute && (!!localizedPreviousPage || !!localizedNextPage);
440
449
  const readingTimeBlock = typeof resolvedReadingTime === "number" ? /* @__PURE__ */ jsxs("div", {
441
450
  className: "fd-page-meta not-prose",
442
451
  children: [/* @__PURE__ */ jsx("span", {
@@ -640,7 +649,54 @@ function DocsPageClient({ tocEnabled, tocStyle = "default", breadcrumbEnabled =
640
649
  children: lastUpdatedText
641
650
  }, "last-updated")
642
651
  ]
643
- }, "footer")
652
+ }, "footer"),
653
+ showPageNavigation && /* @__PURE__ */ jsxs("nav", {
654
+ className: "not-prose fd-page-nav",
655
+ "aria-label": "Page navigation",
656
+ children: [localizedPreviousPage ? /* @__PURE__ */ jsxs("a", {
657
+ href: localizedPreviousPage.url,
658
+ className: "fd-page-nav-card fd-page-nav-prev",
659
+ children: [/* @__PURE__ */ jsxs("span", {
660
+ className: "fd-page-nav-title fd-page-nav-title-prev",
661
+ children: [/* @__PURE__ */ jsx("svg", {
662
+ width: "14",
663
+ height: "14",
664
+ viewBox: "0 0 24 24",
665
+ fill: "none",
666
+ stroke: "currentColor",
667
+ strokeWidth: "2",
668
+ strokeLinecap: "round",
669
+ strokeLinejoin: "round",
670
+ "aria-hidden": "true",
671
+ children: /* @__PURE__ */ jsx("polyline", { points: "15 18 9 12 15 6" })
672
+ }), localizedPreviousPage.name]
673
+ }), /* @__PURE__ */ jsx("span", {
674
+ className: "fd-page-nav-description",
675
+ children: "Previous Page"
676
+ })]
677
+ }) : /* @__PURE__ */ jsx("div", { "aria-hidden": "true" }), localizedNextPage ? /* @__PURE__ */ jsxs("a", {
678
+ href: localizedNextPage.url,
679
+ className: "fd-page-nav-card fd-page-nav-next",
680
+ children: [/* @__PURE__ */ jsxs("span", {
681
+ className: "fd-page-nav-title fd-page-nav-title-next",
682
+ children: [localizedNextPage.name, /* @__PURE__ */ jsx("svg", {
683
+ width: "14",
684
+ height: "14",
685
+ viewBox: "0 0 24 24",
686
+ fill: "none",
687
+ stroke: "currentColor",
688
+ strokeWidth: "2",
689
+ strokeLinecap: "round",
690
+ strokeLinejoin: "round",
691
+ "aria-hidden": "true",
692
+ children: /* @__PURE__ */ jsx("polyline", { points: "9 18 15 12 9 6" })
693
+ })]
694
+ }), /* @__PURE__ */ jsx("span", {
695
+ className: "fd-page-nav-description",
696
+ children: "Next Page"
697
+ })]
698
+ }) : /* @__PURE__ */ jsx("div", { "aria-hidden": "true" })]
699
+ }, "page-navigation")
644
700
  ]
645
701
  }, "body")
646
702
  ]
@@ -31,6 +31,14 @@ interface TanstackDocsLayoutProps {
31
31
  description?: string;
32
32
  readingTime?: number | null;
33
33
  lastModified?: string;
34
+ previousPage?: {
35
+ name: string;
36
+ url: string;
37
+ } | null;
38
+ nextPage?: {
39
+ name: string;
40
+ url: string;
41
+ } | null;
34
42
  structuredData?: string;
35
43
  editOnGithubUrl?: string;
36
44
  children: ReactNode;
@@ -42,6 +50,8 @@ declare function TanstackDocsLayout({
42
50
  description,
43
51
  readingTime,
44
52
  lastModified,
53
+ previousPage,
54
+ nextPage,
45
55
  structuredData,
46
56
  editOnGithubUrl,
47
57
  children
@@ -223,7 +223,7 @@ function resolveFeedbackConfig(feedback) {
223
223
  function ForcedThemeScript({ theme }) {
224
224
  return /* @__PURE__ */ jsx("script", { dangerouslySetInnerHTML: { __html: `document.documentElement.classList.remove('light','dark');document.documentElement.classList.add('${theme === "light" || theme === "dark" ? theme : "light"}');` } });
225
225
  }
226
- function TanstackDocsLayout({ config, tree, locale, description, readingTime, lastModified, structuredData, editOnGithubUrl, children }) {
226
+ function TanstackDocsLayout({ config, tree, locale, description, readingTime, lastModified, previousPage, nextPage, structuredData, editOnGithubUrl, children }) {
227
227
  const tocConfig = config.theme?.ui?.layout?.toc;
228
228
  const tocEnabled = tocConfig?.enabled !== false;
229
229
  const tocStyle = tocConfig?.style;
@@ -379,6 +379,8 @@ function TanstackDocsLayout({ config, tree, locale, description, readingTime, la
379
379
  lastUpdatedLabel,
380
380
  lastUpdatedPosition,
381
381
  lastModified,
382
+ previousPage,
383
+ nextPage,
382
384
  readingTimeEnabled,
383
385
  readingTimeFormat: readingTimeOptions.format,
384
386
  readingTime: typeof readingTime === "number" ? readingTime : void 0,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farming-labs/theme",
3
- "version": "0.2.45",
3
+ "version": "0.2.47",
4
4
  "description": "Theme package for @farming-labs/docs — layout, provider, MDX components, and styles",
5
5
  "keywords": [
6
6
  "docs",
@@ -146,7 +146,7 @@
146
146
  "tsdown": "^0.20.3",
147
147
  "typescript": "^5.9.3",
148
148
  "vitest": "^4.1.8",
149
- "@farming-labs/docs": "0.2.45"
149
+ "@farming-labs/docs": "0.2.47"
150
150
  },
151
151
  "peerDependencies": {
152
152
  "@farming-labs/docs": ">=0.0.1",
@@ -8704,6 +8704,15 @@ html.dark #nd-docs-layout[data-fd-framework] pre.shiki {
8704
8704
  border-radius: var(--radius, 12px) var(--radius, 12px) 0 0;
8705
8705
  }
8706
8706
 
8707
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-title-text,
8708
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-title figcaption {
8709
+ min-width: 0;
8710
+ flex: 1;
8711
+ overflow: hidden;
8712
+ text-overflow: ellipsis;
8713
+ white-space: nowrap;
8714
+ }
8715
+
8707
8716
  #nd-docs-layout[data-fd-framework] .fd-codeblock-title + .fd-copy-btn ~ pre {
8708
8717
  border-top-left-radius: 0 !important;
8709
8718
  border-top-right-radius: 0 !important;
@@ -8714,6 +8723,21 @@ html.dark #nd-docs-layout[data-fd-framework] pre.shiki {
8714
8723
  border-top-right-radius: 0 !important;
8715
8724
  }
8716
8725
 
8726
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-actions {
8727
+ display: inline-flex;
8728
+ align-items: center;
8729
+ justify-content: center;
8730
+ flex: 0 0 auto;
8731
+ margin-left: auto;
8732
+ }
8733
+
8734
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-actions-floating {
8735
+ position: absolute;
8736
+ top: 4px;
8737
+ right: 4px;
8738
+ z-index: 2;
8739
+ }
8740
+
8717
8741
  #nd-docs-layout[data-fd-framework] .fd-copy-btn {
8718
8742
  position: absolute;
8719
8743
  top: 4px;
@@ -8737,6 +8761,18 @@ html.dark #nd-docs-layout[data-fd-framework] pre.shiki {
8737
8761
  background 0.15s;
8738
8762
  }
8739
8763
 
8764
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-actions .fd-copy-btn,
8765
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-actions-floating .fd-copy-btn,
8766
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-title .fd-copy-btn {
8767
+ position: static;
8768
+ width: 28px;
8769
+ height: 28px;
8770
+ }
8771
+
8772
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-title .fd-copy-btn {
8773
+ opacity: 1;
8774
+ }
8775
+
8740
8776
  #nd-docs-layout[data-fd-framework] .fd-codeblock:hover .fd-copy-btn {
8741
8777
  opacity: 1;
8742
8778
  }
@@ -8787,7 +8823,8 @@ html.dark #nd-docs-layout[data-fd-framework] pre.shiki {
8787
8823
  color: var(--color-fd-foreground);
8788
8824
  }
8789
8825
 
8790
- #nd-docs-layout[data-fd-framework] .fd-tab-trigger.fd-tab-active {
8826
+ #nd-docs-layout[data-fd-framework] .fd-tab-trigger.fd-tab-active,
8827
+ #nd-docs-layout[data-fd-framework] .fd-tab-trigger[data-state="active"] {
8791
8828
  color: var(--color-fd-foreground);
8792
8829
  font-weight: 600;
8793
8830
  border-bottom-color: var(--color-fd-primary);
@@ -8797,7 +8834,14 @@ html.dark #nd-docs-layout[data-fd-framework] pre.shiki {
8797
8834
  display: none;
8798
8835
  }
8799
8836
 
8800
- #nd-docs-layout[data-fd-framework] .fd-tab-panel-active {
8837
+ #nd-docs-layout[data-fd-framework] .fd-tab-panel[data-state="inactive"],
8838
+ #nd-docs-layout[data-fd-framework] .fd-code-group-panel[data-state="inactive"] {
8839
+ display: none;
8840
+ }
8841
+
8842
+ #nd-docs-layout[data-fd-framework] .fd-tab-panel-active,
8843
+ #nd-docs-layout[data-fd-framework] .fd-tab-panel[data-state="active"],
8844
+ #nd-docs-layout[data-fd-framework] .fd-code-group-panel[data-state="active"] {
8801
8845
  display: block;
8802
8846
  }
8803
8847
 
@@ -1704,6 +1704,15 @@ html.dark #nd-docs-layout[data-fd-framework] pre.shiki {
1704
1704
  border-radius: var(--radius, 12px) var(--radius, 12px) 0 0;
1705
1705
  }
1706
1706
 
1707
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-title-text,
1708
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-title figcaption {
1709
+ min-width: 0;
1710
+ flex: 1;
1711
+ overflow: hidden;
1712
+ text-overflow: ellipsis;
1713
+ white-space: nowrap;
1714
+ }
1715
+
1707
1716
  #nd-docs-layout[data-fd-framework] .fd-codeblock-title + .fd-copy-btn ~ pre {
1708
1717
  border-top-left-radius: 0 !important;
1709
1718
  border-top-right-radius: 0 !important;
@@ -1714,6 +1723,21 @@ html.dark #nd-docs-layout[data-fd-framework] pre.shiki {
1714
1723
  border-top-right-radius: 0 !important;
1715
1724
  }
1716
1725
 
1726
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-actions {
1727
+ display: inline-flex;
1728
+ align-items: center;
1729
+ justify-content: center;
1730
+ flex: 0 0 auto;
1731
+ margin-left: auto;
1732
+ }
1733
+
1734
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-actions-floating {
1735
+ position: absolute;
1736
+ top: 4px;
1737
+ right: 4px;
1738
+ z-index: 2;
1739
+ }
1740
+
1717
1741
  #nd-docs-layout[data-fd-framework] .fd-copy-btn {
1718
1742
  position: absolute;
1719
1743
  top: 4px;
@@ -1737,6 +1761,18 @@ html.dark #nd-docs-layout[data-fd-framework] pre.shiki {
1737
1761
  background 0.15s;
1738
1762
  }
1739
1763
 
1764
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-actions .fd-copy-btn,
1765
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-actions-floating .fd-copy-btn,
1766
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-title .fd-copy-btn {
1767
+ position: static;
1768
+ width: 28px;
1769
+ height: 28px;
1770
+ }
1771
+
1772
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-title .fd-copy-btn {
1773
+ opacity: 1;
1774
+ }
1775
+
1740
1776
  #nd-docs-layout[data-fd-framework] .fd-codeblock:hover .fd-copy-btn {
1741
1777
  opacity: 1;
1742
1778
  }
@@ -1789,7 +1825,8 @@ html.dark #nd-docs-layout[data-fd-framework] pre.shiki {
1789
1825
  color: var(--color-fd-foreground);
1790
1826
  }
1791
1827
 
1792
- #nd-docs-layout[data-fd-framework] .fd-tab-trigger.fd-tab-active {
1828
+ #nd-docs-layout[data-fd-framework] .fd-tab-trigger.fd-tab-active,
1829
+ #nd-docs-layout[data-fd-framework] .fd-tab-trigger[data-state="active"] {
1793
1830
  color: var(--color-fd-foreground);
1794
1831
  font-weight: 600;
1795
1832
  border-bottom-color: var(--color-fd-primary);
@@ -1799,7 +1836,14 @@ html.dark #nd-docs-layout[data-fd-framework] pre.shiki {
1799
1836
  display: none;
1800
1837
  }
1801
1838
 
1802
- #nd-docs-layout[data-fd-framework] .fd-tab-panel-active {
1839
+ #nd-docs-layout[data-fd-framework] .fd-tab-panel[data-state="inactive"],
1840
+ #nd-docs-layout[data-fd-framework] .fd-code-group-panel[data-state="inactive"] {
1841
+ display: none;
1842
+ }
1843
+
1844
+ #nd-docs-layout[data-fd-framework] .fd-tab-panel-active,
1845
+ #nd-docs-layout[data-fd-framework] .fd-tab-panel[data-state="active"],
1846
+ #nd-docs-layout[data-fd-framework] .fd-code-group-panel[data-state="active"] {
1803
1847
  display: block;
1804
1848
  }
1805
1849
 
@@ -603,6 +603,7 @@ aside button[class*="bg-fd-secondary"] {
603
603
  #nd-docs-layout article#nd-page figure.shiki figcaption,
604
604
  .fd-docs-content .fd-codeblock-title,
605
605
  #nd-docs-layout[data-fd-framework] .fd-codeblock-title {
606
+ box-sizing: border-box;
606
607
  min-height: 40px;
607
608
  padding: 8px 14px !important;
608
609
  border: 0 !important;
@@ -615,11 +616,47 @@ aside button[class*="bg-fd-secondary"] {
615
616
  line-height: 1.45;
616
617
  }
617
618
 
619
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-title {
620
+ height: 40px;
621
+ }
622
+
618
623
  .fd-docs-content figure.shiki:has(figcaption) > div:first-child::before,
619
624
  #nd-docs-layout article#nd-page figure.shiki:has(figcaption) > div:first-child::before {
620
625
  display: none;
621
626
  }
622
627
 
628
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-title .fd-codeblock-title-text {
629
+ min-height: 0;
630
+ padding: 0 14px;
631
+ border: 0 !important;
632
+ background: transparent !important;
633
+ line-height: inherit;
634
+ }
635
+
636
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-title .fd-codeblock-actions {
637
+ margin-inline-end: -8px;
638
+ }
639
+
640
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-title .fd-copy-btn {
641
+ width: 24px !important;
642
+ height: 24px !important;
643
+ border: 0 !important;
644
+ background: transparent !important;
645
+ box-shadow: none !important;
646
+ color: var(--color-fd-muted-foreground) !important;
647
+ opacity: 0 !important;
648
+ }
649
+
650
+ #nd-docs-layout[data-fd-framework] .fd-codeblock:hover .fd-codeblock-title .fd-copy-btn,
651
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-title .fd-copy-btn:focus-visible {
652
+ opacity: 1 !important;
653
+ }
654
+
655
+ #nd-docs-layout[data-fd-framework] .fd-codeblock-title .fd-copy-btn:hover {
656
+ background: transparent !important;
657
+ color: var(--color-fd-foreground) !important;
658
+ }
659
+
623
660
  .fd-docs-content figure.shiki > div[role="region"],
624
661
  #nd-docs-layout article#nd-page figure.shiki > div[role="region"],
625
662
  .fd-docs-content .fd-codeblock-content,
@@ -148,6 +148,38 @@ body:has(#nd-docs-layout) {
148
148
  0px var(--fd-sidebar-width, 260px) minmax(0, var(--fd-threadline-main-width))
149
149
  var(--fd-toc-width, 224px) 0px !important;
150
150
  }
151
+
152
+ #nd-docs-layout[data-fd-framework] {
153
+ width: var(--fd-threadline-frame-width) !important;
154
+ max-width: var(--fd-threadline-frame-width) !important;
155
+ margin-inline: auto !important;
156
+ grid-template-columns:
157
+ var(--fd-sidebar-width, 260px)
158
+ minmax(0, calc(var(--fd-threadline-main-width) + var(--fd-toc-width, 224px))) !important;
159
+ }
160
+
161
+ #nd-docs-layout[data-fd-framework] .fd-main {
162
+ width: calc(var(--fd-threadline-main-width) + var(--fd-toc-width, 224px)) !important;
163
+ }
164
+
165
+ #nd-docs-layout[data-fd-framework] .fd-sidebar {
166
+ top: var(--docs-header-height, 48px) !important;
167
+ height: calc(100dvh - var(--docs-header-height, 48px)) !important;
168
+ }
169
+
170
+ #nd-docs-layout[data-fd-framework] .fd-page {
171
+ justify-content: flex-start !important;
172
+ }
173
+
174
+ #nd-docs-layout[data-fd-framework] .fd-page:has(.fd-toc) {
175
+ grid-template-columns:
176
+ minmax(0, var(--fd-threadline-main-width))
177
+ var(--fd-toc-width, 224px) !important;
178
+ }
179
+
180
+ #nd-docs-layout[data-fd-framework] .fd-page:not(:has(.fd-toc)) {
181
+ grid-template-columns: minmax(0, var(--fd-threadline-main-width)) !important;
182
+ }
151
183
  }
152
184
 
153
185
  #nd-docs-layout > header,
@@ -454,6 +486,53 @@ aside#nd-sidebar-mobile a[data-active="true"]:hover,
454
486
  background: color-mix(in srgb, var(--muted-foreground) 28%, transparent) !important;
455
487
  }
456
488
 
489
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-callout {
490
+ align-items: flex-start !important;
491
+ gap: 0.5rem !important;
492
+ padding: 0.75rem 0.75rem 0.75rem 0.25rem !important;
493
+ overflow: visible !important;
494
+ font-size: 0.75rem !important;
495
+ line-height: 1.45 !important;
496
+ }
497
+
498
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-callout-indicator {
499
+ position: static !important;
500
+ width: 0.125rem !important;
501
+ min-width: 0.125rem !important;
502
+ height: auto !important;
503
+ min-height: 1.5rem !important;
504
+ align-self: stretch !important;
505
+ flex: 0 0 0.125rem !important;
506
+ border-radius: 0.25rem !important;
507
+ background: color-mix(in srgb, var(--muted-foreground) 28%, transparent) !important;
508
+ }
509
+
510
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-callout-icon {
511
+ display: none !important;
512
+ }
513
+
514
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-callout-content {
515
+ min-width: 0;
516
+ flex: 1;
517
+ color: var(--foreground) !important;
518
+ font-size: 0.875rem !important;
519
+ line-height: 1.7 !important;
520
+ }
521
+
522
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-callout-title,
523
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-callout-content > p {
524
+ display: inline !important;
525
+ margin: 0 !important;
526
+ color: inherit !important;
527
+ font-size: inherit !important;
528
+ line-height: inherit !important;
529
+ }
530
+
531
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-callout-title {
532
+ margin-inline-end: 0.375rem !important;
533
+ font-weight: 600 !important;
534
+ }
535
+
457
536
  .fd-docs-content :not(pre) > code,
458
537
  .prose :not(pre) > code {
459
538
  border: 0 !important;
@@ -491,6 +570,157 @@ figure.shiki > div:first-child:has(figcaption),
491
570
  font-weight: 500 !important;
492
571
  }
493
572
 
573
+ #nd-docs-layout[data-fd-framework] .fd-codeblock.fd-codeblock--titled {
574
+ border: 0 !important;
575
+ border-radius: 0.75rem !important;
576
+ background: var(--fd-assistant-code-bg) !important;
577
+ background-color: var(--fd-assistant-code-bg) !important;
578
+ overflow: hidden;
579
+ }
580
+
581
+ #nd-docs-layout[data-fd-framework] .fd-codeblock.fd-codeblock--titled .fd-codeblock-title {
582
+ position: relative;
583
+ height: 2.375rem;
584
+ min-height: 2.375rem !important;
585
+ padding: 0 1rem !important;
586
+ border: 0 !important;
587
+ border-radius: 0 !important;
588
+ background: transparent !important;
589
+ color: var(--muted-foreground) !important;
590
+ }
591
+
592
+ #nd-docs-layout[data-fd-framework] .fd-codeblock.fd-codeblock--titled .fd-codeblock-title::before {
593
+ content: "";
594
+ position: absolute;
595
+ inset: 0;
596
+ background: repeating-linear-gradient(
597
+ -45deg,
598
+ currentColor,
599
+ currentColor 1px,
600
+ transparent 1px,
601
+ transparent 6px
602
+ );
603
+ opacity: 0.03;
604
+ pointer-events: none;
605
+ }
606
+
607
+ :is(html.dark, body.dark, .dark)
608
+ #nd-docs-layout[data-fd-framework]
609
+ .fd-codeblock.fd-codeblock--titled
610
+ .fd-codeblock-title::before {
611
+ opacity: 0.05;
612
+ }
613
+
614
+ #nd-docs-layout[data-fd-framework] .fd-codeblock.fd-codeblock--titled .fd-codeblock-content {
615
+ padding: 0.875rem 0 !important;
616
+ background: transparent !important;
617
+ font-size: 0.8125rem !important;
618
+ line-height: 1.65 !important;
619
+ overflow: auto;
620
+ }
621
+
622
+ #nd-docs-layout[data-fd-framework] .fd-codeblock.fd-codeblock--titled pre {
623
+ margin: 0 !important;
624
+ padding: 0.15rem 0.5rem !important;
625
+ border: 0 !important;
626
+ border-radius: 0 !important;
627
+ background: transparent !important;
628
+ background-color: transparent !important;
629
+ font-size: 0.8125rem !important;
630
+ line-height: 1.65 !important;
631
+ overflow: visible;
632
+ }
633
+
634
+ #nd-docs-layout[data-fd-framework] .fd-codeblock.fd-codeblock--titled.shiki {
635
+ background: var(--fd-assistant-code-bg) !important;
636
+ background-color: var(--fd-assistant-code-bg) !important;
637
+ }
638
+
639
+ :is(html.dark, body.dark, .dark)
640
+ #nd-docs-layout[data-fd-framework]
641
+ .fd-codeblock.fd-codeblock--titled.shiki {
642
+ background: var(--fd-assistant-code-bg) !important;
643
+ background-color: var(--fd-assistant-code-bg) !important;
644
+ }
645
+
646
+ #nd-docs-layout[data-fd-framework] .fd-codeblock.fd-codeblock--titled pre.shiki,
647
+ :is(html.dark, body.dark, .dark)
648
+ #nd-docs-layout[data-fd-framework]
649
+ .fd-codeblock.fd-codeblock--titled
650
+ pre.shiki {
651
+ background: transparent !important;
652
+ background-color: transparent !important;
653
+ }
654
+
655
+ #nd-docs-layout[data-fd-framework] .fd-codeblock.fd-codeblock--titled pre code {
656
+ font-size: inherit !important;
657
+ line-height: inherit !important;
658
+ }
659
+
660
+ #nd-docs-layout[data-fd-framework] .fd-codeblock:not(.fd-codeblock--titled) {
661
+ background: var(--fd-assistant-code-bg) !important;
662
+ background-color: var(--fd-assistant-code-bg) !important;
663
+ }
664
+
665
+ :is(html.dark, body.dark, .dark)
666
+ #nd-docs-layout[data-fd-framework]
667
+ .fd-codeblock:not(.fd-codeblock--titled) {
668
+ background: var(--fd-assistant-code-bg) !important;
669
+ background-color: var(--fd-assistant-code-bg) !important;
670
+ }
671
+
672
+ #nd-docs-layout[data-fd-framework] .fd-codeblock:not(.fd-codeblock--titled) .fd-codeblock-content {
673
+ padding: 0.875rem 0 !important;
674
+ background: transparent !important;
675
+ font-size: 0.8125rem !important;
676
+ line-height: 1.65 !important;
677
+ overflow: auto;
678
+ }
679
+
680
+ #nd-docs-layout[data-fd-framework] .fd-codeblock:not(.fd-codeblock--titled) pre {
681
+ margin: 0 !important;
682
+ padding: 0.15rem 0.5rem !important;
683
+ border: 0 !important;
684
+ border-radius: 0 !important;
685
+ background: transparent !important;
686
+ background-color: transparent !important;
687
+ font-size: 0.8125rem !important;
688
+ line-height: 1.65 !important;
689
+ overflow: visible;
690
+ }
691
+
692
+ #nd-docs-layout[data-fd-framework] .fd-codeblock:not(.fd-codeblock--titled) pre.shiki,
693
+ :is(html.dark, body.dark, .dark)
694
+ #nd-docs-layout[data-fd-framework]
695
+ .fd-codeblock:not(.fd-codeblock--titled)
696
+ pre.shiki {
697
+ background: transparent !important;
698
+ background-color: transparent !important;
699
+ }
700
+
701
+ #nd-docs-layout[data-fd-framework] .fd-codeblock:not(.fd-codeblock--titled) pre code {
702
+ font-size: inherit !important;
703
+ line-height: inherit !important;
704
+ }
705
+
706
+ #nd-docs-layout[data-fd-framework] .fd-codeblock.fd-codeblock--titled .fd-codeblock-actions {
707
+ margin-inline-end: -0.5rem;
708
+ }
709
+
710
+ #nd-docs-layout[data-fd-framework] .fd-codeblock.fd-codeblock--titled .fd-codeblock-title .fd-copy-btn {
711
+ width: 1.5rem;
712
+ height: 1.5rem;
713
+ border: 0 !important;
714
+ background: transparent !important;
715
+ color: var(--muted-foreground) !important;
716
+ opacity: 0;
717
+ }
718
+
719
+ #nd-docs-layout[data-fd-framework] .fd-codeblock.fd-codeblock--titled:hover .fd-codeblock-title .fd-copy-btn,
720
+ #nd-docs-layout[data-fd-framework] .fd-codeblock.fd-codeblock--titled .fd-codeblock-title .fd-copy-btn:focus-visible {
721
+ opacity: 1;
722
+ }
723
+
494
724
  figure.shiki > div[role="region"] {
495
725
  padding-top: 0.875rem !important;
496
726
  padding-bottom: 0.875rem !important;
@@ -572,6 +802,16 @@ figure.shiki button[aria-label*="Copy"]:hover {
572
802
  background: transparent !important;
573
803
  }
574
804
 
805
+ #nd-docs-layout[data-fd-framework] .fd-page-body th {
806
+ font-size: inherit !important;
807
+ line-height: inherit !important;
808
+ }
809
+
810
+ #nd-docs-layout[data-fd-framework] .fd-page-body td {
811
+ font-size: 0.875rem !important;
812
+ line-height: 1.7 !important;
813
+ }
814
+
575
815
  .fd-actions-toc-portal {
576
816
  display: none;
577
817
  }
@@ -849,6 +1089,52 @@ figure.shiki button[aria-label*="Copy"]:hover {
849
1089
  padding-top: 0.25rem !important;
850
1090
  }
851
1091
 
1092
+ @media (min-width: 1280px) {
1093
+ #nd-docs-layout[data-fd-framework] .fd-toc {
1094
+ position: sticky !important;
1095
+ top: var(--docs-header-height, 48px) !important;
1096
+ width: var(--fd-toc-width, 224px) !important;
1097
+ height: calc(100dvh - var(--docs-header-height, 48px)) !important;
1098
+ padding: 3rem 1rem 0.5rem 0 !important;
1099
+ overflow-y: auto;
1100
+ }
1101
+
1102
+ #nd-docs-layout[data-fd-framework] .fd-toc-title {
1103
+ display: inline-flex !important;
1104
+ align-items: center !important;
1105
+ gap: 0.375rem !important;
1106
+ margin: 0 0 0.75rem !important;
1107
+ color: var(--muted-foreground) !important;
1108
+ font-size: 0.75rem !important;
1109
+ font-weight: 500 !important;
1110
+ line-height: 1.45 !important;
1111
+ }
1112
+
1113
+ #nd-docs-layout[data-fd-framework] .fd-toc-title svg {
1114
+ width: 0.875rem !important;
1115
+ height: 0.875rem !important;
1116
+ opacity: 1 !important;
1117
+ }
1118
+
1119
+ #nd-docs-layout[data-fd-framework] .fd-toc-list {
1120
+ border-left: 0 !important;
1121
+ }
1122
+
1123
+ #nd-docs-layout[data-fd-framework] .fd-toc-link {
1124
+ margin: 0 !important;
1125
+ padding: 0.375rem 0 0.375rem 0.75rem !important;
1126
+ border-left: 0 !important;
1127
+ color: var(--muted-foreground) !important;
1128
+ font-size: 0.875rem !important;
1129
+ line-height: 1.7 !important;
1130
+ }
1131
+
1132
+ #nd-docs-layout[data-fd-framework] .fd-toc-link:hover,
1133
+ #nd-docs-layout[data-fd-framework] .fd-toc-link-active {
1134
+ color: var(--foreground) !important;
1135
+ }
1136
+ }
1137
+
852
1138
  .fd-page-nav {
853
1139
  display: grid !important;
854
1140
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
@@ -1113,6 +1399,12 @@ figure.shiki button[aria-label*="Copy"]:hover {
1113
1399
  display: none !important;
1114
1400
  }
1115
1401
 
1402
+ #nd-docs-layout[data-fd-framework] .fd-page-footer {
1403
+ display: block !important;
1404
+ margin-top: auto !important;
1405
+ padding-top: 1.5rem !important;
1406
+ }
1407
+
1116
1408
  @media (min-width: 1280px) {
1117
1409
  .fd-actions-toc-host {
1118
1410
  display: block;
@@ -1231,6 +1523,61 @@ figure.shiki button[aria-label*="Copy"]:hover {
1231
1523
  box-shadow: none !important;
1232
1524
  }
1233
1525
 
1526
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-tabs {
1527
+ margin: 1rem 0 !important;
1528
+ padding: 0 !important;
1529
+ border: 0 !important;
1530
+ border-radius: 0.75rem !important;
1531
+ background: var(--fd-assistant-code-bg) !important;
1532
+ box-shadow: none !important;
1533
+ overflow: hidden;
1534
+ }
1535
+
1536
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-tabs-list {
1537
+ min-height: 2.3125rem !important;
1538
+ align-items: center !important;
1539
+ gap: 0 !important;
1540
+ padding: 0.25rem !important;
1541
+ border: 0 !important;
1542
+ border-radius: 0.625rem !important;
1543
+ background: var(--fd-assistant-code-bg) !important;
1544
+ overflow-x: auto;
1545
+ }
1546
+
1547
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-tab-trigger {
1548
+ min-height: 1.8125rem !important;
1549
+ padding: 0.375rem 0.5rem !important;
1550
+ border: 0 !important;
1551
+ border-radius: 0.5rem !important;
1552
+ color: var(--muted-foreground) !important;
1553
+ font-size: 0.75rem !important;
1554
+ font-weight: 500 !important;
1555
+ line-height: 1.45 !important;
1556
+ }
1557
+
1558
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-tab-trigger.fd-tab-active,
1559
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-tab-trigger[data-state="active"] {
1560
+ background: var(--background) !important;
1561
+ color: var(--foreground) !important;
1562
+ box-shadow: none !important;
1563
+ }
1564
+
1565
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-tab-panel,
1566
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-code-group-panel {
1567
+ margin: 0 !important;
1568
+ padding: 0 !important;
1569
+ background: transparent !important;
1570
+ }
1571
+
1572
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-tabs .fd-codeblock {
1573
+ margin: 0 !important;
1574
+ border-radius: 0 0 0.75rem 0.75rem !important;
1575
+ }
1576
+
1577
+ #nd-docs-layout[data-fd-framework] .fd-page-body .fd-tabs .fd-codeblock pre {
1578
+ border-radius: 0 !important;
1579
+ }
1580
+
1234
1581
  .fd-feedback-submit,
1235
1582
  .fd-ai-send-btn,
1236
1583
  .fd-ai-fm-send-btn,