radiant-docs 0.1.6 → 0.1.8

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 (78) hide show
  1. package/dist/index.js +32 -6
  2. package/package.json +3 -3
  3. package/template/astro.config.mjs +76 -3
  4. package/template/package-lock.json +924 -737
  5. package/template/package.json +7 -5
  6. package/template/scripts/generate-og-images.mjs +335 -0
  7. package/template/scripts/generate-og-metadata.mjs +173 -0
  8. package/template/scripts/rewrite-static-asset-host.mjs +408 -0
  9. package/template/scripts/stamp-image-versions.mjs +277 -0
  10. package/template/scripts/stamp-og-image-versions.mjs +199 -0
  11. package/template/scripts/stamp-pagefind-runtime-version.mjs +140 -0
  12. package/template/src/assets/fonts/geist-mono/cyrillic.woff2 +0 -0
  13. package/template/src/assets/fonts/geist-mono/latin-ext.woff2 +0 -0
  14. package/template/src/assets/fonts/geist-mono/latin.woff2 +0 -0
  15. package/template/src/assets/fonts/google-sans-flex/canadian-aboriginal.woff2 +0 -0
  16. package/template/src/assets/fonts/google-sans-flex/cherokee.woff2 +0 -0
  17. package/template/src/assets/fonts/google-sans-flex/latin-ext.woff2 +0 -0
  18. package/template/src/assets/fonts/google-sans-flex/latin.woff2 +0 -0
  19. package/template/src/assets/fonts/google-sans-flex/math.woff2 +0 -0
  20. package/template/src/assets/fonts/google-sans-flex/nushu.woff2 +0 -0
  21. package/template/src/assets/fonts/google-sans-flex/symbols.woff2 +0 -0
  22. package/template/src/assets/fonts/google-sans-flex/syriac.woff2 +0 -0
  23. package/template/src/assets/fonts/google-sans-flex/tifinagh.woff2 +0 -0
  24. package/template/src/assets/fonts/google-sans-flex/vietnamese.woff2 +0 -0
  25. package/template/src/components/Footer.astro +94 -0
  26. package/template/src/components/Header.astro +11 -66
  27. package/template/src/components/LogoLink.astro +103 -0
  28. package/template/src/components/MdxPage.astro +126 -11
  29. package/template/src/components/OpenApiPage.astro +1036 -69
  30. package/template/src/components/Search.astro +0 -2
  31. package/template/src/components/SidebarDropdown.astro +34 -14
  32. package/template/src/components/SidebarGroup.astro +3 -6
  33. package/template/src/components/SidebarLink.astro +22 -12
  34. package/template/src/components/SidebarMenu.astro +19 -16
  35. package/template/src/components/SidebarSegmented.astro +99 -0
  36. package/template/src/components/SidebarSubgroup.astro +12 -12
  37. package/template/src/components/ThemeSwitcher.astro +30 -7
  38. package/template/src/components/endpoint/PlaygroundBar.astro +32 -36
  39. package/template/src/components/endpoint/PlaygroundButton.astro +40 -4
  40. package/template/src/components/endpoint/PlaygroundField.astro +1068 -22
  41. package/template/src/components/endpoint/PlaygroundForm.astro +559 -61
  42. package/template/src/components/endpoint/RequestSnippets.astro +342 -193
  43. package/template/src/components/endpoint/ResponseDisplay.astro +161 -147
  44. package/template/src/components/endpoint/ResponseFieldTree.astro +134 -0
  45. package/template/src/components/endpoint/ResponseFields.astro +711 -68
  46. package/template/src/components/endpoint/ResponseSnippets.astro +299 -173
  47. package/template/src/components/sidebar/SidebarEndpointLink.astro +1 -1
  48. package/template/src/components/ui/CodeLanguageIcon.astro +19 -0
  49. package/template/src/components/ui/CodeTabEdge.astro +79 -0
  50. package/template/src/components/ui/Field.astro +103 -20
  51. package/template/src/components/ui/Icon.astro +32 -0
  52. package/template/src/components/ui/ListChevronsToggle.astro +31 -0
  53. package/template/src/components/ui/Tag.astro +1 -1
  54. package/template/src/components/user/{Accordian.astro → Accordion.astro} +6 -6
  55. package/template/src/components/user/Callout.astro +5 -9
  56. package/template/src/components/user/CodeBlock.astro +400 -0
  57. package/template/src/components/user/CodeGroup.astro +225 -0
  58. package/template/src/components/user/ComponentPreview.astro +1 -0
  59. package/template/src/components/user/ComponentPreviewBlock.astro +181 -0
  60. package/template/src/components/user/Image.astro +132 -0
  61. package/template/src/components/user/Steps.astro +1 -3
  62. package/template/src/components/user/Tabs.astro +2 -2
  63. package/template/src/content.config.ts +1 -0
  64. package/template/src/layouts/Layout.astro +109 -8
  65. package/template/src/lib/code/code-block.ts +546 -0
  66. package/template/src/lib/frontmatter-schema.ts +8 -7
  67. package/template/src/lib/mdx/remark-code-block-component.ts +342 -0
  68. package/template/src/lib/mdx/remark-demote-h1.ts +16 -0
  69. package/template/src/lib/pagefind.ts +19 -5
  70. package/template/src/lib/routes.ts +49 -31
  71. package/template/src/lib/utils.ts +20 -0
  72. package/template/src/lib/validation.ts +638 -200
  73. package/template/src/pages/[...slug].astro +18 -5
  74. package/template/src/styles/geist-mono.css +33 -0
  75. package/template/src/styles/global.css +89 -84
  76. package/template/src/styles/google-sans-flex.css +143 -0
  77. package/template/ec.config.mjs +0 -51
  78. /package/template/src/components/user/{AccordianGroup.astro → AccordionGroup.astro} +0 -0
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  import { getCollection } from "astro:content";
3
- import { getAllRoutes, type Route } from "../lib/routes";
3
+ import { getAllRoutes, resolveMdxPageTitle, type Route } from "../lib/routes";
4
4
  import { getConfig, validateMdxContent } from "../lib/validation";
5
5
  import MdxPage from "../components/MdxPage.astro";
6
6
  import OpenApiPage from "../components/OpenApiPage.astro";
@@ -28,7 +28,7 @@ export async function getStaticPaths(): Promise<GetStaticPathsResult> {
28
28
  const entry = findEntry(route.filePath);
29
29
  if (!entry) {
30
30
  throw new Error(
31
- `Could not find content collection entry for path: ${route.filePath}`
31
+ `Could not find content collection entry for path: ${route.filePath}`,
32
32
  );
33
33
  }
34
34
  return {
@@ -47,13 +47,26 @@ export async function getStaticPaths(): Promise<GetStaticPathsResult> {
47
47
  if (config.home) {
48
48
  const homeEntry = findEntry(config.home);
49
49
  if (!homeEntry) {
50
- throw new Error(`Home page content not found for path: ${config.home}`);
50
+ throw new Error(
51
+ `Invariant violation: home entry not found after validation for path: ${config.home}`,
52
+ );
51
53
  }
54
+
55
+ const existingHomeRoute = routes.find(
56
+ (candidate) =>
57
+ candidate.type === "mdx" && candidate.filePath === config.home,
58
+ );
59
+
52
60
  const homeRoute: Route = {
53
61
  type: "mdx",
54
62
  slug: "/",
55
63
  filePath: config.home,
56
- title: homeEntry.data.title,
64
+ title:
65
+ existingHomeRoute?.title ??
66
+ resolveMdxPageTitle({
67
+ entry: homeEntry,
68
+ filePath: config.home,
69
+ }),
57
70
  };
58
71
  paths.push({
59
72
  params: { slug: "/" },
@@ -70,7 +83,7 @@ const { route, entry } = props;
70
83
 
71
84
  {
72
85
  route.type === "mdx" ? (
73
- <MdxPage entry={entry!} />
86
+ <MdxPage entry={entry!} route={route} />
74
87
  ) : (
75
88
  <OpenApiPage route={route} />
76
89
  )
@@ -0,0 +1,33 @@
1
+ /* geist-mono-cyrillic */
2
+ @font-face {
3
+ font-family: "Geist Mono";
4
+ font-style: normal;
5
+ font-weight: 100 900;
6
+ font-display: swap;
7
+ src: url("../assets/fonts/geist-mono/cyrillic.woff2") format("woff2");
8
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
9
+ }
10
+
11
+ /* geist-mono-latin-ext */
12
+ @font-face {
13
+ font-family: "Geist Mono";
14
+ font-style: normal;
15
+ font-weight: 100 900;
16
+ font-display: swap;
17
+ src: url("../assets/fonts/geist-mono/latin-ext.woff2") format("woff2");
18
+ unicode-range:
19
+ U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF,
20
+ U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
21
+ }
22
+
23
+ /* geist-mono-latin */
24
+ @font-face {
25
+ font-family: "Geist Mono";
26
+ font-style: normal;
27
+ font-weight: 100 900;
28
+ font-display: swap;
29
+ src: url("../assets/fonts/geist-mono/latin.woff2") format("woff2");
30
+ unicode-range:
31
+ U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329,
32
+ U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
33
+ }
@@ -5,27 +5,77 @@
5
5
  /* This maps the 'background' utility to our CSS variable */
6
6
  --color-background: var(--background);
7
7
  --color-background-dark: var(--background-dark);
8
+ --color-foreground: var(--foreground);
8
9
 
9
10
  --color-border: var(--border);
10
11
  --color-border-light: var(--border-light);
12
+ --color-ring: var(--ring);
13
+ --color-input: var(--input);
14
+
15
+ --color-primary: var(--primary);
16
+ --color-primary-foreground: var(--primary-foreground);
17
+ --color-secondary: var(--secondary);
18
+ --color-secondary-foreground: var(--secondary-foreground);
19
+ --color-muted: var(--muted);
20
+ --color-muted-foreground: var(--muted-foreground);
21
+ --color-accent: var(--accent);
22
+ --color-accent-foreground: var(--accent-foreground);
23
+ --color-destructive: var(--destructive);
24
+
25
+ --font-sans: "Google Sans Flex", ui-sans-serif, system-ui, sans-serif;
26
+ --font-mono:
27
+ "Geist Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
28
+ "Liberation Mono", "Courier New", monospace;
29
+
30
+ --radius-sm: calc(var(--radius) - 4px);
31
+ --radius-md: calc(var(--radius) - 2px);
32
+ --radius-lg: var(--radius);
33
+ --radius-xl: calc(var(--radius) + 4px);
11
34
  }
12
35
 
13
36
  /* 2. Light Mode (Default) */
14
37
  :root {
38
+ --radius: 0.625rem;
15
39
  --background: #ffffff;
16
40
  --background-dark: var(--color-neutral-100);
41
+ --foreground: oklch(0.145 0 0);
42
+
43
+ --primary: oklch(0.205 0 0);
44
+ --primary-foreground: oklch(0.985 0 0);
45
+ --secondary: oklch(0.97 0 0);
46
+ --secondary-foreground: oklch(0.205 0 0);
47
+ --muted: oklch(0.97 0 0);
48
+ --muted-foreground: oklch(0.556 0 0);
49
+ --accent: oklch(0.97 0 0);
50
+ --accent-foreground: oklch(0.205 0 0);
51
+ --destructive: oklch(50.5% 0.213 27.518);
17
52
 
18
53
  --border: var(--color-neutral-200);
19
54
  --border-light: var(--color-neutral-100);
55
+ --input: oklch(0.922 0 0);
56
+ --ring: oklch(0.708 0 0);
20
57
  }
21
58
 
22
59
  /* 3. Dark Mode */
23
60
  .dark {
24
61
  --background: var(--color-neutral-900);
25
62
  --background-dark: var(--color-neutral-950);
63
+ --foreground: oklch(0.985 0 0);
64
+
65
+ --primary: oklch(0.922 0 0);
66
+ --primary-foreground: oklch(0.205 0 0);
67
+ --secondary: oklch(0.269 0 0);
68
+ --secondary-foreground: oklch(0.985 0 0);
69
+ --muted: oklch(0.269 0 0);
70
+ --muted-foreground: oklch(0.708 0 0);
71
+ --accent: oklch(0.269 0 0);
72
+ --accent-foreground: oklch(0.985 0 0);
73
+ --destructive: oklch(0.704 0.191 22.216);
26
74
 
27
75
  --border: color-mix(in srgb, var(--color-neutral-800) 100%, transparent);
28
76
  --border-light: color-mix(in srgb, var(--color-neutral-800) 50%, transparent);
77
+ --input: oklch(1 0 0 / 15%);
78
+ --ring: oklch(0.556 0 0);
29
79
  }
30
80
 
31
81
  @variant dark (&:where(.dark, .dark *));
@@ -34,92 +84,65 @@
34
84
  --breakpoint-xs: 30rem;
35
85
  }
36
86
 
87
+ @layer base {
88
+ * {
89
+ @apply border-border outline-ring/50;
90
+ }
91
+
92
+ body {
93
+ @apply bg-background text-foreground;
94
+ }
95
+ }
96
+
37
97
  [x-cloak] {
38
98
  display: none !important;
39
99
  }
40
100
 
41
101
  /* Prose styling */
42
102
  .prose-rules {
43
- @apply *:max-w-2xl max-w-none prose prose-neutral *:my-5 *:first:mt-0 *:last:mb-0 dark:prose-invert prose-h2:scroll-mt-28 prose-h3:scroll-mt-24 prose-headings:font-semibold [--tw-prose-bullets:inherit] [--tw-prose-counters:text-neutral-95s0];
44
- }
45
-
46
- /* Code block styling */
47
- .expressive-code .ec-line .code {
48
- border-inline-start-width: 0 !important;
49
- }
50
-
51
- .expressive-code .has-title .copy button,
52
- .expressive-code .is-terminal .copy button {
53
- @apply opacity-100!;
54
- }
55
-
56
- .expressive-code .copy button {
57
- @apply rounded-md!;
58
- }
59
-
60
- /* Hide the tooltip text */
61
- .expressive-code .copy .feedback {
62
- @apply hidden!;
63
- }
64
-
65
- .expressive-code .frame:not(.has-title):hover .copy button {
66
- @apply bg-white/50! opacity-100! backdrop-blur-xs shadow-xs;
67
- }
68
-
69
- /* Copy icon color */
70
- .expressive-code .copy button:after {
71
- @apply bg-neutral-500/80! duration-200;
103
+ @apply *:max-w-2xl max-w-none prose prose-neutral *:first:mt-0 *:last:mb-0 dark:prose-invert prose-h2:scroll-mt-28 prose-h3:scroll-mt-24 prose-headings:font-semibold [--tw-prose-bullets:inherit] [--tw-prose-counters:text-neutral-950];
72
104
  }
73
105
 
74
- .expressive-code .copy button:hover:after {
75
- @apply bg-neutral-500!;
106
+ .prose-rules :is(h2, h3, h4, h5, h6) {
107
+ @apply relative;
108
+ padding-left: 0.375rem;
109
+ margin-left: -0.375rem;
76
110
  }
77
111
 
78
- /* Copy button animation */
79
- .expressive-code .copy button div {
80
- mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E") !important;
81
- @apply transition-all! duration-200! scale-0! opacity-0! bg-green-600! mask-no-repeat mask-center;
112
+ .prose-rules :is(h2, h3, h4, h5, h6)[id] {
113
+ @apply cursor-pointer;
82
114
  }
83
115
 
84
- .expressive-code .copy button:hover div {
85
- @apply opacity-100 bg-green-600!;
116
+ .prose-rules :is(h2, h3, h4, h5, h6) > .heading-anchor {
117
+ @apply absolute inline-flex size-6 items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium no-underline opacity-0 transition-all cursor-pointer outline-none hover:bg-accent text-neutral-400 hover:text-neutral-500 focus-visible:opacity-100 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] dark:hover:bg-accent/50;
118
+ right: 100%;
119
+ top: 50%;
120
+ transform: translateY(-50%);
86
121
  }
87
122
 
88
- .expressive-code .copy:has(.feedback) button div {
89
- @apply scale-100! opacity-100!;
123
+ .prose-rules :is(h2, h3, h4, h5, h6):hover > .heading-anchor,
124
+ .prose-rules :is(h2, h3, h4, h5, h6):focus-within > .heading-anchor {
125
+ @apply opacity-100;
90
126
  }
91
127
 
92
- .expressive-code .copy button:after {
93
- @apply transition-all duration-200;
128
+ .prose-rules .heading-anchor-icon {
129
+ @apply h-3.5 w-3.5;
94
130
  }
95
131
 
96
- .expressive-code .copy:has(.feedback) button:after {
97
- @apply scale-0 opacity-0;
98
- }
99
-
100
- /* Copy button with code block title */
101
- .expressive-code .has-title .copy,
102
- .expressive-code .is-terminal .copy {
103
- @apply top-px!;
104
- }
105
-
106
- .expressive-code .has-title .copy button,
107
- .expressive-code .is-terminal .copy button {
108
- @apply bg-transparent!;
109
- }
110
-
111
- .expressive-code .has-title .copy button:before,
112
- .expressive-code .is-terminal .copy button:before {
113
- @apply border-none;
114
- }
132
+ @media (max-width: 1023px) {
133
+ .prose-rules :is(h2, h3, h4, h5, h6) > .heading-anchor {
134
+ @apply opacity-0 pointer-events-none;
135
+ }
115
136
 
116
- .expressive-code .is-terminal .title {
117
- @apply text-neutral-400 font-normal! text-[13px];
137
+ .prose-rules :is(h2, h3, h4, h5, h6):hover > .heading-anchor,
138
+ .prose-rules :is(h2, h3, h4, h5, h6):focus-within > .heading-anchor {
139
+ @apply opacity-0;
140
+ }
118
141
  }
119
142
 
120
143
  /* Code single-line styling */
121
- .prose :not(pre) > code {
122
- @apply px-1 py-0.5 bg-neutral-100/90 text-neutral-950 rounded-md font-mono font-medium border border-neutral-200/80 shadow-xs after:hidden before:hidden;
144
+ :is(.prose, .prose-rules) :not(pre) > code {
145
+ @apply px-1 py-px bg-neutral-100/90 text-neutral-600 rounded-md font-mono font-medium border border-neutral-200/80 after:hidden before:hidden;
123
146
  }
124
147
 
125
148
  /* <ol> numbers */
@@ -127,25 +150,6 @@
127
150
  @apply font-medium;
128
151
  }
129
152
 
130
- /* Code line collapse issue */
131
- .expressive-code .ec-line .code {
132
- @apply min-w-0 w-fit;
133
- }
134
-
135
- /* Collapse icon */
136
- .expressive-code .ec-section summary :is(.expand, .collapse) {
137
- @apply opacity-100!;
138
- }
139
-
140
- /* Tab shadows */
141
- .expressive-code .frame.has-title:not(.is-terminal) .title {
142
- @apply shadow-[1px_0px_2px_0px_rgba(0,0,0,0.01)];
143
- }
144
-
145
- .expressive-code .frame.has-title:not(.is-terminal) .header {
146
- @apply shadow-[inset_0px_0.5px_2px_2px_rgba(0,0,0,0.01)];
147
- }
148
-
149
153
  /* Animations */
150
154
  @keyframes scaleIn {
151
155
  from {
@@ -199,7 +203,8 @@
199
203
  --theme-transition: 200ms; /* Set your desired sync speed */
200
204
 
201
205
  transition-duration: var(--theme-transition) !important;
202
- transition-property: background-color, border-color, color, fill, stroke !important;
206
+ transition-property:
207
+ background-color, border-color, color, fill, stroke !important;
203
208
  }
204
209
  /* Ensure the pill slider is NOT affected by the forced color duration
205
210
  so its movement remains independent */
@@ -0,0 +1,143 @@
1
+ /* google-sans-flex-canadian-aboriginal */
2
+ @font-face {
3
+ font-family: "Google Sans Flex";
4
+ font-style: normal;
5
+ font-weight: 1 1000;
6
+ font-stretch: 100%;
7
+ font-display: swap;
8
+ src: url("../assets/fonts/google-sans-flex/canadian-aboriginal.woff2") format("woff2");
9
+ unicode-range: U+02C7, U+02D8-02D9, U+02DB, U+0307, U+1400-167F, U+18B0-18F5, U+25CC, U+11AB0-11ABF;
10
+ }
11
+
12
+ /* google-sans-flex-cherokee */
13
+ @font-face {
14
+ font-family: "Google Sans Flex";
15
+ font-style: normal;
16
+ font-weight: 1 1000;
17
+ font-stretch: 100%;
18
+ font-display: swap;
19
+ src: url("../assets/fonts/google-sans-flex/cherokee.woff2") format("woff2");
20
+ unicode-range: U+0300-0302, U+0304, U+030B-030C, U+0323-0324, U+0330-0331, U+13A0-13FF, U+AB70-ABBF;
21
+ }
22
+
23
+ /* google-sans-flex-math */
24
+ @font-face {
25
+ font-family: "Google Sans Flex";
26
+ font-style: normal;
27
+ font-weight: 1 1000;
28
+ font-stretch: 100%;
29
+ font-display: swap;
30
+ src: url("../assets/fonts/google-sans-flex/math.woff2") format("woff2");
31
+ unicode-range:
32
+ U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330,
33
+ U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1,
34
+ U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047,
35
+ U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF,
36
+ U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5,
37
+ U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321,
38
+ U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7,
39
+ U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11,
40
+ U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;
41
+ }
42
+
43
+ /* google-sans-flex-nushu */
44
+ @font-face {
45
+ font-family: "Google Sans Flex";
46
+ font-style: normal;
47
+ font-weight: 1 1000;
48
+ font-stretch: 100%;
49
+ font-display: swap;
50
+ src: url("../assets/fonts/google-sans-flex/nushu.woff2") format("woff2");
51
+ unicode-range: U+2003, U+3000, U+3002, U+4E00, U+FE12, U+16FE1, U+1B170-1B2FB;
52
+ }
53
+
54
+ /* google-sans-flex-symbols */
55
+ @font-face {
56
+ font-family: "Google Sans Flex";
57
+ font-style: normal;
58
+ font-weight: 1 1000;
59
+ font-stretch: 100%;
60
+ font-display: swap;
61
+ src: url("../assets/fonts/google-sans-flex/symbols.woff2") format("woff2");
62
+ unicode-range:
63
+ U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192,
64
+ U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A,
65
+ U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF,
66
+ U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E,
67
+ U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315,
68
+ U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8,
69
+ U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3,
70
+ U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449,
71
+ U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF,
72
+ U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB,
73
+ U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610,
74
+ U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC,
75
+ U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF,
76
+ U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB,
77
+ U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F,
78
+ U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;
79
+ }
80
+
81
+ /* google-sans-flex-syriac */
82
+ @font-face {
83
+ font-family: "Google Sans Flex";
84
+ font-style: normal;
85
+ font-weight: 1 1000;
86
+ font-stretch: 100%;
87
+ font-display: swap;
88
+ src: url("../assets/fonts/google-sans-flex/syriac.woff2") format("woff2");
89
+ unicode-range:
90
+ U+0303-0304, U+0307-0308, U+030A, U+0320, U+0323-0325, U+032D-032E, U+0330-0331, U+060C, U+061B-061C,
91
+ U+061F, U+0621, U+0640, U+064B-0655, U+0660-066C, U+0670, U+0700-074F, U+0860-086A, U+1DF8, U+1DFA,
92
+ U+200C-200F, U+25CC, U+2670-2671;
93
+ }
94
+
95
+ /* google-sans-flex-tifinagh */
96
+ @font-face {
97
+ font-family: "Google Sans Flex";
98
+ font-style: normal;
99
+ font-weight: 1 1000;
100
+ font-stretch: 100%;
101
+ font-display: swap;
102
+ src: url("../assets/fonts/google-sans-flex/tifinagh.woff2") format("woff2");
103
+ unicode-range: U+02C7, U+0301-0302, U+0304, U+0306-0307, U+0309, U+0323, U+0331, U+200C-200D, U+202E, U+25CC, U+2D30-2D7F;
104
+ }
105
+
106
+ /* google-sans-flex-vietnamese */
107
+ @font-face {
108
+ font-family: "Google Sans Flex";
109
+ font-style: normal;
110
+ font-weight: 1 1000;
111
+ font-stretch: 100%;
112
+ font-display: swap;
113
+ src: url("../assets/fonts/google-sans-flex/vietnamese.woff2") format("woff2");
114
+ unicode-range:
115
+ U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304,
116
+ U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
117
+ }
118
+
119
+ /* google-sans-flex-latin-ext */
120
+ @font-face {
121
+ font-family: "Google Sans Flex";
122
+ font-style: normal;
123
+ font-weight: 1 1000;
124
+ font-stretch: 100%;
125
+ font-display: swap;
126
+ src: url("../assets/fonts/google-sans-flex/latin-ext.woff2") format("woff2");
127
+ unicode-range:
128
+ U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF,
129
+ U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
130
+ }
131
+
132
+ /* google-sans-flex-latin */
133
+ @font-face {
134
+ font-family: "Google Sans Flex";
135
+ font-style: normal;
136
+ font-weight: 1 1000;
137
+ font-stretch: 100%;
138
+ font-display: swap;
139
+ src: url("../assets/fonts/google-sans-flex/latin.woff2") format("woff2");
140
+ unicode-range:
141
+ U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329,
142
+ U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
143
+ }
@@ -1,51 +0,0 @@
1
- import { defineEcConfig } from "astro-expressive-code";
2
- import { pluginLineNumbers } from "@expressive-code/plugin-line-numbers";
3
- import { pluginCollapsibleSections } from "@expressive-code/plugin-collapsible-sections";
4
- import { pluginFileIcons } from "@xt0rted/expressive-code-file-icons";
5
-
6
- export default defineEcConfig({
7
- themes: ["min-dark", "min-light"],
8
- // Customize as needed:
9
- styleOverrides: {
10
- borderRadius: "12px",
11
- borderColor: "var(--color-neutral-200)",
12
- borderWidth: "1px",
13
- codeFontSize: "13px",
14
- frames: {
15
- frameBoxShadowCssValue: "var(--shadow-xs)",
16
- inlineButtonBorder: "var(--color-neutral-200)",
17
- inlineButtonBorderOpacity: "1",
18
- copyIcon: `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='14' height='14' x='8' y='8' rx='2' ry='2'/%3E%3Cpath d='M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2'/%3E%3C/svg%3E")`,
19
- },
20
- lineNumbers: {
21
- foreground: "var(--color-neutral-400)",
22
- },
23
- textMarkers: {
24
- markBackground: "var(--color-neutral-100)",
25
- },
26
- collapsibleSections: {
27
- closedBackgroundColor: "var(--color-neutral-200)",
28
- openBackgroundColor: "var(--color-neutral-100)",
29
- openBackgroundColorCollapsible: "var(--color-neutral-100)",
30
- collapseIcon: `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 22v-6'/%3E%3Cpath d='M12 8V2'/%3E%3Cpath d='M4 12H2'/%3E%3Cpath d='M10 12H8'/%3E%3Cpath d='M16 12h-2'/%3E%3Cpath d='M22 12h-2'/%3E%3Cpath d='m15 19-3-3-3 3'/%3E%3Cpath d='m15 5-3 3-3-3'/%3E%3C/svg%3E")`,
31
- expandIcon: `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 22v-6'/%3E%3Cpath d='M12 8V2'/%3E%3Cpath d='M4 12H2'/%3E%3Cpath d='M10 12H8'/%3E%3Cpath d='M16 12h-2'/%3E%3Cpath d='M22 12h-2'/%3E%3Cpath d='m15 19-3 3-3-3'/%3E%3Cpath d='m15 5-3-3-3 3'/%3E%3C/svg%3E")`,
32
- closedTextColor: "var(--color-neutral-500)",
33
- },
34
- // codeFontFamily: '"JetBrains Mono", monospace',
35
- },
36
-
37
- plugins: [
38
- pluginLineNumbers(),
39
- pluginCollapsibleSections(),
40
- // @ts-ignore - plugin types not fully compatible
41
- pluginFileIcons({
42
- iconClass: "size-4",
43
- titleClass: "!flex !items-center !gap-1",
44
- }),
45
- ],
46
- defaultProps: {
47
- wrap: false,
48
- collapseStyle: "collapsible-auto",
49
- showLineNumbers: false,
50
- },
51
- });