@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.
- package/README.md +22 -0
- package/dist/cli/commands/build.d.ts +5 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +27 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +7 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +32 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +308 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/preview.d.ts +7 -0
- package/dist/cli/commands/preview.d.ts.map +1 -0
- package/dist/cli/commands/preview.js +24 -0
- package/dist/cli/commands/preview.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +7 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +33 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +53 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/client/App.d.ts +5 -0
- package/dist/client/App.d.ts.map +1 -0
- package/dist/client/App.jsx +31 -0
- package/dist/client/App.jsx.map +1 -0
- package/dist/client/app-types.d.ts +14 -0
- package/dist/client/app-types.d.ts.map +1 -0
- package/dist/client/app-types.js +2 -0
- package/dist/client/app-types.js.map +1 -0
- package/dist/client/components/DocsLayoutShell.d.ts +21 -0
- package/dist/client/components/DocsLayoutShell.d.ts.map +1 -0
- package/dist/client/components/DocsLayoutShell.jsx +14 -0
- package/dist/client/components/DocsLayoutShell.jsx.map +1 -0
- package/dist/client/components/DocsPageContent.d.ts +9 -0
- package/dist/client/components/DocsPageContent.d.ts.map +1 -0
- package/dist/client/components/DocsPageContent.jsx +10 -0
- package/dist/client/components/DocsPageContent.jsx.map +1 -0
- package/dist/client/entry.d.ts +2 -0
- package/dist/client/entry.d.ts.map +1 -0
- package/dist/client/entry.jsx +28 -0
- package/dist/client/entry.jsx.map +1 -0
- package/dist/client/index.html +21 -0
- package/dist/client/navigation/page-navigation.d.ts +9 -0
- package/dist/client/navigation/page-navigation.d.ts.map +1 -0
- package/dist/client/navigation/page-navigation.js +51 -0
- package/dist/client/navigation/page-navigation.js.map +1 -0
- package/dist/client/routing/use-docs-router.d.ts +17 -0
- package/dist/client/routing/use-docs-router.d.ts.map +1 -0
- package/dist/client/routing/use-docs-router.js +71 -0
- package/dist/client/routing/use-docs-router.js.map +1 -0
- package/dist/client/ssr-entry.d.ts +3 -0
- package/dist/client/ssr-entry.d.ts.map +1 -0
- package/dist/client/ssr-entry.jsx +13 -0
- package/dist/client/ssr-entry.jsx.map +1 -0
- package/dist/client/style.css +183 -0
- package/dist/client/utils/sidebar.d.ts +2 -0
- package/dist/client/utils/sidebar.d.ts.map +1 -0
- package/dist/client/utils/sidebar.js +2 -0
- package/dist/client/utils/sidebar.js.map +1 -0
- package/dist/components/mdx-components.d.ts +34 -0
- package/dist/components/mdx-components.d.ts.map +1 -0
- package/dist/components/mdx-components.jsx +131 -0
- package/dist/components/mdx-components.jsx.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +105 -0
- package/dist/config.js.map +1 -0
- package/dist/core/content-scanner.d.ts +10 -0
- package/dist/core/content-scanner.d.ts.map +1 -0
- package/dist/core/content-scanner.js +153 -0
- package/dist/core/content-scanner.js.map +1 -0
- package/dist/core/route-tree.d.ts +19 -0
- package/dist/core/route-tree.d.ts.map +1 -0
- package/dist/core/route-tree.js +176 -0
- package/dist/core/route-tree.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cn.d.ts +6 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/lib/cn.js +9 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/mdx/compiler.d.ts +13 -0
- package/dist/mdx/compiler.d.ts.map +1 -0
- package/dist/mdx/compiler.js +38 -0
- package/dist/mdx/compiler.js.map +1 -0
- package/dist/mdx/highlighter.d.ts +22 -0
- package/dist/mdx/highlighter.d.ts.map +1 -0
- package/dist/mdx/highlighter.js +139 -0
- package/dist/mdx/highlighter.js.map +1 -0
- package/dist/mdx/rehype-shiki.d.ts +3 -0
- package/dist/mdx/rehype-shiki.d.ts.map +1 -0
- package/dist/mdx/rehype-shiki.js +83 -0
- package/dist/mdx/rehype-shiki.js.map +1 -0
- package/dist/navigation/index.d.ts +2 -0
- package/dist/navigation/index.d.ts.map +1 -0
- package/dist/navigation/index.js +2 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/navigation/sidebar-state.d.ts +6 -0
- package/dist/navigation/sidebar-state.d.ts.map +1 -0
- package/dist/navigation/sidebar-state.js +20 -0
- package/dist/navigation/sidebar-state.js.map +1 -0
- package/dist/navigation/sidebar-tree.d.ts +7 -0
- package/dist/navigation/sidebar-tree.d.ts.map +1 -0
- package/dist/navigation/sidebar-tree.js +11 -0
- package/dist/navigation/sidebar-tree.js.map +1 -0
- package/dist/registry/accordion.json +18 -0
- package/dist/registry/alert.json +18 -0
- package/dist/registry/api-table.json +21 -0
- package/dist/registry/aspect-ratio.json +17 -0
- package/dist/registry/avatar.json +17 -0
- package/dist/registry/badge.json +18 -0
- package/dist/registry/banner.json +19 -0
- package/dist/registry/breadcrumb.json +17 -0
- package/dist/registry/bubble.json +18 -0
- package/dist/registry/button-group.json +20 -0
- package/dist/registry/button.json +21 -0
- package/dist/registry/callout.json +19 -0
- package/dist/registry/card.json +17 -0
- package/dist/registry/checkbox.json +20 -0
- package/dist/registry/code-block.json +26 -0
- package/dist/registry/code-group.json +20 -0
- package/dist/registry/collapsible.json +18 -0
- package/dist/registry/combobox.json +21 -0
- package/dist/registry/command.json +27 -0
- package/dist/registry/component-viewer.json +25 -0
- package/dist/registry/container.json +18 -0
- package/dist/registry/context-menu.json +24 -0
- package/dist/registry/create-active-element.json +13 -0
- package/dist/registry/create-app-updater.json +13 -0
- package/dist/registry/create-audio.json +7 -0
- package/dist/registry/create-battery.json +13 -0
- package/dist/registry/create-chat-scroll.json +13 -0
- package/dist/registry/create-click-outside.json +13 -0
- package/dist/registry/create-clipboard.json +13 -0
- package/dist/registry/create-color-mode.json +13 -0
- package/dist/registry/create-controllable-signal.json +13 -0
- package/dist/registry/create-debounce.json +13 -0
- package/dist/registry/create-disclosure.json +13 -0
- package/dist/registry/create-document-tabs.json +13 -0
- package/dist/registry/create-document-title.json +13 -0
- package/dist/registry/create-drop-zone.json +13 -0
- package/dist/registry/create-event-source.json +13 -0
- package/dist/registry/create-favicon.json +13 -0
- package/dist/registry/create-fetch.json +13 -0
- package/dist/registry/create-focus-trap.json +13 -0
- package/dist/registry/create-form.json +13 -0
- package/dist/registry/create-fullscreen.json +13 -0
- package/dist/registry/create-geolocation.json +13 -0
- package/dist/registry/create-global-shortcut.json +13 -0
- package/dist/registry/create-hover.json +13 -0
- package/dist/registry/create-idle.json +13 -0
- package/dist/registry/create-infinite-scroll.json +13 -0
- package/dist/registry/create-input-mask.json +13 -0
- package/dist/registry/create-intersection-observer.json +13 -0
- package/dist/registry/create-keybindings.json +13 -0
- package/dist/registry/create-lock-scroll.json +13 -0
- package/dist/registry/create-long-press.json +13 -0
- package/dist/registry/create-media-query.json +13 -0
- package/dist/registry/create-mouse-position.json +13 -0
- package/dist/registry/create-network-status.json +13 -0
- package/dist/registry/create-orientation.json +13 -0
- package/dist/registry/create-pagination.json +13 -0
- package/dist/registry/create-permission.json +13 -0
- package/dist/registry/create-previous.json +13 -0
- package/dist/registry/create-resize-observer.json +13 -0
- package/dist/registry/create-scroll-into-view.json +13 -0
- package/dist/registry/create-scroll-position.json +13 -0
- package/dist/registry/create-storage.json +13 -0
- package/dist/registry/create-tauri-window.json +13 -0
- package/dist/registry/create-timer.json +13 -0
- package/dist/registry/create-tiptap-editor.json +34 -0
- package/dist/registry/create-undo-redo.json +13 -0
- package/dist/registry/create-web-notification.json +13 -0
- package/dist/registry/create-websocket.json +13 -0
- package/dist/registry/create-window-size.json +13 -0
- package/dist/registry/dialog.json +21 -0
- package/dist/registry/dropdown-menu.json +22 -0
- package/dist/registry/dropzone.json +21 -0
- package/dist/registry/empty.json +17 -0
- package/dist/registry/field.json +20 -0
- package/dist/registry/file-tree.json +21 -0
- package/dist/registry/footer.json +18 -0
- package/dist/registry/forgot-password-01.json +28 -0
- package/dist/registry/form-message.json +17 -0
- package/dist/registry/form.json +17 -0
- package/dist/registry/hero-01.json +22 -0
- package/dist/registry/hover-card.json +18 -0
- package/dist/registry/icon-button.json +20 -0
- package/dist/registry/index.json +1489 -0
- package/dist/registry/input-group.json +21 -0
- package/dist/registry/input.json +17 -0
- package/dist/registry/kbd.json +18 -0
- package/dist/registry/label.json +18 -0
- package/dist/registry/list.json +20 -0
- package/dist/registry/login-01.json +28 -0
- package/dist/registry/logo.json +17 -0
- package/dist/registry/marker.json +17 -0
- package/dist/registry/marquee.json +17 -0
- package/dist/registry/message.json +17 -0
- package/dist/registry/navbar.json +19 -0
- package/dist/registry/navigation-menu.json +22 -0
- package/dist/registry/number-input.json +24 -0
- package/dist/registry/otp-verification-01.json +26 -0
- package/dist/registry/package-manager-tabs.json +24 -0
- package/dist/registry/pager.json +21 -0
- package/dist/registry/pagination.json +22 -0
- package/dist/registry/pin-input.json +17 -0
- package/dist/registry/popover.json +22 -0
- package/dist/registry/progress.json +18 -0
- package/dist/registry/radio-group.json +18 -0
- package/dist/registry/rating.json +19 -0
- package/dist/registry/register-01.json +31 -0
- package/dist/registry/resizable.json +21 -0
- package/dist/registry/review-card.json +23 -0
- package/dist/registry/rich-text-editor.json +95 -0
- package/dist/registry/scroll-area.json +21 -0
- package/dist/registry/section-heading.json +21 -0
- package/dist/registry/select.json +22 -0
- package/dist/registry/separator.json +17 -0
- package/dist/registry/sheet.json +22 -0
- package/dist/registry/sidebar.json +24 -0
- package/dist/registry/skeleton.json +17 -0
- package/dist/registry/slider.json +18 -0
- package/dist/registry/spinner.json +18 -0
- package/dist/registry/stat.json +19 -0
- package/dist/registry/status.json +18 -0
- package/dist/registry/steps.json +20 -0
- package/dist/registry/switch.json +20 -0
- package/dist/registry/table-of-contents.json +23 -0
- package/dist/registry/table.json +17 -0
- package/dist/registry/tabs.json +20 -0
- package/dist/registry/textarea.json +17 -0
- package/dist/registry/theme-manager.json +39 -0
- package/dist/registry/timeline.json +18 -0
- package/dist/registry/titlebar-tabs.json +24 -0
- package/dist/registry/titlebar.json +26 -0
- package/dist/registry/toast.json +20 -0
- package/dist/registry/toggle-group.json +21 -0
- package/dist/registry/toggle.json +18 -0
- package/dist/registry/tooltip.json +18 -0
- package/dist/registry/updater-modal.json +26 -0
- package/dist/server/index.d.ts +18 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +526 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/plugin.d.ts +10 -0
- package/dist/server/plugin.d.ts.map +1 -0
- package/dist/server/plugin.js +271 -0
- package/dist/server/plugin.js.map +1 -0
- package/dist/themes/default/content/breadcrumbs.d.ts +4 -0
- package/dist/themes/default/content/breadcrumbs.d.ts.map +1 -0
- package/dist/themes/default/content/breadcrumbs.jsx +31 -0
- package/dist/themes/default/content/breadcrumbs.jsx.map +1 -0
- package/dist/themes/default/content/pager.d.ts +5 -0
- package/dist/themes/default/content/pager.d.ts.map +1 -0
- package/dist/themes/default/content/pager.jsx +9 -0
- package/dist/themes/default/content/pager.jsx.map +1 -0
- package/dist/themes/default/content/table-of-contents.d.ts +4 -0
- package/dist/themes/default/content/table-of-contents.d.ts.map +1 -0
- package/dist/themes/default/content/table-of-contents.jsx +19 -0
- package/dist/themes/default/content/table-of-contents.jsx.map +1 -0
- package/dist/themes/default/index.d.ts +11 -0
- package/dist/themes/default/index.d.ts.map +1 -0
- package/dist/themes/default/index.js +30 -0
- package/dist/themes/default/index.js.map +1 -0
- package/dist/themes/default/layout.d.ts +4 -0
- package/dist/themes/default/layout.d.ts.map +1 -0
- package/dist/themes/default/layout.jsx +75 -0
- package/dist/themes/default/layout.jsx.map +1 -0
- package/dist/themes/default/navbar.d.ts +4 -0
- package/dist/themes/default/navbar.d.ts.map +1 -0
- package/dist/themes/default/navbar.jsx +74 -0
- package/dist/themes/default/navbar.jsx.map +1 -0
- package/dist/themes/default/navigation/mobile-table-of-contents.d.ts +4 -0
- package/dist/themes/default/navigation/mobile-table-of-contents.d.ts.map +1 -0
- package/dist/themes/default/navigation/mobile-table-of-contents.jsx +22 -0
- package/dist/themes/default/navigation/mobile-table-of-contents.jsx.map +1 -0
- package/dist/themes/default/navigation/sidebar-tree.d.ts +8 -0
- package/dist/themes/default/navigation/sidebar-tree.d.ts.map +1 -0
- package/dist/themes/default/navigation/sidebar-tree.jsx +100 -0
- package/dist/themes/default/navigation/sidebar-tree.jsx.map +1 -0
- package/dist/themes/default/overlays/search-dialog.d.ts +4 -0
- package/dist/themes/default/overlays/search-dialog.d.ts.map +1 -0
- package/dist/themes/default/overlays/search-dialog.jsx +34 -0
- package/dist/themes/default/overlays/search-dialog.jsx.map +1 -0
- package/dist/themes/default/sidebar.d.ts +4 -0
- package/dist/themes/default/sidebar.d.ts.map +1 -0
- package/dist/themes/default/sidebar.jsx +60 -0
- package/dist/themes/default/sidebar.jsx.map +1 -0
- package/dist/themes/index.d.ts +4 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +5 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/themes/types.d.ts +83 -0
- package/dist/themes/types.d.ts.map +1 -0
- package/dist/themes/types.js +2 -0
- package/dist/themes/types.js.map +1 -0
- package/dist/types.d.ts +97 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/vendor/core-src/index.css +11 -0
- package/dist/vendor/core-src/index.ts +48 -0
- package/dist/vendor/core-src/lib/cn.ts +9 -0
- package/dist/vendor/core-src/registry/blocks/forgot-password-01.tsx +141 -0
- package/dist/vendor/core-src/registry/blocks/hero-01.tsx +28 -0
- package/dist/vendor/core-src/registry/blocks/login-01.tsx +231 -0
- package/dist/vendor/core-src/registry/blocks/otp-verification-01.tsx +170 -0
- package/dist/vendor/core-src/registry/blocks/register-01.tsx +318 -0
- package/dist/vendor/core-src/registry/components/ui/accordion.tsx +128 -0
- package/dist/vendor/core-src/registry/components/ui/alert.tsx +155 -0
- package/dist/vendor/core-src/registry/components/ui/api-table.tsx +117 -0
- package/dist/vendor/core-src/registry/components/ui/aspect-ratio.tsx +31 -0
- package/dist/vendor/core-src/registry/components/ui/avatar.tsx +114 -0
- package/dist/vendor/core-src/registry/components/ui/badge.tsx +56 -0
- package/dist/vendor/core-src/registry/components/ui/banner.tsx +187 -0
- package/dist/vendor/core-src/registry/components/ui/breadcrumb.tsx +136 -0
- package/dist/vendor/core-src/registry/components/ui/bubble.tsx +142 -0
- package/dist/vendor/core-src/registry/components/ui/button-group.tsx +42 -0
- package/dist/vendor/core-src/registry/components/ui/button.tsx +82 -0
- package/dist/vendor/core-src/registry/components/ui/callout.tsx +137 -0
- package/dist/vendor/core-src/registry/components/ui/card.tsx +113 -0
- package/dist/vendor/core-src/registry/components/ui/checkbox.tsx +74 -0
- package/dist/vendor/core-src/registry/components/ui/code-block.tsx +326 -0
- package/dist/vendor/core-src/registry/components/ui/code-group.tsx +105 -0
- package/dist/vendor/core-src/registry/components/ui/collapsible.tsx +73 -0
- package/dist/vendor/core-src/registry/components/ui/combobox.tsx +299 -0
- package/dist/vendor/core-src/registry/components/ui/command.tsx +378 -0
- package/dist/vendor/core-src/registry/components/ui/component-viewer.tsx +363 -0
- package/dist/vendor/core-src/registry/components/ui/container.tsx +45 -0
- package/dist/vendor/core-src/registry/components/ui/context-menu.tsx +237 -0
- package/dist/vendor/core-src/registry/components/ui/dialog.tsx +200 -0
- package/dist/vendor/core-src/registry/components/ui/dropdown-menu.tsx +298 -0
- package/dist/vendor/core-src/registry/components/ui/dropzone.tsx +189 -0
- package/dist/vendor/core-src/registry/components/ui/empty.tsx +83 -0
- package/dist/vendor/core-src/registry/components/ui/field.tsx +71 -0
- package/dist/vendor/core-src/registry/components/ui/file-tree.tsx +181 -0
- package/dist/vendor/core-src/registry/components/ui/footer.tsx +247 -0
- package/dist/vendor/core-src/registry/components/ui/form-message.tsx +36 -0
- package/dist/vendor/core-src/registry/components/ui/form.tsx +21 -0
- package/dist/vendor/core-src/registry/components/ui/hover-card.tsx +105 -0
- package/dist/vendor/core-src/registry/components/ui/icon-button.tsx +34 -0
- package/dist/vendor/core-src/registry/components/ui/input-group.tsx +80 -0
- package/dist/vendor/core-src/registry/components/ui/input.tsx +28 -0
- package/dist/vendor/core-src/registry/components/ui/kbd.tsx +73 -0
- package/dist/vendor/core-src/registry/components/ui/label.tsx +30 -0
- package/dist/vendor/core-src/registry/components/ui/list.tsx +222 -0
- package/dist/vendor/core-src/registry/components/ui/logo.tsx +68 -0
- package/dist/vendor/core-src/registry/components/ui/marker.tsx +102 -0
- package/dist/vendor/core-src/registry/components/ui/marquee.tsx +118 -0
- package/dist/vendor/core-src/registry/components/ui/message.tsx +168 -0
- package/dist/vendor/core-src/registry/components/ui/navbar.tsx +375 -0
- package/dist/vendor/core-src/registry/components/ui/navigation-menu.tsx +358 -0
- package/dist/vendor/core-src/registry/components/ui/number-input.tsx +150 -0
- package/dist/vendor/core-src/registry/components/ui/package-manager-tabs.tsx +226 -0
- package/dist/vendor/core-src/registry/components/ui/pager.tsx +102 -0
- package/dist/vendor/core-src/registry/components/ui/pagination.tsx +258 -0
- package/dist/vendor/core-src/registry/components/ui/pin-input.tsx +198 -0
- package/dist/vendor/core-src/registry/components/ui/popover.tsx +90 -0
- package/dist/vendor/core-src/registry/components/ui/progress.tsx +66 -0
- package/dist/vendor/core-src/registry/components/ui/radio-group.tsx +95 -0
- package/dist/vendor/core-src/registry/components/ui/rating.tsx +185 -0
- package/dist/vendor/core-src/registry/components/ui/resizable.tsx +195 -0
- package/dist/vendor/core-src/registry/components/ui/review-card.tsx +195 -0
- package/dist/vendor/core-src/registry/components/ui/rich-text-editor/bubble-menu.tsx +236 -0
- package/dist/vendor/core-src/registry/components/ui/rich-text-editor/editor.tsx +308 -0
- package/dist/vendor/core-src/registry/components/ui/rich-text-editor/extensions.ts +116 -0
- package/dist/vendor/core-src/registry/components/ui/rich-text-editor/footer.tsx +36 -0
- package/dist/vendor/core-src/registry/components/ui/rich-text-editor/image-dialog.tsx +75 -0
- package/dist/vendor/core-src/registry/components/ui/rich-text-editor/index.ts +11 -0
- package/dist/vendor/core-src/registry/components/ui/rich-text-editor/link-dialog.tsx +48 -0
- package/dist/vendor/core-src/registry/components/ui/rich-text-editor/markdown.ts +170 -0
- package/dist/vendor/core-src/registry/components/ui/rich-text-editor/slash-command.tsx +301 -0
- package/dist/vendor/core-src/registry/components/ui/rich-text-editor/table-controls.tsx +68 -0
- package/dist/vendor/core-src/registry/components/ui/rich-text-editor/toolbar.tsx +465 -0
- package/dist/vendor/core-src/registry/components/ui/rich-text-editor/use-editor.ts +231 -0
- package/dist/vendor/core-src/registry/components/ui/scroll-area.tsx +228 -0
- package/dist/vendor/core-src/registry/components/ui/section-heading.tsx +108 -0
- package/dist/vendor/core-src/registry/components/ui/select.tsx +156 -0
- package/dist/vendor/core-src/registry/components/ui/separator.tsx +37 -0
- package/dist/vendor/core-src/registry/components/ui/sheet.tsx +220 -0
- package/dist/vendor/core-src/registry/components/ui/sidebar.tsx +692 -0
- package/dist/vendor/core-src/registry/components/ui/skeleton.tsx +24 -0
- package/dist/vendor/core-src/registry/components/ui/slider.tsx +153 -0
- package/dist/vendor/core-src/registry/components/ui/spinner.tsx +41 -0
- package/dist/vendor/core-src/registry/components/ui/stat.tsx +245 -0
- package/dist/vendor/core-src/registry/components/ui/status.tsx +121 -0
- package/dist/vendor/core-src/registry/components/ui/steps.tsx +198 -0
- package/dist/vendor/core-src/registry/components/ui/switch.tsx +68 -0
- package/dist/vendor/core-src/registry/components/ui/table-of-contents.tsx +131 -0
- package/dist/vendor/core-src/registry/components/ui/table.tsx +160 -0
- package/dist/vendor/core-src/registry/components/ui/tabs.tsx +204 -0
- package/dist/vendor/core-src/registry/components/ui/textarea.tsx +82 -0
- package/dist/vendor/core-src/registry/components/ui/theme-toggle.tsx +238 -0
- package/dist/vendor/core-src/registry/components/ui/timeline.tsx +350 -0
- package/dist/vendor/core-src/registry/components/ui/titlebar-tabs.tsx +773 -0
- package/dist/vendor/core-src/registry/components/ui/titlebar.tsx +468 -0
- package/dist/vendor/core-src/registry/components/ui/toast.tsx +124 -0
- package/dist/vendor/core-src/registry/components/ui/toggle-group.tsx +203 -0
- package/dist/vendor/core-src/registry/components/ui/toggle.tsx +101 -0
- package/dist/vendor/core-src/registry/components/ui/tooltip.tsx +41 -0
- package/dist/vendor/core-src/registry/components/ui/updater-modal.tsx +254 -0
- package/dist/vendor/core-src/registry/index.ts +50 -0
- package/dist/vendor/core-src/registry/metadata.ts +742 -0
- package/dist/vendor/core-src/registry/providers/theme-provider.tsx +216 -0
- package/dist/vendor/core-src/registry/providers/theme-script.tsx +78 -0
- package/dist/vendor/core-src/registry/providers/theme-transitions.ts +139 -0
- package/dist/vendor/hooks-src/create-active-element.ts +51 -0
- package/dist/vendor/hooks-src/create-app-updater.ts +272 -0
- package/dist/vendor/hooks-src/create-audio-video.ts +444 -0
- package/dist/vendor/hooks-src/create-battery.ts +78 -0
- package/dist/vendor/hooks-src/create-chat-scroll.ts +113 -0
- package/dist/vendor/hooks-src/create-click-outside.ts +82 -0
- package/dist/vendor/hooks-src/create-clipboard.ts +69 -0
- package/dist/vendor/hooks-src/create-color-mode.ts +115 -0
- package/dist/vendor/hooks-src/create-controllable-signal.ts +56 -0
- package/dist/vendor/hooks-src/create-debounce.ts +90 -0
- package/dist/vendor/hooks-src/create-disclosure.ts +82 -0
- package/dist/vendor/hooks-src/create-document-tabs.ts +267 -0
- package/dist/vendor/hooks-src/create-document-title.ts +33 -0
- package/dist/vendor/hooks-src/create-drop-zone.ts +317 -0
- package/dist/vendor/hooks-src/create-event-source.ts +126 -0
- package/dist/vendor/hooks-src/create-favicon.ts +52 -0
- package/dist/vendor/hooks-src/create-fetch.ts +93 -0
- package/dist/vendor/hooks-src/create-focus-trap.ts +94 -0
- package/dist/vendor/hooks-src/create-form.ts +200 -0
- package/dist/vendor/hooks-src/create-fullscreen.ts +105 -0
- package/dist/vendor/hooks-src/create-geolocation.ts +140 -0
- package/dist/vendor/hooks-src/create-global-shortcut.ts +140 -0
- package/dist/vendor/hooks-src/create-hover.ts +88 -0
- package/dist/vendor/hooks-src/create-idle.ts +109 -0
- package/dist/vendor/hooks-src/create-infinite-scroll.ts +90 -0
- package/dist/vendor/hooks-src/create-input-mask.ts +109 -0
- package/dist/vendor/hooks-src/create-intersection-observer.ts +82 -0
- package/dist/vendor/hooks-src/create-keybindings.ts +148 -0
- package/dist/vendor/hooks-src/create-lock-scroll.ts +97 -0
- package/dist/vendor/hooks-src/create-long-press.ts +85 -0
- package/dist/vendor/hooks-src/create-media-query.ts +94 -0
- package/dist/vendor/hooks-src/create-mouse-position.ts +87 -0
- package/dist/vendor/hooks-src/create-network-status.ts +100 -0
- package/dist/vendor/hooks-src/create-orientation.ts +129 -0
- package/dist/vendor/hooks-src/create-pagination.ts +208 -0
- package/dist/vendor/hooks-src/create-permission.ts +91 -0
- package/dist/vendor/hooks-src/create-previous.ts +21 -0
- package/dist/vendor/hooks-src/create-resize-observer.ts +89 -0
- package/dist/vendor/hooks-src/create-scroll-into-view.ts +57 -0
- package/dist/vendor/hooks-src/create-scroll-position.ts +129 -0
- package/dist/vendor/hooks-src/create-storage.ts +106 -0
- package/dist/vendor/hooks-src/create-tauri-window.ts +628 -0
- package/dist/vendor/hooks-src/create-timer.ts +150 -0
- package/dist/vendor/hooks-src/create-tiptap-editor.ts +326 -0
- package/dist/vendor/hooks-src/create-undo-redo.ts +100 -0
- package/dist/vendor/hooks-src/create-web-notification.ts +111 -0
- package/dist/vendor/hooks-src/create-websocket.ts +179 -0
- package/dist/vendor/hooks-src/create-window-size.ts +41 -0
- package/dist/vendor/hooks-src/index.ts +48 -0
- 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;
|