@nikala-ui/folio 0.13.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 (454) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +221 -0
  3. package/dist/cli/commands/build.d.ts +5 -0
  4. package/dist/cli/commands/build.d.ts.map +1 -0
  5. package/dist/cli/commands/build.js +28 -0
  6. package/dist/cli/commands/build.js.map +1 -0
  7. package/dist/cli/commands/dev.d.ts +7 -0
  8. package/dist/cli/commands/dev.d.ts.map +1 -0
  9. package/dist/cli/commands/dev.js +33 -0
  10. package/dist/cli/commands/dev.js.map +1 -0
  11. package/dist/cli/commands/init.d.ts +2 -0
  12. package/dist/cli/commands/init.d.ts.map +1 -0
  13. package/dist/cli/commands/init.js +359 -0
  14. package/dist/cli/commands/init.js.map +1 -0
  15. package/dist/cli/commands/preview.d.ts +7 -0
  16. package/dist/cli/commands/preview.d.ts.map +1 -0
  17. package/dist/cli/commands/preview.js +25 -0
  18. package/dist/cli/commands/preview.js.map +1 -0
  19. package/dist/cli/commands/serve.d.ts +7 -0
  20. package/dist/cli/commands/serve.d.ts.map +1 -0
  21. package/dist/cli/commands/serve.js +34 -0
  22. package/dist/cli/commands/serve.js.map +1 -0
  23. package/dist/cli/index.d.ts +3 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +55 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/client/app-types.d.ts +18 -0
  28. package/dist/client/app-types.d.ts.map +1 -0
  29. package/dist/client/app-types.js +2 -0
  30. package/dist/client/app-types.js.map +1 -0
  31. package/dist/client/app.d.ts +5 -0
  32. package/dist/client/app.d.ts.map +1 -0
  33. package/dist/client/app.jsx +51 -0
  34. package/dist/client/app.jsx.map +1 -0
  35. package/dist/client/base.css +90 -0
  36. package/dist/client/components/docs-layout-shell.d.ts +23 -0
  37. package/dist/client/components/docs-layout-shell.d.ts.map +1 -0
  38. package/dist/client/components/docs-layout-shell.jsx +15 -0
  39. package/dist/client/components/docs-layout-shell.jsx.map +1 -0
  40. package/dist/client/components/docs-page-content.d.ts +9 -0
  41. package/dist/client/components/docs-page-content.d.ts.map +1 -0
  42. package/dist/client/components/docs-page-content.jsx +10 -0
  43. package/dist/client/components/docs-page-content.jsx.map +1 -0
  44. package/dist/client/entry.d.ts +2 -0
  45. package/dist/client/entry.d.ts.map +1 -0
  46. package/dist/client/entry.jsx +32 -0
  47. package/dist/client/entry.jsx.map +1 -0
  48. package/dist/client/index.html +23 -0
  49. package/dist/client/navigation/page-navigation.d.ts +9 -0
  50. package/dist/client/navigation/page-navigation.d.ts.map +1 -0
  51. package/dist/client/navigation/page-navigation.js +51 -0
  52. package/dist/client/navigation/page-navigation.js.map +1 -0
  53. package/dist/client/page-actions.d.ts +10 -0
  54. package/dist/client/page-actions.d.ts.map +1 -0
  55. package/dist/client/page-actions.js +63 -0
  56. package/dist/client/page-actions.js.map +1 -0
  57. package/dist/client/public/favicon.ico +0 -0
  58. package/dist/client/routing/use-docs-router.d.ts +17 -0
  59. package/dist/client/routing/use-docs-router.d.ts.map +1 -0
  60. package/dist/client/routing/use-docs-router.js +87 -0
  61. package/dist/client/routing/use-docs-router.js.map +1 -0
  62. package/dist/client/ssr-entry.d.ts +3 -0
  63. package/dist/client/ssr-entry.d.ts.map +1 -0
  64. package/dist/client/ssr-entry.jsx +13 -0
  65. package/dist/client/ssr-entry.jsx.map +1 -0
  66. package/dist/client/style.css +186 -0
  67. package/dist/client/utils/sidebar.d.ts +2 -0
  68. package/dist/client/utils/sidebar.d.ts.map +1 -0
  69. package/dist/client/utils/sidebar.js +2 -0
  70. package/dist/client/utils/sidebar.js.map +1 -0
  71. package/dist/components/mdx-components.d.ts +65 -0
  72. package/dist/components/mdx-components.d.ts.map +1 -0
  73. package/dist/components/mdx-components.jsx +133 -0
  74. package/dist/components/mdx-components.jsx.map +1 -0
  75. package/dist/components/ui/api-table.d.ts +29 -0
  76. package/dist/components/ui/api-table.d.ts.map +1 -0
  77. package/dist/components/ui/api-table.jsx +66 -0
  78. package/dist/components/ui/api-table.jsx.map +1 -0
  79. package/dist/components/ui/badge.d.ts +17 -0
  80. package/dist/components/ui/badge.d.ts.map +1 -0
  81. package/dist/components/ui/badge.jsx +33 -0
  82. package/dist/components/ui/badge.jsx.map +1 -0
  83. package/dist/components/ui/breadcrumb.d.ts +51 -0
  84. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  85. package/dist/components/ui/breadcrumb.jsx +62 -0
  86. package/dist/components/ui/breadcrumb.jsx.map +1 -0
  87. package/dist/components/ui/button.d.ts +19 -0
  88. package/dist/components/ui/button.d.ts.map +1 -0
  89. package/dist/components/ui/button.jsx +54 -0
  90. package/dist/components/ui/button.jsx.map +1 -0
  91. package/dist/components/ui/callout.d.ts +21 -0
  92. package/dist/components/ui/callout.d.ts.map +1 -0
  93. package/dist/components/ui/callout.jsx +76 -0
  94. package/dist/components/ui/callout.jsx.map +1 -0
  95. package/dist/components/ui/card.d.ts +44 -0
  96. package/dist/components/ui/card.d.ts.map +1 -0
  97. package/dist/components/ui/card.jsx +45 -0
  98. package/dist/components/ui/card.jsx.map +1 -0
  99. package/dist/components/ui/code-block.d.ts +23 -0
  100. package/dist/components/ui/code-block.d.ts.map +1 -0
  101. package/dist/components/ui/code-block.jsx +263 -0
  102. package/dist/components/ui/code-block.jsx.map +1 -0
  103. package/dist/components/ui/collapsible.d.ts +27 -0
  104. package/dist/components/ui/collapsible.d.ts.map +1 -0
  105. package/dist/components/ui/collapsible.jsx +29 -0
  106. package/dist/components/ui/collapsible.jsx.map +1 -0
  107. package/dist/components/ui/command.d.ts +57 -0
  108. package/dist/components/ui/command.d.ts.map +1 -0
  109. package/dist/components/ui/command.jsx +224 -0
  110. package/dist/components/ui/command.jsx.map +1 -0
  111. package/dist/components/ui/component-viewer.d.ts +33 -0
  112. package/dist/components/ui/component-viewer.d.ts.map +1 -0
  113. package/dist/components/ui/component-viewer.jsx +210 -0
  114. package/dist/components/ui/component-viewer.jsx.map +1 -0
  115. package/dist/components/ui/container.d.ts +13 -0
  116. package/dist/components/ui/container.d.ts.map +1 -0
  117. package/dist/components/ui/container.jsx +29 -0
  118. package/dist/components/ui/container.jsx.map +1 -0
  119. package/dist/components/ui/dropdown-menu.d.ts +58 -0
  120. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  121. package/dist/components/ui/dropdown-menu.jsx +112 -0
  122. package/dist/components/ui/dropdown-menu.jsx.map +1 -0
  123. package/dist/components/ui/input-group.d.ts +16 -0
  124. package/dist/components/ui/input-group.d.ts.map +1 -0
  125. package/dist/components/ui/input-group.jsx +33 -0
  126. package/dist/components/ui/input-group.jsx.map +1 -0
  127. package/dist/components/ui/kbd.d.ts +15 -0
  128. package/dist/components/ui/kbd.d.ts.map +1 -0
  129. package/dist/components/ui/kbd.jsx +42 -0
  130. package/dist/components/ui/kbd.jsx.map +1 -0
  131. package/dist/components/ui/list.d.ts +36 -0
  132. package/dist/components/ui/list.d.ts.map +1 -0
  133. package/dist/components/ui/list.jsx +131 -0
  134. package/dist/components/ui/list.jsx.map +1 -0
  135. package/dist/components/ui/logo.d.ts +9 -0
  136. package/dist/components/ui/logo.d.ts.map +1 -0
  137. package/dist/components/ui/logo.jsx +31 -0
  138. package/dist/components/ui/logo.jsx.map +1 -0
  139. package/dist/components/ui/navbar.d.ts +57 -0
  140. package/dist/components/ui/navbar.d.ts.map +1 -0
  141. package/dist/components/ui/navbar.jsx +174 -0
  142. package/dist/components/ui/navbar.jsx.map +1 -0
  143. package/dist/components/ui/package-manager-tabs.d.ts +21 -0
  144. package/dist/components/ui/package-manager-tabs.d.ts.map +1 -0
  145. package/dist/components/ui/package-manager-tabs.jsx +167 -0
  146. package/dist/components/ui/package-manager-tabs.jsx.map +1 -0
  147. package/dist/components/ui/pager.d.ts +27 -0
  148. package/dist/components/ui/pager.d.ts.map +1 -0
  149. package/dist/components/ui/pager.jsx +50 -0
  150. package/dist/components/ui/pager.jsx.map +1 -0
  151. package/dist/components/ui/scroll-area.d.ts +9 -0
  152. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  153. package/dist/components/ui/scroll-area.jsx +160 -0
  154. package/dist/components/ui/scroll-area.jsx.map +1 -0
  155. package/dist/components/ui/section-heading.d.ts +23 -0
  156. package/dist/components/ui/section-heading.d.ts.map +1 -0
  157. package/dist/components/ui/section-heading.jsx +82 -0
  158. package/dist/components/ui/section-heading.jsx.map +1 -0
  159. package/dist/components/ui/separator.d.ts +13 -0
  160. package/dist/components/ui/separator.d.ts.map +1 -0
  161. package/dist/components/ui/separator.jsx +16 -0
  162. package/dist/components/ui/separator.jsx.map +1 -0
  163. package/dist/components/ui/sidebar.d.ts +103 -0
  164. package/dist/components/ui/sidebar.d.ts.map +1 -0
  165. package/dist/components/ui/sidebar.jsx +315 -0
  166. package/dist/components/ui/sidebar.jsx.map +1 -0
  167. package/dist/components/ui/skeleton.d.ts +9 -0
  168. package/dist/components/ui/skeleton.d.ts.map +1 -0
  169. package/dist/components/ui/skeleton.jsx +11 -0
  170. package/dist/components/ui/skeleton.jsx.map +1 -0
  171. package/dist/components/ui/spinner.d.ts +11 -0
  172. package/dist/components/ui/spinner.d.ts.map +1 -0
  173. package/dist/components/ui/spinner.jsx +21 -0
  174. package/dist/components/ui/spinner.jsx.map +1 -0
  175. package/dist/components/ui/table-of-contents.d.ts +20 -0
  176. package/dist/components/ui/table-of-contents.d.ts.map +1 -0
  177. package/dist/components/ui/table-of-contents.jsx +77 -0
  178. package/dist/components/ui/table-of-contents.jsx.map +1 -0
  179. package/dist/components/ui/table.d.ts +58 -0
  180. package/dist/components/ui/table.d.ts.map +1 -0
  181. package/dist/components/ui/table.jsx +61 -0
  182. package/dist/components/ui/table.jsx.map +1 -0
  183. package/dist/components/ui/tabs.d.ts +42 -0
  184. package/dist/components/ui/tabs.d.ts.map +1 -0
  185. package/dist/components/ui/tabs.jsx +93 -0
  186. package/dist/components/ui/tabs.jsx.map +1 -0
  187. package/dist/components/ui/theme-toggle.d.ts +19 -0
  188. package/dist/components/ui/theme-toggle.d.ts.map +1 -0
  189. package/dist/components/ui/theme-toggle.jsx +142 -0
  190. package/dist/components/ui/theme-toggle.jsx.map +1 -0
  191. package/dist/components/ui/tooltip.d.ts +10 -0
  192. package/dist/components/ui/tooltip.d.ts.map +1 -0
  193. package/dist/components/ui/tooltip.jsx +18 -0
  194. package/dist/components/ui/tooltip.jsx.map +1 -0
  195. package/dist/config.d.ts +6 -0
  196. package/dist/config.d.ts.map +1 -0
  197. package/dist/config.js +105 -0
  198. package/dist/config.js.map +1 -0
  199. package/dist/core/content-scanner.d.ts +10 -0
  200. package/dist/core/content-scanner.d.ts.map +1 -0
  201. package/dist/core/content-scanner.js +218 -0
  202. package/dist/core/content-scanner.js.map +1 -0
  203. package/dist/core/route-tree.d.ts +24 -0
  204. package/dist/core/route-tree.d.ts.map +1 -0
  205. package/dist/core/route-tree.js +221 -0
  206. package/dist/core/route-tree.js.map +1 -0
  207. package/dist/hooks/create-click-outside.d.ts +18 -0
  208. package/dist/hooks/create-click-outside.d.ts.map +1 -0
  209. package/dist/hooks/create-click-outside.js +55 -0
  210. package/dist/hooks/create-click-outside.js.map +1 -0
  211. package/dist/hooks/create-clipboard.d.ts +20 -0
  212. package/dist/hooks/create-clipboard.d.ts.map +1 -0
  213. package/dist/hooks/create-clipboard.js +48 -0
  214. package/dist/hooks/create-clipboard.js.map +1 -0
  215. package/dist/hooks/create-color-mode.d.ts +27 -0
  216. package/dist/hooks/create-color-mode.d.ts.map +1 -0
  217. package/dist/hooks/create-color-mode.js +86 -0
  218. package/dist/hooks/create-color-mode.js.map +1 -0
  219. package/dist/hooks/create-controllable-signal.d.ts +17 -0
  220. package/dist/hooks/create-controllable-signal.d.ts.map +1 -0
  221. package/dist/hooks/create-controllable-signal.js +35 -0
  222. package/dist/hooks/create-controllable-signal.js.map +1 -0
  223. package/dist/hooks/create-focus-trap.d.ts +15 -0
  224. package/dist/hooks/create-focus-trap.d.ts.map +1 -0
  225. package/dist/hooks/create-focus-trap.js +72 -0
  226. package/dist/hooks/create-focus-trap.js.map +1 -0
  227. package/dist/hooks/create-keybindings.d.ts +34 -0
  228. package/dist/hooks/create-keybindings.d.ts.map +1 -0
  229. package/dist/hooks/create-keybindings.js +113 -0
  230. package/dist/hooks/create-keybindings.js.map +1 -0
  231. package/dist/hooks/create-lock-scroll.d.ts +20 -0
  232. package/dist/hooks/create-lock-scroll.d.ts.map +1 -0
  233. package/dist/hooks/create-lock-scroll.js +77 -0
  234. package/dist/hooks/create-lock-scroll.js.map +1 -0
  235. package/dist/hooks/create-resize-observer.d.ts +27 -0
  236. package/dist/hooks/create-resize-observer.d.ts.map +1 -0
  237. package/dist/hooks/create-resize-observer.js +59 -0
  238. package/dist/hooks/create-resize-observer.js.map +1 -0
  239. package/dist/hooks/create-scroll-position.d.ts +29 -0
  240. package/dist/hooks/create-scroll-position.d.ts.map +1 -0
  241. package/dist/hooks/create-scroll-position.js +101 -0
  242. package/dist/hooks/create-scroll-position.js.map +1 -0
  243. package/dist/index.d.ts +13 -0
  244. package/dist/index.d.ts.map +1 -0
  245. package/dist/index.js +14 -0
  246. package/dist/index.js.map +1 -0
  247. package/dist/lib/cn.d.ts +6 -0
  248. package/dist/lib/cn.d.ts.map +1 -0
  249. package/dist/lib/cn.js +9 -0
  250. package/dist/lib/cn.js.map +1 -0
  251. package/dist/mdx/compiler.d.ts +13 -0
  252. package/dist/mdx/compiler.d.ts.map +1 -0
  253. package/dist/mdx/compiler.js +38 -0
  254. package/dist/mdx/compiler.js.map +1 -0
  255. package/dist/mdx/highlighter.d.ts +22 -0
  256. package/dist/mdx/highlighter.d.ts.map +1 -0
  257. package/dist/mdx/highlighter.js +190 -0
  258. package/dist/mdx/highlighter.js.map +1 -0
  259. package/dist/mdx/rehype-shiki.d.ts +3 -0
  260. package/dist/mdx/rehype-shiki.d.ts.map +1 -0
  261. package/dist/mdx/rehype-shiki.js +83 -0
  262. package/dist/mdx/rehype-shiki.js.map +1 -0
  263. package/dist/navigation/index.d.ts +3 -0
  264. package/dist/navigation/index.d.ts.map +1 -0
  265. package/dist/navigation/index.js +3 -0
  266. package/dist/navigation/index.js.map +1 -0
  267. package/dist/navigation/repository-links.d.ts +3 -0
  268. package/dist/navigation/repository-links.d.ts.map +1 -0
  269. package/dist/navigation/repository-links.js +35 -0
  270. package/dist/navigation/repository-links.js.map +1 -0
  271. package/dist/navigation/sidebar-state.d.ts +6 -0
  272. package/dist/navigation/sidebar-state.d.ts.map +1 -0
  273. package/dist/navigation/sidebar-state.js +20 -0
  274. package/dist/navigation/sidebar-state.js.map +1 -0
  275. package/dist/navigation/sidebar-tree.d.ts +7 -0
  276. package/dist/navigation/sidebar-tree.d.ts.map +1 -0
  277. package/dist/navigation/sidebar-tree.js +11 -0
  278. package/dist/navigation/sidebar-tree.js.map +1 -0
  279. package/dist/providers/theme-provider.d.ts +33 -0
  280. package/dist/providers/theme-provider.d.ts.map +1 -0
  281. package/dist/providers/theme-provider.jsx +158 -0
  282. package/dist/providers/theme-provider.jsx.map +1 -0
  283. package/dist/providers/theme-script.d.ts +16 -0
  284. package/dist/providers/theme-script.d.ts.map +1 -0
  285. package/dist/providers/theme-script.jsx +41 -0
  286. package/dist/providers/theme-script.jsx.map +1 -0
  287. package/dist/providers/theme-transitions.d.ts +12 -0
  288. package/dist/providers/theme-transitions.d.ts.map +1 -0
  289. package/dist/providers/theme-transitions.js +115 -0
  290. package/dist/providers/theme-transitions.js.map +1 -0
  291. package/dist/registry/api-table.json +21 -0
  292. package/dist/registry/badge.json +18 -0
  293. package/dist/registry/breadcrumb.json +17 -0
  294. package/dist/registry/button.json +21 -0
  295. package/dist/registry/callout.json +19 -0
  296. package/dist/registry/card.json +17 -0
  297. package/dist/registry/code-block.json +28 -0
  298. package/dist/registry/collapsible.json +18 -0
  299. package/dist/registry/command.json +27 -0
  300. package/dist/registry/component-viewer.json +25 -0
  301. package/dist/registry/container.json +18 -0
  302. package/dist/registry/create-click-outside.json +13 -0
  303. package/dist/registry/create-clipboard.json +13 -0
  304. package/dist/registry/create-color-mode.json +13 -0
  305. package/dist/registry/create-controllable-signal.json +13 -0
  306. package/dist/registry/create-focus-trap.json +13 -0
  307. package/dist/registry/create-keybindings.json +13 -0
  308. package/dist/registry/create-lock-scroll.json +13 -0
  309. package/dist/registry/create-resize-observer.json +13 -0
  310. package/dist/registry/create-scroll-position.json +13 -0
  311. package/dist/registry/dropdown-menu.json +22 -0
  312. package/dist/registry/input-group.json +21 -0
  313. package/dist/registry/kbd.json +18 -0
  314. package/dist/registry/list.json +20 -0
  315. package/dist/registry/logo.json +17 -0
  316. package/dist/registry/navbar.json +19 -0
  317. package/dist/registry/package-manager-tabs.json +24 -0
  318. package/dist/registry/pager.json +21 -0
  319. package/dist/registry/scroll-area.json +21 -0
  320. package/dist/registry/section-heading.json +21 -0
  321. package/dist/registry/separator.json +17 -0
  322. package/dist/registry/sidebar.json +24 -0
  323. package/dist/registry/skeleton.json +17 -0
  324. package/dist/registry/spinner.json +18 -0
  325. package/dist/registry/table-of-contents.json +23 -0
  326. package/dist/registry/table.json +17 -0
  327. package/dist/registry/tabs.json +20 -0
  328. package/dist/registry/theme-manager.json +39 -0
  329. package/dist/registry/tooltip.json +18 -0
  330. package/dist/search/provider.d.ts +14 -0
  331. package/dist/search/provider.d.ts.map +1 -0
  332. package/dist/search/provider.js +14 -0
  333. package/dist/search/provider.js.map +1 -0
  334. package/dist/server/index.d.ts +18 -0
  335. package/dist/server/index.d.ts.map +1 -0
  336. package/dist/server/index.js +565 -0
  337. package/dist/server/index.js.map +1 -0
  338. package/dist/server/plugin.d.ts +10 -0
  339. package/dist/server/plugin.d.ts.map +1 -0
  340. package/dist/server/plugin.js +522 -0
  341. package/dist/server/plugin.js.map +1 -0
  342. package/dist/theme-accent.d.ts +8 -0
  343. package/dist/theme-accent.d.ts.map +1 -0
  344. package/dist/theme-accent.js +18 -0
  345. package/dist/theme-accent.js.map +1 -0
  346. package/dist/theme-mode.d.ts +4 -0
  347. package/dist/theme-mode.d.ts.map +1 -0
  348. package/dist/theme-mode.js +5 -0
  349. package/dist/theme-mode.js.map +1 -0
  350. package/dist/themes/default/content/breadcrumbs.d.ts +4 -0
  351. package/dist/themes/default/content/breadcrumbs.d.ts.map +1 -0
  352. package/dist/themes/default/content/breadcrumbs.jsx +31 -0
  353. package/dist/themes/default/content/breadcrumbs.jsx.map +1 -0
  354. package/dist/themes/default/content/pager.d.ts +5 -0
  355. package/dist/themes/default/content/pager.d.ts.map +1 -0
  356. package/dist/themes/default/content/pager.jsx +9 -0
  357. package/dist/themes/default/content/pager.jsx.map +1 -0
  358. package/dist/themes/default/content/table-of-contents.d.ts +4 -0
  359. package/dist/themes/default/content/table-of-contents.d.ts.map +1 -0
  360. package/dist/themes/default/content/table-of-contents.jsx +19 -0
  361. package/dist/themes/default/content/table-of-contents.jsx.map +1 -0
  362. package/dist/themes/default/icons.d.ts +3 -0
  363. package/dist/themes/default/icons.d.ts.map +1 -0
  364. package/dist/themes/default/icons.js +15 -0
  365. package/dist/themes/default/icons.js.map +1 -0
  366. package/dist/themes/default/index.d.ts +12 -0
  367. package/dist/themes/default/index.d.ts.map +1 -0
  368. package/dist/themes/default/index.js +30 -0
  369. package/dist/themes/default/index.js.map +1 -0
  370. package/dist/themes/default/layout.d.ts +4 -0
  371. package/dist/themes/default/layout.d.ts.map +1 -0
  372. package/dist/themes/default/layout.jsx +194 -0
  373. package/dist/themes/default/layout.jsx.map +1 -0
  374. package/dist/themes/default/navbar.d.ts +4 -0
  375. package/dist/themes/default/navbar.d.ts.map +1 -0
  376. package/dist/themes/default/navbar.jsx +83 -0
  377. package/dist/themes/default/navbar.jsx.map +1 -0
  378. package/dist/themes/default/navigation/mobile-table-of-contents.d.ts +4 -0
  379. package/dist/themes/default/navigation/mobile-table-of-contents.d.ts.map +1 -0
  380. package/dist/themes/default/navigation/mobile-table-of-contents.jsx +38 -0
  381. package/dist/themes/default/navigation/mobile-table-of-contents.jsx.map +1 -0
  382. package/dist/themes/default/navigation/sidebar-tree.d.ts +8 -0
  383. package/dist/themes/default/navigation/sidebar-tree.d.ts.map +1 -0
  384. package/dist/themes/default/navigation/sidebar-tree.jsx +124 -0
  385. package/dist/themes/default/navigation/sidebar-tree.jsx.map +1 -0
  386. package/dist/themes/default/overlays/search-dialog.d.ts +4 -0
  387. package/dist/themes/default/overlays/search-dialog.d.ts.map +1 -0
  388. package/dist/themes/default/overlays/search-dialog.jsx +52 -0
  389. package/dist/themes/default/overlays/search-dialog.jsx.map +1 -0
  390. package/dist/themes/default/sidebar.d.ts +4 -0
  391. package/dist/themes/default/sidebar.d.ts.map +1 -0
  392. package/dist/themes/default/sidebar.jsx +92 -0
  393. package/dist/themes/default/sidebar.jsx.map +1 -0
  394. package/dist/themes/index.d.ts +4 -0
  395. package/dist/themes/index.d.ts.map +1 -0
  396. package/dist/themes/index.js +5 -0
  397. package/dist/themes/index.js.map +1 -0
  398. package/dist/themes/types.d.ts +91 -0
  399. package/dist/themes/types.d.ts.map +1 -0
  400. package/dist/themes/types.js +2 -0
  401. package/dist/themes/types.js.map +1 -0
  402. package/dist/types.d.ts +132 -0
  403. package/dist/types.d.ts.map +1 -0
  404. package/dist/types.js +3 -0
  405. package/dist/types.js.map +1 -0
  406. package/dist/vendor/docs-src/components/mdx-components.tsx +144 -0
  407. package/dist/vendor/docs-src/components/ui/api-table.tsx +117 -0
  408. package/dist/vendor/docs-src/components/ui/badge.tsx +56 -0
  409. package/dist/vendor/docs-src/components/ui/breadcrumb.tsx +136 -0
  410. package/dist/vendor/docs-src/components/ui/button.tsx +82 -0
  411. package/dist/vendor/docs-src/components/ui/callout.tsx +137 -0
  412. package/dist/vendor/docs-src/components/ui/card.tsx +113 -0
  413. package/dist/vendor/docs-src/components/ui/code-block.tsx +347 -0
  414. package/dist/vendor/docs-src/components/ui/collapsible.tsx +73 -0
  415. package/dist/vendor/docs-src/components/ui/command.tsx +382 -0
  416. package/dist/vendor/docs-src/components/ui/component-viewer.tsx +363 -0
  417. package/dist/vendor/docs-src/components/ui/container.tsx +45 -0
  418. package/dist/vendor/docs-src/components/ui/dropdown-menu.tsx +298 -0
  419. package/dist/vendor/docs-src/components/ui/input-group.tsx +80 -0
  420. package/dist/vendor/docs-src/components/ui/kbd.tsx +73 -0
  421. package/dist/vendor/docs-src/components/ui/list.tsx +222 -0
  422. package/dist/vendor/docs-src/components/ui/logo.tsx +68 -0
  423. package/dist/vendor/docs-src/components/ui/navbar.tsx +375 -0
  424. package/dist/vendor/docs-src/components/ui/package-manager-tabs.tsx +226 -0
  425. package/dist/vendor/docs-src/components/ui/pager.tsx +102 -0
  426. package/dist/vendor/docs-src/components/ui/scroll-area.tsx +228 -0
  427. package/dist/vendor/docs-src/components/ui/section-heading.tsx +115 -0
  428. package/dist/vendor/docs-src/components/ui/separator.tsx +37 -0
  429. package/dist/vendor/docs-src/components/ui/sidebar.tsx +712 -0
  430. package/dist/vendor/docs-src/components/ui/skeleton.tsx +24 -0
  431. package/dist/vendor/docs-src/components/ui/spinner.tsx +41 -0
  432. package/dist/vendor/docs-src/components/ui/table-of-contents.tsx +131 -0
  433. package/dist/vendor/docs-src/components/ui/table.tsx +160 -0
  434. package/dist/vendor/docs-src/components/ui/tabs.tsx +204 -0
  435. package/dist/vendor/docs-src/components/ui/theme-toggle.tsx +238 -0
  436. package/dist/vendor/docs-src/components/ui/tooltip.tsx +41 -0
  437. package/dist/vendor/docs-src/hooks/create-click-outside.ts +82 -0
  438. package/dist/vendor/docs-src/hooks/create-clipboard.ts +69 -0
  439. package/dist/vendor/docs-src/hooks/create-color-mode.ts +115 -0
  440. package/dist/vendor/docs-src/hooks/create-controllable-signal.ts +56 -0
  441. package/dist/vendor/docs-src/hooks/create-focus-trap.ts +94 -0
  442. package/dist/vendor/docs-src/hooks/create-keybindings.ts +148 -0
  443. package/dist/vendor/docs-src/hooks/create-lock-scroll.ts +97 -0
  444. package/dist/vendor/docs-src/hooks/create-resize-observer.ts +89 -0
  445. package/dist/vendor/docs-src/hooks/create-scroll-position.ts +129 -0
  446. package/dist/vendor/docs-src/lib/cn.ts +9 -0
  447. package/dist/vendor/docs-src/providers/theme-provider.tsx +203 -0
  448. package/dist/vendor/docs-src/providers/theme-script.tsx +54 -0
  449. package/dist/vendor/docs-src/providers/theme-transitions.ts +139 -0
  450. package/dist/version.d.ts +2 -0
  451. package/dist/version.d.ts.map +1 -0
  452. package/dist/version.js +2 -0
  453. package/dist/version.js.map +1 -0
  454. package/package.json +95 -0
@@ -0,0 +1,83 @@
1
+ import { ensureLanguage, ensureTheme, getDocsHighlighter } from "./highlighter.js";
2
+ export function rehypeShiki(config) {
3
+ return async (tree) => {
4
+ const highlighter = await getDocsHighlighter(config);
5
+ const lightTheme = config?.themes?.light
6
+ ? await ensureTheme(highlighter, config.themes.light)
7
+ : "github-light";
8
+ const darkTheme = config?.themes?.dark
9
+ ? await ensureTheme(highlighter, config.themes.dark)
10
+ : "github-dark";
11
+ const tasks = [];
12
+ function visit(node, parent, index) {
13
+ if (node && node.type === "element" && node.tagName === "pre") {
14
+ const codeNode = node.children?.find((child) => child.type === "element" && child.tagName === "code");
15
+ if (codeNode) {
16
+ const className = codeNode.properties?.className || [];
17
+ const langClass = className.find((c) => c.startsWith("language-"));
18
+ const rawLang = langClass ? langClass.replace("language-", "") : "text";
19
+ // Extract text content from code children
20
+ let codeText = "";
21
+ for (const child of codeNode.children || []) {
22
+ if (child.type === "text") {
23
+ codeText += child.value;
24
+ }
25
+ }
26
+ tasks.push((async () => {
27
+ try {
28
+ // Dynamically ensure language is loaded on-demand
29
+ const targetLang = await ensureLanguage(highlighter, rawLang);
30
+ const hast = highlighter.codeToHast(codeText.trimEnd(), {
31
+ lang: targetLang,
32
+ themes: {
33
+ light: lightTheme,
34
+ dark: darkTheme,
35
+ },
36
+ defaultColor: false,
37
+ });
38
+ if (hast.children?.[0] && parent && typeof index === "number") {
39
+ const highlightedPre = hast.children[0];
40
+ // Preserve or merge existing classes
41
+ const existingClass = highlightedPre.properties?.className || [];
42
+ highlightedPre.properties = highlightedPre.properties || {};
43
+ highlightedPre.properties.className = [
44
+ ...existingClass,
45
+ "nikala-code-block",
46
+ "font-mono",
47
+ "text-xs",
48
+ ];
49
+ // Store raw code in data attribute for copy actions
50
+ highlightedPre.properties["data-code"] = codeText.trimEnd();
51
+ highlightedPre.properties["data-lang"] = targetLang;
52
+ // Add class to code element so MdxCode knows it is inside pre
53
+ const codeEl = highlightedPre.children?.find((child) => child.type === "element" && child.tagName === "code");
54
+ if (codeEl) {
55
+ const codeClass = codeEl.properties?.className || [];
56
+ codeEl.properties = codeEl.properties || {};
57
+ codeEl.properties.className = [
58
+ ...codeClass,
59
+ "shiki-code",
60
+ `language-${targetLang}`,
61
+ ];
62
+ }
63
+ parent.children[index] = highlightedPre;
64
+ }
65
+ }
66
+ catch (err) {
67
+ // Fallback to unhighlighted code on error
68
+ console.warn(`[folio] Shiki highlighting failed for lang: ${rawLang}`, err);
69
+ }
70
+ })());
71
+ }
72
+ }
73
+ if (node.children && Array.isArray(node.children)) {
74
+ for (let i = 0; i < node.children.length; i++) {
75
+ visit(node.children[i], node, i);
76
+ }
77
+ }
78
+ }
79
+ visit(tree, null, -1);
80
+ await Promise.all(tasks);
81
+ };
82
+ }
83
+ //# sourceMappingURL=rehype-shiki.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rehype-shiki.js","sourceRoot":"","sources":["../../src/mdx/rehype-shiki.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./sidebar-state.js";
2
+ export * from "./repository-links.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./sidebar-state.js";
2
+ export * from "./repository-links.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { DocsConfig } from "../types.js";
2
+ export declare function getRepositorySourceUrl(repository: NonNullable<DocsConfig["repository"]>, sourcePath: string, contentDir?: string): string | undefined;
3
+ //# sourceMappingURL=repository-links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository-links.d.ts","sourceRoot":"","sources":["../../src/navigation/repository-links.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAqB9C,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EACjD,UAAU,EAAE,MAAM,EAClB,UAAU,SAAS,GAClB,MAAM,GAAG,SAAS,CAiBpB"}
@@ -0,0 +1,35 @@
1
+ function normalizeRepositoryPath(...parts) {
2
+ const segments = parts
3
+ .flatMap((part) => part.replace(/\\/g, "/").split("/"))
4
+ .filter((segment) => segment && segment !== ".");
5
+ if (segments.some((segment) => segment === ".."))
6
+ return undefined;
7
+ return segments.map((segment) => encodeURIComponent(segment)).join("/");
8
+ }
9
+ function repositoryBaseUrl(url) {
10
+ try {
11
+ const parsed = new URL(url);
12
+ if (!parsed.protocol.startsWith("http"))
13
+ return undefined;
14
+ return parsed.toString().replace(/\/$/, "").replace(/\.git$/, "");
15
+ }
16
+ catch {
17
+ return undefined;
18
+ }
19
+ }
20
+ export function getRepositorySourceUrl(repository, sourcePath, contentDir = "docs") {
21
+ const baseUrl = repositoryBaseUrl(repository.url);
22
+ const filePath = normalizeRepositoryPath(repository.rootDir || "", contentDir, sourcePath);
23
+ if (!baseUrl || !filePath)
24
+ return undefined;
25
+ const branch = encodeURIComponent(repository.branch || "main");
26
+ const hostname = new URL(baseUrl).hostname.toLowerCase();
27
+ if (hostname === "gitlab.com" || hostname.endsWith(".gitlab.com")) {
28
+ return `${baseUrl}/-/blob/${branch}/${filePath}`;
29
+ }
30
+ if (hostname === "bitbucket.org" || hostname.endsWith(".bitbucket.org")) {
31
+ return `${baseUrl}/src/${branch}/${filePath}`;
32
+ }
33
+ return `${baseUrl}/blob/${branch}/${filePath}`;
34
+ }
35
+ //# sourceMappingURL=repository-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository-links.js","sourceRoot":"","sources":["../../src/navigation/repository-links.ts"],"names":[],"mappings":"AAEA,SAAS,uBAAuB,CAAC,GAAG,KAAe;IACjD,MAAM,QAAQ,GAAG,KAAK;SACnB,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACtD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC;IAEnD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACnE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1D,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,UAAiD,EACjD,UAAkB,EAClB,UAAU,GAAG,MAAM;IAEnB,MAAM,OAAO,GAAG,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC3F,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAE5C,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAEzD,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAClE,OAAO,GAAG,OAAO,WAAW,MAAM,IAAI,QAAQ,EAAE,CAAC;IACnD,CAAC;IAED,IAAI,QAAQ,KAAK,eAAe,IAAI,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxE,OAAO,GAAG,OAAO,QAAQ,MAAM,IAAI,QAAQ,EAAE,CAAC;IAChD,CAAC;IAED,OAAO,GAAG,OAAO,SAAS,MAAM,IAAI,QAAQ,EAAE,CAAC;AACjD,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { SidebarItem } from "../types.js";
2
+ export declare function isSidebarItemActive(item: SidebarItem, currentUrl?: string): boolean;
3
+ export declare function containsActiveSidebarItem(item: SidebarItem, currentUrl?: string): boolean;
4
+ export declare function isSidebarItemNew(item: SidebarItem): boolean;
5
+ export declare function containsNewSidebarItem(item: SidebarItem): boolean;
6
+ //# sourceMappingURL=sidebar-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-state.d.ts","sourceRoot":"","sources":["../../src/navigation/sidebar-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAEnF;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAGzF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAM3D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEjE"}
@@ -0,0 +1,20 @@
1
+ export function isSidebarItemActive(item, currentUrl) {
2
+ return Boolean(item.href && currentUrl && item.href === currentUrl);
3
+ }
4
+ export function containsActiveSidebarItem(item, currentUrl) {
5
+ return isSidebarItemActive(item, currentUrl)
6
+ || Boolean(item.items?.some((child) => containsActiveSidebarItem(child, currentUrl)));
7
+ }
8
+ export function isSidebarItemNew(item) {
9
+ if (!item.addedAt)
10
+ return false;
11
+ const timestamp = new Date(item.addedAt).getTime();
12
+ if (!Number.isFinite(timestamp))
13
+ return false;
14
+ const ageInDays = (Date.now() - timestamp) / (1000 * 60 * 60 * 24);
15
+ return ageInDays >= 0 && ageInDays <= 14;
16
+ }
17
+ export function containsNewSidebarItem(item) {
18
+ return isSidebarItemNew(item) || Boolean(item.items?.some(containsNewSidebarItem));
19
+ }
20
+ //# sourceMappingURL=sidebar-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-state.js","sourceRoot":"","sources":["../../src/navigation/sidebar-state.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,IAAiB,EAAE,UAAmB;IACxE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAiB,EAAE,UAAmB;IAC9E,OAAO,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC;WACvC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAiB;IAChD,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACnE,OAAO,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAiB;IACtD,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACrF,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { SidebarItem } from "../types.js";
2
+ export interface FlatSidebarItem {
3
+ title: string;
4
+ href: string;
5
+ }
6
+ export declare function flattenSidebarItems(items: SidebarItem[]): FlatSidebarItem[];
7
+ //# sourceMappingURL=sidebar-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-tree.d.ts","sourceRoot":"","sources":["../../src/navigation/sidebar-tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,eAAe,EAAE,CAO3E"}
@@ -0,0 +1,11 @@
1
+ export function flattenSidebarItems(items) {
2
+ const flattened = [];
3
+ for (const item of items) {
4
+ if (item.href)
5
+ flattened.push({ title: item.title, href: item.href });
6
+ if (item.items)
7
+ flattened.push(...flattenSidebarItems(item.items));
8
+ }
9
+ return flattened;
10
+ }
11
+ //# sourceMappingURL=sidebar-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-tree.js","sourceRoot":"","sources":["../../src/navigation/sidebar-tree.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,mBAAmB,CAAC,KAAoB;IACtD,MAAM,SAAS,GAAsB,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI;YAAE,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,KAAK;YAAE,SAAS,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { type ParentComponent, type Accessor } from "solid-js";
2
+ import { type DocsAccentColor } from "../theme-accent.js";
3
+ export type Theme = "light" | "dark" | "system";
4
+ export type AccentColor = DocsAccentColor;
5
+ export type Radius = "0" | "0.3" | "0.5" | "0.75" | "1.0";
6
+ export interface ThemeProviderProps {
7
+ /** Initial default theme mode if no saved preference is found in localStorage */
8
+ defaultTheme?: Theme;
9
+ /** Initial default accent color override if needed */
10
+ defaultAccent?: AccentColor;
11
+ /** Initial default border radius override if needed */
12
+ defaultRadius?: Radius;
13
+ /** Key used to store theme preferences in localStorage */
14
+ storageKey?: string;
15
+ }
16
+ interface ThemeProviderContextValue {
17
+ theme: Accessor<Theme>;
18
+ setTheme: (theme: Theme) => void;
19
+ accent: Accessor<AccentColor | undefined>;
20
+ setAccent: (accent: AccentColor) => void;
21
+ radius: Accessor<Radius | undefined>;
22
+ setRadius: (radius: Radius) => void;
23
+ }
24
+ /**
25
+ * Context provider managing application theme state (light/dark/system), accent colors, and border radius.
26
+ */
27
+ export declare const ThemeProvider: ParentComponent<ThemeProviderProps>;
28
+ /**
29
+ * Accesses Nikala UI theme state, accent colors, border radius, and update functions.
30
+ */
31
+ export declare function useTheme(): ThemeProviderContextValue;
32
+ export { ThemeScript, type ThemeScriptProps } from "./theme-script";
33
+ //# sourceMappingURL=theme-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-provider.d.ts","sourceRoot":"","sources":["../../src/providers/theme-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,QAAQ,EACd,MAAM,UAAU,CAAC;AAClB,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAChD,MAAM,MAAM,WAAW,GAAG,eAAe,CAAC;AAC1C,MAAM,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,sDAAsD;IACtD,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,yBAAyB;IACjC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,MAAM,EAAE,QAAQ,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAC1C,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACrC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAID;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,eAAe,CAAC,kBAAkB,CAgJ7D,CAAC;AAEF;;GAEG;AACH,wBAAgB,QAAQ,IAAI,yBAAyB,CAMpD;AAED,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,158 @@
1
+ import { createContext, createEffect, createSignal, onCleanup, onMount, useContext, } from "solid-js";
2
+ import { getAccentCssVariables, isDocsAccentColor, } from "../theme-accent.js";
3
+ const ThemeProviderContext = createContext();
4
+ /**
5
+ * Context provider managing application theme state (light/dark/system), accent colors, and border radius.
6
+ */
7
+ export const ThemeProvider = (props) => {
8
+ const storageKey = props.storageKey || "nikala-theme";
9
+ const defaultTheme = props.defaultTheme || "system";
10
+ // Safely read saved values from localStorage without forcing unnecessary fallbacks
11
+ const getInitialTheme = () => {
12
+ if (typeof window === "undefined")
13
+ return defaultTheme;
14
+ try {
15
+ const saved = localStorage.getItem(`${storageKey}-mode`);
16
+ if (saved === "light" || saved === "dark" || saved === "system")
17
+ return saved;
18
+ }
19
+ catch { }
20
+ return defaultTheme;
21
+ };
22
+ const getInitialAccent = () => {
23
+ if (typeof window === "undefined")
24
+ return props.defaultAccent;
25
+ try {
26
+ const saved = localStorage.getItem(`${storageKey}-accent`);
27
+ if (isDocsAccentColor(saved))
28
+ return saved;
29
+ }
30
+ catch { }
31
+ return props.defaultAccent;
32
+ };
33
+ const getInitialRadius = () => {
34
+ if (typeof window === "undefined")
35
+ return props.defaultRadius;
36
+ try {
37
+ const saved = localStorage.getItem(`${storageKey}-radius`);
38
+ if (saved)
39
+ return saved;
40
+ }
41
+ catch { }
42
+ return props.defaultRadius;
43
+ };
44
+ const [theme, setThemeSignal] = createSignal(getInitialTheme());
45
+ const [accent, setAccentSignal] = createSignal(getInitialAccent());
46
+ const [radius, setRadiusSignal] = createSignal(getInitialRadius());
47
+ // Applies classes and CSS custom properties when custom overrides are explicitly set
48
+ const applyTheme = (targetTheme, currentAccent, currentRadius) => {
49
+ if (typeof window === "undefined")
50
+ return;
51
+ const root = document.documentElement;
52
+ root.classList.remove("light", "dark");
53
+ let resolvedDark = false;
54
+ if (targetTheme === "system") {
55
+ resolvedDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
56
+ root.classList.add(resolvedDark ? "dark" : "light");
57
+ }
58
+ else {
59
+ resolvedDark = targetTheme === "dark";
60
+ root.classList.add(targetTheme);
61
+ }
62
+ root.style.colorScheme = resolvedDark ? "dark" : "light";
63
+ // Override --primary CSS variables ONLY if explicitly chosen
64
+ if (currentAccent && isDocsAccentColor(currentAccent)) {
65
+ const accentTokens = getAccentCssVariables(currentAccent, resolvedDark);
66
+ root.style.setProperty("--primary", accentTokens.primary);
67
+ root.style.setProperty("--primary-foreground", accentTokens.foreground);
68
+ }
69
+ else {
70
+ root.style.removeProperty("--primary");
71
+ root.style.removeProperty("--primary-foreground");
72
+ }
73
+ // Override --radius CSS variable ONLY if explicitly chosen
74
+ if (currentRadius) {
75
+ root.style.setProperty("--radius", `${currentRadius}rem`);
76
+ }
77
+ else {
78
+ root.style.removeProperty("--radius");
79
+ }
80
+ };
81
+ // Reactively apply theme updates and store preferences in localStorage
82
+ createEffect(() => {
83
+ const t = theme();
84
+ const a = accent();
85
+ const r = radius();
86
+ applyTheme(t, a, r);
87
+ if (typeof window !== "undefined") {
88
+ try {
89
+ localStorage.setItem(`${storageKey}-mode`, t);
90
+ if (a)
91
+ localStorage.setItem(`${storageKey}-accent`, a);
92
+ else
93
+ localStorage.removeItem(`${storageKey}-accent`);
94
+ if (r)
95
+ localStorage.setItem(`${storageKey}-radius`, r);
96
+ else
97
+ localStorage.removeItem(`${storageKey}-radius`);
98
+ }
99
+ catch { }
100
+ }
101
+ });
102
+ onMount(() => {
103
+ if (typeof window === "undefined")
104
+ return;
105
+ const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
106
+ const handleSystemChange = (e) => {
107
+ if (theme() === "system") {
108
+ const root = document.documentElement;
109
+ root.classList.remove("light", "dark");
110
+ root.classList.add(e.matches ? "dark" : "light");
111
+ root.style.colorScheme = e.matches ? "dark" : "light";
112
+ const currentAccent = accent();
113
+ if (currentAccent && isDocsAccentColor(currentAccent)) {
114
+ const accentTokens = getAccentCssVariables(currentAccent, e.matches);
115
+ root.style.setProperty("--primary", accentTokens.primary);
116
+ root.style.setProperty("--primary-foreground", accentTokens.foreground);
117
+ }
118
+ }
119
+ };
120
+ if (mediaQuery.addEventListener) {
121
+ mediaQuery.addEventListener("change", handleSystemChange);
122
+ }
123
+ else if ("addListener" in mediaQuery) {
124
+ mediaQuery.addListener(handleSystemChange);
125
+ }
126
+ onCleanup(() => {
127
+ if (mediaQuery.removeEventListener) {
128
+ mediaQuery.removeEventListener("change", handleSystemChange);
129
+ }
130
+ else if ("removeListener" in mediaQuery) {
131
+ mediaQuery.removeListener(handleSystemChange);
132
+ }
133
+ });
134
+ });
135
+ const value = {
136
+ theme,
137
+ setTheme: (newTheme) => setThemeSignal(newTheme),
138
+ accent,
139
+ setAccent: (newAccent) => setAccentSignal(newAccent),
140
+ radius,
141
+ setRadius: (newRadius) => setRadiusSignal(newRadius),
142
+ };
143
+ return (<ThemeProviderContext.Provider value={value}>
144
+ {props.children}
145
+ </ThemeProviderContext.Provider>);
146
+ };
147
+ /**
148
+ * Accesses Nikala UI theme state, accent colors, border radius, and update functions.
149
+ */
150
+ export function useTheme() {
151
+ const context = useContext(ThemeProviderContext);
152
+ if (!context) {
153
+ throw new Error("useTheme must be used within a ThemeProvider");
154
+ }
155
+ return context;
156
+ }
157
+ export { ThemeScript } from "./theme-script";
158
+ //# sourceMappingURL=theme-provider.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-provider.jsx","sourceRoot":"","sources":["../../src/providers/theme-provider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Component } from "solid-js";
2
+ export interface ThemeScriptProps {
3
+ /** Storage key namespace used in localStorage (default: "nikala-theme") */
4
+ storageKey?: string;
5
+ /** Initial default theme mode if no saved preference exists (default: "system") */
6
+ defaultTheme?: "light" | "dark" | "system";
7
+ /** Initial default primary accent color if no saved preference exists */
8
+ defaultAccent?: string;
9
+ /** Initial default border radius if no saved preference exists */
10
+ defaultRadius?: string;
11
+ }
12
+ /**
13
+ * Pre-hydration inline script executed synchronously before DOM paint to prevent theme flickering (anti-FOUC).
14
+ */
15
+ export declare const ThemeScript: Component<ThemeScriptProps>;
16
+ //# sourceMappingURL=theme-script.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-script.d.ts","sourceRoot":"","sources":["../../src/providers/theme-script.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC3C,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,gBAAgB,CAoCnD,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { isServer } from "solid-js/web";
2
+ /**
3
+ * Pre-hydration inline script executed synchronously before DOM paint to prevent theme flickering (anti-FOUC).
4
+ */
5
+ export const ThemeScript = (props) => {
6
+ if (!isServer)
7
+ return null;
8
+ const key = props.storageKey || "nikala-theme";
9
+ const defTheme = props.defaultTheme || "system";
10
+ const defAccent = props.defaultAccent || "";
11
+ const defRadius = props.defaultRadius || "";
12
+ const scriptText = `(function(){try{
13
+ var key = '${key}';
14
+ var mode = localStorage.getItem(key + '-mode') || '${defTheme}';
15
+ var accent = localStorage.getItem(key + '-accent') || '${defAccent}';
16
+ var radius = localStorage.getItem(key + '-radius') || '${defRadius}';
17
+
18
+ var isDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
19
+ var resolvedDark = mode === 'dark' || (mode === 'system' && isDark);
20
+
21
+ var root = document.documentElement;
22
+ root.classList.remove('light', 'dark');
23
+ root.classList.add(resolvedDark ? 'dark' : 'light');
24
+ root.style.colorScheme = resolvedDark ? 'dark' : 'light';
25
+
26
+ var supportedAccents = ['slate', 'gray', 'zinc', 'neutral', 'stone', 'red', 'orange', 'amber', 'yellow', 'lime', 'green', 'emerald', 'teal', 'cyan', 'sky', 'blue', 'indigo', 'violet', 'purple', 'fuchsia', 'pink', 'rose'];
27
+ if (supportedAccents.indexOf(accent) !== -1) {
28
+ var foreground = accent === 'amber' || accent === 'yellow' || accent === 'lime'
29
+ ? 'var(--color-black)' : 'var(--color-white)';
30
+ root.style.setProperty('--primary', 'var(--color-' + accent + '-' + (resolvedDark ? '400' : '500') + ')');
31
+ root.style.setProperty('--primary-foreground', foreground);
32
+ }
33
+
34
+ if (radius) {
35
+ var radVal = radius.endsWith('rem') ? radius : radius + 'rem';
36
+ root.style.setProperty('--radius', radVal);
37
+ }
38
+ }catch(e){}})();`;
39
+ return <script innerHTML={scriptText}/>;
40
+ };
41
+ //# sourceMappingURL=theme-script.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-script.jsx","sourceRoot":"","sources":["../../src/providers/theme-script.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAcxC;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAgC,CAAC,KAAK,EAAE,EAAE;IAChE,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,IAAI,cAAc,CAAC;IAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,IAAI,QAAQ,CAAC;IAChD,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC;IAE5C,MAAM,UAAU,GAAG;eACN,GAAG;uDACqC,QAAQ;2DACJ,SAAS;2DACT,SAAS;;;;;;;;;;;;;;;;;;;;;;iBAsBnD,CAAC;IAEhB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,EAAG,CAAC;AAC3C,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export type ThemeEffect = "none" | "circular" | "fade";
2
+ /**
3
+ * Executes a theme change with the specified transition effect using the Web View Transitions API.
4
+ * Supported on modern browsers, Windows (Tauri WebView2), and macOS (Tauri WKWebView).
5
+ * Automatically falls back to safe instant transitions on Linux WebKitGTK.
6
+ *
7
+ * @param effect - Desired transition animation ("none", "circular", "fade")
8
+ * @param event - Mouse or Pointer event to calculate transition center coordinates
9
+ * @param updateThemeCallback - Callback function performing the actual theme state change
10
+ */
11
+ export declare function runThemeTransition(effect: ThemeEffect | undefined, event: MouseEvent | undefined, updateThemeCallback: () => void): void;
12
+ //# sourceMappingURL=theme-transitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-transitions.d.ts","sourceRoot":"","sources":["../../src/providers/theme-transitions.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;AA2CvD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,YAAS,EAC5B,KAAK,EAAE,UAAU,GAAG,SAAS,EAC7B,mBAAmB,EAAE,MAAM,IAAI,QAmFhC"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Injects required CSS view-transition pseudo-element styles to prevent browser mix-blend artifacts.
3
+ */
4
+ function ensureTransitionStyles() {
5
+ if (typeof document === "undefined")
6
+ return;
7
+ const styleId = "nikala-view-transition-styles";
8
+ if (!document.getElementById(styleId)) {
9
+ const style = document.createElement("style");
10
+ style.id = styleId;
11
+ style.textContent = `
12
+ ::view-transition-old(root),
13
+ ::view-transition-new(root) {
14
+ animation: none;
15
+ mix-blend-mode: normal;
16
+ }
17
+ ::view-transition-old(root) {
18
+ z-index: 1;
19
+ }
20
+ ::view-transition-new(root) {
21
+ z-index: 9999;
22
+ }
23
+ `;
24
+ document.head.appendChild(style);
25
+ }
26
+ }
27
+ /**
28
+ * Checks whether the current environment is Linux WebKitGTK (e.g. Tauri on Linux)
29
+ * where CSS View Transitions pseudo-element animations trigger known WebProcess crashes.
30
+ */
31
+ function isLinuxWebKit() {
32
+ if (typeof navigator === "undefined")
33
+ return false;
34
+ const ua = navigator.userAgent || "";
35
+ const isLinux = /linux/i.test(ua);
36
+ const isWebKit = /applewebkit/i.test(ua);
37
+ const isChrome = /chrome|chromium|edg/i.test(ua);
38
+ const isTauri = typeof window !== "undefined" && typeof window.__TAURI_INTERNALS__ !== "undefined";
39
+ return isLinux && ((isWebKit && !isChrome) || isTauri);
40
+ }
41
+ /**
42
+ * Executes a theme change with the specified transition effect using the Web View Transitions API.
43
+ * Supported on modern browsers, Windows (Tauri WebView2), and macOS (Tauri WKWebView).
44
+ * Automatically falls back to safe instant transitions on Linux WebKitGTK.
45
+ *
46
+ * @param effect - Desired transition animation ("none", "circular", "fade")
47
+ * @param event - Mouse or Pointer event to calculate transition center coordinates
48
+ * @param updateThemeCallback - Callback function performing the actual theme state change
49
+ */
50
+ export function runThemeTransition(effect = "none", event, updateThemeCallback) {
51
+ // Safe fallback if View Transitions API is unsupported, reduced motion is preferred,
52
+ // or on Linux WebKitGTK where pseudo-element clipping transitions trigger WebProcess faults
53
+ if (effect === "none" ||
54
+ typeof document === "undefined" ||
55
+ !document.startViewTransition ||
56
+ window.matchMedia("(prefers-reduced-motion: reduce)").matches ||
57
+ isLinuxWebKit()) {
58
+ updateThemeCallback();
59
+ return;
60
+ }
61
+ ensureTransitionStyles();
62
+ try {
63
+ // Circular expanding ripple transition originating from click coordinates
64
+ if (effect === "circular" && event) {
65
+ const x = event.clientX;
66
+ const y = event.clientY;
67
+ const endRadius = Math.hypot(Math.max(x, window.innerWidth - x), Math.max(y, window.innerHeight - y));
68
+ const transition = document.startViewTransition(() => {
69
+ updateThemeCallback();
70
+ });
71
+ transition.ready
72
+ ?.then(() => {
73
+ document.documentElement.animate({
74
+ clipPath: [
75
+ `circle(0px at ${x}px ${y}px)`,
76
+ `circle(${endRadius}px at ${x}px ${y}px)`,
77
+ ],
78
+ }, {
79
+ duration: 500,
80
+ easing: "ease-in-out",
81
+ pseudoElement: "::view-transition-new(root)",
82
+ });
83
+ })
84
+ ?.catch(() => {
85
+ // Graceful fallback
86
+ });
87
+ return;
88
+ }
89
+ // Smooth opacity fade view transition
90
+ if (effect === "fade") {
91
+ const transition = document.startViewTransition(() => {
92
+ updateThemeCallback();
93
+ });
94
+ transition.ready
95
+ ?.then(() => {
96
+ document.documentElement.animate({
97
+ opacity: [0, 1],
98
+ }, {
99
+ duration: 350,
100
+ easing: "ease-in-out",
101
+ pseudoElement: "::view-transition-new(root)",
102
+ });
103
+ })
104
+ ?.catch(() => {
105
+ // Graceful fallback
106
+ });
107
+ return;
108
+ }
109
+ updateThemeCallback();
110
+ }
111
+ catch {
112
+ updateThemeCallback();
113
+ }
114
+ }
115
+ //# sourceMappingURL=theme-transitions.js.map