@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,203 @@
1
+ import {
2
+ createContext,
3
+ useContext,
4
+ splitProps,
5
+ type Component,
6
+ type JSX,
7
+ type Accessor,
8
+ } from "solid-js";
9
+ import { cva, type VariantProps } from "class-variance-authority";
10
+ import { createControllableSignal } from "@/hooks/create-controllable-signal";
11
+ import { cn } from "@/lib/cn";
12
+
13
+ export const toggleGroupItemVariants = cva(
14
+ "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer",
15
+ {
16
+ variants: {
17
+ variant: {
18
+ default: "bg-transparent",
19
+ outline:
20
+ "border border-border bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground data-[state=on]:bg-accent data-[state=on]:text-accent-foreground",
21
+ },
22
+ size: {
23
+ default: "h-9 px-3 min-w-9",
24
+ sm: "h-8 px-2 text-xs min-w-8",
25
+ lg: "h-10 px-3 min-w-10",
26
+ },
27
+ },
28
+ defaultVariants: {
29
+ variant: "default",
30
+ size: "default",
31
+ },
32
+ }
33
+ );
34
+
35
+ interface ToggleGroupContextValue {
36
+ type: "single" | "multiple";
37
+ value: Accessor<any>;
38
+ onItemSelect: (itemValue: string) => void;
39
+ variant: Accessor<"default" | "outline">;
40
+ size: Accessor<"default" | "sm" | "lg">;
41
+ disabled: Accessor<boolean>;
42
+ }
43
+
44
+ const ToggleGroupContext = createContext<ToggleGroupContextValue>();
45
+
46
+ export interface ToggleGroupProps<T extends "single" | "multiple" = "single">
47
+ extends Omit<JSX.HTMLAttributes<HTMLDivElement>, "onChange">,
48
+ VariantProps<typeof toggleGroupItemVariants> {
49
+ /** Mode of selection: single choice or multiple choices */
50
+ type?: T;
51
+ /** Controlled value: string for 'single', string[] for 'multiple' */
52
+ value?: T extends "multiple" ? string[] : string;
53
+ /** Uncontrolled default value */
54
+ defaultValue?: T extends "multiple" ? string[] : string;
55
+ /** Callback fired when selection changes */
56
+ onChange?: (value: T extends "multiple" ? string[] : string) => void;
57
+ /** Layout orientation */
58
+ orientation?: "horizontal" | "vertical";
59
+ /** Disables all buttons in the group */
60
+ disabled?: boolean;
61
+ class?: string;
62
+ children?: JSX.Element;
63
+ }
64
+
65
+ /**
66
+ * Root container for grouping connected toggle items with shared single/multiple selection state.
67
+ */
68
+ export const ToggleGroup = <T extends "single" | "multiple" = "single">(
69
+ props: ToggleGroupProps<T>
70
+ ) => {
71
+ const [local, rest] = splitProps(props, [
72
+ "type",
73
+ "value",
74
+ "defaultValue",
75
+ "onChange",
76
+ "orientation",
77
+ "variant",
78
+ "size",
79
+ "disabled",
80
+ "class",
81
+ "children",
82
+ ]);
83
+
84
+ const type = () => local.type ?? ("single" as T);
85
+ const variant = () => local.variant ?? "default";
86
+ const size = () => local.size ?? "default";
87
+ const disabled = () => local.disabled ?? false;
88
+ const orientation = () => local.orientation ?? "horizontal";
89
+
90
+ const [currentValue, setCurrentValue] = createControllableSignal<any>({
91
+ value: () => local.value,
92
+ defaultValue: local.defaultValue ?? (type() === "multiple" ? [] : undefined),
93
+ onChange: (val) => local.onChange?.(val),
94
+ });
95
+
96
+ const onItemSelect = (itemValue: string) => {
97
+ if (disabled()) return;
98
+
99
+ if (type() === "multiple") {
100
+ const currentList = Array.isArray(currentValue()) ? currentValue() : [];
101
+ if (currentList.includes(itemValue)) {
102
+ setCurrentValue(currentList.filter((v: string) => v !== itemValue));
103
+ } else {
104
+ setCurrentValue([...currentList, itemValue]);
105
+ }
106
+ } else {
107
+ const current = currentValue();
108
+ if (current === itemValue) {
109
+ setCurrentValue(undefined);
110
+ } else {
111
+ setCurrentValue(itemValue);
112
+ }
113
+ }
114
+ };
115
+
116
+ const contextValue: ToggleGroupContextValue = {
117
+ type: type(),
118
+ value: currentValue,
119
+ onItemSelect,
120
+ variant,
121
+ size,
122
+ disabled,
123
+ };
124
+
125
+ return (
126
+ <ToggleGroupContext.Provider value={contextValue}>
127
+ <div
128
+ role="group"
129
+ data-orientation={orientation()}
130
+ class={cn(
131
+ "flex items-center justify-center gap-1 rounded-lg",
132
+ orientation() === "vertical" ? "flex-col" : "flex-row",
133
+ local.class
134
+ )}
135
+ {...rest}
136
+ >
137
+ {local.children}
138
+ </div>
139
+ </ToggleGroupContext.Provider>
140
+ );
141
+ };
142
+
143
+ export interface ToggleGroupItemProps
144
+ extends JSX.ButtonHTMLAttributes<HTMLButtonElement>,
145
+ VariantProps<typeof toggleGroupItemVariants> {
146
+ /** Unique value representing this toggle item within the group */
147
+ value: string;
148
+ class?: string;
149
+ children?: JSX.Element;
150
+ }
151
+
152
+ /**
153
+ * Individual toggle button item within a ToggleGroup.
154
+ */
155
+ export const ToggleGroupItem: Component<ToggleGroupItemProps> = (props) => {
156
+ const context = useContext(ToggleGroupContext);
157
+
158
+ if (!context) {
159
+ throw new Error("ToggleGroupItem must be used within a ToggleGroup");
160
+ }
161
+
162
+ const [local, rest] = splitProps(props, [
163
+ "value",
164
+ "variant",
165
+ "size",
166
+ "disabled",
167
+ "class",
168
+ "children",
169
+ ]);
170
+
171
+ const isSelected = () => {
172
+ const groupValue = context.value();
173
+ if (context.type === "multiple") {
174
+ return Array.isArray(groupValue) && groupValue.includes(local.value);
175
+ }
176
+ return groupValue === local.value;
177
+ };
178
+
179
+ const isDisabled = () => local.disabled || context.disabled();
180
+ const itemVariant = () => local.variant || context.variant();
181
+ const itemSize = () => local.size || context.size();
182
+
183
+ return (
184
+ <button
185
+ type="button"
186
+ role={context.type === "single" ? "radio" : "checkbox"}
187
+ aria-checked={isSelected()}
188
+ data-state={isSelected() ? "on" : "off"}
189
+ disabled={isDisabled()}
190
+ onClick={() => context.onItemSelect(local.value)}
191
+ class={cn(
192
+ toggleGroupItemVariants({
193
+ variant: itemVariant(),
194
+ size: itemSize(),
195
+ }),
196
+ local.class
197
+ )}
198
+ {...rest}
199
+ >
200
+ {local.children}
201
+ </button>
202
+ );
203
+ };
@@ -0,0 +1,101 @@
1
+ import { splitProps, type Component, type JSX } from "solid-js";
2
+ import { ToggleButton as KobalteToggle } from "@kobalte/core/toggle-button";
3
+ import { cva, type VariantProps } from "class-variance-authority";
4
+ import { cn } from "@/lib/cn";
5
+
6
+ export const toggleVariants = cva(
7
+ "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[pressed]:bg-accent data-[pressed]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ default: "bg-transparent",
12
+ outline:
13
+ "border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground data-[pressed]:bg-accent data-[pressed]:text-accent-foreground",
14
+ },
15
+ size: {
16
+ default: "h-9 px-3 min-w-9",
17
+ sm: "h-8 px-2 text-xs min-w-8",
18
+ lg: "h-10 px-3 min-w-10",
19
+ },
20
+ },
21
+ defaultVariants: {
22
+ variant: "default",
23
+ size: "default",
24
+ },
25
+ }
26
+ );
27
+
28
+ export interface ToggleProps
29
+ extends JSX.ButtonHTMLAttributes<HTMLButtonElement>,
30
+ VariantProps<typeof toggleVariants> {
31
+ pressed?: boolean;
32
+ defaultPressed?: boolean;
33
+ onPressedChange?: (pressed: boolean) => void;
34
+ disabled?: boolean;
35
+ class?: string;
36
+ children?: JSX.Element;
37
+ }
38
+
39
+ export const Toggle: Component<ToggleProps> = (props) => {
40
+ const [local, rest] = splitProps(props, [
41
+ "variant",
42
+ "size",
43
+ "class",
44
+ "children",
45
+ "pressed",
46
+ "defaultPressed",
47
+ "onPressedChange",
48
+ "disabled",
49
+ "onChange",
50
+ ]);
51
+
52
+ return (
53
+ <KobalteToggle
54
+ isPressed={local.pressed}
55
+ defaultIsPressed={local.defaultPressed}
56
+ onChange={local.onPressedChange}
57
+ disabled={local.disabled}
58
+ class={cn(
59
+ toggleVariants({ variant: local.variant, size: local.size }),
60
+ local.class
61
+ )}
62
+ {...rest}
63
+ >
64
+ {local.children}
65
+ </KobalteToggle>
66
+ );
67
+ };
68
+
69
+ export interface ToggleGroupProps extends JSX.HTMLAttributes<HTMLDivElement> {
70
+ type?: "single" | "multiple";
71
+ value?: string | string[];
72
+ defaultValue?: string | string[];
73
+ onChange?: (value: any) => void;
74
+ disabled?: boolean;
75
+ class?: string;
76
+ children?: JSX.Element;
77
+ }
78
+
79
+ export const ToggleGroup: Component<ToggleGroupProps> = (props) => {
80
+ const [local, rest] = splitProps(props, [
81
+ "type",
82
+ "value",
83
+ "defaultValue",
84
+ "onChange",
85
+ "disabled",
86
+ "class",
87
+ "children",
88
+ ]);
89
+
90
+ return (
91
+ <div
92
+ class={cn(
93
+ "flex items-center justify-center gap-1 rounded-md border border-border/40 p-1 bg-background",
94
+ local.class
95
+ )}
96
+ {...rest}
97
+ >
98
+ {local.children}
99
+ </div>
100
+ );
101
+ };
@@ -0,0 +1,41 @@
1
+ import { splitProps, type Component, type ComponentProps } from "solid-js";
2
+ import { Tooltip as KobalteTooltip } from "@kobalte/core/tooltip";
3
+ import { cn } from "@/lib/cn";
4
+
5
+ export const Tooltip = KobalteTooltip;
6
+
7
+ export const TooltipTrigger = KobalteTooltip.Trigger;
8
+
9
+ export const TooltipArrow: Component<ComponentProps<typeof KobalteTooltip.Arrow>> = (props) => {
10
+ const [local, rest] = splitProps(props, ["class"]);
11
+
12
+ return (
13
+ <KobalteTooltip.Arrow
14
+ size={8}
15
+ class={cn("fill-popover stroke-border", local.class)}
16
+ {...rest}
17
+ />
18
+ );
19
+ };
20
+
21
+ export interface TooltipContentProps extends ComponentProps<typeof KobalteTooltip.Content> {
22
+ class?: string;
23
+ }
24
+
25
+ export const TooltipContent: Component<TooltipContentProps> = (props) => {
26
+ const [local, rest] = splitProps(props, ["class", "children"]);
27
+
28
+ return (
29
+ <KobalteTooltip.Portal>
30
+ <KobalteTooltip.Content
31
+ class={cn(
32
+ "z-50 rounded-md border border-border bg-popover px-3 py-1.5 text-xs text-popover-foreground shadow-md transition-all animate-in fade-in-0 zoom-in-95 data-closed:animate-out data-[closed]:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
33
+ local.class
34
+ )}
35
+ {...rest}
36
+ >
37
+ {local.children}
38
+ </KobalteTooltip.Content>
39
+ </KobalteTooltip.Portal>
40
+ );
41
+ };
@@ -0,0 +1,254 @@
1
+ import {
2
+ Show,
3
+ splitProps,
4
+ type Component,
5
+ type ParentComponent,
6
+ type JSX,
7
+ } from "solid-js";
8
+ import {
9
+ Dialog,
10
+ DialogContent,
11
+ DialogHeader,
12
+ DialogTitle,
13
+ DialogDescription,
14
+ DialogFooter,
15
+ } from "@/components/ui/dialog";
16
+ import { Button } from "@/components/ui/button";
17
+ import { Badge } from "@/components/ui/badge";
18
+ import { Progress } from "@/components/ui/progress";
19
+ import { Alert, AlertTitle, AlertDescription } from "@/components/ui/alert";
20
+ import type {
21
+ CreateAppUpdaterReturn,
22
+ UpdateManifestInfo,
23
+ UpdateProgressInfo,
24
+ } from "@/hooks/create-app-updater";
25
+ import {
26
+ Download,
27
+ RotateCcw,
28
+ CheckCircle2,
29
+ AlertTriangle,
30
+ ArrowRight,
31
+ Package,
32
+ } from "lucide-solid";
33
+ import { cn } from "@/lib/cn";
34
+
35
+ function formatBytes(bytes: number): string {
36
+ if (!bytes || bytes === 0) return "0 MB";
37
+ const mb = bytes / (1024 * 1024);
38
+ return `${mb.toFixed(1)} MB`;
39
+ }
40
+
41
+ /* --- 1. Sub-components for Clean Modularity & Zero Repetition --- */
42
+
43
+ export interface UpdaterHeaderProps {
44
+ appName: string;
45
+ status: string;
46
+ info?: UpdateManifestInfo | null;
47
+ }
48
+
49
+ export const UpdaterHeader: Component<UpdaterHeaderProps> = (props) => (
50
+ <DialogHeader class="space-y-1.5 text-left">
51
+ <div class="flex items-center justify-between">
52
+ <div class="size-8 rounded-lg bg-primary/10 text-primary flex items-center justify-center">
53
+ <Package class="size-4" />
54
+ </div>
55
+ <Show when={props.info?.version}>
56
+ <div class="flex items-center gap-1.5 text-xs font-mono">
57
+ <span class="text-muted-foreground">{props.info?.currentVersion || "v1.0.0"}</span>
58
+ <ArrowRight class="size-3 text-muted-foreground" />
59
+ <Badge variant="default" class="text-xs px-1.5 py-0 bg-primary text-primary-foreground font-semibold">
60
+ {props.info?.version}
61
+ </Badge>
62
+ </div>
63
+ </Show>
64
+ </div>
65
+
66
+ <DialogTitle class="text-base font-bold tracking-tight text-foreground">
67
+ {props.status === "downloaded"
68
+ ? "Update Ready to Install"
69
+ : props.status === "downloading"
70
+ ? "Downloading Update..."
71
+ : props.status === "up-to-date"
72
+ ? "Up to Date"
73
+ : `New Update Available for ${props.appName}`}
74
+ </DialogTitle>
75
+
76
+ <DialogDescription class="text-xs text-muted-foreground leading-relaxed">
77
+ {props.status === "downloaded"
78
+ ? "The update has been downloaded and verified. Restart to apply changes."
79
+ : props.status === "downloading"
80
+ ? "Please wait while update packages are being downloaded."
81
+ : props.status === "up-to-date"
82
+ ? `${props.appName} is running on the latest version.`
83
+ : "A new version with features and bug fixes is ready to install."}
84
+ </DialogDescription>
85
+ </DialogHeader>
86
+ );
87
+
88
+ export interface UpdaterReleaseNotesProps {
89
+ body?: string;
90
+ date?: string;
91
+ }
92
+
93
+ export const UpdaterReleaseNotes: Component<UpdaterReleaseNotesProps> = (props) => (
94
+ <div class="space-y-1">
95
+ <div class="flex items-center justify-between text-xs text-muted-foreground font-medium">
96
+ <span>Release Notes</span>
97
+ <Show when={props.date}>
98
+ <span class="text-[11px] font-mono">{props.date}</span>
99
+ </Show>
100
+ </div>
101
+ <pre class="max-h-28 overflow-y-auto rounded-md border border-border bg-black/5 dark:bg-black/50 p-2.5 text-xs text-foreground font-mono whitespace-pre-wrap leading-relaxed select-text shadow-inner">
102
+ {props.body}
103
+ </pre>
104
+ </div>
105
+ );
106
+
107
+ export interface UpdaterProgressBarProps {
108
+ progress: UpdateProgressInfo;
109
+ }
110
+
111
+ export const UpdaterProgressBar: Component<UpdaterProgressBarProps> = (props) => (
112
+ <div class="space-y-1.5 py-1">
113
+ <div class="flex items-center justify-between text-xs font-mono">
114
+ <span class="text-muted-foreground font-sans">Progress</span>
115
+ <span class="font-semibold text-primary">{props.progress.percentage}%</span>
116
+ </div>
117
+ <Progress value={props.progress.percentage} class="h-1.5" />
118
+ <div class="flex items-center justify-between text-[11px] font-mono text-muted-foreground">
119
+ <span>{formatBytes(props.progress.downloaded)}</span>
120
+ <span>{formatBytes(props.progress.total)}</span>
121
+ </div>
122
+ </div>
123
+ );
124
+
125
+ /* --- 2. Main UpdaterModal Compound Component --- */
126
+
127
+ export interface UpdaterModalProps {
128
+ open: boolean;
129
+ onOpenChange: (open: boolean) => void;
130
+ updater: CreateAppUpdaterReturn;
131
+ appName?: string;
132
+ class?: string;
133
+ }
134
+
135
+ export const UpdaterModal: Component<UpdaterModalProps> = (props) => {
136
+ const [local, rest] = splitProps(props, [
137
+ "open",
138
+ "onOpenChange",
139
+ "updater",
140
+ "appName",
141
+ "class",
142
+ ]);
143
+
144
+ const appName = () => local.appName || "Nikala Desktop";
145
+ const status = () => local.updater.status();
146
+ const info = () => local.updater.updateInfo();
147
+ const progress = () => local.updater.progress();
148
+ const error = () => local.updater.error();
149
+
150
+ return (
151
+ <Dialog open={local.open} onOpenChange={local.onOpenChange}>
152
+ <DialogContent class={cn("sm:max-w-sm", local.class)}>
153
+ {/* Header */}
154
+ <UpdaterHeader
155
+ appName={appName()}
156
+ status={status()}
157
+ info={info()}
158
+ />
159
+
160
+ {/* Error Alert */}
161
+ <Show when={error()}>
162
+ <Alert variant="destructive" class="py-2 text-xs">
163
+ <AlertTriangle class="size-3.5" />
164
+ <AlertTitle class="font-semibold text-xs">Update Failed</AlertTitle>
165
+ <AlertDescription class="text-[11px]">{error()}</AlertDescription>
166
+ </Alert>
167
+ </Show>
168
+
169
+ {/* Release Notes */}
170
+ <Show when={info()?.body && (status() === "available" || status() === "downloading")}>
171
+ <UpdaterReleaseNotes body={info()?.body} date={info()?.date} />
172
+ </Show>
173
+
174
+ {/* Progress Bar */}
175
+ <Show when={status() === "downloading"}>
176
+ <UpdaterProgressBar progress={progress()} />
177
+ </Show>
178
+
179
+ {/* Success Callout */}
180
+ <Show when={status() === "downloaded"}>
181
+ <div class="flex items-center gap-2.5 p-2.5 rounded-md border border-primary/30 bg-primary/5 text-xs text-foreground">
182
+ <CheckCircle2 class="size-4 text-primary shrink-0" />
183
+ <p class="font-medium text-foreground text-xs">Package downloaded & verified.</p>
184
+ </div>
185
+ </Show>
186
+
187
+ {/* Actions Footer */}
188
+ <DialogFooter class="flex-row items-center justify-end gap-1.5 pt-1">
189
+ <Show when={status() === "available" || status() === "error"}>
190
+ <Button
191
+ variant="outline"
192
+ size="sm"
193
+ onClick={() => local.onOpenChange(false)}
194
+ class="text-xs h-7.5 px-3 cursor-pointer"
195
+ >
196
+ Later
197
+ </Button>
198
+ <Button
199
+ variant="default"
200
+ size="sm"
201
+ onClick={() => local.updater.downloadAndInstall()}
202
+ class="text-xs h-7.5 px-3 gap-1.5 cursor-pointer font-medium"
203
+ >
204
+ <Download class="size-3.5" />
205
+ <span>Update Now</span>
206
+ </Button>
207
+ </Show>
208
+
209
+ <Show when={status() === "downloading"}>
210
+ <Button
211
+ variant="outline"
212
+ size="sm"
213
+ disabled
214
+ class="text-xs h-7.5 w-full opacity-70 justify-center"
215
+ >
216
+ Downloading ({progress().percentage}%)
217
+ </Button>
218
+ </Show>
219
+
220
+ <Show when={status() === "downloaded"}>
221
+ <Button
222
+ variant="outline"
223
+ size="sm"
224
+ onClick={() => local.onOpenChange(false)}
225
+ class="text-xs h-7.5 px-3 cursor-pointer"
226
+ >
227
+ Later
228
+ </Button>
229
+ <Button
230
+ variant="default"
231
+ size="sm"
232
+ onClick={() => local.updater.relaunch()}
233
+ class="text-xs h-7.5 px-3 gap-1.5 cursor-pointer font-semibold shadow-xs"
234
+ >
235
+ <RotateCcw class="size-3.5" />
236
+ <span>Relaunch</span>
237
+ </Button>
238
+ </Show>
239
+
240
+ <Show when={status() === "up-to-date" || status() === "idle"}>
241
+ <Button
242
+ variant="outline"
243
+ size="sm"
244
+ onClick={() => local.onOpenChange(false)}
245
+ class="text-xs h-7.5 px-3 cursor-pointer"
246
+ >
247
+ Close
248
+ </Button>
249
+ </Show>
250
+ </DialogFooter>
251
+ </DialogContent>
252
+ </Dialog>
253
+ );
254
+ };
@@ -0,0 +1,50 @@
1
+ // src/registry/index.ts
2
+
3
+ /**
4
+ * Represents a single file within a component registry item.
5
+ */
6
+ export interface RegistryFile {
7
+ /** The target relative path where the file will be placed in the user's project (e.g., "ui/button.tsx") */
8
+ path: string;
9
+ /** The full raw text content of the file */
10
+ content: string;
11
+ /** The category type of the file */
12
+ type: "registry:ui" | "registry:util" | "registry:hook" | "registry:block";
13
+ }
14
+
15
+ /**
16
+ * Represents the complete manifest structure for a single Nikala UI component.
17
+ */
18
+ export interface RegistryItem {
19
+ /** The unique identifier name of the component (e.g., "button") */
20
+ name: string;
21
+ /** Display title for CLI prompts and documentation */
22
+ title: string;
23
+ /** Short summary describing the component */
24
+ description: string;
25
+ /** Component category type */
26
+ type: "registry:ui" | "registry:util" | "registry:hook" | "registry:block";
27
+ /** Required NPM dependencies to be installed automatically (e.g., ["clsx", "tailwind-merge"]) */
28
+ dependencies?: string[];
29
+ /** Internal Nikala UI component dependencies required by this component (e.g., ["button"]) */
30
+ registryDependencies?: string[];
31
+ /** Array of code files comprising this component */
32
+ files: RegistryFile[];
33
+ }
34
+
35
+ /**
36
+ * Lightweight metadata structure used for the central registry index list.
37
+ */
38
+ export interface RegistryIndexItem {
39
+ name: string;
40
+ title: string;
41
+ description: string;
42
+ type: "registry:ui" | "registry:util" | "registry:hook" | "registry:block";
43
+ dependencies?: string[];
44
+ registryDependencies?: string[];
45
+ }
46
+
47
+ /**
48
+ * Type alias for the central registry index manifest.
49
+ */
50
+ export type RegistryIndex = RegistryIndexItem[];