polen 0.10.0-next.10 → 0.10.0-next.11

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.
@@ -0,0 +1,2 @@
1
+ export declare const CodeBlockEnhancer: () => null;
2
+ //# sourceMappingURL=CodeBlockEnhancer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeBlockEnhancer.d.ts","sourceRoot":"","sources":["../../../src/template/components/CodeBlockEnhancer.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,iBAAiB,YA2L7B,CAAA"}
@@ -0,0 +1,175 @@
1
+ import { useEffect } from 'react';
2
+ import { useLocation } from 'react-router';
3
+ import { useTheme } from "../contexts/ThemeContext.jsx";
4
+ export const CodeBlockEnhancer = () => {
5
+ const { appearance } = useTheme();
6
+ const location = useLocation();
7
+ useEffect(() => {
8
+ // Add styles for code block enhancements
9
+ const styleId = 'code-block-enhancer-styles';
10
+ let styleElement = document.getElementById(styleId);
11
+ if (!styleElement) {
12
+ styleElement = document.createElement('style');
13
+ styleElement.id = styleId;
14
+ document.head.appendChild(styleElement);
15
+ }
16
+ styleElement.textContent = `
17
+ /* Enhanced code block styles */
18
+ pre.shiki {
19
+ position: relative;
20
+ }
21
+
22
+ pre.shiki[data-title] {
23
+ margin-top: 0;
24
+ border-radius: 0 0 8px 8px !important;
25
+ }
26
+
27
+ pre.shiki[data-title]::before {
28
+ content: attr(data-title);
29
+ display: block;
30
+ position: absolute;
31
+ top: -2.5rem;
32
+ left: -1px;
33
+ right: -1px;
34
+ background-color: ${appearance === 'dark' ? '#2a2b3d' : '#f3f4f6'};
35
+ border: 1px solid var(--gray-4);
36
+ border-bottom: 1px solid ${appearance === 'dark' ? '#3a3b4d' : '#e5e7eb'};
37
+ border-radius: 8px 8px 0 0;
38
+ padding: 0.5rem 1rem;
39
+ font-size: 0.875rem;
40
+ font-weight: 500;
41
+ color: var(--gray-11);
42
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
43
+ }
44
+
45
+ pre.shiki[data-title][data-language]::after {
46
+ content: attr(data-language);
47
+ position: absolute;
48
+ top: -2rem;
49
+ right: 1rem;
50
+ font-size: 0.75rem;
51
+ color: var(--gray-9);
52
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
53
+ }
54
+
55
+ .code-block-copy {
56
+ position: absolute;
57
+ top: 0.5rem;
58
+ right: 0.5rem;
59
+ padding: 0.25rem 0.5rem;
60
+ font-size: 0.75rem;
61
+ cursor: pointer;
62
+ border: none;
63
+ border-radius: 4px;
64
+ transition: all 0.2s;
65
+ background-color: ${appearance === 'dark' ? 'rgba(0, 0, 0, 0.5)' : 'rgba(255, 255, 255, 0.8)'};
66
+ backdrop-filter: blur(4px);
67
+ color: ${appearance === 'dark' ? '#fff' : '#000'};
68
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
69
+ }
70
+
71
+ pre.shiki[data-title] .code-block-copy {
72
+ top: -2rem;
73
+ right: 6rem;
74
+ background-color: transparent;
75
+ color: var(--gray-11);
76
+ }
77
+
78
+ .code-block-copy:hover {
79
+ background-color: var(--accent-9) !important;
80
+ color: white !important;
81
+ }
82
+
83
+ .code-block-copy[data-copied="true"] {
84
+ background-color: var(--green-9) !important;
85
+ color: white !important;
86
+ }
87
+ `;
88
+ return () => {
89
+ if (styleElement && styleElement.parentNode) {
90
+ styleElement.parentNode.removeChild(styleElement);
91
+ }
92
+ };
93
+ }, [appearance]);
94
+ useEffect(() => {
95
+ const enhanceCodeBlocks = () => {
96
+ const codeBlocks = document.querySelectorAll('pre.shiki:not([data-enhanced])');
97
+ codeBlocks.forEach((block) => {
98
+ const preElement = block;
99
+ preElement.setAttribute('data-enhanced', 'true');
100
+ // Get language from class name
101
+ const classes = preElement.className.split(' ');
102
+ const language = classes.find(c => c !== 'shiki' && c !== 'shiki-light' && c !== 'shiki-dark') || 'text';
103
+ // Check for title in first line
104
+ const codeElement = preElement.querySelector('code');
105
+ if (!codeElement)
106
+ return;
107
+ const firstLine = codeElement.textContent?.split('\n')[0] || '';
108
+ let title = '';
109
+ const titleMatch = firstLine.match(/^\/\/\s*title:\s*(.+)$/i);
110
+ if (titleMatch && titleMatch[1]) {
111
+ title = titleMatch[1];
112
+ // Remove title line from display
113
+ const firstLineElement = codeElement.querySelector('span.line');
114
+ if (firstLineElement) {
115
+ firstLineElement.style.display = 'none';
116
+ }
117
+ // Set data attributes for CSS
118
+ preElement.setAttribute('data-title', title);
119
+ preElement.setAttribute('data-language', language);
120
+ preElement.style.marginTop = '3rem';
121
+ }
122
+ // Create copy button
123
+ const copyButton = document.createElement('button');
124
+ copyButton.className = 'code-block-copy';
125
+ copyButton.textContent = 'Copy';
126
+ copyButton.setAttribute('data-copied', 'false');
127
+ copyButton.onclick = async (e) => {
128
+ e.preventDefault();
129
+ e.stopPropagation();
130
+ // Get clean code without the title line
131
+ const code = codeElement.textContent || '';
132
+ const cleanCode = title ? code.split('\n').slice(1).join('\n') : code;
133
+ try {
134
+ await navigator.clipboard.writeText(cleanCode);
135
+ copyButton.textContent = 'Copied!';
136
+ copyButton.setAttribute('data-copied', 'true');
137
+ setTimeout(() => {
138
+ copyButton.textContent = 'Copy';
139
+ copyButton.setAttribute('data-copied', 'false');
140
+ }, 2000);
141
+ }
142
+ catch (err) {
143
+ console.error('Failed to copy:', err);
144
+ }
145
+ };
146
+ // Append copy button directly to pre element
147
+ preElement.appendChild(copyButton);
148
+ });
149
+ };
150
+ // Small delay to ensure DOM is ready
151
+ const timeoutId = setTimeout(enhanceCodeBlocks, 100);
152
+ return () => {
153
+ clearTimeout(timeoutId);
154
+ // Clean up enhanced code blocks
155
+ document.querySelectorAll('pre.shiki[data-enhanced]').forEach(block => {
156
+ block.removeAttribute('data-enhanced');
157
+ block.removeAttribute('data-title');
158
+ block.removeAttribute('data-language');
159
+ const copyButton = block.querySelector('.code-block-copy');
160
+ if (copyButton) {
161
+ copyButton.remove();
162
+ }
163
+ // Restore hidden title lines
164
+ const firstLine = block.querySelector('span.line');
165
+ if (firstLine && firstLine.style.display === 'none') {
166
+ firstLine.style.display = '';
167
+ }
168
+ // Reset margin
169
+ block.style.marginTop = '';
170
+ });
171
+ };
172
+ }, [location.pathname]); // Re-run when route changes
173
+ return null;
174
+ };
175
+ //# sourceMappingURL=CodeBlockEnhancer.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeBlockEnhancer.jsx","sourceRoot":"","sources":["../../../src/template/components/CodeBlockEnhancer.tsx"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { useLocation } from 'react-router';
4
4
  import { getPathActiveReport, Link } from "../Link.jsx";
5
5
  export const Items = ({ items }) => {
6
6
  return (<Flex direction='column' gap='2px'>
7
- {items.map((item) => (<Item key={item.pathExp} item={item}/>))}
7
+ {items.map((item, index) => (<Item key={`${item.pathExp}-${index}`} item={item}/>))}
8
8
  </Flex>);
9
9
  };
10
10
  //
@@ -74,7 +74,7 @@ const LinkedSection = ({ section }) => {
74
74
  {<Flex direction='column' gap='2' id={`section-${section.pathExp.replace(/\//g, '-')}`} role='group' ml='5' py='2px' style={{
75
75
  borderLeft: `1px solid var(--gray-5)`,
76
76
  }}>
77
- {section.links.map((link) => (<SectionLink key={link.pathExp} link={link}/>))}
77
+ {section.links.map((link, index) => (<SectionLink key={`${link.pathExp}-${index}`} link={link}/>))}
78
78
  </Flex>}
79
79
  </Box>);
80
80
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SidebarItem.jsx","sourceRoot":"","sources":["../../../../src/template/components/sidebar/SidebarItem.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SidebarItem.jsx","sourceRoot":"","sources":["../../../../src/template/components/sidebar/SidebarItem.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../../src/template/routes/reference.tsx"],"names":[],"mappings":"AAiCA,eAAO,MAAM,SAAS;;;;;;;;;;CAKpB,CAAA"}
1
+ {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../../src/template/routes/reference.tsx"],"names":[],"mappings":"AA6BA,eAAO,MAAM,SAAS;;;;;;;;;;CAKpB,CAAA"}
@@ -1,10 +1,9 @@
1
1
  import { createRoute } from '#lib/react-router-aid/react-router-aid';
2
2
  import { createLoader, useLoaderData } from '#lib/react-router-loader/react-router-loader';
3
- import { Container, Flex } from '@radix-ui/themes';
3
+ import { Box } from '@radix-ui/themes';
4
4
  import { Outlet } from 'react-router';
5
5
  import PROJECT_DATA from 'virtual:polen/project/data.jsonsuper';
6
6
  import { MissingSchema } from '../components/MissingSchema.jsx';
7
- import { TypeIndex } from '../components/TypeIndex.jsx';
8
7
  import { reference$type } from './reference.$type.jsx';
9
8
  const loader = createLoader(() => {
10
9
  const latestSchemaVersion = PROJECT_DATA.schema?.versions[0].after ?? null;
@@ -17,12 +16,9 @@ const Component = () => {
17
16
  if (!data.schema) {
18
17
  return <MissingSchema />;
19
18
  }
20
- return (<Flex direction='row' align='start'>
21
- <TypeIndex schema={data.schema}/>
22
- <Container>
23
- <Outlet />
24
- </Container>
25
- </Flex>);
19
+ return (<Box className="prose">
20
+ <Outlet />
21
+ </Box>);
26
22
  };
27
23
  export const reference = createRoute({
28
24
  path: `reference`,
@@ -1 +1 @@
1
- {"version":3,"file":"reference.jsx","sourceRoot":"","sources":["../../../src/template/routes/reference.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAA;AAC1F,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,YAAY,MAAM,sCAAsC,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE;IAC/B,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAA;IAC1E,OAAO;QACL,MAAM,EAAE,mBAAmB;KAC5B,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,MAAM,IAAI,GAAG,aAAa,EAAiB,CAAA;IAE3C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,aAAa,CAAC,AAAD,EAAG,CAAA;IAC1B,CAAC;IAED,OAAO,CACL,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CACjC;MAAA,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAC/B;MAAA,CAAC,SAAS,CACR;QAAA,CAAC,MAAM,CAAC,AAAD,EACT;MAAA,EAAE,SAAS,CACb;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;IACnC,IAAI,EAAE,WAAW;IACjB,MAAM;IACN,SAAS;IACT,QAAQ,EAAE,CAAC,cAAc,CAAC;CAC3B,CAAC,CAAA"}
1
+ {"version":3,"file":"reference.jsx","sourceRoot":"","sources":["../../../src/template/routes/reference.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAA;AAC1F,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,YAAY,MAAM,sCAAsC,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE;IAC/B,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAA;IAC1E,OAAO;QACL,MAAM,EAAE,mBAAmB;KAC5B,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,MAAM,IAAI,GAAG,aAAa,EAAiB,CAAA;IAE3C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,aAAa,CAAC,AAAD,EAAG,CAAA;IAC1B,CAAC;IAED,OAAO,CACL,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CACpB;MAAA,CAAC,MAAM,CAAC,AAAD,EACT;IAAA,EAAE,GAAG,CAAC,CACP,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;IACnC,IAAI,EAAE,WAAW;IACjB,MAAM;IACN,SAAS;IACT,QAAQ,EAAE,CAAC,cAAc,CAAC;CAC3B,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../src/template/routes/root.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAoC1D,eAAO,MAAM,SAAS,mCAuBrB,CAAA;AAsMD,eAAO,MAAM,IAAI;;;;CAIf,CAAA"}
1
+ {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../src/template/routes/root.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAsC1D,eAAO,MAAM,SAAS,mCAwBrB,CAAA;AAmUD,eAAO,MAAM,IAAI;;;;CAIf,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { GrafaidOld } from '#lib/grafaid-old/index';
1
2
  import { createRoute } from '#lib/react-router-aid/react-router-aid';
2
3
  import { Box, Grid } from '@radix-ui/themes';
3
4
  import { Flex, Theme } from '@radix-ui/themes';
@@ -16,6 +17,7 @@ import { HamburgerMenu } from "../components/HamburgerMenu.jsx";
16
17
  import { Link } from "../components/Link.jsx";
17
18
  import { Logo } from "../components/Logo.jsx";
18
19
  import { NotFound } from "../components/NotFound.jsx";
20
+ import { CodeBlockEnhancer } from "../components/CodeBlockEnhancer.jsx";
19
21
  import { Sidebar } from "../components/sidebar/Sidebar.jsx";
20
22
  import { ThemeToggle } from "../components/ThemeToggle.jsx";
21
23
  import { ThemeProvider, useTheme } from "../contexts/ThemeContext.jsx";
@@ -47,6 +49,7 @@ export const Component = () => {
47
49
  <body style={{ margin: 0 }}>
48
50
  <ThemeProvider>
49
51
  <Layout />
52
+ <CodeBlockEnhancer />
50
53
  </ThemeProvider>
51
54
  <ScrollRestoration />
52
55
  {import.meta.env.DEV && <script type='module' src={entryClientUrl}></script>}
@@ -72,7 +75,34 @@ const Layout = () => {
72
75
  return null;
73
76
  };
74
77
  const currentNavPathExp = getCurrentNavPathExp();
75
- const sidebar = currentNavPathExp && projectPagesCatalog.sidebarIndex[currentNavPathExp];
78
+ const isReferencePage = currentNavPathExp === '/reference';
79
+ const sidebar = (() => {
80
+ if (isReferencePage && PROJECT_DATA.schema) {
81
+ // Build reference sidebar from schema types
82
+ const schema = PROJECT_DATA.schema.versions[0].after;
83
+ const kindMap = GrafaidOld.getKindMap(schema);
84
+ const sidebarItems = [];
85
+ const kindEntries = Object.entries(kindMap.list).filter(([_, types]) => types.length > 0);
86
+ for (const [title, types] of kindEntries) {
87
+ sidebarItems.push({
88
+ type: 'ItemSection',
89
+ title,
90
+ pathExp: `reference-${title.toLowerCase()}`,
91
+ isLinkToo: false,
92
+ links: types.map(type => ({
93
+ type: 'ItemLink',
94
+ title: type.name,
95
+ pathExp: `reference/${type.name}`,
96
+ })),
97
+ });
98
+ }
99
+ return { items: sidebarItems };
100
+ }
101
+ else {
102
+ // Use regular page sidebar
103
+ return currentNavPathExp ? projectPagesCatalog.sidebarIndex[currentNavPathExp] || null : null;
104
+ }
105
+ })();
76
106
  const isShowSidebar = sidebar && sidebar.items.length > 0;
77
107
  const header = (<Flex gridArea={'header'} align='center' gap={{ initial: '4', md: '8' }} pb='4' mb={{ initial: '4', md: '8' }} style={{
78
108
  borderBottom: `1px solid var(--gray-3)`,
@@ -100,6 +130,65 @@ const Layout = () => {
100
130
  }} rows='min-content auto' columns={{ initial: '1fr', sm: '1fr', md: 'repeat(8, 1fr)' }} gapX={{ initial: '0', sm: '0', md: '2' }} my={{ initial: '0', sm: '0', md: '8' }} mx='auto' px={{ initial: '4', sm: '4', md: '0' }} py={{ initial: '4', sm: '4', md: '0' }}>
101
131
  <style>
102
132
  {`
133
+ /* Import Inter font */
134
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
135
+
136
+ /* Typography improvements */
137
+ body {
138
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
139
+ -webkit-font-smoothing: antialiased;
140
+ -moz-osx-font-smoothing: grayscale;
141
+ text-rendering: optimizeLegibility;
142
+ font-feature-settings: 'kern', 'liga', 'calt', 'ss01', 'ss02';
143
+ }
144
+
145
+ /* Improved paragraph spacing */
146
+ .prose p {
147
+ line-height: 1.7;
148
+ margin-bottom: 1.25rem;
149
+ }
150
+
151
+ .prose h1, .prose h2, .prose h3, .prose h4, .prose h5, .prose h6 {
152
+ font-weight: 600;
153
+ letter-spacing: -0.02em;
154
+ margin-top: 2rem;
155
+ margin-bottom: 1rem;
156
+ }
157
+
158
+ .prose h1 { font-size: 2.25rem; line-height: 1.2; }
159
+ .prose h2 { font-size: 1.875rem; line-height: 1.3; }
160
+ .prose h3 { font-size: 1.5rem; line-height: 1.4; }
161
+ .prose h4 { font-size: 1.25rem; line-height: 1.5; }
162
+
163
+ .prose ul, .prose ol {
164
+ margin-bottom: 1.25rem;
165
+ padding-left: 1.5rem;
166
+ }
167
+
168
+ .prose li {
169
+ margin-bottom: 0.5rem;
170
+ line-height: 1.7;
171
+ }
172
+
173
+ .prose a {
174
+ color: var(--accent-9);
175
+ text-decoration: none;
176
+ border-bottom: 1px solid transparent;
177
+ transition: border-color 0.2s;
178
+ }
179
+
180
+ .prose a:hover {
181
+ border-bottom-color: var(--accent-9);
182
+ }
183
+
184
+ .prose blockquote {
185
+ border-left: 4px solid var(--accent-6);
186
+ padding-left: 1rem;
187
+ margin-left: 0;
188
+ font-style: italic;
189
+ color: var(--gray-11);
190
+ }
191
+
103
192
  /* Responsive container fixes */
104
193
  @media (max-width: 768px) {
105
194
  body {
@@ -114,13 +203,14 @@ const Layout = () => {
114
203
 
115
204
  /* Shiki code blocks */
116
205
  pre.shiki {
117
- margin: 1rem 0;
206
+ margin: 0;
118
207
  padding: 1rem;
119
208
  border-radius: 8px;
120
209
  overflow-x: auto;
121
210
  font-size: 14px;
122
211
  line-height: 1.6;
123
212
  background-color: #f6f8fa;
213
+ border: 1px solid var(--gray-4);
124
214
  }
125
215
 
126
216
  /* Light mode: use --shiki-light CSS variables from inline styles */
@@ -131,6 +221,7 @@ const Layout = () => {
131
221
  /* Dark mode - Radix Themes uses [data-is-root-theme="dark"] */
132
222
  [data-is-root-theme="dark"] pre.shiki {
133
223
  background-color: #1a1b26;
224
+ border-color: var(--gray-7);
134
225
  }
135
226
 
136
227
  [data-is-root-theme="dark"] pre.shiki span {
@@ -142,6 +233,39 @@ const Layout = () => {
142
233
  background: transparent;
143
234
  display: block;
144
235
  }
236
+
237
+ /* Inline code */
238
+ .prose code:not(pre code) {
239
+ background-color: var(--gray-3);
240
+ padding: 0.125rem 0.25rem;
241
+ border-radius: 0.25rem;
242
+ font-size: 0.875em;
243
+ font-family: 'JetBrains Mono', 'Fira Code', monospace;
244
+ }
245
+
246
+ /* Tables */
247
+ .prose table {
248
+ width: 100%;
249
+ border-collapse: collapse;
250
+ margin-bottom: 1.5rem;
251
+ }
252
+
253
+ .prose th {
254
+ background-color: var(--gray-3);
255
+ font-weight: 600;
256
+ text-align: left;
257
+ padding: 0.75rem;
258
+ border-bottom: 2px solid var(--gray-5);
259
+ }
260
+
261
+ .prose td {
262
+ padding: 0.75rem;
263
+ border-bottom: 1px solid var(--gray-4);
264
+ }
265
+
266
+ .prose tbody tr:last-child td {
267
+ border-bottom: none;
268
+ }
145
269
  `}
146
270
  </style>
147
271
  {header}
@@ -151,7 +275,7 @@ const Layout = () => {
151
275
  <Sidebar data={sidebar.items}/>
152
276
  </Box>)}
153
277
 
154
- <Box gridArea='content / content / auto / 8'>
278
+ <Box gridArea='content / content / auto / 8' className="prose">
155
279
  <Outlet />
156
280
  </Box>
157
281
  </Grid>
@@ -1 +1 @@
1
- {"version":3,"file":"root.jsx","sourceRoot":"","sources":["../../../src/template/routes/root.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"root.jsx","sourceRoot":"","sources":["../../../src/template/routes/root.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polen",
3
- "version": "0.10.0-next.10",
3
+ "version": "0.10.0-next.11",
4
4
  "type": "module",
5
5
  "description": "A framework for delightful GraphQL developer portals",
6
6
  "author": {
@@ -0,0 +1,192 @@
1
+ import { useEffect } from 'react'
2
+ import { useLocation } from 'react-router'
3
+ import { useTheme } from '../contexts/ThemeContext.tsx'
4
+
5
+ export const CodeBlockEnhancer = () => {
6
+ const { appearance } = useTheme()
7
+ const location = useLocation()
8
+
9
+ useEffect(() => {
10
+ // Add styles for code block enhancements
11
+ const styleId = 'code-block-enhancer-styles'
12
+ let styleElement = document.getElementById(styleId) as HTMLStyleElement
13
+
14
+ if (!styleElement) {
15
+ styleElement = document.createElement('style')
16
+ styleElement.id = styleId
17
+ document.head.appendChild(styleElement)
18
+ }
19
+
20
+ styleElement.textContent = `
21
+ /* Enhanced code block styles */
22
+ pre.shiki {
23
+ position: relative;
24
+ }
25
+
26
+ pre.shiki[data-title] {
27
+ margin-top: 0;
28
+ border-radius: 0 0 8px 8px !important;
29
+ }
30
+
31
+ pre.shiki[data-title]::before {
32
+ content: attr(data-title);
33
+ display: block;
34
+ position: absolute;
35
+ top: -2.5rem;
36
+ left: -1px;
37
+ right: -1px;
38
+ background-color: ${appearance === 'dark' ? '#2a2b3d' : '#f3f4f6'};
39
+ border: 1px solid var(--gray-4);
40
+ border-bottom: 1px solid ${appearance === 'dark' ? '#3a3b4d' : '#e5e7eb'};
41
+ border-radius: 8px 8px 0 0;
42
+ padding: 0.5rem 1rem;
43
+ font-size: 0.875rem;
44
+ font-weight: 500;
45
+ color: var(--gray-11);
46
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
47
+ }
48
+
49
+ pre.shiki[data-title][data-language]::after {
50
+ content: attr(data-language);
51
+ position: absolute;
52
+ top: -2rem;
53
+ right: 1rem;
54
+ font-size: 0.75rem;
55
+ color: var(--gray-9);
56
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
57
+ }
58
+
59
+ .code-block-copy {
60
+ position: absolute;
61
+ top: 0.5rem;
62
+ right: 0.5rem;
63
+ padding: 0.25rem 0.5rem;
64
+ font-size: 0.75rem;
65
+ cursor: pointer;
66
+ border: none;
67
+ border-radius: 4px;
68
+ transition: all 0.2s;
69
+ background-color: ${appearance === 'dark' ? 'rgba(0, 0, 0, 0.5)' : 'rgba(255, 255, 255, 0.8)'};
70
+ backdrop-filter: blur(4px);
71
+ color: ${appearance === 'dark' ? '#fff' : '#000'};
72
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
73
+ }
74
+
75
+ pre.shiki[data-title] .code-block-copy {
76
+ top: -2rem;
77
+ right: 6rem;
78
+ background-color: transparent;
79
+ color: var(--gray-11);
80
+ }
81
+
82
+ .code-block-copy:hover {
83
+ background-color: var(--accent-9) !important;
84
+ color: white !important;
85
+ }
86
+
87
+ .code-block-copy[data-copied="true"] {
88
+ background-color: var(--green-9) !important;
89
+ color: white !important;
90
+ }
91
+ `
92
+
93
+ return () => {
94
+ if (styleElement && styleElement.parentNode) {
95
+ styleElement.parentNode.removeChild(styleElement)
96
+ }
97
+ }
98
+ }, [appearance])
99
+
100
+ useEffect(() => {
101
+ const enhanceCodeBlocks = () => {
102
+ const codeBlocks = document.querySelectorAll('pre.shiki:not([data-enhanced])')
103
+
104
+ codeBlocks.forEach((block) => {
105
+ const preElement = block as HTMLPreElement
106
+ preElement.setAttribute('data-enhanced', 'true')
107
+
108
+ // Get language from class name
109
+ const classes = preElement.className.split(' ')
110
+ const language = classes.find(c => c !== 'shiki' && c !== 'shiki-light' && c !== 'shiki-dark') || 'text'
111
+
112
+ // Check for title in first line
113
+ const codeElement = preElement.querySelector('code')
114
+ if (!codeElement) return
115
+
116
+ const firstLine = codeElement.textContent?.split('\n')[0] || ''
117
+ let title = ''
118
+
119
+ const titleMatch = firstLine.match(/^\/\/\s*title:\s*(.+)$/i)
120
+ if (titleMatch && titleMatch[1]) {
121
+ title = titleMatch[1]
122
+ // Remove title line from display
123
+ const firstLineElement = codeElement.querySelector('span.line') as HTMLElement
124
+ if (firstLineElement) {
125
+ firstLineElement.style.display = 'none'
126
+ }
127
+
128
+ // Set data attributes for CSS
129
+ preElement.setAttribute('data-title', title)
130
+ preElement.setAttribute('data-language', language)
131
+ preElement.style.marginTop = '3rem'
132
+ }
133
+
134
+ // Create copy button
135
+ const copyButton = document.createElement('button')
136
+ copyButton.className = 'code-block-copy'
137
+ copyButton.textContent = 'Copy'
138
+ copyButton.setAttribute('data-copied', 'false')
139
+
140
+ copyButton.onclick = async (e) => {
141
+ e.preventDefault()
142
+ e.stopPropagation()
143
+
144
+ // Get clean code without the title line
145
+ const code = codeElement.textContent || ''
146
+ const cleanCode = title ? code.split('\n').slice(1).join('\n') : code
147
+
148
+ try {
149
+ await navigator.clipboard.writeText(cleanCode)
150
+ copyButton.textContent = 'Copied!'
151
+ copyButton.setAttribute('data-copied', 'true')
152
+ setTimeout(() => {
153
+ copyButton.textContent = 'Copy'
154
+ copyButton.setAttribute('data-copied', 'false')
155
+ }, 2000)
156
+ } catch (err) {
157
+ console.error('Failed to copy:', err)
158
+ }
159
+ }
160
+
161
+ // Append copy button directly to pre element
162
+ preElement.appendChild(copyButton)
163
+ })
164
+ }
165
+
166
+ // Small delay to ensure DOM is ready
167
+ const timeoutId = setTimeout(enhanceCodeBlocks, 100)
168
+
169
+ return () => {
170
+ clearTimeout(timeoutId)
171
+ // Clean up enhanced code blocks
172
+ document.querySelectorAll('pre.shiki[data-enhanced]').forEach(block => {
173
+ block.removeAttribute('data-enhanced')
174
+ block.removeAttribute('data-title')
175
+ block.removeAttribute('data-language')
176
+ const copyButton = block.querySelector('.code-block-copy')
177
+ if (copyButton) {
178
+ copyButton.remove()
179
+ }
180
+ // Restore hidden title lines
181
+ const firstLine = block.querySelector('span.line') as HTMLElement
182
+ if (firstLine && firstLine.style.display === 'none') {
183
+ firstLine.style.display = ''
184
+ }
185
+ // Reset margin
186
+ (block as HTMLElement).style.marginTop = ''
187
+ })
188
+ }
189
+ }, [location.pathname]) // Re-run when route changes
190
+
191
+ return null
192
+ }
@@ -8,9 +8,9 @@ import { getPathActiveReport, Link } from '../Link.tsx'
8
8
  export const Items: React.FC<{ items: Content.Item[] }> = ({ items }) => {
9
9
  return (
10
10
  <Flex direction='column' gap='2px'>
11
- {items.map((item) => (
11
+ {items.map((item, index) => (
12
12
  <Item
13
- key={item.pathExp}
13
+ key={`${item.pathExp}-${index}`}
14
14
  item={item}
15
15
  />
16
16
  ))}
@@ -121,9 +121,9 @@ const LinkedSection: React.FC<{
121
121
  borderLeft: `1px solid var(--gray-5)`,
122
122
  }}
123
123
  >
124
- {section.links.map((link) => (
124
+ {section.links.map((link, index) => (
125
125
  <SectionLink
126
- key={link.pathExp}
126
+ key={`${link.pathExp}-${index}`}
127
127
  link={link}
128
128
  />
129
129
  ))}
@@ -1,10 +1,9 @@
1
1
  import { createRoute } from '#lib/react-router-aid/react-router-aid'
2
2
  import { createLoader, useLoaderData } from '#lib/react-router-loader/react-router-loader'
3
- import { Container, Flex } from '@radix-ui/themes'
3
+ import { Box } from '@radix-ui/themes'
4
4
  import { Outlet } from 'react-router'
5
5
  import PROJECT_DATA from 'virtual:polen/project/data.jsonsuper'
6
6
  import { MissingSchema } from '../components/MissingSchema.jsx'
7
- import { TypeIndex } from '../components/TypeIndex.jsx'
8
7
  import { reference$type } from './reference.$type.jsx'
9
8
 
10
9
  const loader = createLoader(() => {
@@ -22,12 +21,9 @@ const Component = () => {
22
21
  }
23
22
 
24
23
  return (
25
- <Flex direction='row' align='start'>
26
- <TypeIndex schema={data.schema} />
27
- <Container>
28
- <Outlet />
29
- </Container>
30
- </Flex>
24
+ <Box className="prose">
25
+ <Outlet />
26
+ </Box>
31
27
  )
32
28
  }
33
29
 
@@ -1,4 +1,6 @@
1
+ import type { Content } from '#api/content/$'
1
2
  import type { ReactRouter } from '#dep/react-router/index'
3
+ import { GrafaidOld } from '#lib/grafaid-old/index'
2
4
  import { createRoute } from '#lib/react-router-aid/react-router-aid'
3
5
  import { Box, Grid } from '@radix-ui/themes'
4
6
  import { Flex, Theme } from '@radix-ui/themes'
@@ -17,6 +19,7 @@ import { HamburgerMenu } from '../components/HamburgerMenu.tsx'
17
19
  import { Link } from '../components/Link.tsx'
18
20
  import { Logo } from '../components/Logo.tsx'
19
21
  import { NotFound } from '../components/NotFound.tsx'
22
+ import { CodeBlockEnhancer } from '../components/CodeBlockEnhancer.tsx'
20
23
  import { Sidebar } from '../components/sidebar/Sidebar.tsx'
21
24
  import { ThemeToggle } from '../components/ThemeToggle.tsx'
22
25
  import { ThemeProvider, useTheme } from '../contexts/ThemeContext.tsx'
@@ -51,6 +54,7 @@ export const Component = () => {
51
54
  <body style={{ margin: 0 }}>
52
55
  <ThemeProvider>
53
56
  <Layout />
57
+ <CodeBlockEnhancer />
54
58
  </ThemeProvider>
55
59
  <ScrollRestoration />
56
60
  {import.meta.env.DEV && <script type='module' src={entryClientUrl}></script>}
@@ -81,7 +85,38 @@ const Layout = () => {
81
85
  }
82
86
 
83
87
  const currentNavPathExp = getCurrentNavPathExp()
84
- const sidebar = currentNavPathExp && projectPagesCatalog.sidebarIndex[currentNavPathExp]
88
+ const isReferencePage = currentNavPathExp === '/reference'
89
+
90
+ const sidebar = (() => {
91
+ if (isReferencePage && PROJECT_DATA.schema) {
92
+ // Build reference sidebar from schema types
93
+ const schema = PROJECT_DATA.schema.versions[0].after
94
+ const kindMap = GrafaidOld.getKindMap(schema)
95
+
96
+ const sidebarItems: Content.Item[] = []
97
+ const kindEntries = Object.entries(kindMap.list).filter(([_, types]) => types.length > 0)
98
+
99
+ for (const [title, types] of kindEntries) {
100
+ sidebarItems.push({
101
+ type: 'ItemSection' as const,
102
+ title,
103
+ pathExp: `reference-${title.toLowerCase()}`,
104
+ isLinkToo: false,
105
+ links: types.map(type => ({
106
+ type: 'ItemLink' as const,
107
+ title: type.name,
108
+ pathExp: `reference/${type.name}`,
109
+ })),
110
+ })
111
+ }
112
+
113
+ return { items: sidebarItems }
114
+ } else {
115
+ // Use regular page sidebar
116
+ return currentNavPathExp ? projectPagesCatalog.sidebarIndex[currentNavPathExp] || null : null
117
+ }
118
+ })()
119
+
85
120
  const isShowSidebar = sidebar && sidebar.items.length > 0
86
121
 
87
122
  const header = (
@@ -145,6 +180,65 @@ const Layout = () => {
145
180
  >
146
181
  <style>
147
182
  {`
183
+ /* Import Inter font */
184
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
185
+
186
+ /* Typography improvements */
187
+ body {
188
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
189
+ -webkit-font-smoothing: antialiased;
190
+ -moz-osx-font-smoothing: grayscale;
191
+ text-rendering: optimizeLegibility;
192
+ font-feature-settings: 'kern', 'liga', 'calt', 'ss01', 'ss02';
193
+ }
194
+
195
+ /* Improved paragraph spacing */
196
+ .prose p {
197
+ line-height: 1.7;
198
+ margin-bottom: 1.25rem;
199
+ }
200
+
201
+ .prose h1, .prose h2, .prose h3, .prose h4, .prose h5, .prose h6 {
202
+ font-weight: 600;
203
+ letter-spacing: -0.02em;
204
+ margin-top: 2rem;
205
+ margin-bottom: 1rem;
206
+ }
207
+
208
+ .prose h1 { font-size: 2.25rem; line-height: 1.2; }
209
+ .prose h2 { font-size: 1.875rem; line-height: 1.3; }
210
+ .prose h3 { font-size: 1.5rem; line-height: 1.4; }
211
+ .prose h4 { font-size: 1.25rem; line-height: 1.5; }
212
+
213
+ .prose ul, .prose ol {
214
+ margin-bottom: 1.25rem;
215
+ padding-left: 1.5rem;
216
+ }
217
+
218
+ .prose li {
219
+ margin-bottom: 0.5rem;
220
+ line-height: 1.7;
221
+ }
222
+
223
+ .prose a {
224
+ color: var(--accent-9);
225
+ text-decoration: none;
226
+ border-bottom: 1px solid transparent;
227
+ transition: border-color 0.2s;
228
+ }
229
+
230
+ .prose a:hover {
231
+ border-bottom-color: var(--accent-9);
232
+ }
233
+
234
+ .prose blockquote {
235
+ border-left: 4px solid var(--accent-6);
236
+ padding-left: 1rem;
237
+ margin-left: 0;
238
+ font-style: italic;
239
+ color: var(--gray-11);
240
+ }
241
+
148
242
  /* Responsive container fixes */
149
243
  @media (max-width: 768px) {
150
244
  body {
@@ -159,13 +253,14 @@ const Layout = () => {
159
253
 
160
254
  /* Shiki code blocks */
161
255
  pre.shiki {
162
- margin: 1rem 0;
256
+ margin: 0;
163
257
  padding: 1rem;
164
258
  border-radius: 8px;
165
259
  overflow-x: auto;
166
260
  font-size: 14px;
167
261
  line-height: 1.6;
168
262
  background-color: #f6f8fa;
263
+ border: 1px solid var(--gray-4);
169
264
  }
170
265
 
171
266
  /* Light mode: use --shiki-light CSS variables from inline styles */
@@ -176,6 +271,7 @@ const Layout = () => {
176
271
  /* Dark mode - Radix Themes uses [data-is-root-theme="dark"] */
177
272
  [data-is-root-theme="dark"] pre.shiki {
178
273
  background-color: #1a1b26;
274
+ border-color: var(--gray-7);
179
275
  }
180
276
 
181
277
  [data-is-root-theme="dark"] pre.shiki span {
@@ -187,6 +283,39 @@ const Layout = () => {
187
283
  background: transparent;
188
284
  display: block;
189
285
  }
286
+
287
+ /* Inline code */
288
+ .prose code:not(pre code) {
289
+ background-color: var(--gray-3);
290
+ padding: 0.125rem 0.25rem;
291
+ border-radius: 0.25rem;
292
+ font-size: 0.875em;
293
+ font-family: 'JetBrains Mono', 'Fira Code', monospace;
294
+ }
295
+
296
+ /* Tables */
297
+ .prose table {
298
+ width: 100%;
299
+ border-collapse: collapse;
300
+ margin-bottom: 1.5rem;
301
+ }
302
+
303
+ .prose th {
304
+ background-color: var(--gray-3);
305
+ font-weight: 600;
306
+ text-align: left;
307
+ padding: 0.75rem;
308
+ border-bottom: 2px solid var(--gray-5);
309
+ }
310
+
311
+ .prose td {
312
+ padding: 0.75rem;
313
+ border-bottom: 1px solid var(--gray-4);
314
+ }
315
+
316
+ .prose tbody tr:last-child td {
317
+ border-bottom: none;
318
+ }
190
319
  `}
191
320
  </style>
192
321
  {header}
@@ -202,7 +331,7 @@ const Layout = () => {
202
331
  </Box>
203
332
  )}
204
333
 
205
- <Box gridArea='content / content / auto / 8'>
334
+ <Box gridArea='content / content / auto / 8' className="prose">
206
335
  <Outlet />
207
336
  </Box>
208
337
  </Grid>