@nikala-ui/docs 0.12.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 (463) hide show
  1. package/README.md +22 -0
  2. package/dist/cli/commands/build.d.ts +5 -0
  3. package/dist/cli/commands/build.d.ts.map +1 -0
  4. package/dist/cli/commands/build.js +27 -0
  5. package/dist/cli/commands/build.js.map +1 -0
  6. package/dist/cli/commands/dev.d.ts +7 -0
  7. package/dist/cli/commands/dev.d.ts.map +1 -0
  8. package/dist/cli/commands/dev.js +32 -0
  9. package/dist/cli/commands/dev.js.map +1 -0
  10. package/dist/cli/commands/init.d.ts +2 -0
  11. package/dist/cli/commands/init.d.ts.map +1 -0
  12. package/dist/cli/commands/init.js +308 -0
  13. package/dist/cli/commands/init.js.map +1 -0
  14. package/dist/cli/commands/preview.d.ts +7 -0
  15. package/dist/cli/commands/preview.d.ts.map +1 -0
  16. package/dist/cli/commands/preview.js +24 -0
  17. package/dist/cli/commands/preview.js.map +1 -0
  18. package/dist/cli/commands/serve.d.ts +7 -0
  19. package/dist/cli/commands/serve.d.ts.map +1 -0
  20. package/dist/cli/commands/serve.js +33 -0
  21. package/dist/cli/commands/serve.js.map +1 -0
  22. package/dist/cli/index.d.ts +3 -0
  23. package/dist/cli/index.d.ts.map +1 -0
  24. package/dist/cli/index.js +53 -0
  25. package/dist/cli/index.js.map +1 -0
  26. package/dist/client/App.d.ts +5 -0
  27. package/dist/client/App.d.ts.map +1 -0
  28. package/dist/client/App.jsx +31 -0
  29. package/dist/client/App.jsx.map +1 -0
  30. package/dist/client/app-types.d.ts +14 -0
  31. package/dist/client/app-types.d.ts.map +1 -0
  32. package/dist/client/app-types.js +2 -0
  33. package/dist/client/app-types.js.map +1 -0
  34. package/dist/client/components/DocsLayoutShell.d.ts +21 -0
  35. package/dist/client/components/DocsLayoutShell.d.ts.map +1 -0
  36. package/dist/client/components/DocsLayoutShell.jsx +14 -0
  37. package/dist/client/components/DocsLayoutShell.jsx.map +1 -0
  38. package/dist/client/components/DocsPageContent.d.ts +9 -0
  39. package/dist/client/components/DocsPageContent.d.ts.map +1 -0
  40. package/dist/client/components/DocsPageContent.jsx +10 -0
  41. package/dist/client/components/DocsPageContent.jsx.map +1 -0
  42. package/dist/client/entry.d.ts +2 -0
  43. package/dist/client/entry.d.ts.map +1 -0
  44. package/dist/client/entry.jsx +28 -0
  45. package/dist/client/entry.jsx.map +1 -0
  46. package/dist/client/index.html +21 -0
  47. package/dist/client/navigation/page-navigation.d.ts +9 -0
  48. package/dist/client/navigation/page-navigation.d.ts.map +1 -0
  49. package/dist/client/navigation/page-navigation.js +51 -0
  50. package/dist/client/navigation/page-navigation.js.map +1 -0
  51. package/dist/client/routing/use-docs-router.d.ts +17 -0
  52. package/dist/client/routing/use-docs-router.d.ts.map +1 -0
  53. package/dist/client/routing/use-docs-router.js +71 -0
  54. package/dist/client/routing/use-docs-router.js.map +1 -0
  55. package/dist/client/ssr-entry.d.ts +3 -0
  56. package/dist/client/ssr-entry.d.ts.map +1 -0
  57. package/dist/client/ssr-entry.jsx +13 -0
  58. package/dist/client/ssr-entry.jsx.map +1 -0
  59. package/dist/client/style.css +183 -0
  60. package/dist/client/utils/sidebar.d.ts +2 -0
  61. package/dist/client/utils/sidebar.d.ts.map +1 -0
  62. package/dist/client/utils/sidebar.js +2 -0
  63. package/dist/client/utils/sidebar.js.map +1 -0
  64. package/dist/components/mdx-components.d.ts +34 -0
  65. package/dist/components/mdx-components.d.ts.map +1 -0
  66. package/dist/components/mdx-components.jsx +131 -0
  67. package/dist/components/mdx-components.jsx.map +1 -0
  68. package/dist/config.d.ts +6 -0
  69. package/dist/config.d.ts.map +1 -0
  70. package/dist/config.js +105 -0
  71. package/dist/config.js.map +1 -0
  72. package/dist/core/content-scanner.d.ts +10 -0
  73. package/dist/core/content-scanner.d.ts.map +1 -0
  74. package/dist/core/content-scanner.js +153 -0
  75. package/dist/core/content-scanner.js.map +1 -0
  76. package/dist/core/route-tree.d.ts +19 -0
  77. package/dist/core/route-tree.d.ts.map +1 -0
  78. package/dist/core/route-tree.js +176 -0
  79. package/dist/core/route-tree.js.map +1 -0
  80. package/dist/index.d.ts +13 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/index.js +14 -0
  83. package/dist/index.js.map +1 -0
  84. package/dist/lib/cn.d.ts +6 -0
  85. package/dist/lib/cn.d.ts.map +1 -0
  86. package/dist/lib/cn.js +9 -0
  87. package/dist/lib/cn.js.map +1 -0
  88. package/dist/mdx/compiler.d.ts +13 -0
  89. package/dist/mdx/compiler.d.ts.map +1 -0
  90. package/dist/mdx/compiler.js +38 -0
  91. package/dist/mdx/compiler.js.map +1 -0
  92. package/dist/mdx/highlighter.d.ts +22 -0
  93. package/dist/mdx/highlighter.d.ts.map +1 -0
  94. package/dist/mdx/highlighter.js +139 -0
  95. package/dist/mdx/highlighter.js.map +1 -0
  96. package/dist/mdx/rehype-shiki.d.ts +3 -0
  97. package/dist/mdx/rehype-shiki.d.ts.map +1 -0
  98. package/dist/mdx/rehype-shiki.js +83 -0
  99. package/dist/mdx/rehype-shiki.js.map +1 -0
  100. package/dist/navigation/index.d.ts +2 -0
  101. package/dist/navigation/index.d.ts.map +1 -0
  102. package/dist/navigation/index.js +2 -0
  103. package/dist/navigation/index.js.map +1 -0
  104. package/dist/navigation/sidebar-state.d.ts +6 -0
  105. package/dist/navigation/sidebar-state.d.ts.map +1 -0
  106. package/dist/navigation/sidebar-state.js +20 -0
  107. package/dist/navigation/sidebar-state.js.map +1 -0
  108. package/dist/navigation/sidebar-tree.d.ts +7 -0
  109. package/dist/navigation/sidebar-tree.d.ts.map +1 -0
  110. package/dist/navigation/sidebar-tree.js +11 -0
  111. package/dist/navigation/sidebar-tree.js.map +1 -0
  112. package/dist/registry/accordion.json +18 -0
  113. package/dist/registry/alert.json +18 -0
  114. package/dist/registry/api-table.json +21 -0
  115. package/dist/registry/aspect-ratio.json +17 -0
  116. package/dist/registry/avatar.json +17 -0
  117. package/dist/registry/badge.json +18 -0
  118. package/dist/registry/banner.json +19 -0
  119. package/dist/registry/breadcrumb.json +17 -0
  120. package/dist/registry/bubble.json +18 -0
  121. package/dist/registry/button-group.json +20 -0
  122. package/dist/registry/button.json +21 -0
  123. package/dist/registry/callout.json +19 -0
  124. package/dist/registry/card.json +17 -0
  125. package/dist/registry/checkbox.json +20 -0
  126. package/dist/registry/code-block.json +26 -0
  127. package/dist/registry/code-group.json +20 -0
  128. package/dist/registry/collapsible.json +18 -0
  129. package/dist/registry/combobox.json +21 -0
  130. package/dist/registry/command.json +27 -0
  131. package/dist/registry/component-viewer.json +25 -0
  132. package/dist/registry/container.json +18 -0
  133. package/dist/registry/context-menu.json +24 -0
  134. package/dist/registry/create-active-element.json +13 -0
  135. package/dist/registry/create-app-updater.json +13 -0
  136. package/dist/registry/create-audio.json +7 -0
  137. package/dist/registry/create-battery.json +13 -0
  138. package/dist/registry/create-chat-scroll.json +13 -0
  139. package/dist/registry/create-click-outside.json +13 -0
  140. package/dist/registry/create-clipboard.json +13 -0
  141. package/dist/registry/create-color-mode.json +13 -0
  142. package/dist/registry/create-controllable-signal.json +13 -0
  143. package/dist/registry/create-debounce.json +13 -0
  144. package/dist/registry/create-disclosure.json +13 -0
  145. package/dist/registry/create-document-tabs.json +13 -0
  146. package/dist/registry/create-document-title.json +13 -0
  147. package/dist/registry/create-drop-zone.json +13 -0
  148. package/dist/registry/create-event-source.json +13 -0
  149. package/dist/registry/create-favicon.json +13 -0
  150. package/dist/registry/create-fetch.json +13 -0
  151. package/dist/registry/create-focus-trap.json +13 -0
  152. package/dist/registry/create-form.json +13 -0
  153. package/dist/registry/create-fullscreen.json +13 -0
  154. package/dist/registry/create-geolocation.json +13 -0
  155. package/dist/registry/create-global-shortcut.json +13 -0
  156. package/dist/registry/create-hover.json +13 -0
  157. package/dist/registry/create-idle.json +13 -0
  158. package/dist/registry/create-infinite-scroll.json +13 -0
  159. package/dist/registry/create-input-mask.json +13 -0
  160. package/dist/registry/create-intersection-observer.json +13 -0
  161. package/dist/registry/create-keybindings.json +13 -0
  162. package/dist/registry/create-lock-scroll.json +13 -0
  163. package/dist/registry/create-long-press.json +13 -0
  164. package/dist/registry/create-media-query.json +13 -0
  165. package/dist/registry/create-mouse-position.json +13 -0
  166. package/dist/registry/create-network-status.json +13 -0
  167. package/dist/registry/create-orientation.json +13 -0
  168. package/dist/registry/create-pagination.json +13 -0
  169. package/dist/registry/create-permission.json +13 -0
  170. package/dist/registry/create-previous.json +13 -0
  171. package/dist/registry/create-resize-observer.json +13 -0
  172. package/dist/registry/create-scroll-into-view.json +13 -0
  173. package/dist/registry/create-scroll-position.json +13 -0
  174. package/dist/registry/create-storage.json +13 -0
  175. package/dist/registry/create-tauri-window.json +13 -0
  176. package/dist/registry/create-timer.json +13 -0
  177. package/dist/registry/create-tiptap-editor.json +34 -0
  178. package/dist/registry/create-undo-redo.json +13 -0
  179. package/dist/registry/create-web-notification.json +13 -0
  180. package/dist/registry/create-websocket.json +13 -0
  181. package/dist/registry/create-window-size.json +13 -0
  182. package/dist/registry/dialog.json +21 -0
  183. package/dist/registry/dropdown-menu.json +22 -0
  184. package/dist/registry/dropzone.json +21 -0
  185. package/dist/registry/empty.json +17 -0
  186. package/dist/registry/field.json +20 -0
  187. package/dist/registry/file-tree.json +21 -0
  188. package/dist/registry/footer.json +18 -0
  189. package/dist/registry/forgot-password-01.json +28 -0
  190. package/dist/registry/form-message.json +17 -0
  191. package/dist/registry/form.json +17 -0
  192. package/dist/registry/hero-01.json +22 -0
  193. package/dist/registry/hover-card.json +18 -0
  194. package/dist/registry/icon-button.json +20 -0
  195. package/dist/registry/index.json +1489 -0
  196. package/dist/registry/input-group.json +21 -0
  197. package/dist/registry/input.json +17 -0
  198. package/dist/registry/kbd.json +18 -0
  199. package/dist/registry/label.json +18 -0
  200. package/dist/registry/list.json +20 -0
  201. package/dist/registry/login-01.json +28 -0
  202. package/dist/registry/logo.json +17 -0
  203. package/dist/registry/marker.json +17 -0
  204. package/dist/registry/marquee.json +17 -0
  205. package/dist/registry/message.json +17 -0
  206. package/dist/registry/navbar.json +19 -0
  207. package/dist/registry/navigation-menu.json +22 -0
  208. package/dist/registry/number-input.json +24 -0
  209. package/dist/registry/otp-verification-01.json +26 -0
  210. package/dist/registry/package-manager-tabs.json +24 -0
  211. package/dist/registry/pager.json +21 -0
  212. package/dist/registry/pagination.json +22 -0
  213. package/dist/registry/pin-input.json +17 -0
  214. package/dist/registry/popover.json +22 -0
  215. package/dist/registry/progress.json +18 -0
  216. package/dist/registry/radio-group.json +18 -0
  217. package/dist/registry/rating.json +19 -0
  218. package/dist/registry/register-01.json +31 -0
  219. package/dist/registry/resizable.json +21 -0
  220. package/dist/registry/review-card.json +23 -0
  221. package/dist/registry/rich-text-editor.json +95 -0
  222. package/dist/registry/scroll-area.json +21 -0
  223. package/dist/registry/section-heading.json +21 -0
  224. package/dist/registry/select.json +22 -0
  225. package/dist/registry/separator.json +17 -0
  226. package/dist/registry/sheet.json +22 -0
  227. package/dist/registry/sidebar.json +24 -0
  228. package/dist/registry/skeleton.json +17 -0
  229. package/dist/registry/slider.json +18 -0
  230. package/dist/registry/spinner.json +18 -0
  231. package/dist/registry/stat.json +19 -0
  232. package/dist/registry/status.json +18 -0
  233. package/dist/registry/steps.json +20 -0
  234. package/dist/registry/switch.json +20 -0
  235. package/dist/registry/table-of-contents.json +23 -0
  236. package/dist/registry/table.json +17 -0
  237. package/dist/registry/tabs.json +20 -0
  238. package/dist/registry/textarea.json +17 -0
  239. package/dist/registry/theme-manager.json +39 -0
  240. package/dist/registry/timeline.json +18 -0
  241. package/dist/registry/titlebar-tabs.json +24 -0
  242. package/dist/registry/titlebar.json +26 -0
  243. package/dist/registry/toast.json +20 -0
  244. package/dist/registry/toggle-group.json +21 -0
  245. package/dist/registry/toggle.json +18 -0
  246. package/dist/registry/tooltip.json +18 -0
  247. package/dist/registry/updater-modal.json +26 -0
  248. package/dist/server/index.d.ts +18 -0
  249. package/dist/server/index.d.ts.map +1 -0
  250. package/dist/server/index.js +526 -0
  251. package/dist/server/index.js.map +1 -0
  252. package/dist/server/plugin.d.ts +10 -0
  253. package/dist/server/plugin.d.ts.map +1 -0
  254. package/dist/server/plugin.js +271 -0
  255. package/dist/server/plugin.js.map +1 -0
  256. package/dist/themes/default/content/breadcrumbs.d.ts +4 -0
  257. package/dist/themes/default/content/breadcrumbs.d.ts.map +1 -0
  258. package/dist/themes/default/content/breadcrumbs.jsx +31 -0
  259. package/dist/themes/default/content/breadcrumbs.jsx.map +1 -0
  260. package/dist/themes/default/content/pager.d.ts +5 -0
  261. package/dist/themes/default/content/pager.d.ts.map +1 -0
  262. package/dist/themes/default/content/pager.jsx +9 -0
  263. package/dist/themes/default/content/pager.jsx.map +1 -0
  264. package/dist/themes/default/content/table-of-contents.d.ts +4 -0
  265. package/dist/themes/default/content/table-of-contents.d.ts.map +1 -0
  266. package/dist/themes/default/content/table-of-contents.jsx +19 -0
  267. package/dist/themes/default/content/table-of-contents.jsx.map +1 -0
  268. package/dist/themes/default/index.d.ts +11 -0
  269. package/dist/themes/default/index.d.ts.map +1 -0
  270. package/dist/themes/default/index.js +30 -0
  271. package/dist/themes/default/index.js.map +1 -0
  272. package/dist/themes/default/layout.d.ts +4 -0
  273. package/dist/themes/default/layout.d.ts.map +1 -0
  274. package/dist/themes/default/layout.jsx +75 -0
  275. package/dist/themes/default/layout.jsx.map +1 -0
  276. package/dist/themes/default/navbar.d.ts +4 -0
  277. package/dist/themes/default/navbar.d.ts.map +1 -0
  278. package/dist/themes/default/navbar.jsx +74 -0
  279. package/dist/themes/default/navbar.jsx.map +1 -0
  280. package/dist/themes/default/navigation/mobile-table-of-contents.d.ts +4 -0
  281. package/dist/themes/default/navigation/mobile-table-of-contents.d.ts.map +1 -0
  282. package/dist/themes/default/navigation/mobile-table-of-contents.jsx +22 -0
  283. package/dist/themes/default/navigation/mobile-table-of-contents.jsx.map +1 -0
  284. package/dist/themes/default/navigation/sidebar-tree.d.ts +8 -0
  285. package/dist/themes/default/navigation/sidebar-tree.d.ts.map +1 -0
  286. package/dist/themes/default/navigation/sidebar-tree.jsx +100 -0
  287. package/dist/themes/default/navigation/sidebar-tree.jsx.map +1 -0
  288. package/dist/themes/default/overlays/search-dialog.d.ts +4 -0
  289. package/dist/themes/default/overlays/search-dialog.d.ts.map +1 -0
  290. package/dist/themes/default/overlays/search-dialog.jsx +34 -0
  291. package/dist/themes/default/overlays/search-dialog.jsx.map +1 -0
  292. package/dist/themes/default/sidebar.d.ts +4 -0
  293. package/dist/themes/default/sidebar.d.ts.map +1 -0
  294. package/dist/themes/default/sidebar.jsx +60 -0
  295. package/dist/themes/default/sidebar.jsx.map +1 -0
  296. package/dist/themes/index.d.ts +4 -0
  297. package/dist/themes/index.d.ts.map +1 -0
  298. package/dist/themes/index.js +5 -0
  299. package/dist/themes/index.js.map +1 -0
  300. package/dist/themes/types.d.ts +83 -0
  301. package/dist/themes/types.d.ts.map +1 -0
  302. package/dist/themes/types.js +2 -0
  303. package/dist/themes/types.js.map +1 -0
  304. package/dist/types.d.ts +97 -0
  305. package/dist/types.d.ts.map +1 -0
  306. package/dist/types.js +3 -0
  307. package/dist/types.js.map +1 -0
  308. package/dist/vendor/core-src/index.css +11 -0
  309. package/dist/vendor/core-src/index.ts +48 -0
  310. package/dist/vendor/core-src/lib/cn.ts +9 -0
  311. package/dist/vendor/core-src/registry/blocks/forgot-password-01.tsx +141 -0
  312. package/dist/vendor/core-src/registry/blocks/hero-01.tsx +28 -0
  313. package/dist/vendor/core-src/registry/blocks/login-01.tsx +231 -0
  314. package/dist/vendor/core-src/registry/blocks/otp-verification-01.tsx +170 -0
  315. package/dist/vendor/core-src/registry/blocks/register-01.tsx +318 -0
  316. package/dist/vendor/core-src/registry/components/ui/accordion.tsx +128 -0
  317. package/dist/vendor/core-src/registry/components/ui/alert.tsx +155 -0
  318. package/dist/vendor/core-src/registry/components/ui/api-table.tsx +117 -0
  319. package/dist/vendor/core-src/registry/components/ui/aspect-ratio.tsx +31 -0
  320. package/dist/vendor/core-src/registry/components/ui/avatar.tsx +114 -0
  321. package/dist/vendor/core-src/registry/components/ui/badge.tsx +56 -0
  322. package/dist/vendor/core-src/registry/components/ui/banner.tsx +187 -0
  323. package/dist/vendor/core-src/registry/components/ui/breadcrumb.tsx +136 -0
  324. package/dist/vendor/core-src/registry/components/ui/bubble.tsx +142 -0
  325. package/dist/vendor/core-src/registry/components/ui/button-group.tsx +42 -0
  326. package/dist/vendor/core-src/registry/components/ui/button.tsx +82 -0
  327. package/dist/vendor/core-src/registry/components/ui/callout.tsx +137 -0
  328. package/dist/vendor/core-src/registry/components/ui/card.tsx +113 -0
  329. package/dist/vendor/core-src/registry/components/ui/checkbox.tsx +74 -0
  330. package/dist/vendor/core-src/registry/components/ui/code-block.tsx +326 -0
  331. package/dist/vendor/core-src/registry/components/ui/code-group.tsx +105 -0
  332. package/dist/vendor/core-src/registry/components/ui/collapsible.tsx +73 -0
  333. package/dist/vendor/core-src/registry/components/ui/combobox.tsx +299 -0
  334. package/dist/vendor/core-src/registry/components/ui/command.tsx +378 -0
  335. package/dist/vendor/core-src/registry/components/ui/component-viewer.tsx +363 -0
  336. package/dist/vendor/core-src/registry/components/ui/container.tsx +45 -0
  337. package/dist/vendor/core-src/registry/components/ui/context-menu.tsx +237 -0
  338. package/dist/vendor/core-src/registry/components/ui/dialog.tsx +200 -0
  339. package/dist/vendor/core-src/registry/components/ui/dropdown-menu.tsx +298 -0
  340. package/dist/vendor/core-src/registry/components/ui/dropzone.tsx +189 -0
  341. package/dist/vendor/core-src/registry/components/ui/empty.tsx +83 -0
  342. package/dist/vendor/core-src/registry/components/ui/field.tsx +71 -0
  343. package/dist/vendor/core-src/registry/components/ui/file-tree.tsx +181 -0
  344. package/dist/vendor/core-src/registry/components/ui/footer.tsx +247 -0
  345. package/dist/vendor/core-src/registry/components/ui/form-message.tsx +36 -0
  346. package/dist/vendor/core-src/registry/components/ui/form.tsx +21 -0
  347. package/dist/vendor/core-src/registry/components/ui/hover-card.tsx +105 -0
  348. package/dist/vendor/core-src/registry/components/ui/icon-button.tsx +34 -0
  349. package/dist/vendor/core-src/registry/components/ui/input-group.tsx +80 -0
  350. package/dist/vendor/core-src/registry/components/ui/input.tsx +28 -0
  351. package/dist/vendor/core-src/registry/components/ui/kbd.tsx +73 -0
  352. package/dist/vendor/core-src/registry/components/ui/label.tsx +30 -0
  353. package/dist/vendor/core-src/registry/components/ui/list.tsx +222 -0
  354. package/dist/vendor/core-src/registry/components/ui/logo.tsx +68 -0
  355. package/dist/vendor/core-src/registry/components/ui/marker.tsx +102 -0
  356. package/dist/vendor/core-src/registry/components/ui/marquee.tsx +118 -0
  357. package/dist/vendor/core-src/registry/components/ui/message.tsx +168 -0
  358. package/dist/vendor/core-src/registry/components/ui/navbar.tsx +375 -0
  359. package/dist/vendor/core-src/registry/components/ui/navigation-menu.tsx +358 -0
  360. package/dist/vendor/core-src/registry/components/ui/number-input.tsx +150 -0
  361. package/dist/vendor/core-src/registry/components/ui/package-manager-tabs.tsx +226 -0
  362. package/dist/vendor/core-src/registry/components/ui/pager.tsx +102 -0
  363. package/dist/vendor/core-src/registry/components/ui/pagination.tsx +258 -0
  364. package/dist/vendor/core-src/registry/components/ui/pin-input.tsx +198 -0
  365. package/dist/vendor/core-src/registry/components/ui/popover.tsx +90 -0
  366. package/dist/vendor/core-src/registry/components/ui/progress.tsx +66 -0
  367. package/dist/vendor/core-src/registry/components/ui/radio-group.tsx +95 -0
  368. package/dist/vendor/core-src/registry/components/ui/rating.tsx +185 -0
  369. package/dist/vendor/core-src/registry/components/ui/resizable.tsx +195 -0
  370. package/dist/vendor/core-src/registry/components/ui/review-card.tsx +195 -0
  371. package/dist/vendor/core-src/registry/components/ui/rich-text-editor/bubble-menu.tsx +236 -0
  372. package/dist/vendor/core-src/registry/components/ui/rich-text-editor/editor.tsx +308 -0
  373. package/dist/vendor/core-src/registry/components/ui/rich-text-editor/extensions.ts +116 -0
  374. package/dist/vendor/core-src/registry/components/ui/rich-text-editor/footer.tsx +36 -0
  375. package/dist/vendor/core-src/registry/components/ui/rich-text-editor/image-dialog.tsx +75 -0
  376. package/dist/vendor/core-src/registry/components/ui/rich-text-editor/index.ts +11 -0
  377. package/dist/vendor/core-src/registry/components/ui/rich-text-editor/link-dialog.tsx +48 -0
  378. package/dist/vendor/core-src/registry/components/ui/rich-text-editor/markdown.ts +170 -0
  379. package/dist/vendor/core-src/registry/components/ui/rich-text-editor/slash-command.tsx +301 -0
  380. package/dist/vendor/core-src/registry/components/ui/rich-text-editor/table-controls.tsx +68 -0
  381. package/dist/vendor/core-src/registry/components/ui/rich-text-editor/toolbar.tsx +465 -0
  382. package/dist/vendor/core-src/registry/components/ui/rich-text-editor/use-editor.ts +231 -0
  383. package/dist/vendor/core-src/registry/components/ui/scroll-area.tsx +228 -0
  384. package/dist/vendor/core-src/registry/components/ui/section-heading.tsx +108 -0
  385. package/dist/vendor/core-src/registry/components/ui/select.tsx +156 -0
  386. package/dist/vendor/core-src/registry/components/ui/separator.tsx +37 -0
  387. package/dist/vendor/core-src/registry/components/ui/sheet.tsx +220 -0
  388. package/dist/vendor/core-src/registry/components/ui/sidebar.tsx +692 -0
  389. package/dist/vendor/core-src/registry/components/ui/skeleton.tsx +24 -0
  390. package/dist/vendor/core-src/registry/components/ui/slider.tsx +153 -0
  391. package/dist/vendor/core-src/registry/components/ui/spinner.tsx +41 -0
  392. package/dist/vendor/core-src/registry/components/ui/stat.tsx +245 -0
  393. package/dist/vendor/core-src/registry/components/ui/status.tsx +121 -0
  394. package/dist/vendor/core-src/registry/components/ui/steps.tsx +198 -0
  395. package/dist/vendor/core-src/registry/components/ui/switch.tsx +68 -0
  396. package/dist/vendor/core-src/registry/components/ui/table-of-contents.tsx +131 -0
  397. package/dist/vendor/core-src/registry/components/ui/table.tsx +160 -0
  398. package/dist/vendor/core-src/registry/components/ui/tabs.tsx +204 -0
  399. package/dist/vendor/core-src/registry/components/ui/textarea.tsx +82 -0
  400. package/dist/vendor/core-src/registry/components/ui/theme-toggle.tsx +238 -0
  401. package/dist/vendor/core-src/registry/components/ui/timeline.tsx +350 -0
  402. package/dist/vendor/core-src/registry/components/ui/titlebar-tabs.tsx +773 -0
  403. package/dist/vendor/core-src/registry/components/ui/titlebar.tsx +468 -0
  404. package/dist/vendor/core-src/registry/components/ui/toast.tsx +124 -0
  405. package/dist/vendor/core-src/registry/components/ui/toggle-group.tsx +203 -0
  406. package/dist/vendor/core-src/registry/components/ui/toggle.tsx +101 -0
  407. package/dist/vendor/core-src/registry/components/ui/tooltip.tsx +41 -0
  408. package/dist/vendor/core-src/registry/components/ui/updater-modal.tsx +254 -0
  409. package/dist/vendor/core-src/registry/index.ts +50 -0
  410. package/dist/vendor/core-src/registry/metadata.ts +742 -0
  411. package/dist/vendor/core-src/registry/providers/theme-provider.tsx +216 -0
  412. package/dist/vendor/core-src/registry/providers/theme-script.tsx +78 -0
  413. package/dist/vendor/core-src/registry/providers/theme-transitions.ts +139 -0
  414. package/dist/vendor/hooks-src/create-active-element.ts +51 -0
  415. package/dist/vendor/hooks-src/create-app-updater.ts +272 -0
  416. package/dist/vendor/hooks-src/create-audio-video.ts +444 -0
  417. package/dist/vendor/hooks-src/create-battery.ts +78 -0
  418. package/dist/vendor/hooks-src/create-chat-scroll.ts +113 -0
  419. package/dist/vendor/hooks-src/create-click-outside.ts +82 -0
  420. package/dist/vendor/hooks-src/create-clipboard.ts +69 -0
  421. package/dist/vendor/hooks-src/create-color-mode.ts +115 -0
  422. package/dist/vendor/hooks-src/create-controllable-signal.ts +56 -0
  423. package/dist/vendor/hooks-src/create-debounce.ts +90 -0
  424. package/dist/vendor/hooks-src/create-disclosure.ts +82 -0
  425. package/dist/vendor/hooks-src/create-document-tabs.ts +267 -0
  426. package/dist/vendor/hooks-src/create-document-title.ts +33 -0
  427. package/dist/vendor/hooks-src/create-drop-zone.ts +317 -0
  428. package/dist/vendor/hooks-src/create-event-source.ts +126 -0
  429. package/dist/vendor/hooks-src/create-favicon.ts +52 -0
  430. package/dist/vendor/hooks-src/create-fetch.ts +93 -0
  431. package/dist/vendor/hooks-src/create-focus-trap.ts +94 -0
  432. package/dist/vendor/hooks-src/create-form.ts +200 -0
  433. package/dist/vendor/hooks-src/create-fullscreen.ts +105 -0
  434. package/dist/vendor/hooks-src/create-geolocation.ts +140 -0
  435. package/dist/vendor/hooks-src/create-global-shortcut.ts +140 -0
  436. package/dist/vendor/hooks-src/create-hover.ts +88 -0
  437. package/dist/vendor/hooks-src/create-idle.ts +109 -0
  438. package/dist/vendor/hooks-src/create-infinite-scroll.ts +90 -0
  439. package/dist/vendor/hooks-src/create-input-mask.ts +109 -0
  440. package/dist/vendor/hooks-src/create-intersection-observer.ts +82 -0
  441. package/dist/vendor/hooks-src/create-keybindings.ts +148 -0
  442. package/dist/vendor/hooks-src/create-lock-scroll.ts +97 -0
  443. package/dist/vendor/hooks-src/create-long-press.ts +85 -0
  444. package/dist/vendor/hooks-src/create-media-query.ts +94 -0
  445. package/dist/vendor/hooks-src/create-mouse-position.ts +87 -0
  446. package/dist/vendor/hooks-src/create-network-status.ts +100 -0
  447. package/dist/vendor/hooks-src/create-orientation.ts +129 -0
  448. package/dist/vendor/hooks-src/create-pagination.ts +208 -0
  449. package/dist/vendor/hooks-src/create-permission.ts +91 -0
  450. package/dist/vendor/hooks-src/create-previous.ts +21 -0
  451. package/dist/vendor/hooks-src/create-resize-observer.ts +89 -0
  452. package/dist/vendor/hooks-src/create-scroll-into-view.ts +57 -0
  453. package/dist/vendor/hooks-src/create-scroll-position.ts +129 -0
  454. package/dist/vendor/hooks-src/create-storage.ts +106 -0
  455. package/dist/vendor/hooks-src/create-tauri-window.ts +628 -0
  456. package/dist/vendor/hooks-src/create-timer.ts +150 -0
  457. package/dist/vendor/hooks-src/create-tiptap-editor.ts +326 -0
  458. package/dist/vendor/hooks-src/create-undo-redo.ts +100 -0
  459. package/dist/vendor/hooks-src/create-web-notification.ts +111 -0
  460. package/dist/vendor/hooks-src/create-websocket.ts +179 -0
  461. package/dist/vendor/hooks-src/create-window-size.ts +41 -0
  462. package/dist/vendor/hooks-src/index.ts +48 -0
  463. package/package.json +87 -0
@@ -0,0 +1,216 @@
1
+ import {
2
+ createContext,
3
+ createEffect,
4
+ createSignal,
5
+ onCleanup,
6
+ onMount,
7
+ useContext,
8
+ type ParentComponent,
9
+ type Accessor,
10
+ } from "solid-js";
11
+
12
+ export type Theme = "light" | "dark" | "system";
13
+ export type AccentColor = "yellow" | "red" | "violet" | "sky" | "emerald" | "zinc";
14
+ export type Radius = "0" | "0.3" | "0.5" | "0.75" | "1.0";
15
+
16
+ export interface ThemeProviderProps {
17
+ /** Initial default theme mode if no saved preference is found in localStorage */
18
+ defaultTheme?: Theme;
19
+ /** Initial default accent color override if needed */
20
+ defaultAccent?: AccentColor;
21
+ /** Initial default border radius override if needed */
22
+ defaultRadius?: Radius;
23
+ /** Key used to store theme preferences in localStorage */
24
+ storageKey?: string;
25
+ }
26
+
27
+ const ACCENT_COLORS: Record<
28
+ AccentColor,
29
+ { light: string; dark: string; lightFg: string; darkFg: string }
30
+ > = {
31
+ yellow: { light: "oklch(0.795 0.184 86.047)", dark: "oklch(0.852 0.199 91.936)", lightFg: "oklch(0.145 0 0)", darkFg: "oklch(0.145 0 0)" },
32
+ red: { light: "oklch(0.577 0.245 27.325)", dark: "oklch(0.637 0.237 25.331)", lightFg: "oklch(0.985 0 0)", darkFg: "oklch(0.985 0 0)" },
33
+ violet: { light: "oklch(0.541 0.281 293.009)", dark: "oklch(0.606 0.25 292.717)", lightFg: "oklch(0.985 0 0)", darkFg: "oklch(0.985 0 0)" },
34
+ sky: { light: "oklch(0.588 0.158 241.966)", dark: "oklch(0.672 0.154 238.29)", lightFg: "oklch(0.985 0 0)", darkFg: "oklch(0.145 0 0)" },
35
+ emerald: { light: "oklch(0.596 0.145 163.225)", dark: "oklch(0.696 0.17 162.48)", lightFg: "oklch(0.985 0 0)", darkFg: "oklch(0.145 0 0)" },
36
+ zinc: { light: "oklch(0.205 0 0)", dark: "oklch(0.985 0 0)", lightFg: "oklch(0.985 0 0)", darkFg: "oklch(0.205 0 0)" },
37
+ };
38
+
39
+ interface ThemeProviderContextValue {
40
+ theme: Accessor<Theme>;
41
+ setTheme: (theme: Theme) => void;
42
+ accent: Accessor<AccentColor | undefined>;
43
+ setAccent: (accent: AccentColor) => void;
44
+ radius: Accessor<Radius | undefined>;
45
+ setRadius: (radius: Radius) => void;
46
+ }
47
+
48
+ const ThemeProviderContext = createContext<ThemeProviderContextValue>();
49
+
50
+ /**
51
+ * Context provider managing application theme state (light/dark/system), accent colors, and border radius.
52
+ */
53
+ export const ThemeProvider: ParentComponent<ThemeProviderProps> = (props) => {
54
+ const storageKey = props.storageKey || "nikala-theme";
55
+ const defaultTheme = props.defaultTheme || "system";
56
+
57
+ // Safely read saved values from localStorage without forcing unnecessary fallbacks
58
+ const getInitialTheme = (): Theme => {
59
+ if (typeof window === "undefined") return defaultTheme;
60
+ try {
61
+ const saved = localStorage.getItem(`${storageKey}-mode`);
62
+ if (saved === "light" || saved === "dark" || saved === "system") return saved;
63
+ } catch { }
64
+ return defaultTheme;
65
+ };
66
+
67
+ const getInitialAccent = (): AccentColor | undefined => {
68
+ if (typeof window === "undefined") return props.defaultAccent;
69
+ try {
70
+ const saved = localStorage.getItem(`${storageKey}-accent`);
71
+ if (saved && ACCENT_COLORS[saved as AccentColor]) return saved as AccentColor;
72
+ } catch { }
73
+ return props.defaultAccent;
74
+ };
75
+
76
+ const getInitialRadius = (): Radius | undefined => {
77
+ if (typeof window === "undefined") return props.defaultRadius;
78
+ try {
79
+ const saved = localStorage.getItem(`${storageKey}-radius`);
80
+ if (saved) return saved as Radius;
81
+ } catch { }
82
+ return props.defaultRadius;
83
+ };
84
+
85
+ const [theme, setThemeSignal] = createSignal<Theme>(getInitialTheme());
86
+ const [accent, setAccentSignal] = createSignal<AccentColor | undefined>(getInitialAccent());
87
+ const [radius, setRadiusSignal] = createSignal<Radius | undefined>(getInitialRadius());
88
+
89
+ // Applies classes and CSS custom properties when custom overrides are explicitly set
90
+ const applyTheme = (
91
+ targetTheme: Theme,
92
+ currentAccent: AccentColor | undefined,
93
+ currentRadius: Radius | undefined
94
+ ) => {
95
+ if (typeof window === "undefined") return;
96
+
97
+ const root = document.documentElement;
98
+ root.classList.remove("light", "dark");
99
+
100
+ let resolvedDark = false;
101
+ if (targetTheme === "system") {
102
+ resolvedDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
103
+ root.classList.add(resolvedDark ? "dark" : "light");
104
+ } else {
105
+ resolvedDark = targetTheme === "dark";
106
+ root.classList.add(targetTheme);
107
+ }
108
+ root.style.colorScheme = resolvedDark ? "dark" : "light";
109
+
110
+ // Override --primary CSS variables ONLY if explicitly chosen
111
+ if (currentAccent && ACCENT_COLORS[currentAccent]) {
112
+ const accentData = ACCENT_COLORS[currentAccent];
113
+ const primaryHex = resolvedDark ? accentData.dark : accentData.light;
114
+ const primaryFgHex = resolvedDark ? accentData.darkFg : accentData.lightFg;
115
+
116
+ root.style.setProperty("--primary", primaryHex);
117
+ root.style.setProperty("--primary-foreground", primaryFgHex);
118
+ } else {
119
+ root.style.removeProperty("--primary");
120
+ root.style.removeProperty("--primary-foreground");
121
+ }
122
+
123
+ // Override --radius CSS variable ONLY if explicitly chosen
124
+ if (currentRadius) {
125
+ root.style.setProperty("--radius", `${currentRadius}rem`);
126
+ } else {
127
+ root.style.removeProperty("--radius");
128
+ }
129
+ };
130
+
131
+ // Reactively apply theme updates and store preferences in localStorage
132
+ createEffect(() => {
133
+ const t = theme();
134
+ const a = accent();
135
+ const r = radius();
136
+
137
+ applyTheme(t, a, r);
138
+
139
+ if (typeof window !== "undefined") {
140
+ try {
141
+ localStorage.setItem(`${storageKey}-mode`, t);
142
+ if (a) localStorage.setItem(`${storageKey}-accent`, a);
143
+ else localStorage.removeItem(`${storageKey}-accent`);
144
+ if (r) localStorage.setItem(`${storageKey}-radius`, r);
145
+ else localStorage.removeItem(`${storageKey}-radius`);
146
+ } catch { }
147
+ }
148
+ });
149
+
150
+ onMount(() => {
151
+ if (typeof window === "undefined") return;
152
+
153
+ const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
154
+
155
+ const handleSystemChange = (e: MediaQueryListEvent) => {
156
+ if (theme() === "system") {
157
+ const root = document.documentElement;
158
+ root.classList.remove("light", "dark");
159
+ root.classList.add(e.matches ? "dark" : "light");
160
+ root.style.colorScheme = e.matches ? "dark" : "light";
161
+
162
+ const currentAccent = accent();
163
+ if (currentAccent && ACCENT_COLORS[currentAccent]) {
164
+ const accentData = ACCENT_COLORS[currentAccent];
165
+ const primaryHex = e.matches ? accentData.dark : accentData.light;
166
+ const primaryFgHex = e.matches ? accentData.darkFg : accentData.lightFg;
167
+
168
+ root.style.setProperty("--primary", primaryHex);
169
+ root.style.setProperty("--primary-foreground", primaryFgHex);
170
+ }
171
+ }
172
+ };
173
+
174
+ if (mediaQuery.addEventListener) {
175
+ mediaQuery.addEventListener("change", handleSystemChange);
176
+ } else if ("addListener" in mediaQuery) {
177
+ (mediaQuery as any).addListener(handleSystemChange);
178
+ }
179
+
180
+ onCleanup(() => {
181
+ if (mediaQuery.removeEventListener) {
182
+ mediaQuery.removeEventListener("change", handleSystemChange);
183
+ } else if ("removeListener" in mediaQuery) {
184
+ (mediaQuery as any).removeListener(handleSystemChange);
185
+ }
186
+ });
187
+ });
188
+
189
+ const value: ThemeProviderContextValue = {
190
+ theme,
191
+ setTheme: (newTheme: Theme) => setThemeSignal(newTheme),
192
+ accent,
193
+ setAccent: (newAccent: AccentColor) => setAccentSignal(newAccent),
194
+ radius,
195
+ setRadius: (newRadius: Radius) => setRadiusSignal(newRadius),
196
+ };
197
+
198
+ return (
199
+ <ThemeProviderContext.Provider value={value}>
200
+ {props.children}
201
+ </ThemeProviderContext.Provider>
202
+ );
203
+ };
204
+
205
+ /**
206
+ * Accesses Nikala UI theme state, accent colors, border radius, and update functions.
207
+ */
208
+ export function useTheme(): ThemeProviderContextValue {
209
+ const context = useContext(ThemeProviderContext);
210
+ if (!context) {
211
+ throw new Error("useTheme must be used within a ThemeProvider");
212
+ }
213
+ return context;
214
+ }
215
+
216
+ export { ThemeScript, type ThemeScriptProps } from "./theme-script";
@@ -0,0 +1,78 @@
1
+ import { isServer } from "solid-js/web";
2
+ import type { Component } from "solid-js";
3
+
4
+ export interface ThemeScriptProps {
5
+ /** Storage key namespace used in localStorage (default: "nikala-theme") */
6
+ storageKey?: string;
7
+ /** Initial default theme mode if no saved preference exists (default: "system") */
8
+ defaultTheme?: "light" | "dark" | "system";
9
+ /** Initial default primary accent color if no saved preference exists */
10
+ defaultAccent?: string;
11
+ /** Initial default border radius if no saved preference exists */
12
+ defaultRadius?: string;
13
+ }
14
+
15
+ /**
16
+ * Pre-hydration inline script executed synchronously before DOM paint to prevent theme flickering (anti-FOUC).
17
+ */
18
+ export const ThemeScript: Component<ThemeScriptProps> = (props) => {
19
+ if (!isServer) return null;
20
+ const key = props.storageKey || "nikala-theme";
21
+ const defTheme = props.defaultTheme || "system";
22
+ const defAccent = props.defaultAccent || "";
23
+ const defRadius = props.defaultRadius || "";
24
+
25
+ const scriptText = `(function(){try{
26
+ var key = '${key}';
27
+ var mode = localStorage.getItem(key + '-mode') || '${defTheme}';
28
+ var accent = localStorage.getItem(key + '-accent') || '${defAccent}';
29
+ var radius = localStorage.getItem(key + '-radius') || '${defRadius}';
30
+
31
+ var isDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
32
+ var resolvedDark = mode === 'dark' || (mode === 'system' && isDark);
33
+
34
+ var root = document.documentElement;
35
+ root.classList.remove('light', 'dark');
36
+ root.classList.add(resolvedDark ? 'dark' : 'light');
37
+ root.style.colorScheme = resolvedDark ? 'dark' : 'light';
38
+
39
+ var colorMap = {
40
+ yellow: {
41
+ primary: resolvedDark ? 'oklch(0.852 0.199 91.936)' : 'oklch(0.795 0.184 86.047)',
42
+ foreground: 'oklch(0.145 0 0)'
43
+ },
44
+ red: {
45
+ primary: resolvedDark ? 'oklch(0.637 0.237 25.331)' : 'oklch(0.577 0.245 27.325)',
46
+ foreground: 'oklch(0.985 0 0)'
47
+ },
48
+ violet: {
49
+ primary: resolvedDark ? 'oklch(0.606 0.25 292.717)' : 'oklch(0.541 0.281 293.009)',
50
+ foreground: 'oklch(0.985 0 0)'
51
+ },
52
+ sky: {
53
+ primary: resolvedDark ? 'oklch(0.672 0.154 238.29)' : 'oklch(0.588 0.158 241.966)',
54
+ foreground: resolvedDark ? 'oklch(0.145 0 0)' : 'oklch(0.985 0 0)'
55
+ },
56
+ emerald: {
57
+ primary: resolvedDark ? 'oklch(0.696 0.17 162.48)' : 'oklch(0.596 0.145 163.225)',
58
+ foreground: resolvedDark ? 'oklch(0.145 0 0)' : 'oklch(0.985 0 0)'
59
+ },
60
+ zinc: {
61
+ primary: resolvedDark ? 'oklch(0.985 0 0)' : 'oklch(0.205 0 0)',
62
+ foreground: resolvedDark ? 'oklch(0.205 0 0)' : 'oklch(0.985 0 0)'
63
+ }
64
+ };
65
+
66
+ if (accent && colorMap[accent]) {
67
+ root.style.setProperty('--primary', colorMap[accent].primary);
68
+ root.style.setProperty('--primary-foreground', colorMap[accent].foreground);
69
+ }
70
+
71
+ if (radius) {
72
+ var radVal = radius.endsWith('rem') ? radius : radius + 'rem';
73
+ root.style.setProperty('--radius', radVal);
74
+ }
75
+ }catch(e){}})();`;
76
+
77
+ return <script innerHTML={scriptText} />;
78
+ };
@@ -0,0 +1,139 @@
1
+ export type ThemeEffect = "none" | "circular" | "fade";
2
+
3
+ /**
4
+ * Injects required CSS view-transition pseudo-element styles to prevent browser mix-blend artifacts.
5
+ */
6
+ function ensureTransitionStyles() {
7
+ if (typeof document === "undefined") return;
8
+ const styleId = "nikala-view-transition-styles";
9
+ if (!document.getElementById(styleId)) {
10
+ const style = document.createElement("style");
11
+ style.id = styleId;
12
+ style.textContent = `
13
+ ::view-transition-old(root),
14
+ ::view-transition-new(root) {
15
+ animation: none;
16
+ mix-blend-mode: normal;
17
+ }
18
+ ::view-transition-old(root) {
19
+ z-index: 1;
20
+ }
21
+ ::view-transition-new(root) {
22
+ z-index: 9999;
23
+ }
24
+ `;
25
+ document.head.appendChild(style);
26
+ }
27
+ }
28
+
29
+ /**
30
+ * Checks whether the current environment is Linux WebKitGTK (e.g. Tauri on Linux)
31
+ * where CSS View Transitions pseudo-element animations trigger known WebProcess crashes.
32
+ */
33
+ function isLinuxWebKit(): boolean {
34
+ if (typeof navigator === "undefined") return false;
35
+ const ua = navigator.userAgent || "";
36
+ const isLinux = /linux/i.test(ua);
37
+ const isWebKit = /applewebkit/i.test(ua);
38
+ const isChrome = /chrome|chromium|edg/i.test(ua);
39
+ const isTauri = typeof window !== "undefined" && typeof (window as any).__TAURI_INTERNALS__ !== "undefined";
40
+
41
+ return isLinux && ((isWebKit && !isChrome) || isTauri);
42
+ }
43
+
44
+ /**
45
+ * Executes a theme change with the specified transition effect using the Web View Transitions API.
46
+ * Supported on modern browsers, Windows (Tauri WebView2), and macOS (Tauri WKWebView).
47
+ * Automatically falls back to safe instant transitions on Linux WebKitGTK.
48
+ *
49
+ * @param effect - Desired transition animation ("none", "circular", "fade")
50
+ * @param event - Mouse or Pointer event to calculate transition center coordinates
51
+ * @param updateThemeCallback - Callback function performing the actual theme state change
52
+ */
53
+ export function runThemeTransition(
54
+ effect: ThemeEffect = "none",
55
+ event: MouseEvent | undefined,
56
+ updateThemeCallback: () => void
57
+ ) {
58
+ // Safe fallback if View Transitions API is unsupported, reduced motion is preferred,
59
+ // or on Linux WebKitGTK where pseudo-element clipping transitions trigger WebProcess faults
60
+ if (
61
+ effect === "none" ||
62
+ typeof document === "undefined" ||
63
+ !(document as any).startViewTransition ||
64
+ window.matchMedia("(prefers-reduced-motion: reduce)").matches ||
65
+ isLinuxWebKit()
66
+ ) {
67
+ updateThemeCallback();
68
+ return;
69
+ }
70
+
71
+ ensureTransitionStyles();
72
+
73
+ try {
74
+ // Circular expanding ripple transition originating from click coordinates
75
+ if (effect === "circular" && event) {
76
+ const x = event.clientX;
77
+ const y = event.clientY;
78
+
79
+ const endRadius = Math.hypot(
80
+ Math.max(x, window.innerWidth - x),
81
+ Math.max(y, window.innerHeight - y)
82
+ );
83
+
84
+ const transition = (document as any).startViewTransition(() => {
85
+ updateThemeCallback();
86
+ });
87
+
88
+ transition.ready
89
+ ?.then(() => {
90
+ document.documentElement.animate(
91
+ {
92
+ clipPath: [
93
+ `circle(0px at ${x}px ${y}px)`,
94
+ `circle(${endRadius}px at ${x}px ${y}px)`,
95
+ ],
96
+ },
97
+ {
98
+ duration: 500,
99
+ easing: "ease-in-out",
100
+ pseudoElement: "::view-transition-new(root)",
101
+ }
102
+ );
103
+ })
104
+ ?.catch(() => {
105
+ // Graceful fallback
106
+ });
107
+ return;
108
+ }
109
+
110
+ // Smooth opacity fade view transition
111
+ if (effect === "fade") {
112
+ const transition = (document as any).startViewTransition(() => {
113
+ updateThemeCallback();
114
+ });
115
+
116
+ transition.ready
117
+ ?.then(() => {
118
+ document.documentElement.animate(
119
+ {
120
+ opacity: [0, 1],
121
+ },
122
+ {
123
+ duration: 350,
124
+ easing: "ease-in-out",
125
+ pseudoElement: "::view-transition-new(root)",
126
+ }
127
+ );
128
+ })
129
+ ?.catch(() => {
130
+ // Graceful fallback
131
+ });
132
+ return;
133
+ }
134
+
135
+ updateThemeCallback();
136
+ } catch {
137
+ updateThemeCallback();
138
+ }
139
+ }
@@ -0,0 +1,51 @@
1
+ import { createSignal, onMount, onCleanup, type Accessor } from "solid-js";
2
+ import { isServer } from "solid-js/web";
3
+
4
+ export interface CreateActiveElementReturn {
5
+ /** Accessor returning the currently focused DOM element, or null */
6
+ activeElement: Accessor<Element | null>;
7
+ /** Accessor returning true if any element (non-body) is focused */
8
+ hasFocus: Accessor<boolean>;
9
+ }
10
+
11
+ /**
12
+ * SolidJS reactive primitive for tracking the currently focused (active) DOM element.
13
+ * Listens to focus/blur events on the document and reactively updates `activeElement` and `hasFocus`.
14
+ */
15
+ export function createActiveElement(): CreateActiveElementReturn {
16
+ // SSR: return static defaults
17
+ if (isServer) {
18
+ const [activeElement] = createSignal<Element | null>(null);
19
+ const [hasFocus] = createSignal(false);
20
+ return { activeElement, hasFocus };
21
+ }
22
+
23
+ const [activeElement, setActiveElement] = createSignal<Element | null>(null);
24
+
25
+ const hasFocus = () => {
26
+ const el = activeElement();
27
+ return el !== null && el !== document.body;
28
+ };
29
+
30
+ const handleFocusChange = () => {
31
+ setActiveElement(document.activeElement);
32
+ };
33
+
34
+ onMount(() => {
35
+ // Set initial value
36
+ setActiveElement(document.activeElement);
37
+
38
+ document.addEventListener("focusin", handleFocusChange, true);
39
+ document.addEventListener("focusout", handleFocusChange, true);
40
+
41
+ onCleanup(() => {
42
+ document.removeEventListener("focusin", handleFocusChange, true);
43
+ document.removeEventListener("focusout", handleFocusChange, true);
44
+ });
45
+ });
46
+
47
+ return {
48
+ activeElement,
49
+ hasFocus,
50
+ };
51
+ }