kynjal-cli 2.0.6
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/LICENSE +21 -0
- package/README.md +145 -0
- package/bin/kynjal.js +27 -0
- package/dist/commands/add.d.ts +11 -0
- package/dist/commands/add.js +295 -0
- package/dist/commands/convex.d.ts +11 -0
- package/dist/commands/convex.js +319 -0
- package/dist/commands/init.d.ts +13 -0
- package/dist/commands/init.js +340 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +61 -0
- package/dist/index.test.d.ts +1 -0
- package/dist/index.test.js +6 -0
- package/dist/registry/accordion.d.ts +139 -0
- package/dist/registry/accordion.js +164 -0
- package/dist/registry/accordion.ts +183 -0
- package/dist/registry/action-sheet.d.ts +138 -0
- package/dist/registry/action-sheet.js +164 -0
- package/dist/registry/action-sheet.ts +182 -0
- package/dist/registry/alert-dialog.d.ts +71 -0
- package/dist/registry/alert-dialog.js +88 -0
- package/dist/registry/alert-dialog.ts +97 -0
- package/dist/registry/alert.d.ts +172 -0
- package/dist/registry/alert.js +204 -0
- package/dist/registry/alert.ts +225 -0
- package/dist/registry/audio-player.d.ts +139 -0
- package/dist/registry/audio-player.js +165 -0
- package/dist/registry/audio-player.ts +183 -0
- package/dist/registry/audio-recorder.d.ts +156 -0
- package/dist/registry/audio-recorder.js +184 -0
- package/dist/registry/audio-recorder.ts +203 -0
- package/dist/registry/audio-waveform.d.ts +121 -0
- package/dist/registry/audio-waveform.js +144 -0
- package/dist/registry/audio-waveform.ts +165 -0
- package/dist/registry/avatar.d.ts +139 -0
- package/dist/registry/avatar.js +164 -0
- package/dist/registry/avatar.ts +172 -0
- package/dist/registry/avoid-keyboard.d.ts +128 -0
- package/dist/registry/avoid-keyboard.js +150 -0
- package/dist/registry/avoid-keyboard.ts +165 -0
- package/dist/registry/badge.d.ts +139 -0
- package/dist/registry/badge.js +164 -0
- package/dist/registry/badge.ts +172 -0
- package/dist/registry/bottom-sheet.d.ts +156 -0
- package/dist/registry/bottom-sheet.js +184 -0
- package/dist/registry/bottom-sheet.ts +203 -0
- package/dist/registry/button.d.ts +173 -0
- package/dist/registry/button.js +209 -0
- package/dist/registry/button.ts +230 -0
- package/dist/registry/camera-preview.d.ts +37 -0
- package/dist/registry/camera-preview.js +56 -0
- package/dist/registry/camera-preview.ts +61 -0
- package/dist/registry/camera.d.ts +139 -0
- package/dist/registry/camera.js +168 -0
- package/dist/registry/camera.ts +185 -0
- package/dist/registry/card.d.ts +139 -0
- package/dist/registry/card.js +165 -0
- package/dist/registry/card.ts +173 -0
- package/dist/registry/carousel.d.ts +140 -0
- package/dist/registry/carousel.js +169 -0
- package/dist/registry/carousel.ts +186 -0
- package/dist/registry/charts/area-chart.d.ts +88 -0
- package/dist/registry/charts/area-chart.js +106 -0
- package/dist/registry/charts/area-chart.ts +117 -0
- package/dist/registry/charts/bar-chart.d.ts +71 -0
- package/dist/registry/charts/bar-chart.js +85 -0
- package/dist/registry/charts/bar-chart.ts +94 -0
- package/dist/registry/charts/bubble-chart.d.ts +88 -0
- package/dist/registry/charts/bubble-chart.js +109 -0
- package/dist/registry/charts/bubble-chart.ts +120 -0
- package/dist/registry/charts/candlestick-chart.d.ts +88 -0
- package/dist/registry/charts/candlestick-chart.js +109 -0
- package/dist/registry/charts/candlestick-chart.ts +125 -0
- package/dist/registry/charts/chart-container.d.ts +54 -0
- package/dist/registry/charts/chart-container.js +62 -0
- package/dist/registry/charts/chart-container.ts +71 -0
- package/dist/registry/charts/column-chart.d.ts +88 -0
- package/dist/registry/charts/column-chart.js +106 -0
- package/dist/registry/charts/column-chart.ts +117 -0
- package/dist/registry/charts/doughnut-chart.d.ts +88 -0
- package/dist/registry/charts/doughnut-chart.js +106 -0
- package/dist/registry/charts/doughnut-chart.ts +121 -0
- package/dist/registry/charts/heatmap-chart.d.ts +88 -0
- package/dist/registry/charts/heatmap-chart.js +106 -0
- package/dist/registry/charts/heatmap-chart.ts +117 -0
- package/dist/registry/charts/index.d.ts +1499 -0
- package/dist/registry/charts/index.js +38 -0
- package/dist/registry/charts/index.ts +39 -0
- package/dist/registry/charts/line-chart.d.ts +88 -0
- package/dist/registry/charts/line-chart.js +109 -0
- package/dist/registry/charts/line-chart.ts +120 -0
- package/dist/registry/charts/pie-chart.d.ts +88 -0
- package/dist/registry/charts/pie-chart.js +106 -0
- package/dist/registry/charts/pie-chart.ts +117 -0
- package/dist/registry/charts/polar-area-chart.d.ts +88 -0
- package/dist/registry/charts/polar-area-chart.js +106 -0
- package/dist/registry/charts/polar-area-chart.ts +121 -0
- package/dist/registry/charts/progress-ring-chart.d.ts +88 -0
- package/dist/registry/charts/progress-ring-chart.js +106 -0
- package/dist/registry/charts/progress-ring-chart.ts +121 -0
- package/dist/registry/charts/radar-chart.d.ts +88 -0
- package/dist/registry/charts/radar-chart.js +106 -0
- package/dist/registry/charts/radar-chart.ts +117 -0
- package/dist/registry/charts/radial-bar-chart.d.ts +88 -0
- package/dist/registry/charts/radial-bar-chart.js +106 -0
- package/dist/registry/charts/radial-bar-chart.ts +121 -0
- package/dist/registry/charts/scatter-chart.d.ts +88 -0
- package/dist/registry/charts/scatter-chart.js +106 -0
- package/dist/registry/charts/scatter-chart.ts +117 -0
- package/dist/registry/charts/stacked-area-chart.d.ts +88 -0
- package/dist/registry/charts/stacked-area-chart.js +106 -0
- package/dist/registry/charts/stacked-area-chart.ts +123 -0
- package/dist/registry/charts/stacked-bar-chart.d.ts +88 -0
- package/dist/registry/charts/stacked-bar-chart.js +109 -0
- package/dist/registry/charts/stacked-bar-chart.ts +125 -0
- package/dist/registry/charts/treemap-chart.d.ts +88 -0
- package/dist/registry/charts/treemap-chart.js +106 -0
- package/dist/registry/charts/treemap-chart.ts +117 -0
- package/dist/registry/checkbox.d.ts +122 -0
- package/dist/registry/checkbox.js +145 -0
- package/dist/registry/checkbox.ts +160 -0
- package/dist/registry/collapsible.d.ts +105 -0
- package/dist/registry/collapsible.js +125 -0
- package/dist/registry/collapsible.ts +137 -0
- package/dist/registry/color-picker.d.ts +156 -0
- package/dist/registry/color-picker.js +186 -0
- package/dist/registry/color-picker.ts +205 -0
- package/dist/registry/combobox.d.ts +139 -0
- package/dist/registry/combobox.js +158 -0
- package/dist/registry/combobox.ts +170 -0
- package/dist/registry/date-picker.d.ts +156 -0
- package/dist/registry/date-picker.js +190 -0
- package/dist/registry/date-picker.ts +209 -0
- package/dist/registry/file-picker.d.ts +139 -0
- package/dist/registry/file-picker.js +158 -0
- package/dist/registry/file-picker.ts +175 -0
- package/dist/registry/gallery.d.ts +122 -0
- package/dist/registry/gallery.js +144 -0
- package/dist/registry/gallery.ts +160 -0
- package/dist/registry/hello-wave.d.ts +37 -0
- package/dist/registry/hello-wave.js +44 -0
- package/dist/registry/hello-wave.ts +49 -0
- package/dist/registry/hooks/index.d.ts +60 -0
- package/dist/registry/hooks/index.js +75 -0
- package/dist/registry/hooks/index.ts +80 -0
- package/dist/registry/icon.d.ts +139 -0
- package/dist/registry/icon.js +164 -0
- package/dist/registry/icon.ts +173 -0
- package/dist/registry/image.d.ts +156 -0
- package/dist/registry/image.js +180 -0
- package/dist/registry/image.ts +191 -0
- package/dist/registry/index.d.ts +12 -0
- package/dist/registry/index.js +189 -0
- package/dist/registry/index.ts +209 -0
- package/dist/registry/input-otp.d.ts +155 -0
- package/dist/registry/input-otp.js +178 -0
- package/dist/registry/input-otp.ts +197 -0
- package/dist/registry/input.d.ts +164 -0
- package/dist/registry/input.js +192 -0
- package/dist/registry/input.ts +211 -0
- package/dist/registry/link.d.ts +139 -0
- package/dist/registry/link.js +164 -0
- package/dist/registry/link.ts +181 -0
- package/dist/registry/media-picker.d.ts +145 -0
- package/dist/registry/media-picker.js +175 -0
- package/dist/registry/media-picker.ts +192 -0
- package/dist/registry/mode-toggle.d.ts +37 -0
- package/dist/registry/mode-toggle.js +44 -0
- package/dist/registry/mode-toggle.ts +49 -0
- package/dist/registry/onboarding.d.ts +144 -0
- package/dist/registry/onboarding.js +164 -0
- package/dist/registry/onboarding.ts +181 -0
- package/dist/registry/parallax-scrollview.d.ts +125 -0
- package/dist/registry/parallax-scrollview.js +147 -0
- package/dist/registry/parallax-scrollview.ts +168 -0
- package/dist/registry/picker.d.ts +157 -0
- package/dist/registry/picker.js +178 -0
- package/dist/registry/picker.ts +198 -0
- package/dist/registry/popover.d.ts +139 -0
- package/dist/registry/popover.js +164 -0
- package/dist/registry/popover.ts +181 -0
- package/dist/registry/progress.d.ts +139 -0
- package/dist/registry/progress.js +159 -0
- package/dist/registry/progress.ts +172 -0
- package/dist/registry/radio.d.ts +139 -0
- package/dist/registry/radio.js +164 -0
- package/dist/registry/radio.ts +181 -0
- package/dist/registry/schema/index.d.ts +26 -0
- package/dist/registry/schema/index.js +1 -0
- package/dist/registry/schema/index.ts +28 -0
- package/dist/registry/scroll-view.d.ts +156 -0
- package/dist/registry/scroll-view.js +184 -0
- package/dist/registry/scroll-view.ts +203 -0
- package/dist/registry/searchbar.d.ts +139 -0
- package/dist/registry/searchbar.js +164 -0
- package/dist/registry/searchbar.ts +181 -0
- package/dist/registry/separator.d.ts +105 -0
- package/dist/registry/separator.js +124 -0
- package/dist/registry/separator.ts +130 -0
- package/dist/registry/share.d.ts +156 -0
- package/dist/registry/share.js +183 -0
- package/dist/registry/share.ts +202 -0
- package/dist/registry/sheet.d.ts +107 -0
- package/dist/registry/sheet.js +122 -0
- package/dist/registry/sheet.ts +135 -0
- package/dist/registry/skeleton.d.ts +122 -0
- package/dist/registry/skeleton.js +140 -0
- package/dist/registry/skeleton.ts +155 -0
- package/dist/registry/spinner.d.ts +156 -0
- package/dist/registry/spinner.js +184 -0
- package/dist/registry/spinner.ts +205 -0
- package/dist/registry/switch.d.ts +122 -0
- package/dist/registry/switch.js +139 -0
- package/dist/registry/switch.ts +154 -0
- package/dist/registry/table.d.ts +122 -0
- package/dist/registry/table.js +139 -0
- package/dist/registry/table.ts +154 -0
- package/dist/registry/tabs.d.ts +88 -0
- package/dist/registry/tabs.js +101 -0
- package/dist/registry/tabs.ts +112 -0
- package/dist/registry/text.d.ts +71 -0
- package/dist/registry/text.js +82 -0
- package/dist/registry/text.ts +87 -0
- package/dist/registry/theme/index.d.ts +35 -0
- package/dist/registry/theme/index.js +41 -0
- package/dist/registry/theme/index.ts +43 -0
- package/dist/registry/toast.d.ts +122 -0
- package/dist/registry/toast.js +148 -0
- package/dist/registry/toast.ts +164 -0
- package/dist/registry/toggle.d.ts +173 -0
- package/dist/registry/toggle.js +205 -0
- package/dist/registry/toggle.ts +225 -0
- package/dist/registry/video.d.ts +156 -0
- package/dist/registry/video.js +184 -0
- package/dist/registry/video.ts +203 -0
- package/dist/registry/view.d.ts +37 -0
- package/dist/registry/view.js +44 -0
- package/dist/registry/view.ts +47 -0
- package/dist/templates/components/charts/area-chart.tsx +38 -0
- package/dist/templates/components/charts/bar-chart.tsx +130 -0
- package/dist/templates/components/charts/bubble-chart.tsx +205 -0
- package/dist/templates/components/charts/candlestick-chart.tsx +178 -0
- package/dist/templates/components/charts/chart-container.tsx +47 -0
- package/dist/templates/components/charts/column-chart.tsx +130 -0
- package/dist/templates/components/charts/doughnut-chart.tsx +182 -0
- package/dist/templates/components/charts/heatmap-chart.tsx +253 -0
- package/dist/templates/components/charts/line-chart.tsx +349 -0
- package/dist/templates/components/charts/pie-chart.tsx +172 -0
- package/dist/templates/components/charts/polar-area-chart.tsx +185 -0
- package/dist/templates/components/charts/progress-ring-chart.tsx +161 -0
- package/dist/templates/components/charts/radar-chart.tsx +188 -0
- package/dist/templates/components/charts/radial-bar-chart.tsx +216 -0
- package/dist/templates/components/charts/scatter-chart.tsx +176 -0
- package/dist/templates/components/charts/stacked-area-chart.tsx +289 -0
- package/dist/templates/components/charts/stacked-bar-chart.tsx +311 -0
- package/dist/templates/components/charts/treemap-chart.tsx +273 -0
- package/dist/templates/components/ui/accordion.tsx +175 -0
- package/dist/templates/components/ui/action-sheet.tsx +408 -0
- package/dist/templates/components/ui/alert-dialog.tsx +195 -0
- package/dist/templates/components/ui/alert.tsx +208 -0
- package/dist/templates/components/ui/audio-player.tsx +300 -0
- package/dist/templates/components/ui/audio-recorder.tsx +476 -0
- package/dist/templates/components/ui/audio-waveform.tsx +292 -0
- package/dist/templates/components/ui/avatar.tsx +84 -0
- package/dist/templates/components/ui/avoid-keyboard.tsx +49 -0
- package/dist/templates/components/ui/badge.tsx +88 -0
- package/dist/templates/components/ui/bottom-sheet.tsx +352 -0
- package/dist/templates/components/ui/button.tsx +392 -0
- package/dist/templates/components/ui/camera-preview.tsx +410 -0
- package/dist/templates/components/ui/camera.tsx +1008 -0
- package/dist/templates/components/ui/card.tsx +110 -0
- package/dist/templates/components/ui/carousel.tsx +546 -0
- package/dist/templates/components/ui/checkbox.tsx +82 -0
- package/dist/templates/components/ui/collapsible.tsx +46 -0
- package/dist/templates/components/ui/color-picker.tsx +450 -0
- package/dist/templates/components/ui/combobox.tsx +624 -0
- package/dist/templates/components/ui/date-picker.tsx +1147 -0
- package/dist/templates/components/ui/file-picker.tsx +526 -0
- package/dist/templates/components/ui/gallery.tsx +871 -0
- package/dist/templates/components/ui/hello-wave.tsx +69 -0
- package/dist/templates/components/ui/icon.tsx +34 -0
- package/dist/templates/components/ui/image.tsx +174 -0
- package/dist/templates/components/ui/input-otp.tsx +302 -0
- package/dist/templates/components/ui/input.tsx +607 -0
- package/dist/templates/components/ui/link.tsx +143 -0
- package/dist/templates/components/ui/media-picker.tsx +548 -0
- package/dist/templates/components/ui/mode-toggle.tsx +55 -0
- package/dist/templates/components/ui/onboarding.tsx +357 -0
- package/dist/templates/components/ui/parallax-scrollview.tsx +85 -0
- package/dist/templates/components/ui/picker.tsx +476 -0
- package/dist/templates/components/ui/popover.tsx +450 -0
- package/dist/templates/components/ui/progress.tsx +159 -0
- package/dist/templates/components/ui/radio.tsx +133 -0
- package/dist/templates/components/ui/scroll-view.tsx +14 -0
- package/dist/templates/components/ui/searchbar.tsx +241 -0
- package/dist/templates/components/ui/separator.tsx +30 -0
- package/dist/templates/components/ui/share.tsx +304 -0
- package/dist/templates/components/ui/sheet.tsx +302 -0
- package/dist/templates/components/ui/skeleton.tsx +64 -0
- package/dist/templates/components/ui/spinner.tsx +462 -0
- package/dist/templates/components/ui/switch.tsx +78 -0
- package/dist/templates/components/ui/table.tsx +478 -0
- package/dist/templates/components/ui/tabs.tsx +500 -0
- package/dist/templates/components/ui/text.tsx +86 -0
- package/dist/templates/components/ui/toast.tsx +456 -0
- package/dist/templates/components/ui/toggle.tsx +347 -0
- package/dist/templates/components/ui/video.tsx +555 -0
- package/dist/templates/components/ui/view.tsx +14 -0
- package/dist/templates/demo/accordion/accordion-controlled.tsx +55 -0
- package/dist/templates/demo/accordion/accordion-demo.tsx +38 -0
- package/dist/templates/demo/accordion/accordion-faq.tsx +51 -0
- package/dist/templates/demo/accordion/accordion-multiple.tsx +51 -0
- package/dist/templates/demo/accordion/accordion-non-collapsible.tsx +51 -0
- package/dist/templates/demo/accordion/accordion-single.tsx +45 -0
- package/dist/templates/demo/accordion/accordion-styled.tsx +55 -0
- package/dist/templates/demo/action-sheet/action-sheet-demo.tsx +37 -0
- package/dist/templates/demo/action-sheet/action-sheet-destructive.tsx +44 -0
- package/dist/templates/demo/action-sheet/action-sheet-disabled.tsx +50 -0
- package/dist/templates/demo/action-sheet/action-sheet-hook.tsx +63 -0
- package/dist/templates/demo/action-sheet/action-sheet-icons.tsx +47 -0
- package/dist/templates/demo/action-sheet/action-sheet-long.tsx +105 -0
- package/dist/templates/demo/action-sheet/action-sheet-styled.tsx +52 -0
- package/dist/templates/demo/alert/alert-advanced-demo.tsx +132 -0
- package/dist/templates/demo/alert/alert-confirm-demo.tsx +20 -0
- package/dist/templates/demo/alert/alert-custom-demo.tsx +29 -0
- package/dist/templates/demo/alert/alert-demo.tsx +25 -0
- package/dist/templates/demo/alert/alert-error-demo.tsx +17 -0
- package/dist/templates/demo/alert/alert-success-demo.tsx +19 -0
- package/dist/templates/demo/alert/alert-three-button-demo.tsx +33 -0
- package/dist/templates/demo/alert/alert-visual-demo.tsx +22 -0
- package/dist/templates/demo/alert/alert-visual-destructive-demo.tsx +22 -0
- package/dist/templates/demo/alert-dialog/alert-dialog-custom.tsx +40 -0
- package/dist/templates/demo/alert-dialog/alert-dialog-demo.tsx +28 -0
- package/dist/templates/demo/alert-dialog/alert-dialog-destructive.tsx +30 -0
- package/dist/templates/demo/audio-player/audio-player-autoplay.tsx +22 -0
- package/dist/templates/demo/audio-player/audio-player-demo.tsx +21 -0
- package/dist/templates/demo/audio-player/audio-player-minimal.tsx +17 -0
- package/dist/templates/demo/audio-player/audio-player-music.tsx +158 -0
- package/dist/templates/demo/audio-player/audio-player-progress.tsx +17 -0
- package/dist/templates/demo/audio-player/audio-player-styled.tsx +32 -0
- package/dist/templates/demo/audio-player/audio-player-waveform.tsx +17 -0
- package/dist/templates/demo/audio-recorder/audio-recorder-callbacks.tsx +65 -0
- package/dist/templates/demo/audio-recorder/audio-recorder-cloud.tsx +67 -0
- package/dist/templates/demo/audio-recorder/audio-recorder-demo.tsx +27 -0
- package/dist/templates/demo/audio-recorder/audio-recorder-hq.tsx +24 -0
- package/dist/templates/demo/audio-recorder/audio-recorder-interview.tsx +98 -0
- package/dist/templates/demo/audio-recorder/audio-recorder-minimal.tsx +17 -0
- package/dist/templates/demo/audio-recorder/audio-recorder-styled.tsx +29 -0
- package/dist/templates/demo/audio-recorder/audio-recorder-voice.tsx +18 -0
- package/dist/templates/demo/audio-waveform/audio-waveform-compact.tsx +127 -0
- package/dist/templates/demo/audio-waveform/audio-waveform-demo.tsx +56 -0
- package/dist/templates/demo/audio-waveform/audio-waveform-interactive.tsx +114 -0
- package/dist/templates/demo/audio-waveform/audio-waveform-realtime.tsx +223 -0
- package/dist/templates/demo/audio-waveform/audio-waveform-recording.tsx +100 -0
- package/dist/templates/demo/audio-waveform/audio-waveform-styled.tsx +195 -0
- package/dist/templates/demo/avatar/avatar-bordered.tsx +64 -0
- package/dist/templates/demo/avatar/avatar-demo.tsx +13 -0
- package/dist/templates/demo/avatar/avatar-fallback.tsx +25 -0
- package/dist/templates/demo/avatar/avatar-group.tsx +76 -0
- package/dist/templates/demo/avatar/avatar-sizes.tsx +54 -0
- package/dist/templates/demo/avatar/avatar-status.tsx +76 -0
- package/dist/templates/demo/avatar/avatar-styled.tsx +64 -0
- package/dist/templates/demo/avoid-keyboard/avoid-keyboard-chat.tsx +176 -0
- package/dist/templates/demo/avoid-keyboard/avoid-keyboard-demo.tsx +37 -0
- package/dist/templates/demo/avoid-keyboard/avoid-keyboard-duration.tsx +62 -0
- package/dist/templates/demo/avoid-keyboard/avoid-keyboard-form.tsx +175 -0
- package/dist/templates/demo/avoid-keyboard/avoid-keyboard-offset.tsx +31 -0
- package/dist/templates/demo/avoid-keyboard/avoid-keyboard-playground.tsx +252 -0
- package/dist/templates/demo/badge/badge-demo.tsx +15 -0
- package/dist/templates/demo/badge/badge-icons.tsx +33 -0
- package/dist/templates/demo/badge/badge-interactive.tsx +81 -0
- package/dist/templates/demo/badge/badge-notifications.tsx +96 -0
- package/dist/templates/demo/badge/badge-sizes.tsx +104 -0
- package/dist/templates/demo/badge/badge-status.tsx +151 -0
- package/dist/templates/demo/badge/badge-styled.tsx +71 -0
- package/dist/templates/demo/bottom-sheet/bottom-sheet-demo.tsx +31 -0
- package/dist/templates/demo/bottom-sheet/bottom-sheet-form.tsx +72 -0
- package/dist/templates/demo/bottom-sheet/bottom-sheet-list.tsx +57 -0
- package/dist/templates/demo/bottom-sheet/bottom-sheet-menu.tsx +61 -0
- package/dist/templates/demo/bottom-sheet/bottom-sheet-no-dismiss.tsx +41 -0
- package/dist/templates/demo/bottom-sheet/bottom-sheet-snap-points.tsx +37 -0
- package/dist/templates/demo/bottom-sheet/bottom-sheet-styled.tsx +50 -0
- package/dist/templates/demo/bottom-sheet/bottom-sheet-title.tsx +32 -0
- package/dist/templates/demo/button/button-animation.tsx +28 -0
- package/dist/templates/demo/button/button-custom.tsx +52 -0
- package/dist/templates/demo/button/button-demo.tsx +8 -0
- package/dist/templates/demo/button/button-disabled.tsx +21 -0
- package/dist/templates/demo/button/button-icon-only.tsx +26 -0
- package/dist/templates/demo/button/button-loading.tsx +23 -0
- package/dist/templates/demo/button/button-sizes.tsx +19 -0
- package/dist/templates/demo/button/button-variants.tsx +33 -0
- package/dist/templates/demo/button/button-with-icons.tsx +23 -0
- package/dist/templates/demo/camera/camera-custom-controls.tsx +25 -0
- package/dist/templates/demo/camera/camera-demo.tsx +21 -0
- package/dist/templates/demo/camera/camera-picture-only.tsx +17 -0
- package/dist/templates/demo/camera/camera-settings.tsx +29 -0
- package/dist/templates/demo/camera/camera-timer.tsx +22 -0
- package/dist/templates/demo/camera/camera-video.tsx +25 -0
- package/dist/templates/demo/camera/camera-zoom.tsx +21 -0
- package/dist/templates/demo/camera-preview/camera-preview-demo.tsx +5 -0
- package/dist/templates/demo/card/card-demo.tsx +35 -0
- package/dist/templates/demo/card/card-notification.tsx +51 -0
- package/dist/templates/demo/card/card-pricing.tsx +115 -0
- package/dist/templates/demo/card/card-simple.tsx +16 -0
- package/dist/templates/demo/card/card-stats.tsx +33 -0
- package/dist/templates/demo/card/card-with-form.tsx +76 -0
- package/dist/templates/demo/card/card-with-image.tsx +43 -0
- package/dist/templates/demo/carousel/carousel-arrows.tsx +79 -0
- package/dist/templates/demo/carousel/carousel-cards.tsx +146 -0
- package/dist/templates/demo/carousel/carousel-custom-width.tsx +85 -0
- package/dist/templates/demo/carousel/carousel-demo.tsx +57 -0
- package/dist/templates/demo/carousel/carousel-images.tsx +83 -0
- package/dist/templates/demo/carousel/carousel-manual.tsx +215 -0
- package/dist/templates/demo/carousel/carousel-no-indicators.tsx +120 -0
- package/dist/templates/demo/charts/area-chart/area-chart-demo.tsx +33 -0
- package/dist/templates/demo/charts/area-chart/area-chart-interactive.tsx +36 -0
- package/dist/templates/demo/charts/area-chart/area-chart-large.tsx +41 -0
- package/dist/templates/demo/charts/area-chart/area-chart-styled.tsx +51 -0
- package/dist/templates/demo/charts/bar-chart/bar-chart-demo.tsx +31 -0
- package/dist/templates/demo/charts/bar-chart/bar-chart-minimal.tsx +26 -0
- package/dist/templates/demo/charts/bar-chart/bar-chart-sample.tsx +30 -0
- package/dist/templates/demo/charts/bubble-chart/bubble-chart-demo.tsx +34 -0
- package/dist/templates/demo/charts/bubble-chart/bubble-chart-minimal.tsx +26 -0
- package/dist/templates/demo/charts/bubble-chart/bubble-chart-sample.tsx +32 -0
- package/dist/templates/demo/charts/bubble-chart/bubble-chart-styled.tsx +39 -0
- package/dist/templates/demo/charts/candlestick-chart/candlestick-chart-demo.tsx +36 -0
- package/dist/templates/demo/charts/candlestick-chart/candlestick-chart-minimal.tsx +31 -0
- package/dist/templates/demo/charts/candlestick-chart/candlestick-chart-sample.tsx +34 -0
- package/dist/templates/demo/charts/candlestick-chart/candlestick-chart-styled.tsx +38 -0
- package/dist/templates/demo/charts/chart-container/chart-container-demo.tsx +30 -0
- package/dist/templates/demo/charts/chart-container/chart-container-styled.tsx +42 -0
- package/dist/templates/demo/charts/column-chart/column-chart-demo.tsx +31 -0
- package/dist/templates/demo/charts/column-chart/column-chart-large.tsx +42 -0
- package/dist/templates/demo/charts/column-chart/column-chart-sample.tsx +75 -0
- package/dist/templates/demo/charts/column-chart/column-chart-styled.tsx +37 -0
- package/dist/templates/demo/charts/doughnut-chart/doughnut-chart-demo.tsx +32 -0
- package/dist/templates/demo/charts/doughnut-chart/doughnut-chart-large.tsx +36 -0
- package/dist/templates/demo/charts/doughnut-chart/doughnut-chart-sample.tsx +40 -0
- package/dist/templates/demo/charts/doughnut-chart/doughnut-chart-styled.tsx +35 -0
- package/dist/templates/demo/charts/heatmap-chart/heatmap-chart-demo.tsx +41 -0
- package/dist/templates/demo/charts/heatmap-chart/heatmap-chart-large.tsx +66 -0
- package/dist/templates/demo/charts/heatmap-chart/heatmap-chart-sample.tsx +42 -0
- package/dist/templates/demo/charts/heatmap-chart/heatmap-chart-styled.tsx +43 -0
- package/dist/templates/demo/charts/line-chart/line-chart-demo.tsx +34 -0
- package/dist/templates/demo/charts/line-chart/line-chart-interactive.tsx +35 -0
- package/dist/templates/demo/charts/line-chart/line-chart-minimal.tsx +28 -0
- package/dist/templates/demo/charts/line-chart/line-chart-styled.tsx +51 -0
- package/dist/templates/demo/charts/pie-chart/pie-chart-demo.tsx +31 -0
- package/dist/templates/demo/charts/pie-chart/pie-chart-large.tsx +31 -0
- package/dist/templates/demo/charts/pie-chart/pie-chart-sample.tsx +29 -0
- package/dist/templates/demo/charts/pie-chart/pie-chart-styled.tsx +35 -0
- package/dist/templates/demo/charts/polar-area-chart/polar-area-chart-demo.tsx +31 -0
- package/dist/templates/demo/charts/polar-area-chart/polar-area-chart-large.tsx +37 -0
- package/dist/templates/demo/charts/polar-area-chart/polar-area-chart-sample.tsx +44 -0
- package/dist/templates/demo/charts/polar-area-chart/polar-area-chart-styled.tsx +37 -0
- package/dist/templates/demo/charts/progress-ring-chart/progress-ring-chart-demo.tsx +25 -0
- package/dist/templates/demo/charts/progress-ring-chart/progress-ring-chart-large.tsx +26 -0
- package/dist/templates/demo/charts/progress-ring-chart/progress-ring-chart-sample.tsx +26 -0
- package/dist/templates/demo/charts/progress-ring-chart/progress-ring-chart-styled.tsx +26 -0
- package/dist/templates/demo/charts/radar-chart/radar-chart-demo.tsx +31 -0
- package/dist/templates/demo/charts/radar-chart/radar-chart-large.tsx +36 -0
- package/dist/templates/demo/charts/radar-chart/radar-chart-sample.tsx +31 -0
- package/dist/templates/demo/charts/radar-chart/radar-chart-styled.tsx +41 -0
- package/dist/templates/demo/charts/radial-bar-chart/radial-bar-chart-demo.tsx +29 -0
- package/dist/templates/demo/charts/radial-bar-chart/radial-bar-chart-gradient.tsx +40 -0
- package/dist/templates/demo/charts/radial-bar-chart/radial-bar-chart-large.tsx +32 -0
- package/dist/templates/demo/charts/radial-bar-chart/radial-bar-chart-sample.tsx +37 -0
- package/dist/templates/demo/charts/scatter-chart/scatter-chart-demo.tsx +34 -0
- package/dist/templates/demo/charts/scatter-chart/scatter-chart-large.tsx +39 -0
- package/dist/templates/demo/charts/scatter-chart/scatter-chart-sample.tsx +36 -0
- package/dist/templates/demo/charts/scatter-chart/scatter-chart-styled.tsx +42 -0
- package/dist/templates/demo/charts/stacked-area-chart/stacked-area-chart-demo.tsx +35 -0
- package/dist/templates/demo/charts/stacked-area-chart/stacked-area-chart-large.tsx +63 -0
- package/dist/templates/demo/charts/stacked-area-chart/stacked-area-chart-sample.tsx +36 -0
- package/dist/templates/demo/charts/stacked-area-chart/stacked-area-chart-styled.tsx +44 -0
- package/dist/templates/demo/charts/stacked-bar-chart/stacked-bar-chart-demo.tsx +33 -0
- package/dist/templates/demo/charts/stacked-bar-chart/stacked-bar-chart-horizontal.tsx +35 -0
- package/dist/templates/demo/charts/stacked-bar-chart/stacked-bar-chart-large.tsx +42 -0
- package/dist/templates/demo/charts/stacked-bar-chart/stacked-bar-chart-styled.tsx +43 -0
- package/dist/templates/demo/charts/treemap-chart/treemap-chart-demo.tsx +31 -0
- package/dist/templates/demo/charts/treemap-chart/treemap-chart-large.tsx +41 -0
- package/dist/templates/demo/charts/treemap-chart/treemap-chart-sample.tsx +33 -0
- package/dist/templates/demo/charts/treemap-chart/treemap-chart-styled.tsx +32 -0
- package/dist/templates/demo/checkbox/checkbox-custom-styling.tsx +34 -0
- package/dist/templates/demo/checkbox/checkbox-demo.tsx +14 -0
- package/dist/templates/demo/checkbox/checkbox-group.tsx +44 -0
- package/dist/templates/demo/checkbox/checkbox-states.tsx +37 -0
- package/dist/templates/demo/checkbox/checkbox-with-error.tsx +24 -0
- package/dist/templates/demo/checkbox/checkbox-without-label.tsx +8 -0
- package/dist/templates/demo/collapsible/collapsible-demo.tsx +16 -0
- package/dist/templates/demo/collapsible/collapsible-faq.tsx +45 -0
- package/dist/templates/demo/collapsible/collapsible-multiple.tsx +34 -0
- package/dist/templates/demo/collapsible/collapsible-nested.tsx +39 -0
- package/dist/templates/demo/collapsible/collapsible-with-content.tsx +53 -0
- package/dist/templates/demo/color-picker/color-picker-colors.tsx +36 -0
- package/dist/templates/demo/color-picker/color-picker-demo.tsx +17 -0
- package/dist/templates/demo/color-picker/color-picker-disabled.tsx +15 -0
- package/dist/templates/demo/color-picker/color-picker-labeled.tsx +84 -0
- package/dist/templates/demo/color-picker/color-picker-palette.tsx +54 -0
- package/dist/templates/demo/color-picker/color-picker-sizes.tsx +39 -0
- package/dist/templates/demo/color-picker/color-picker-styled.tsx +52 -0
- package/dist/templates/demo/color-picker/color-swatch-demo.tsx +46 -0
- package/dist/templates/demo/combobox/combobox-demo.tsx +44 -0
- package/dist/templates/demo/combobox/combobox-disabled.tsx +44 -0
- package/dist/templates/demo/combobox/combobox-form.tsx +91 -0
- package/dist/templates/demo/combobox/combobox-groups.tsx +51 -0
- package/dist/templates/demo/combobox/combobox-large.tsx +89 -0
- package/dist/templates/demo/combobox/combobox-multiple.tsx +48 -0
- package/dist/templates/demo/combobox/combobox-search.tsx +67 -0
- package/dist/templates/demo/date-picker/date-picker-constraints.tsx +51 -0
- package/dist/templates/demo/date-picker/date-picker-datetime.tsx +17 -0
- package/dist/templates/demo/date-picker/date-picker-demo.tsx +15 -0
- package/dist/templates/demo/date-picker/date-picker-form.tsx +96 -0
- package/dist/templates/demo/date-picker/date-picker-formats.tsx +39 -0
- package/dist/templates/demo/date-picker/date-picker-range.tsx +16 -0
- package/dist/templates/demo/date-picker/date-picker-time.tsx +30 -0
- package/dist/templates/demo/date-picker/date-picker-variants.tsx +37 -0
- package/dist/templates/demo/file-picker/file-picker-controlled.tsx +134 -0
- package/dist/templates/demo/file-picker/file-picker-demo.tsx +16 -0
- package/dist/templates/demo/file-picker/file-picker-images.tsx +30 -0
- package/dist/templates/demo/file-picker/file-picker-info.tsx +192 -0
- package/dist/templates/demo/file-picker/file-picker-single.tsx +35 -0
- package/dist/templates/demo/file-picker/file-picker-styled.tsx +78 -0
- package/dist/templates/demo/file-picker/file-picker-validation.tsx +61 -0
- package/dist/templates/demo/gallery/gallery-controls.tsx +85 -0
- package/dist/templates/demo/gallery/gallery-demo.tsx +66 -0
- package/dist/templates/demo/gallery/gallery-grid.tsx +109 -0
- package/dist/templates/demo/gallery/gallery-info.tsx +70 -0
- package/dist/templates/demo/gallery/gallery-layouts.tsx +109 -0
- package/dist/templates/demo/gallery/gallery-overlay.tsx +89 -0
- package/dist/templates/demo/hello-wave/hello-wave-demo.tsx +6 -0
- package/dist/templates/demo/icon/icon-colors.tsx +39 -0
- package/dist/templates/demo/icon/icon-demo.tsx +7 -0
- package/dist/templates/demo/icon/icon-grid.tsx +69 -0
- package/dist/templates/demo/icon/icon-interactive.tsx +66 -0
- package/dist/templates/demo/icon/icon-sizes.tsx +23 -0
- package/dist/templates/demo/icon/icon-stroke.tsx +34 -0
- package/dist/templates/demo/icon/icon-themed.tsx +57 -0
- package/dist/templates/demo/image/image-content-fit.tsx +67 -0
- package/dist/templates/demo/image/image-demo.tsx +12 -0
- package/dist/templates/demo/image/image-error.tsx +50 -0
- package/dist/templates/demo/image/image-gallery.tsx +65 -0
- package/dist/templates/demo/image/image-loading.tsx +50 -0
- package/dist/templates/demo/image/image-responsive.tsx +53 -0
- package/dist/templates/demo/image/image-sizes.tsx +54 -0
- package/dist/templates/demo/image/image-variants.tsx +46 -0
- package/dist/templates/demo/input/input-demo.tsx +9 -0
- package/dist/templates/demo/input/input-disabled.tsx +18 -0
- package/dist/templates/demo/input/input-form.tsx +159 -0
- package/dist/templates/demo/input/input-grouped.tsx +28 -0
- package/dist/templates/demo/input/input-icons.tsx +30 -0
- package/dist/templates/demo/input/input-right-components.tsx +65 -0
- package/dist/templates/demo/input/input-validation.tsx +39 -0
- package/dist/templates/demo/input/input-variants.tsx +23 -0
- package/dist/templates/demo/input-otp/input-otp-demo.tsx +17 -0
- package/dist/templates/demo/input-otp/input-otp-disabled.tsx +40 -0
- package/dist/templates/demo/input-otp/input-otp-error.tsx +71 -0
- package/dist/templates/demo/input-otp/input-otp-lengths.tsx +25 -0
- package/dist/templates/demo/input-otp/input-otp-masked.tsx +42 -0
- package/dist/templates/demo/input-otp/input-otp-no-cursor.tsx +39 -0
- package/dist/templates/demo/input-otp/input-otp-separator.tsx +61 -0
- package/dist/templates/demo/input-otp/input-otp-styled.tsx +67 -0
- package/dist/templates/demo/link/link-browser.tsx +36 -0
- package/dist/templates/demo/link/link-buttons.tsx +65 -0
- package/dist/templates/demo/link/link-custom.tsx +42 -0
- package/dist/templates/demo/link/link-demo.tsx +13 -0
- package/dist/templates/demo/link/link-external.tsx +13 -0
- package/dist/templates/demo/link/link-styled.tsx +72 -0
- package/dist/templates/demo/link/link-types.tsx +45 -0
- package/dist/templates/demo/media-picker/media-picker-demo.tsx +16 -0
- package/dist/templates/demo/media-picker/media-picker-gallery.tsx +21 -0
- package/dist/templates/demo/media-picker/media-picker-images.tsx +17 -0
- package/dist/templates/demo/media-picker/media-picker-multiple.tsx +31 -0
- package/dist/templates/demo/media-picker/media-picker-preview.tsx +39 -0
- package/dist/templates/demo/media-picker/media-picker-quality.tsx +62 -0
- package/dist/templates/demo/media-picker/media-picker-videos.tsx +17 -0
- package/dist/templates/demo/mode-toggle/mode-toggle-demo.tsx +6 -0
- package/dist/templates/demo/onboarding/onboarding-custom-buttons.tsx +41 -0
- package/dist/templates/demo/onboarding/onboarding-demo.tsx +114 -0
- package/dist/templates/demo/onboarding/onboarding-hook.tsx +97 -0
- package/dist/templates/demo/onboarding/onboarding-images.tsx +70 -0
- package/dist/templates/demo/onboarding/onboarding-no-skip.tsx +62 -0
- package/dist/templates/demo/onboarding/onboarding-no-swipe.tsx +68 -0
- package/dist/templates/demo/onboarding/onboarding-styled.tsx +70 -0
- package/dist/templates/demo/parallax-scrollview/parallax-scrollview-article.tsx +180 -0
- package/dist/templates/demo/parallax-scrollview/parallax-scrollview-custom-height.tsx +44 -0
- package/dist/templates/demo/parallax-scrollview/parallax-scrollview-demo.tsx +39 -0
- package/dist/templates/demo/parallax-scrollview/parallax-scrollview-gradient.tsx +77 -0
- package/dist/templates/demo/parallax-scrollview/parallax-scrollview-product.tsx +181 -0
- package/dist/templates/demo/parallax-scrollview/parallax-scrollview-profile.tsx +144 -0
- package/dist/templates/demo/picker/picker-advanced.tsx +82 -0
- package/dist/templates/demo/picker/picker-demo.tsx +22 -0
- package/dist/templates/demo/picker/picker-form.tsx +81 -0
- package/dist/templates/demo/picker/picker-multiple.tsx +26 -0
- package/dist/templates/demo/picker/picker-searchable.tsx +31 -0
- package/dist/templates/demo/picker/picker-sections.tsx +35 -0
- package/dist/templates/demo/picker/picker-styled.tsx +63 -0
- package/dist/templates/demo/picker/picker-variants.tsx +60 -0
- package/dist/templates/demo/popover/popover-alignment.tsx +92 -0
- package/dist/templates/demo/popover/popover-controlled.tsx +53 -0
- package/dist/templates/demo/popover/popover-custom.tsx +79 -0
- package/dist/templates/demo/popover/popover-demo.tsx +39 -0
- package/dist/templates/demo/popover/popover-form.tsx +78 -0
- package/dist/templates/demo/popover/popover-menu.tsx +143 -0
- package/dist/templates/demo/popover/popover-positioning.tsx +62 -0
- package/dist/templates/demo/progress/progress-animated.tsx +71 -0
- package/dist/templates/demo/progress/progress-demo.tsx +6 -0
- package/dist/templates/demo/progress/progress-heights.tsx +35 -0
- package/dist/templates/demo/progress/progress-interactive.tsx +28 -0
- package/dist/templates/demo/progress/progress-labels.tsx +58 -0
- package/dist/templates/demo/progress/progress-media.tsx +120 -0
- package/dist/templates/demo/progress/progress-steps.tsx +137 -0
- package/dist/templates/demo/radio/radio-demo.tsx +18 -0
- package/dist/templates/demo/radio/radio-disabled.tsx +47 -0
- package/dist/templates/demo/radio/radio-form.tsx +82 -0
- package/dist/templates/demo/radio/radio-horizontal.tsx +19 -0
- package/dist/templates/demo/radio/radio-large.tsx +27 -0
- package/dist/templates/demo/radio/radio-single.tsx +36 -0
- package/dist/templates/demo/radio/radio-styled.tsx +77 -0
- package/dist/templates/demo/scroll-view/scroll-view-demo.tsx +37 -0
- package/dist/templates/demo/scroll-view/scroll-view-horizontal.tsx +57 -0
- package/dist/templates/demo/scroll-view/scroll-view-indicators.tsx +91 -0
- package/dist/templates/demo/scroll-view/scroll-view-inset.tsx +116 -0
- package/dist/templates/demo/scroll-view/scroll-view-nested.tsx +85 -0
- package/dist/templates/demo/scroll-view/scroll-view-refresh.tsx +81 -0
- package/dist/templates/demo/scroll-view/scroll-view-styled.tsx +91 -0
- package/dist/templates/demo/scroll-view/scroll-view-vertical.tsx +50 -0
- package/dist/templates/demo/searchbar/searchbar-demo.tsx +19 -0
- package/dist/templates/demo/searchbar/searchbar-icons.tsx +36 -0
- package/dist/templates/demo/searchbar/searchbar-instant.tsx +58 -0
- package/dist/templates/demo/searchbar/searchbar-loading.tsx +28 -0
- package/dist/templates/demo/searchbar/searchbar-no-clear.tsx +20 -0
- package/dist/templates/demo/searchbar/searchbar-styled.tsx +65 -0
- package/dist/templates/demo/searchbar/searchbar-suggestions.tsx +40 -0
- package/dist/templates/demo/separator/separator-colors.tsx +35 -0
- package/dist/templates/demo/separator/separator-demo.tsx +14 -0
- package/dist/templates/demo/separator/separator-spacing.tsx +26 -0
- package/dist/templates/demo/separator/separator-thickness.tsx +30 -0
- package/dist/templates/demo/separator/separator-vertical.tsx +21 -0
- package/dist/templates/demo/share/share-callbacks.tsx +61 -0
- package/dist/templates/demo/share/share-custom-content.tsx +53 -0
- package/dist/templates/demo/share/share-demo.tsx +22 -0
- package/dist/templates/demo/share/share-hook.tsx +71 -0
- package/dist/templates/demo/share/share-icon-only.tsx +42 -0
- package/dist/templates/demo/share/share-sizes.tsx +28 -0
- package/dist/templates/demo/share/share-url-only.tsx +24 -0
- package/dist/templates/demo/share/share-variants.tsx +38 -0
- package/dist/templates/demo/sheet/sheet-demo.tsx +38 -0
- package/dist/templates/demo/sheet/sheet-filter.tsx +191 -0
- package/dist/templates/demo/sheet/sheet-form.tsx +170 -0
- package/dist/templates/demo/sheet/sheet-left.tsx +39 -0
- package/dist/templates/demo/sheet/sheet-navigation.tsx +111 -0
- package/dist/templates/demo/skeleton/skeleton-card.tsx +39 -0
- package/dist/templates/demo/skeleton/skeleton-demo.tsx +6 -0
- package/dist/templates/demo/skeleton/skeleton-list.tsx +34 -0
- package/dist/templates/demo/skeleton/skeleton-profile.tsx +53 -0
- package/dist/templates/demo/skeleton/skeleton-shapes.tsx +44 -0
- package/dist/templates/demo/skeleton/skeleton-sizes.tsx +14 -0
- package/dist/templates/demo/spinner/spinner-colors.tsx +27 -0
- package/dist/templates/demo/spinner/spinner-demo.tsx +6 -0
- package/dist/templates/demo/spinner/spinner-inline.tsx +25 -0
- package/dist/templates/demo/spinner/spinner-labels.tsx +14 -0
- package/dist/templates/demo/spinner/spinner-overlay.tsx +31 -0
- package/dist/templates/demo/spinner/spinner-sizes.tsx +26 -0
- package/dist/templates/demo/spinner/spinner-speeds.tsx +25 -0
- package/dist/templates/demo/spinner/spinner-variants.tsx +27 -0
- package/dist/templates/demo/switch/switch-colors.tsx +33 -0
- package/dist/templates/demo/switch/switch-demo.tsx +14 -0
- package/dist/templates/demo/switch/switch-disabled.tsx +20 -0
- package/dist/templates/demo/switch/switch-error.tsx +24 -0
- package/dist/templates/demo/switch/switch-settings.tsx +42 -0
- package/dist/templates/demo/switch/switch-simple.tsx +8 -0
- package/dist/templates/demo/table/table-custom-cells.tsx +153 -0
- package/dist/templates/demo/table/table-demo.tsx +90 -0
- package/dist/templates/demo/table/table-loading.tsx +84 -0
- package/dist/templates/demo/table/table-pagination.tsx +114 -0
- package/dist/templates/demo/table/table-search.tsx +168 -0
- package/dist/templates/demo/table/table-sortable.tsx +119 -0
- package/dist/templates/demo/tabs/tabs-demo.tsx +85 -0
- package/dist/templates/demo/tabs/tabs-disabled.tsx +61 -0
- package/dist/templates/demo/tabs/tabs-styled.tsx +105 -0
- package/dist/templates/demo/tabs/tabs-vertical.tsx +61 -0
- package/dist/templates/demo/text/text-colors.tsx +40 -0
- package/dist/templates/demo/text/text-demo.tsx +19 -0
- package/dist/templates/demo/text/text-variants.tsx +60 -0
- package/dist/templates/demo/toast/toast-actions.tsx +51 -0
- package/dist/templates/demo/toast/toast-compact.tsx +66 -0
- package/dist/templates/demo/toast/toast-demo.tsx +18 -0
- package/dist/templates/demo/toast/toast-duration.tsx +68 -0
- package/dist/templates/demo/toast/toast-multiple.tsx +65 -0
- package/dist/templates/demo/toast/toast-variants.tsx +45 -0
- package/dist/templates/demo/toggle/toggle-demo.tsx +13 -0
- package/dist/templates/demo/toggle/toggle-disabled.tsx +23 -0
- package/dist/templates/demo/toggle/toggle-group-multiple.tsx +22 -0
- package/dist/templates/demo/toggle/toggle-group-outline.tsx +23 -0
- package/dist/templates/demo/toggle/toggle-group-single.tsx +22 -0
- package/dist/templates/demo/toggle/toggle-group-vertical.tsx +23 -0
- package/dist/templates/demo/toggle/toggle-sizes.tsx +20 -0
- package/dist/templates/demo/toggle/toggle-text.tsx +28 -0
- package/dist/templates/demo/toggle/toggle-variants.tsx +44 -0
- package/dist/templates/demo/video/video-autoplay-loop.tsx +22 -0
- package/dist/templates/demo/video/video-content-fit.tsx +47 -0
- package/dist/templates/demo/video/video-custom-controls.tsx +28 -0
- package/dist/templates/demo/video/video-demo.tsx +20 -0
- package/dist/templates/demo/video/video-gestures.tsx +34 -0
- package/dist/templates/demo/video/video-native-controls.tsx +20 -0
- package/dist/templates/demo/video/video-sources.tsx +39 -0
- package/dist/templates/demo/video/video-subtitles.tsx +29 -0
- package/dist/templates/demo/view/view-demo.tsx +17 -0
- package/dist/templates/hooks/useBottomTabOverflow.ts +6 -0
- package/dist/templates/hooks/useColor.ts +16 -0
- package/dist/templates/hooks/useColorScheme.ts +1 -0
- package/dist/templates/hooks/useColorScheme.web.ts +21 -0
- package/dist/templates/hooks/useKeyboardHeight.ts +131 -0
- package/dist/templates/hooks/useModeToggle.tsx +50 -0
- package/dist/templates/hooks/useThemeColor.ts +21 -0
- package/dist/templates/start/README.md +198 -0
- package/dist/templates/start/app/(tabs)/(home)/_layout.tsx +43 -0
- package/dist/templates/start/app/(tabs)/(home)/index.tsx +96 -0
- package/dist/templates/start/app/(tabs)/_layout.tsx +68 -0
- package/dist/templates/start/app/(tabs)/_layout.web.tsx +48 -0
- package/dist/templates/start/app/(tabs)/search/_layout.tsx +60 -0
- package/dist/templates/start/app/(tabs)/search/index.tsx +44 -0
- package/dist/templates/start/app/(tabs)/settings/_layout.tsx +42 -0
- package/dist/templates/start/app/(tabs)/settings/index.tsx +105 -0
- package/dist/templates/start/app/+not-found.tsx +24 -0
- package/dist/templates/start/app/_layout.tsx +90 -0
- package/dist/templates/start/app/sheet.tsx +1 -0
- package/dist/templates/start/app.json +50 -0
- package/dist/templates/start/assets/images/icon.png +0 -0
- package/dist/templates/start/assets/images/splash.png +0 -0
- package/dist/templates/start/components/sheet.tsx +79 -0
- package/dist/templates/start/components/ui/avoid-keyboard.tsx +49 -0
- package/dist/templates/start/components/ui/button.tsx +392 -0
- package/dist/templates/start/components/ui/card.tsx +110 -0
- package/dist/templates/start/components/ui/icon.tsx +34 -0
- package/dist/templates/start/components/ui/input-otp.tsx +302 -0
- package/dist/templates/start/components/ui/input.tsx +607 -0
- package/dist/templates/start/components/ui/link.tsx +143 -0
- package/dist/templates/start/components/ui/mode-toggle.tsx +55 -0
- package/dist/templates/start/components/ui/scroll-view.tsx +14 -0
- package/dist/templates/start/components/ui/spinner.tsx +462 -0
- package/dist/templates/start/components/ui/tabs.tsx +500 -0
- package/dist/templates/start/components/ui/text.tsx +86 -0
- package/dist/templates/start/components/ui/view.tsx +14 -0
- package/dist/templates/start/eslint.config.js +10 -0
- package/dist/templates/start/hooks/useColor.ts +16 -0
- package/dist/templates/start/hooks/useColorScheme.ts +1 -0
- package/dist/templates/start/hooks/useColorScheme.web.ts +21 -0
- package/dist/templates/start/hooks/useKeyboardHeight.ts +131 -0
- package/dist/templates/start/hooks/useModeToggle.tsx +88 -0
- package/dist/templates/start/package.json +58 -0
- package/dist/templates/start/providers/search-context.tsx +26 -0
- package/dist/templates/start/theme/colors.ts +184 -0
- package/dist/templates/start/theme/globals.ts +4 -0
- package/dist/templates/start/theme/theme-provider.tsx +59 -0
- package/dist/templates/start/tsconfig.json +17 -0
- package/dist/templates/start-convex/README.md +213 -0
- package/dist/templates/start-convex/app/(tabs)/(home)/_layout.tsx +43 -0
- package/dist/templates/start-convex/app/(tabs)/(home)/index.tsx +96 -0
- package/dist/templates/start-convex/app/(tabs)/_layout.tsx +68 -0
- package/dist/templates/start-convex/app/(tabs)/_layout.web.tsx +48 -0
- package/dist/templates/start-convex/app/(tabs)/search/_layout.tsx +60 -0
- package/dist/templates/start-convex/app/(tabs)/search/index.tsx +44 -0
- package/dist/templates/start-convex/app/(tabs)/settings/_layout.tsx +42 -0
- package/dist/templates/start-convex/app/(tabs)/settings/index.tsx +49 -0
- package/dist/templates/start-convex/app/+not-found.tsx +24 -0
- package/dist/templates/start-convex/app/_layout.tsx +136 -0
- package/dist/templates/start-convex/app/sheet.tsx +1 -0
- package/dist/templates/start-convex/app.json +51 -0
- package/dist/templates/start-convex/assets/images/icon.png +0 -0
- package/dist/templates/start-convex/assets/images/splash.png +0 -0
- package/dist/templates/start-convex/components/auth/apple.tsx +60 -0
- package/dist/templates/start-convex/components/auth/auth.tsx +127 -0
- package/dist/templates/start-convex/components/auth/email-otp.tsx +186 -0
- package/dist/templates/start-convex/components/auth/google.tsx +60 -0
- package/dist/templates/start-convex/components/auth/password.tsx +335 -0
- package/dist/templates/start-convex/components/auth/singout.tsx +36 -0
- package/dist/templates/start-convex/components/sheet.tsx +79 -0
- package/dist/templates/start-convex/components/ui/avoid-keyboard.tsx +49 -0
- package/dist/templates/start-convex/components/ui/button.tsx +392 -0
- package/dist/templates/start-convex/components/ui/card.tsx +110 -0
- package/dist/templates/start-convex/components/ui/icon.tsx +34 -0
- package/dist/templates/start-convex/components/ui/input-otp.tsx +302 -0
- package/dist/templates/start-convex/components/ui/input.tsx +607 -0
- package/dist/templates/start-convex/components/ui/link.tsx +143 -0
- package/dist/templates/start-convex/components/ui/mode-toggle.tsx +55 -0
- package/dist/templates/start-convex/components/ui/scroll-view.tsx +14 -0
- package/dist/templates/start-convex/components/ui/spinner.tsx +462 -0
- package/dist/templates/start-convex/components/ui/tabs.tsx +500 -0
- package/dist/templates/start-convex/components/ui/text.tsx +86 -0
- package/dist/templates/start-convex/components/ui/view.tsx +14 -0
- package/dist/templates/start-convex/convex/README.md +90 -0
- package/dist/templates/start-convex/convex/_generated/api.d.ts +61 -0
- package/dist/templates/start-convex/convex/_generated/api.js +23 -0
- package/dist/templates/start-convex/convex/_generated/dataModel.d.ts +60 -0
- package/dist/templates/start-convex/convex/_generated/server.d.ts +143 -0
- package/dist/templates/start-convex/convex/_generated/server.js +93 -0
- package/dist/templates/start-convex/convex/auth.config.ts +8 -0
- package/dist/templates/start-convex/convex/auth.ts +112 -0
- package/dist/templates/start-convex/convex/http.ts +8 -0
- package/dist/templates/start-convex/convex/passwordReset.ts +69 -0
- package/dist/templates/start-convex/convex/resendOTP.ts +60 -0
- package/dist/templates/start-convex/convex/resendPasswordOTP.ts +64 -0
- package/dist/templates/start-convex/convex/router.ts +5 -0
- package/dist/templates/start-convex/convex/schema.ts +23 -0
- package/dist/templates/start-convex/convex/tsconfig.json +25 -0
- package/dist/templates/start-convex/convex/users.ts +111 -0
- package/dist/templates/start-convex/eslint.config.js +10 -0
- package/dist/templates/start-convex/hooks/useColor.ts +16 -0
- package/dist/templates/start-convex/hooks/useColorScheme.ts +1 -0
- package/dist/templates/start-convex/hooks/useColorScheme.web.ts +21 -0
- package/dist/templates/start-convex/hooks/useKeyboardHeight.ts +131 -0
- package/dist/templates/start-convex/hooks/useModeToggle.tsx +88 -0
- package/dist/templates/start-convex/package.json +64 -0
- package/dist/templates/start-convex/providers/search-context.tsx +26 -0
- package/dist/templates/start-convex/theme/colors.ts +184 -0
- package/dist/templates/start-convex/theme/globals.ts +4 -0
- package/dist/templates/start-convex/theme/theme-provider.tsx +59 -0
- package/dist/templates/start-convex/tsconfig.json +17 -0
- package/dist/templates/theme/colors.ts +205 -0
- package/dist/templates/theme/globals.ts +4 -0
- package/dist/templates/theme/theme-provider.tsx +52 -0
- package/dist/utils/dependencies.d.ts +7 -0
- package/dist/utils/dependencies.js +109 -0
- package/dist/utils/filesystem.d.ts +6 -0
- package/dist/utils/filesystem.js +72 -0
- package/dist/utils/git.d.ts +2 -0
- package/dist/utils/git.js +33 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.js +43 -0
- package/dist/utils/package-manager.d.ts +8 -0
- package/dist/utils/package-manager.js +128 -0
- package/dist/utils/project-config.d.ts +2 -0
- package/dist/utils/project-config.js +46 -0
- package/dist/utils/registry.d.ts +17 -0
- package/dist/utils/registry.js +181 -0
- package/dist/utils/validation.d.ts +16 -0
- package/dist/utils/validation.js +84 -0
- package/package.json +74 -0
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import { execSync } from 'child_process';
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
import { dirname } from 'path';
|
|
8
|
+
import { logger } from '../utils/logger.js';
|
|
9
|
+
import { validateProjectName, validateProjectPath, sanitizeProjectName, } from '../utils/validation.js';
|
|
10
|
+
import { copyTemplate } from '../utils/filesystem.js';
|
|
11
|
+
import { detectPackageManagerFromInvocation, installDependencies, getRunCommand, } from '../utils/package-manager.js';
|
|
12
|
+
// Get __dirname equivalent in ES modules
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = dirname(__filename);
|
|
15
|
+
export async function initConvexCommand(projectName, options = {}) {
|
|
16
|
+
// Show the banner first
|
|
17
|
+
logger.banner();
|
|
18
|
+
logger.header('🚀 Welcome to BNA - Expo React Native Starter with Convex');
|
|
19
|
+
try {
|
|
20
|
+
// Get project name
|
|
21
|
+
let finalProjectName = projectName;
|
|
22
|
+
let useCurrentDirectory = false;
|
|
23
|
+
if (!finalProjectName) {
|
|
24
|
+
const answers = await inquirer.prompt([
|
|
25
|
+
{
|
|
26
|
+
type: 'input',
|
|
27
|
+
name: 'projectName',
|
|
28
|
+
message: 'What is your project name?',
|
|
29
|
+
default: 'bna-convex-app',
|
|
30
|
+
validate: (input) => {
|
|
31
|
+
if (input === '.') {
|
|
32
|
+
return true; // Allow current directory
|
|
33
|
+
}
|
|
34
|
+
const validation = validateProjectName(input);
|
|
35
|
+
return (validation.valid || validation.message || 'Invalid project name');
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
]);
|
|
39
|
+
finalProjectName = answers.projectName;
|
|
40
|
+
}
|
|
41
|
+
// Check if user wants to use current directory
|
|
42
|
+
if (finalProjectName === '.') {
|
|
43
|
+
useCurrentDirectory = true;
|
|
44
|
+
const currentDirName = path.basename(process.cwd());
|
|
45
|
+
// Validate current directory name as project name
|
|
46
|
+
const nameValidation = validateProjectName(currentDirName);
|
|
47
|
+
if (!nameValidation.valid) {
|
|
48
|
+
logger.error(`Current directory name "${currentDirName}" is not a valid project name.`);
|
|
49
|
+
logger.error(nameValidation.message);
|
|
50
|
+
// Ask for a different project name
|
|
51
|
+
const answers = await inquirer.prompt([
|
|
52
|
+
{
|
|
53
|
+
type: 'input',
|
|
54
|
+
name: 'projectName',
|
|
55
|
+
message: 'Please enter a valid project name:',
|
|
56
|
+
default: 'bna-convex-app',
|
|
57
|
+
validate: (input) => {
|
|
58
|
+
const validation = validateProjectName(input);
|
|
59
|
+
return (validation.valid || validation.message || 'Invalid project name');
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
]);
|
|
63
|
+
finalProjectName = answers.projectName;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
finalProjectName = currentDirName;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Validate and sanitize project name
|
|
70
|
+
const nameValidation = validateProjectName(finalProjectName ?? 'bna-convex');
|
|
71
|
+
if (!nameValidation.valid) {
|
|
72
|
+
logger.error(nameValidation.message);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
const sanitizedName = sanitizeProjectName(finalProjectName ?? 'bna-convex');
|
|
76
|
+
let projectPath;
|
|
77
|
+
if (useCurrentDirectory) {
|
|
78
|
+
projectPath = process.cwd();
|
|
79
|
+
// Check if current directory is empty or only contains safe files
|
|
80
|
+
const files = fs.readdirSync(projectPath);
|
|
81
|
+
const safeFiles = [
|
|
82
|
+
'.git',
|
|
83
|
+
'.gitignore',
|
|
84
|
+
'README.md',
|
|
85
|
+
'LICENSE',
|
|
86
|
+
'.DS_Store',
|
|
87
|
+
];
|
|
88
|
+
const conflictingFiles = files.filter((file) => !safeFiles.includes(file));
|
|
89
|
+
if (conflictingFiles.length > 0) {
|
|
90
|
+
logger.warn('Current directory is not empty. Found:');
|
|
91
|
+
conflictingFiles.forEach((file) => logger.plain(` ${file}`));
|
|
92
|
+
const { proceed } = await inquirer.prompt([
|
|
93
|
+
{
|
|
94
|
+
type: 'confirm',
|
|
95
|
+
name: 'proceed',
|
|
96
|
+
message: 'Continue anyway?',
|
|
97
|
+
default: false,
|
|
98
|
+
},
|
|
99
|
+
]);
|
|
100
|
+
if (!proceed) {
|
|
101
|
+
logger.info('Initialization cancelled.');
|
|
102
|
+
process.exit(0);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
projectPath = path.resolve(process.cwd(), sanitizedName);
|
|
108
|
+
// Validate project path
|
|
109
|
+
const pathValidation = validateProjectPath(projectPath);
|
|
110
|
+
if (!pathValidation.valid) {
|
|
111
|
+
logger.error(pathValidation.message);
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Determine package manager based on CLI flags or invocation method
|
|
116
|
+
let packageManager;
|
|
117
|
+
if (options.npm)
|
|
118
|
+
packageManager = 'npm';
|
|
119
|
+
else if (options.yarn)
|
|
120
|
+
packageManager = 'yarn';
|
|
121
|
+
else if (options.pnpm)
|
|
122
|
+
packageManager = 'pnpm';
|
|
123
|
+
else if (options.bun)
|
|
124
|
+
packageManager = 'bun';
|
|
125
|
+
else {
|
|
126
|
+
// Detect from how the CLI was invoked
|
|
127
|
+
packageManager = detectPackageManagerFromInvocation();
|
|
128
|
+
logger.info(`Detected package manager: ${packageManager}`);
|
|
129
|
+
}
|
|
130
|
+
// Create project
|
|
131
|
+
const spinner = ora('Creating your BNA Convex project...').start();
|
|
132
|
+
try {
|
|
133
|
+
// Copy template files
|
|
134
|
+
const templatePath = path.resolve(__dirname, '../../templates/start-convex');
|
|
135
|
+
await copyTemplate(templatePath, projectPath);
|
|
136
|
+
// Update package.json
|
|
137
|
+
await updatePackageJson(projectPath, sanitizedName);
|
|
138
|
+
// Update app.json
|
|
139
|
+
await updateAppJson(projectPath, sanitizedName);
|
|
140
|
+
spinner.succeed('Project created successfully!');
|
|
141
|
+
// Install dependencies
|
|
142
|
+
if (!options.skipInstall) {
|
|
143
|
+
await installDependencies(projectPath, packageManager);
|
|
144
|
+
}
|
|
145
|
+
// Initialize Convex
|
|
146
|
+
if (!options.skipConvex) {
|
|
147
|
+
await initializeConvex(projectPath, packageManager, sanitizedName);
|
|
148
|
+
}
|
|
149
|
+
// Show success message
|
|
150
|
+
showSuccessMessage(sanitizedName, packageManager, options.skipInstall ?? false, options.skipConvex ?? false, useCurrentDirectory);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
spinner.fail('Failed to create project');
|
|
154
|
+
throw error;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
logger.error('An error occurred:', error);
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
async function updatePackageJson(projectPath, projectName) {
|
|
163
|
+
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
164
|
+
try {
|
|
165
|
+
// Read the package.json file
|
|
166
|
+
const fileContent = fs.readFileSync(packageJsonPath, 'utf-8');
|
|
167
|
+
// Parse the JSON content into a JavaScript object
|
|
168
|
+
const packageJson = JSON.parse(fileContent);
|
|
169
|
+
// Update the 'name' property
|
|
170
|
+
packageJson.name = projectName;
|
|
171
|
+
// Convert the object back to a nicely formatted JSON string
|
|
172
|
+
const updatedContent = JSON.stringify(packageJson, null, 2);
|
|
173
|
+
// Write the updated content back to the file
|
|
174
|
+
fs.writeFileSync(packageJsonPath, updatedContent, 'utf-8');
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
logger.error(`Failed to update package.json for project: ${projectName}`);
|
|
178
|
+
logger.debug(error);
|
|
179
|
+
throw new Error('Could not update package.json.');
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async function updateAppJson(projectPath, projectName) {
|
|
183
|
+
const appJsonPath = path.join(projectPath, 'app.json');
|
|
184
|
+
try {
|
|
185
|
+
// Read the file content
|
|
186
|
+
const fileContent = fs.readFileSync(appJsonPath, 'utf-8');
|
|
187
|
+
// Parse the JSON into a JavaScript object
|
|
188
|
+
const appConfig = JSON.parse(fileContent);
|
|
189
|
+
// Modify the desired properties within the 'expo' object
|
|
190
|
+
appConfig.expo.name = projectName;
|
|
191
|
+
appConfig.expo.slug = projectName;
|
|
192
|
+
appConfig.expo.scheme = projectName;
|
|
193
|
+
// Convert the modified object back to a formatted JSON string
|
|
194
|
+
const updatedContent = JSON.stringify(appConfig, null, 2);
|
|
195
|
+
// Write the updated content back to the file
|
|
196
|
+
fs.writeFileSync(appJsonPath, updatedContent, 'utf-8');
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
logger.error(`Failed to update app.json for project: ${projectName}`);
|
|
200
|
+
logger.debug(error);
|
|
201
|
+
// Re-throw the error to stop the initialization process if app.json is crucial
|
|
202
|
+
throw new Error('Could not update app.json.');
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
async function initializeConvex(projectPath, packageManager, projectName) {
|
|
206
|
+
logger.newline();
|
|
207
|
+
logger.info('Initializing Convex...');
|
|
208
|
+
logger.plain('The next steps are interactive. Please follow the prompts from the Convex CLI.');
|
|
209
|
+
logger.newline();
|
|
210
|
+
// --- Initialize Convex Backend ---
|
|
211
|
+
try {
|
|
212
|
+
logger.info('1. Setting up your Convex backend...');
|
|
213
|
+
logger.warn('A browser window will open for you to log in or sign up.');
|
|
214
|
+
execSync('npx convex dev --once', {
|
|
215
|
+
cwd: projectPath,
|
|
216
|
+
stdio: 'inherit',
|
|
217
|
+
});
|
|
218
|
+
logger.success('✅ Convex backend initialized!');
|
|
219
|
+
logger.newline();
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
logger.error('❌ Failed to initialize Convex backend.');
|
|
223
|
+
logger.warn('You can try running "npx convex dev" in your project directory later.');
|
|
224
|
+
logger.debug('Convex init error:', error);
|
|
225
|
+
// Exit here, as the next steps will fail if the backend isn't set up.
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
// --- Initialize Convex Auth ---
|
|
229
|
+
try {
|
|
230
|
+
logger.info('2. Setting up Convex Auth...');
|
|
231
|
+
logger.warn('This will add authentication files to your project. Please follow the prompts.');
|
|
232
|
+
execSync('npx @convex-dev/auth', {
|
|
233
|
+
cwd: projectPath,
|
|
234
|
+
stdio: 'inherit',
|
|
235
|
+
});
|
|
236
|
+
logger.success('✅ Convex Auth configured!');
|
|
237
|
+
logger.newline();
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
logger.error('❌ Failed to set up Convex Auth.');
|
|
241
|
+
logger.warn('You can try running "npx @convex-dev/auth" in your project directory later.');
|
|
242
|
+
logger.debug('Convex Auth error:', error);
|
|
243
|
+
}
|
|
244
|
+
// --- Set EXPO_URL Environment Variable ---
|
|
245
|
+
try {
|
|
246
|
+
logger.info('3. Setting the Expo URL environment variable in Convex...');
|
|
247
|
+
logger.plain('This is required for authentication redirects to work correctly.');
|
|
248
|
+
// Construct the command dynamically with the project name
|
|
249
|
+
const command = `npx convex env set EXPO_URL ${projectName}://`;
|
|
250
|
+
execSync(command, {
|
|
251
|
+
cwd: projectPath,
|
|
252
|
+
stdio: 'inherit', // Show output directly to the user
|
|
253
|
+
});
|
|
254
|
+
logger.success('✅ EXPO_URL environment variable set!');
|
|
255
|
+
logger.newline();
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
logger.error('❌ Failed to set the EXPO_URL environment variable.');
|
|
259
|
+
logger.warn(`You can set it manually by running this command in your project directory:`);
|
|
260
|
+
logger.plain(` npx convex env set EXPO_URL ${projectName}://`);
|
|
261
|
+
logger.debug('Convex env set error:', error);
|
|
262
|
+
}
|
|
263
|
+
// --- Set SITE_URL Environment Variable ---
|
|
264
|
+
try {
|
|
265
|
+
logger.info('4. Setting the SITE_URL environment variable in Convex...');
|
|
266
|
+
logger.plain('This is used for web-based authentication flows.');
|
|
267
|
+
const command = 'npx convex env set SITE_URL http://localhost:3000/';
|
|
268
|
+
execSync(command, {
|
|
269
|
+
cwd: projectPath,
|
|
270
|
+
stdio: 'inherit',
|
|
271
|
+
});
|
|
272
|
+
logger.success('✅ SITE_URL environment variable set!');
|
|
273
|
+
logger.newline();
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
logger.error('❌ Failed to set the SITE_URL environment variable.');
|
|
277
|
+
logger.warn('You can set it manually by running this command in your project directory:');
|
|
278
|
+
logger.plain(' npx convex env set SITE_URL http://localhost:3000/');
|
|
279
|
+
logger.debug('Convex env set error:', error);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
function showSuccessMessage(projectName, packageManager, skipInstall, skipConvex, useCurrentDirectory) {
|
|
283
|
+
logger.newline();
|
|
284
|
+
logger.success(`🎉 Successfully created ${projectName} with Convex!`);
|
|
285
|
+
logger.newline();
|
|
286
|
+
logger.info('Next steps:');
|
|
287
|
+
if (!useCurrentDirectory) {
|
|
288
|
+
logger.plain(` cd ${projectName}`);
|
|
289
|
+
}
|
|
290
|
+
if (skipInstall) {
|
|
291
|
+
const installCommand = packageManager === 'npm'
|
|
292
|
+
? 'npm install'
|
|
293
|
+
: packageManager === 'yarn'
|
|
294
|
+
? 'yarn'
|
|
295
|
+
: packageManager === 'bun'
|
|
296
|
+
? 'bun install'
|
|
297
|
+
: 'pnpm install';
|
|
298
|
+
logger.plain(` ${installCommand}`);
|
|
299
|
+
}
|
|
300
|
+
if (skipConvex) {
|
|
301
|
+
logger.plain(` npx convex dev`);
|
|
302
|
+
logger.plain(` npx @convex-dev/auth`);
|
|
303
|
+
}
|
|
304
|
+
logger.plain(` ${getRunCommand(packageManager, 'start')}`);
|
|
305
|
+
logger.newline();
|
|
306
|
+
logger.info('Available commands:');
|
|
307
|
+
logger.plain(` ${getRunCommand(packageManager, 'start')} Start the development server`);
|
|
308
|
+
logger.plain(` ${getRunCommand(packageManager, 'android')} Run on Android`);
|
|
309
|
+
logger.plain(` ${getRunCommand(packageManager, 'ios')} Run on iOS`);
|
|
310
|
+
logger.plain(` ${getRunCommand(packageManager, 'web')} Run on Web`);
|
|
311
|
+
logger.newline();
|
|
312
|
+
if (!skipConvex) {
|
|
313
|
+
logger.info('Convex commands:');
|
|
314
|
+
logger.plain(` npx convex dev Start Convex development server`);
|
|
315
|
+
logger.plain(` npx convex dashboard Open Convex dashboard`);
|
|
316
|
+
logger.newline();
|
|
317
|
+
}
|
|
318
|
+
logger.info('Happy coding with Convex! 🚀');
|
|
319
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface InitOptions {
|
|
2
|
+
template?: string;
|
|
3
|
+
npm?: boolean;
|
|
4
|
+
yarn?: boolean;
|
|
5
|
+
pnpm?: boolean;
|
|
6
|
+
bun?: boolean;
|
|
7
|
+
skipInstall?: boolean;
|
|
8
|
+
bundleIdentifier?: string;
|
|
9
|
+
runPrebuild?: boolean;
|
|
10
|
+
git?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function initCommand(projectName?: string, options?: InitOptions): Promise<void>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
import { dirname } from 'path';
|
|
7
|
+
import { logger } from '../utils/logger.js';
|
|
8
|
+
import { validateProjectName, validateProjectPath, sanitizeProjectName, } from '../utils/validation.js';
|
|
9
|
+
import { copyTemplate } from '../utils/filesystem.js';
|
|
10
|
+
import { updatePackageJson, updateAppJson } from '../utils/project-config.js';
|
|
11
|
+
import { detectPackageManagerFromInvocation, installDependencies, getRunCommand, getExecCommand, } from '../utils/package-manager.js';
|
|
12
|
+
// Get __dirname equivalent in ES modules
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = dirname(__filename);
|
|
15
|
+
export async function initCommand(projectName, options = {}) {
|
|
16
|
+
// Show the banner first
|
|
17
|
+
logger.banner();
|
|
18
|
+
logger.header('🚀 Welcome to Kynjal - Expo React Native Starter');
|
|
19
|
+
try {
|
|
20
|
+
// Get project name
|
|
21
|
+
let finalProjectName = projectName;
|
|
22
|
+
let useCurrentDirectory = false;
|
|
23
|
+
// Get project name if not provided
|
|
24
|
+
if (!finalProjectName) {
|
|
25
|
+
const answers = await inquirer.prompt([
|
|
26
|
+
{
|
|
27
|
+
type: 'input',
|
|
28
|
+
name: 'projectName',
|
|
29
|
+
message: 'What is your project name?',
|
|
30
|
+
default: 'kynjal-app',
|
|
31
|
+
validate: (input) => {
|
|
32
|
+
if (input === '.') {
|
|
33
|
+
return true; // Allow current directory
|
|
34
|
+
}
|
|
35
|
+
const validation = validateProjectName(input);
|
|
36
|
+
return (validation.valid || validation.message || 'Invalid project name');
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
]);
|
|
40
|
+
finalProjectName = answers.projectName;
|
|
41
|
+
}
|
|
42
|
+
// Check if user wants to use current directory
|
|
43
|
+
if (finalProjectName === '.') {
|
|
44
|
+
useCurrentDirectory = true;
|
|
45
|
+
const currentDirName = path.basename(process.cwd());
|
|
46
|
+
// Validate current directory name as project name
|
|
47
|
+
const nameValidation = validateProjectName(currentDirName);
|
|
48
|
+
if (!nameValidation.valid) {
|
|
49
|
+
logger.error(`Current directory name "${currentDirName}" is not a valid project name.`);
|
|
50
|
+
logger.error(nameValidation.message);
|
|
51
|
+
// Ask for a different project name
|
|
52
|
+
const answers = await inquirer.prompt([
|
|
53
|
+
{
|
|
54
|
+
type: 'input',
|
|
55
|
+
name: 'projectName',
|
|
56
|
+
message: 'Please enter a valid project name:',
|
|
57
|
+
default: 'kynjal-app',
|
|
58
|
+
validate: (input) => {
|
|
59
|
+
const validation = validateProjectName(input);
|
|
60
|
+
return (validation.valid || validation.message || 'Invalid project name');
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
]);
|
|
64
|
+
finalProjectName = answers.projectName;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
finalProjectName = currentDirName;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Validate and sanitize project name
|
|
71
|
+
const sanitizedName = sanitizeProjectName(finalProjectName ?? 'kynjal');
|
|
72
|
+
// Collect missing options
|
|
73
|
+
const questions = [];
|
|
74
|
+
if (!options.bundleIdentifier) {
|
|
75
|
+
questions.push({
|
|
76
|
+
type: 'input',
|
|
77
|
+
name: 'bundleIdentifier',
|
|
78
|
+
message: 'What is your bundle identifier?',
|
|
79
|
+
default: `com.kynjal.${sanitizedName}`,
|
|
80
|
+
validate: (input) => {
|
|
81
|
+
if (/^[a-zA-Z0-9._-]+$/.test(input)) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
return 'Invalid bundle identifier. Use alphanumeric characters, dots, hyphens, or underscores.';
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
if (options.runPrebuild === undefined) {
|
|
89
|
+
questions.push({
|
|
90
|
+
type: 'confirm',
|
|
91
|
+
name: 'runPrebuild',
|
|
92
|
+
message: 'Do you want to run prebuild? (Generates native directories)',
|
|
93
|
+
default: false,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
if (options.git === undefined) {
|
|
97
|
+
questions.push({
|
|
98
|
+
type: 'confirm',
|
|
99
|
+
name: 'git',
|
|
100
|
+
message: 'Do you want to initialize a git repository?',
|
|
101
|
+
default: true,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
if (questions.length > 0) {
|
|
105
|
+
const answers = await inquirer.prompt(questions);
|
|
106
|
+
if (answers.bundleIdentifier)
|
|
107
|
+
options.bundleIdentifier = answers.bundleIdentifier;
|
|
108
|
+
if (answers.runPrebuild !== undefined)
|
|
109
|
+
options.runPrebuild = answers.runPrebuild;
|
|
110
|
+
if (answers.git !== undefined)
|
|
111
|
+
options.git = answers.git;
|
|
112
|
+
}
|
|
113
|
+
const nameValidation = validateProjectName(finalProjectName ?? 'kynjal');
|
|
114
|
+
if (!nameValidation.valid) {
|
|
115
|
+
logger.error(nameValidation.message);
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
let projectPath;
|
|
119
|
+
if (useCurrentDirectory) {
|
|
120
|
+
projectPath = process.cwd();
|
|
121
|
+
const files = fs.readdirSync(projectPath);
|
|
122
|
+
const safeFiles = [
|
|
123
|
+
'.git',
|
|
124
|
+
'.gitignore',
|
|
125
|
+
'README.md',
|
|
126
|
+
'LICENSE',
|
|
127
|
+
'.DS_Store',
|
|
128
|
+
];
|
|
129
|
+
const conflictingFiles = files.filter((file) => !safeFiles.includes(file));
|
|
130
|
+
if (conflictingFiles.length > 0) {
|
|
131
|
+
logger.warn('Current directory is not empty. Found:');
|
|
132
|
+
conflictingFiles.forEach((file) => logger.plain(` ${file}`));
|
|
133
|
+
const { proceed } = await inquirer.prompt([
|
|
134
|
+
{
|
|
135
|
+
type: 'confirm',
|
|
136
|
+
name: 'proceed',
|
|
137
|
+
message: 'Continue anyway?',
|
|
138
|
+
default: false,
|
|
139
|
+
},
|
|
140
|
+
]);
|
|
141
|
+
if (!proceed) {
|
|
142
|
+
logger.info('Initialization cancelled.');
|
|
143
|
+
process.exit(0);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
projectPath = path.resolve(process.cwd(), sanitizedName);
|
|
149
|
+
const pathValidation = validateProjectPath(projectPath);
|
|
150
|
+
if (!pathValidation.valid) {
|
|
151
|
+
logger.error(pathValidation.message);
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
let packageManager;
|
|
156
|
+
if (options.npm)
|
|
157
|
+
packageManager = 'npm';
|
|
158
|
+
else if (options.yarn)
|
|
159
|
+
packageManager = 'yarn';
|
|
160
|
+
else if (options.pnpm)
|
|
161
|
+
packageManager = 'pnpm';
|
|
162
|
+
else if (options.bun)
|
|
163
|
+
packageManager = 'bun';
|
|
164
|
+
else {
|
|
165
|
+
packageManager = detectPackageManagerFromInvocation();
|
|
166
|
+
logger.info(`Detected package manager: ${packageManager}`);
|
|
167
|
+
}
|
|
168
|
+
const spinner = ora('Creating your Kynjal project...').start();
|
|
169
|
+
try {
|
|
170
|
+
let templatePath = path.resolve(__dirname, '../../templates/start');
|
|
171
|
+
if (!fs.existsSync(templatePath)) {
|
|
172
|
+
templatePath = path.resolve(__dirname, '../templates/start');
|
|
173
|
+
}
|
|
174
|
+
await copyTemplate(templatePath, projectPath);
|
|
175
|
+
await updatePackageJson(projectPath, sanitizedName);
|
|
176
|
+
await updateAppJson(projectPath, sanitizedName, options.bundleIdentifier || `com.kynjal.${sanitizedName}`);
|
|
177
|
+
spinner.succeed('Project created successfully!');
|
|
178
|
+
if (!options.skipInstall) {
|
|
179
|
+
await installDependencies(projectPath, packageManager);
|
|
180
|
+
}
|
|
181
|
+
const { configureEas } = await inquirer.prompt([
|
|
182
|
+
{
|
|
183
|
+
type: 'confirm',
|
|
184
|
+
name: 'configureEas',
|
|
185
|
+
message: 'Would you like to configure EAS Build now? (eas build:configure)',
|
|
186
|
+
default: false,
|
|
187
|
+
},
|
|
188
|
+
]);
|
|
189
|
+
if (configureEas) {
|
|
190
|
+
const easSpinner = ora('Configuring EAS Build...').start();
|
|
191
|
+
try {
|
|
192
|
+
const { execSync } = await import('child_process');
|
|
193
|
+
execSync('npx eas-cli build:configure', {
|
|
194
|
+
cwd: projectPath,
|
|
195
|
+
stdio: 'inherit'
|
|
196
|
+
});
|
|
197
|
+
easSpinner.succeed('EAS Build configured successfully!');
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
easSpinner.fail('Failed to configure EAS Build.');
|
|
201
|
+
logger.warn('You can run "eas build:configure" manually later.');
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
const { configureEasUpdates } = await inquirer.prompt([
|
|
205
|
+
{
|
|
206
|
+
type: 'confirm',
|
|
207
|
+
name: 'configureEasUpdates',
|
|
208
|
+
message: 'Would you like to configure EAS Update? (eas update:configure)',
|
|
209
|
+
default: false,
|
|
210
|
+
},
|
|
211
|
+
]);
|
|
212
|
+
if (configureEasUpdates) {
|
|
213
|
+
const easUpdateSpinner = ora('Configuring EAS Update...').start();
|
|
214
|
+
try {
|
|
215
|
+
const { execSync } = await import('child_process');
|
|
216
|
+
execSync('npx eas-cli update:configure', {
|
|
217
|
+
cwd: projectPath,
|
|
218
|
+
stdio: 'inherit'
|
|
219
|
+
});
|
|
220
|
+
// Post-configure logic for app.json to set strict updates policy
|
|
221
|
+
// Using logic similar to provided snippet but ensuring we use fs/path properly
|
|
222
|
+
const appJsonPath = path.join(projectPath, 'app.json');
|
|
223
|
+
const appJsonContent = fs.readFileSync(appJsonPath, 'utf-8');
|
|
224
|
+
const appJson = JSON.parse(appJsonContent);
|
|
225
|
+
if (!appJson.expo.updates) {
|
|
226
|
+
appJson.expo.updates = {};
|
|
227
|
+
}
|
|
228
|
+
const existingUpdates = appJson.expo.updates;
|
|
229
|
+
// Reconstruct object to enforce order
|
|
230
|
+
appJson.expo.updates = {
|
|
231
|
+
url: existingUpdates.url,
|
|
232
|
+
checkAutomatically: 'ON_LOAD',
|
|
233
|
+
fallbackToCacheTimeout: 0,
|
|
234
|
+
};
|
|
235
|
+
// Set runtime version to fixed 1.0.0 as requested
|
|
236
|
+
appJson.expo.runtimeVersion = '1.0.0';
|
|
237
|
+
// Preserve extra EAS fields
|
|
238
|
+
Object.keys(existingUpdates).forEach(key => {
|
|
239
|
+
if (!['url', 'checkAutomatically', 'fallbackToCacheTimeout'].includes(key)) {
|
|
240
|
+
appJson.expo.updates[key] = existingUpdates[key];
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
fs.writeFileSync(appJsonPath, JSON.stringify(appJson, null, 2), 'utf-8');
|
|
244
|
+
easUpdateSpinner.succeed('EAS Update configured successfully!');
|
|
245
|
+
// Intelligent EAS Flow: If Build wasn't configured but Updates was, configure Build now.
|
|
246
|
+
// This ensures "eas build" works since the user has now linked the project to EAS.
|
|
247
|
+
if (!configureEas) {
|
|
248
|
+
const easBuildSpinner = ora('Configuring EAS Build (required for Updates)...').start();
|
|
249
|
+
try {
|
|
250
|
+
execSync('npx eas-cli build:configure', {
|
|
251
|
+
cwd: projectPath,
|
|
252
|
+
stdio: 'inherit'
|
|
253
|
+
});
|
|
254
|
+
easBuildSpinner.succeed('EAS Build configured automatically!');
|
|
255
|
+
}
|
|
256
|
+
catch (buildError) {
|
|
257
|
+
easBuildSpinner.fail('Failed to configure EAS Build automatically.');
|
|
258
|
+
logger.warn('You should run "eas build:configure" manually.');
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
easUpdateSpinner.fail('Failed to configure EAS Update.');
|
|
264
|
+
logger.warn('You can run "eas update:configure" manually later.');
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if (options.git) {
|
|
268
|
+
const { initGit, isGitInstalled } = await import('../utils/git.js');
|
|
269
|
+
if (isGitInstalled()) {
|
|
270
|
+
const gitSpinner = ora('Initializing git repository...').start();
|
|
271
|
+
const success = initGit(projectPath);
|
|
272
|
+
if (success) {
|
|
273
|
+
gitSpinner.succeed('Git repository initialized!');
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
gitSpinner.info('Skipped git initialization (already initialized or failed)');
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// Run prebuild if requested (after EAS configuration)
|
|
281
|
+
if (options.runPrebuild) {
|
|
282
|
+
// Only run prebuild if dependencies are installed or we are not skipping install
|
|
283
|
+
if (!options.skipInstall) {
|
|
284
|
+
const prebuildSpinner = ora('Running expo prebuild...').start();
|
|
285
|
+
try {
|
|
286
|
+
const { execSync } = await import('child_process');
|
|
287
|
+
const prebuildCommand = getExecCommand(packageManager, 'expo prebuild --clean');
|
|
288
|
+
execSync(prebuildCommand, {
|
|
289
|
+
cwd: projectPath,
|
|
290
|
+
stdio: 'inherit',
|
|
291
|
+
});
|
|
292
|
+
prebuildSpinner.succeed('Prebuild completed successfully!');
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
prebuildSpinner.fail('Failed to run prebuild.');
|
|
296
|
+
logger.warn('You can run prebuild manually later.');
|
|
297
|
+
logger.debug(error);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
showSuccessMessage(sanitizedName, packageManager, options.skipInstall ?? false, useCurrentDirectory);
|
|
302
|
+
}
|
|
303
|
+
catch (error) {
|
|
304
|
+
spinner.fail('Failed to create project');
|
|
305
|
+
throw error;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
logger.error('An error occurred:', error);
|
|
310
|
+
process.exit(1);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
function showSuccessMessage(projectName, packageManager, skipInstall, useCurrentDirectory) {
|
|
314
|
+
logger.newline();
|
|
315
|
+
logger.success(`🎉 Successfully created ${projectName}!`);
|
|
316
|
+
logger.newline();
|
|
317
|
+
logger.info('Next steps:');
|
|
318
|
+
if (!useCurrentDirectory) {
|
|
319
|
+
logger.plain(` cd ${projectName}`);
|
|
320
|
+
}
|
|
321
|
+
if (skipInstall) {
|
|
322
|
+
const installCommand = packageManager === 'npm'
|
|
323
|
+
? 'npm install'
|
|
324
|
+
: packageManager === 'yarn'
|
|
325
|
+
? 'yarn'
|
|
326
|
+
: packageManager === 'bun'
|
|
327
|
+
? 'bun install'
|
|
328
|
+
: 'pnpm install';
|
|
329
|
+
logger.plain(` ${installCommand}`);
|
|
330
|
+
}
|
|
331
|
+
logger.plain(` ${getRunCommand(packageManager, 'start')}`);
|
|
332
|
+
logger.newline();
|
|
333
|
+
logger.info('Available commands:');
|
|
334
|
+
logger.plain(` ${getRunCommand(packageManager, 'start')} Start the development server`);
|
|
335
|
+
logger.plain(` ${getRunCommand(packageManager, 'android')} Run on Android`);
|
|
336
|
+
logger.plain(` ${getRunCommand(packageManager, 'ios')} Run on iOS`);
|
|
337
|
+
logger.plain(` ${getRunCommand(packageManager, 'web')} Run on Web`);
|
|
338
|
+
logger.newline();
|
|
339
|
+
logger.info('Happy coding! 🚀');
|
|
340
|
+
}
|
package/dist/index.d.ts
ADDED