@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,141 @@
1
+ import { createSignal, Show, type Component } from "solid-js";
2
+ import { createForm } from "@nikala-ui/hooks";
3
+ import {
4
+ Card,
5
+ CardHeader,
6
+ CardTitle,
7
+ CardDescription,
8
+ CardContent,
9
+ CardFooter,
10
+ } from "../components/ui/card";
11
+ import { Form } from "../components/ui/form";
12
+ import { Field, FieldLabel } from "../components/ui/field";
13
+ import { FormMessage } from "../components/ui/form-message";
14
+ import { Button } from "../components/ui/button";
15
+ import { Input } from "../components/ui/input";
16
+ import { Alert, AlertTitle, AlertDescription } from "../components/ui/alert";
17
+ import { Lock, Mail, ArrowLeft, ArrowRight, CheckCircle2, RotateCcw } from "lucide-solid";
18
+
19
+ export const ForgotPassword01: Component = () => {
20
+ const [sent, setSent] = createSignal(false);
21
+ const [submittedEmail, setSubmittedEmail] = createSignal("");
22
+
23
+ const form = createForm({
24
+ initialValues: {
25
+ email: "",
26
+ },
27
+ validate: (values) => {
28
+ const errors: Record<string, string> = {};
29
+ if (!values.email.trim()) {
30
+ errors.email = "Email is required";
31
+ } else if (!values.email.includes("@")) {
32
+ errors.email = "Please enter a valid email address";
33
+ }
34
+ return errors;
35
+ },
36
+ onSubmit: async (values) => {
37
+ await new Promise((resolve) => setTimeout(resolve, 1000));
38
+ setSubmittedEmail(values.email);
39
+ setSent(true);
40
+ },
41
+ });
42
+
43
+ const isFormValid = () =>
44
+ form.values().email.trim() !== "" && form.values().email.includes("@");
45
+
46
+ const handleReset = () => {
47
+ setSent(false);
48
+ form.resetForm();
49
+ };
50
+
51
+ return (
52
+ <div class="@container w-full min-h-[520px] flex items-center justify-center p-4 sm:p-6 md:p-10">
53
+ <Card class="w-full max-w-md border-border shadow-md bg-card">
54
+ {/* Card Header */}
55
+ <CardHeader class="space-y-2 text-center pb-4">
56
+ <div class="mx-auto size-12 rounded-lg bg-primary/10 text-primary flex items-center justify-center mb-1 shadow-2xs">
57
+ <Show when={sent()} fallback={<Lock class="size-6" />}>
58
+ <Mail class="size-6" />
59
+ </Show>
60
+ </div>
61
+ <CardTitle class="text-2xl font-bold tracking-tight">
62
+ {sent() ? "Check your email" : "Reset your password"}
63
+ </CardTitle>
64
+ <CardDescription class="text-xs sm:text-sm">
65
+ {sent()
66
+ ? `We have sent a secure password reset link to ${submittedEmail()}`
67
+ : "Enter the email associated with your account and we will send you a reset link"}
68
+ </CardDescription>
69
+ </CardHeader>
70
+
71
+ <CardContent class="space-y-4">
72
+ <Show
73
+ when={sent()}
74
+ fallback={
75
+ <Form onSubmit={form.handleSubmit} loading={form.isSubmitting()} class="space-y-4">
76
+ <Field>
77
+ <FieldLabel for="fp-email" class="text-xs sm:text-sm">Email address</FieldLabel>
78
+ <Input
79
+ id="fp-email"
80
+ type="email"
81
+ placeholder="name@company.com"
82
+ value={form.values().email}
83
+ onInput={form.handleChange("email")}
84
+ onBlur={form.handleBlur("email")}
85
+ autocomplete="email"
86
+ />
87
+ <FormMessage form={form} name="email" />
88
+ </Field>
89
+
90
+ <Button
91
+ type="submit"
92
+ class="w-full font-medium"
93
+ disabled={form.isSubmitting() || !isFormValid()}
94
+ >
95
+ <Show when={form.isSubmitting()} fallback={<>Send Reset Link <ArrowRight class="ml-2 size-4" /></>}>
96
+ Sending instructions...
97
+ </Show>
98
+ </Button>
99
+ </Form>
100
+ }
101
+ >
102
+ <div class="space-y-4">
103
+ <Alert class="bg-emerald-500/10 border-emerald-500/30 text-emerald-500 py-3">
104
+ <CheckCircle2 class="size-4 text-emerald-500 shrink-0" />
105
+ <AlertTitle class="text-xs font-semibold text-foreground">Instructions Sent</AlertTitle>
106
+ <AlertDescription class="text-[11px] text-muted-foreground">
107
+ If an account exists for <span class="font-medium text-foreground font-mono">{submittedEmail()}</span>, you will receive an email shortly.
108
+ </AlertDescription>
109
+ </Alert>
110
+
111
+ <div class="flex items-center justify-between text-xs text-muted-foreground pt-1">
112
+ <span>Didn't get the email?</span>
113
+ <Button
114
+ variant="link"
115
+ size="sm"
116
+ type="button"
117
+ onClick={handleReset}
118
+ class="h-auto p-0 text-xs text-primary font-semibold gap-1 cursor-pointer"
119
+ >
120
+ <RotateCcw class="size-3" /> Try another email
121
+ </Button>
122
+ </div>
123
+ </div>
124
+ </Show>
125
+ </CardContent>
126
+
127
+ {/* Card Footer */}
128
+ <CardFooter class="justify-center border-t border-border/50 py-4 text-xs text-muted-foreground">
129
+ <a
130
+ href="/blocks/login-01"
131
+ class="inline-flex items-center gap-1.5 text-foreground hover:text-primary transition-colors font-medium"
132
+ >
133
+ <ArrowLeft class="size-3.5" /> Back to sign in
134
+ </a>
135
+ </CardFooter>
136
+ </Card>
137
+ </div>
138
+ );
139
+ };
140
+
141
+ export default ForgotPassword01;
@@ -0,0 +1,28 @@
1
+ import { Component } from "solid-js";
2
+ import { Button } from "../components/ui/button";
3
+ import { Badge } from "../components/ui/badge";
4
+ import { ArrowRight } from "lucide-solid";
5
+
6
+ export default function Hero01() {
7
+ return (
8
+ <section class="w-full py-12 md:py-24 lg:py-32 flex flex-col items-center justify-center text-center">
9
+ <Badge variant="secondary" class="mb-4">
10
+ Nikala UI Blocks
11
+ </Badge>
12
+ <h1 class="text-4xl font-bold tracking-tight sm:text-6xl text-foreground max-w-3xl">
13
+ Build faster with copy-paste SolidJS blocks
14
+ </h1>
15
+ <p class="mt-6 text-lg text-muted-foreground max-w-2xl">
16
+ Pre-designed, fully responsive marketing and application blocks built natively for Tailwind CSS v4.
17
+ </p>
18
+ <div class="mt-8 flex items-center gap-4">
19
+ <Button size="lg">
20
+ Get Started <ArrowRight class="ml-2 size-4" />
21
+ </Button>
22
+ <Button variant="outline" size="lg">
23
+ Documentation
24
+ </Button>
25
+ </div>
26
+ </section>
27
+ );
28
+ }
@@ -0,0 +1,231 @@
1
+ import { createSignal, Show, type Component } from "solid-js";
2
+ import { createForm } from "@nikala-ui/hooks";
3
+ import { Form } from "../components/ui/form";
4
+ import { Field, FieldLabel } from "../components/ui/field";
5
+ import { FormMessage } from "../components/ui/form-message";
6
+ import { Button } from "../components/ui/button";
7
+ import { Input } from "../components/ui/input";
8
+ import { Checkbox } from "../components/ui/checkbox";
9
+ import { Label } from "../components/ui/label";
10
+ import { Separator } from "../components/ui/separator";
11
+ import { Eye, EyeOff, Sparkles, ArrowRight } from "lucide-solid";
12
+
13
+ export const Login01: Component = () => {
14
+ const [showPassword, setShowPassword] = createSignal(false);
15
+
16
+ const form = createForm({
17
+ initialValues: {
18
+ email: "",
19
+ password: "",
20
+ rememberMe: true,
21
+ },
22
+ validate: (values) => {
23
+ const errors: Record<string, string> = {};
24
+ if (!values.email) {
25
+ errors.email = "Email is required";
26
+ } else if (!values.email.includes("@")) {
27
+ errors.email = "Please enter a valid email address";
28
+ }
29
+ if (!values.password) {
30
+ errors.password = "Password is required";
31
+ }
32
+ return errors;
33
+ },
34
+ onSubmit: async (values) => {
35
+ // Simulate API request
36
+ await new Promise((resolve) => setTimeout(resolve, 1200));
37
+ },
38
+ });
39
+
40
+ const isFormValid = () =>
41
+ form.values().email.trim() !== "" &&
42
+ form.values().email.includes("@") &&
43
+ form.values().password.trim() !== "";
44
+
45
+ return (
46
+ <div class="@container w-full min-h-[560px] @5xl:min-h-[700px] grid grid-cols-1 @5xl:grid-cols-2 bg-background text-foreground rounded-lg border border-border overflow-hidden shadow-xs">
47
+ {/* Left Column: Login Form */}
48
+ <div class="flex flex-col justify-between p-6 @md:p-10 @5xl:p-12 w-full">
49
+ {/* Brand Header */}
50
+ <div class="flex items-center gap-2.5">
51
+ <div class="size-8 rounded-lg bg-primary flex items-center justify-center text-primary-foreground font-bold text-sm shadow-2xs shrink-0">
52
+ N
53
+ </div>
54
+ <span class="font-bold text-lg tracking-tight">Nikala UI</span>
55
+ </div>
56
+
57
+ {/* Form Container */}
58
+ <div class="mx-auto w-full max-w-sm my-auto py-6 @md:py-8">
59
+ <div class="space-y-1.5 text-left mb-6">
60
+ <h1 class="text-2xl @md:text-3xl font-bold tracking-tight text-foreground">
61
+ Welcome back
62
+ </h1>
63
+ <p class="text-xs @md:text-sm text-muted-foreground">
64
+ Enter your credentials to access your account dashboard
65
+ </p>
66
+ </div>
67
+
68
+ {/* Social OAuth Buttons */}
69
+ <div class="grid grid-cols-1 @xs:grid-cols-2 gap-2.5 mb-6">
70
+ <Button variant="outline" class="w-full justify-center text-xs @md:text-sm h-9">
71
+ <svg class="size-4 mr-2 shrink-0" viewBox="0 0 24 24" fill="currentColor">
72
+ <path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" />
73
+ </svg>
74
+ GitHub
75
+ </Button>
76
+ <Button variant="outline" class="w-full justify-center text-xs @md:text-sm h-9">
77
+ <svg class="size-4 mr-2 shrink-0" viewBox="0 0 24 24">
78
+ <path
79
+ fill="#4285F4"
80
+ d="M23.745 12.27c0-.7-.06-1.4-.19-2.07H12v4.51h6.6c-.29 1.52-1.14 2.82-2.4 3.68v3.05h3.88c2.27-2.09 3.66-5.17 3.66-9.17z"
81
+ />
82
+ <path
83
+ fill="#34A853"
84
+ d="M12 24c3.24 0 5.95-1.08 7.93-2.91l-3.88-3.05c-1.08.72-2.45 1.16-4.05 1.16-3.12 0-5.77-2.1-6.72-4.93H1.25v3.15C3.26 21.36 7.33 24 12 24z"
85
+ />
86
+ <path
87
+ fill="#FBBC05"
88
+ d="M5.28 14.27c-.25-.72-.38-1.49-.38-2.27s.13-1.55.38-2.27V6.58H1.25C.45 8.18 0 10.03 0 12s.45 3.82 1.25 5.42l4.03-3.15z"
89
+ />
90
+ <path
91
+ fill="#EA4335"
92
+ d="M12 4.75c1.77 0 3.35.61 4.6 1.8l3.42-3.42C17.95 1.19 15.24 0 12 0 7.33 0 3.26 2.64 1.25 6.58l4.03 3.15c.95-2.83 3.6-4.98 6.72-4.98z"
93
+ />
94
+ </svg>
95
+ Google
96
+ </Button>
97
+ </div>
98
+
99
+ <div class="relative mb-6">
100
+ <div class="absolute inset-0 flex items-center">
101
+ <Separator />
102
+ </div>
103
+ <div class="relative flex justify-center text-xs uppercase">
104
+ <span class="bg-background px-3 text-muted-foreground font-medium text-[11px]">
105
+ Or continue with email
106
+ </span>
107
+ </div>
108
+ </div>
109
+
110
+ {/* Form with Nikala UI Form & Field ecosystem */}
111
+ <Form onSubmit={form.handleSubmit} loading={form.isSubmitting()} class="space-y-4">
112
+ <Field>
113
+ <FieldLabel for="login-email" class="text-xs @md:text-sm">Email address</FieldLabel>
114
+ <Input
115
+ id="login-email"
116
+ type="email"
117
+ placeholder="name@company.com"
118
+ value={form.values().email}
119
+ onInput={form.handleChange("email")}
120
+ onBlur={form.handleBlur("email")}
121
+ autocomplete="email"
122
+ />
123
+ <FormMessage form={form} name="email" />
124
+ </Field>
125
+
126
+ <Field>
127
+ <div class="flex items-center justify-between">
128
+ <FieldLabel for="login-password" class="text-xs @md:text-sm">Password</FieldLabel>
129
+ <a
130
+ href="/blocks/forgot-password-01"
131
+ class="text-[11px] @md:text-xs text-primary font-medium hover:underline"
132
+ >
133
+ Forgot password?
134
+ </a>
135
+ </div>
136
+ <div class="relative">
137
+ <Input
138
+ id="login-password"
139
+ type={showPassword() ? "text" : "password"}
140
+ placeholder="••••••••"
141
+ value={form.values().password}
142
+ onInput={form.handleChange("password")}
143
+ onBlur={form.handleBlur("password")}
144
+ autocomplete="current-password"
145
+ class="pr-10"
146
+ />
147
+ <button
148
+ type="button"
149
+ onClick={() => setShowPassword(!showPassword())}
150
+ class="absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors p-1 cursor-pointer"
151
+ aria-label={showPassword() ? "Hide password" : "Show password"}
152
+ >
153
+ <Show when={showPassword()} fallback={<Eye class="size-4" />}>
154
+ <EyeOff class="size-4" />
155
+ </Show>
156
+ </button>
157
+ </div>
158
+ <FormMessage form={form} name="password" />
159
+ </Field>
160
+
161
+ <div class="flex items-center space-x-2 pt-1">
162
+ <Checkbox
163
+ id="remember"
164
+ checked={form.values().rememberMe}
165
+ onChange={(checked) => form.setFieldValue("rememberMe", checked)}
166
+ />
167
+ <Label
168
+ for="remember"
169
+ class="text-xs font-normal text-muted-foreground cursor-pointer select-none"
170
+ >
171
+ Remember me for 30 days
172
+ </Label>
173
+ </div>
174
+
175
+ <Button
176
+ type="submit"
177
+ class="w-full mt-2 font-medium"
178
+ disabled={form.isSubmitting() || !isFormValid()}
179
+ >
180
+ <Show when={form.isSubmitting()} fallback={<>Sign In <ArrowRight class="ml-2 size-4" /></>}>
181
+ Signing in...
182
+ </Show>
183
+ </Button>
184
+ </Form>
185
+
186
+ <p class="text-center text-xs text-muted-foreground mt-6">
187
+ Don't have an account?{" "}
188
+ <a href="/blocks/register-01" class="text-primary font-semibold hover:underline">
189
+ Sign up
190
+ </a>
191
+ </p>
192
+ </div>
193
+
194
+ {/* Footer info */}
195
+ <div class="text-center @md:text-left text-xs text-muted-foreground pt-4 @md:pt-0">
196
+ By signing in, you agree to our{" "}
197
+ <a href="#terms" class="underline hover:text-foreground">Terms of Service</a>{" "}
198
+ and{" "}
199
+ <a href="#privacy" class="underline hover:text-foreground">Privacy Policy</a>.
200
+ </div>
201
+ </div>
202
+
203
+ {/* Right Column: Hero Visual & Art / Testimonial Showcase */}
204
+ <div class="hidden @5xl:flex relative flex-col justify-between p-10 bg-muted/40 border-l border-border overflow-hidden">
205
+ <div class="absolute inset-0 bg-gradient-to-tr from-primary/10 via-transparent to-primary/5 pointer-events-none" />
206
+
207
+ <div class="relative z-10 flex items-center gap-2 text-sm font-semibold text-foreground/80">
208
+ <Sparkles class="size-4 text-primary" />
209
+ <span>Production Ready SolidJS UI</span>
210
+ </div>
211
+
212
+ <div class="relative z-10 max-w-md space-y-6">
213
+ <blockquote class="text-xl @md:text-2xl font-semibold tracking-tight text-foreground leading-snug">
214
+ "Nikala UI transformed the way our team builds web applications with SolidJS. Fine-grained reactivity meets Tailwind v4 simplicity."
215
+ </blockquote>
216
+ <div class="space-y-1">
217
+ <p class="text-sm font-semibold text-foreground">Davit Kakhidze</p>
218
+ <p class="text-xs text-muted-foreground">Head of Engineering at Studio</p>
219
+ </div>
220
+ </div>
221
+
222
+ <div class="relative z-10 flex items-center justify-between text-xs text-muted-foreground">
223
+ <span>Honoring Niko Pirosmani</span>
224
+ <span>© 2026 Nikala UI</span>
225
+ </div>
226
+ </div>
227
+ </div>
228
+ );
229
+ };
230
+
231
+ export default Login01;
@@ -0,0 +1,170 @@
1
+ import { createSignal, onMount, onCleanup, Show, type Component } from "solid-js";
2
+ import {
3
+ Card,
4
+ CardHeader,
5
+ CardTitle,
6
+ CardDescription,
7
+ CardContent,
8
+ CardFooter,
9
+ } from "../components/ui/card";
10
+ import { Form } from "../components/ui/form";
11
+ import { Button } from "../components/ui/button";
12
+ import { PinInput, PinInputInput } from "../components/ui/pin-input";
13
+ import { Alert, AlertTitle, AlertDescription } from "../components/ui/alert";
14
+ import { Badge } from "../components/ui/badge";
15
+ import { KeyRound, Mail, CheckCircle2, RotateCcw, ArrowRight } from "lucide-solid";
16
+
17
+ export const OtpVerification01: Component = () => {
18
+ const [code, setCode] = createSignal("");
19
+ const [loading, setLoading] = createSignal(false);
20
+ const [verified, setVerified] = createSignal(false);
21
+ const [countdown, setCountdown] = createSignal(59);
22
+ const [canResend, setCanResend] = createSignal(false);
23
+
24
+ let timerId: ReturnType<typeof setInterval> | undefined;
25
+
26
+ const startCountdown = () => {
27
+ setCountdown(59);
28
+ setCanResend(false);
29
+ clearInterval(timerId);
30
+ timerId = setInterval(() => {
31
+ setCountdown((prev) => {
32
+ if (prev <= 1) {
33
+ clearInterval(timerId);
34
+ setCanResend(true);
35
+ return 0;
36
+ }
37
+ return prev - 1;
38
+ });
39
+ }, 1000);
40
+ };
41
+
42
+ onMount(() => {
43
+ startCountdown();
44
+ });
45
+
46
+ onCleanup(() => {
47
+ clearInterval(timerId);
48
+ });
49
+
50
+ const handleVerify = (e: Event) => {
51
+ e.preventDefault();
52
+ if (code().length < 6) return;
53
+ setLoading(true);
54
+ setTimeout(() => {
55
+ setLoading(false);
56
+ setVerified(true);
57
+ }, 1200);
58
+ };
59
+
60
+ const handleResend = () => {
61
+ if (!canResend()) return;
62
+ setCode("");
63
+ startCountdown();
64
+ };
65
+
66
+ return (
67
+ <div class="@container w-full min-h-[500px] flex items-center justify-center p-4 sm:p-6 md:p-10">
68
+ <Card class="w-full max-w-md border-border shadow-md bg-card">
69
+ {/* Card Header */}
70
+ <CardHeader class="space-y-2 text-center pb-4">
71
+ <div class="mx-auto size-12 rounded-lg bg-primary/10 text-primary flex items-center justify-center mb-1 shadow-2xs">
72
+ <KeyRound class="size-6" />
73
+ </div>
74
+ <div class="flex items-center justify-center gap-2">
75
+ <CardTitle class="text-2xl font-bold tracking-tight">Two-Factor Auth</CardTitle>
76
+ <Badge variant="secondary" class="text-[10px] px-1.5 py-0 font-mono">
77
+ 2FA
78
+ </Badge>
79
+ </div>
80
+ <CardDescription class="text-xs sm:text-sm">
81
+ Enter the 6-digit security code sent to your registered email address
82
+ </CardDescription>
83
+ </CardHeader>
84
+
85
+ <CardContent class="space-y-6">
86
+ {/* Info Alert */}
87
+ <Alert class="bg-muted/40 border-border/70 py-2.5">
88
+ <Mail class="size-4 text-primary shrink-0" />
89
+ <AlertTitle class="text-xs font-semibold">Verification Code Sent</AlertTitle>
90
+ <AlertDescription class="text-[11px] text-muted-foreground">
91
+ Sent to <span class="font-medium text-foreground font-mono">dev***@nikala.dev</span>
92
+ </AlertDescription>
93
+ </Alert>
94
+
95
+ {/* Form */}
96
+ <Form onSubmit={handleVerify} loading={loading()} class="space-y-6">
97
+ {/* Responsive 6-Digit PinInput */}
98
+ <div class="flex flex-col items-center justify-center space-y-2 w-full">
99
+ <PinInput
100
+ value={code()}
101
+ onValueChange={setCode}
102
+ length={6}
103
+ type="numeric"
104
+ class="justify-center items-center gap-1.5 @sm:gap-2.5 max-w-full"
105
+ >
106
+ <PinInputInput index={0} class="h-9 w-9 @sm:h-11 @sm:w-11 text-sm @sm:text-base font-semibold" />
107
+ <PinInputInput index={1} class="h-9 w-9 @sm:h-11 @sm:w-11 text-sm @sm:text-base font-semibold" />
108
+ <PinInputInput index={2} class="h-9 w-9 @sm:h-11 @sm:w-11 text-sm @sm:text-base font-semibold" />
109
+ <PinInputInput index={3} class="h-9 w-9 @sm:h-11 @sm:w-11 text-sm @sm:text-base font-semibold" />
110
+ <PinInputInput index={4} class="h-9 w-9 @sm:h-11 @sm:w-11 text-sm @sm:text-base font-semibold" />
111
+ <PinInputInput index={5} class="h-9 w-9 @sm:h-11 @sm:w-11 text-sm @sm:text-base font-semibold" />
112
+ </PinInput>
113
+
114
+ <Show when={verified()}>
115
+ <div class="flex items-center gap-1.5 text-xs text-emerald-500 font-medium pt-1">
116
+ <CheckCircle2 class="size-3.5" />
117
+ <span>Code verified successfully!</span>
118
+ </div>
119
+ </Show>
120
+ </div>
121
+
122
+ {/* Countdown / Resend Action */}
123
+ <div class="flex items-center justify-between text-xs text-muted-foreground px-1">
124
+ <span>Didn't receive code?</span>
125
+ <Show
126
+ when={canResend()}
127
+ fallback={
128
+ <span class="font-mono text-primary text-[11px]">
129
+ Resend in 00:{countdown() < 10 ? `0${countdown()}` : countdown()}s
130
+ </span>
131
+ }
132
+ >
133
+ <Button
134
+ variant="link"
135
+ size="sm"
136
+ type="button"
137
+ onClick={handleResend}
138
+ class="h-auto p-0 text-xs text-primary font-semibold gap-1"
139
+ >
140
+ <RotateCcw class="size-3" /> Resend Code
141
+ </Button>
142
+ </Show>
143
+ </div>
144
+
145
+ {/* Submit Button */}
146
+ <Button
147
+ type="submit"
148
+ class="w-full font-medium"
149
+ disabled={loading() || code().length < 6 || verified()}
150
+ >
151
+ <Show when={loading()} fallback={<>Verify Account <ArrowRight class="ml-2 size-4" /></>}>
152
+ Verifying...
153
+ </Show>
154
+ </Button>
155
+ </Form>
156
+ </CardContent>
157
+
158
+ {/* Card Footer */}
159
+ <CardFooter class="justify-center border-t border-border/50 py-4 text-xs text-muted-foreground">
160
+ Need help?{" "}
161
+ <a href="#support" class="text-primary font-semibold hover:underline ml-1">
162
+ Contact Security Team
163
+ </a>
164
+ </CardFooter>
165
+ </Card>
166
+ </div>
167
+ );
168
+ };
169
+
170
+ export default OtpVerification01;