@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,83 @@
1
+ import { splitProps, type Component, type JSX } from "solid-js";
2
+ import { cn } from "@/lib/cn";
3
+
4
+ export interface EmptyProps extends JSX.HTMLAttributes<HTMLDivElement> {
5
+ class?: string;
6
+ }
7
+
8
+ /** A centered layout for empty collections, search results, and initial states. */
9
+ export const Empty: Component<EmptyProps> = (props) => {
10
+ const [local, rest] = splitProps(props, ["class"]);
11
+
12
+ return (
13
+ <div
14
+ class={cn(
15
+ "flex min-h-64 w-full flex-col items-center justify-center rounded-lg border border-dashed border-border bg-card/30 p-6 text-center",
16
+ local.class
17
+ )}
18
+ {...rest}
19
+ />
20
+ );
21
+ };
22
+
23
+ export interface EmptyIconProps extends JSX.HTMLAttributes<HTMLDivElement> {
24
+ class?: string;
25
+ }
26
+
27
+ export const EmptyIcon: Component<EmptyIconProps> = (props) => {
28
+ const [local, rest] = splitProps(props, ["class"]);
29
+
30
+ return (
31
+ <div
32
+ aria-hidden="true"
33
+ class={cn(
34
+ "mb-4 flex size-12 items-center justify-center rounded-lg bg-muted text-muted-foreground [&_svg]:size-6",
35
+ local.class
36
+ )}
37
+ {...rest}
38
+ />
39
+ );
40
+ };
41
+
42
+ export interface EmptyTitleProps extends JSX.HTMLAttributes<HTMLHeadingElement> {
43
+ class?: string;
44
+ }
45
+
46
+ export const EmptyTitle: Component<EmptyTitleProps> = (props) => {
47
+ const [local, rest] = splitProps(props, ["class"]);
48
+
49
+ return (
50
+ <h3
51
+ class={cn("text-lg font-semibold tracking-tight text-foreground", local.class)}
52
+ {...rest}
53
+ />
54
+ );
55
+ };
56
+
57
+ export interface EmptyDescriptionProps
58
+ extends JSX.HTMLAttributes<HTMLParagraphElement> {
59
+ class?: string;
60
+ }
61
+
62
+ export const EmptyDescription: Component<EmptyDescriptionProps> = (props) => {
63
+ const [local, rest] = splitProps(props, ["class"]);
64
+
65
+ return (
66
+ <p
67
+ class={cn("mt-1 max-w-sm text-sm text-muted-foreground", local.class)}
68
+ {...rest}
69
+ />
70
+ );
71
+ };
72
+
73
+ export interface EmptyActionProps extends JSX.HTMLAttributes<HTMLDivElement> {
74
+ class?: string;
75
+ }
76
+
77
+ export const EmptyAction: Component<EmptyActionProps> = (props) => {
78
+ const [local, rest] = splitProps(props, ["class"]);
79
+
80
+ return (
81
+ <div class={cn("mt-5 flex items-center gap-2", local.class)} {...rest} />
82
+ );
83
+ };
@@ -0,0 +1,71 @@
1
+ import { splitProps, type Component, type JSX } from "solid-js";
2
+ import { cn } from "@/lib/cn";
3
+ import { Label, type LabelProps } from "@/components/ui/label";
4
+
5
+ export interface FieldProps extends JSX.HTMLAttributes<HTMLDivElement> {
6
+ class?: string;
7
+ }
8
+
9
+ /** A consistent layout wrapper for labels, controls, descriptions, and errors. */
10
+ export const Field: Component<FieldProps> = (props) => {
11
+ const [local, rest] = splitProps(props, ["class", "children"]);
12
+
13
+ return (
14
+ <div class={cn("grid w-full gap-1.5", local.class)} {...rest}>
15
+ {local.children}
16
+ </div>
17
+ );
18
+ };
19
+
20
+ export interface FieldLabelProps extends JSX.LabelHTMLAttributes<HTMLLabelElement>, LabelProps {
21
+ class?: string;
22
+ for?: string;
23
+ children?: JSX.Element;
24
+ }
25
+
26
+ export const FieldLabel: Component<FieldLabelProps> = (props) => {
27
+ const [local, rest] = splitProps(props, ["class", "children"]);
28
+
29
+ return (
30
+ <Label class={cn("text-sm font-medium", local.class)} {...rest}>
31
+ {local.children}
32
+ </Label>
33
+ );
34
+ };
35
+
36
+ export interface FieldDescriptionProps
37
+ extends JSX.HTMLAttributes<HTMLParagraphElement> {
38
+ class?: string;
39
+ }
40
+
41
+ export const FieldDescription: Component<FieldDescriptionProps> = (props) => {
42
+ const [local, rest] = splitProps(props, ["class", "children"]);
43
+
44
+ return (
45
+ <p
46
+ class={cn("text-sm text-muted-foreground", local.class)}
47
+ {...rest}
48
+ >
49
+ {local.children}
50
+ </p>
51
+ );
52
+ };
53
+
54
+ export interface FieldErrorProps
55
+ extends JSX.HTMLAttributes<HTMLParagraphElement> {
56
+ class?: string;
57
+ }
58
+
59
+ export const FieldError: Component<FieldErrorProps> = (props) => {
60
+ const [local, rest] = splitProps(props, ["class", "children"]);
61
+
62
+ return (
63
+ <p
64
+ role="alert"
65
+ class={cn("text-sm font-medium text-destructive", local.class)}
66
+ {...rest}
67
+ >
68
+ {local.children}
69
+ </p>
70
+ );
71
+ };
@@ -0,0 +1,181 @@
1
+ import {
2
+ createSignal,
3
+ splitProps,
4
+ Show,
5
+ type JSX,
6
+ type ParentComponent,
7
+ } from "solid-js";
8
+ import {
9
+ Folder,
10
+ FolderOpen,
11
+ File,
12
+ FileCode,
13
+ FileJson,
14
+ FileText,
15
+ ChevronRight,
16
+ } from "lucide-solid";
17
+ import {
18
+ Collapsible,
19
+ CollapsibleTrigger,
20
+ CollapsibleContent,
21
+ } from "@/components/ui/collapsible";
22
+ import { cn } from "@/lib/cn";
23
+
24
+ export interface FileTreeProps extends JSX.HTMLAttributes<HTMLDivElement> {
25
+ class?: string;
26
+ }
27
+
28
+ /**
29
+ * Root FileTree container for displaying project directory hierarchies.
30
+ */
31
+ export const FileTree: ParentComponent<FileTreeProps> = (props) => {
32
+ const [local, rest] = splitProps(props, ["class", "children"]);
33
+ return (
34
+ <div
35
+ class={cn(
36
+ "my-4 w-full rounded-lg border border-border bg-card/60 p-3 font-mono text-sm shadow-2xs select-none",
37
+ local.class
38
+ )}
39
+ {...rest}
40
+ >
41
+ <div class="space-y-0.5">{local.children}</div>
42
+ </div>
43
+ );
44
+ };
45
+
46
+ export interface FileTreeFolderProps {
47
+ /** Folder name */
48
+ name: string;
49
+ /** Initial open state of the folder (default: true) */
50
+ defaultOpen?: boolean;
51
+ /** Controlled open state */
52
+ open?: boolean;
53
+ /** Callback fired when open state changes */
54
+ onOpenChange?: (open: boolean) => void;
55
+ /** Custom folder icon override */
56
+ icon?: JSX.Element;
57
+ class?: string;
58
+ children?: JSX.Element;
59
+ }
60
+
61
+ /**
62
+ * Collapsible folder node in the FileTree.
63
+ */
64
+ export const FileTreeFolder: ParentComponent<FileTreeFolderProps> = (props) => {
65
+ const [local, rest] = splitProps(props, [
66
+ "name",
67
+ "defaultOpen",
68
+ "open",
69
+ "onOpenChange",
70
+ "icon",
71
+ "class",
72
+ "children",
73
+ ]);
74
+
75
+ const [isOpen, setIsOpen] = createSignal(local.defaultOpen ?? true);
76
+
77
+ const openState = () => (local.open !== undefined ? local.open : isOpen());
78
+
79
+ const handleToggle = (next: boolean) => {
80
+ if (local.open === undefined) {
81
+ setIsOpen(next);
82
+ }
83
+ local.onOpenChange?.(next);
84
+ };
85
+
86
+ return (
87
+ <Collapsible
88
+ open={openState()}
89
+ onOpenChange={handleToggle}
90
+ class={cn("w-full", local.class)}
91
+ {...rest}
92
+ >
93
+ <CollapsibleTrigger class="group flex w-full items-center justify-start gap-1.5 rounded-md px-1.5 py-1 text-xs text-foreground transition-colors hover:bg-muted/70 cursor-pointer">
94
+ <ChevronRight
95
+ class={cn(
96
+ "size-3.5 shrink-0 text-muted-foreground transition-transform duration-200",
97
+ openState() && "rotate-90 text-foreground"
98
+ )}
99
+ />
100
+ <Show
101
+ when={local.icon}
102
+ fallback={
103
+ <Show
104
+ when={openState()}
105
+ fallback={<Folder class="size-3.5 shrink-0 text-amber-500/90 dark:text-amber-400" />}
106
+ >
107
+ <FolderOpen class="size-3.5 shrink-0 text-amber-500 dark:text-amber-400" />
108
+ </Show>
109
+ }
110
+ >
111
+ {local.icon}
112
+ </Show>
113
+ <span class="font-medium text-foreground tracking-tight">{local.name}</span>
114
+ </CollapsibleTrigger>
115
+
116
+ <CollapsibleContent class="border-l border-border/60 ml-3.5 pl-3 pt-0.5 space-y-0.5">
117
+ {local.children}
118
+ </CollapsibleContent>
119
+ </Collapsible>
120
+ );
121
+ };
122
+
123
+ export interface FileTreeFileProps extends JSX.HTMLAttributes<HTMLDivElement> {
124
+ /** File name */
125
+ name: string;
126
+ /** Custom file icon override */
127
+ icon?: JSX.Element;
128
+ class?: string;
129
+ }
130
+
131
+ /**
132
+ * Returns a smart default Lucide icon based on file extension.
133
+ */
134
+ function getFileIcon(filename: string): JSX.Element {
135
+ const ext = filename.split(".").pop()?.toLowerCase();
136
+ switch (ext) {
137
+ case "tsx":
138
+ case "jsx":
139
+ case "ts":
140
+ case "js":
141
+ case "mjs":
142
+ case "rs":
143
+ case "py":
144
+ case "go":
145
+ return <FileCode class="size-3.5 shrink-0 text-sky-500 dark:text-sky-400" />;
146
+ case "json":
147
+ return <FileJson class="size-3.5 shrink-0 text-amber-500 dark:text-amber-400" />;
148
+ case "md":
149
+ case "mdx":
150
+ case "txt":
151
+ return <FileText class="size-3.5 shrink-0 text-emerald-500 dark:text-emerald-400" />;
152
+ default:
153
+ return <File class="size-3.5 shrink-0 text-muted-foreground" />;
154
+ }
155
+ }
156
+
157
+ /**
158
+ * Leaf file item inside a FileTree.
159
+ */
160
+ export const FileTreeFile: ParentComponent<FileTreeFileProps> = (props) => {
161
+ const [local, rest] = splitProps(props, ["name", "icon", "class", "children"]);
162
+
163
+ return (
164
+ <div
165
+ class={cn(
166
+ "flex w-full items-center justify-start gap-1.5 rounded-md px-1.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground cursor-default",
167
+ local.class
168
+ )}
169
+ {...rest}
170
+ >
171
+ <span class="size-3.5 shrink-0" />
172
+ <Show when={local.icon} fallback={getFileIcon(local.name)}>
173
+ {local.icon}
174
+ </Show>
175
+ <span class="tracking-tight">{local.name}</span>
176
+ <Show when={local.children}>
177
+ <div class="ml-auto">{local.children}</div>
178
+ </Show>
179
+ </div>
180
+ );
181
+ };
@@ -0,0 +1,247 @@
1
+ import { splitProps, type JSX, type ParentComponent, type Component } from "solid-js";
2
+ import { cva, type VariantProps } from "class-variance-authority";
3
+ import { cn } from "@/lib/cn";
4
+
5
+ /* --- Root Footer --- */
6
+ export const footerVariants = cva("w-full transition-colors", {
7
+ variants: {
8
+ variant: {
9
+ default: "bg-background border-t border-border/60 text-foreground",
10
+ muted: "bg-muted/40 border-t border-border text-foreground",
11
+ bordered: "bg-background border-t-2 border-border text-foreground",
12
+ floating: "my-8 rounded-lg border border-border/80 bg-card text-card-foreground shadow-xs",
13
+ transparent: "bg-transparent border-transparent text-foreground",
14
+ },
15
+ },
16
+ defaultVariants: {
17
+ variant: "default",
18
+ },
19
+ });
20
+
21
+ export interface FooterProps
22
+ extends JSX.HTMLAttributes<HTMLElement>,
23
+ VariantProps<typeof footerVariants> {
24
+ maxWidth?: "sm" | "md" | "lg" | "xl" | "2xl" | "full";
25
+ }
26
+
27
+ export const Footer: ParentComponent<FooterProps> = (props) => {
28
+ const [local, rest] = splitProps(props, ["class", "variant", "maxWidth", "children"]);
29
+
30
+ const maxWidthClass = () => {
31
+ switch (local.maxWidth) {
32
+ case "sm":
33
+ return "max-w-screen-sm";
34
+ case "md":
35
+ return "max-w-screen-md";
36
+ case "lg":
37
+ return "max-w-screen-lg";
38
+ case "xl":
39
+ return "max-w-screen-xl";
40
+ case "full":
41
+ return "max-w-full";
42
+ case "2xl":
43
+ default:
44
+ return "max-w-screen-2xl";
45
+ }
46
+ };
47
+
48
+ return (
49
+ <footer
50
+ class={cn(
51
+ footerVariants({ variant: local.variant }),
52
+ local.variant === "floating" && cn("mx-auto", maxWidthClass()),
53
+ local.class
54
+ )}
55
+ {...rest}
56
+ >
57
+ <div class={cn("w-full", local.variant !== "floating" && cn("mx-auto", maxWidthClass()))}>
58
+ {local.children}
59
+ </div>
60
+ </footer>
61
+ );
62
+ };
63
+
64
+ /* --- Footer Container --- */
65
+ export interface FooterContainerProps extends JSX.HTMLAttributes<HTMLDivElement> {
66
+ class?: string;
67
+ }
68
+
69
+ export const FooterContainer: ParentComponent<FooterContainerProps> = (props) => {
70
+ const [local, rest] = splitProps(props, ["class", "children"]);
71
+
72
+ return (
73
+ <div
74
+ class={cn("px-4 sm:px-6 lg:px-8 py-10 sm:py-12 md:py-16 w-full", local.class)}
75
+ {...rest}
76
+ >
77
+ {local.children}
78
+ </div>
79
+ );
80
+ };
81
+
82
+ /* --- Footer Content (Columns Grid / Layout) --- */
83
+ export interface FooterContentProps extends JSX.HTMLAttributes<HTMLDivElement> {
84
+ class?: string;
85
+ }
86
+
87
+ export const FooterContent: ParentComponent<FooterContentProps> = (props) => {
88
+ const [local, rest] = splitProps(props, ["class", "children"]);
89
+
90
+ return (
91
+ <div
92
+ class={cn(
93
+ "grid grid-cols-2 sm:grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-8 lg:gap-12",
94
+ local.class
95
+ )}
96
+ {...rest}
97
+ >
98
+ {local.children}
99
+ </div>
100
+ );
101
+ };
102
+
103
+ /* --- Footer Column --- */
104
+ export interface FooterColumnProps extends JSX.HTMLAttributes<HTMLDivElement> {
105
+ class?: string;
106
+ }
107
+
108
+ export const FooterColumn: ParentComponent<FooterColumnProps> = (props) => {
109
+ const [local, rest] = splitProps(props, ["class", "children"]);
110
+
111
+ return (
112
+ <div class={cn("flex flex-col space-y-3", local.class)} {...rest}>
113
+ {local.children}
114
+ </div>
115
+ );
116
+ };
117
+
118
+ /* --- Footer Column Title --- */
119
+ export interface FooterColumnTitleProps extends JSX.HTMLAttributes<HTMLHeadingElement> {
120
+ class?: string;
121
+ }
122
+
123
+ export const FooterColumnTitle: ParentComponent<FooterColumnTitleProps> = (props) => {
124
+ const [local, rest] = splitProps(props, ["class", "children"]);
125
+
126
+ return (
127
+ <h4
128
+ class={cn(
129
+ "text-xs font-semibold uppercase tracking-wider text-foreground",
130
+ local.class
131
+ )}
132
+ {...rest}
133
+ >
134
+ {local.children}
135
+ </h4>
136
+ );
137
+ };
138
+
139
+ /* --- Footer Column List --- */
140
+ export interface FooterColumnListProps extends JSX.HTMLAttributes<HTMLUListElement> {
141
+ class?: string;
142
+ }
143
+
144
+ export const FooterColumnList: ParentComponent<FooterColumnListProps> = (props) => {
145
+ const [local, rest] = splitProps(props, ["class", "children"]);
146
+
147
+ return (
148
+ <ul class={cn("space-y-2 list-none p-0 m-0", local.class)} {...rest}>
149
+ {local.children}
150
+ </ul>
151
+ );
152
+ };
153
+
154
+ /* --- Footer Link --- */
155
+ export interface FooterLinkProps extends JSX.AnchorHTMLAttributes<HTMLAnchorElement> {
156
+ class?: string;
157
+ }
158
+
159
+ export const FooterLink: ParentComponent<FooterLinkProps> = (props) => {
160
+ const [local, rest] = splitProps(props, ["class", "children"]);
161
+
162
+ return (
163
+ <li>
164
+ <a
165
+ class={cn(
166
+ "inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors cursor-pointer",
167
+ local.class
168
+ )}
169
+ {...rest}
170
+ >
171
+ {local.children}
172
+ </a>
173
+ </li>
174
+ );
175
+ };
176
+
177
+ /* --- Footer Brand / Info Section --- */
178
+ export interface FooterBrandProps extends JSX.HTMLAttributes<HTMLDivElement> {
179
+ class?: string;
180
+ }
181
+
182
+ export const FooterBrand: ParentComponent<FooterBrandProps> = (props) => {
183
+ const [local, rest] = splitProps(props, ["class", "children"]);
184
+
185
+ return (
186
+ <div
187
+ class={cn(
188
+ "col-span-2 sm:col-span-2 md:col-span-4 lg:col-span-2 flex flex-col space-y-3 mb-4 lg:mb-0",
189
+ local.class
190
+ )}
191
+ {...rest}
192
+ >
193
+ {local.children}
194
+ </div>
195
+ );
196
+ };
197
+
198
+ /* --- Footer Bottom (Copyright and Secondary Links Bar) --- */
199
+ export interface FooterBottomProps extends JSX.HTMLAttributes<HTMLDivElement> {
200
+ class?: string;
201
+ }
202
+
203
+ export const FooterBottom: ParentComponent<FooterBottomProps> = (props) => {
204
+ const [local, rest] = splitProps(props, ["class", "children"]);
205
+
206
+ return (
207
+ <div
208
+ class={cn(
209
+ "mt-12 sm:mt-16 pt-8 border-t border-border/50 flex flex-col sm:flex-row items-center justify-between gap-4 text-xs text-muted-foreground",
210
+ local.class
211
+ )}
212
+ {...rest}
213
+ >
214
+ {local.children}
215
+ </div>
216
+ );
217
+ };
218
+
219
+ /* --- Footer Copyright Text --- */
220
+ export interface FooterCopyrightProps extends JSX.HTMLAttributes<HTMLParagraphElement> {
221
+ class?: string;
222
+ }
223
+
224
+ export const FooterCopyright: ParentComponent<FooterCopyrightProps> = (props) => {
225
+ const [local, rest] = splitProps(props, ["class", "children"]);
226
+
227
+ return (
228
+ <p class={cn("text-xs text-muted-foreground leading-relaxed", local.class)} {...rest}>
229
+ {local.children}
230
+ </p>
231
+ );
232
+ };
233
+
234
+ /* --- Footer Social Links Container --- */
235
+ export interface FooterSocialsProps extends JSX.HTMLAttributes<HTMLDivElement> {
236
+ class?: string;
237
+ }
238
+
239
+ export const FooterSocials: ParentComponent<FooterSocialsProps> = (props) => {
240
+ const [local, rest] = splitProps(props, ["class", "children"]);
241
+
242
+ return (
243
+ <div class={cn("flex items-center gap-3 text-muted-foreground", local.class)} {...rest}>
244
+ {local.children}
245
+ </div>
246
+ );
247
+ };
@@ -0,0 +1,36 @@
1
+ import { Show, splitProps, type JSX } from "solid-js";
2
+ import type { CreateFormReturn } from "@/hooks/create-form";
3
+ import { FieldError, type FieldErrorProps } from "@/components/ui/field";
4
+
5
+ type FormState<T extends Record<string, any>> = Pick<
6
+ CreateFormReturn<T>,
7
+ "errors" | "touched"
8
+ >;
9
+
10
+ export interface FormMessageProps<
11
+ T extends Record<string, any>,
12
+ K extends keyof T,
13
+ > extends Omit<FieldErrorProps, "children"> {
14
+ form: FormState<T>;
15
+ name: K;
16
+ /** Show the message even before the field has been touched. */
17
+ showUntouched?: boolean;
18
+ }
19
+
20
+ /** Displays a field's validation error from createForm when it should be visible. */
21
+ export function FormMessage<
22
+ T extends Record<string, any>,
23
+ K extends keyof T,
24
+ >(props: FormMessageProps<T, K>): JSX.Element {
25
+ const [local, rest] = splitProps(props, ["form", "name", "showUntouched", "class"]);
26
+ const error = () => local.form.errors()[local.name] as string | undefined;
27
+ const touched = () => local.form.touched()[local.name] === true;
28
+
29
+ return (
30
+ <Show when={error() && (local.showUntouched || touched())}>
31
+ <FieldError class={local.class} {...rest}>
32
+ {error()}
33
+ </FieldError>
34
+ </Show>
35
+ );
36
+ }
@@ -0,0 +1,21 @@
1
+ import { splitProps, type Component, type JSX } from "solid-js";
2
+ import { cn } from "@/lib/cn";
3
+
4
+ export interface FormProps extends JSX.FormHTMLAttributes<HTMLFormElement> {
5
+ /** Indicates that the form is currently processing a submission. */
6
+ loading?: boolean;
7
+ class?: string;
8
+ }
9
+
10
+ /** A semantic form layout wrapper designed to work with the createForm hook. */
11
+ export const Form: Component<FormProps> = (props) => {
12
+ const [local, rest] = splitProps(props, ["loading", "class"]);
13
+
14
+ return (
15
+ <form
16
+ aria-busy={local.loading ? "true" : undefined}
17
+ class={cn("w-full space-y-5", local.class)}
18
+ {...rest}
19
+ />
20
+ );
21
+ };