@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,203 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createContext,
|
|
3
|
+
useContext,
|
|
4
|
+
splitProps,
|
|
5
|
+
type Component,
|
|
6
|
+
type JSX,
|
|
7
|
+
type Accessor,
|
|
8
|
+
} from "solid-js";
|
|
9
|
+
import { cva, type VariantProps } from "class-variance-authority";
|
|
10
|
+
import { createControllableSignal } from "@/hooks/create-controllable-signal";
|
|
11
|
+
import { cn } from "@/lib/cn";
|
|
12
|
+
|
|
13
|
+
export const toggleGroupItemVariants = cva(
|
|
14
|
+
"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer",
|
|
15
|
+
{
|
|
16
|
+
variants: {
|
|
17
|
+
variant: {
|
|
18
|
+
default: "bg-transparent",
|
|
19
|
+
outline:
|
|
20
|
+
"border border-border bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground data-[state=on]:bg-accent data-[state=on]:text-accent-foreground",
|
|
21
|
+
},
|
|
22
|
+
size: {
|
|
23
|
+
default: "h-9 px-3 min-w-9",
|
|
24
|
+
sm: "h-8 px-2 text-xs min-w-8",
|
|
25
|
+
lg: "h-10 px-3 min-w-10",
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
defaultVariants: {
|
|
29
|
+
variant: "default",
|
|
30
|
+
size: "default",
|
|
31
|
+
},
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
interface ToggleGroupContextValue {
|
|
36
|
+
type: "single" | "multiple";
|
|
37
|
+
value: Accessor<any>;
|
|
38
|
+
onItemSelect: (itemValue: string) => void;
|
|
39
|
+
variant: Accessor<"default" | "outline">;
|
|
40
|
+
size: Accessor<"default" | "sm" | "lg">;
|
|
41
|
+
disabled: Accessor<boolean>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const ToggleGroupContext = createContext<ToggleGroupContextValue>();
|
|
45
|
+
|
|
46
|
+
export interface ToggleGroupProps<T extends "single" | "multiple" = "single">
|
|
47
|
+
extends Omit<JSX.HTMLAttributes<HTMLDivElement>, "onChange">,
|
|
48
|
+
VariantProps<typeof toggleGroupItemVariants> {
|
|
49
|
+
/** Mode of selection: single choice or multiple choices */
|
|
50
|
+
type?: T;
|
|
51
|
+
/** Controlled value: string for 'single', string[] for 'multiple' */
|
|
52
|
+
value?: T extends "multiple" ? string[] : string;
|
|
53
|
+
/** Uncontrolled default value */
|
|
54
|
+
defaultValue?: T extends "multiple" ? string[] : string;
|
|
55
|
+
/** Callback fired when selection changes */
|
|
56
|
+
onChange?: (value: T extends "multiple" ? string[] : string) => void;
|
|
57
|
+
/** Layout orientation */
|
|
58
|
+
orientation?: "horizontal" | "vertical";
|
|
59
|
+
/** Disables all buttons in the group */
|
|
60
|
+
disabled?: boolean;
|
|
61
|
+
class?: string;
|
|
62
|
+
children?: JSX.Element;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Root container for grouping connected toggle items with shared single/multiple selection state.
|
|
67
|
+
*/
|
|
68
|
+
export const ToggleGroup = <T extends "single" | "multiple" = "single">(
|
|
69
|
+
props: ToggleGroupProps<T>
|
|
70
|
+
) => {
|
|
71
|
+
const [local, rest] = splitProps(props, [
|
|
72
|
+
"type",
|
|
73
|
+
"value",
|
|
74
|
+
"defaultValue",
|
|
75
|
+
"onChange",
|
|
76
|
+
"orientation",
|
|
77
|
+
"variant",
|
|
78
|
+
"size",
|
|
79
|
+
"disabled",
|
|
80
|
+
"class",
|
|
81
|
+
"children",
|
|
82
|
+
]);
|
|
83
|
+
|
|
84
|
+
const type = () => local.type ?? ("single" as T);
|
|
85
|
+
const variant = () => local.variant ?? "default";
|
|
86
|
+
const size = () => local.size ?? "default";
|
|
87
|
+
const disabled = () => local.disabled ?? false;
|
|
88
|
+
const orientation = () => local.orientation ?? "horizontal";
|
|
89
|
+
|
|
90
|
+
const [currentValue, setCurrentValue] = createControllableSignal<any>({
|
|
91
|
+
value: () => local.value,
|
|
92
|
+
defaultValue: local.defaultValue ?? (type() === "multiple" ? [] : undefined),
|
|
93
|
+
onChange: (val) => local.onChange?.(val),
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
const onItemSelect = (itemValue: string) => {
|
|
97
|
+
if (disabled()) return;
|
|
98
|
+
|
|
99
|
+
if (type() === "multiple") {
|
|
100
|
+
const currentList = Array.isArray(currentValue()) ? currentValue() : [];
|
|
101
|
+
if (currentList.includes(itemValue)) {
|
|
102
|
+
setCurrentValue(currentList.filter((v: string) => v !== itemValue));
|
|
103
|
+
} else {
|
|
104
|
+
setCurrentValue([...currentList, itemValue]);
|
|
105
|
+
}
|
|
106
|
+
} else {
|
|
107
|
+
const current = currentValue();
|
|
108
|
+
if (current === itemValue) {
|
|
109
|
+
setCurrentValue(undefined);
|
|
110
|
+
} else {
|
|
111
|
+
setCurrentValue(itemValue);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
const contextValue: ToggleGroupContextValue = {
|
|
117
|
+
type: type(),
|
|
118
|
+
value: currentValue,
|
|
119
|
+
onItemSelect,
|
|
120
|
+
variant,
|
|
121
|
+
size,
|
|
122
|
+
disabled,
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
return (
|
|
126
|
+
<ToggleGroupContext.Provider value={contextValue}>
|
|
127
|
+
<div
|
|
128
|
+
role="group"
|
|
129
|
+
data-orientation={orientation()}
|
|
130
|
+
class={cn(
|
|
131
|
+
"flex items-center justify-center gap-1 rounded-lg",
|
|
132
|
+
orientation() === "vertical" ? "flex-col" : "flex-row",
|
|
133
|
+
local.class
|
|
134
|
+
)}
|
|
135
|
+
{...rest}
|
|
136
|
+
>
|
|
137
|
+
{local.children}
|
|
138
|
+
</div>
|
|
139
|
+
</ToggleGroupContext.Provider>
|
|
140
|
+
);
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
export interface ToggleGroupItemProps
|
|
144
|
+
extends JSX.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
145
|
+
VariantProps<typeof toggleGroupItemVariants> {
|
|
146
|
+
/** Unique value representing this toggle item within the group */
|
|
147
|
+
value: string;
|
|
148
|
+
class?: string;
|
|
149
|
+
children?: JSX.Element;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Individual toggle button item within a ToggleGroup.
|
|
154
|
+
*/
|
|
155
|
+
export const ToggleGroupItem: Component<ToggleGroupItemProps> = (props) => {
|
|
156
|
+
const context = useContext(ToggleGroupContext);
|
|
157
|
+
|
|
158
|
+
if (!context) {
|
|
159
|
+
throw new Error("ToggleGroupItem must be used within a ToggleGroup");
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const [local, rest] = splitProps(props, [
|
|
163
|
+
"value",
|
|
164
|
+
"variant",
|
|
165
|
+
"size",
|
|
166
|
+
"disabled",
|
|
167
|
+
"class",
|
|
168
|
+
"children",
|
|
169
|
+
]);
|
|
170
|
+
|
|
171
|
+
const isSelected = () => {
|
|
172
|
+
const groupValue = context.value();
|
|
173
|
+
if (context.type === "multiple") {
|
|
174
|
+
return Array.isArray(groupValue) && groupValue.includes(local.value);
|
|
175
|
+
}
|
|
176
|
+
return groupValue === local.value;
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
const isDisabled = () => local.disabled || context.disabled();
|
|
180
|
+
const itemVariant = () => local.variant || context.variant();
|
|
181
|
+
const itemSize = () => local.size || context.size();
|
|
182
|
+
|
|
183
|
+
return (
|
|
184
|
+
<button
|
|
185
|
+
type="button"
|
|
186
|
+
role={context.type === "single" ? "radio" : "checkbox"}
|
|
187
|
+
aria-checked={isSelected()}
|
|
188
|
+
data-state={isSelected() ? "on" : "off"}
|
|
189
|
+
disabled={isDisabled()}
|
|
190
|
+
onClick={() => context.onItemSelect(local.value)}
|
|
191
|
+
class={cn(
|
|
192
|
+
toggleGroupItemVariants({
|
|
193
|
+
variant: itemVariant(),
|
|
194
|
+
size: itemSize(),
|
|
195
|
+
}),
|
|
196
|
+
local.class
|
|
197
|
+
)}
|
|
198
|
+
{...rest}
|
|
199
|
+
>
|
|
200
|
+
{local.children}
|
|
201
|
+
</button>
|
|
202
|
+
);
|
|
203
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { splitProps, type Component, type JSX } from "solid-js";
|
|
2
|
+
import { ToggleButton as KobalteToggle } from "@kobalte/core/toggle-button";
|
|
3
|
+
import { cva, type VariantProps } from "class-variance-authority";
|
|
4
|
+
import { cn } from "@/lib/cn";
|
|
5
|
+
|
|
6
|
+
export const toggleVariants = cva(
|
|
7
|
+
"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[pressed]:bg-accent data-[pressed]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer",
|
|
8
|
+
{
|
|
9
|
+
variants: {
|
|
10
|
+
variant: {
|
|
11
|
+
default: "bg-transparent",
|
|
12
|
+
outline:
|
|
13
|
+
"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground data-[pressed]:bg-accent data-[pressed]:text-accent-foreground",
|
|
14
|
+
},
|
|
15
|
+
size: {
|
|
16
|
+
default: "h-9 px-3 min-w-9",
|
|
17
|
+
sm: "h-8 px-2 text-xs min-w-8",
|
|
18
|
+
lg: "h-10 px-3 min-w-10",
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
defaultVariants: {
|
|
22
|
+
variant: "default",
|
|
23
|
+
size: "default",
|
|
24
|
+
},
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
export interface ToggleProps
|
|
29
|
+
extends JSX.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
30
|
+
VariantProps<typeof toggleVariants> {
|
|
31
|
+
pressed?: boolean;
|
|
32
|
+
defaultPressed?: boolean;
|
|
33
|
+
onPressedChange?: (pressed: boolean) => void;
|
|
34
|
+
disabled?: boolean;
|
|
35
|
+
class?: string;
|
|
36
|
+
children?: JSX.Element;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const Toggle: Component<ToggleProps> = (props) => {
|
|
40
|
+
const [local, rest] = splitProps(props, [
|
|
41
|
+
"variant",
|
|
42
|
+
"size",
|
|
43
|
+
"class",
|
|
44
|
+
"children",
|
|
45
|
+
"pressed",
|
|
46
|
+
"defaultPressed",
|
|
47
|
+
"onPressedChange",
|
|
48
|
+
"disabled",
|
|
49
|
+
"onChange",
|
|
50
|
+
]);
|
|
51
|
+
|
|
52
|
+
return (
|
|
53
|
+
<KobalteToggle
|
|
54
|
+
isPressed={local.pressed}
|
|
55
|
+
defaultIsPressed={local.defaultPressed}
|
|
56
|
+
onChange={local.onPressedChange}
|
|
57
|
+
disabled={local.disabled}
|
|
58
|
+
class={cn(
|
|
59
|
+
toggleVariants({ variant: local.variant, size: local.size }),
|
|
60
|
+
local.class
|
|
61
|
+
)}
|
|
62
|
+
{...rest}
|
|
63
|
+
>
|
|
64
|
+
{local.children}
|
|
65
|
+
</KobalteToggle>
|
|
66
|
+
);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export interface ToggleGroupProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
70
|
+
type?: "single" | "multiple";
|
|
71
|
+
value?: string | string[];
|
|
72
|
+
defaultValue?: string | string[];
|
|
73
|
+
onChange?: (value: any) => void;
|
|
74
|
+
disabled?: boolean;
|
|
75
|
+
class?: string;
|
|
76
|
+
children?: JSX.Element;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export const ToggleGroup: Component<ToggleGroupProps> = (props) => {
|
|
80
|
+
const [local, rest] = splitProps(props, [
|
|
81
|
+
"type",
|
|
82
|
+
"value",
|
|
83
|
+
"defaultValue",
|
|
84
|
+
"onChange",
|
|
85
|
+
"disabled",
|
|
86
|
+
"class",
|
|
87
|
+
"children",
|
|
88
|
+
]);
|
|
89
|
+
|
|
90
|
+
return (
|
|
91
|
+
<div
|
|
92
|
+
class={cn(
|
|
93
|
+
"flex items-center justify-center gap-1 rounded-md border border-border/40 p-1 bg-background",
|
|
94
|
+
local.class
|
|
95
|
+
)}
|
|
96
|
+
{...rest}
|
|
97
|
+
>
|
|
98
|
+
{local.children}
|
|
99
|
+
</div>
|
|
100
|
+
);
|
|
101
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { splitProps, type Component, type ComponentProps } from "solid-js";
|
|
2
|
+
import { Tooltip as KobalteTooltip } from "@kobalte/core/tooltip";
|
|
3
|
+
import { cn } from "@/lib/cn";
|
|
4
|
+
|
|
5
|
+
export const Tooltip = KobalteTooltip;
|
|
6
|
+
|
|
7
|
+
export const TooltipTrigger = KobalteTooltip.Trigger;
|
|
8
|
+
|
|
9
|
+
export const TooltipArrow: Component<ComponentProps<typeof KobalteTooltip.Arrow>> = (props) => {
|
|
10
|
+
const [local, rest] = splitProps(props, ["class"]);
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<KobalteTooltip.Arrow
|
|
14
|
+
size={8}
|
|
15
|
+
class={cn("fill-popover stroke-border", local.class)}
|
|
16
|
+
{...rest}
|
|
17
|
+
/>
|
|
18
|
+
);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export interface TooltipContentProps extends ComponentProps<typeof KobalteTooltip.Content> {
|
|
22
|
+
class?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const TooltipContent: Component<TooltipContentProps> = (props) => {
|
|
26
|
+
const [local, rest] = splitProps(props, ["class", "children"]);
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<KobalteTooltip.Portal>
|
|
30
|
+
<KobalteTooltip.Content
|
|
31
|
+
class={cn(
|
|
32
|
+
"z-50 rounded-md border border-border bg-popover px-3 py-1.5 text-xs text-popover-foreground shadow-md transition-all animate-in fade-in-0 zoom-in-95 data-closed:animate-out data-[closed]:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
33
|
+
local.class
|
|
34
|
+
)}
|
|
35
|
+
{...rest}
|
|
36
|
+
>
|
|
37
|
+
{local.children}
|
|
38
|
+
</KobalteTooltip.Content>
|
|
39
|
+
</KobalteTooltip.Portal>
|
|
40
|
+
);
|
|
41
|
+
};
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Show,
|
|
3
|
+
splitProps,
|
|
4
|
+
type Component,
|
|
5
|
+
type ParentComponent,
|
|
6
|
+
type JSX,
|
|
7
|
+
} from "solid-js";
|
|
8
|
+
import {
|
|
9
|
+
Dialog,
|
|
10
|
+
DialogContent,
|
|
11
|
+
DialogHeader,
|
|
12
|
+
DialogTitle,
|
|
13
|
+
DialogDescription,
|
|
14
|
+
DialogFooter,
|
|
15
|
+
} from "@/components/ui/dialog";
|
|
16
|
+
import { Button } from "@/components/ui/button";
|
|
17
|
+
import { Badge } from "@/components/ui/badge";
|
|
18
|
+
import { Progress } from "@/components/ui/progress";
|
|
19
|
+
import { Alert, AlertTitle, AlertDescription } from "@/components/ui/alert";
|
|
20
|
+
import type {
|
|
21
|
+
CreateAppUpdaterReturn,
|
|
22
|
+
UpdateManifestInfo,
|
|
23
|
+
UpdateProgressInfo,
|
|
24
|
+
} from "@/hooks/create-app-updater";
|
|
25
|
+
import {
|
|
26
|
+
Download,
|
|
27
|
+
RotateCcw,
|
|
28
|
+
CheckCircle2,
|
|
29
|
+
AlertTriangle,
|
|
30
|
+
ArrowRight,
|
|
31
|
+
Package,
|
|
32
|
+
} from "lucide-solid";
|
|
33
|
+
import { cn } from "@/lib/cn";
|
|
34
|
+
|
|
35
|
+
function formatBytes(bytes: number): string {
|
|
36
|
+
if (!bytes || bytes === 0) return "0 MB";
|
|
37
|
+
const mb = bytes / (1024 * 1024);
|
|
38
|
+
return `${mb.toFixed(1)} MB`;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* --- 1. Sub-components for Clean Modularity & Zero Repetition --- */
|
|
42
|
+
|
|
43
|
+
export interface UpdaterHeaderProps {
|
|
44
|
+
appName: string;
|
|
45
|
+
status: string;
|
|
46
|
+
info?: UpdateManifestInfo | null;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export const UpdaterHeader: Component<UpdaterHeaderProps> = (props) => (
|
|
50
|
+
<DialogHeader class="space-y-1.5 text-left">
|
|
51
|
+
<div class="flex items-center justify-between">
|
|
52
|
+
<div class="size-8 rounded-lg bg-primary/10 text-primary flex items-center justify-center">
|
|
53
|
+
<Package class="size-4" />
|
|
54
|
+
</div>
|
|
55
|
+
<Show when={props.info?.version}>
|
|
56
|
+
<div class="flex items-center gap-1.5 text-xs font-mono">
|
|
57
|
+
<span class="text-muted-foreground">{props.info?.currentVersion || "v1.0.0"}</span>
|
|
58
|
+
<ArrowRight class="size-3 text-muted-foreground" />
|
|
59
|
+
<Badge variant="default" class="text-xs px-1.5 py-0 bg-primary text-primary-foreground font-semibold">
|
|
60
|
+
{props.info?.version}
|
|
61
|
+
</Badge>
|
|
62
|
+
</div>
|
|
63
|
+
</Show>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<DialogTitle class="text-base font-bold tracking-tight text-foreground">
|
|
67
|
+
{props.status === "downloaded"
|
|
68
|
+
? "Update Ready to Install"
|
|
69
|
+
: props.status === "downloading"
|
|
70
|
+
? "Downloading Update..."
|
|
71
|
+
: props.status === "up-to-date"
|
|
72
|
+
? "Up to Date"
|
|
73
|
+
: `New Update Available for ${props.appName}`}
|
|
74
|
+
</DialogTitle>
|
|
75
|
+
|
|
76
|
+
<DialogDescription class="text-xs text-muted-foreground leading-relaxed">
|
|
77
|
+
{props.status === "downloaded"
|
|
78
|
+
? "The update has been downloaded and verified. Restart to apply changes."
|
|
79
|
+
: props.status === "downloading"
|
|
80
|
+
? "Please wait while update packages are being downloaded."
|
|
81
|
+
: props.status === "up-to-date"
|
|
82
|
+
? `${props.appName} is running on the latest version.`
|
|
83
|
+
: "A new version with features and bug fixes is ready to install."}
|
|
84
|
+
</DialogDescription>
|
|
85
|
+
</DialogHeader>
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
export interface UpdaterReleaseNotesProps {
|
|
89
|
+
body?: string;
|
|
90
|
+
date?: string;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export const UpdaterReleaseNotes: Component<UpdaterReleaseNotesProps> = (props) => (
|
|
94
|
+
<div class="space-y-1">
|
|
95
|
+
<div class="flex items-center justify-between text-xs text-muted-foreground font-medium">
|
|
96
|
+
<span>Release Notes</span>
|
|
97
|
+
<Show when={props.date}>
|
|
98
|
+
<span class="text-[11px] font-mono">{props.date}</span>
|
|
99
|
+
</Show>
|
|
100
|
+
</div>
|
|
101
|
+
<pre class="max-h-28 overflow-y-auto rounded-md border border-border bg-black/5 dark:bg-black/50 p-2.5 text-xs text-foreground font-mono whitespace-pre-wrap leading-relaxed select-text shadow-inner">
|
|
102
|
+
{props.body}
|
|
103
|
+
</pre>
|
|
104
|
+
</div>
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
export interface UpdaterProgressBarProps {
|
|
108
|
+
progress: UpdateProgressInfo;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export const UpdaterProgressBar: Component<UpdaterProgressBarProps> = (props) => (
|
|
112
|
+
<div class="space-y-1.5 py-1">
|
|
113
|
+
<div class="flex items-center justify-between text-xs font-mono">
|
|
114
|
+
<span class="text-muted-foreground font-sans">Progress</span>
|
|
115
|
+
<span class="font-semibold text-primary">{props.progress.percentage}%</span>
|
|
116
|
+
</div>
|
|
117
|
+
<Progress value={props.progress.percentage} class="h-1.5" />
|
|
118
|
+
<div class="flex items-center justify-between text-[11px] font-mono text-muted-foreground">
|
|
119
|
+
<span>{formatBytes(props.progress.downloaded)}</span>
|
|
120
|
+
<span>{formatBytes(props.progress.total)}</span>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
/* --- 2. Main UpdaterModal Compound Component --- */
|
|
126
|
+
|
|
127
|
+
export interface UpdaterModalProps {
|
|
128
|
+
open: boolean;
|
|
129
|
+
onOpenChange: (open: boolean) => void;
|
|
130
|
+
updater: CreateAppUpdaterReturn;
|
|
131
|
+
appName?: string;
|
|
132
|
+
class?: string;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export const UpdaterModal: Component<UpdaterModalProps> = (props) => {
|
|
136
|
+
const [local, rest] = splitProps(props, [
|
|
137
|
+
"open",
|
|
138
|
+
"onOpenChange",
|
|
139
|
+
"updater",
|
|
140
|
+
"appName",
|
|
141
|
+
"class",
|
|
142
|
+
]);
|
|
143
|
+
|
|
144
|
+
const appName = () => local.appName || "Nikala Desktop";
|
|
145
|
+
const status = () => local.updater.status();
|
|
146
|
+
const info = () => local.updater.updateInfo();
|
|
147
|
+
const progress = () => local.updater.progress();
|
|
148
|
+
const error = () => local.updater.error();
|
|
149
|
+
|
|
150
|
+
return (
|
|
151
|
+
<Dialog open={local.open} onOpenChange={local.onOpenChange}>
|
|
152
|
+
<DialogContent class={cn("sm:max-w-sm", local.class)}>
|
|
153
|
+
{/* Header */}
|
|
154
|
+
<UpdaterHeader
|
|
155
|
+
appName={appName()}
|
|
156
|
+
status={status()}
|
|
157
|
+
info={info()}
|
|
158
|
+
/>
|
|
159
|
+
|
|
160
|
+
{/* Error Alert */}
|
|
161
|
+
<Show when={error()}>
|
|
162
|
+
<Alert variant="destructive" class="py-2 text-xs">
|
|
163
|
+
<AlertTriangle class="size-3.5" />
|
|
164
|
+
<AlertTitle class="font-semibold text-xs">Update Failed</AlertTitle>
|
|
165
|
+
<AlertDescription class="text-[11px]">{error()}</AlertDescription>
|
|
166
|
+
</Alert>
|
|
167
|
+
</Show>
|
|
168
|
+
|
|
169
|
+
{/* Release Notes */}
|
|
170
|
+
<Show when={info()?.body && (status() === "available" || status() === "downloading")}>
|
|
171
|
+
<UpdaterReleaseNotes body={info()?.body} date={info()?.date} />
|
|
172
|
+
</Show>
|
|
173
|
+
|
|
174
|
+
{/* Progress Bar */}
|
|
175
|
+
<Show when={status() === "downloading"}>
|
|
176
|
+
<UpdaterProgressBar progress={progress()} />
|
|
177
|
+
</Show>
|
|
178
|
+
|
|
179
|
+
{/* Success Callout */}
|
|
180
|
+
<Show when={status() === "downloaded"}>
|
|
181
|
+
<div class="flex items-center gap-2.5 p-2.5 rounded-md border border-primary/30 bg-primary/5 text-xs text-foreground">
|
|
182
|
+
<CheckCircle2 class="size-4 text-primary shrink-0" />
|
|
183
|
+
<p class="font-medium text-foreground text-xs">Package downloaded & verified.</p>
|
|
184
|
+
</div>
|
|
185
|
+
</Show>
|
|
186
|
+
|
|
187
|
+
{/* Actions Footer */}
|
|
188
|
+
<DialogFooter class="flex-row items-center justify-end gap-1.5 pt-1">
|
|
189
|
+
<Show when={status() === "available" || status() === "error"}>
|
|
190
|
+
<Button
|
|
191
|
+
variant="outline"
|
|
192
|
+
size="sm"
|
|
193
|
+
onClick={() => local.onOpenChange(false)}
|
|
194
|
+
class="text-xs h-7.5 px-3 cursor-pointer"
|
|
195
|
+
>
|
|
196
|
+
Later
|
|
197
|
+
</Button>
|
|
198
|
+
<Button
|
|
199
|
+
variant="default"
|
|
200
|
+
size="sm"
|
|
201
|
+
onClick={() => local.updater.downloadAndInstall()}
|
|
202
|
+
class="text-xs h-7.5 px-3 gap-1.5 cursor-pointer font-medium"
|
|
203
|
+
>
|
|
204
|
+
<Download class="size-3.5" />
|
|
205
|
+
<span>Update Now</span>
|
|
206
|
+
</Button>
|
|
207
|
+
</Show>
|
|
208
|
+
|
|
209
|
+
<Show when={status() === "downloading"}>
|
|
210
|
+
<Button
|
|
211
|
+
variant="outline"
|
|
212
|
+
size="sm"
|
|
213
|
+
disabled
|
|
214
|
+
class="text-xs h-7.5 w-full opacity-70 justify-center"
|
|
215
|
+
>
|
|
216
|
+
Downloading ({progress().percentage}%)
|
|
217
|
+
</Button>
|
|
218
|
+
</Show>
|
|
219
|
+
|
|
220
|
+
<Show when={status() === "downloaded"}>
|
|
221
|
+
<Button
|
|
222
|
+
variant="outline"
|
|
223
|
+
size="sm"
|
|
224
|
+
onClick={() => local.onOpenChange(false)}
|
|
225
|
+
class="text-xs h-7.5 px-3 cursor-pointer"
|
|
226
|
+
>
|
|
227
|
+
Later
|
|
228
|
+
</Button>
|
|
229
|
+
<Button
|
|
230
|
+
variant="default"
|
|
231
|
+
size="sm"
|
|
232
|
+
onClick={() => local.updater.relaunch()}
|
|
233
|
+
class="text-xs h-7.5 px-3 gap-1.5 cursor-pointer font-semibold shadow-xs"
|
|
234
|
+
>
|
|
235
|
+
<RotateCcw class="size-3.5" />
|
|
236
|
+
<span>Relaunch</span>
|
|
237
|
+
</Button>
|
|
238
|
+
</Show>
|
|
239
|
+
|
|
240
|
+
<Show when={status() === "up-to-date" || status() === "idle"}>
|
|
241
|
+
<Button
|
|
242
|
+
variant="outline"
|
|
243
|
+
size="sm"
|
|
244
|
+
onClick={() => local.onOpenChange(false)}
|
|
245
|
+
class="text-xs h-7.5 px-3 cursor-pointer"
|
|
246
|
+
>
|
|
247
|
+
Close
|
|
248
|
+
</Button>
|
|
249
|
+
</Show>
|
|
250
|
+
</DialogFooter>
|
|
251
|
+
</DialogContent>
|
|
252
|
+
</Dialog>
|
|
253
|
+
);
|
|
254
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// src/registry/index.ts
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Represents a single file within a component registry item.
|
|
5
|
+
*/
|
|
6
|
+
export interface RegistryFile {
|
|
7
|
+
/** The target relative path where the file will be placed in the user's project (e.g., "ui/button.tsx") */
|
|
8
|
+
path: string;
|
|
9
|
+
/** The full raw text content of the file */
|
|
10
|
+
content: string;
|
|
11
|
+
/** The category type of the file */
|
|
12
|
+
type: "registry:ui" | "registry:util" | "registry:hook" | "registry:block";
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Represents the complete manifest structure for a single Nikala UI component.
|
|
17
|
+
*/
|
|
18
|
+
export interface RegistryItem {
|
|
19
|
+
/** The unique identifier name of the component (e.g., "button") */
|
|
20
|
+
name: string;
|
|
21
|
+
/** Display title for CLI prompts and documentation */
|
|
22
|
+
title: string;
|
|
23
|
+
/** Short summary describing the component */
|
|
24
|
+
description: string;
|
|
25
|
+
/** Component category type */
|
|
26
|
+
type: "registry:ui" | "registry:util" | "registry:hook" | "registry:block";
|
|
27
|
+
/** Required NPM dependencies to be installed automatically (e.g., ["clsx", "tailwind-merge"]) */
|
|
28
|
+
dependencies?: string[];
|
|
29
|
+
/** Internal Nikala UI component dependencies required by this component (e.g., ["button"]) */
|
|
30
|
+
registryDependencies?: string[];
|
|
31
|
+
/** Array of code files comprising this component */
|
|
32
|
+
files: RegistryFile[];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Lightweight metadata structure used for the central registry index list.
|
|
37
|
+
*/
|
|
38
|
+
export interface RegistryIndexItem {
|
|
39
|
+
name: string;
|
|
40
|
+
title: string;
|
|
41
|
+
description: string;
|
|
42
|
+
type: "registry:ui" | "registry:util" | "registry:hook" | "registry:block";
|
|
43
|
+
dependencies?: string[];
|
|
44
|
+
registryDependencies?: string[];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Type alias for the central registry index manifest.
|
|
49
|
+
*/
|
|
50
|
+
export type RegistryIndex = RegistryIndexItem[];
|