@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,318 @@
|
|
|
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 { Checkbox } from "../components/ui/checkbox";
|
|
17
|
+
import { Label } from "../components/ui/label";
|
|
18
|
+
import { Progress } from "../components/ui/progress";
|
|
19
|
+
import { Badge } from "../components/ui/badge";
|
|
20
|
+
import { Separator } from "../components/ui/separator";
|
|
21
|
+
import { Eye, EyeOff, Check, X, ArrowRight, ShieldCheck } from "lucide-solid";
|
|
22
|
+
|
|
23
|
+
export const Register01: Component = () => {
|
|
24
|
+
const [showPassword, setShowPassword] = createSignal(false);
|
|
25
|
+
|
|
26
|
+
const form = createForm({
|
|
27
|
+
initialValues: {
|
|
28
|
+
fullName: "",
|
|
29
|
+
email: "",
|
|
30
|
+
password: "",
|
|
31
|
+
agreeTerms: false,
|
|
32
|
+
},
|
|
33
|
+
validate: (values) => {
|
|
34
|
+
const errors: Record<string, string> = {};
|
|
35
|
+
if (!values.fullName.trim()) {
|
|
36
|
+
errors.fullName = "Full name is required";
|
|
37
|
+
}
|
|
38
|
+
if (!values.email.trim()) {
|
|
39
|
+
errors.email = "Email is required";
|
|
40
|
+
} else if (!values.email.includes("@")) {
|
|
41
|
+
errors.email = "Please enter a valid email address";
|
|
42
|
+
}
|
|
43
|
+
if (!values.password) {
|
|
44
|
+
errors.password = "Password is required";
|
|
45
|
+
} else if (values.password.length < 8) {
|
|
46
|
+
errors.password = "Password must be at least 8 characters";
|
|
47
|
+
}
|
|
48
|
+
if (!values.agreeTerms) {
|
|
49
|
+
errors.agreeTerms = "You must agree to the terms and privacy policy";
|
|
50
|
+
}
|
|
51
|
+
return errors;
|
|
52
|
+
},
|
|
53
|
+
onSubmit: async (values) => {
|
|
54
|
+
// Simulate API registration request
|
|
55
|
+
await new Promise((resolve) => setTimeout(resolve, 1200));
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
const password = () => form.values().password;
|
|
60
|
+
|
|
61
|
+
// Reactive password criteria calculations
|
|
62
|
+
const hasMinLength = () => password().length >= 8;
|
|
63
|
+
const hasNumber = () => /\d/.test(password());
|
|
64
|
+
const hasSpecial = () => /[^A-Za-z0-9]/.test(password());
|
|
65
|
+
const hasUpperLower = () => /[a-z]/.test(password()) && /[A-Z]/.test(password());
|
|
66
|
+
|
|
67
|
+
const strengthScore = () => {
|
|
68
|
+
let score = 0;
|
|
69
|
+
if (password().length === 0) return 0;
|
|
70
|
+
if (hasMinLength()) score += 25;
|
|
71
|
+
if (hasNumber()) score += 25;
|
|
72
|
+
if (hasSpecial()) score += 25;
|
|
73
|
+
if (hasUpperLower()) score += 25;
|
|
74
|
+
return score;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const strengthLabel = () => {
|
|
78
|
+
const score = strengthScore();
|
|
79
|
+
if (score === 0) return "None";
|
|
80
|
+
if (score <= 25) return "Weak";
|
|
81
|
+
if (score <= 50) return "Fair";
|
|
82
|
+
if (score <= 75) return "Good";
|
|
83
|
+
return "Strong";
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const strengthColorClass = () => {
|
|
87
|
+
const score = strengthScore();
|
|
88
|
+
if (score <= 25) return "bg-destructive";
|
|
89
|
+
if (score <= 50) return "bg-amber-500";
|
|
90
|
+
if (score <= 75) return "bg-blue-500";
|
|
91
|
+
return "bg-emerald-500";
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const strengthBadgeVariant = () => {
|
|
95
|
+
const score = strengthScore();
|
|
96
|
+
if (score <= 25) return "destructive";
|
|
97
|
+
if (score <= 50) return "outline";
|
|
98
|
+
return "secondary";
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const isFormValid = () =>
|
|
102
|
+
form.values().fullName.trim() !== "" &&
|
|
103
|
+
form.values().email.trim() !== "" &&
|
|
104
|
+
form.values().agreeTerms &&
|
|
105
|
+
strengthScore() >= 50;
|
|
106
|
+
|
|
107
|
+
return (
|
|
108
|
+
<div class="@container w-full min-h-[600px] flex items-center justify-center p-4 sm:p-6 md:p-10">
|
|
109
|
+
<Card class="w-full max-w-lg border-border shadow-md bg-card">
|
|
110
|
+
{/* Card Header */}
|
|
111
|
+
<CardHeader class="space-y-2 text-center pb-6">
|
|
112
|
+
<div class="mx-auto size-10 rounded-lg bg-primary/10 text-primary flex items-center justify-center mb-1">
|
|
113
|
+
<ShieldCheck class="size-5" />
|
|
114
|
+
</div>
|
|
115
|
+
<CardTitle class="text-2xl font-bold tracking-tight">Create your account</CardTitle>
|
|
116
|
+
<CardDescription class="text-xs sm:text-sm">
|
|
117
|
+
Join thousands of developers building fast SolidJS interfaces
|
|
118
|
+
</CardDescription>
|
|
119
|
+
</CardHeader>
|
|
120
|
+
|
|
121
|
+
<CardContent class="space-y-6">
|
|
122
|
+
{/* Social OAuth Buttons */}
|
|
123
|
+
<div class="grid grid-cols-1 @xs:grid-cols-2 gap-2.5">
|
|
124
|
+
<Button variant="outline" class="w-full justify-center text-xs h-9">
|
|
125
|
+
<svg class="size-4 mr-2 shrink-0" viewBox="0 0 24 24" fill="currentColor">
|
|
126
|
+
<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" />
|
|
127
|
+
</svg>
|
|
128
|
+
GitHub
|
|
129
|
+
</Button>
|
|
130
|
+
<Button variant="outline" class="w-full justify-center text-xs h-9">
|
|
131
|
+
<svg class="size-4 mr-2 shrink-0" viewBox="0 0 24 24">
|
|
132
|
+
<path
|
|
133
|
+
fill="#4285F4"
|
|
134
|
+
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"
|
|
135
|
+
/>
|
|
136
|
+
<path
|
|
137
|
+
fill="#34A853"
|
|
138
|
+
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"
|
|
139
|
+
/>
|
|
140
|
+
<path
|
|
141
|
+
fill="#FBBC05"
|
|
142
|
+
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"
|
|
143
|
+
/>
|
|
144
|
+
<path
|
|
145
|
+
fill="#EA4335"
|
|
146
|
+
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"
|
|
147
|
+
/>
|
|
148
|
+
</svg>
|
|
149
|
+
Google
|
|
150
|
+
</Button>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
<div class="relative">
|
|
154
|
+
<div class="absolute inset-0 flex items-center">
|
|
155
|
+
<Separator />
|
|
156
|
+
</div>
|
|
157
|
+
<div class="relative flex justify-center text-xs uppercase">
|
|
158
|
+
<span class="bg-card px-3 text-muted-foreground font-medium text-[11px]">
|
|
159
|
+
Or register with email
|
|
160
|
+
</span>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
|
|
164
|
+
{/* Registration Form with Nikala UI Form & Field ecosystem */}
|
|
165
|
+
<Form onSubmit={form.handleSubmit} loading={form.isSubmitting()} class="space-y-4">
|
|
166
|
+
<Field>
|
|
167
|
+
<FieldLabel for="reg-name" class="text-xs sm:text-sm">Full Name</FieldLabel>
|
|
168
|
+
<Input
|
|
169
|
+
id="reg-name"
|
|
170
|
+
type="text"
|
|
171
|
+
placeholder="Niko Pirosmani"
|
|
172
|
+
value={form.values().fullName}
|
|
173
|
+
onInput={form.handleChange("fullName")}
|
|
174
|
+
onBlur={form.handleBlur("fullName")}
|
|
175
|
+
autocomplete="name"
|
|
176
|
+
/>
|
|
177
|
+
<FormMessage form={form} name="fullName" />
|
|
178
|
+
</Field>
|
|
179
|
+
|
|
180
|
+
<Field>
|
|
181
|
+
<FieldLabel for="reg-email" class="text-xs sm:text-sm">Email Address</FieldLabel>
|
|
182
|
+
<Input
|
|
183
|
+
id="reg-email"
|
|
184
|
+
type="email"
|
|
185
|
+
placeholder="niko@nikala.dev"
|
|
186
|
+
value={form.values().email}
|
|
187
|
+
onInput={form.handleChange("email")}
|
|
188
|
+
onBlur={form.handleBlur("email")}
|
|
189
|
+
autocomplete="email"
|
|
190
|
+
/>
|
|
191
|
+
<FormMessage form={form} name="email" />
|
|
192
|
+
</Field>
|
|
193
|
+
|
|
194
|
+
{/* Password with Strength Meter */}
|
|
195
|
+
<Field class="space-y-1.5">
|
|
196
|
+
<div class="flex items-center justify-between">
|
|
197
|
+
<FieldLabel for="reg-password" class="text-xs sm:text-sm">Password</FieldLabel>
|
|
198
|
+
<Show when={password().length > 0}>
|
|
199
|
+
<Badge variant={strengthBadgeVariant()} class="text-[10px] px-1.5 py-0 font-mono">
|
|
200
|
+
{strengthLabel()}
|
|
201
|
+
</Badge>
|
|
202
|
+
</Show>
|
|
203
|
+
</div>
|
|
204
|
+
|
|
205
|
+
<div class="relative">
|
|
206
|
+
<Input
|
|
207
|
+
id="reg-password"
|
|
208
|
+
type={showPassword() ? "text" : "password"}
|
|
209
|
+
placeholder="Create a strong password"
|
|
210
|
+
value={form.values().password}
|
|
211
|
+
onInput={form.handleChange("password")}
|
|
212
|
+
onBlur={form.handleBlur("password")}
|
|
213
|
+
autocomplete="new-password"
|
|
214
|
+
class="pr-10"
|
|
215
|
+
/>
|
|
216
|
+
<button
|
|
217
|
+
type="button"
|
|
218
|
+
onClick={() => setShowPassword(!showPassword())}
|
|
219
|
+
class="absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors p-1 cursor-pointer"
|
|
220
|
+
aria-label={showPassword() ? "Hide password" : "Show password"}
|
|
221
|
+
>
|
|
222
|
+
<Show when={showPassword()} fallback={<Eye class="size-4" />}>
|
|
223
|
+
<EyeOff class="size-4" />
|
|
224
|
+
</Show>
|
|
225
|
+
</button>
|
|
226
|
+
</div>
|
|
227
|
+
<FormMessage form={form} name="password" />
|
|
228
|
+
|
|
229
|
+
{/* Reactive Password Strength Progress Bar */}
|
|
230
|
+
<Show when={password().length > 0}>
|
|
231
|
+
<Progress
|
|
232
|
+
value={strengthScore()}
|
|
233
|
+
class="h-1.5 mt-2"
|
|
234
|
+
indicatorClass={strengthColorClass()}
|
|
235
|
+
/>
|
|
236
|
+
|
|
237
|
+
{/* Validation Checklist */}
|
|
238
|
+
<div class="grid grid-cols-2 gap-1.5 pt-1 text-[11px] text-muted-foreground">
|
|
239
|
+
<div class={`flex items-center gap-1.5 ${hasMinLength() ? "text-emerald-500 font-medium" : ""}`}>
|
|
240
|
+
<Show when={hasMinLength()} fallback={<X class="size-3 text-muted-foreground/60" />}>
|
|
241
|
+
<Check class="size-3" />
|
|
242
|
+
</Show>
|
|
243
|
+
<span>8+ characters</span>
|
|
244
|
+
</div>
|
|
245
|
+
<div class={`flex items-center gap-1.5 ${hasNumber() ? "text-emerald-500 font-medium" : ""}`}>
|
|
246
|
+
<Show when={hasNumber()} fallback={<X class="size-3 text-muted-foreground/60" />}>
|
|
247
|
+
<Check class="size-3" />
|
|
248
|
+
</Show>
|
|
249
|
+
<span>At least 1 number</span>
|
|
250
|
+
</div>
|
|
251
|
+
<div class={`flex items-center gap-1.5 ${hasUpperLower() ? "text-emerald-500 font-medium" : ""}`}>
|
|
252
|
+
<Show when={hasUpperLower()} fallback={<X class="size-3 text-muted-foreground/60" />}>
|
|
253
|
+
<Check class="size-3" />
|
|
254
|
+
</Show>
|
|
255
|
+
<span>Uppercase & lowercase</span>
|
|
256
|
+
</div>
|
|
257
|
+
<div class={`flex items-center gap-1.5 ${hasSpecial() ? "text-emerald-500 font-medium" : ""}`}>
|
|
258
|
+
<Show when={hasSpecial()} fallback={<X class="size-3 text-muted-foreground/60" />}>
|
|
259
|
+
<Check class="size-3" />
|
|
260
|
+
</Show>
|
|
261
|
+
<span>1 special symbol</span>
|
|
262
|
+
</div>
|
|
263
|
+
</div>
|
|
264
|
+
</Show>
|
|
265
|
+
</Field>
|
|
266
|
+
|
|
267
|
+
{/* Terms of Service Agreement */}
|
|
268
|
+
<div class="space-y-1 pt-1">
|
|
269
|
+
<div class="flex items-start space-x-2.5">
|
|
270
|
+
<Checkbox
|
|
271
|
+
id="reg-terms"
|
|
272
|
+
checked={form.values().agreeTerms}
|
|
273
|
+
onChange={(checked) => form.setFieldValue("agreeTerms", checked)}
|
|
274
|
+
class="mt-0.5"
|
|
275
|
+
/>
|
|
276
|
+
<Label
|
|
277
|
+
for="reg-terms"
|
|
278
|
+
class="text-xs font-normal text-muted-foreground cursor-pointer select-none leading-tight"
|
|
279
|
+
>
|
|
280
|
+
I agree to the{" "}
|
|
281
|
+
<a href="#terms" class="text-primary font-medium underline hover:text-primary/80">
|
|
282
|
+
Terms of Service
|
|
283
|
+
</a>{" "}
|
|
284
|
+
and{" "}
|
|
285
|
+
<a href="#privacy" class="text-primary font-medium underline hover:text-primary/80">
|
|
286
|
+
Privacy Policy
|
|
287
|
+
</a>.
|
|
288
|
+
</Label>
|
|
289
|
+
</div>
|
|
290
|
+
<FormMessage form={form} name="agreeTerms" />
|
|
291
|
+
</div>
|
|
292
|
+
|
|
293
|
+
{/* Submit Button */}
|
|
294
|
+
<Button
|
|
295
|
+
type="submit"
|
|
296
|
+
class="w-full mt-3 font-medium"
|
|
297
|
+
disabled={form.isSubmitting() || !isFormValid()}
|
|
298
|
+
>
|
|
299
|
+
<Show when={form.isSubmitting()} fallback={<>Create Account <ArrowRight class="ml-2 size-4" /></>}>
|
|
300
|
+
Creating account...
|
|
301
|
+
</Show>
|
|
302
|
+
</Button>
|
|
303
|
+
</Form>
|
|
304
|
+
</CardContent>
|
|
305
|
+
|
|
306
|
+
{/* Card Footer */}
|
|
307
|
+
<CardFooter class="justify-center border-t border-border/50 py-4 text-xs text-muted-foreground">
|
|
308
|
+
Already have an account?{" "}
|
|
309
|
+
<a href="/blocks/login-01" class="text-primary font-semibold hover:underline ml-1">
|
|
310
|
+
Sign in
|
|
311
|
+
</a>
|
|
312
|
+
</CardFooter>
|
|
313
|
+
</Card>
|
|
314
|
+
</div>
|
|
315
|
+
);
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
export default Register01;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { splitProps, type JSX, type ValidComponent } from "solid-js";
|
|
2
|
+
import * as AccordionPrimitive from "@kobalte/core/accordion";
|
|
3
|
+
import type { PolymorphicProps } from "@kobalte/core/polymorphic";
|
|
4
|
+
import { cn } from "@/lib/cn";
|
|
5
|
+
|
|
6
|
+
export type AccordionRootProps<T extends ValidComponent = "div"> = Omit<
|
|
7
|
+
AccordionPrimitive.AccordionRootProps<T>,
|
|
8
|
+
"value" | "defaultValue"
|
|
9
|
+
> & {
|
|
10
|
+
/** Accordion mode: "single" allows one open item, "multiple" allows many */
|
|
11
|
+
type?: "single" | "multiple";
|
|
12
|
+
/** Controlled value (single string or array of strings) */
|
|
13
|
+
value?: string | string[];
|
|
14
|
+
/** Default initial value (single string or array of strings) */
|
|
15
|
+
defaultValue?: string | string[];
|
|
16
|
+
class?: string;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Root Accordion component built on top of Kobalte headless primitives.
|
|
21
|
+
*/
|
|
22
|
+
export const Accordion = <T extends ValidComponent = "div">(
|
|
23
|
+
props: PolymorphicProps<T, AccordionRootProps<T>>
|
|
24
|
+
) => {
|
|
25
|
+
const [local, rest] = splitProps(props as AccordionRootProps, [
|
|
26
|
+
"class",
|
|
27
|
+
"type",
|
|
28
|
+
"multiple",
|
|
29
|
+
]);
|
|
30
|
+
|
|
31
|
+
// Support both `type="multiple"` and `multiple={true}`
|
|
32
|
+
const isMultiple = () => local.multiple ?? local.type === "multiple";
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<AccordionPrimitive.Root
|
|
36
|
+
multiple={isMultiple()}
|
|
37
|
+
class={cn("w-full divide-y divide-border", local.class)}
|
|
38
|
+
{...(rest as any)}
|
|
39
|
+
/>
|
|
40
|
+
);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export type AccordionItemProps<T extends ValidComponent = "div"> =
|
|
44
|
+
AccordionPrimitive.AccordionItemProps<T> & {
|
|
45
|
+
class?: string;
|
|
46
|
+
value: string;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Individual Accordion section item wrapper.
|
|
51
|
+
*/
|
|
52
|
+
export const AccordionItem = <T extends ValidComponent = "div">(
|
|
53
|
+
props: PolymorphicProps<T, AccordionItemProps<T>>
|
|
54
|
+
) => {
|
|
55
|
+
const [local, rest] = splitProps(props as AccordionItemProps, ["class"]);
|
|
56
|
+
|
|
57
|
+
return (
|
|
58
|
+
<AccordionPrimitive.Item
|
|
59
|
+
class={cn("border-b border-border", local.class)}
|
|
60
|
+
{...rest}
|
|
61
|
+
/>
|
|
62
|
+
);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export type AccordionTriggerProps<T extends ValidComponent = "button"> =
|
|
66
|
+
AccordionPrimitive.AccordionTriggerProps<T> & {
|
|
67
|
+
class?: string;
|
|
68
|
+
children?: JSX.Element;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Header trigger button toggling the expansion of an AccordionItem.
|
|
73
|
+
*/
|
|
74
|
+
export const AccordionTrigger = <T extends ValidComponent = "button">(
|
|
75
|
+
props: PolymorphicProps<T, AccordionTriggerProps<T>>
|
|
76
|
+
) => {
|
|
77
|
+
const [local, rest] = splitProps(props as AccordionTriggerProps, ["class", "children"]);
|
|
78
|
+
|
|
79
|
+
return (
|
|
80
|
+
<AccordionPrimitive.Header class="flex">
|
|
81
|
+
<AccordionPrimitive.Trigger
|
|
82
|
+
class={cn(
|
|
83
|
+
"flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline [&[data-expanded]>svg]:rotate-180 cursor-pointer text-foreground",
|
|
84
|
+
local.class
|
|
85
|
+
)}
|
|
86
|
+
{...rest}
|
|
87
|
+
>
|
|
88
|
+
{local.children}
|
|
89
|
+
<svg
|
|
90
|
+
class="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200"
|
|
91
|
+
viewBox="0 0 24 24"
|
|
92
|
+
fill="none"
|
|
93
|
+
stroke="currentColor"
|
|
94
|
+
stroke-width="2"
|
|
95
|
+
>
|
|
96
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7" />
|
|
97
|
+
</svg>
|
|
98
|
+
</AccordionPrimitive.Trigger>
|
|
99
|
+
</AccordionPrimitive.Header>
|
|
100
|
+
);
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export type AccordionContentProps<T extends ValidComponent = "div"> =
|
|
104
|
+
AccordionPrimitive.AccordionContentProps<T> & {
|
|
105
|
+
class?: string;
|
|
106
|
+
children?: JSX.Element;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Collapsible content panel revealed when the associated AccordionItem is open.
|
|
111
|
+
*/
|
|
112
|
+
export const AccordionContent = <T extends ValidComponent = "div">(
|
|
113
|
+
props: PolymorphicProps<T, AccordionContentProps<T>>
|
|
114
|
+
) => {
|
|
115
|
+
const [local, rest] = splitProps(props as AccordionContentProps, ["class", "children"]);
|
|
116
|
+
|
|
117
|
+
return (
|
|
118
|
+
<AccordionPrimitive.Content
|
|
119
|
+
class={cn(
|
|
120
|
+
"overflow-hidden text-sm text-muted-foreground transition-all",
|
|
121
|
+
local.class
|
|
122
|
+
)}
|
|
123
|
+
{...rest}
|
|
124
|
+
>
|
|
125
|
+
<div class="pb-4 pt-0">{local.children}</div>
|
|
126
|
+
</AccordionPrimitive.Content>
|
|
127
|
+
);
|
|
128
|
+
};
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createSignal,
|
|
3
|
+
splitProps,
|
|
4
|
+
onMount,
|
|
5
|
+
onCleanup,
|
|
6
|
+
Show,
|
|
7
|
+
type Component,
|
|
8
|
+
type JSX,
|
|
9
|
+
} from "solid-js";
|
|
10
|
+
import { cva, type VariantProps } from "class-variance-authority";
|
|
11
|
+
import { cn } from "@/lib/cn";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* CVA variants for Alert status styles and color themes.
|
|
15
|
+
*/
|
|
16
|
+
export const alertVariants = cva(
|
|
17
|
+
"relative w-full rounded-lg border p-4 transition-all duration-200 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",
|
|
18
|
+
{
|
|
19
|
+
variants: {
|
|
20
|
+
variant: {
|
|
21
|
+
default:
|
|
22
|
+
"bg-background text-foreground border-border",
|
|
23
|
+
info:
|
|
24
|
+
"bg-blue-50 text-blue-900 border-blue-200 dark:bg-blue-950/50 dark:text-blue-200 dark:border-blue-900/50",
|
|
25
|
+
success:
|
|
26
|
+
"bg-emerald-50 text-emerald-900 border-emerald-200 dark:bg-emerald-950/50 dark:text-emerald-200 dark:border-emerald-900/50",
|
|
27
|
+
warning:
|
|
28
|
+
"bg-amber-50 text-amber-900 border-amber-200 dark:bg-amber-950/50 dark:text-amber-200 dark:border-amber-950/50",
|
|
29
|
+
destructive:
|
|
30
|
+
"bg-destructive/15 text-destructive border-destructive/30",
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
defaultVariants: {
|
|
34
|
+
variant: "default",
|
|
35
|
+
},
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
export interface AlertProps
|
|
40
|
+
extends JSX.HTMLAttributes<HTMLDivElement>,
|
|
41
|
+
VariantProps<typeof alertVariants> {
|
|
42
|
+
/** Display an interactive close (X) button */
|
|
43
|
+
closable?: boolean;
|
|
44
|
+
/** Auto-dismiss timer duration in milliseconds */
|
|
45
|
+
duration?: number;
|
|
46
|
+
/** Callback fired when the alert is dismissed */
|
|
47
|
+
onClose?: () => void;
|
|
48
|
+
class?: string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Nikala UI Alert notification banner with auto-dismiss timer and theme variants.
|
|
53
|
+
*/
|
|
54
|
+
export const Alert: Component<AlertProps> = (props) => {
|
|
55
|
+
const [local, rest] = splitProps(props, [
|
|
56
|
+
"variant",
|
|
57
|
+
"closable",
|
|
58
|
+
"duration",
|
|
59
|
+
"onClose",
|
|
60
|
+
"class",
|
|
61
|
+
"children",
|
|
62
|
+
]);
|
|
63
|
+
|
|
64
|
+
const [isVisible, setIsVisible] = createSignal(true);
|
|
65
|
+
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
66
|
+
|
|
67
|
+
const handleClose = () => {
|
|
68
|
+
setIsVisible(false);
|
|
69
|
+
if (typeof local.onClose === "function") {
|
|
70
|
+
local.onClose();
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
onMount(() => {
|
|
75
|
+
if (local.duration && local.duration > 0) {
|
|
76
|
+
timer = setTimeout(() => {
|
|
77
|
+
handleClose();
|
|
78
|
+
}, local.duration);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
onCleanup(() => {
|
|
83
|
+
if (timer) clearTimeout(timer);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
return (
|
|
87
|
+
<Show when={isVisible()}>
|
|
88
|
+
<div
|
|
89
|
+
role="alert"
|
|
90
|
+
class={cn(
|
|
91
|
+
alertVariants({ variant: local.variant }),
|
|
92
|
+
"animate-in fade-in-0 duration-200",
|
|
93
|
+
local.class
|
|
94
|
+
)}
|
|
95
|
+
{...rest}
|
|
96
|
+
>
|
|
97
|
+
{local.children}
|
|
98
|
+
<Show when={local.closable || typeof local.onClose === "function"}>
|
|
99
|
+
<button
|
|
100
|
+
type="button"
|
|
101
|
+
aria-label="Close alert"
|
|
102
|
+
onClick={handleClose}
|
|
103
|
+
class="absolute right-3 top-3 rounded-md p-1 text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-50 transition-colors cursor-pointer"
|
|
104
|
+
>
|
|
105
|
+
<svg
|
|
106
|
+
class="h-4 w-4"
|
|
107
|
+
viewBox="0 0 24 24"
|
|
108
|
+
fill="none"
|
|
109
|
+
stroke="currentColor"
|
|
110
|
+
stroke-width="2"
|
|
111
|
+
>
|
|
112
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
|
|
113
|
+
</svg>
|
|
114
|
+
</button>
|
|
115
|
+
</Show>
|
|
116
|
+
</div>
|
|
117
|
+
</Show>
|
|
118
|
+
);
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export interface AlertTitleProps extends JSX.HTMLAttributes<HTMLHeadingElement> {
|
|
122
|
+
class?: string;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Header title element for the Alert banner.
|
|
127
|
+
*/
|
|
128
|
+
export const AlertTitle: Component<AlertTitleProps> = (props) => {
|
|
129
|
+
const [local, rest] = splitProps(props, ["class"]);
|
|
130
|
+
|
|
131
|
+
return (
|
|
132
|
+
<h5
|
|
133
|
+
class={cn("mb-1 font-medium leading-none tracking-tight text-foreground", local.class)}
|
|
134
|
+
{...rest}
|
|
135
|
+
/>
|
|
136
|
+
);
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
export interface AlertDescriptionProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
140
|
+
class?: string;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Body text content for the Alert banner.
|
|
145
|
+
*/
|
|
146
|
+
export const AlertDescription: Component<AlertDescriptionProps> = (props) => {
|
|
147
|
+
const [local, rest] = splitProps(props, ["class"]);
|
|
148
|
+
|
|
149
|
+
return (
|
|
150
|
+
<div
|
|
151
|
+
class={cn("text-sm [&_p]:leading-relaxed text-muted-foreground", local.class)}
|
|
152
|
+
{...rest}
|
|
153
|
+
/>
|
|
154
|
+
);
|
|
155
|
+
};
|