@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,468 @@
1
+ import {
2
+ createContext,
3
+ useContext,
4
+ splitProps,
5
+ createMemo,
6
+ Show,
7
+ type Component,
8
+ type JSX,
9
+ type ParentComponent,
10
+ type Accessor,
11
+ } from "solid-js";
12
+ import { cva, type VariantProps } from "class-variance-authority";
13
+ import { createTauriWindow, type TauriPlatform, detectPlatform } from "@/hooks/create-tauri-window";
14
+ import { cn } from "@/lib/cn";
15
+
16
+ /* --- 1. Context & Types --- */
17
+ export type TitlebarPlatform = "macos" | "windows" | "auto";
18
+
19
+ export interface TitlebarContextValue {
20
+ platform: Accessor<"macos" | "windows">;
21
+ isMaximized: Accessor<boolean>;
22
+ minimize: () => Promise<void> | void;
23
+ toggleMaximize: () => Promise<void> | void;
24
+ close: () => Promise<void> | void;
25
+ destroy?: () => Promise<void> | void;
26
+ }
27
+
28
+ const TitlebarContext = createContext<TitlebarContextValue>();
29
+
30
+ export function useTitlebar() {
31
+ const context = useContext(TitlebarContext);
32
+ if (!context) {
33
+ throw new Error("useTitlebar must be used within a <Titlebar />");
34
+ }
35
+ return context;
36
+ }
37
+
38
+ /* --- 2. Titlebar Variants --- */
39
+ export const titlebarVariants = cva(
40
+ "relative flex w-full select-none items-center justify-between border-b transition-colors shrink-0 sticky top-0 z-50",
41
+ {
42
+ variants: {
43
+ variant: {
44
+ default: "border-border/50 bg-background text-foreground",
45
+ translucent: "border-border/40 bg-background/80 backdrop-blur-md text-foreground",
46
+ floating: "m-2 rounded-lg border border-border bg-card shadow-sm text-card-foreground",
47
+ transparent: "border-transparent bg-transparent text-foreground",
48
+ },
49
+ size: {
50
+ sm: "h-8 text-xs px-2.5",
51
+ default: "h-9 text-xs px-3",
52
+ lg: "h-11 text-sm px-4",
53
+ },
54
+ },
55
+ defaultVariants: {
56
+ variant: "default",
57
+ size: "default",
58
+ },
59
+ }
60
+ );
61
+
62
+ /* --- 3. Root Titlebar Component --- */
63
+ export interface TitlebarProps
64
+ extends JSX.HTMLAttributes<HTMLElement>,
65
+ VariantProps<typeof titlebarVariants> {
66
+ /** Explicit platform style, or 'auto' to detect host OS. */
67
+ platform?: TitlebarPlatform;
68
+ /** Optional controlled maximize state override. */
69
+ isMaximized?: boolean;
70
+ /** Optional minimize callback override. */
71
+ onMinimize?: () => void | Promise<void>;
72
+ /** Optional maximize callback override. */
73
+ onToggleMaximize?: () => void | Promise<void>;
74
+ /** Optional close callback override. */
75
+ onClose?: () => void | Promise<void>;
76
+ /** Whether double-clicking the titlebar toggles window maximize state. Defaults to true. */
77
+ doubleClickToMaximize?: boolean;
78
+ }
79
+
80
+ export const Titlebar: ParentComponent<TitlebarProps> = (props) => {
81
+ const [local, rest] = splitProps(props, [
82
+ "platform",
83
+ "isMaximized",
84
+ "onMinimize",
85
+ "onToggleMaximize",
86
+ "onClose",
87
+ "variant",
88
+ "size",
89
+ "class",
90
+ "children",
91
+ "doubleClickToMaximize",
92
+ "onMouseDown",
93
+ "onDblClick",
94
+ ]);
95
+
96
+ const windowCtrl = createTauriWindow();
97
+
98
+ const resolvedPlatform = createMemo<"macos" | "windows">(() => {
99
+ if (local.platform && local.platform !== "auto") {
100
+ return local.platform;
101
+ }
102
+ const detected = detectPlatform();
103
+ return detected === "macos" ? "macos" : "windows";
104
+ });
105
+
106
+ const isMaximized = () =>
107
+ local.isMaximized !== undefined ? local.isMaximized : windowCtrl.isMaximized();
108
+
109
+ const minimize = () => (local.onMinimize ? local.onMinimize() : windowCtrl.minimize());
110
+ const toggleMaximize = () =>
111
+ local.onToggleMaximize ? local.onToggleMaximize() : windowCtrl.toggleMaximize();
112
+ const close = () => (local.onClose ? local.onClose() : windowCtrl.close());
113
+ const destroy = () => windowCtrl.destroy();
114
+
115
+ const handleMouseDown: JSX.EventHandlerUnion<HTMLElement, MouseEvent> = (e) => {
116
+ if (e.button === 0) {
117
+ const target = e.target as HTMLElement;
118
+ if (!target.closest("button, a, input, select, textarea, [data-no-drag], [data-tauri-drag-region='false']")) {
119
+ if (e.detail === 2 && local.doubleClickToMaximize !== false) {
120
+ // Double-click detected on mousedown detail - toggles maximize immediately without initiating a drag
121
+ toggleMaximize();
122
+ } else if (e.detail === 1) {
123
+ // Single-click: initiate window drag
124
+ windowCtrl.startDragging(e);
125
+ }
126
+ }
127
+ }
128
+ if (typeof local.onMouseDown === "function") {
129
+ (local.onMouseDown as any)(e);
130
+ }
131
+ };
132
+
133
+ let lastDblClickTime = 0;
134
+ const handleDoubleClick: JSX.EventHandlerUnion<HTMLElement, MouseEvent> = (e) => {
135
+ const now = Date.now();
136
+ if (now - lastDblClickTime < 350) {
137
+ return; // Deduplicate rapid triggers
138
+ }
139
+ lastDblClickTime = now;
140
+
141
+ if (local.doubleClickToMaximize !== false) {
142
+ // Don't maximize if user double-clicked an interactive control
143
+ const target = e.target as HTMLElement;
144
+ if (!target.closest("button, a, input, select, textarea, [data-no-drag], [data-tauri-drag-region='false']")) {
145
+ toggleMaximize();
146
+ }
147
+ }
148
+ if (typeof local.onDblClick === "function") {
149
+ (local.onDblClick as any)(e);
150
+ }
151
+ };
152
+
153
+ const contextValue: TitlebarContextValue = {
154
+ platform: resolvedPlatform,
155
+ isMaximized,
156
+ minimize,
157
+ toggleMaximize,
158
+ close,
159
+ destroy,
160
+ };
161
+
162
+ return (
163
+ <TitlebarContext.Provider value={contextValue}>
164
+ <header
165
+ onMouseDown={handleMouseDown}
166
+ onDblClick={handleDoubleClick}
167
+ class={cn(
168
+ titlebarVariants({ variant: local.variant, size: local.size }),
169
+ "select-none cursor-default",
170
+ local.class
171
+ )}
172
+ {...rest}
173
+ >
174
+ {local.children}
175
+ </header>
176
+ </TitlebarContext.Provider>
177
+ );
178
+ };
179
+
180
+ /* --- 4. Subcomponents --- */
181
+
182
+ /**
183
+ * Traffic light buttons for macOS or Fluent control buttons for Windows.
184
+ */
185
+ export interface TitlebarControlsProps extends JSX.HTMLAttributes<HTMLDivElement> {
186
+ /** Optional override platform style. Defaults to Titlebar context or detected OS. */
187
+ platform?: "macos" | "windows";
188
+ /** Optional controlled maximize state override. */
189
+ isMaximized?: boolean;
190
+ /** Optional minimize callback override. */
191
+ onMinimize?: () => void | Promise<void>;
192
+ /** Optional maximize callback override. */
193
+ onToggleMaximize?: () => void | Promise<void>;
194
+ /** Optional close callback override. */
195
+ onClose?: () => void | Promise<void>;
196
+ }
197
+
198
+ export const TitlebarControls: Component<TitlebarControlsProps> = (props) => {
199
+ const [local, rest] = splitProps(props, [
200
+ "platform",
201
+ "class",
202
+ "style",
203
+ "isMaximized",
204
+ "onMinimize",
205
+ "onToggleMaximize",
206
+ "onClose",
207
+ ]);
208
+ const ctx = useContext(TitlebarContext);
209
+ let fallbackCtrl: ReturnType<typeof createTauriWindow> | null = null;
210
+ if (!ctx) {
211
+ fallbackCtrl = createTauriWindow();
212
+ }
213
+
214
+ const activePlatform = createMemo<"macos" | "windows">(() => {
215
+ if (local.platform) return local.platform;
216
+ if (ctx?.platform) return ctx.platform();
217
+ const detected = detectPlatform();
218
+ return detected === "macos" ? "macos" : "windows";
219
+ });
220
+
221
+ const isMaximized = () => {
222
+ if (local.isMaximized !== undefined) return local.isMaximized;
223
+ if (ctx?.isMaximized) return ctx.isMaximized();
224
+ return fallbackCtrl ? fallbackCtrl.isMaximized() : false;
225
+ };
226
+
227
+ const handleMinimize = (e: MouseEvent) => {
228
+ e.stopPropagation();
229
+ if (local.onMinimize) return local.onMinimize();
230
+ if (ctx?.minimize) return ctx.minimize();
231
+ return fallbackCtrl?.minimize();
232
+ };
233
+
234
+ const handleToggleMaximize = (e: MouseEvent) => {
235
+ e.stopPropagation();
236
+ if (local.onToggleMaximize) return local.onToggleMaximize();
237
+ if (ctx?.toggleMaximize) return ctx.toggleMaximize();
238
+ return fallbackCtrl?.toggleMaximize();
239
+ };
240
+
241
+ const handleClose = (e: MouseEvent) => {
242
+ e.stopPropagation();
243
+ if (local.onClose) return local.onClose();
244
+ if (ctx?.close) return ctx.close();
245
+ return fallbackCtrl?.close();
246
+ };
247
+
248
+ return (
249
+ <div
250
+ data-no-drag
251
+ data-tauri-drag-region="false"
252
+ style={("-webkit-app-region: no-drag; app-region: no-drag;" + (typeof local.style === "string" ? ` ${local.style}` : "")) as any}
253
+ class={cn(
254
+ "flex items-center z-10 self-stretch shrink-0 pointer-events-auto [app-region:no-drag] [-webkit-app-region:no-drag]",
255
+ activePlatform() === "macos"
256
+ ? "gap-2 px-1 order-first"
257
+ : "gap-0 -mr-3 h-full order-last ml-auto",
258
+ local.class
259
+ )}
260
+ {...rest}
261
+ >
262
+ <Show
263
+ when={activePlatform() === "macos"}
264
+ fallback={
265
+ /* Windows 11 Fluent Window Controls */
266
+ <div class="flex items-center h-full self-stretch">
267
+ {/* Minimize */}
268
+ <button
269
+ type="button"
270
+ onClick={handleMinimize}
271
+ class="inline-flex h-full w-11 items-center justify-center text-muted-foreground hover:bg-muted hover:text-foreground transition-colors cursor-pointer"
272
+ aria-label="Minimize Window"
273
+ >
274
+ <svg class="h-3 w-3" fill="none" viewBox="0 0 12 12">
275
+ <path stroke="currentColor" stroke-width="1" d="M1.5 6h9" />
276
+ </svg>
277
+ </button>
278
+
279
+ {/* Maximize / Restore */}
280
+ <button
281
+ type="button"
282
+ onClick={handleToggleMaximize}
283
+ class="inline-flex h-full w-11 items-center justify-center text-muted-foreground hover:bg-muted hover:text-foreground transition-colors cursor-pointer"
284
+ aria-label={isMaximized() ? "Restore Window" : "Maximize Window"}
285
+ >
286
+ <Show
287
+ when={isMaximized()}
288
+ fallback={
289
+ <svg class="h-3 w-3" fill="none" viewBox="0 0 12 12">
290
+ <rect width="8" height="8" x="2" y="2" stroke="currentColor" stroke-width="1" rx="0.5" />
291
+ </svg>
292
+ }
293
+ >
294
+ <svg class="h-3 w-3" fill="none" viewBox="0 0 12 12">
295
+ <path stroke="currentColor" stroke-width="1" d="M3.5 3.5v-1.5h6v6h-1.5M2 4.5h6v6h-6z" />
296
+ </svg>
297
+ </Show>
298
+ </button>
299
+
300
+ {/* Close */}
301
+ <button
302
+ type="button"
303
+ onClick={handleClose}
304
+ class="inline-flex h-full w-11 items-center justify-center text-muted-foreground hover:bg-destructive hover:text-destructive-foreground transition-colors cursor-pointer"
305
+ aria-label="Close Window"
306
+ >
307
+ <svg class="h-3 w-3" fill="none" viewBox="0 0 12 12">
308
+ <path stroke="currentColor" stroke-width="1" d="M2.5 2.5l7 7M9.5 2.5l-7 7" />
309
+ </svg>
310
+ </button>
311
+ </div>
312
+ }
313
+ >
314
+ {/* macOS Traffic Lights */}
315
+ <div class="group/traffic flex items-center gap-2">
316
+ {/* Close */}
317
+ <button
318
+ type="button"
319
+ onClick={handleClose}
320
+ class="flex size-3 items-center justify-center rouded-lg bg-[#ff5f57] border border-[#e0443e] cursor-pointer"
321
+ aria-label="Close Window"
322
+ >
323
+ <svg
324
+ class="size-1.5 text-[#4c0000] opacity-0 group-hover/traffic:opacity-100 transition-opacity"
325
+ viewBox="0 0 6 6"
326
+ fill="none"
327
+ stroke="currentColor"
328
+ stroke-width="1.2"
329
+ >
330
+ <path d="M1 1l4 4M5 1L1 5" />
331
+ </svg>
332
+ </button>
333
+
334
+ {/* Minimize */}
335
+ <button
336
+ type="button"
337
+ onClick={handleMinimize}
338
+ class="flex size-3 items-center justify-center rouded-lg bg-[#febc2e] border border-[#d89e24] cursor-pointer"
339
+ aria-label="Minimize Window"
340
+ >
341
+ <svg
342
+ class="size-1.5 text-[#5c3e00] opacity-0 group-hover/traffic:opacity-100 transition-opacity"
343
+ viewBox="0 0 6 6"
344
+ fill="none"
345
+ stroke="currentColor"
346
+ stroke-width="1.2"
347
+ >
348
+ <path d="M1 3h4" />
349
+ </svg>
350
+ </button>
351
+
352
+ {/* Maximize */}
353
+ <button
354
+ type="button"
355
+ onClick={handleToggleMaximize}
356
+ class="flex size-3 items-center justify-center rouded-lg bg-[#28c840] border border-[#1aab29] cursor-pointer"
357
+ aria-label="Maximize Window"
358
+ >
359
+ <svg
360
+ class="size-1.5 text-[#003d07] opacity-0 group-hover/traffic:opacity-100 transition-opacity"
361
+ viewBox="0 0 6 6"
362
+ fill="none"
363
+ stroke="currentColor"
364
+ stroke-width="1.2"
365
+ >
366
+ <path d="M1 4.5l3.5-3.5M4.5 1h-3M4.5 1v3" />
367
+ </svg>
368
+ </button>
369
+ </div>
370
+ </Show>
371
+ </div>
372
+ );
373
+ };
374
+
375
+ /**
376
+ * Title text container. Placed naturally in JSX flow by default, or centered with align="center".
377
+ */
378
+ export interface TitlebarTitleProps extends JSX.HTMLAttributes<HTMLDivElement> {
379
+ align?: "center" | "start";
380
+ }
381
+
382
+ export const TitlebarTitle: ParentComponent<TitlebarTitleProps> = (props) => {
383
+ const [local, rest] = splitProps(props, ["align", "class", "children"]);
384
+
385
+ const isCentered = () => local.align === "center";
386
+
387
+ return (
388
+ <div
389
+ class={cn(
390
+ "flex items-center gap-2 font-medium truncate text-xs text-foreground",
391
+ isCentered()
392
+ ? "absolute left-1/2 -translate-x-1/2 pointer-events-none text-center justify-center max-w-[calc(100%-160px)]"
393
+ : "shrink-0",
394
+ local.class
395
+ )}
396
+ {...rest}
397
+ >
398
+ {local.children}
399
+ </div>
400
+ );
401
+ };
402
+
403
+ /**
404
+ * App icon slot within Titlebar.
405
+ */
406
+ export const TitlebarIcon: ParentComponent<JSX.HTMLAttributes<HTMLDivElement>> = (props) => {
407
+ const [local, rest] = splitProps(props, ["class", "children"]);
408
+ return (
409
+ <div
410
+ data-no-drag
411
+ data-tauri-drag-region="false"
412
+ class={cn(
413
+ "flex shrink-0 items-center justify-center size-4 text-muted-foreground pointer-events-auto [app-region:no-drag] [-webkit-app-region:no-drag]",
414
+ local.class
415
+ )}
416
+ {...rest}
417
+ >
418
+ {local.children}
419
+ </div>
420
+ );
421
+ };
422
+
423
+ /**
424
+ * Action buttons container (Search, Settings, ThemeToggle, Navigation) placed in the titlebar.
425
+ * Supports start, end, center, or natural flow alignment.
426
+ */
427
+ export interface TitlebarActionsProps extends JSX.HTMLAttributes<HTMLDivElement> {
428
+ /** Alignment of the actions container within the titlebar. Defaults to 'end'. */
429
+ align?: "start" | "end" | "center" | "none";
430
+ }
431
+
432
+ export const TitlebarActions: ParentComponent<TitlebarActionsProps> = (props) => {
433
+ const [local, rest] = splitProps(props, ["align", "class", "children", "style"]);
434
+
435
+ const alignClass = () => {
436
+ switch (local.align) {
437
+ case "start":
438
+ return "mr-auto";
439
+ case "center":
440
+ return "mx-auto";
441
+ case "none":
442
+ return "";
443
+ case "end":
444
+ default:
445
+ return "ml-auto";
446
+ }
447
+ };
448
+
449
+ return (
450
+ <div
451
+ data-no-drag
452
+ data-tauri-drag-region="false"
453
+ style={("-webkit-app-region: no-drag; app-region: no-drag;" + (typeof local.style === "string" ? ` ${local.style}` : "")) as any}
454
+ class={cn(
455
+ "flex items-center gap-1 shrink-0 z-10 px-1 pointer-events-auto [app-region:no-drag] [-webkit-app-region:no-drag]",
456
+ alignClass(),
457
+ local.class
458
+ )}
459
+ {...rest}
460
+ >
461
+ {local.children}
462
+ </div>
463
+ );
464
+ };
465
+
466
+ /* --- 6. Re-export TitlebarTabs Suite --- */
467
+ export * from "./titlebar-tabs";
468
+
@@ -0,0 +1,124 @@
1
+ import { splitProps, type Component, type JSX, type ComponentProps } from "solid-js";
2
+ import { Toast as KobalteToast, toaster } from "@kobalte/core/toast";
3
+ import { cva, type VariantProps } from "class-variance-authority";
4
+ import { X, CircleCheck, Info, CircleAlert, TriangleAlert } from "lucide-solid";
5
+ import { cn } from "@/lib/cn";
6
+
7
+ export const toastVariants = cva(
8
+ "group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-lg border p-4 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--kb-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--kb-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[opened]:animate-in data-[closed]:animate-out data-[swipe=end]:animate-out data-[closed]:fade-out-80 data-[closed]:slide-out-to-right-full data-[opened]:slide-in-from-top-full data-[opened]:sm:slide-in-from-bottom-full",
9
+ {
10
+ variants: {
11
+ variant: {
12
+ default: "border-border bg-background text-foreground",
13
+ success: "border-emerald-500/20 bg-emerald-500/10 text-emerald-900 dark:text-emerald-200 border-emerald-500/30",
14
+ destructive: "border-destructive/30 bg-destructive/10 text-destructive dark:text-red-300",
15
+ warning: "border-amber-500/20 bg-amber-500/10 text-amber-900 dark:text-amber-200 border-amber-500/30",
16
+ info: "border-sky-500/20 bg-sky-500/10 text-sky-900 dark:text-sky-200 border-sky-500/30",
17
+ },
18
+ },
19
+ defaultVariants: {
20
+ variant: "default",
21
+ },
22
+ }
23
+ );
24
+
25
+ export interface ToastProps
26
+ extends ComponentProps<typeof KobalteToast>,
27
+ VariantProps<typeof toastVariants> {
28
+ class?: string;
29
+ }
30
+
31
+ export const Toast: Component<ToastProps> = (props) => {
32
+ const [local, rest] = splitProps(props, ["class", "variant"]);
33
+
34
+ return (
35
+ <KobalteToast
36
+ class={cn(toastVariants({ variant: local.variant }), local.class)}
37
+ {...rest}
38
+ />
39
+ );
40
+ };
41
+
42
+ export const ToastTitle: Component<ComponentProps<typeof KobalteToast.Title>> = (props) => {
43
+ const [local, rest] = splitProps(props, ["class"]);
44
+
45
+ return (
46
+ <KobalteToast.Title
47
+ class={cn("text-sm font-semibold [&+div]:text-xs", local.class)}
48
+ {...rest}
49
+ />
50
+ );
51
+ };
52
+
53
+ export const ToastDescription: Component<ComponentProps<typeof KobalteToast.Description>> = (props) => {
54
+ const [local, rest] = splitProps(props, ["class"]);
55
+
56
+ return (
57
+ <KobalteToast.Description
58
+ class={cn("text-sm opacity-90", local.class)}
59
+ {...rest}
60
+ />
61
+ );
62
+ };
63
+
64
+ export const ToastCloseButton: Component<ComponentProps<typeof KobalteToast.CloseButton>> = (props) => {
65
+ const [local, rest] = splitProps(props, ["class", "children"]);
66
+
67
+ return (
68
+ <KobalteToast.CloseButton
69
+ class={cn(
70
+ "absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-1 group-hover:opacity-100",
71
+ local.class
72
+ )}
73
+ {...rest}
74
+ >
75
+ {local.children || <X class="h-4 w-4" />}
76
+ </KobalteToast.CloseButton>
77
+ );
78
+ };
79
+
80
+ export const ToastRegion: Component<ComponentProps<typeof KobalteToast.Region>> = (props) => {
81
+ const [local, rest] = splitProps(props, ["class"]);
82
+
83
+ return (
84
+ <KobalteToast.Region
85
+ class={cn(
86
+ "fixed top-0 z-100 flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-105",
87
+ local.class
88
+ )}
89
+ {...rest}
90
+ />
91
+ );
92
+ };
93
+
94
+ export const ToastList: Component<ComponentProps<typeof KobalteToast.List>> = (props) => {
95
+ const [local, rest] = splitProps(props, ["class"]);
96
+
97
+ return <KobalteToast.List class={cn("flex flex-col gap-2", local.class)} {...rest} />;
98
+ };
99
+
100
+ /* --- Helper Function to Trigger Toast Notifications --- */
101
+ export interface ShowToastOptions {
102
+ title: string;
103
+ description?: string;
104
+ variant?: "default" | "success" | "destructive" | "warning" | "info";
105
+ duration?: number;
106
+ }
107
+
108
+ export const showToast = (options: ShowToastOptions) => {
109
+ return toaster.show((props) => (
110
+ <Toast toastId={props.toastId} variant={options.variant || "default"}>
111
+ <div class="flex items-start gap-3">
112
+ {options.variant === "success" && <CircleCheck class="h-5 w-5 text-emerald-500 shrink-0 mt-0.5" />}
113
+ {options.variant === "destructive" && <CircleAlert class="h-5 w-5 text-red-500 shrink-0 mt-0.5" />}
114
+ {options.variant === "warning" && <TriangleAlert class="h-5 w-5 text-amber-500 shrink-0 mt-0.5" />}
115
+ {options.variant === "info" && <Info class="h-5 w-5 text-sky-500 shrink-0 mt-0.5" />}
116
+ <div class="grid gap-1">
117
+ <ToastTitle>{options.title}</ToastTitle>
118
+ {options.description && <ToastDescription>{options.description}</ToastDescription>}
119
+ </div>
120
+ </div>
121
+ <ToastCloseButton />
122
+ </Toast>
123
+ ));
124
+ };