specra 0.1.0

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 (142) hide show
  1. package/LICENSE.MD +21 -0
  2. package/README.md +157 -0
  3. package/dist/app/api/mdx-watch/route.d.mts +12 -0
  4. package/dist/app/api/mdx-watch/route.d.ts +12 -0
  5. package/dist/app/api/mdx-watch/route.js +98 -0
  6. package/dist/app/api/mdx-watch/route.js.map +1 -0
  7. package/dist/app/api/mdx-watch/route.mjs +71 -0
  8. package/dist/app/api/mdx-watch/route.mjs.map +1 -0
  9. package/dist/app/docs-page.d.mts +32 -0
  10. package/dist/app/docs-page.d.ts +32 -0
  11. package/dist/app/docs-page.js +4072 -0
  12. package/dist/app/docs-page.js.map +1 -0
  13. package/dist/app/docs-page.mjs +14 -0
  14. package/dist/app/docs-page.mjs.map +1 -0
  15. package/dist/app/layout.css +297 -0
  16. package/dist/app/layout.css.map +1 -0
  17. package/dist/app/layout.d.mts +19 -0
  18. package/dist/app/layout.d.ts +19 -0
  19. package/dist/app/layout.js +112 -0
  20. package/dist/app/layout.js.map +1 -0
  21. package/dist/app/layout.mjs +13 -0
  22. package/dist/app/layout.mjs.map +1 -0
  23. package/dist/chunk-DR4EPLMT.mjs +1013 -0
  24. package/dist/chunk-DR4EPLMT.mjs.map +1 -0
  25. package/dist/chunk-INL2EC72.mjs +170 -0
  26. package/dist/chunk-INL2EC72.mjs.map +1 -0
  27. package/dist/chunk-IZFGEAD6.mjs +61 -0
  28. package/dist/chunk-IZFGEAD6.mjs.map +1 -0
  29. package/dist/chunk-KTRWWAGL.mjs +50 -0
  30. package/dist/chunk-KTRWWAGL.mjs.map +1 -0
  31. package/dist/chunk-MZJHJ6BV.mjs +21 -0
  32. package/dist/chunk-MZJHJ6BV.mjs.map +1 -0
  33. package/dist/chunk-NXRIAL7T.mjs +3119 -0
  34. package/dist/chunk-NXRIAL7T.mjs.map +1 -0
  35. package/dist/components/index.d.mts +822 -0
  36. package/dist/components/index.d.ts +822 -0
  37. package/dist/components/index.js +3738 -0
  38. package/dist/components/index.js.map +1 -0
  39. package/dist/components/index.mjs +3627 -0
  40. package/dist/components/index.mjs.map +1 -0
  41. package/dist/index.css +297 -0
  42. package/dist/index.css.map +1 -0
  43. package/dist/index.d.mts +545 -0
  44. package/dist/index.d.ts +545 -0
  45. package/dist/index.js +4648 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/index.mjs +347 -0
  48. package/dist/index.mjs.map +1 -0
  49. package/dist/lib/index.d.mts +798 -0
  50. package/dist/lib/index.d.ts +798 -0
  51. package/dist/lib/index.js +1301 -0
  52. package/dist/lib/index.js.map +1 -0
  53. package/dist/lib/index.mjs +89 -0
  54. package/dist/lib/index.mjs.map +1 -0
  55. package/package.json +119 -0
  56. package/src/app/api/mdx-watch/route.ts +86 -0
  57. package/src/app/docs-page.tsx +212 -0
  58. package/src/app/layout.tsx +74 -0
  59. package/src/components/docs/accordion.tsx +53 -0
  60. package/src/components/docs/api/api-endpoint.tsx +59 -0
  61. package/src/components/docs/api/api-params.tsx +43 -0
  62. package/src/components/docs/api/api-playground.tsx +233 -0
  63. package/src/components/docs/api/api-reference.tsx +291 -0
  64. package/src/components/docs/api/api-response.tsx +48 -0
  65. package/src/components/docs/api/index.ts +5 -0
  66. package/src/components/docs/badge.tsx +22 -0
  67. package/src/components/docs/breadcrumb.tsx +51 -0
  68. package/src/components/docs/callout.tsx +109 -0
  69. package/src/components/docs/card.tsx +84 -0
  70. package/src/components/docs/category-index.tsx +112 -0
  71. package/src/components/docs/code-block.tsx +129 -0
  72. package/src/components/docs/columns.tsx +45 -0
  73. package/src/components/docs/componentTextProps.ts +85 -0
  74. package/src/components/docs/dev-mode-badge.tsx +35 -0
  75. package/src/components/docs/doc-layout-wrapper.tsx +54 -0
  76. package/src/components/docs/doc-layout.tsx +111 -0
  77. package/src/components/docs/doc-loading.tsx +15 -0
  78. package/src/components/docs/doc-metadata.tsx +55 -0
  79. package/src/components/docs/doc-navigation.tsx +62 -0
  80. package/src/components/docs/doc-tags.tsx +25 -0
  81. package/src/components/docs/draft-badge.tsx +10 -0
  82. package/src/components/docs/footer.tsx +47 -0
  83. package/src/components/docs/frame.tsx +22 -0
  84. package/src/components/docs/header.tsx +122 -0
  85. package/src/components/docs/hot-reload-indicator.tsx +77 -0
  86. package/src/components/docs/icon.tsx +70 -0
  87. package/src/components/docs/image-card.tsx +95 -0
  88. package/src/components/docs/image.tsx +73 -0
  89. package/src/components/docs/index.ts +48 -0
  90. package/src/components/docs/math.tsx +46 -0
  91. package/src/components/docs/mdx-components.tsx +166 -0
  92. package/src/components/docs/mdx-hot-reload.tsx +37 -0
  93. package/src/components/docs/mermaid.tsx +77 -0
  94. package/src/components/docs/mobile-doc-layout.tsx +115 -0
  95. package/src/components/docs/not-found-content.tsx +55 -0
  96. package/src/components/docs/search-highlight.tsx +127 -0
  97. package/src/components/docs/search-modal.tsx +223 -0
  98. package/src/components/docs/sidebar-skeleton.tsx +39 -0
  99. package/src/components/docs/sidebar.tsx +323 -0
  100. package/src/components/docs/site-banner.tsx +92 -0
  101. package/src/components/docs/steps.tsx +29 -0
  102. package/src/components/docs/tab-context.tsx +28 -0
  103. package/src/components/docs/tab-groups.tsx +50 -0
  104. package/src/components/docs/table-of-contents.tsx +104 -0
  105. package/src/components/docs/tabs.tsx +63 -0
  106. package/src/components/docs/theme-toggle.tsx +39 -0
  107. package/src/components/docs/tooltip.tsx +37 -0
  108. package/src/components/docs/version-switcher.tsx +52 -0
  109. package/src/components/docs/video.tsx +80 -0
  110. package/src/components/global/index.ts +3 -0
  111. package/src/components/global/version-not-found.tsx +26 -0
  112. package/src/components/index.ts +8 -0
  113. package/src/components/theme-provider.tsx +11 -0
  114. package/src/components/ui/badge.tsx +46 -0
  115. package/src/components/ui/button.tsx +60 -0
  116. package/src/components/ui/dialog.tsx +143 -0
  117. package/src/components/ui/index.ts +6 -0
  118. package/src/components/ui/input.tsx +21 -0
  119. package/src/components/ui/textarea.tsx +18 -0
  120. package/src/index.ts +41 -0
  121. package/src/lib/api-parser.types.ts +78 -0
  122. package/src/lib/api.types.ts +202 -0
  123. package/src/lib/category.ts +71 -0
  124. package/src/lib/config.server.ts +170 -0
  125. package/src/lib/config.ts +20 -0
  126. package/src/lib/config.types.ts +295 -0
  127. package/src/lib/dev-utils.ts +75 -0
  128. package/src/lib/index.ts +27 -0
  129. package/src/lib/mdx-cache.ts +200 -0
  130. package/src/lib/mdx.ts +402 -0
  131. package/src/lib/parsers/base-parser.ts +16 -0
  132. package/src/lib/parsers/index.ts +69 -0
  133. package/src/lib/parsers/openapi-parser.ts +251 -0
  134. package/src/lib/parsers/postman-parser.ts +301 -0
  135. package/src/lib/parsers/specra-parser.ts +24 -0
  136. package/src/lib/redirects.ts +40 -0
  137. package/src/lib/remark-code-meta.ts +23 -0
  138. package/src/lib/sidebar-utils.ts +188 -0
  139. package/src/lib/toc.ts +24 -0
  140. package/src/lib/utils.ts +36 -0
  141. package/src/specra.config.json +124 -0
  142. package/src/styles/globals.css +427 -0
@@ -0,0 +1,14 @@
1
+ import {
2
+ DocPage,
3
+ generateMetadata,
4
+ generateStaticParams
5
+ } from "../chunk-NXRIAL7T.mjs";
6
+ import "../chunk-MZJHJ6BV.mjs";
7
+ import "../chunk-DR4EPLMT.mjs";
8
+ import "../chunk-INL2EC72.mjs";
9
+ export {
10
+ DocPage as default,
11
+ generateMetadata,
12
+ generateStaticParams
13
+ };
14
+ //# sourceMappingURL=docs-page.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,297 @@
1
+ @import "tailwindcss";
2
+ @import "tw-animate-css";
3
+
4
+ /* src/styles/globals.css */
5
+ @plugin "@tailwindcss/typography";
6
+ @import "katex/dist/katex.min.css";
7
+ @source "../**/*.{js,ts,jsx,tsx}";
8
+ @custom-variant dark (&:is(.dark *));
9
+ :root {
10
+ --background: oklch(0.99 0 0);
11
+ --foreground: oklch(0.12 0 0);
12
+ --card: oklch(1 0 0);
13
+ --card-foreground: oklch(0.12 0 0);
14
+ --popover: oklch(1 0 0);
15
+ --popover-foreground: oklch(0.12 0 0);
16
+ --primary: oklch(27.025% 0.14091 290.376);
17
+ --primary-foreground: oklch(0.99 0 0);
18
+ --secondary: oklch(0.96 0 0);
19
+ --secondary-foreground: oklch(0.15 0 0);
20
+ --muted: oklch(0.96 0 0);
21
+ --muted-foreground: oklch(0.45 0 0);
22
+ --accent: oklch(0.96 0 0);
23
+ --accent-foreground: oklch(0.15 0 0);
24
+ --destructive: oklch(0.55 0.25 27.325);
25
+ --destructive-foreground: oklch(0.99 0 0);
26
+ --border: oklch(0.90 0 0);
27
+ --input: oklch(0.90 0 0);
28
+ --ring: oklch(0.50 0.24 264.376);
29
+ --chart-1: oklch(0.646 0.222 41.116);
30
+ --chart-2: oklch(0.6 0.118 184.704);
31
+ --chart-3: oklch(0.398 0.07 227.392);
32
+ --chart-4: oklch(0.828 0.189 84.429);
33
+ --chart-5: oklch(0.769 0.188 70.08);
34
+ --radius: 0.625rem;
35
+ --sidebar: oklch(0.99 0 0);
36
+ --sidebar-foreground: oklch(0.12 0 0);
37
+ --sidebar-primary: oklch(0.15 0 0);
38
+ --sidebar-primary-foreground: oklch(0.99 0 0);
39
+ --sidebar-accent: oklch(0.96 0 0);
40
+ --sidebar-accent-foreground: oklch(0.15 0 0);
41
+ --sidebar-border: oklch(0.90 0 0);
42
+ --sidebar-ring: oklch(0.50 0.24 264.376);
43
+ }
44
+ .dark {
45
+ --background: oklch(0.09 0 0);
46
+ --foreground: oklch(0.98 0 0);
47
+ --card: oklch(0.12 0 0);
48
+ --card-foreground: oklch(0.98 0 0);
49
+ --popover: oklch(0.12 0 0);
50
+ --popover-foreground: oklch(0.98 0 0);
51
+ --primary: oklch(0.65 0.25 264.376);
52
+ --primary-foreground: oklch(0.98 0 0);
53
+ --secondary: oklch(0.18 0 0);
54
+ --secondary-foreground: oklch(0.98 0 0);
55
+ --muted: oklch(0.18 0 0);
56
+ --muted-foreground: oklch(0.65 0 0);
57
+ --accent: oklch(0.18 0 0);
58
+ --accent-foreground: oklch(0.98 0 0);
59
+ --destructive: oklch(0.55 0.22 27.325);
60
+ --destructive-foreground: oklch(0.98 0 0);
61
+ --border: oklch(0.22 0 0);
62
+ --input: oklch(0.22 0 0);
63
+ --ring: oklch(0.65 0.25 264.376);
64
+ --chart-1: oklch(0.488 0.243 264.376);
65
+ --chart-2: oklch(0.696 0.17 162.48);
66
+ --chart-3: oklch(0.769 0.188 70.08);
67
+ --chart-4: oklch(0.627 0.265 303.9);
68
+ --chart-5: oklch(0.645 0.246 16.439);
69
+ --sidebar: oklch(0.09 0 0);
70
+ --sidebar-foreground: oklch(0.98 0 0);
71
+ --sidebar-primary: oklch(0.65 0.25 264.376);
72
+ --sidebar-primary-foreground: oklch(0.98 0 0);
73
+ --sidebar-accent: oklch(0.18 0 0);
74
+ --sidebar-accent-foreground: oklch(0.98 0 0);
75
+ --sidebar-border: oklch(0.22 0 0);
76
+ --sidebar-ring: oklch(0.65 0.25 264.376);
77
+ --code: oklch(0.75 0.15 264.376);
78
+ --code-bg: oklch(0.12 0 0);
79
+ --code-fg: oklch(0.92 0 0);
80
+ }
81
+ @theme inline { --font-sans: "Geist", "Geist Fallback"; --font-mono: "Geist Mono", "Geist Mono Fallback"; --color-background: var(--background); --color-foreground: var(--foreground); --color-card: var(--card); --color-card-foreground: var(--card-foreground); --color-popover: var(--popover); --color-popover-foreground: var(--popover-foreground); --color-primary: var(--primary); --color-primary-foreground: var(--primary-foreground); --color-secondary: var(--secondary); --color-secondary-foreground: var(--secondary-foreground); --color-muted: var(--muted); --color-muted-foreground: var(--muted-foreground); --color-accent: var(--accent); --color-accent-foreground: var(--accent-foreground); --color-destructive: var(--destructive); --color-destructive-foreground: var(--destructive-foreground); --color-border: var(--border); --color-input: var(--input); --color-ring: var(--ring); --color-chart-1: var(--chart-1); --color-chart-2: var(--chart-2); --color-chart-3: var(--chart-3); --color-chart-4: var(--chart-4); --color-chart-5: var(--chart-5); --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) + 4px); --color-sidebar: var(--sidebar); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); --color-sidebar-accent: var(--sidebar-accent); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-border: var(--sidebar-border); --color-sidebar-ring: var(--sidebar-ring); --color-code: var(--code); --color-code-bg: var(--code-bg); --color-code-fg: var(--code-fg); }
82
+ @layer base {
83
+ * {
84
+ @apply border-border outline-ring/50;
85
+ }
86
+ html {
87
+ scroll-behavior: smooth;
88
+ scrollbar-gutter: stable;
89
+ }
90
+ body {
91
+ @apply bg-background text-foreground;
92
+ }
93
+ a {
94
+ text-decoration: none;
95
+ }
96
+ main .prose a {
97
+ color: var(--color-primary);
98
+ text-decoration: none;
99
+ transition: color 0.2s ease, text-decoration 0.2s ease;
100
+ }
101
+ main .prose a:hover {
102
+ text-decoration: none !important;
103
+ color: var(--color-primary);
104
+ }
105
+ .prose a {
106
+ color: var(--color-primary);
107
+ text-decoration: none !important;
108
+ font-weight: 500;
109
+ }
110
+ .prose a:hover {
111
+ text-decoration: none !important;
112
+ color: var(--color-primary);
113
+ }
114
+ aside a {
115
+ text-decoration: none;
116
+ }
117
+ aside a:hover {
118
+ text-decoration: none;
119
+ }
120
+ .image-card-link,
121
+ .card-link {
122
+ text-decoration: none !important;
123
+ }
124
+ .image-card-link:hover,
125
+ .card-link:hover {
126
+ text-decoration: none !important;
127
+ }
128
+ .image-card-link *,
129
+ .card-link * {
130
+ text-decoration: none !important;
131
+ }
132
+ body::-webkit-scrollbar {
133
+ width: 6px;
134
+ }
135
+ body::-webkit-scrollbar-track {
136
+ background: oklch(0.95 0 0);
137
+ }
138
+ body::-webkit-scrollbar-thumb {
139
+ background: oklch(0.75 0 0);
140
+ border-radius: 6px;
141
+ border: 2px solid oklch(0.95 0 0);
142
+ }
143
+ body::-webkit-scrollbar-thumb:hover {
144
+ background: oklch(0.65 0 0);
145
+ }
146
+ .dark body::-webkit-scrollbar-track {
147
+ background: oklch(0.12 0 0);
148
+ }
149
+ .dark body::-webkit-scrollbar-thumb {
150
+ background: oklch(0.25 0 0);
151
+ border: 2px solid oklch(0.12 0 0);
152
+ }
153
+ .dark body::-webkit-scrollbar-thumb:hover {
154
+ background: oklch(0.35 0 0);
155
+ }
156
+ body {
157
+ scrollbar-width: thin;
158
+ scrollbar-color: oklch(0.75 0 0) oklch(0.95 0 0);
159
+ }
160
+ .dark body {
161
+ scrollbar-color: oklch(0.25 0 0) oklch(0.12 0 0);
162
+ }
163
+ aside::-webkit-scrollbar,
164
+ aside *::-webkit-scrollbar {
165
+ width: 4px;
166
+ }
167
+ aside::-webkit-scrollbar-track,
168
+ aside *::-webkit-scrollbar-track {
169
+ background: transparent;
170
+ }
171
+ aside::-webkit-scrollbar-thumb,
172
+ aside *::-webkit-scrollbar-thumb {
173
+ background: oklch(0.7 0 0 / 0.3);
174
+ border-radius: 4px;
175
+ }
176
+ aside::-webkit-scrollbar-thumb:hover,
177
+ aside *::-webkit-scrollbar-thumb:hover {
178
+ background: oklch(0.6 0 0 / 0.5);
179
+ }
180
+ .dark aside::-webkit-scrollbar-thumb,
181
+ .dark aside *::-webkit-scrollbar-thumb {
182
+ background: oklch(0.5 0 0 / 0.3);
183
+ }
184
+ .dark aside::-webkit-scrollbar-thumb:hover,
185
+ .dark aside *::-webkit-scrollbar-thumb:hover {
186
+ background: oklch(0.6 0 0 / 0.5);
187
+ }
188
+ aside,
189
+ aside * {
190
+ scrollbar-width: thin;
191
+ scrollbar-color: oklch(0.7 0 0 / 0.3) transparent;
192
+ }
193
+ .dark aside,
194
+ .dark aside * {
195
+ scrollbar-color: oklch(0.5 0 0 / 0.3) transparent;
196
+ }
197
+ .token-comment {
198
+ color: #008000;
199
+ font-style: italic;
200
+ }
201
+ .token-string {
202
+ color: #a31515;
203
+ }
204
+ .token-keyword {
205
+ color: #0000ff;
206
+ font-weight: 600;
207
+ }
208
+ .token-number {
209
+ color: #098658;
210
+ }
211
+ .token-function {
212
+ color: #795e26;
213
+ }
214
+ .token-operator {
215
+ color: #000000;
216
+ }
217
+ .token-property {
218
+ color: #001080;
219
+ }
220
+ .token-punctuation {
221
+ color: #000000;
222
+ }
223
+ .token-text {
224
+ color: #000000;
225
+ }
226
+ .dark .token-comment {
227
+ color: #6a9955;
228
+ }
229
+ .dark .token-string {
230
+ color: #ce9178;
231
+ }
232
+ .dark .token-keyword {
233
+ color: #569cd6;
234
+ }
235
+ .dark .token-number {
236
+ color: #b5cea8;
237
+ }
238
+ .dark .token-function {
239
+ color: #dcdcaa;
240
+ }
241
+ .dark .token-operator {
242
+ color: #d4d4d4;
243
+ }
244
+ .dark .token-property {
245
+ color: #9cdcfe;
246
+ }
247
+ .dark .token-punctuation {
248
+ color: #d4d4d4;
249
+ }
250
+ .dark .token-text {
251
+ color: #d4d4d4;
252
+ }
253
+ }
254
+ pre code {
255
+ background: none;
256
+ border: none;
257
+ }
258
+ .prose h1 {
259
+ font-weight: 700;
260
+ margin-top: 1.5rem;
261
+ margin-bottom: 0.75rem;
262
+ }
263
+ .prose h2 {
264
+ font-weight: 600;
265
+ margin-top: 2rem;
266
+ margin-bottom: 0.75rem;
267
+ }
268
+ .prose h3 {
269
+ font-weight: 600;
270
+ margin-top: 1.5rem;
271
+ margin-bottom: 0.5rem;
272
+ }
273
+ .prose h4 {
274
+ font-weight: 600;
275
+ margin-top: 1.25rem;
276
+ margin-bottom: 0.5rem;
277
+ }
278
+ .prose h5 {
279
+ font-weight: 500;
280
+ margin-top: 1rem;
281
+ margin-bottom: 0.5rem;
282
+ }
283
+ .prose h6 {
284
+ font-weight: 500;
285
+ margin-top: 1rem;
286
+ margin-bottom: 0.5rem;
287
+ }
288
+ .prose p {
289
+ margin-top: 0.5rem;
290
+ margin-bottom: 0.75rem;
291
+ }
292
+ html body[data-scroll-locked] {
293
+ overflow: visible !important;
294
+ margin-right: 0 !important;
295
+ padding-right: 0 !important;
296
+ }
297
+ /*# sourceMappingURL=layout.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/styles/globals.css"],"sourcesContent":["@import \"tailwindcss\";\n@import \"tw-animate-css\";\n@plugin \"@tailwindcss/typography\";\n@import \"katex/dist/katex.min.css\";\n\n/* Scan SDK source files for Tailwind utilities */\n@source \"../**/*.{js,ts,jsx,tsx}\";\n\n@custom-variant dark (&:is(.dark *));\n\n:root {\n --background: oklch(0.99 0 0);\n --foreground: oklch(0.12 0 0);\n --card: oklch(1 0 0);\n --card-foreground: oklch(0.12 0 0);\n --popover: oklch(1 0 0);\n --popover-foreground: oklch(0.12 0 0);\n /* --primary: oklch(0.50 0.24 264.376); */\n --primary: oklch(27.025% 0.14091 290.376);\n --primary-foreground: oklch(0.99 0 0);\n --secondary: oklch(0.96 0 0);\n --secondary-foreground: oklch(0.15 0 0);\n --muted: oklch(0.96 0 0);\n --muted-foreground: oklch(0.45 0 0);\n --accent: oklch(0.96 0 0);\n --accent-foreground: oklch(0.15 0 0);\n --destructive: oklch(0.55 0.25 27.325);\n --destructive-foreground: oklch(0.99 0 0);\n --border: oklch(0.90 0 0);\n --input: oklch(0.90 0 0);\n --ring: oklch(0.50 0.24 264.376);\n --chart-1: oklch(0.646 0.222 41.116);\n --chart-2: oklch(0.6 0.118 184.704);\n --chart-3: oklch(0.398 0.07 227.392);\n --chart-4: oklch(0.828 0.189 84.429);\n --chart-5: oklch(0.769 0.188 70.08);\n --radius: 0.625rem;\n --sidebar: oklch(0.99 0 0);\n --sidebar-foreground: oklch(0.12 0 0);\n --sidebar-primary: oklch(0.15 0 0);\n --sidebar-primary-foreground: oklch(0.99 0 0);\n --sidebar-accent: oklch(0.96 0 0);\n --sidebar-accent-foreground: oklch(0.15 0 0);\n --sidebar-border: oklch(0.90 0 0);\n --sidebar-ring: oklch(0.50 0.24 264.376);\n}\n\n.dark {\n /* Updated dark theme to match Vercel/Mintlify documentation aesthetic */\n --background: oklch(0.09 0 0);\n --foreground: oklch(0.98 0 0);\n --card: oklch(0.12 0 0);\n --card-foreground: oklch(0.98 0 0);\n --popover: oklch(0.12 0 0);\n --popover-foreground: oklch(0.98 0 0);\n --primary: oklch(0.65 0.25 264.376);\n --primary-foreground: oklch(0.98 0 0);\n --secondary: oklch(0.18 0 0);\n --secondary-foreground: oklch(0.98 0 0);\n --muted: oklch(0.18 0 0);\n --muted-foreground: oklch(0.65 0 0);\n --accent: oklch(0.18 0 0);\n --accent-foreground: oklch(0.98 0 0);\n --destructive: oklch(0.55 0.22 27.325);\n --destructive-foreground: oklch(0.98 0 0);\n --border: oklch(0.22 0 0);\n --input: oklch(0.22 0 0);\n --ring: oklch(0.65 0.25 264.376);\n --chart-1: oklch(0.488 0.243 264.376);\n --chart-2: oklch(0.696 0.17 162.48);\n --chart-3: oklch(0.769 0.188 70.08);\n --chart-4: oklch(0.627 0.265 303.9);\n --chart-5: oklch(0.645 0.246 16.439);\n --sidebar: oklch(0.09 0 0);\n --sidebar-foreground: oklch(0.98 0 0);\n --sidebar-primary: oklch(0.65 0.25 264.376);\n --sidebar-primary-foreground: oklch(0.98 0 0);\n --sidebar-accent: oklch(0.18 0 0);\n --sidebar-accent-foreground: oklch(0.98 0 0);\n --sidebar-border: oklch(0.22 0 0);\n --sidebar-ring: oklch(0.65 0.25 264.376);\n\n /* Added custom tokens for code blocks */\n --code: oklch(0.75 0.15 264.376);\n --code-bg: oklch(0.12 0 0);\n --code-fg: oklch(0.92 0 0);\n}\n\n@theme inline {\n --font-sans: \"Geist\", \"Geist Fallback\";\n --font-mono: \"Geist Mono\", \"Geist Mono Fallback\";\n --color-background: var(--background);\n --color-foreground: var(--foreground);\n --color-card: var(--card);\n --color-card-foreground: var(--card-foreground);\n --color-popover: var(--popover);\n --color-popover-foreground: var(--popover-foreground);\n --color-primary: var(--primary);\n --color-primary-foreground: var(--primary-foreground);\n --color-secondary: var(--secondary);\n --color-secondary-foreground: var(--secondary-foreground);\n --color-muted: var(--muted);\n --color-muted-foreground: var(--muted-foreground);\n --color-accent: var(--accent);\n --color-accent-foreground: var(--accent-foreground);\n --color-destructive: var(--destructive);\n --color-destructive-foreground: var(--destructive-foreground);\n --color-border: var(--border);\n --color-input: var(--input);\n --color-ring: var(--ring);\n --color-chart-1: var(--chart-1);\n --color-chart-2: var(--chart-2);\n --color-chart-3: var(--chart-3);\n --color-chart-4: var(--chart-4);\n --color-chart-5: var(--chart-5);\n --radius-sm: calc(var(--radius) - 4px);\n --radius-md: calc(var(--radius) - 2px);\n --radius-lg: var(--radius);\n --radius-xl: calc(var(--radius) + 4px);\n --color-sidebar: var(--sidebar);\n --color-sidebar-foreground: var(--sidebar-foreground);\n --color-sidebar-primary: var(--sidebar-primary);\n --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\n --color-sidebar-accent: var(--sidebar-accent);\n --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\n --color-sidebar-border: var(--sidebar-border);\n --color-sidebar-ring: var(--sidebar-ring);\n\n /* Added code color tokens */\n --color-code: var(--code);\n --color-code-bg: var(--code-bg);\n --color-code-fg: var(--code-fg);\n}\n\n@layer base {\n * {\n @apply border-border outline-ring/50;\n }\n\n html {\n scroll-behavior: smooth;\n /* Always reserve space for scrollbar to prevent layout shift */\n scrollbar-gutter: stable;\n }\n\n body {\n @apply bg-background text-foreground;\n }\n\n a {\n text-decoration: none;\n }\n\n /* Link styling - primary color, no underline until hover */\n main .prose a {\n color: var(--color-primary);\n text-decoration: none;\n transition: color 0.2s ease, text-decoration 0.2s ease;\n }\n\n main .prose a:hover {\n text-decoration: none !important;\n color: var(--color-primary);\n }\n\n /* Prose links in documentation */\n .prose a {\n color: var(--color-primary);\n text-decoration: none !important;\n font-weight: 500;\n }\n\n .prose a:hover {\n text-decoration: none !important;\n color: var(--color-primary);\n }\n\n /* Sidebar links - no underline on hover */\n aside a {\n text-decoration: none;\n }\n\n aside a:hover {\n text-decoration: none;\n }\n\n /* Card and ImageCard links - never underline */\n .image-card-link,\n .card-link {\n text-decoration: none !important;\n }\n\n .image-card-link:hover,\n .card-link:hover {\n text-decoration: none !important;\n }\n\n .image-card-link *,\n .card-link * {\n text-decoration: none !important;\n }\n\n /* Custom scrollbar styling for body only */\n body::-webkit-scrollbar {\n width: 6px;\n }\n\n body::-webkit-scrollbar-track {\n background: oklch(0.95 0 0);\n }\n\n body::-webkit-scrollbar-thumb {\n background: oklch(0.75 0 0);\n border-radius: 6px;\n border: 2px solid oklch(0.95 0 0);\n }\n\n body::-webkit-scrollbar-thumb:hover {\n background: oklch(0.65 0 0);\n }\n\n /* Dark mode body scrollbar */\n .dark body::-webkit-scrollbar-track {\n background: oklch(0.12 0 0);\n }\n\n .dark body::-webkit-scrollbar-thumb {\n background: oklch(0.25 0 0);\n border: 2px solid oklch(0.12 0 0);\n }\n\n .dark body::-webkit-scrollbar-thumb:hover {\n background: oklch(0.35 0 0);\n }\n\n /* Firefox scrollbar for body only */\n body {\n scrollbar-width: thin;\n scrollbar-color: oklch(0.75 0 0) oklch(0.95 0 0);\n }\n\n .dark body {\n scrollbar-color: oklch(0.25 0 0) oklch(0.12 0 0);\n }\n\n /* Sidebar scrollbar styling - thin and subtle */\n aside::-webkit-scrollbar,\n aside *::-webkit-scrollbar {\n width: 4px;\n }\n\n aside::-webkit-scrollbar-track,\n aside *::-webkit-scrollbar-track {\n background: transparent;\n }\n\n aside::-webkit-scrollbar-thumb,\n aside *::-webkit-scrollbar-thumb {\n background: oklch(0.7 0 0 / 0.3);\n border-radius: 4px;\n }\n\n aside::-webkit-scrollbar-thumb:hover,\n aside *::-webkit-scrollbar-thumb:hover {\n background: oklch(0.6 0 0 / 0.5);\n }\n\n /* Dark mode sidebar scrollbar */\n .dark aside::-webkit-scrollbar-thumb,\n .dark aside *::-webkit-scrollbar-thumb {\n background: oklch(0.5 0 0 / 0.3);\n }\n\n .dark aside::-webkit-scrollbar-thumb:hover,\n .dark aside *::-webkit-scrollbar-thumb:hover {\n background: oklch(0.6 0 0 / 0.5);\n }\n\n /* Firefox sidebar scrollbar */\n aside,\n aside * {\n scrollbar-width: thin;\n scrollbar-color: oklch(0.7 0 0 / 0.3) transparent;\n }\n\n .dark aside,\n .dark aside * {\n scrollbar-color: oklch(0.5 0 0 / 0.3) transparent;\n }\n\n /* Light mode syntax highlighting - VS Code Light+ theme */\n .token-comment {\n color: #008000;\n font-style: italic;\n }\n\n .token-string {\n color: #a31515;\n }\n\n .token-keyword {\n color: #0000ff;\n font-weight: 600;\n }\n\n .token-number {\n color: #098658;\n }\n\n .token-function {\n color: #795e26;\n }\n\n .token-operator {\n color: #000000;\n }\n\n .token-property {\n color: #001080;\n }\n\n .token-punctuation {\n color: #000000;\n }\n\n .token-text {\n color: #000000;\n }\n\n /* Dark mode syntax highlighting - VS Code Dark+ theme */\n .dark .token-comment {\n color: #6a9955;\n }\n\n .dark .token-string {\n color: #ce9178;\n }\n\n .dark .token-keyword {\n color: #569cd6;\n }\n\n .dark .token-number {\n color: #b5cea8;\n }\n\n .dark .token-function {\n color: #dcdcaa;\n }\n\n .dark .token-operator {\n color: #d4d4d4;\n }\n\n .dark .token-property {\n color: #9cdcfe;\n }\n\n .dark .token-punctuation {\n color: #d4d4d4;\n }\n\n .dark .token-text {\n color: #d4d4d4;\n }\n}\n\n\npre code {\n background: none;\n border: none;\n}\n\n/* Heading styles - lighter weight and reduced margins */\n.prose h1 {\n font-weight: 700;\n margin-top: 1.5rem;\n margin-bottom: 0.75rem;\n}\n\n.prose h2 {\n font-weight: 600;\n margin-top: 2rem;\n margin-bottom: 0.75rem;\n}\n\n.prose h3 {\n font-weight: 600;\n margin-top: 1.5rem;\n margin-bottom: 0.5rem;\n}\n\n.prose h4 {\n font-weight: 600;\n margin-top: 1.25rem;\n margin-bottom: 0.5rem;\n}\n\n.prose h5 {\n font-weight: 500;\n margin-top: 1rem;\n margin-bottom: 0.5rem;\n}\n\n.prose h6 {\n font-weight: 500;\n margin-top: 1rem;\n margin-bottom: 0.5rem;\n}\n\n/* Paragraph styles - reduced margins */\n.prose p {\n margin-top: 0.5rem;\n margin-bottom: 0.75rem;\n}\n\n/* Prevent layout shift when dialog opens */\n/* html {\n scrollbar-gutter: stable;\n} */\n\n\nhtml body[data-scroll-locked] {\n overflow: visible !important;\n margin-right: 0 !important;\n padding-right: 0 !important;\n}"],"mappings":"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","names":[]}
@@ -0,0 +1,19 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React__default from 'react';
3
+ import { Metadata } from 'next';
4
+
5
+ /**
6
+ * Generate metadata for the root layout
7
+ * This can be imported and used by the user's app/layout.tsx
8
+ */
9
+ declare function generateMetadata(): Metadata;
10
+ declare const metadata: Metadata;
11
+ /**
12
+ * Root layout component for Specra documentation sites
13
+ * This provides the HTML structure and global providers
14
+ */
15
+ declare function RootLayout({ children, }: Readonly<{
16
+ children: React__default.ReactNode;
17
+ }>): react_jsx_runtime.JSX.Element;
18
+
19
+ export { RootLayout as default, generateMetadata, metadata };
@@ -0,0 +1,19 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React__default from 'react';
3
+ import { Metadata } from 'next';
4
+
5
+ /**
6
+ * Generate metadata for the root layout
7
+ * This can be imported and used by the user's app/layout.tsx
8
+ */
9
+ declare function generateMetadata(): Metadata;
10
+ declare const metadata: Metadata;
11
+ /**
12
+ * Root layout component for Specra documentation sites
13
+ * This provides the HTML structure and global providers
14
+ */
15
+ declare function RootLayout({ children, }: Readonly<{
16
+ children: React__default.ReactNode;
17
+ }>): react_jsx_runtime.JSX.Element;
18
+
19
+ export { RootLayout as default, generateMetadata, metadata };
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/app/layout.tsx
21
+ var layout_exports = {};
22
+ __export(layout_exports, {
23
+ default: () => RootLayout,
24
+ generateMetadata: () => generateMetadata,
25
+ metadata: () => metadata
26
+ });
27
+ module.exports = __toCommonJS(layout_exports);
28
+ var import_google = require("next/font/google");
29
+
30
+ // src/lib/config.server.ts
31
+ var configInstance = null;
32
+ function getConfig() {
33
+ if (!configInstance) {
34
+ throw new Error("Specra config has not been initialized");
35
+ }
36
+ return configInstance;
37
+ }
38
+
39
+ // src/lib/utils.ts
40
+ var import_clsx = require("clsx");
41
+ var import_tailwind_merge = require("tailwind-merge");
42
+ function getAssetPath(path) {
43
+ const basePath = process.env.NEXT_PUBLIC_BASE_PATH || process.env.__NEXT_ROUTER_BASEPATH || "";
44
+ const normalizedPath = path.startsWith("/") ? path : `/${path}`;
45
+ if (basePath) {
46
+ const normalizedBase = basePath.startsWith("/") ? basePath : `/${basePath}`;
47
+ const cleanBase = normalizedBase.replace(/\/$/, "");
48
+ return `${cleanBase}${normalizedPath}`;
49
+ }
50
+ return normalizedPath;
51
+ }
52
+
53
+ // src/components/docs/tab-context.tsx
54
+ var import_react = require("react");
55
+ var import_jsx_runtime = require("react/jsx-runtime");
56
+ var TabContext = (0, import_react.createContext)(void 0);
57
+ function TabProvider({ children, defaultTab }) {
58
+ const [activeTabGroup, setActiveTabGroup] = (0, import_react.useState)(defaultTab);
59
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TabContext.Provider, { value: { activeTabGroup, setActiveTabGroup }, children });
60
+ }
61
+
62
+ // src/app/layout.tsx
63
+ var import_jsx_runtime2 = require("react/jsx-runtime");
64
+ var geist = (0, import_google.Geist)({ subsets: ["latin"] });
65
+ var geistMono = (0, import_google.Geist_Mono)({ subsets: ["latin"] });
66
+ function generateMetadata() {
67
+ const config = getConfig();
68
+ return {
69
+ title: {
70
+ default: config.site.title,
71
+ template: `%s | ${config.site.title}`
72
+ },
73
+ description: config.site.description || "Modern documentation platform",
74
+ generator: "Specra Documentation",
75
+ metadataBase: config.site.url ? new URL(config.site.url) : void 0,
76
+ icons: {
77
+ icon: getAssetPath(config.site.favicon ?? "") ? [
78
+ {
79
+ url: getAssetPath(config.site.favicon ?? "")
80
+ }
81
+ ] : [],
82
+ apple: getAssetPath("/apple-icon.png")
83
+ },
84
+ openGraph: {
85
+ title: config.site.title,
86
+ description: config.site.description,
87
+ url: config.site.url,
88
+ siteName: config.site.title,
89
+ locale: config.site.language || "en",
90
+ type: "website"
91
+ },
92
+ twitter: {
93
+ card: "summary_large_image",
94
+ title: config.site.title,
95
+ description: config.site.description
96
+ }
97
+ };
98
+ }
99
+ var metadata = generateMetadata();
100
+ function RootLayout({
101
+ children
102
+ }) {
103
+ const config = getConfig();
104
+ const defaultTab = config.navigation?.tabGroups?.[0]?.id || "";
105
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("html", { lang: config.site.language || "en", suppressHydrationWarning: true, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("body", { className: `${geist.className} font-sans antialiased`, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(TabProvider, { defaultTab, children }) }) });
106
+ }
107
+ // Annotate the CommonJS export names for ESM import in node:
108
+ 0 && (module.exports = {
109
+ generateMetadata,
110
+ metadata
111
+ });
112
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/app/layout.tsx","../../src/lib/config.server.ts","../../src/lib/utils.ts","../../src/components/docs/tab-context.tsx"],"sourcesContent":["import type React from \"react\"\nimport type { Metadata } from \"next\"\nimport { Geist, Geist_Mono } from \"next/font/google\"\nimport { getConfig } from \"../lib/config\"\nimport { getAssetPath } from \"../lib/utils\"\nimport { TabProvider } from \"../components/docs/tab-context\"\nimport \"../styles/globals.css\"\n\nconst geist = Geist({ subsets: [\"latin\"] })\nconst geistMono = Geist_Mono({ subsets: [\"latin\"] })\n\n/**\n * Generate metadata for the root layout\n * This can be imported and used by the user's app/layout.tsx\n */\nexport function generateMetadata(): Metadata {\n const config = getConfig()\n\n return {\n title: {\n default: config.site.title,\n template: `%s | ${config.site.title}`,\n },\n description: config.site.description || \"Modern documentation platform\",\n generator: \"Specra Documentation\",\n metadataBase: config.site.url ? new URL(config.site.url) : undefined,\n icons: {\n icon: getAssetPath(config.site.favicon ?? \"\") ? [\n {\n url: getAssetPath(config.site.favicon ?? \"\"),\n },\n ] : [],\n apple: getAssetPath(\"/apple-icon.png\"),\n },\n openGraph: {\n title: config.site.title,\n description: config.site.description,\n url: config.site.url,\n siteName: config.site.title,\n locale: config.site.language || \"en\",\n type: \"website\",\n },\n twitter: {\n card: \"summary_large_image\",\n title: config.site.title,\n description: config.site.description,\n },\n }\n}\n\nexport const metadata: Metadata = generateMetadata()\n\n/**\n * Root layout component for Specra documentation sites\n * This provides the HTML structure and global providers\n */\nexport default function RootLayout({\n children,\n}: Readonly<{\n children: React.ReactNode\n}>) {\n const config = getConfig()\n const defaultTab = config.navigation?.tabGroups?.[0]?.id || \"\"\n\n return (\n <html lang={config.site.language || \"en\"} suppressHydrationWarning>\n <body className={`${geist.className} font-sans antialiased`}>\n <TabProvider defaultTab={defaultTab}>\n {children}\n </TabProvider>\n </body>\n </html>\n )\n}","import specraConfigJson from \"../specra.config.json\"\nimport { SpecraConfig, defaultConfig } from \"./config.types\"\n\n/**\n * Deep merge two objects\n */\nfunction deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T {\n const result = { ...target }\n\n for (const key in source) {\n const sourceValue = source[key]\n const targetValue = result[key]\n\n if (sourceValue && typeof sourceValue === \"object\" && !Array.isArray(sourceValue)) {\n result[key] = deepMerge(\n targetValue && typeof targetValue === \"object\" ? targetValue : {},\n sourceValue,\n ) as T[Extract<keyof T, string>]\n } else if (sourceValue !== undefined) {\n result[key] = sourceValue as T[Extract<keyof T, string>]\n }\n }\n\n return result\n}\n\n/**\n * Load and parse the Specra configuration file\n * Falls back to default configuration if file doesn't exist or is invalid\n */\nexport function loadConfig(userConfig: Partial<SpecraConfig>): SpecraConfig {\n try {\n // const userConfig = specraConfigJson as unknown as Partial<SpecraConfig>\n\n // Merge user config with defaults \n const config = deepMerge(defaultConfig, userConfig)\n\n return config\n } catch (error) {\n console.error(`❌ Error loading configuration:`, error)\n console.warn(\"Using default configuration.\")\n return defaultConfig\n }\n}\n\n/**\n * Get a specific configuration value by path (SERVER ONLY)\n * Example: getConfigValue('site.title') or getConfigValue('theme.defaultMode')\n */\nexport function getConfigValue<T = any>(path: string, config?: SpecraConfig): T | undefined {\n const cfg = config || loadConfig({})\n const keys = path.split(\".\")\n let value: any = cfg\n\n for (const key of keys) {\n if (value && typeof value === \"object\" && key in value) {\n value = value[key]\n } else {\n return undefined\n }\n }\n\n return value as T\n}\n\n/**\n * Replace environment variables in a string (SERVER ONLY)\n * Supports ${ENV_VAR} and {{ENV_VAR}} syntax\n */\nexport function replaceEnvVariables(text: string, config?: SpecraConfig): string {\n const cfg = config || loadConfig({})\n const envVars = cfg.env || {}\n\n let result = text\n\n // Replace ${VAR} syntax\n result = result.replace(/\\$\\{([^}]+)\\}/g, (match, varName) => {\n return envVars[varName] || match\n })\n\n // Replace {{VAR}} syntax\n result = result.replace(/\\{\\{([^}]+)\\}\\}/g, (match, varName) => {\n return envVars[varName] || match\n })\n\n return result\n}\n\n/**\n * Process content and replace all environment variables (SERVER ONLY)\n */\nexport function processContentWithEnv(content: string, config?: SpecraConfig): string {\n return replaceEnvVariables(content, config)\n}\n\n/**\n * Validate configuration (basic validation) (SERVER ONLY)\n */\nexport function validateConfig(config: SpecraConfig): { valid: boolean; errors: string[] } {\n const errors: string[] = []\n\n // Required fields\n if (!config.site?.title) {\n errors.push(\"site.title is required\")\n }\n\n // URL validation\n if (config.site?.url) {\n try {\n new URL(config.site.url)\n } catch {\n errors.push(\"site.url must be a valid URL\")\n }\n }\n\n // Social links validation\n if (config.social) {\n const socialKeys = [\"github\", \"twitter\", \"discord\", \"linkedin\", \"youtube\"] as const\n for (const key of socialKeys) {\n const url = config.social[key]\n if (url) {\n try {\n new URL(url)\n } catch {\n errors.push(`social.${key} must be a valid URL`)\n }\n }\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n }\n}\n\n// Singleton instance\nlet configInstance: SpecraConfig | null = null\n\nexport function initConfig(userConfig: Partial<SpecraConfig>): SpecraConfig {\n if (configInstance) {\n throw new Error(\"Specra config has already been initialized\")\n }\n\n configInstance = loadConfig(userConfig)\n return configInstance\n}\n\n/**\n * Get the configuration instance (cached) (SERVER ONLY)\n */\nexport function getConfig(): SpecraConfig {\n if (!configInstance) {\n throw new Error(\"Specra config has not been initialized\")\n }\n return configInstance\n}\n\n/**\n * Reload the configuration (useful for development) (SERVER ONLY)\n */\nexport function reloadConfig(userConfig: Partial<SpecraConfig>): SpecraConfig {\n configInstance = loadConfig(userConfig)\n return configInstance\n}\n\n/**\n * Export the loaded config as default (SERVER ONLY)\n */\n// export default getConfig()\n","import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n\n/**\n * Get the correct asset path based on deployment configuration\n * Handles different deployment scenarios:\n * - Vercel/Node.js hosting (standalone build): No basePath needed\n * - GitHub Pages without custom domain: Uses basePath from config\n * - Static hosting with custom domain: No basePath needed\n *\n * @param path - The asset path (can start with or without '/')\n * @returns The properly formatted asset path\n */\nexport function getAssetPath(path: string): string {\n // Get basePath from Next.js config (set during build for static exports)\n const basePath = process.env.NEXT_PUBLIC_BASE_PATH || process.env.__NEXT_ROUTER_BASEPATH || ''\n\n // Normalize the input path: ensure it starts with '/'\n const normalizedPath = path.startsWith('/') ? path : `/${path}`\n\n // If we have a basePath (GitHub Pages without custom domain), prepend it\n if (basePath) {\n // Normalize basePath: remove trailing slash, ensure leading slash\n const normalizedBase = basePath.startsWith('/') ? basePath : `/${basePath}`\n const cleanBase = normalizedBase.replace(/\\/$/, '')\n return `${cleanBase}${normalizedPath}`\n }\n\n // Default: return the normalized path (works for Vercel, custom domains, and dev)\n return normalizedPath\n}","\"use client\"\n\nimport { createContext, useContext, useState, ReactNode } from \"react\"\n\ninterface TabContextType {\n activeTabGroup: string\n setActiveTabGroup: (tabId: string) => void\n}\n\nconst TabContext = createContext<TabContextType | undefined>(undefined)\n\nexport function TabProvider({ children, defaultTab }: { children: ReactNode; defaultTab: string }) {\n const [activeTabGroup, setActiveTabGroup] = useState(defaultTab)\n\n return (\n <TabContext.Provider value={{ activeTabGroup, setActiveTabGroup }}>\n {children}\n </TabContext.Provider>\n )\n}\n\nexport function useTabContext() {\n const context = useContext(TabContext)\n if (!context) {\n throw new Error(\"useTabContext must be used within TabProvider\")\n }\n return context\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,oBAAkC;;;ACuIlC,IAAI,iBAAsC;AAcnC,SAAS,YAA0B;AACxC,MAAI,CAAC,gBAAgB;AACnB,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AACA,SAAO;AACT;;;AC5JA,kBAAsC;AACtC,4BAAwB;AAiBjB,SAAS,aAAa,MAAsB;AAEjD,QAAM,WAAW,QAAQ,IAAI,yBAAyB,QAAQ,IAAI,0BAA0B;AAG5F,QAAM,iBAAiB,KAAK,WAAW,GAAG,IAAI,OAAO,IAAI,IAAI;AAG7D,MAAI,UAAU;AAEZ,UAAM,iBAAiB,SAAS,WAAW,GAAG,IAAI,WAAW,IAAI,QAAQ;AACzE,UAAM,YAAY,eAAe,QAAQ,OAAO,EAAE;AAClD,WAAO,GAAG,SAAS,GAAG,cAAc;AAAA,EACtC;AAGA,SAAO;AACT;;;ACjCA,mBAA+D;AAa3D;AANJ,IAAM,iBAAa,4BAA0C,MAAS;AAE/D,SAAS,YAAY,EAAE,UAAU,WAAW,GAAgD;AACjG,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,uBAAS,UAAU;AAE/D,SACE,4CAAC,WAAW,UAAX,EAAoB,OAAO,EAAE,gBAAgB,kBAAkB,GAC7D,UACH;AAEJ;;;AHgDQ,IAAAA,sBAAA;AA3DR,IAAM,YAAQ,qBAAM,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;AAC1C,IAAM,gBAAY,0BAAW,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;AAM5C,SAAS,mBAA6B;AAC3C,QAAM,SAAS,UAAU;AAEzB,SAAO;AAAA,IACL,OAAO;AAAA,MACL,SAAS,OAAO,KAAK;AAAA,MACrB,UAAU,QAAQ,OAAO,KAAK,KAAK;AAAA,IACrC;AAAA,IACA,aAAa,OAAO,KAAK,eAAe;AAAA,IACxC,WAAW;AAAA,IACX,cAAc,OAAO,KAAK,MAAM,IAAI,IAAI,OAAO,KAAK,GAAG,IAAI;AAAA,IAC3D,OAAO;AAAA,MACL,MAAM,aAAa,OAAO,KAAK,WAAW,EAAE,IAAI;AAAA,QAC9C;AAAA,UACE,KAAK,aAAa,OAAO,KAAK,WAAW,EAAE;AAAA,QAC7C;AAAA,MACF,IAAI,CAAC;AAAA,MACL,OAAO,aAAa,iBAAiB;AAAA,IACvC;AAAA,IACA,WAAW;AAAA,MACT,OAAO,OAAO,KAAK;AAAA,MACnB,aAAa,OAAO,KAAK;AAAA,MACzB,KAAK,OAAO,KAAK;AAAA,MACjB,UAAU,OAAO,KAAK;AAAA,MACtB,QAAQ,OAAO,KAAK,YAAY;AAAA,MAChC,MAAM;AAAA,IACR;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO,OAAO,KAAK;AAAA,MACnB,aAAa,OAAO,KAAK;AAAA,IAC3B;AAAA,EACF;AACF;AAEO,IAAM,WAAqB,iBAAiB;AAMpC,SAAR,WAA4B;AAAA,EACjC;AACF,GAEI;AACF,QAAM,SAAS,UAAU;AACzB,QAAM,aAAa,OAAO,YAAY,YAAY,CAAC,GAAG,MAAM;AAE5D,SACE,6CAAC,UAAK,MAAM,OAAO,KAAK,YAAY,MAAM,0BAAwB,MAChE,uDAAC,UAAK,WAAW,GAAG,MAAM,SAAS,0BACjC,uDAAC,eAAY,YACV,UACH,GACF,GACF;AAEJ;","names":["import_jsx_runtime"]}
@@ -0,0 +1,13 @@
1
+ import {
2
+ RootLayout,
3
+ generateMetadata,
4
+ metadata
5
+ } from "../chunk-IZFGEAD6.mjs";
6
+ import "../chunk-MZJHJ6BV.mjs";
7
+ import "../chunk-INL2EC72.mjs";
8
+ export {
9
+ RootLayout as default,
10
+ generateMetadata,
11
+ metadata
12
+ };
13
+ //# sourceMappingURL=layout.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}