@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,628 @@
1
+ import { createSignal, onMount, onCleanup, type Accessor } from "solid-js";
2
+
3
+ export type TauriPlatform = "macos" | "windows" | "linux" | "web";
4
+
5
+ export interface CreateTauriWindowOptions {
6
+ /** Initial fallback platform if not detected automatically. */
7
+ defaultPlatform?: TauriPlatform;
8
+ /** Listen to window resize and focus events. Defaults to true. */
9
+ listenEvents?: boolean;
10
+ }
11
+
12
+ export interface CreateTauriWindowReturn {
13
+ /** Signal indicating whether the application is running inside a Tauri runtime. */
14
+ isTauri: Accessor<boolean>;
15
+ /** Detected host platform ('macos' | 'windows' | 'linux' | 'web'). */
16
+ platform: Accessor<TauriPlatform>;
17
+ /** Signal indicating whether the window is currently maximized. */
18
+ isMaximized: Accessor<boolean>;
19
+ /** Signal indicating whether the window is currently minimized. */
20
+ isMinimized: Accessor<boolean>;
21
+ /** Signal indicating whether the window is currently in fullscreen mode. */
22
+ isFullscreen: Accessor<boolean>;
23
+ /** Signal indicating whether the window is currently focused. */
24
+ isFocused: Accessor<boolean>;
25
+ /** Minimize the application window. */
26
+ minimize: () => Promise<void>;
27
+ /** Maximize the application window. */
28
+ maximize: () => Promise<void>;
29
+ /** Unmaximize the application window. */
30
+ unmaximize: () => Promise<void>;
31
+ /** Toggle between maximized and normal window states. */
32
+ toggleMaximize: () => Promise<void>;
33
+ /** Close the application window or exit process if main window. */
34
+ close: () => Promise<void>;
35
+ /** Forcefully destroy/close the application window. */
36
+ destroy: () => Promise<void>;
37
+ /** Toggle fullscreen state. */
38
+ setFullscreen: (fullscreen: boolean) => Promise<void>;
39
+ /** Start dragging the window. Can be bound to mousedown event or custom titlebar headers. */
40
+ startDragging: (e?: MouseEvent) => Promise<void>;
41
+ }
42
+
43
+ /**
44
+ * Helper to detect current operating system in browser or desktop environments.
45
+ */
46
+ export function detectPlatform(): TauriPlatform {
47
+ if (typeof window === "undefined" || typeof navigator === "undefined") {
48
+ return "web";
49
+ }
50
+
51
+ const userAgent = navigator.userAgent.toLowerCase();
52
+ const platform =
53
+ (navigator as any).userAgentData?.platform?.toLowerCase() ||
54
+ navigator.platform?.toLowerCase() ||
55
+ "";
56
+
57
+ if (platform.includes("mac") || userAgent.includes("macintosh") || userAgent.includes("mac os x")) {
58
+ return "macos";
59
+ }
60
+ if (platform.includes("win") || userAgent.includes("windows")) {
61
+ return "windows";
62
+ }
63
+ if (platform.includes("linux") || userAgent.includes("linux")) {
64
+ return "linux";
65
+ }
66
+
67
+ return "web";
68
+ }
69
+
70
+ /**
71
+ * Checks whether the current environment is running inside Tauri v1 or v2.
72
+ */
73
+ export function isTauriEnvironment(): boolean {
74
+ if (typeof window === "undefined") return false;
75
+ const win = window as any;
76
+ return Boolean(
77
+ win.__TAURI_INTERNALS__ ||
78
+ win.__TAURI__ ||
79
+ win.__TAURI_PATTERN__ ||
80
+ win.__TAURI_METADATA__ ||
81
+ win.__TAURI_IPC__ ||
82
+ win.__TAURI_WINDOW__
83
+ );
84
+ }
85
+
86
+ /**
87
+ * Checks whether the current environment is running inside Electron.
88
+ */
89
+ export function isElectronEnvironment(): boolean {
90
+ if (typeof window === "undefined") return false;
91
+ const win = window as any;
92
+ return Boolean(
93
+ win.electron ||
94
+ win.electronAPI ||
95
+ win.ipcRenderer ||
96
+ win.process?.versions?.electron ||
97
+ (typeof navigator !== "undefined" && navigator.userAgent?.toLowerCase().includes("electron"))
98
+ );
99
+ }
100
+
101
+ /**
102
+ * Direct low-level IPC invocation across Tauri v2 (__TAURI_INTERNALS__) and Tauri v1.
103
+ */
104
+ async function invokeTauri(
105
+ v2Cmd: string,
106
+ v2Args?: Record<string, any>,
107
+ v1CmdType?: string,
108
+ v1Data?: any
109
+ ): Promise<any> {
110
+ if (typeof window === "undefined") return undefined;
111
+ const win = window as any;
112
+
113
+ // 1. Try Tauri v2 direct IPC via injected __TAURI_INTERNALS__ or core.invoke
114
+ const invokeV2 = win.__TAURI_INTERNALS__?.invoke || win.__TAURI__?.core?.invoke;
115
+ if (typeof invokeV2 === "function") {
116
+ try {
117
+ return await invokeV2(`plugin:window|${v2Cmd}`, v2Args || {});
118
+ } catch {
119
+ // Fallback to secondary invoke mechanisms
120
+ }
121
+ }
122
+
123
+ // 2. Try Tauri v1 / generic invoke
124
+ const invokeV1 = win.__TAURI__?.invoke || win.__TAURI_INVOKE__;
125
+ if (typeof invokeV1 === "function") {
126
+ try {
127
+ if (v1CmdType) {
128
+ return await invokeV1("tauri", {
129
+ __tauriModule: "Window",
130
+ message: {
131
+ cmd: "manage",
132
+ data: {
133
+ cmd: {
134
+ type: v1CmdType,
135
+ ...(v1Data !== undefined ? { data: v1Data } : {}),
136
+ },
137
+ },
138
+ },
139
+ });
140
+ }
141
+ return await invokeV1(v2Cmd, v2Args);
142
+ } catch {
143
+ // Fallback
144
+ }
145
+ }
146
+
147
+ return undefined;
148
+ }
149
+
150
+ /**
151
+ * Helper to send Electron IPC messages if running in an Electron shell.
152
+ */
153
+ function sendElectronMessage(channel: string, ...args: any[]): boolean {
154
+ if (typeof window === "undefined") return false;
155
+ const win = window as any;
156
+
157
+ try {
158
+ if (win.electronAPI && typeof win.electronAPI[channel] === "function") {
159
+ win.electronAPI[channel](...args);
160
+ return true;
161
+ }
162
+ if (win.electron?.ipcRenderer?.send) {
163
+ win.electron.ipcRenderer.send(channel, ...args);
164
+ return true;
165
+ }
166
+ if (win.ipcRenderer?.send) {
167
+ win.ipcRenderer.send(channel, ...args);
168
+ return true;
169
+ }
170
+ if (typeof win.require === "function") {
171
+ const electron = win.require("electron");
172
+ if (electron?.ipcRenderer?.send) {
173
+ electron.ipcRenderer.send(channel, ...args);
174
+ return true;
175
+ }
176
+ }
177
+ } catch {
178
+ // Ignored
179
+ }
180
+ return false;
181
+ }
182
+
183
+ /**
184
+ * SolidJS reactive primitive for controlling and observing desktop window states.
185
+ * Supports Tauri v2, Tauri v1, Electron, and browser preview environments.
186
+ */
187
+ export function createTauriWindow(
188
+ options: CreateTauriWindowOptions = {}
189
+ ): CreateTauriWindowReturn {
190
+ const [isTauri, setIsTauri] = createSignal<boolean>(false);
191
+ const [platform, setPlatform] = createSignal<TauriPlatform>(options.defaultPlatform || "web");
192
+ const [isMaximized, setIsMaximized] = createSignal<boolean>(false);
193
+ const [isMinimized, setIsMinimized] = createSignal<boolean>(false);
194
+ const [isFullscreen, setIsFullscreen] = createSignal<boolean>(false);
195
+ const [isFocused, setIsFocused] = createSignal<boolean>(true);
196
+
197
+ let unlistenResize: (() => void) | null = null;
198
+ let unlistenFocus: (() => void) | null = null;
199
+
200
+ // Retrieve Tauri Window instance safely
201
+ const getTauriWindow = async () => {
202
+ if (typeof window === "undefined") return null;
203
+ const win = window as any;
204
+ try {
205
+ if (win.__TAURI__?.window?.getCurrentWindow) {
206
+ return win.__TAURI__.window.getCurrentWindow();
207
+ }
208
+ if (win.__TAURI__?.window?.appWindow) {
209
+ return win.__TAURI__.window.appWindow;
210
+ }
211
+ if (win.__TAURI_WINDOW__?.getCurrentWindow) {
212
+ return win.__TAURI_WINDOW__.getCurrentWindow();
213
+ }
214
+ if (win.__TAURI_WINDOW__?.appWindow) {
215
+ return win.__TAURI_WINDOW__.appWindow;
216
+ }
217
+ // Dynamic import if bundled by user's build setup
218
+ const moduleName = "@tauri-apps/api/window";
219
+ // @ts-ignore - Optional runtime dependency in Tauri apps
220
+ const tauriApi = await import(/* @vite-ignore */ moduleName).catch(() => null);
221
+ if (tauriApi?.getCurrentWindow) {
222
+ return tauriApi.getCurrentWindow();
223
+ }
224
+ if (tauriApi?.appWindow) {
225
+ return tauriApi.appWindow;
226
+ }
227
+ } catch {
228
+ // Running in standard web mode
229
+ }
230
+ return null;
231
+ };
232
+
233
+ const updateWindowStates = async () => {
234
+ if (typeof window === "undefined") return;
235
+
236
+ const tauriWin = await getTauriWindow();
237
+ if (tauriWin) {
238
+ setIsTauri(true);
239
+ try {
240
+ const [max, min, full, foc] = await Promise.all([
241
+ typeof tauriWin.isMaximized === "function" ? tauriWin.isMaximized() : false,
242
+ typeof tauriWin.isMinimized === "function" ? tauriWin.isMinimized() : false,
243
+ typeof tauriWin.isFullscreen === "function" ? tauriWin.isFullscreen() : false,
244
+ typeof tauriWin.isFocused === "function" ? tauriWin.isFocused() : true,
245
+ ]);
246
+ setIsMaximized(Boolean(max));
247
+ setIsMinimized(Boolean(min));
248
+ setIsFullscreen(Boolean(full));
249
+ setIsFocused(Boolean(foc));
250
+ return;
251
+ } catch {
252
+ // Fallback gracefully
253
+ }
254
+ }
255
+
256
+ if (isTauriEnvironment()) {
257
+ setIsTauri(true);
258
+ try {
259
+ const max = await invokeTauri("is_maximized", {}, "isMaximized");
260
+ if (typeof max === "boolean") setIsMaximized(max);
261
+ const min = await invokeTauri("is_minimized", {}, "isMinimized");
262
+ if (typeof min === "boolean") setIsMinimized(min);
263
+ const full = await invokeTauri("is_fullscreen", {}, "isFullscreen");
264
+ if (typeof full === "boolean") setIsFullscreen(full);
265
+ const foc = await invokeTauri("is_focused", {}, "isFocused");
266
+ if (typeof foc === "boolean") setIsFocused(foc);
267
+ return;
268
+ } catch {
269
+ // Fallback
270
+ }
271
+ }
272
+
273
+ if (!isElectronEnvironment()) {
274
+ setIsTauri(false);
275
+ }
276
+ if (typeof document !== "undefined") {
277
+ setIsFullscreen(Boolean(document.fullscreenElement));
278
+ }
279
+ };
280
+
281
+ onMount(async () => {
282
+ if (typeof window === "undefined") return;
283
+
284
+ setPlatform(detectPlatform());
285
+ setIsTauri(isTauriEnvironment());
286
+ await updateWindowStates();
287
+
288
+ if (options.listenEvents !== false) {
289
+ const handleWindowFocus = () => setIsFocused(true);
290
+ const handleWindowBlur = () => setIsFocused(false);
291
+ const handleFullscreenChange = () => setIsFullscreen(Boolean(document.fullscreenElement));
292
+ const handleResize = () => {
293
+ updateWindowStates();
294
+ };
295
+
296
+ window.addEventListener("focus", handleWindowFocus);
297
+ window.addEventListener("blur", handleWindowBlur);
298
+ window.addEventListener("resize", handleResize);
299
+ document.addEventListener("fullscreenchange", handleFullscreenChange);
300
+
301
+ const tauriWin = await getTauriWindow();
302
+ if (tauriWin?.onResized) {
303
+ try {
304
+ unlistenResize = await tauriWin.onResized(() => updateWindowStates());
305
+ unlistenFocus = await tauriWin.onFocusChanged(({ payload }: { payload: boolean }) => {
306
+ setIsFocused(payload);
307
+ });
308
+ } catch {
309
+ // Ignored in non-tauri contexts
310
+ }
311
+ }
312
+
313
+ onCleanup(() => {
314
+ window.removeEventListener("focus", handleWindowFocus);
315
+ window.removeEventListener("blur", handleWindowBlur);
316
+ window.removeEventListener("resize", handleResize);
317
+ document.removeEventListener("fullscreenchange", handleFullscreenChange);
318
+ if (unlistenResize) unlistenResize();
319
+ if (unlistenFocus) unlistenFocus();
320
+ });
321
+ }
322
+ });
323
+
324
+ const minimize = async (): Promise<void> => {
325
+ let executed = false;
326
+ const tauriWin = await getTauriWindow();
327
+ if (tauriWin?.minimize) {
328
+ try {
329
+ await tauriWin.minimize();
330
+ executed = true;
331
+ } catch {}
332
+ }
333
+ if (!executed && isTauriEnvironment()) {
334
+ try {
335
+ await invokeTauri("minimize", {}, "minimize");
336
+ executed = true;
337
+ } catch {}
338
+ }
339
+ if (!executed && isElectronEnvironment()) {
340
+ executed =
341
+ sendElectronMessage("window-minimize") ||
342
+ sendElectronMessage("minimize") ||
343
+ sendElectronMessage("windowMinimize");
344
+ }
345
+
346
+ setIsMinimized(true);
347
+ setIsMaximized(false);
348
+ };
349
+
350
+ const maximize = async (): Promise<void> => {
351
+ let executed = false;
352
+ const tauriWin = await getTauriWindow();
353
+ if (tauriWin?.maximize) {
354
+ try {
355
+ await tauriWin.maximize();
356
+ executed = true;
357
+ } catch {}
358
+ }
359
+ if (!executed && isTauriEnvironment()) {
360
+ try {
361
+ await invokeTauri("maximize", {}, "maximize");
362
+ executed = true;
363
+ } catch {}
364
+ }
365
+ if (!executed && isElectronEnvironment()) {
366
+ executed =
367
+ sendElectronMessage("window-maximize") ||
368
+ sendElectronMessage("maximize") ||
369
+ sendElectronMessage("windowMaximize");
370
+ }
371
+
372
+ setIsMaximized(true);
373
+ setIsMinimized(false);
374
+ };
375
+
376
+ const unmaximize = async (): Promise<void> => {
377
+ let executed = false;
378
+ const tauriWin = await getTauriWindow();
379
+ if (tauriWin?.unmaximize) {
380
+ try {
381
+ await tauriWin.unmaximize();
382
+ executed = true;
383
+ } catch {}
384
+ }
385
+ if (!executed && isTauriEnvironment()) {
386
+ try {
387
+ await invokeTauri("unmaximize", {}, "unmaximize");
388
+ executed = true;
389
+ } catch {}
390
+ }
391
+ if (!executed && isElectronEnvironment()) {
392
+ executed =
393
+ sendElectronMessage("window-unmaximize") ||
394
+ sendElectronMessage("unmaximize") ||
395
+ sendElectronMessage("windowRestore") ||
396
+ sendElectronMessage("restore");
397
+ }
398
+
399
+ setIsMaximized(false);
400
+ };
401
+
402
+ let lastToggleTime = 0;
403
+ const toggleMaximize = async (): Promise<void> => {
404
+ const now = Date.now();
405
+ if (now - lastToggleTime < 350) {
406
+ return; // Ignore duplicate rapid triggers within 350ms window
407
+ }
408
+ lastToggleTime = now;
409
+
410
+ let executed = false;
411
+ const tauriWin = await getTauriWindow();
412
+ if (tauriWin) {
413
+ try {
414
+ if (typeof tauriWin.isMaximized === "function") {
415
+ const isMax = await tauriWin.isMaximized();
416
+ if (isMax && typeof tauriWin.unmaximize === "function") {
417
+ await tauriWin.unmaximize();
418
+ setIsMaximized(false);
419
+ executed = true;
420
+ } else if (!isMax && typeof tauriWin.maximize === "function") {
421
+ await tauriWin.maximize();
422
+ setIsMaximized(true);
423
+ executed = true;
424
+ }
425
+ }
426
+ if (!executed && typeof tauriWin.toggleMaximize === "function") {
427
+ await tauriWin.toggleMaximize();
428
+ executed = true;
429
+ }
430
+ } catch {}
431
+ }
432
+
433
+ if (!executed && isTauriEnvironment()) {
434
+ try {
435
+ const isMax = await invokeTauri("is_maximized", {}, "isMaximized");
436
+ if (typeof isMax === "boolean") {
437
+ if (isMax) {
438
+ await invokeTauri("unmaximize", {}, "unmaximize");
439
+ setIsMaximized(false);
440
+ } else {
441
+ await invokeTauri("maximize", {}, "maximize");
442
+ setIsMaximized(true);
443
+ }
444
+ executed = true;
445
+ } else {
446
+ await invokeTauri("toggle_maximize", {}, "toggleMaximize");
447
+ executed = true;
448
+ }
449
+ } catch {}
450
+ }
451
+
452
+ if (!executed && isElectronEnvironment()) {
453
+ executed =
454
+ sendElectronMessage("window-toggle-maximize") ||
455
+ sendElectronMessage("toggle-maximize") ||
456
+ sendElectronMessage("toggleMaximize");
457
+ }
458
+
459
+ if (!executed) {
460
+ setIsMaximized((prev) => !prev);
461
+ }
462
+ setIsMinimized(false);
463
+ };
464
+
465
+ const close = async (): Promise<void> => {
466
+ let closed = false;
467
+ const win = typeof window !== "undefined" ? (window as any) : null;
468
+ const tauriWin = await getTauriWindow();
469
+
470
+ // 1. Try Tauri Window API close
471
+ if (tauriWin?.close) {
472
+ try {
473
+ await tauriWin.close();
474
+ closed = true;
475
+ } catch {}
476
+ }
477
+
478
+ // 2. Try Tauri IPC window close
479
+ if (!closed && isTauriEnvironment()) {
480
+ try {
481
+ await invokeTauri("close", {}, "close");
482
+ closed = true;
483
+ } catch {}
484
+ }
485
+
486
+ // 3. Try Tauri destroy fallback if close did not succeed
487
+ if (!closed && tauriWin?.destroy) {
488
+ try {
489
+ await tauriWin.destroy();
490
+ closed = true;
491
+ } catch {}
492
+ }
493
+ if (!closed && isTauriEnvironment()) {
494
+ try {
495
+ await invokeTauri("destroy", {}, "destroy");
496
+ closed = true;
497
+ } catch {}
498
+ }
499
+
500
+ // 4. Try Tauri process exit if in Tauri environment
501
+ if (!closed && isTauriEnvironment()) {
502
+ try {
503
+ const invokeProcess = win?.__TAURI_INTERNALS__?.invoke || win?.__TAURI__?.core?.invoke;
504
+ if (typeof invokeProcess === "function") {
505
+ await invokeProcess("plugin:process|exit", { code: 0 });
506
+ closed = true;
507
+ } else if (win?.__TAURI__?.process?.exit) {
508
+ await win.__TAURI__.process.exit(0);
509
+ closed = true;
510
+ }
511
+ } catch {}
512
+ }
513
+
514
+ // 5. Try Electron window close / app quit
515
+ if (!closed && isElectronEnvironment()) {
516
+ closed =
517
+ sendElectronMessage("window-close") ||
518
+ sendElectronMessage("close") ||
519
+ sendElectronMessage("app-close") ||
520
+ sendElectronMessage("quit");
521
+ }
522
+
523
+ // 6. Browser fallback & custom event dispatch
524
+ if (typeof window !== "undefined") {
525
+ try {
526
+ window.dispatchEvent(new CustomEvent("nikala:window-close"));
527
+ } catch {}
528
+
529
+ try {
530
+ window.close();
531
+ } catch {}
532
+ }
533
+ };
534
+
535
+ const destroy = async (): Promise<void> => {
536
+ const tauriWin = await getTauriWindow();
537
+ if (tauriWin?.destroy) {
538
+ try {
539
+ await tauriWin.destroy();
540
+ return;
541
+ } catch {}
542
+ }
543
+ if (isTauriEnvironment()) {
544
+ try {
545
+ await invokeTauri("destroy", {}, "destroy");
546
+ return;
547
+ } catch {}
548
+ }
549
+ await close();
550
+ };
551
+
552
+ const setFullscreen = async (fullscreen: boolean): Promise<void> => {
553
+ let executed = false;
554
+ const tauriWin = await getTauriWindow();
555
+ if (tauriWin?.setFullscreen) {
556
+ try {
557
+ await tauriWin.setFullscreen(fullscreen);
558
+ executed = true;
559
+ } catch {}
560
+ }
561
+ if (!executed && isTauriEnvironment()) {
562
+ try {
563
+ await invokeTauri("set_fullscreen", { value: fullscreen }, "setFullscreen", fullscreen);
564
+ executed = true;
565
+ } catch {}
566
+ }
567
+ if (!executed && isElectronEnvironment()) {
568
+ executed =
569
+ sendElectronMessage("window-set-fullscreen", fullscreen) ||
570
+ sendElectronMessage("set-fullscreen", fullscreen);
571
+ }
572
+
573
+ if (typeof document !== "undefined") {
574
+ if (fullscreen && document.documentElement.requestFullscreen) {
575
+ try {
576
+ await document.documentElement.requestFullscreen();
577
+ } catch {}
578
+ } else if (!fullscreen && document.fullscreenElement && document.exitFullscreen) {
579
+ try {
580
+ await document.exitFullscreen();
581
+ } catch {}
582
+ }
583
+ }
584
+
585
+ setIsFullscreen(fullscreen);
586
+ };
587
+
588
+ const startDragging = async (e?: MouseEvent): Promise<void> => {
589
+ if (e) {
590
+ if (e.button !== 0) return; // Only primary mouse button starts drag
591
+ if (e.detail > 1) return; // Prevent drag initialization on double-click gesture
592
+ }
593
+ let dragged = false;
594
+ const tauriWin = await getTauriWindow();
595
+ if (tauriWin?.startDragging) {
596
+ try {
597
+ await tauriWin.startDragging();
598
+ dragged = true;
599
+ } catch {}
600
+ }
601
+ if (!dragged && isTauriEnvironment()) {
602
+ try {
603
+ await invokeTauri("start_dragging", {}, "startDragging");
604
+ dragged = true;
605
+ } catch {}
606
+ }
607
+ if (!dragged && isElectronEnvironment()) {
608
+ sendElectronMessage("window-drag");
609
+ }
610
+ };
611
+
612
+ return {
613
+ isTauri,
614
+ platform,
615
+ isMaximized,
616
+ isMinimized,
617
+ isFullscreen,
618
+ isFocused,
619
+ minimize,
620
+ maximize,
621
+ unmaximize,
622
+ toggleMaximize,
623
+ close,
624
+ destroy,
625
+ setFullscreen,
626
+ startDragging,
627
+ };
628
+ }