@wrikka/create-docs 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 (380) hide show
  1. package/README.md +137 -0
  2. package/bin/cli.js +408 -0
  3. package/dist/index.cjs +20 -0
  4. package/dist/index.d.cts +475 -0
  5. package/dist/index.d.ts +475 -0
  6. package/dist/index.js +20 -0
  7. package/docs/_dir.yml +2 -0
  8. package/docs/config.md +75 -0
  9. package/docs/data-sources.md +88 -0
  10. package/docs/deploy.md +38 -0
  11. package/docs/features.md +51 -0
  12. package/docs/getting-started.md +42 -0
  13. package/docs/index.md +34 -0
  14. package/docs/markdown.md +154 -0
  15. package/docs/theming.md +53 -0
  16. package/package.json +142 -0
  17. package/scripts/generate-docs-index.ts +111 -0
  18. package/scripts/github-pull.ts +124 -0
  19. package/src/adapters/config/index.ts +1 -0
  20. package/src/adapters/config/node-config-loader.ts +36 -0
  21. package/src/adapters/fs/fs-docs-loader.ts +31 -0
  22. package/src/adapters/fs/index.ts +12 -0
  23. package/src/adapters/fs/memory-fs.ts +60 -0
  24. package/src/adapters/fs/node-fs.ts +116 -0
  25. package/src/adapters/git/index.ts +164 -0
  26. package/src/adapters/github/github-pull.ts +340 -0
  27. package/src/adapters/index.ts +6 -0
  28. package/src/adapters/velite.ts +112 -0
  29. package/src/adapters/vite/docs-watcher.ts +36 -0
  30. package/src/adapters/vite/index.ts +2 -0
  31. package/src/adapters/vite/polling-watcher.ts +89 -0
  32. package/src/code-block-enhancements/index.ts +3 -0
  33. package/src/config/index.ts +15 -0
  34. package/src/content/index.ts +11 -0
  35. package/src/content-validation/index.ts +5 -0
  36. package/src/index.ts +174 -0
  37. package/src/live-editor/index.ts +7 -0
  38. package/src/modules/analytics/application/plausible-adapter.ts +103 -0
  39. package/src/modules/analytics/application/umami-adapter.ts +109 -0
  40. package/src/modules/analytics/domain/events/index.ts +37 -0
  41. package/src/modules/analytics/domain/models/index.ts +35 -0
  42. package/src/modules/analytics/domain/operations/analytics-operations.ts +67 -0
  43. package/src/modules/analytics/domain/validators/index.ts +50 -0
  44. package/src/modules/analytics/index.ts +9 -0
  45. package/src/modules/analytics/ports/analytics-port.ts +17 -0
  46. package/src/modules/analytics/types/analytics.ts +16 -0
  47. package/src/modules/api-docs/application/type-docs-adapter.ts +34 -0
  48. package/src/modules/api-docs/domain/events/index.ts +42 -0
  49. package/src/modules/api-docs/domain/models/index.ts +40 -0
  50. package/src/modules/api-docs/domain/operations/api-docs-operations.ts +59 -0
  51. package/src/modules/api-docs/domain/validators/index.ts +56 -0
  52. package/src/modules/api-docs/index.ts +8 -0
  53. package/src/modules/api-docs/ports/api-docs-port.ts +21 -0
  54. package/src/modules/api-docs/types/api-docs.ts +15 -0
  55. package/src/modules/api-reference/openapi.ts +166 -0
  56. package/src/modules/api-reference/orpc.ts +94 -0
  57. package/src/modules/code-block-enhancements/application/usecases/index.ts +39 -0
  58. package/src/modules/code-block-enhancements/domain/code-operations.ts +72 -0
  59. package/src/modules/code-block-enhancements/domain/events/index.ts +58 -0
  60. package/src/modules/code-block-enhancements/domain/index.ts +11 -0
  61. package/src/modules/code-block-enhancements/domain/models/index.ts +36 -0
  62. package/src/modules/code-block-enhancements/domain/validators/index.ts +50 -0
  63. package/src/modules/code-block-enhancements/index.ts +10 -0
  64. package/src/modules/code-block-enhancements/ports/index.ts +18 -0
  65. package/src/modules/code-block-enhancements/types/index.ts +37 -0
  66. package/src/modules/code-execution/application/sandbox-adapter.ts +44 -0
  67. package/src/modules/code-execution/domain/events/index.ts +58 -0
  68. package/src/modules/code-execution/domain/models/index.ts +33 -0
  69. package/src/modules/code-execution/domain/operations/execution-operations.ts +60 -0
  70. package/src/modules/code-execution/domain/validators/index.ts +50 -0
  71. package/src/modules/code-execution/index.ts +8 -0
  72. package/src/modules/code-execution/ports/execution-port.ts +15 -0
  73. package/src/modules/code-execution/types/execution.ts +15 -0
  74. package/src/modules/comments/application/giscus-adapter.ts +55 -0
  75. package/src/modules/comments/domain/events/index.ts +55 -0
  76. package/src/modules/comments/domain/models/index.ts +30 -0
  77. package/src/modules/comments/domain/operations/comment-operations.ts +46 -0
  78. package/src/modules/comments/domain/validators/index.ts +50 -0
  79. package/src/modules/comments/index.ts +8 -0
  80. package/src/modules/comments/ports/comment-port.ts +18 -0
  81. package/src/modules/comments/types/comments.ts +19 -0
  82. package/src/modules/config/application/usecases/index.ts +1 -0
  83. package/src/modules/config/application/usecases/loadConfig.ts +38 -0
  84. package/src/modules/config/application/workflows/index.ts +1 -0
  85. package/src/modules/config/application/workflows/validateConfig.ts +14 -0
  86. package/src/modules/config/domain/events/index.ts +50 -0
  87. package/src/modules/config/domain/models/index.ts +9 -0
  88. package/src/modules/config/domain/operations/defaults.ts +74 -0
  89. package/src/modules/config/domain/operations/index.ts +2 -0
  90. package/src/modules/config/domain/operations/resolve.ts +40 -0
  91. package/src/modules/config/domain/validators/index.ts +152 -0
  92. package/src/modules/config/index.ts +23 -0
  93. package/src/modules/config/ports/index.ts +15 -0
  94. package/src/modules/config/types/index.ts +113 -0
  95. package/src/modules/config/types/public.ts +19 -0
  96. package/src/modules/content/application/cache/index.ts +6 -0
  97. package/src/modules/content/application/cache/parse-cache.ts +6 -0
  98. package/src/modules/content/application/cache/parseCache.ts +56 -0
  99. package/src/modules/content/application/usecases/index.ts +2 -0
  100. package/src/modules/content/application/usecases/load-doc-page.ts +1 -0
  101. package/src/modules/content/application/usecases/loadDocPage.ts +111 -0
  102. package/src/modules/content/application/usecases/scanDocsDir.ts +105 -0
  103. package/src/modules/content/application/workflows/index.ts +1 -0
  104. package/src/modules/content/application/workflows/processDocs.ts +51 -0
  105. package/src/modules/content/domain/events/index.ts +61 -0
  106. package/src/modules/content/domain/models/index.ts +13 -0
  107. package/src/modules/content/domain/operations/build-page.ts +146 -0
  108. package/src/modules/content/domain/operations/buildPage.ts +93 -0
  109. package/src/modules/content/domain/operations/index.ts +17 -0
  110. package/src/modules/content/domain/operations/parse.ts +241 -0
  111. package/src/modules/content/domain/validators/frontmatter.ts +82 -0
  112. package/src/modules/content/domain/validators/index.ts +6 -0
  113. package/src/modules/content/index.ts +27 -0
  114. package/src/modules/content/ports/index.ts +45 -0
  115. package/src/modules/content/ports/velite.ts +134 -0
  116. package/src/modules/content/types/index.ts +76 -0
  117. package/src/modules/content/types/public.ts +1 -0
  118. package/src/modules/content-linting/application/builtin-linting-adapter.ts +82 -0
  119. package/src/modules/content-linting/domain/events/index.ts +58 -0
  120. package/src/modules/content-linting/domain/models/index.ts +46 -0
  121. package/src/modules/content-linting/domain/operations/linting-operations.ts +82 -0
  122. package/src/modules/content-linting/domain/validators/index.ts +50 -0
  123. package/src/modules/content-linting/index.ts +8 -0
  124. package/src/modules/content-linting/ports/linting-port.ts +21 -0
  125. package/src/modules/content-linting/types/linting.ts +18 -0
  126. package/src/modules/content-validation/application/usecases/index.ts +18 -0
  127. package/src/modules/content-validation/domain/events/index.ts +7 -0
  128. package/src/modules/content-validation/domain/index.ts +16 -0
  129. package/src/modules/content-validation/domain/models/index.ts +33 -0
  130. package/src/modules/content-validation/domain/operations/index.ts +157 -0
  131. package/src/modules/content-validation/domain/types/index.ts +17 -0
  132. package/src/modules/content-validation/domain/validators/index.ts +8 -0
  133. package/src/modules/content-validation/index.ts +9 -0
  134. package/src/modules/content-validation/ports/index.ts +15 -0
  135. package/src/modules/content-validation/types/index.ts +5 -0
  136. package/src/modules/export/application/puppeteer-export-adapter.ts +63 -0
  137. package/src/modules/export/domain/events/index.ts +55 -0
  138. package/src/modules/export/domain/models/index.ts +38 -0
  139. package/src/modules/export/domain/operations/export-operations.ts +56 -0
  140. package/src/modules/export/domain/validators/index.ts +52 -0
  141. package/src/modules/export/index.ts +8 -0
  142. package/src/modules/export/ports/export-port.ts +15 -0
  143. package/src/modules/export/types/export.ts +15 -0
  144. package/src/modules/external-search/application/algolia-adapter.ts +182 -0
  145. package/src/modules/external-search/application/meilisearch-adapter.ts +161 -0
  146. package/src/modules/external-search/domain/events/index.ts +42 -0
  147. package/src/modules/external-search/domain/models/index.ts +42 -0
  148. package/src/modules/external-search/domain/operations/search-operations.ts +53 -0
  149. package/src/modules/external-search/domain/validators/index.ts +55 -0
  150. package/src/modules/external-search/index.ts +9 -0
  151. package/src/modules/external-search/ports/external-search-port.ts +23 -0
  152. package/src/modules/external-search/types/search.ts +19 -0
  153. package/src/modules/git-history/application/simple-git-adapter.ts +46 -0
  154. package/src/modules/git-history/domain/events/index.ts +34 -0
  155. package/src/modules/git-history/domain/models/index.ts +25 -0
  156. package/src/modules/git-history/domain/operations/git-history-operations.ts +56 -0
  157. package/src/modules/git-history/domain/validators/index.ts +52 -0
  158. package/src/modules/git-history/index.ts +8 -0
  159. package/src/modules/git-history/ports/git-history-port.ts +21 -0
  160. package/src/modules/git-history/types/git-history.ts +15 -0
  161. package/src/modules/i18n/application/fs-locale-loader.ts +39 -0
  162. package/src/modules/i18n/domain/events/index.ts +34 -0
  163. package/src/modules/i18n/domain/models/index.ts +34 -0
  164. package/src/modules/i18n/domain/operations/locale-operations.ts +74 -0
  165. package/src/modules/i18n/domain/validators/index.ts +52 -0
  166. package/src/modules/i18n/index.ts +8 -0
  167. package/src/modules/i18n/ports/locale-loader-port.ts +18 -0
  168. package/src/modules/i18n/types/locale.ts +17 -0
  169. package/src/modules/image-optimization/application/sharp-adapter.ts +58 -0
  170. package/src/modules/image-optimization/domain/events/index.ts +39 -0
  171. package/src/modules/image-optimization/domain/models/index.ts +27 -0
  172. package/src/modules/image-optimization/domain/operations/image-operations.ts +65 -0
  173. package/src/modules/image-optimization/domain/validators/index.ts +52 -0
  174. package/src/modules/image-optimization/index.ts +8 -0
  175. package/src/modules/image-optimization/ports/image-optimizer-port.ts +15 -0
  176. package/src/modules/image-optimization/types/image.ts +17 -0
  177. package/src/modules/live-editor/application/usecases/index.ts +60 -0
  178. package/src/modules/live-editor/domain/events/index.ts +37 -0
  179. package/src/modules/live-editor/domain/gitOperations.ts +110 -0
  180. package/src/modules/live-editor/domain/index.ts +15 -0
  181. package/src/modules/live-editor/domain/models/index.ts +21 -0
  182. package/src/modules/live-editor/domain/validators/index.ts +55 -0
  183. package/src/modules/live-editor/index.ts +14 -0
  184. package/src/modules/live-editor/ports/index.ts +49 -0
  185. package/src/modules/live-editor/types/index.ts +80 -0
  186. package/src/modules/live-preview/application/vite-preview-adapter.ts +20 -0
  187. package/src/modules/live-preview/domain/operations/preview-operations.ts +56 -0
  188. package/src/modules/live-preview/index.ts +8 -0
  189. package/src/modules/live-preview/ports/preview-port.ts +20 -0
  190. package/src/modules/live-preview/types/preview.ts +16 -0
  191. package/src/modules/mdx/application/mdx-js-adapter.ts +38 -0
  192. package/src/modules/mdx/domain/operations/parse-mdx.ts +43 -0
  193. package/src/modules/mdx/index.ts +8 -0
  194. package/src/modules/mdx/ports/mdx-parser-port.ts +15 -0
  195. package/src/modules/mdx/types/mdx.ts +14 -0
  196. package/src/modules/navigation/application/usecases/buildNav.ts +15 -0
  197. package/src/modules/navigation/application/usecases/buildSidebar.ts +45 -0
  198. package/src/modules/navigation/application/usecases/index.ts +2 -0
  199. package/src/modules/navigation/domain/events/index.ts +30 -0
  200. package/src/modules/navigation/domain/models/index.ts +7 -0
  201. package/src/modules/navigation/domain/operations/group.ts +79 -0
  202. package/src/modules/navigation/domain/operations/index.ts +10 -0
  203. package/src/modules/navigation/domain/operations/sort.ts +27 -0
  204. package/src/modules/navigation/domain/shared/utils/array.ts +39 -0
  205. package/src/modules/navigation/domain/validators/index.ts +88 -0
  206. package/src/modules/navigation/index.ts +15 -0
  207. package/src/modules/navigation/ports/index.ts +9 -0
  208. package/src/modules/navigation/types/index.ts +38 -0
  209. package/src/modules/navigation/types/public.ts +9 -0
  210. package/src/modules/openapi/application/swagger-parser-adapter.ts +178 -0
  211. package/src/modules/openapi/domain/operations/parse-openapi.ts +46 -0
  212. package/src/modules/openapi/index.ts +8 -0
  213. package/src/modules/openapi/ports/openapi-parser-port.ts +15 -0
  214. package/src/modules/openapi/types/openapi.ts +37 -0
  215. package/src/modules/plugin/application/usecases/build-virtual-modules.ts +53 -0
  216. package/src/modules/plugin/application/usecases/index.ts +1 -0
  217. package/src/modules/plugin/application/workflows/build-docs.ts +79 -0
  218. package/src/modules/plugin/application/workflows/index.ts +1 -0
  219. package/src/modules/plugin/domain/events/index.ts +62 -0
  220. package/src/modules/plugin/domain/models/index.ts +1 -0
  221. package/src/modules/plugin/domain/operations/build-virtual.ts +76 -0
  222. package/src/modules/plugin/domain/operations/index.ts +11 -0
  223. package/src/modules/plugin/domain/validators/index.ts +30 -0
  224. package/src/modules/plugin/index.ts +14 -0
  225. package/src/modules/plugin/ports/index.ts +21 -0
  226. package/src/modules/plugin/types/index.ts +27 -0
  227. package/src/modules/plugin/types/public.ts +1 -0
  228. package/src/modules/search/application/usecases/index.ts +1 -0
  229. package/src/modules/search/application/usecases/indexPages.ts +15 -0
  230. package/src/modules/search/domain/events/index.ts +32 -0
  231. package/src/modules/search/domain/models/index.ts +1 -0
  232. package/src/modules/search/domain/operations/build-index.ts +6 -0
  233. package/src/modules/search/domain/operations/buildIndex.ts +70 -0
  234. package/src/modules/search/domain/operations/index.ts +7 -0
  235. package/src/modules/search/domain/operations/query.ts +186 -0
  236. package/src/modules/search/domain/validators/index.ts +32 -0
  237. package/src/modules/search/index.ts +9 -0
  238. package/src/modules/search/types/index.ts +22 -0
  239. package/src/modules/search/types/public.ts +1 -0
  240. package/src/modules/search-analytics/application/local-storage-adapter.ts +68 -0
  241. package/src/modules/search-analytics/domain/operations/search-analytics-operations.ts +74 -0
  242. package/src/modules/search-analytics/index.ts +8 -0
  243. package/src/modules/search-analytics/ports/search-analytics-port.ts +20 -0
  244. package/src/modules/search-analytics/types/search-analytics.ts +16 -0
  245. package/src/modules/search-highlighting/application/dom-highlighting-adapter.ts +36 -0
  246. package/src/modules/search-highlighting/domain/operations/highlighting-operations.ts +72 -0
  247. package/src/modules/search-highlighting/index.ts +8 -0
  248. package/src/modules/search-highlighting/ports/highlighting-port.ts +14 -0
  249. package/src/modules/search-highlighting/types/highlighting.ts +15 -0
  250. package/src/modules/seo-optimization/application/usecases/index.ts +18 -0
  251. package/src/modules/seo-optimization/domain/index.ts +12 -0
  252. package/src/modules/seo-optimization/domain/seoOperations.ts +92 -0
  253. package/src/modules/seo-optimization/index.ts +8 -0
  254. package/src/modules/seo-optimization/ports/index.ts +18 -0
  255. package/src/modules/seo-optimization/types/index.ts +41 -0
  256. package/src/modules/theme/application/css-theme-adapter.ts +50 -0
  257. package/src/modules/theme/domain/operations/theme-operations.ts +68 -0
  258. package/src/modules/theme/index.ts +8 -0
  259. package/src/modules/theme/ports/theme-port.ts +8 -0
  260. package/src/modules/theme/types/theme.ts +12 -0
  261. package/src/modules/toc/application/markdown-toc-adapter.ts +106 -0
  262. package/src/modules/toc/domain/operations/toc-operations.ts +92 -0
  263. package/src/modules/toc/index.ts +8 -0
  264. package/src/modules/toc/ports/toc-port.ts +21 -0
  265. package/src/modules/toc/types/toc.ts +17 -0
  266. package/src/modules/toc-generator/application/usecases/index.ts +30 -0
  267. package/src/modules/toc-generator/domain/index.ts +12 -0
  268. package/src/modules/toc-generator/domain/tocOperations.ts +104 -0
  269. package/src/modules/toc-generator/index.ts +9 -0
  270. package/src/modules/toc-generator/ports/index.ts +20 -0
  271. package/src/modules/toc-generator/types/index.ts +50 -0
  272. package/src/modules/version-control/domain/events/index.ts +39 -0
  273. package/src/modules/version-control/domain/models/index.ts +25 -0
  274. package/src/modules/version-control/domain/validators/index.ts +50 -0
  275. package/src/modules/versioning/application/fs-version-loader.ts +44 -0
  276. package/src/modules/versioning/domain/operations/versioning-operations.ts +80 -0
  277. package/src/modules/versioning/index.ts +8 -0
  278. package/src/modules/versioning/ports/version-loader-port.ts +18 -0
  279. package/src/modules/versioning/types/versioning.ts +17 -0
  280. package/src/modules/workflow/domain/events/index.ts +55 -0
  281. package/src/modules/workflow/domain/models/index.ts +40 -0
  282. package/src/modules/workflow/domain/validators/index.ts +50 -0
  283. package/src/modules/yaml-parser/application/js-yaml-adapter.ts +34 -0
  284. package/src/modules/yaml-parser/domain/operations/parse-yaml.ts +58 -0
  285. package/src/modules/yaml-parser/index.ts +7 -0
  286. package/src/modules/yaml-parser/ports/yaml-parser-port.ts +18 -0
  287. package/src/navigation/index.ts +9 -0
  288. package/src/plugin/index.ts +4 -0
  289. package/src/presentation/index.ts +1 -0
  290. package/src/presentation/live-editor/index.ts +22 -0
  291. package/src/presentation/live-editor/live-editor-component.ts +219 -0
  292. package/src/presentation/live-editor/virtual-module.ts +16 -0
  293. package/src/presentation/solid/CodeBlock.tsx +120 -0
  294. package/src/presentation/solid/Toc.tsx +58 -0
  295. package/src/presentation/solid/index.ts +11 -0
  296. package/src/presentation/vite-plugin/docs-plugin.ts +212 -0
  297. package/src/presentation/vite-plugin/index.ts +9 -0
  298. package/src/presentation/vite-plugin/transform-markdown.ts +26 -0
  299. package/src/runtime/analytics.ts +59 -0
  300. package/src/runtime/api-diff.ts +115 -0
  301. package/src/runtime/app.tsx +32 -0
  302. package/src/runtime/components/AccentPicker.tsx +114 -0
  303. package/src/runtime/components/ApiPlayground.tsx +332 -0
  304. package/src/runtime/components/AskAiDialog.tsx +127 -0
  305. package/src/runtime/components/BackToTop.tsx +38 -0
  306. package/src/runtime/components/Banner.tsx +75 -0
  307. package/src/runtime/components/Breadcrumbs.tsx +42 -0
  308. package/src/runtime/components/CollectionDropdown.tsx +85 -0
  309. package/src/runtime/components/CustomizeDrawer.tsx +195 -0
  310. package/src/runtime/components/DocMarkdown.tsx +579 -0
  311. package/src/runtime/components/DocPrevNext.tsx +54 -0
  312. package/src/runtime/components/DocToc.tsx +147 -0
  313. package/src/runtime/components/DocsDropdown.tsx +184 -0
  314. package/src/runtime/components/Footer.tsx +52 -0
  315. package/src/runtime/components/GitHubAuth.tsx +82 -0
  316. package/src/runtime/components/GitHubStats.tsx +73 -0
  317. package/src/runtime/components/Head.tsx +225 -0
  318. package/src/runtime/components/LocaleDropdown.tsx +75 -0
  319. package/src/runtime/components/MobileBottomNav.tsx +111 -0
  320. package/src/runtime/components/NotFound.tsx +139 -0
  321. package/src/runtime/components/PageActions.tsx +144 -0
  322. package/src/runtime/components/RelatedDocs.tsx +50 -0
  323. package/src/runtime/components/ScrollProgress.tsx +32 -0
  324. package/src/runtime/components/SearchPalette.tsx +333 -0
  325. package/src/runtime/components/ShowcaseCard.tsx +87 -0
  326. package/src/runtime/components/SidebarNav.tsx +237 -0
  327. package/src/runtime/components/Skeleton.tsx +39 -0
  328. package/src/runtime/components/ThemeToggle.tsx +26 -0
  329. package/src/runtime/components/TopNav.tsx +270 -0
  330. package/src/runtime/components/VersionDropdown.tsx +189 -0
  331. package/src/runtime/components/markdown/components.ts +280 -0
  332. package/src/runtime/config.ts +225 -0
  333. package/src/runtime/content.ts +451 -0
  334. package/src/runtime/context.tsx +30 -0
  335. package/src/runtime/data.ts +93 -0
  336. package/src/runtime/github.ts +226 -0
  337. package/src/runtime/icons.ts +32 -0
  338. package/src/runtime/index.ts +153 -0
  339. package/src/runtime/layouts/DocsLayout.tsx +144 -0
  340. package/src/runtime/markdown-content.css +996 -0
  341. package/src/runtime/pages/AbTestPage.tsx +88 -0
  342. package/src/runtime/pages/AnalyticsPage.tsx +90 -0
  343. package/src/runtime/pages/ApiDiffPage.tsx +86 -0
  344. package/src/runtime/pages/ApiEndpointPage.tsx +248 -0
  345. package/src/runtime/pages/BuilderPage.tsx +150 -0
  346. package/src/runtime/pages/ChangelogPage.tsx +210 -0
  347. package/src/runtime/pages/CollectionPage.tsx +140 -0
  348. package/src/runtime/pages/CommunityPage.tsx +384 -0
  349. package/src/runtime/pages/CreatePage.tsx +448 -0
  350. package/src/runtime/pages/DocPage.tsx +193 -0
  351. package/src/runtime/pages/EditPage.tsx +201 -0
  352. package/src/runtime/pages/HomePage.tsx +187 -0
  353. package/src/runtime/pages/IssuesPage.tsx +140 -0
  354. package/src/runtime/pages/OAuthCallbackPage.tsx +80 -0
  355. package/src/runtime/pages/PluginsPage.tsx +249 -0
  356. package/src/runtime/pages/ShowcasePage.tsx +202 -0
  357. package/src/runtime/pwa.ts +39 -0
  358. package/src/runtime/router.tsx +192 -0
  359. package/src/runtime/seo.ts +192 -0
  360. package/src/runtime/theme.css +175 -0
  361. package/src/runtime/theme.ts +224 -0
  362. package/src/runtime/types.ts +217 -0
  363. package/src/search/index.ts +6 -0
  364. package/src/seo-optimization/index.ts +4 -0
  365. package/src/shared/constants/index.ts +26 -0
  366. package/src/shared/errors/index.ts +195 -0
  367. package/src/shared/index.ts +27 -0
  368. package/src/shared/types/brand.ts +14 -0
  369. package/src/shared/types/client.d.ts +45 -0
  370. package/src/shared/types/either.ts +38 -0
  371. package/src/shared/types/index.ts +42 -0
  372. package/src/shared/types/option.ts +52 -0
  373. package/src/shared/types/result.ts +81 -0
  374. package/src/shared/utils/array.ts +97 -0
  375. package/src/shared/utils/index.ts +46 -0
  376. package/src/shared/utils/object.ts +47 -0
  377. package/src/shared/utils/string.ts +74 -0
  378. package/src/toc-generator/index.ts +1 -0
  379. package/src/types/js-yaml.d.ts +42 -0
  380. package/src/worker.ts +462 -0
@@ -0,0 +1,996 @@
1
+ .rt-markdown {
2
+ font-size: 14px;
3
+ line-height: 1.7;
4
+ color: var(--rt-fg);
5
+ }
6
+
7
+ .rt-diff-line {
8
+ display: block;
9
+ padding: 0 4px;
10
+ border-radius: 3px;
11
+ }
12
+
13
+ .rt-diff-add {
14
+ background: rgba(46, 160, 67, 0.12);
15
+ color: #2ea043;
16
+ }
17
+
18
+ html.dark .rt-diff-add {
19
+ color: #7ee787;
20
+ background: rgba(126, 231, 135, 0.1);
21
+ }
22
+
23
+ .rt-diff-del {
24
+ background: rgba(207, 34, 46, 0.1);
25
+ color: #cf222e;
26
+ }
27
+
28
+ html.dark .rt-diff-del {
29
+ color: #ff6b6b;
30
+ background: rgba(255, 107, 107, 0.1);
31
+ }
32
+
33
+ .rt-diff-hunk {
34
+ color: var(--rt-accent-2);
35
+ background: var(--rt-bg-alt);
36
+ }
37
+
38
+ .rt-diff-meta {
39
+ color: var(--rt-fg-dim);
40
+ }
41
+
42
+ .rt-diff-ctx {
43
+ color: var(--rt-fg);
44
+ }
45
+
46
+ .rt-markdown h1,
47
+ .rt-markdown h2,
48
+ .rt-markdown h3,
49
+ .rt-markdown h4,
50
+ .rt-markdown h5,
51
+ .rt-markdown h6 {
52
+ margin-top: 24px;
53
+ margin-bottom: 12px;
54
+ color: var(--rt-fg);
55
+ font-weight: 600;
56
+ line-height: 1.4;
57
+ scroll-margin-top: 80px;
58
+ }
59
+
60
+ .rt-markdown h1 {
61
+ font-size: 24px;
62
+ border-bottom: 1px solid var(--rt-border);
63
+ padding-bottom: 10px;
64
+ }
65
+
66
+ .rt-markdown h2 {
67
+ font-size: 18px;
68
+ color: var(--rt-accent-2);
69
+ border-bottom: 1px solid var(--rt-border);
70
+ padding-bottom: 6px;
71
+ }
72
+
73
+ .rt-markdown h3 {
74
+ font-size: 15px;
75
+ }
76
+
77
+ .rt-markdown p {
78
+ margin: 0 0 12px;
79
+ }
80
+
81
+ .rt-markdown a {
82
+ color: var(--rt-accent-2);
83
+ text-decoration: none;
84
+ }
85
+
86
+ .rt-markdown a:hover {
87
+ text-decoration: underline;
88
+ }
89
+
90
+ .rt-markdown ul,
91
+ .rt-markdown ol {
92
+ margin: 0 0 16px;
93
+ padding-left: 24px;
94
+ }
95
+
96
+ .rt-markdown li {
97
+ margin-bottom: 4px;
98
+ }
99
+
100
+ .rt-markdown code {
101
+ background: var(--rt-bg-alt);
102
+ padding: 2px 6px;
103
+ border-radius: 4px;
104
+ font-family: var(--rt-font-mono);
105
+ font-size: 0.92em;
106
+ color: var(--rt-fg);
107
+ }
108
+
109
+ .rt-markdown pre {
110
+ position: relative;
111
+ background: var(--rt-bg);
112
+ border: 1px solid var(--rt-border);
113
+ border-radius: var(--rt-radius);
114
+ padding: 12px 16px;
115
+ overflow-x: auto;
116
+ margin: 0 0 16px;
117
+ }
118
+
119
+ .rt-markdown pre code {
120
+ background: transparent;
121
+ padding: 0;
122
+ font-size: 13px;
123
+ color: var(--rt-fg);
124
+ }
125
+
126
+ .rt-markdown blockquote {
127
+ margin: 0 0 16px;
128
+ padding: 8px 16px;
129
+ border-left: 3px solid var(--rt-accent);
130
+ background: var(--rt-bg-alt);
131
+ border-radius: 0 var(--rt-radius) var(--rt-radius) 0;
132
+ color: var(--rt-fg-dim);
133
+ }
134
+
135
+ .rt-markdown table {
136
+ width: 100%;
137
+ border-collapse: collapse;
138
+ margin-bottom: 16px;
139
+ font-size: 13px;
140
+ }
141
+
142
+ .rt-markdown th,
143
+ .rt-markdown td {
144
+ border: 1px solid var(--rt-border);
145
+ padding: 8px 12px;
146
+ text-align: left;
147
+ }
148
+
149
+ .rt-markdown th {
150
+ background: var(--rt-bg-alt);
151
+ font-weight: 600;
152
+ }
153
+
154
+ .rt-markdown img {
155
+ max-width: 100%;
156
+ height: auto;
157
+ border-radius: var(--rt-radius);
158
+ }
159
+
160
+ .rt-markdown__error {
161
+ color: var(--rt-danger);
162
+ }
163
+
164
+ .rt-alert {
165
+ margin: 0 0 16px;
166
+ padding: 10px 16px;
167
+ border-left: 3px solid var(--rt-accent-2);
168
+ background: var(--rt-bg-alt);
169
+ border-radius: 0 var(--rt-radius) var(--rt-radius) 0;
170
+ color: var(--rt-fg);
171
+ font-size: 14px;
172
+ }
173
+
174
+ .rt-alert p {
175
+ margin: 0 0 6px;
176
+ }
177
+
178
+ .rt-alert p:last-child {
179
+ margin-bottom: 0;
180
+ }
181
+
182
+ .rt-alert__title {
183
+ font-weight: 600;
184
+ font-size: 13px;
185
+ color: var(--rt-accent-2);
186
+ }
187
+
188
+ .rt-alert--info,
189
+ .rt-alert--note {
190
+ border-left-color: var(--rt-accent-2);
191
+ }
192
+ .rt-alert--info .rt-alert__title,
193
+ .rt-alert--note .rt-alert__title {
194
+ color: var(--rt-accent-2);
195
+ }
196
+
197
+ .rt-alert--success {
198
+ border-left-color: #3fb950;
199
+ }
200
+ .rt-alert--success .rt-alert__title {
201
+ color: #3fb950;
202
+ }
203
+
204
+ .rt-alert--tip {
205
+ border-left-color: var(--rt-accent);
206
+ }
207
+ .rt-alert--tip .rt-alert__title {
208
+ color: var(--rt-accent);
209
+ }
210
+
211
+ .rt-alert--important {
212
+ border-left-color: #a371f7;
213
+ }
214
+ .rt-alert--important .rt-alert__title {
215
+ color: #a371f7;
216
+ }
217
+
218
+ .rt-alert--warning {
219
+ border-left-color: var(--rt-warn);
220
+ }
221
+ .rt-alert--warning .rt-alert__title {
222
+ color: var(--rt-warn);
223
+ }
224
+
225
+ .rt-alert--caution,
226
+ .rt-alert--danger {
227
+ border-left-color: var(--rt-danger);
228
+ }
229
+ .rt-alert--caution .rt-alert__title,
230
+ .rt-alert--danger .rt-alert__title {
231
+ color: var(--rt-danger);
232
+ }
233
+
234
+ .rt-code-copy {
235
+ position: absolute;
236
+ top: 8px;
237
+ right: 8px;
238
+ background: var(--rt-bg-alt);
239
+ border: 1px solid var(--rt-border);
240
+ border-radius: 6px;
241
+ color: var(--rt-fg-dim);
242
+ cursor: pointer;
243
+ font-size: 11px;
244
+ padding: 4px 8px;
245
+ transition:
246
+ background 0.15s ease,
247
+ color 0.15s ease;
248
+ }
249
+
250
+ .rt-code-copy:hover {
251
+ background: var(--rt-panel);
252
+ color: var(--rt-fg);
253
+ }
254
+
255
+ .rt-codeblock {
256
+ position: relative;
257
+ margin: 0 0 16px;
258
+ }
259
+
260
+ .rt-codeblock__header {
261
+ display: flex;
262
+ align-items: center;
263
+ gap: 8px;
264
+ padding: 6px 10px;
265
+ background: var(--rt-bg-alt);
266
+ border: 1px solid var(--rt-border);
267
+ border-bottom: none;
268
+ border-radius: var(--rt-radius) var(--rt-radius) 0 0;
269
+ font-size: 11px;
270
+ color: var(--rt-fg-dim);
271
+ }
272
+
273
+ .rt-codeblock__icon {
274
+ font-size: 14px;
275
+ color: var(--rt-accent);
276
+ }
277
+
278
+ .rt-codeblock__filename {
279
+ font-family: var(--rt-font-mono);
280
+ font-weight: 500;
281
+ color: var(--rt-fg);
282
+ }
283
+
284
+ .rt-codeblock__lang {
285
+ text-transform: uppercase;
286
+ letter-spacing: 0.04em;
287
+ font-size: 10px;
288
+ }
289
+
290
+ .rt-codeblock__header .rt-code-copy {
291
+ position: static;
292
+ margin-left: auto;
293
+ flex-shrink: 0;
294
+ }
295
+
296
+ .rt-codeblock pre {
297
+ margin: 0;
298
+ border-top: none;
299
+ border-radius: 0 0 var(--rt-radius) var(--rt-radius);
300
+ }
301
+
302
+ .rt-codeblock--collapsed pre {
303
+ max-height: 320px;
304
+ overflow-y: hidden;
305
+ }
306
+
307
+ .rt-codeblock__expand {
308
+ display: block;
309
+ width: 100%;
310
+ padding: 6px 12px;
311
+ background: var(--rt-bg-alt);
312
+ border: 1px solid var(--rt-border);
313
+ border-top: 1px dashed var(--rt-border);
314
+ border-radius: 0 0 var(--rt-radius) var(--rt-radius);
315
+ color: var(--rt-accent);
316
+ cursor: pointer;
317
+ font-size: 11px;
318
+ transition: background 0.15s ease;
319
+ }
320
+
321
+ .rt-codeblock__expand:hover {
322
+ background: var(--rt-panel);
323
+ }
324
+
325
+ .rt-codeblock--collapsed .rt-codeblock__expand {
326
+ border-radius: 0 0 var(--rt-radius) var(--rt-radius);
327
+ }
328
+
329
+ .rt-code-group {
330
+ border: 1px solid var(--rt-border);
331
+ border-radius: var(--rt-radius);
332
+ overflow: hidden;
333
+ margin: 0 0 16px;
334
+ background: var(--rt-bg);
335
+ }
336
+
337
+ .rt-code-group__tabs {
338
+ display: flex;
339
+ gap: 2px;
340
+ padding: 6px 6px 0;
341
+ background: var(--rt-bg-alt);
342
+ border-bottom: 1px solid var(--rt-border);
343
+ }
344
+
345
+ .rt-code-group__tab {
346
+ background: transparent;
347
+ border: none;
348
+ border-radius: var(--rt-radius) var(--rt-radius) 0 0;
349
+ color: var(--rt-fg-dim);
350
+ cursor: pointer;
351
+ font-size: 12px;
352
+ padding: 6px 12px;
353
+ transition:
354
+ background 0.15s ease,
355
+ color 0.15s ease;
356
+ }
357
+
358
+ .rt-code-group__tab:hover {
359
+ color: var(--rt-fg);
360
+ }
361
+
362
+ .rt-code-group__tab--active {
363
+ background: var(--rt-bg);
364
+ color: var(--rt-fg);
365
+ font-weight: 500;
366
+ }
367
+
368
+ .rt-code-group__panel {
369
+ display: none;
370
+ margin: 0;
371
+ }
372
+
373
+ .rt-code-group__panel pre {
374
+ margin: 0;
375
+ border-radius: 0;
376
+ }
377
+
378
+ .rt-code-group__panel--active {
379
+ display: block;
380
+ }
381
+
382
+ .rt-toc {
383
+ font-size: 13px;
384
+ }
385
+
386
+ .rt-toc__title {
387
+ font-weight: 600;
388
+ margin-bottom: 10px;
389
+ color: var(--rt-fg);
390
+ font-size: 12px;
391
+ text-transform: uppercase;
392
+ letter-spacing: 0.05em;
393
+ }
394
+
395
+ .rt-toc__empty {
396
+ color: var(--rt-fg-dim);
397
+ font-size: 12px;
398
+ }
399
+
400
+ .rt-toc__list {
401
+ list-style: none;
402
+ margin: 0;
403
+ padding: 0;
404
+ display: flex;
405
+ flex-direction: column;
406
+ gap: 2px;
407
+ }
408
+
409
+ .rt-toc__item {
410
+ margin: 0;
411
+ }
412
+
413
+ .rt-toc__link {
414
+ background: transparent;
415
+ border: none;
416
+ border-left: 2px solid transparent;
417
+ color: var(--rt-fg-dim);
418
+ cursor: pointer;
419
+ display: block;
420
+ font-size: 13px;
421
+ line-height: 1.4;
422
+ padding: 4px 0 4px 12px;
423
+ text-align: left;
424
+ width: 100%;
425
+ transition:
426
+ color 0.15s ease,
427
+ border-color 0.15s ease;
428
+ }
429
+
430
+ .rt-toc__link:hover {
431
+ color: var(--rt-accent-2);
432
+ }
433
+
434
+ .rt-toc__link--active {
435
+ color: var(--rt-accent-2);
436
+ border-left-color: var(--rt-accent-2);
437
+ font-weight: 500;
438
+ }
439
+
440
+ .rt-toc__item--depth-1 .rt-toc__link {
441
+ font-weight: 600;
442
+ color: var(--rt-fg);
443
+ }
444
+
445
+ .rt-toc__item--depth-2 .rt-toc__link {
446
+ padding-left: 12px;
447
+ }
448
+
449
+ .rt-toc__item--depth-3 .rt-toc__link,
450
+ .rt-toc__item--depth-4 .rt-toc__link,
451
+ .rt-toc__item--depth-5 .rt-toc__link,
452
+ .rt-toc__item--depth-6 .rt-toc__link {
453
+ padding-left: 24px;
454
+ font-size: 12px;
455
+ }
456
+
457
+ /* Rangi / Shiki syntax highlighting */
458
+ .rt-markdown pre.shj {
459
+ background: var(--rt-bg);
460
+ }
461
+
462
+ .rt-markdown pre.shj code {
463
+ color: var(--rt-fg);
464
+ }
465
+
466
+ html.dark .rt-markdown .shj span {
467
+ color: var(--shiki-dark);
468
+ }
469
+
470
+ html.dark .rt-markdown pre.shj {
471
+ background-color: var(--shiki-dark-bg);
472
+ color: var(--shiki-dark);
473
+ }
474
+
475
+ /* Playground (live code preview) */
476
+ .rt-playground {
477
+ border: 1px solid var(--rt-border, #30363d);
478
+ border-radius: 10px;
479
+ overflow: hidden;
480
+ margin: 1.25rem 0;
481
+ }
482
+
483
+ .rt-playground__preview {
484
+ background: #fff;
485
+ min-height: 80px;
486
+ }
487
+
488
+ .rt-playground__frame {
489
+ display: block;
490
+ width: 100%;
491
+ min-height: 160px;
492
+ border: 0;
493
+ background: #fff;
494
+ }
495
+
496
+ .rt-playground__source {
497
+ border-top: 1px solid var(--rt-border, #30363d);
498
+ }
499
+
500
+ .rt-playground__source > summary {
501
+ cursor: pointer;
502
+ padding: 0.5rem 1rem;
503
+ font-size: 12px;
504
+ font-weight: 600;
505
+ text-transform: uppercase;
506
+ letter-spacing: 0.05em;
507
+ color: var(--rt-muted, #8b949e);
508
+ user-select: none;
509
+ }
510
+
511
+ .rt-playground__source pre {
512
+ margin: 0;
513
+ border-radius: 0;
514
+ }
515
+
516
+ .rt-playground__source pre[contenteditable="true"] {
517
+ outline: none;
518
+ }
519
+
520
+ .rt-playground__source pre[contenteditable="true"]:focus {
521
+ box-shadow: inset 0 0 0 2px var(--rt-accent-2, #58a6ff);
522
+ }
523
+
524
+ /* Steps (interactive tutorial checklist) */
525
+ .rt-steps {
526
+ list-style: none;
527
+ padding: 0;
528
+ margin: 1.25rem 0;
529
+ border-left: 2px solid var(--rt-border, #30363d);
530
+ }
531
+
532
+ .rt-steps__item {
533
+ position: relative;
534
+ display: flex;
535
+ gap: 0.75rem;
536
+ padding: 0.75rem 0 0.75rem 1.5rem;
537
+ align-items: flex-start;
538
+ }
539
+
540
+ .rt-steps__marker {
541
+ position: absolute;
542
+ left: -15px;
543
+ top: 0.6rem;
544
+ width: 28px;
545
+ height: 28px;
546
+ border-radius: 50%;
547
+ background: var(--rt-accent-2, #58a6ff);
548
+ color: #fff;
549
+ font-size: 13px;
550
+ font-weight: 700;
551
+ display: inline-flex;
552
+ align-items: center;
553
+ justify-content: center;
554
+ }
555
+
556
+ .rt-steps__check {
557
+ margin-top: 0.35rem;
558
+ flex-shrink: 0;
559
+ accent-color: var(--rt-accent-2, #58a6ff);
560
+ cursor: pointer;
561
+ }
562
+
563
+ .rt-steps__body {
564
+ flex: 1;
565
+ min-width: 0;
566
+ }
567
+
568
+ .rt-steps__item--done .rt-steps__body {
569
+ opacity: 0.55;
570
+ }
571
+
572
+ .rt-steps__item--done .rt-steps__marker {
573
+ background: var(--rt-success, #3fb950);
574
+ }
575
+
576
+ /* Cards */
577
+ .rt-card-grid {
578
+ display: grid;
579
+ gap: 1rem;
580
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
581
+ margin: 1rem 0;
582
+ }
583
+
584
+ .rt-card {
585
+ display: flex;
586
+ flex-direction: column;
587
+ gap: 0.5rem;
588
+ padding: 1rem;
589
+ border: 1px solid var(--rt-border);
590
+ border-radius: var(--rt-radius);
591
+ background: var(--rt-bg);
592
+ transition:
593
+ box-shadow 0.2s ease,
594
+ border-color 0.2s ease;
595
+ }
596
+
597
+ .rt-card--link {
598
+ text-decoration: none;
599
+ color: inherit;
600
+ }
601
+
602
+ .rt-card--link:hover {
603
+ border-color: var(--rt-accent-2);
604
+ box-shadow: var(--rt-shadow);
605
+ }
606
+
607
+ .rt-card__header {
608
+ display: flex;
609
+ align-items: center;
610
+ gap: 0.5rem;
611
+ font-weight: 600;
612
+ color: var(--rt-fg);
613
+ }
614
+
615
+ .rt-card__icon {
616
+ color: var(--rt-accent-2);
617
+ }
618
+
619
+ .rt-card__body {
620
+ font-size: 13px;
621
+ color: var(--rt-fg-dim);
622
+ }
623
+
624
+ /* Tabs */
625
+ .rt-tabs {
626
+ border: 1px solid var(--rt-border);
627
+ border-radius: var(--rt-radius);
628
+ overflow: hidden;
629
+ margin: 1rem 0;
630
+ background: var(--rt-bg);
631
+ }
632
+
633
+ .rt-tabs__list {
634
+ display: flex;
635
+ gap: 2px;
636
+ padding: 6px 6px 0;
637
+ background: var(--rt-bg-alt);
638
+ border-bottom: 1px solid var(--rt-border);
639
+ }
640
+
641
+ .rt-tabs__tab {
642
+ background: transparent;
643
+ border: none;
644
+ border-radius: var(--rt-radius) var(--rt-radius) 0 0;
645
+ color: var(--rt-fg-dim);
646
+ cursor: pointer;
647
+ font-size: 12px;
648
+ padding: 6px 12px;
649
+ transition:
650
+ background 0.15s ease,
651
+ color 0.15s ease;
652
+ }
653
+
654
+ .rt-tabs__tab:hover {
655
+ color: var(--rt-fg);
656
+ }
657
+
658
+ .rt-tabs__tab--active {
659
+ background: var(--rt-bg);
660
+ color: var(--rt-fg);
661
+ font-weight: 500;
662
+ }
663
+
664
+ .rt-tabs__panel {
665
+ display: none;
666
+ padding: 12px 16px;
667
+ }
668
+
669
+ .rt-tabs__panel--active {
670
+ display: block;
671
+ }
672
+
673
+ /* File tree */
674
+ .rt-file-tree {
675
+ list-style: none;
676
+ margin: 1rem 0;
677
+ padding: 0;
678
+ border: 1px solid var(--rt-border);
679
+ border-radius: var(--rt-radius);
680
+ background: var(--rt-bg);
681
+ font-size: 13px;
682
+ }
683
+
684
+ .rt-file-tree__nested {
685
+ list-style: none;
686
+ margin: 0;
687
+ padding: 0;
688
+ padding-left: 1.25rem;
689
+ }
690
+
691
+ .rt-file-tree__item {
692
+ margin: 0;
693
+ }
694
+
695
+ .rt-file-tree__label {
696
+ display: flex;
697
+ align-items: center;
698
+ gap: 0.5rem;
699
+ padding: 0.5rem 0.75rem;
700
+ border-bottom: 1px solid var(--rt-border);
701
+ color: var(--rt-fg);
702
+ }
703
+
704
+ .rt-file-tree__item:last-child > .rt-file-tree__label {
705
+ border-bottom: none;
706
+ }
707
+
708
+ .rt-file-tree__icon {
709
+ color: var(--rt-accent-2);
710
+ font-size: 14px;
711
+ }
712
+
713
+ /* Kbd and badge */
714
+ .rt-kbd {
715
+ display: inline-block;
716
+ padding: 0.1rem 0.35rem;
717
+ font-family: var(--rt-font-mono);
718
+ font-size: 0.86em;
719
+ background: var(--rt-bg-alt);
720
+ border: 1px solid var(--rt-border);
721
+ border-bottom-width: 2px;
722
+ border-radius: 4px;
723
+ color: var(--rt-fg);
724
+ }
725
+
726
+ .rt-badge {
727
+ display: inline-flex;
728
+ align-items: center;
729
+ padding: 0.1rem 0.45rem;
730
+ font-size: 0.78rem;
731
+ font-weight: 600;
732
+ border-radius: 9999px;
733
+ background: var(--rt-bg-alt);
734
+ color: var(--rt-fg);
735
+ border: 1px solid var(--rt-border);
736
+ }
737
+
738
+ .rt-badge--info {
739
+ background: color-mix(in srgb, var(--rt-accent-2) 15%, transparent);
740
+ color: var(--rt-accent-2);
741
+ border-color: color-mix(in srgb, var(--rt-accent-2) 30%, transparent);
742
+ }
743
+
744
+ .rt-badge--success {
745
+ background: color-mix(in srgb, var(--rt-success, #3fb950) 15%, transparent);
746
+ color: var(--rt-success, #3fb950);
747
+ border-color: color-mix(in srgb, var(--rt-success, #3fb950) 30%, transparent);
748
+ }
749
+
750
+ .rt-badge--warning {
751
+ background: color-mix(in srgb, var(--rt-warn, #9a6700) 15%, transparent);
752
+ color: var(--rt-warn, #9a6700);
753
+ border-color: color-mix(in srgb, var(--rt-warn, #9a6700) 30%, transparent);
754
+ }
755
+
756
+ .rt-badge--danger {
757
+ background: color-mix(in srgb, var(--rt-danger, #cf222e) 15%, transparent);
758
+ color: var(--rt-danger, #cf222e);
759
+ border-color: color-mix(in srgb, var(--rt-danger, #cf222e) 30%, transparent);
760
+ }
761
+
762
+ .rt-badge--primary {
763
+ background: color-mix(in srgb, var(--rt-accent, #2ea043) 15%, transparent);
764
+ color: var(--rt-accent, #2ea043);
765
+ border-color: color-mix(in srgb, var(--rt-accent, #2ea043) 30%, transparent);
766
+ }
767
+
768
+ /* Accordion */
769
+ .rt-accordion-group {
770
+ margin: 1rem 0;
771
+ border: 1px solid var(--rt-border);
772
+ border-radius: var(--rt-radius);
773
+ overflow: hidden;
774
+ }
775
+
776
+ .rt-accordion {
777
+ border-bottom: 1px solid var(--rt-border);
778
+ background: var(--rt-bg);
779
+ }
780
+
781
+ .rt-accordion:last-child {
782
+ border-bottom: none;
783
+ }
784
+
785
+ .rt-accordion__summary {
786
+ padding: 0.75rem 1rem;
787
+ font-weight: 600;
788
+ cursor: pointer;
789
+ color: var(--rt-fg);
790
+ list-style: none;
791
+ }
792
+
793
+ .rt-accordion__summary::-webkit-details-marker {
794
+ display: none;
795
+ }
796
+
797
+ .rt-accordion__body {
798
+ padding: 0 1rem 1rem;
799
+ color: var(--rt-fg-dim);
800
+ }
801
+
802
+ /* Video / YouTube */
803
+ .rt-youtube,
804
+ .rt-video {
805
+ position: relative;
806
+ aspect-ratio: 16 / 9;
807
+ background: var(--rt-bg-alt);
808
+ border-radius: var(--rt-radius);
809
+ overflow: hidden;
810
+ margin: 1rem 0;
811
+ }
812
+
813
+ .rt-youtube {
814
+ background: linear-gradient(
815
+ 135deg,
816
+ var(--rt-bg-alt),
817
+ var(--rt-panel, var(--rt-bg))
818
+ );
819
+ cursor: pointer;
820
+ }
821
+
822
+ .rt-youtube__play {
823
+ position: absolute;
824
+ inset: 0;
825
+ width: 100%;
826
+ height: 100%;
827
+ display: flex;
828
+ align-items: center;
829
+ justify-content: center;
830
+ background: transparent;
831
+ border: none;
832
+ color: var(--rt-accent-2);
833
+ cursor: pointer;
834
+ }
835
+
836
+ .rt-youtube__play:hover {
837
+ color: var(--rt-accent);
838
+ }
839
+
840
+ .rt-video__link {
841
+ position: absolute;
842
+ inset: 0;
843
+ display: flex;
844
+ align-items: center;
845
+ justify-content: center;
846
+ text-decoration: none;
847
+ color: var(--rt-fg);
848
+ font-weight: 500;
849
+ }
850
+
851
+ /* Timeline */
852
+ .rt-timeline {
853
+ list-style: none;
854
+ margin: 1rem 0;
855
+ padding: 0 0 0 0.5rem;
856
+ border-left: 2px solid var(--rt-border);
857
+ }
858
+
859
+ .rt-timeline__item {
860
+ position: relative;
861
+ padding: 0 0 1.25rem 1.25rem;
862
+ }
863
+
864
+ .rt-timeline__dot {
865
+ position: absolute;
866
+ left: -0.45rem;
867
+ top: 0.35rem;
868
+ width: 0.7rem;
869
+ height: 0.7rem;
870
+ border-radius: 50%;
871
+ background: var(--rt-accent-2);
872
+ border: 2px solid var(--rt-bg);
873
+ }
874
+
875
+ .rt-timeline__date {
876
+ font-size: 12px;
877
+ color: var(--rt-fg-dim);
878
+ }
879
+
880
+ .rt-timeline__title {
881
+ font-weight: 600;
882
+ color: var(--rt-fg);
883
+ }
884
+
885
+ .rt-timeline__body {
886
+ color: var(--rt-fg-dim);
887
+ font-size: 14px;
888
+ }
889
+
890
+ /* Image zoom */
891
+ .rt-image-zoom-overlay {
892
+ position: fixed;
893
+ inset: 0;
894
+ z-index: 100;
895
+ background: rgba(0, 0, 0, 0.85);
896
+ display: flex;
897
+ align-items: center;
898
+ justify-content: center;
899
+ padding: 2rem;
900
+ cursor: zoom-out;
901
+ }
902
+
903
+ .rt-image-zoom-overlay img {
904
+ max-width: 100%;
905
+ max-height: 100%;
906
+ border-radius: var(--rt-radius);
907
+ box-shadow: 0 0 40px rgba(0, 0, 0, 0.5);
908
+ }
909
+
910
+ .rt-markdown img {
911
+ cursor: zoom-in;
912
+ }
913
+
914
+ /* Tooltip */
915
+ .rt-tooltip {
916
+ position: relative;
917
+ display: inline-block;
918
+ border-bottom: 1px dashed var(--rt-accent-2);
919
+ cursor: help;
920
+ color: var(--rt-accent-2);
921
+ }
922
+
923
+ .rt-tooltip__tip {
924
+ position: absolute;
925
+ left: 50%;
926
+ bottom: calc(100% + 6px);
927
+ transform: translateX(-50%);
928
+ padding: 0.4rem 0.6rem;
929
+ font-size: 12px;
930
+ color: var(--rt-bg);
931
+ background: var(--rt-fg);
932
+ border-radius: var(--rt-radius);
933
+ white-space: nowrap;
934
+ z-index: 30;
935
+ opacity: 0;
936
+ pointer-events: none;
937
+ transition: opacity 0.15s ease;
938
+ }
939
+
940
+ .rt-tooltip__tip--visible {
941
+ opacity: 1;
942
+ }
943
+
944
+ /* Copy button */
945
+ .rt-copy {
946
+ display: inline-flex;
947
+ align-items: center;
948
+ gap: 0.25rem;
949
+ padding: 0.15rem 0.4rem;
950
+ font-size: 0.82rem;
951
+ background: var(--rt-bg-alt);
952
+ border: 1px solid var(--rt-border);
953
+ border-radius: var(--rt-radius);
954
+ color: var(--rt-fg);
955
+ cursor: pointer;
956
+ transition: background 0.15s ease;
957
+ }
958
+
959
+ .rt-copy:hover {
960
+ background: var(--rt-border);
961
+ }
962
+
963
+ .rt-copy::before {
964
+ content: "";
965
+ width: 1em;
966
+ height: 1em;
967
+ background-color: currentColor;
968
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M19 21H9a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2M5 17H3V3h12v2H5v12z'/%3E%3C/svg%3E")
969
+ no-repeat center;
970
+ mask-size: contain;
971
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M19 21H9a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2M5 17H3V3h12v2H5v12z'/%3E%3C/svg%3E")
972
+ no-repeat center;
973
+ -webkit-mask-size: contain;
974
+ }
975
+
976
+ /* Code preview */
977
+ .rt-code-preview {
978
+ border: 1px solid var(--rt-border);
979
+ border-radius: var(--rt-radius);
980
+ overflow: hidden;
981
+ margin: 1rem 0;
982
+ background: var(--rt-bg);
983
+ }
984
+
985
+ .rt-code-preview__result {
986
+ padding: 1rem;
987
+ border-bottom: 1px solid var(--rt-border);
988
+ min-height: 3rem;
989
+ background: var(--rt-bg-alt);
990
+ }
991
+
992
+ .rt-code-preview__code {
993
+ margin: 0;
994
+ padding: 1rem;
995
+ background: var(--rt-bg);
996
+ }