Skip to content

Commit d204b23

Browse files
RDoc-3524 Add ContentFrame and Panel components
1 parent 1210c54 commit d204b23

File tree

7 files changed

+365
-6
lines changed

7 files changed

+365
-6
lines changed

docusaurus.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ const config: Config = {
197197
copyright: `Copyright © ${new Date().getFullYear()} RavenDB`,
198198
},
199199
prism: {
200-
theme: prismThemes.github,
200+
theme: prismThemes.nightOwlLight,
201201
darkTheme: prismThemes.dracula,
202202
additionalLanguages: ["csharp", "java", "php"],
203203
},

src/components/ContentFrame.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import clsx from "clsx";
2+
import React from "react";
3+
4+
export type ContentFrameProps = {
5+
children: React.ReactNode;
6+
className?: string;
7+
flush?: boolean;
8+
};
9+
10+
export function ContentFrame(props: ContentFrameProps) {
11+
const { children, className, flush } = props;
12+
13+
return (
14+
<div className={clsx("content-frame", flush ? "" : "my-4", className)}>
15+
{children}
16+
</div>
17+
);
18+
}
19+
20+
export default ContentFrame;

src/components/LanguageSwitcher.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ export default function LanguageSwitcher({
3939
onClick={() => setLanguage(lang.value)}
4040
className={clsx(
4141
"px-3 py-1.5 rounded-md border text-sm transition-colors cursor-pointer",
42-
"border-gray-300 text-gray-500 hover:bg-black/5 hover:border-gray-500 hover:text-gray-600",
43-
"dark:text-gray-300 dark:border-gray-600 dark:hover:text-gray-200 dark:hover:border-gray-400 dark:hover:bg-white/5",
42+
"border-black/10 text-gray-500 hover:bg-black/5 hover:border-black-15 hover:text-gray-600",
43+
"dark:text-gray-300 dark:border-white/10 dark:hover:text-gray-200 dark:hover:border-white-15 dark:hover:bg-white/5",
4444
)}
4545
style={
4646
isActive

src/components/Panel.tsx

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import clsx from "clsx";
2+
import React from "react";
3+
import Heading from "@theme/Heading";
4+
5+
export type PanelProps = {
6+
children: React.ReactNode;
7+
className?: string;
8+
flush?: boolean;
9+
heading: string;
10+
headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;
11+
};
12+
13+
export function Panel(props: PanelProps) {
14+
const { children, className, flush, heading, headingLevel = 2 } = props;
15+
const headingTag = (`h${headingLevel}` as any);
16+
17+
return (
18+
<section className={clsx("panel", flush ? "" : "my-4", className)}>
19+
<Heading as={headingTag} className="panel__heading">{heading}</Heading>
20+
<div className="panel__body">
21+
{children}
22+
</div>
23+
</section>
24+
);
25+
}
26+
27+
export default Panel;

src/css/custom.css

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
--font-mono:
3232
"JetBrains Mono", SFMono-Regular, Menlo, Monaco, Consolas,
3333
"Liberation Mono", "Courier New", monospace;
34+
--ifm-pre-background: color-mix(in oklab, var(--ifm-background-surface-color) 72%, #FFF 28%);
3435
--anchor-icon: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+PHN2ZyB2aWV3Qm94PSIwIDAgMjU2IDI1NiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI1NiIgd2lkdGg9IjI1NiIvPjxwYXRoIGQ9Ik0yMTAsNDZhNTEuOCw1MS44LDAsMCwwLTczLjUsMEwxMTYuNyw2NS44QTgsOCwwLDAsMCwxMjgsNzcuMWwxOS44LTE5LjhhMzYuMSwzNi4xLDAsMCwxLDUwLjksMCwzNS45LDM1LjksMCwwLDEsMCw1MC45bC0yOC4zLDI4LjNhMzYuMSwzNi4xLDAsMCwxLTUwLjksMCw4LDgsMCwxLDAtMTEuMywxMS4zLDUyLDUyLDAsMCwwLDczLjUsMEwyMTAsMTE5LjVBNTEuOCw1MS44LDAsMCwwLDIxMCw0NloiLz48cGF0aCBkPSJNMTI4LDE3OC45bC0xOS44LDE5LjhhMzYsMzYsMCwwLDEtNTAuOS01MC45bDI4LjMtMjguM2EzNi4xLDM2LjEsMCwwLDEsNTAuOSwwLDgsOCwwLDAsMCwxMS4zLTExLjMsNTIsNTIsMCwwLDAtNzMuNSwwTDQ2LDEzNi41QTUyLDUyLDAsMSwwLDExOS41LDIxMGwxOS44LTE5LjhBOCw4LDAsMCwwLDEyOCwxNzguOVoiLz48L3N2Zz4=");
3536
--docsearch-searchbox-focus-background: var(--ifm-background-color) !important;
3637
--docsearch-hit-color: var(--ifm-color-primary-lightest) !important;
@@ -47,9 +48,18 @@
4748
--ifm-color-primary-lightest: #86baf2;
4849
--ifm-navbar-background-color: var(--ifm-background-color);
4950
--ifm-background-surface-color: #222225;
51+
--ifm-pre-background: color-mix(in oklab, var(--ifm-background-surface-color) 72%, #000 28%);
5052
--anchor-icon: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2Ij4KIDxnPgogIDx0aXRsZT5iYWNrZ3JvdW5kPC90aXRsZT4KICA8cmVjdCBmaWxsPSJub25lIiBpZD0iY2FudmFzX2JhY2tncm91bmQiIGhlaWdodD0iNDAyIiB3aWR0aD0iNTgyIiB5PSItMSIgeD0iLTEiLz4KIDwvZz4KIDxnPgogIDx0aXRsZT5MYXllciAxPC90aXRsZT4KICA8cmVjdCBpZD0ic3ZnXzEiIHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSJub25lIi8+CiAgPHBhdGggZmlsbD0iI2ZmZmZmZiIgaWQ9InN2Z18yIiBkPSJtMjEwLDQ2YTUxLjgsNTEuOCAwIDAgMCAtNzMuNSwwbC0xOS44LDE5LjhhOCw4IDAgMCAwIDExLjMsMTEuM2wxOS44LC0xOS44YTM2LjEsMzYuMSAwIDAgMSA1MC45LDBhMzUuOSwzNS45IDAgMCAxIDAsNTAuOWwtMjguMywyOC4zYTM2LjEsMzYuMSAwIDAgMSAtNTAuOSwwYTgsOCAwIDEgMCAtMTEuMywxMS4zYTUyLDUyIDAgMCAwIDczLjUsMGwyOC4zLC0yOC4zYTUxLjgsNTEuOCAwIDAgMCAwLC03My41eiIvPgogIDxwYXRoIGZpbGw9IiNmZmZmZmYiIGlkPSJzdmdfMyIgZD0ibTEyOCwxNzguOWwtMTkuOCwxOS44YTM2LDM2IDAgMCAxIC01MC45LC01MC45bDI4LjMsLTI4LjNhMzYuMSwzNi4xIDAgMCAxIDUwLjksMGE4LDggMCAwIDAgMTEuMywtMTEuM2E1Miw1MiAwIDAgMCAtNzMuNSwwbC0yOC4zLDI4LjNhNTIsNTIgMCAxIDAgNzMuNSw3My41bDE5LjgsLTE5LjhhOCw4IDAgMCAwIC0xMS4zLC0xMS4zeiIvPgogPC9nPgo8L3N2Zz4= ");
5153
}
5254

55+
/* Ensure code blocks use the harmonized background even if theme overrides */
56+
.theme-code-block,
57+
.codeBlockContainer,
58+
pre[class*="language-"] {
59+
--prism-background-color: var(--ifm-pre-background) !important;
60+
background-color: var(--prism-background-color) !important;
61+
}
62+
5363
/* Custom search variables */
5464
[data-theme="light"] .DocSearch {
5565
--docsearch-primary-color: var(--ifm-color-primary);
@@ -331,3 +341,71 @@ code {
331341
[class^="tabItem"]:has(+ *), .theme-admonition:has(+ *) {
332342
@apply mb-4;
333343
}
344+
345+
/* Remove trailing margin from the last element inside the last div of an admonition */
346+
.theme-admonition > div:last-child > :last-child {
347+
@apply mb-0;
348+
}
349+
350+
/* Frames for documentation content */
351+
.content-frame {
352+
@apply rounded-md border border-black/10 dark:border-white/10 p-4;
353+
background-color: color-mix(in oklab, var(--ifm-background-surface-color) 85%, transparent);
354+
}
355+
356+
.content-frame > :first-child {
357+
@apply mt-0;
358+
}
359+
360+
.content-frame > :last-child {
361+
@apply mb-0;
362+
}
363+
364+
.content-frame pre,
365+
.content-frame .theme-code-block {
366+
@apply my-0;
367+
}
368+
369+
.panel {
370+
@apply rounded-lg border border-black/10 dark:border-white/10;
371+
}
372+
373+
.panel__body {
374+
padding: 1.5rem;
375+
background-color: color-mix(in oklab, var(--ifm-background-surface-color) 30%, transparent);
376+
}
377+
378+
.panel__body > :first-child {
379+
@apply mt-0;
380+
}
381+
382+
.panel__body > :last-child {
383+
@apply mb-0;
384+
}
385+
386+
.panel__body pre,
387+
.panel__body .theme-code-block {
388+
@apply my-0;
389+
}
390+
391+
.panel__heading {
392+
@apply rounded-t-lg border-b border-black/10 dark:border-white/10 m-0;
393+
padding: 0.875rem 1rem;
394+
}
395+
396+
.panel__heading {
397+
background-color: var(--ifm-background-surface-color);
398+
}
399+
400+
.theme-code-block {
401+
@apply border border-black/10 dark:border-white/10;
402+
}
403+
404+
/* Remove borders for code blocks when placed inside tabs container */
405+
.tabs-container .theme-code-block,
406+
.tabs-container .codeBlockContainer,
407+
.tabs-container pre[class*="language-"] {
408+
@apply !border-0;
409+
border: 0 !important;
410+
box-shadow: none !important;
411+
}

src/theme/Tabs/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ function TabList({
6767
role="tablist"
6868
aria-orientation="horizontal"
6969
className={clsx(
70-
"!my-0 !px-4 flex gap-2 bg-ifm-background-surface",
70+
"!my-0 !px-4 flex gap-2 bg-black/6 dark:bg-white/3 border-b border-black/10 dark:border-white/10",
7171
{
7272
"tabs--block": block,
7373
},
@@ -128,7 +128,7 @@ function TabContent({
128128
});
129129
}
130130
return (
131-
<div className="p-4 bg-ifm-background">
131+
<div className="p-4 bg-pre-background">
132132
{childTabs.map((tabItem, i) =>
133133
cloneElement(tabItem, {
134134
key: i,
@@ -144,7 +144,7 @@ function TabsComponent(props: Props): ReactNode {
144144
return (
145145
<div
146146
className={clsx(
147-
"tabs-container overflow-hidden rounded-lg border-gray-300 dark:border-gray-700 border mb-6",
147+
"tabs-container overflow-hidden rounded-lg border-black/10 dark:border-white/10 border mb-6",
148148
styles.tabList,
149149
)}
150150
>

0 commit comments

Comments
 (0)